diff options
1936 files changed, 330719 insertions, 0 deletions
@@ -0,0 +1,92 @@ +This archive contains pre-configured CodeSynthesis XSD source code +with all its dependencies (except Xerces-C++ and Boost). It allows +you to build the XSD compiler in non-interactive mode (that is, +without answering any configuration questions). + +The following GNU tools are required to build XSD. Any fairly recent +GNU/Linux distribution should have these already installed: + +GNU bash >= 2.00 (bash --version) http://www.gnu.org/software/bash/ +GNU m4 >= 1.4 (m4 --version) http://www.gnu.org/software/m4/ +GNU make >= 3.81 (make --version) http://www.gnu.org/software/make/ +GNU g++ >= 3.4.3 (g++ --version) http://gcc.gnu.org/ + +The build system expects you to have the Xerces-C++ (2.6.0 or later) +as well as Boost filesystem and regex (1.33.1 or later) libraries +built and installed in a location where the C++ compiler looks by +default (normally /usr/lib/ and /usr/local/lib/). Alternatively, you +can provide include (-I) and library (-L) paths for this packages via +the CPPFLAGS and LDFLAGS variables, respectively. + +The build system supports the following variables: + +CXX (defaults to g++ if not set) +AR (defaults to ar if not set) +RANLIB (defaults to ranlib if not set) +CPPFLAGS +CXXFLAGS +LDFALGS +LIBS +BOOST_LIB_SUFFIX +BOOST_LINK_SYSTEM + +For example: + +$ make CXX=g++-4.2 CXXFLAGS=-O3 -j 4 + +The BOOST_LIB_SUFFIX variable allows you to specify the optional +Boost library suffix. For example, if your Boost library names are +in the libboost_regex-gcc41-mt-d.so format, then you will need to +set BOOST_LIB_SUFFIX to -gcc41-mt-d. + +The BOOST_LINK_SYSTEM variable allows you to specify whether the +Boost system library should be explicitly linked to which may be +required by newer linkers. The valid values are 'y' (default) and +'n'. + +If you would like to see the full compiler/linker/etc., command lines, +you can add verbose=1 to the make command line: + +$ make verbose=1 + +After the build is complete, the XSD compiler can be found in the +xsd/xsd/ directory and the runtime headers in the xsd/libxsd/ directory. +You can install the XSD compiler, runtime library, and documentation +with the install target, for example: + +$ make install_prefix=/usr install + +You can fine-tune the installation locations with the following make +variables: + +install_prefix default is /usr/local +install_data_prefix default is install_prefix +install_exec_prefix default is install_prefix + +install_bin_dir default is install_exec_prefix/bin +install_sbin_dir default is install_exec_prefix/sbin +install_lib_dir default is install_exec_prefix/lib + +install_data_dir default is install_data_prefix/share +install_inc_dir default is install_data_prefix/include + +install_doc_dir default is install_data_dir/doc +install_man_dir default is install_data_dir/man +install_info_dir default is install_data_dir/info + +You can also create a distribution package with the XSD compiler binary, +source code for the runtime library and examples, as well as the +documentation using the dist and dist-win targets, for example: + +$ make dist_prefix=./xsd-x.y.z dist + +Or, for Windows: + +$ make dist_prefix=./xsd-x.y.z dist-win + +The build system also supports the clean target: + +$ make clean + +Send bug reports or any other feedback to the xsd-users@codesynthesis.com +mailing list. diff --git a/build-0.3/abspath.make b/build-0.3/abspath.make new file mode 100644 index 0000000..428608c --- /dev/null +++ b/build-0.3/abspath.make @@ -0,0 +1,19 @@ +# file : build/abspath.make +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2004-2010 Code Synthesis Tools CC +# license : GNU GPL v2; see accompanying LICENSE file + +.PHONY: FORCE + +%:: FORCE + @echo $(abspath $@) + +$(MAKEFILE_LIST):: ;@: + +# Remove all default rules. +# +.SUFFIXES: + +ifeq ($(filter -r,$(MAKEFLAGS)),) +MAKEFLAGS += -r +endif diff --git a/build-0.3/bootstrap.make b/build-0.3/bootstrap.make new file mode 100644 index 0000000..c45f952 --- /dev/null +++ b/build-0.3/bootstrap.make @@ -0,0 +1,341 @@ +# file : build/bootstrap.make +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2004-2010 Code Synthesis Tools CC +# license : GNU GPL v2; see accompanying LICENSE file + + + +# First time bootstrap.make is read +# +ifndef %makefile% + +# Configure make. +# + +# Forces make to delete targets whos rebuild commands failed but +# updated the target. +# +.DELETE_ON_ERROR: + +# Remove all built-in rules. +# +.SUFFIXES: + +ifeq ($(filter -r,$(MAKEFLAGS)),) +MAKEFLAGS += -r +endif + + +# Disable implicit phony misfeature. +# +#ifeq ($(filter --no-implicit-phony,$(MAKEFLAGS)),) +#MAKEFLAGS += --no-implicit-phony +#endif + +# Enable second expansion. +# +.SECONDEXPANSION: + +# Force target. Used to force rule executions. +# +.PHONY: FORCE + + +# Export variables that could be useful for configuration scripts. +# +export bld_root +export MAKE + +%replica% := +%foreign% := +%interactive% := t + +# List of realpath'ed include-once files. +# +%included_files% := + +#$(warning init %included_files%: $(%included_files%)) + +# @@ maybe I should set makefile to bootstrap and restore it at the end. +# This way I will be able to use %makefile% below (instead of _self) and +# also it will be consistent. +# + +%makefile% := $(abspath $(firstword $(MAKEFILE_LIST))) +%makefile_realpath% := $(realpath $(%makefile%)) + + +# +# include facility +# + +# Execute makefile search algorithm. Return abspath of the makefile if found +# and empty string otherwise. +# +%frame_exclude% += include-find-makefile +define include-find-makefile +$(if $(wildcard $1),\ +$(abspath $1),\ +$(if $(filter-out /%,$1),\ +$(call include-search-dirs,$1,$(.INCLUDE_DIRS)))) +endef + +# Search for $1 in the list of directoris $2 +# +%frame_exclude% += include-search-dirs +define include-search-dirs +$(if $(strip $2),\ +$(if $(wildcard $(firstword $2)/$1),\ +$(abspath $(firstword $2)/$1),\ +$(call include-search-dirs,$1,$(wordlist 2,$(words $2),$2)))) +endef + +# Test if $1 is a 'foreign' makefile, i.e., does not reside in +# src_root, out_root, or bld_root. +# +%frame_exclude% += include-test-foreign +define include-test-foreign +$(if $(%foreign%),t,\ +$(if $(filter $(bld_root)/% $(src_root)/% $(out_root)/%,$1),,t)) +endef + + +%frame_exclude% += include-body +define include-body +%interactive% := +%makefile% := $(call include-find-makefile,$2) +%makefile_realpath% := $(realpath $(%makefile%)) +%foreign% := $(call include-test-foreign,$(%makefile%)) + +$1 $$(if $$(%makefile%),$$(%makefile%),$2) + +%makefile_realpath% := $3 +%makefile% := $4 +%interactive% := $5 +%foreign% := $6 +endef + +%frame_exclude% += include +define include +$(eval $(foreach f,$1,\ + $(call include-body,\ + include,$f,$(%makefile_realpath%),$(%makefile%),$(%interactive%),$(%foreign%)))) +endef + +%frame_exclude% += -include +define -include +$(eval $(foreach f,$1,\ + $(call include-body,\ + -include,$f,$(%makefile_realpath%),$(%makefile%),$(%interactive%),$(%foreign%)))) +endef + + +# +# include-once +# + +# This one simply delegates to the include directive to get the +# error message. +# +# $1 : include/-include +# $2 : file +# +%frame_exclude% += include-once-failed-body +define include-once-failed-body +$1 $2 +endef + +# +# $1 : include/-include +# $2 : file +# +%frame_exclude% += include-once-file-body +define include-once-file-body +%interactive% := +%makefile% := $2 +%makefile_realpath% := $(realpath $2) +%foreign% := $(call include-test-foreign,$(%makefile%)) + +%included_files% += $$(%makefile_realpath%) + +$1 $2 + +%makefile_realpath% := $3 +%makefile% := $4 +%interactive% := $5 +%foreign% := $6 +endef + + +%frame_exclude% += include-once-file-filter +define include-once-file-filter +$(if $(filter $(realpath $2),$(%included_files%)),,\ + $(call include-once-file-body,\ + $1,$2,$(%makefile_realpath%),$(%makefile%),$(%interactive%),$(%foreign%))) +endef + +# +# $1 : include/-include +# $2 : file +# $6 : value +# + +%frame_exclude% += include-once-value-body +define include-once-value-body +%interactive% := +%makefile% := $2 +%makefile_realpath% := $(realpath $2) +%foreign% := $(call include-test-foreign,$(%makefile%)) + +%include_once_$$(%makefile_realpath%)% += $7 + +$1 $2 + +%makefile_realpath% := $3 +%makefile% := $4 +%interactive% := $5 +%foreign% := $6 +endef + + +%frame_exclude% += include-once-value-filter +define include-once-value-filter +$(if $(filter $3,$(value %include_once_$(realpath $2)%)),,\ + $(call include-once-value-body,\ + $1,$2,$(%makefile_realpath%),$(%makefile%),$(%interactive%),$(%foreign%),$3)) +endef + + +# $1 - include/-include +# $2 - abspath or empty if not found +# $3 - orginal path +# $4 - value [optional] +# +%frame_exclude% += include-once-filter +define include-once-filter +$(if $2,\ +$(if $4,\ +$(call include-once-value-filter,$1,$2,$4),\ +$(call include-once-file-filter,$1,$2)),\ +$(call include-once-failed-body,$1,$3)) +endef + +%frame_exclude% += include-once +define include-once +$(eval $(call include-once-filter,\ +include,$(call include-find-makefile,$1),$1,$(strip $2))) +endef + +%frame_exclude% += -include-once +define -include-once +$(eval $(call include-once-filter,\ +-include,$(call include-find-makefile,$1),$1,$(strip $2))) +endef + + +#$(warning include facility is up) + +endif # %makefile% + +# +# +bld_root := $(abspath $(dir $(lastword $(MAKEFILE_LIST)))) + + +# initialize {src,out}_{root,base} +# +%frame_exclude% += find-bootstrap-base +define find-bootstrap-base +$(if $(findstring $(abspath $(lastword $1)),$(%makefile%)),$2,\ +$(call find-bootstrap-base,\ +$(wordlist 1,$(words $(wordlist 2,$(words $1),$1)),$1),\ +$(lastword $1))) +endef + +src_root := $(abspath $(dir $(call find-bootstrap-base,$(MAKEFILE_LIST)))..) +src_base := $(abspath $(dir $(%makefile%))) + +ifneq ($(src_root),$(src_base)) + +ifeq ($(origin out_root),undefined) + out_root := $(abspath $(patsubst \ + %$(subst $(src_root)/,,$(src_base)),%,$(CURDIR))) +endif + +out_base := $(out_root)/$(subst $(src_root)/,,$(src_base)) + +else + +ifeq ($(origin out_root),undefined) + out_root := $(abspath $(CURDIR)) +endif + +out_base := $(out_root) + +endif + +scf_root := $(src_root)/build +dcf_root := $(out_root)/build + +$(out_root)/%: export out_root := $(out_root) +$(out_root)/%: export src_root := $(src_root) +$(out_root)/%: export scf_root := $(scf_root) +$(out_root)/%: export dcf_root := $(dcf_root) +$(out_root)/%: export project_name := $(project_name) + +$(out_base)/%: out_root := $(out_root) +$(out_base)/%: out_base := $(out_base) +$(out_base)/%: src_base := $(src_base) + +ifdef build_debug + +$(warning "bld root: $(bld_root)") +$(warning "scf root: $(scf_root)") +$(warning "dcf root: $(dcf_root)") +$(warning "src root: $(src_root)") +$(warning "src base: $(src_base)") +$(warning "out root: $(out_root)") +$(warning "out base: $(out_base)") + +endif + +#$(warning paths are set) + +# frame facility +# +$(call include-once,$(bld_root)/frame.make) + +# import facility +# +$(call include-once,$(bld_root)/import.make) + +# Load some common facilities. +# +$(call include-once,$(bld_root)/literals.make) +$(call include-once,$(bld_root)/message.make) +$(call include-once,$(bld_root)/dir.make) + + +# Static configuration. +# +$(call include,$(bld_root)/configuration-static.make) + +ifneq ($(bld_root),$(scf_root)) +$(call -include,$(scf_root)/configuration-static.make) +endif + + +# `disfigure' target. +# +.PHONY: disfigure + +disfigure:: $(build_absolute_clean_target) + +#@@ Is there a better way? +# +ifeq ($(.DEFAULT_GOAL),disfigure) +.DEFAULT_GOAL := +endif + +# Dynamic configuration. +# diff --git a/build-0.3/c/c-d.make b/build-0.3/c/c-d.make new file mode 100644 index 0000000..446d643 --- /dev/null +++ b/build-0.3/c/c-d.make @@ -0,0 +1,10 @@ +# file : build/c/c-d.make +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2004-2010 Code Synthesis Tools CC +# license : GNU GPL v2; see accompanying LICENSE file + +$(call include,$(bld_root)/c/configuration.make) + +ifdef c_id +$(call include-once,$(bld_root)/c/$(c_id)/c-d.make,$(out_base)) +endif diff --git a/build-0.3/c/c-o.make b/build-0.3/c/c-o.make new file mode 100644 index 0000000..0e6a532 --- /dev/null +++ b/build-0.3/c/c-o.make @@ -0,0 +1,11 @@ +# file : build/c/c-o.make +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2004-2010 Code Synthesis Tools CC +# license : GNU GPL v2; see accompanying LICENSE file + +$(call include,$(bld_root)/c/configuration.make) + + +ifdef c_id +$(call include-once,$(bld_root)/c/$(c_id)/c-o.make,$(out_base)) +endif diff --git a/build-0.3/c/configuration-rules.make b/build-0.3/c/configuration-rules.make new file mode 100644 index 0000000..836fa1d --- /dev/null +++ b/build-0.3/c/configuration-rules.make @@ -0,0 +1,19 @@ +# file : build/c/configuration-rules.make +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2004-2010 Code Synthesis Tools CC +# license : GNU GPL v2; see accompanying LICENSE file + +$(dcf_root)/c/configuration-dynamic.make: | $(dcf_root)/c/. + $(call message,,$(bld_root)/c/configure $@ \ +"$(origin c_pp_options)" \ +"$(origin c_options)" \ +"$(origin c_ld_options)" \ +"$(origin c_libs)") + +ifndef %foreign% + +disfigure:: + $(call message,rm $(dcf_root)/c/configuration-dynamic.make,\ +rm -f $(dcf_root)/c/configuration-dynamic.make) + +endif diff --git a/build-0.3/c/configuration-static.make b/build-0.3/c/configuration-static.make new file mode 100644 index 0000000..d95ebfa --- /dev/null +++ b/build-0.3/c/configuration-static.make @@ -0,0 +1,13 @@ +# file : build/c/configuration-static.make +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2004-2010 Code Synthesis Tools CC +# license : GNU GPL v2; see accompanying LICENSE file + +c_h_suffix := h +c_s_suffix := c + +# Get user-supplied static configuration if any. +# +ifneq ($(bld_root),$(scf_root)) +$(call -include,$(scf_root)/c/configuration-static.make) +endif diff --git a/build-0.3/c/configuration.make b/build-0.3/c/configuration.make new file mode 100644 index 0000000..97da2f0 --- /dev/null +++ b/build-0.3/c/configuration.make @@ -0,0 +1,44 @@ +# file : build/c/configuration.make +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2004-2010 Code Synthesis Tools CC +# license : GNU GPL v2; see accompanying LICENSE file + +$(call include-once,$(bld_root)/c/configuration-rules.make,$(dcf_root)) + +# Static configuration. +# +$(call include,$(bld_root)/c/configuration-static.make) + +# Dynamic configuration. +# +c_id := +c_optimize := +c_debug := +c_rpath := + +c_pp_extra_options := +c_extra_options := +c_ld_extra_options := +c_extra_libs := +c_extra_lib_paths := + +$(call -include,$(dcf_root)/c/configuration-dynamic.make) + +ifdef c_id + +$(out_root)/%: c_id := $(c_id) +$(out_root)/%: c_optimize := $(c_optimize) +$(out_root)/%: c_debug := $(c_debug) +$(out_root)/%: c_rpath := $(c_rpath) + +$(out_root)/%: c_pp_extra_options := $(c_pp_extra_options) +$(out_root)/%: c_extra_options := $(c_extra_options) +$(out_root)/%: c_ld_extra_options := $(c_ld_extra_options) +$(out_root)/%: c_extra_libs := $(c_extra_libs) +$(out_root)/%: c_extra_lib_paths := $(c_extra_lib_paths) + +else + +.NOTPARALLEL: + +endif diff --git a/build-0.3/c/configure b/build-0.3/c/configure new file mode 100755 index 0000000..6281fa2 --- /dev/null +++ b/build-0.3/c/configure @@ -0,0 +1,166 @@ +#! /usr/bin/env bash + +# file : build/c/configure +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2004-2010 Code Synthesis Tools CC +# license : GNU GPL v2; see accompanying LICENSE file + +# $1 out file +# $2 origin of the c_pp_options make variable +# $3 origin of the c_options make variable +# $4 origin of the c_ld_options make variable +# $5 origin of the c_libs make variable +# +# bld_root - build root +# project_name - project name +# + +source $bld_root/dialog.bash + +$echo +$echo +$echo "configuring '$project_name'" +$echo +$echo + +$echo +$echo "Please select the C compiler you would like to use:" +$echo +$echo "(1) GNU C (gcc)" +$echo "(2) Intel C (icc)" +$echo "(3) Other C compiler" +$echo + +id=`read_option "gnu intel generic" "gnu"` + +if [ "$id" != "generic" ]; then + + $echo + $echo "Would you like the C compiler to optimize generated code?" + $echo + + optimize=`read_y_n y` + + + $echo + $echo "Would you like the C compiler to generate debug information?" + $echo + + debug=`read_y_n y` + + $echo + $echo "Embed dynamic library paths into executables (rpath)?" + $echo + + rpath=`read_y_n y` + +fi + +# pp_options +# +if [ "$2" != "undefined" ]; then + + pp_options=$c_pp_options + + if [ "$pp_options" ]; then + $echo + $echo "Extra C preprocessor options: $pp_options" + $echo + fi +else + + $echo + $echo "Please enter any extra C preprocessor options." + $echo + + read -e -p "[]: " pp_options +fi + + +# options +# +if [ "$3" != "undefined" ]; then + + options=$c_options + + if [ "$options" ]; then + $echo + $echo "Extra C compiler options: $options" + $echo + fi +else + + $echo + $echo "Please enter any extra C compiler options." + $echo + + read -p "[]: " options +fi + + +# ld_options +# +if [ "$4" != "undefined" ]; then + + ld_options=$c_ld_options + + if [ "$ld_options" ]; then + $echo + $echo "Extra C linker options: $ld_options" + $echo + fi +else + + $echo + $echo "Please enter any extra C linker options." + $echo + + read -e -p "[]: " ld_options +fi + + +# libs +# +if [ "$5" != "undefined" ]; then + + libs=$c_libs + + if [ "$libs" ]; then + $echo + $echo "Extra C libraries: $libs" + $echo + fi +else + + $echo + $echo "Please enter any extra C libraries." + $echo + + read -e -p "[]: " libs +fi + + +# Extract -L paths from the ld options. +# +paths= + +if [ "$ld_options" ]; then + paths=`echo "$ld_options" | sed -e 's/-L *\([^ ]*\)/\\ +-L\1\\ +/g' | sed -e 's/^-L\([^ ]*\)$/\1/' -e t -e d` + paths=`echo $paths | sed -e 's/ /:/g'` +fi + +echo "c_id := $id" >$1 + +if [ "$id" != "generic" ]; then + echo "c_optimize := $optimize" >>$1 + echo "c_debug := $debug" >>$1 + echo "c_rpath := $rpath" >>$1 +fi + +echo "c_pp_extra_options := $pp_options" >>$1 +echo "c_extra_options := $options" >>$1 +echo "c_ld_extra_options := $ld_options" >>$1 +echo "c_extra_libs := $libs" >>$1 +echo "c_extra_lib_paths := $paths" >>$1 diff --git a/build-0.3/c/cpp-options.make b/build-0.3/c/cpp-options.make new file mode 100644 index 0000000..8956d41 --- /dev/null +++ b/build-0.3/c/cpp-options.make @@ -0,0 +1,36 @@ +# file : build/c/cpp-options.make +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2004-2010 Code Synthesis Tools CC +# license : GNU GPL v2; see accompanying LICENSE file + +$(out_base)/%.cpp-options: c-cpp-options-expand-impl = $(if $1,cat $1 >>$2) +$(out_base)/%.cpp-options: c-cpp-options-expand = \ +$(call c-cpp-options-expand-impl,$(filter %.cpp-options,$1),$2) + + +#@@ Asymmetry: I hide creation commands but show removals. +# +$(out_base)/%.cpp-options: c-cpp-options-force-impl = \ +$(if $(subst $1,,$2)$(subst $2,,$1),FORCE) + +$(out_base)/%.cpp-options: c-cpp-options-force = \ +$(call c-cpp-options-force-impl,$(shell if test -f $1; then exec head -n 1 $1; fi),include: $2) + + +# @@ Need to incroporate prefix: into force-check. Then it will probably +# have to be non-optional. +# + +ifeq ($(src_base),$(out_base)) +$(out_base)/%.cpp-options: $$(call c-cpp-options-force,$$@,$$(value)) +else +$(out_base)/%.cpp-options: $$(call c-cpp-options-force,$$@,$$(value)) | $$(dir $$@). +endif + @echo "include: $(value)" >$@ + $(if $(strip $(prefix)),@echo "prefix: $(prefix)" >>$@) + @$(call c-cpp-options-expand,$^,$@) + +# Clean. +# +$(out_base)/%.cpp-options.clean: + $(call message,rm $(basename $@),rm -f $(basename $@)) diff --git a/build-0.3/c/generic/c-d.make b/build-0.3/c/generic/c-d.make new file mode 100644 index 0000000..8f77d50 --- /dev/null +++ b/build-0.3/c/generic/c-d.make @@ -0,0 +1,19 @@ +# file : build/c/generic/c-o.make +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2004-2010 Code Synthesis Tools CC +# license : GNU GPL v2; see accompanying LICENSE file + +$(call include,$(bld_root)/c/generic/configuration.make) + +# Make will try to build dependecies (since they are ultimately included +# files) during configuartion phase without c_generic being discovered +# yet. This is also why dependecies should be included with -include. +# +ifdef c_generic + +.PHONY: $(out_base)/%.o.d.$(c_s_suffix).clean + +$(out_base)/%.o.d.$(c_s_suffix).clean: + @: + +endif diff --git a/build-0.3/c/generic/c-o.make b/build-0.3/c/generic/c-o.make new file mode 100644 index 0000000..7b6e622 --- /dev/null +++ b/build-0.3/c/generic/c-o.make @@ -0,0 +1,40 @@ +# file : build/c/generic/c-o.make +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2004-2010 Code Synthesis Tools CC +# license : GNU GPL v2; see accompanying LICENSE file + +$(call include-once,$(bld_root)/c/cpp-options.make,$(out_base)) +$(call include,$(bld_root)/c/generic/configuration.make) + +$(out_base)/%.o: c := $(c_generic) + +#@@ wrong prefix +# +$(out_base)/%.o: expand-cpp-options-impl = \ +$(if $1,$(shell sed -e 's%include: \(.*\)%\1%' -e t -e d $1)) + +$(out_base)/%.o: expand-cpp-options = \ +$(call expand-cpp-options-impl,$(filter %.cpp-options,$1)) + +ifeq ($(out_base),$(src_base)) +$(out_base)/%.o: $(src_base)/%.$(c_s_suffix) +else +$(out_base)/%.o: $(src_base)/%.$(c_s_suffix) | $$(dir $$@). +endif + $(call message,c $<,$(c) \ +$(cpp_options) $(call expand-cpp-options,$^) $(c_pp_extra_options) \ +$(c_options) $(c_pic_options) $(c_extra_options) -o $@ -c $<) + +ifneq ($(out_base),$(src_base)) + +$(out_base)/%.o: $(out_base)/%.$(c_s_suffix) | $$(dir $$@). + $(call message,c $<,$(c) \ +$(cpp_options) $(call expand-cpp-options,$^) $(c_pp_extra_options) \ +$(c_options) $(c_pic_options) $(c_extra_options) -o $@ -c $<) + +endif + +.PHONY: $(out_base)/%.o.$(c_s_suffix).clean + +$(out_base)/%.o.$(c_s_suffix).clean: + $(call message,rm $$1,rm -f $$1,$(basename $(basename $@))) diff --git a/build-0.3/c/generic/configuration-rules.make b/build-0.3/c/generic/configuration-rules.make new file mode 100644 index 0000000..5fa9117 --- /dev/null +++ b/build-0.3/c/generic/configuration-rules.make @@ -0,0 +1,15 @@ +# file : build/c/generic/configuration-rules.make +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2004-2010 Code Synthesis Tools CC +# license : GNU GPL v2; see accompanying LICENSE file + +$(dcf_root)/c/generic/configuration-dynamic.make: | $(dcf_root)/c/generic/. + $(call message,,$(bld_root)/c/generic/configure $@) + +ifndef %foreign% + +disfigure:: + $(call message,rm $(dcf_root)/c/generic/configuration-dynamic.make,\ +rm -f $(dcf_root)/c/generic/configuration-dynamic.make) + +endif diff --git a/build-0.3/c/generic/configuration-sl-rules.make b/build-0.3/c/generic/configuration-sl-rules.make new file mode 100644 index 0000000..e685be6 --- /dev/null +++ b/build-0.3/c/generic/configuration-sl-rules.make @@ -0,0 +1,15 @@ +# file : build/c/generic/configuration-sl-rules.make +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2004-2010 Code Synthesis Tools CC +# license : GNU GPL v2; see accompanying LICENSE file + +$(dcf_root)/c/generic/configuration-sl-dynamic.make: | $(dcf_root)/c/generic/. + $(call message,,$(bld_root)/c/generic/configure-sl $@) + +ifndef %foreign% + +disfigure:: + $(call message,rm $(dcf_root)/c/generic/configuration-sl-dynamic.make,\ +rm -f $(dcf_root)/c/generic/configuration-sl-dynamic.make) + +endif diff --git a/build-0.3/c/generic/configuration-sl.make b/build-0.3/c/generic/configuration-sl.make new file mode 100644 index 0000000..b3a18a8 --- /dev/null +++ b/build-0.3/c/generic/configuration-sl.make @@ -0,0 +1,21 @@ +# file : build/c/generic/configuration-sl.make +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2004-2010 Code Synthesis Tools CC +# license : GNU GPL v2; see accompanying LICENSE file + +$(call include-once,$(bld_root)/c/generic/configuration-sl-rules.make,$(dcf_root)) + +# Dynamic configuration. +# +c_generic_pic_option := + +$(call -include,$(dcf_root)/c/generic/configuration-sl-dynamic.make) + +ifdef c_generic_pic_option + +$(out_root)/%: c_generic_pic_option := $(c_generic_pic_option) +$(out_root)/%: c_generic_shared_option := $(c_generic_shared_option) + +else +.NOTPARALLEL: +endif diff --git a/build-0.3/c/generic/configuration.make b/build-0.3/c/generic/configuration.make new file mode 100644 index 0000000..95e79f8 --- /dev/null +++ b/build-0.3/c/generic/configuration.make @@ -0,0 +1,22 @@ +# file : build/c/generic/configuration.make +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2004-2010 Code Synthesis Tools CC +# license : GNU GPL v2; see accompanying LICENSE file + +$(call include-once,$(bld_root)/c/generic/configuration-rules.make,$(dcf_root)) + +# Static configuration. +# +ifneq ($(bld_root),$(scf_root)) +$(call -include,$(scf_root)/c/generic/configuration-static.make) +endif + +# Dynamic configuration. +# +c_generic := + +$(call -include,$(dcf_root)/c/generic/configuration-dynamic.make) + +ifndef c_generic +.NOTPARALLEL: +endif diff --git a/build-0.3/c/generic/configure b/build-0.3/c/generic/configure new file mode 100755 index 0000000..76be8df --- /dev/null +++ b/build-0.3/c/generic/configure @@ -0,0 +1,28 @@ +#! /usr/bin/env bash + +# file : build/c/generic/configure +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2004-2010 Code Synthesis Tools CC +# license : GNU GPL v2; see accompanying LICENSE file + +# $1 out file +# +# bld_root - build root +# project_name - project name +# + +source $bld_root/dialog.bash + +$echo +$echo +$echo "configuring '$project_name'" +$echo +$echo + +$echo +$echo "Please enter the C compiler executable you would like to use." +$echo + +c_generic=`read_path --command` + +echo "c_generic := $c_generic" > $1 diff --git a/build-0.3/c/generic/configure-sl b/build-0.3/c/generic/configure-sl new file mode 100755 index 0000000..5500e8b --- /dev/null +++ b/build-0.3/c/generic/configure-sl @@ -0,0 +1,37 @@ +#! /usr/bin/env bash + +# file : build/c/generic/configure-sl +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2004-2010 Code Synthesis Tools CC +# license : GNU GPL v2; see accompanying LICENSE file + +# $1 out file +# +# bld_root - build root +# project_name - project name +# + +source $bld_root/dialog.bash + +$echo +$echo +$echo "configuring '$project_name'" +$echo +$echo + +$echo +$echo "Please enter C compiler option(s) used to build position-" +$echo "independent code (e.g., -fPIC, -Kpic, etc)." +$echo + +read -e -p "[]: " pic_option + +$echo +$echo "Please enter C compiler option(s) used to build shared" +$echo "libraries (e.g., -shared, -G, etc)." +$echo + +read -e -p "[]: " shared_option + +echo "c_generic_pic_option := $pic_option" > $1 +echo "c_generic_shared_option := $shared_option" >> $1 diff --git a/build-0.3/c/generic/o-e.make b/build-0.3/c/generic/o-e.make new file mode 100644 index 0000000..4a88a0f --- /dev/null +++ b/build-0.3/c/generic/o-e.make @@ -0,0 +1,28 @@ +# file : build/c/generic/o-e.make +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2004-2010 Code Synthesis Tools CC +# license : GNU GPL v2; see accompanying LICENSE file + +$(call include,$(bld_root)/c/generic/configuration.make) + +ifneq ($(c_extra_lib_paths),) +vpath %.so $(c_extra_lib_paths) +vpath %.a $(c_extra_lib_paths) +endif + +$(out_base)/%: ld := $(c_generic) +$(out_base)/%: expand-l = $(shell sed -e 's%^rpath:\(.*\)%%' $1) + +ifeq ($(out_base),$(src_base)) +$(out_base)/%: $(out_base)/%.o +else +$(out_base)/%: $(out_base)/%.o | $$(dir $$@). +endif + $(call message,ld $@,$(ld) \ +$(c_extra_options) $(ld_options) $(c_ld_extra_options) -o $@ \ +$(foreach f,$^,$(if $(patsubst %.l,,$f),$f,$(call expand-l,$f))) $(c_extra_libs)) + +.PHONY: $(out_base)/%.o.clean + +$(out_base)/%.o.clean: + $(call message,rm $(basename $(basename $@)),rm -f $(basename $@) $(basename $(basename $@))) diff --git a/build-0.3/c/generic/o-l.make b/build-0.3/c/generic/o-l.make new file mode 100644 index 0000000..cee21af --- /dev/null +++ b/build-0.3/c/generic/o-l.make @@ -0,0 +1,64 @@ +# file : build/c/generic/o-l.make +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2004-2010 Code Synthesis Tools CC +# license : GNU GPL v2; see accompanying LICENSE file + +$(call include,$(bld_root)/c/generic/configuration.make) + +ifeq ($(ld_lib_type),shared) +$(call include,$(bld_root)/c/generic/configuration-sl.make) +endif + +ifneq ($(c_extra_lib_paths),) +vpath %.so $(c_extra_lib_paths) +vpath %.a $(c_extra_lib_paths) +endif + +ifdef ld_lib_type + +.PHONY: $(out_base)/%.l.o.clean + +ifeq ($(ld_lib_type),archive) + +$(out_base)/%.l: ar := $(ld_lib_ar) +$(out_base)/%.l: ar_options ?= -rc + +$(out_base)/%.l: ranlib := $(ld_lib_ranlib) +$(out_base)/%.l: ranlib_options ?= + +ifeq ($(out_base),$(src_base)) +$(out_base)/%.l: +else +$(out_base)/%.l: | $$(dir $$@). +endif + $(call message,ar $@,$(ar) $(ar_options) $(@D)/lib$(basename $(@F)).a $(filter %.o,$^)) + $(call message,,$(ranlib) $(ranlib_options) $(@D)/lib$(basename $(@F)).a) + $(call message,,echo "$(@D)/lib$(basename $(@F)).a" >$@) + $(call message,,echo "$(patsubst %.l,`cat %.l`,$(filter %.a %.so %.l,$^))" | xargs -n 1 echo >>$@) + +$(out_base)/%.l.o.clean: + $(call message,rm $$1,rm -f $$1 $(@D)/$(patsubst %.l.o.clean,lib%.a,$(@F)),$(basename $(basename $@))) + +else + +$(out_base)/%.l: ld := $(c_generic) +$(out_base)/%.l: c_pic_options := $(c_generic_pic_option) +$(out_base)/%.l: expand-l = $(shell sed -e 's%^rpath:\(.*\)%%' $1) + +ifeq ($(out_base),$(src_base)) +$(out_base)/%.l: +else +$(out_base)/%.l: | $$(dir $$@). +endif + $(call message,ld $@,$(ld) $(c_generic_shared_option) \ +$(c_extra_options) $(ld_options) $(c_ld_extra_options) -o $(@D)/lib$(basename $(@F)).so \ +$(foreach f,$^,$(if $(patsubst %.l,,$f),$f,$(call expand-l,$f))) $(c_extra_libs)) + $(call message,,echo "$(@D)/lib$(basename $(@F)).so" >$@) + $(call message,,echo "rpath:$(@D)" >>$@) + $(call message,,echo "$(patsubst %.l,`cat %.l`,$(filter %.a %.so %.l,$^))" | xargs -n 1 echo >>$@) + +$(out_base)/%.l.o.clean: + $(call message,rm $$1,rm -f $$1 $(@D)/$(patsubst %.l.o.clean,lib%.so,$(@F)),$(basename $(basename $@))) + +endif +endif diff --git a/build-0.3/c/gnu/c-d.make b/build-0.3/c/gnu/c-d.make new file mode 100644 index 0000000..d7e6c57 --- /dev/null +++ b/build-0.3/c/gnu/c-d.make @@ -0,0 +1,59 @@ +# file : build/c/gnu/c-o.make +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2004-2010 Code Synthesis Tools CC +# license : GNU GPL v2; see accompanying LICENSE file + +$(call include-once,$(bld_root)/c/cpp-options.make,$(out_base)) +$(call include,$(bld_root)/c/gnu/configuration.make) + +# Make will try to build dependecies (since they are ultimately included +# files) during configuartion phase without c_gnu being discovered yet. +# This is also why dependecies should be included with -include. +# +ifdef c_gnu + +$(out_base)/%.o.d: c := $(c_gnu) +$(out_base)/%.o.d: cpp_options ?= + +#@@ This needs to be shared with c-o. +# +#@@ wrong prefix +# +$(out_base)/%.o.d: expand-cpp-options-impl = \ +$(if $1,$(shell sed -e 's%include: \(.*\)%\1%' -e t -e d $1)) + +$(out_base)/%.o.d: expand-cpp-options = \ +$(call expand-cpp-options-impl,$(filter %.cpp-options,$1)) + +.PRECIOUS: $(out_base)/%.o.d + +ifeq ($(out_base),$(src_base)) +$(out_base)/%.o.d: $(src_base)/%.$(c_s_suffix) +else +$(out_base)/%.o.d: $(src_base)/%.$(c_s_suffix) | $$(dir $$@). +endif + $(call message,,if test -f $@; then mv $@ $@.old; fi && \ +$(c) $(cpp_options) $(call expand-cpp-options,$^) $(c_pp_extra_options) \ +$(c_extra_options) -M -MG -MP -MQ $@ -MQ $(basename $@) $< | \ +$(bld_root)/c/gnu/dep $(out_base) $(filter %.cpp-options,$^) >$@ && \ +if test -f $@.old; then if cmp -s $@ $@.old; then rm -f $@.old && false; \ +else rm -f $@.old && true; fi fi) + +ifneq ($(out_base),$(src_base)) + +$(out_base)/%.o.d: $(out_base)/%.$(c_s_suffix) | $$(dir $$@). + $(call message,,if test -f $@; then mv $@ $@.old; fi && \ +$(c) $(cpp_options) $(call expand-cpp-options,$^) $(c_pp_extra_options) \ +$(c_extra_options) -M -MG -MP -MQ $@ -MQ $(basename $@) $< | \ +$(bld_root)/c/gnu/dep $(out_base) $(filter %.cpp-options,$^) >$@ && \ +if test -f $@.old; then if cmp -s $@ $@.old; then rm -f $@.old && false; \ +else rm -f $@.old && true; fi fi) + +endif + +.PHONY: $(out_base)/%.o.d.$(c_s_suffix).clean + +$(out_base)/%.o.d.$(c_s_suffix).clean: + $(call message,rm $$1,rm -f $$1,$(basename $(basename $@))) + +endif diff --git a/build-0.3/c/gnu/c-o.make b/build-0.3/c/gnu/c-o.make new file mode 100644 index 0000000..9f5ecdd --- /dev/null +++ b/build-0.3/c/gnu/c-o.make @@ -0,0 +1,42 @@ +# file : build/c/gnu/c-o.make +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2004-2010 Code Synthesis Tools CC +# license : GNU GPL v2; see accompanying LICENSE file + +$(call include-once,$(bld_root)/c/cpp-options.make,$(out_base)) +$(call include,$(bld_root)/c/gnu/configuration.make) + +$(out_base)/%.o: c := $(c_gnu) +$(out_base)/%.o: c_options := $(c_gnu_optimization_options) $(c_gnu_debugging_options) + +#@@ wrong prefix +# +$(out_base)/%.o: expand-cpp-options-impl = \ +$(if $1,$(shell sed -e 's%include: \(.*\)%\1%' -e t -e d $1)) + +$(out_base)/%.o: expand-cpp-options = \ +$(call expand-cpp-options-impl,$(filter %.cpp-options,$1)) + +ifeq ($(out_base),$(src_base)) +$(out_base)/%.o: $(src_base)/%.$(c_s_suffix) +else +$(out_base)/%.o: $(src_base)/%.$(c_s_suffix) | $$(dir $$@). +endif + $(call message,c $<,$(c) \ +$(cpp_options) $(call expand-cpp-options,$^) $(c_pp_extra_options) $(c_options) \ +$(c_pic_options) $(subst y,-fexceptions,$(filter y,$(c_exceptions))) $(c_extra_options) -o $@ -c $<) + + +ifneq ($(out_base),$(src_base)) + +$(out_base)/%.o: $(out_base)/%.$(c_s_suffix) | $$(dir $$@). + $(call message,c $<,$(c) \ +$(cpp_options) $(call expand-cpp-options,$^) $(c_pp_extra_options) $(c_options) \ +$(c_pic_options) $(subst y,-fexceptions,$(filter y,$(c_exceptions))) $(c_extra_options) -o $@ -c $<) + +endif + +.PHONY: $(out_base)/%.o.$(c_s_suffix).clean + +$(out_base)/%.o.$(c_s_suffix).clean: + $(call message,rm $$1,rm -f $$1,$(basename $(basename $@))) diff --git a/build-0.3/c/gnu/configuration-rules.make b/build-0.3/c/gnu/configuration-rules.make new file mode 100644 index 0000000..478db2d --- /dev/null +++ b/build-0.3/c/gnu/configuration-rules.make @@ -0,0 +1,15 @@ +# file : build/c/gnu/configuration-rules.make +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2004-2010 Code Synthesis Tools CC +# license : GNU GPL v2; see accompanying LICENSE file + +$(dcf_root)/c/gnu/configuration-dynamic.make: | $(dcf_root)/c/gnu/. + $(call message,,$(bld_root)/c/gnu/configure $@ $(c_optimize)) + +ifndef %foreign% + +disfigure:: + $(call message,rm $(dcf_root)/c/gnu/configuration-dynamic.make,\ +rm -f $(dcf_root)/c/gnu/configuration-dynamic.make) + +endif diff --git a/build-0.3/c/gnu/configuration-static.make b/build-0.3/c/gnu/configuration-static.make new file mode 100644 index 0000000..eb00863 --- /dev/null +++ b/build-0.3/c/gnu/configuration-static.make @@ -0,0 +1,4 @@ +# file : build/c/gnu/configuration-static.make +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2004-2010 Code Synthesis Tools CC +# license : GNU GPL v2; see accompanying LICENSE file diff --git a/build-0.3/c/gnu/configuration.make b/build-0.3/c/gnu/configuration.make new file mode 100644 index 0000000..c2e4a32 --- /dev/null +++ b/build-0.3/c/gnu/configuration.make @@ -0,0 +1,34 @@ +# file : build/c/gnu/configuration.make +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2004-2010 Code Synthesis Tools CC +# license : GNU GPL v2; see accompanying LICENSE file + +$(call include-once,$(bld_root)/c/gnu/configuration-rules.make,$(dcf_root)) + +# Static configuration. +# +$(call include,$(bld_root)/c/gnu/configuration-static.make) + +ifneq ($(bld_root),$(scf_root)) +$(call -include,$(scf_root)/c/gnu/configuration-static.make) +endif + +# Dynamic configuration. +# +c_gnu := +c_gnu_optimization_options := + +$(call -include,$(dcf_root)/c/gnu/configuration-dynamic.make) + +ifdef c_gnu + +c_gnu_debugging_options := $(if $(findstring y,$(c_debug)),-g) + +$(out_root)/%: c_gnu_debugging_options := $(c_gnu_debugging_options) +$(out_root)/%: c_gnu_optimization_options := $(c_gnu_optimization_options) + +else + +.NOTPARALLEL: + +endif diff --git a/build-0.3/c/gnu/configure b/build-0.3/c/gnu/configure new file mode 100755 index 0000000..5695ba4 --- /dev/null +++ b/build-0.3/c/gnu/configure @@ -0,0 +1,55 @@ +#! /usr/bin/env bash + +# file : build/c/gnu/configure +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2004-2010 Code Synthesis Tools CC +# license : GNU GPL v2; see accompanying LICENSE file + +# $1 out file +# $2 optimize (y/n) +# +# bld_root - build root +# project_name - project name +# + + +source $bld_root/dialog.bash + +$echo +$echo +$echo "configuring '$project_name'" +$echo +$echo + +$echo +$echo "Please enter the gcc binary you would like to use, for example 'gcc-3.4'," +$echo "'/usr/local/bin/gcc' or 'distcc gcc'." +$echo + +c_gnu=`read_path --command gcc` +c_gnu_libraries=`$c_gnu -print-search-dirs | sed -e 's/libraries: =//p' -e d` + + +optimization= + +if [ "$2" == "y" ]; then + + $echo + $echo "Please select the optimization level you would like to use:" + $echo + $echo "(1) -O1 [Tries to reduce code size and execution time, without" + $echo " performing any optimizations that take a great deal of" + $echo " compilation time.]" + $echo "(2) -O2 [Performs nearly all supported optimizations that do not" + $echo " involve a space-speed tradeoff.]" + $echo "(3) -O3 [Optimize even more.]" + $echo "(4) -Os [Optimize for size.]" + $echo + + optimization=`read_option "-O1 -O2 -O3 -Os" "-O2"` + +fi + +echo "c_gnu := $c_gnu" > $1 +echo "c_gnu_libraries := $c_gnu_libraries" >> $1 +echo "c_gnu_optimization_options := $optimization" >> $1 diff --git a/build-0.3/c/gnu/dep b/build-0.3/c/gnu/dep new file mode 100755 index 0000000..1286ce2 --- /dev/null +++ b/build-0.3/c/gnu/dep @@ -0,0 +1,58 @@ +#! /usr/bin/env bash + +# file : build/c/gnu/dep +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2004-2010 Code Synthesis Tools CC +# license : GNU GPL v2; see accompanying LICENSE file + +# Post-process generated dependency information. +# +# $1 current project's $(out_base) +# $2 - $N optional .cpp-options files + +out_base=$1 +shift + +files=$* + +#echo $out_base +#echo $files + +script= + +function gen_script () +{ + while [ "$1" ]; do + prefix=$1 + shift + + path=$1 + shift + + # Besides unresolved paths also replace default installation + # targets (/usr/include and /usr/local/include). + # + script="$script"\ +"s \\ $prefix \\ $path$prefix g;"\ +"s \\ /usr/include/$prefix \\ $path$prefix g;"\ +"s \\ /usr/local/include/$prefix \\ $path$prefix g;"\ +"s ^$prefix $path$prefix ;"\ +"s ^/usr/include/$prefix $path$prefix ;"\ +"s ^/usr/local/include/$prefix $path$prefix ;" + done +} + +if [ "$files" ]; then + prefixes=`sed -e 's%^prefix: \(.*\)$%\1%' -e t -e d $files` + gen_script $prefixes +fi + +# The last part of the script translates all file names that don't start +# with / or . (that is, local generated files) to files in $out_base. Note +# that it is assumed that such files are never installed and therefore there +# is no way to get around the situation where this file is picket up from +# some other place (e.g., /usr/include). +# +epilogue="s% \([^/. \\\\]\)% $out_base/\1%g;s%^\([^/. ].*:\)%$out_base/\1%" + +exec sed -e "$script$epilogue" diff --git a/build-0.3/c/gnu/o-e.make b/build-0.3/c/gnu/o-e.make new file mode 100644 index 0000000..a1da582 --- /dev/null +++ b/build-0.3/c/gnu/o-e.make @@ -0,0 +1,40 @@ +# file : build/c/gnu/o-e.make +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2004-2010 Code Synthesis Tools CC +# license : GNU GPL v2; see accompanying LICENSE file + +$(call include,$(bld_root)/c/gnu/configuration.make) + +#@@ should it be lib%.so? +# +ifneq ($(c_extra_lib_paths),) +vpath %.so $(c_extra_lib_paths) +vpath %.a $(c_extra_lib_paths) +endif + +ifneq ($(c_gnu_libraries),) +vpath %.so $(c_gnu_libraries) +vpath %.a $(c_gnu_libraries) +endif + +$(out_base)/%: ld := $(c_gnu) +$(out_base)/%: ld_options := $(c_gnu_optimization_options) $(c_gnu_debugging_options) $(c_ld_extra_options) + +$(out_base)/%: expand-l = $(if $(subst n,,$(c_rpath)),\ +$(shell sed -e 's%^rpath:\(.*\)%-Wl,-rpath,\1%' $1),\ +$(shell sed -e 's%^rpath:\(.*\)%%' $1)) + +ifeq ($(out_base),$(src_base)) +$(out_base)/%: $(out_base)/%.o +else +$(out_base)/%: $(out_base)/%.o | $$(dir $$@). +endif + $(call message,ld $@,$(ld) \ +$(c_extra_options) $(ld_options) $(c_ld_extra_options) -o $@ \ +$(foreach f,$^,$(if $(patsubst %.l,,$f),$f,$(call expand-l,$f))) $(c_extra_libs)) + + +.PHONY: $(out_base)/%.o.clean + +$(out_base)/%.o.clean: + $(call message,rm $(basename $(basename $@)),rm -f $(basename $@) $(basename $(basename $@))) diff --git a/build-0.3/c/gnu/o-l.make b/build-0.3/c/gnu/o-l.make new file mode 100644 index 0000000..5e66650 --- /dev/null +++ b/build-0.3/c/gnu/o-l.make @@ -0,0 +1,71 @@ +# file : build/c/gnu/o-l.make +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2004-2010 Code Synthesis Tools CC +# license : GNU GPL v2; see accompanying LICENSE file + +$(call include,$(bld_root)/c/gnu/configuration.make) + +ifneq ($(c_extra_lib_paths),) +vpath %.so $(c_extra_lib_paths) +vpath %.a $(c_extra_lib_paths) +endif + +ifneq ($(c_gnu_libraries),) +vpath %.so $(c_gnu_libraries) +vpath %.a $(c_gnu_libraries) +endif + +ifdef ld_lib_type + +.PHONY: $(out_base)/%.l.o.clean + +ifeq ($(ld_lib_type),archive) + +$(out_base)/%.l: ar := $(ld_lib_ar) +$(out_base)/%.l: ar_options ?= -rc + +$(out_base)/%.l: ranlib := $(ld_lib_ranlib) +$(out_base)/%.l: ranlib_options ?= + +ifeq ($(out_base),$(src_base)) +$(out_base)/%.l: +else +$(out_base)/%.l: | $$(dir $$@). +endif + $(call message,ar $@,$(ar) $(ar_options) $(@D)/lib$(basename $(@F)).a $(filter %.o,$^)) + $(call message,,$(ranlib) $(ranlib_options) $(@D)/lib$(basename $(@F)).a) + $(call message,,echo "$(@D)/lib$(basename $(@F)).a" >$@) + $(call message,,echo "$(patsubst %.l,`cat %.l`,$(filter %.a %.so %.l,$^))" | xargs -n 1 echo >>$@) + +$(out_base)/%.l.o.clean: + $(call message,rm $$1,rm -f $$1 $(@D)/$(patsubst %.l.o.clean,lib%.a,$(@F)),$(basename $(basename $@))) + +else + +$(out_base)/%.l: ld := $(c_gnu) +$(out_base)/%.l: ld_options := $(c_gnu_optimization_options) $(c_gnu_debugging_options) +$(out_base)/%.l: c_pic_options := -fPIC +$(out_base)/%.l: comma_ := , + +$(out_base)/%.l: expand-l = $(if $(subst n,,$(c_rpath)),\ +$(shell sed -e 's%^rpath:\(.*\)%-Wl,-rpath,\1%' $1),\ +$(shell sed -e 's%^rpath:\(.*\)%%' $1)) + +ifeq ($(out_base),$(src_base)) +$(out_base)/%.l: +else +$(out_base)/%.l: | $$(dir $$@). +endif + $(call message,ld $@,$(ld) -shared \ +$(c_extra_options) $(ld_options) $(c_ld_extra_options) \ +-o $(@D)/lib$(basename $(@F)).so -Wl$(comma_)-soname=lib$(basename $(@F)).so \ +$(foreach f,$^,$(if $(patsubst %.l,,$f),$f,$(call expand-l,$f))) $(c_extra_libs)) + $(call message,,echo "$(@D)/lib$(basename $(@F)).so" >$@) + $(call message,,echo "rpath:$(@D)" >>$@) + $(call message,,echo "$(patsubst %.l,`cat %.l`,$(filter %.a %.so %.l,$^))" | xargs -n 1 echo >>$@) + +$(out_base)/%.l.o.clean: + $(call message,rm $$1,rm -f $$1 $(@D)/$(patsubst %.l.o.clean,lib%.so,$(@F)),$(basename $(basename $@))) + +endif +endif diff --git a/build-0.3/c/intel/c-d.make b/build-0.3/c/intel/c-d.make new file mode 100644 index 0000000..aa6a559 --- /dev/null +++ b/build-0.3/c/intel/c-d.make @@ -0,0 +1,59 @@ +# file : build/c/intel/c-o.make +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2004-2010 Code Synthesis Tools CC +# license : GNU GPL v2; see accompanying LICENSE file + +$(call include-once,$(bld_root)/c/cpp-options.make,$(out_base)) +$(call include,$(bld_root)/c/intel/configuration.make) + +# Make will try to build dependecies (since they are ultimately included +# files) during configuartion phase without c_intel being discovered yet. +# This is also why dependecies should be included with -include. +# +ifdef c_intel + +$(out_base)/%.o.d: c := $(c_intel) +$(out_base)/%.o.d: cpp_options ?= + +#@@ This needs to be shared with c-o. +# +#@@ wrong prefix +# +$(out_base)/%.o.d: expand-cpp-options-impl = \ +$(if $1,$(shell sed -e 's%include: \(.*\)%\1%' -e t -e d $1)) + +$(out_base)/%.o.d: expand-cpp-options = \ +$(call expand-cpp-options-impl,$(filter %.cpp-options,$1)) + +.PRECIOUS: $(out_base)/%.o.d + +ifeq ($(out_base),$(src_base)) +$(out_base)/%.o.d: $(src_base)/%.$(c_s_suffix) +else +$(out_base)/%.o.d: $(src_base)/%.$(c_s_suffix) | $$(dir $$@). +endif + $(call message,,if test -f $@; then mv $@ $@.old; fi && \ +$(c) $(cpp_options) $(call expand-cpp-options,$^) $(c_pp_extra_options) \ +$(c_extra_options) -M -MG -MP -MQ $@ -MQ $(basename $@) $< | \ +$(bld_root)/c/intel/dep $(out_base) $(filter %.cpp-options,$^) >$@ && \ +if test -f $@.old; then if cmp -s $@ $@.old; then rm -f $@.old && false; \ +else rm -f $@.old && true; fi fi) + +ifneq ($(out_base),$(src_base)) + +$(out_base)/%.o.d: $(out_base)/%.$(c_s_suffix) | $$(dir $$@). + $(call message,,if test -f $@; then mv $@ $@.old; fi && \ +$(c) $(cpp_options) $(call expand-cpp-options,$^) $(c_pp_extra_options) \ +$(c_extra_options) -M -MG -MP -MQ $@ -MQ $(basename $@) $< | \ +$(bld_root)/c/intel/dep $(out_base) $(filter %.cpp-options,$^) >$@ && \ +if test -f $@.old; then if cmp -s $@ $@.old; then rm -f $@.old && false; \ +else rm -f $@.old && true; fi fi) + +endif + +.PHONY: $(out_base)/%.o.d.$(c_s_suffix).clean + +$(out_base)/%.o.d.$(c_s_suffix).clean: + $(call message,rm $$1,rm -f $$1,$(basename $(basename $@))) + +endif diff --git a/build-0.3/c/intel/c-o.make b/build-0.3/c/intel/c-o.make new file mode 100644 index 0000000..3e359aa --- /dev/null +++ b/build-0.3/c/intel/c-o.make @@ -0,0 +1,41 @@ +# file : build/c/intel/c-o.make +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2004-2010 Code Synthesis Tools CC +# license : GNU GPL v2; see accompanying LICENSE file + +$(call include-once,$(bld_root)/c/cpp-options.make,$(out_base)) +$(call include,$(bld_root)/c/intel/configuration.make) + +$(out_base)/%.o: c := $(c_intel) +$(out_base)/%.o: c_options := $(c_intel_optimization_options) $(c_intel_debugging_options) + +#@@ wrong prefix +# +$(out_base)/%.o: expand-cpp-options-impl = \ +$(if $1,$(shell sed -e 's%include: \(.*\)%\1%' -e t -e d $1)) + +$(out_base)/%.o: expand-cpp-options = \ +$(call expand-cpp-options-impl,$(filter %.cpp-options,$1)) + +ifeq ($(out_base),$(src_base)) +$(out_base)/%.o: $(src_base)/%.$(c_s_suffix) +else +$(out_base)/%.o: $(src_base)/%.$(c_s_suffix) | $$(dir $$@). +endif + $(call message,c $<,$(c) \ +$(cpp_options) $(call expand-cpp-options,$^) $(c_pp_extra_options) $(c_options) \ +$(c_pic_options) $(subst y,-fexceptions,$(filter y,$(c_exceptions))) $(c_extra_options) -o $@ -c $<) + +ifneq ($(out_base),$(src_base)) + +$(out_base)/%.o: $(out_base)/%.$(c_s_suffix) | $$(dir $$@). + $(call message,c $<,$(c) \ +$(cpp_options) $(call expand-cpp-options,$^) $(c_pp_extra_options) $(c_options) \ +$(c_pic_options) $(subst y,-fexceptions,$(filter y,$(c_exceptions))) $(c_extra_options) -o $@ -c $<) + +endif + +.PHONY: $(out_base)/%.o.$(c_s_suffix).clean + +$(out_base)/%.o.$(c_s_suffix).clean: + $(call message,rm $$1,rm -f $$1,$(basename $(basename $@))) diff --git a/build-0.3/c/intel/configuration-rules.make b/build-0.3/c/intel/configuration-rules.make new file mode 100644 index 0000000..e464e00 --- /dev/null +++ b/build-0.3/c/intel/configuration-rules.make @@ -0,0 +1,15 @@ +# file : build/c/intel/configuration-rules.make +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2004-2010 Code Synthesis Tools CC +# license : GNU GPL v2; see accompanying LICENSE file + +$(dcf_root)/c/intel/configuration-dynamic.make: | $(dcf_root)/c/intel/. + $(call message,,$(bld_root)/c/intel/configure $@ $(c_optimize)) + +ifndef %foreign% + +disfigure:: + $(call message,rm $(dcf_root)/c/intel/configuration-dynamic.make,\ +rm -f $(dcf_root)/c/intel/configuration-dynamic.make) + +endif diff --git a/build-0.3/c/intel/configuration-static.make b/build-0.3/c/intel/configuration-static.make new file mode 100644 index 0000000..29f44b1 --- /dev/null +++ b/build-0.3/c/intel/configuration-static.make @@ -0,0 +1,4 @@ +# file : build/c/intel/configuration-static.make +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2004-2010 Code Synthesis Tools CC +# license : GNU GPL v2; see accompanying LICENSE file diff --git a/build-0.3/c/intel/configuration.make b/build-0.3/c/intel/configuration.make new file mode 100644 index 0000000..5e3e38f --- /dev/null +++ b/build-0.3/c/intel/configuration.make @@ -0,0 +1,34 @@ +# file : build/c/intel/configuration.make +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2004-2010 Code Synthesis Tools CC +# license : GNU GPL v2; see accompanying LICENSE file + +$(call include-once,$(bld_root)/c/intel/configuration-rules.make,$(dcf_root)) + +# Static configuration. +# +$(call include,$(bld_root)/c/intel/configuration-static.make) + +ifneq ($(bld_root),$(scf_root)) +$(call -include,$(scf_root)/c/intel/configuration-static.make) +endif + +# Dynamic configuration. +# +c_intel := +c_intel_optimization_options := + +$(call -include,$(dcf_root)/c/intel/configuration-dynamic.make) + +ifdef c_intel + +c_intel_debugging_options := $(if $(findstring y,$(c_debug)),-g) + +$(out_root)/%: c_intel_debugging_options := $(c_intel_debugging_options) +$(out_root)/%: c_intel_optimization_options := $(c_intel_optimization_options) + +else + +.NOTPARALLEL: + +endif diff --git a/build-0.3/c/intel/configure b/build-0.3/c/intel/configure new file mode 100755 index 0000000..0d1382d --- /dev/null +++ b/build-0.3/c/intel/configure @@ -0,0 +1,52 @@ +#! /usr/bin/env bash + +# file : build/c/intel/configure +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2004-2010 Code Synthesis Tools CC +# license : GNU GPL v2; see accompanying LICENSE file + +# $1 out file +# $2 optimize (y/n) +# +# bld_root - build root +# project_name - project name +# + + +source $bld_root/dialog.bash + +$echo +$echo +$echo "configuring '$project_name'" +$echo +$echo + +$echo +$echo "Please enter the icc binary you would like to use, for example " +$echo "'/opt/intel_cc_80/bin/icc'." +$echo + +c_intel=`read_path --command icc` +c_intel_libraries=`$c_intel -print-search-dirs | sed -e 's/libraries: =//p' -e d` + +# Intel optimizes by default. +# +optimization=-O0 + +if [ "$2" == "y" ]; then + + $echo + $echo "Please select the optimization level you would like to use:" + $echo + $echo "(1) -O1 [Enable optimizations.]" + $echo "(2) -O2 [Same as -O1.]" + $echo "(3) -O3 [As -O2 plus more aggressive optimizations that may not" + $echo " improve performance for all programs.]" + $echo + + optimization=`read_option "-O1 -O2 -O3" "-O2"` +fi + +echo "c_intel := $c_intel" > $1 +echo "c_intel_libraries := $c_intel_libraries" >> $1 +echo "c_intel_optimization_options := $optimization" >> $1 diff --git a/build-0.3/c/intel/dep b/build-0.3/c/intel/dep new file mode 100755 index 0000000..70f3b79 --- /dev/null +++ b/build-0.3/c/intel/dep @@ -0,0 +1,58 @@ +#! /usr/bin/env bash + +# file : build/c/intel/dep +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2004-2010 Code Synthesis Tools CC +# license : GNU GPL v2; see accompanying LICENSE file + +# Post-process generated dependency information. +# +# $1 current project's $(out_base) +# $2 - $N optional .cpp-options files + +out_base=$1 +shift + +files=$* + +#echo $out_base +#echo $files + +script= + +function gen_script () +{ + while [ "$1" ]; do + prefix=$1 + shift + + path=$1 + shift + + # Besides unresolved paths also replace default installation + # targets (/usr/include and /usr/local/include). + # + script="$script"\ +"s \\ $prefix \\ $path$prefix g;"\ +"s \\ /usr/include/$prefix \\ $path$prefix g;"\ +"s \\ /usr/local/include/$prefix \\ $path$prefix g;"\ +"s ^$prefix $path$prefix ;"\ +"s ^/usr/include/$prefix $path$prefix ;"\ +"s ^/usr/local/include/$prefix $path$prefix ;" + done +} + +if [ "$files" ]; then + prefixes=`sed -e 's%^prefix: \(.*\)$%\1%' -e t -e d $files` + gen_script $prefixes +fi + +# The last part of the script translates all file names that don't start +# with / or . (that is, local generated files) to files in $out_base. Note +# that it is assumed that such files are never installed and therefore there +# is no way to get around the situation where this file is picket up from +# some other place (e.g., /usr/include). +# +epilogue="s% \([^/. \\\\]\)% $out_base/\1%g;s%^\([^/. ].*:\)%$out_base/\1%" + +exec sed -e "$script$epilogue" diff --git a/build-0.3/c/intel/o-e.make b/build-0.3/c/intel/o-e.make new file mode 100644 index 0000000..7442637 --- /dev/null +++ b/build-0.3/c/intel/o-e.make @@ -0,0 +1,39 @@ +# file : build/c/intel/o-e.make +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2004-2010 Code Synthesis Tools CC +# license : GNU GPL v2; see accompanying LICENSE file + +$(call include,$(bld_root)/c/intel/configuration.make) + +#@@ should it be lib%.so? +# +ifneq ($(c_extra_lib_paths),) +vpath %.so $(c_extra_lib_paths) +vpath %.a $(c_extra_lib_paths) +endif + +ifneq ($(c_intel_libraries),) +vpath %.so $(c_intel_libraries) +vpath %.a $(c_intel_libraries) +endif + +$(out_base)/%: ld := $(c_intel) +$(out_base)/%: ld_options := $(c_intel_optimization_options) $(c_intel_debugging_options) $(c_ld_extra_options) + +$(out_base)/%: expand-l = $(if $(subst n,,$(c_rpath)),\ +$(shell sed -e 's%^rpath:\(.*\)%-Wl,-rpath,\1%' $1),\ +$(shell sed -e 's%^rpath:\(.*\)%%' $1)) + +ifeq ($(out_base),$(src_base)) +$(out_base)/%: $(out_base)/%.o +else +$(out_base)/%: $(out_base)/%.o | $$(dir $$@). +endif + $(call message,ld $@,$(ld) \ +$(c_extra_options) $(ld_options) $(c_ld_extra_options) -o $@ \ +$(foreach f,$^,$(if $(patsubst %.l,,$f),$f,$(call expand-l,$f))) $(c_extra_libs)) + +.PHONY: $(out_base)/%.o.clean + +$(out_base)/%.o.clean: + $(call message,rm $(basename $(basename $@)),rm -f $(basename $@) $(basename $(basename $@))) diff --git a/build-0.3/c/intel/o-l.make b/build-0.3/c/intel/o-l.make new file mode 100644 index 0000000..818a4ca --- /dev/null +++ b/build-0.3/c/intel/o-l.make @@ -0,0 +1,71 @@ +# file : build/c/intel/o-l.make +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2004-2010 Code Synthesis Tools CC +# license : GNU GPL v2; see accompanying LICENSE file + +$(call include,$(bld_root)/c/intel/configuration.make) + +ifneq ($(c_extra_lib_paths),) +vpath %.so $(c_extra_lib_paths) +vpath %.a $(c_extra_lib_paths) +endif + +ifneq ($(c_intel_libraries),) +vpath %.so $(c_intel_libraries) +vpath %.a $(c_intel_libraries) +endif + +ifdef ld_lib_type + +.PHONY: $(out_base)/%.l.o.clean + +ifeq ($(ld_lib_type),archive) + +$(out_base)/%.l: ar := $(ld_lib_ar) +$(out_base)/%.l: ar_options ?= -rc + +$(out_base)/%.l: ranlib := $(ld_lib_ranlib) +$(out_base)/%.l: ranlib_options ?= + +ifeq ($(out_base),$(src_base)) +$(out_base)/%.l: +else +$(out_base)/%.l: | $$(dir $$@). +endif + $(call message,ar $@,$(ar) $(ar_options) $(@D)/lib$(basename $(@F)).a $(filter %.o,$^)) + $(call message,,$(ranlib) $(ranlib_options) $(@D)/lib$(basename $(@F)).a) + $(call message,,echo "$(@D)/lib$(basename $(@F)).a" >$@) + $(call message,,echo "$(patsubst %.l,`cat %.l`,$(filter %.a %.so %.l,$^))" | xargs -n 1 echo >>$@) + +$(out_base)/%.l.o.clean: + $(call message,rm $$1,rm -f $$1 $(@D)/$(patsubst %.l.o.clean,lib%.a,$(@F)),$(basename $(basename $@))) + +else + +$(out_base)/%.l: ld := $(c_intel) +$(out_base)/%.l: ld_options := $(c_intel_optimization_options) $(c_intel_debugging_options) +$(out_base)/%.l: c_pic_options := -fPIC +$(out_base)/%.l: comma_ := , + +$(out_base)/%.l: expand-l = $(if $(subst n,,$(c_rpath)),\ +$(shell sed -e 's%^rpath:\(.*\)%-Wl,-rpath,\1%' $1),\ +$(shell sed -e 's%^rpath:\(.*\)%%' $1)) + +ifeq ($(out_base),$(src_base)) +$(out_base)/%.l: +else +$(out_base)/%.l: | $$(dir $$@). +endif + $(call message,ld $@,$(ld) -shared \ +$(c_extra_options) $(ld_options) $(c_ld_extra_options) \ +-o $(@D)/lib$(basename $(@F)).so -Wl$(comma_)-soname=lib$(basename $(@F)).so \ +$(foreach f,$^,$(if $(patsubst %.l,,$f),$f,$(call expand-l,$f))) $(c_extra_libs)) + $(call message,,echo "$(@D)/lib$(basename $(@F)).so" >$@) + $(call message,,echo "rpath:$(@D)" >>$@) + $(call message,,echo "$(patsubst %.l,`cat %.l`,$(filter %.a %.so %.l,$^))" | xargs -n 1 echo >>$@) + +$(out_base)/%.l.o.clean: + $(call message,rm $$1,rm -f $$1 $(@D)/$(patsubst %.l.o.clean,lib%.so,$(@F)),$(basename $(basename $@))) + +endif +endif diff --git a/build-0.3/c/o-e.make b/build-0.3/c/o-e.make new file mode 100644 index 0000000..10469a4 --- /dev/null +++ b/build-0.3/c/o-e.make @@ -0,0 +1,10 @@ +# file : build/c/o-e.make +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2004-2010 Code Synthesis Tools CC +# license : GNU GPL v2; see accompanying LICENSE file + +$(call include,$(bld_root)/c/configuration.make) + +ifdef c_id +$(call include-once,$(bld_root)/c/$(c_id)/o-e.make,$(out_base)) +endif diff --git a/build-0.3/c/o-l.make b/build-0.3/c/o-l.make new file mode 100644 index 0000000..5ee8a0f --- /dev/null +++ b/build-0.3/c/o-l.make @@ -0,0 +1,11 @@ +# file : build/c/o-l.make +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2004-2010 Code Synthesis Tools CC +# license : GNU GPL v2; see accompanying LICENSE file + +$(call include,$(bld_root)/ld/configuration-lib.make) +$(call include,$(bld_root)/c/configuration.make) + +ifdef c_id +$(call include-once,$(bld_root)/c/$(c_id)/o-l.make,$(out_base)) +endif diff --git a/build-0.3/clean.make b/build-0.3/clean.make new file mode 100644 index 0000000..0cea632 --- /dev/null +++ b/build-0.3/clean.make @@ -0,0 +1,17 @@ +# file : build/clean.make +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2004-2010 Code Synthesis Tools CC +# license : GNU GPL v2; see accompanying LICENSE file + +#@@ Maybe create file aliases.make for standard aliases +# plus check for interactivity? What if some targets +# are not defined? +# + +ifdef %interactive% + +.PHONY: clean + +clean: $(out_base)/.clean + +endif diff --git a/build-0.3/configuration-static.make b/build-0.3/configuration-static.make new file mode 100644 index 0000000..3e8b727 --- /dev/null +++ b/build-0.3/configuration-static.make @@ -0,0 +1,9 @@ +# file : build/configuration-static.make +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2004-2010 Code Synthesis Tools CC +# license : GNU GPL v2; see accompanying LICENSE file + +# Name of the target that cleans absolutely everything. Used as +# a prerequisite of `disfigure' target. +# +build_absolute_clean_target := clean diff --git a/build-0.3/cxx/configuration-rules.make b/build-0.3/cxx/configuration-rules.make new file mode 100644 index 0000000..354791e --- /dev/null +++ b/build-0.3/cxx/configuration-rules.make @@ -0,0 +1,19 @@ +# file : build/cxx/configuration-rules.make +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2004-2010 Code Synthesis Tools CC +# license : GNU GPL v2; see accompanying LICENSE file + +$(dcf_root)/cxx/configuration-dynamic.make: | $(dcf_root)/cxx/. + $(call message,,$(bld_root)/cxx/configure $@ \ +"$(origin cxx_pp_options)" \ +"$(origin cxx_options)" \ +"$(origin cxx_ld_options)" \ +"$(origin cxx_libs)") + +ifndef %foreign% + +disfigure:: + $(call message,rm $(dcf_root)/cxx/configuration-dynamic.make,\ +rm -f $(dcf_root)/cxx/configuration-dynamic.make) + +endif diff --git a/build-0.3/cxx/configuration-static.make b/build-0.3/cxx/configuration-static.make new file mode 100644 index 0000000..b1339bf --- /dev/null +++ b/build-0.3/cxx/configuration-static.make @@ -0,0 +1,15 @@ +# file : build/cxx/configuration-static.make +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2004-2010 Code Synthesis Tools CC +# license : GNU GPL v2; see accompanying LICENSE file + +cxx_h_suffix := hxx +cxx_t_suffix := txx +cxx_i_suffix := ixx +cxx_s_suffix := cxx + +# Get user-supplied static configuration if any. +# +ifneq ($(bld_root),$(scf_root)) +$(call -include,$(scf_root)/cxx/configuration-static.make) +endif
\ No newline at end of file diff --git a/build-0.3/cxx/configuration.make b/build-0.3/cxx/configuration.make new file mode 100644 index 0000000..5ad97ae --- /dev/null +++ b/build-0.3/cxx/configuration.make @@ -0,0 +1,45 @@ +# file : build/cxx/configuration.make +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2004-2010 Code Synthesis Tools CC +# license : GNU GPL v2; see accompanying LICENSE file + +$(call include-once,$(bld_root)/cxx/configuration-rules.make,$(dcf_root)) + +# Static configuration. +# +$(call include,$(bld_root)/cxx/configuration-static.make) + + +# Dynamic configuration. +# +cxx_id := +cxx_optimize := +cxx_debug := +cxx_rpath := + +cxx_pp_extra_options := +cxx_extra_options := +cxx_ld_extra_options := +cxx_extra_libs := +cxx_extra_lib_paths := + +$(call -include,$(dcf_root)/cxx/configuration-dynamic.make) + +ifdef cxx_id + +$(out_root)/%: cxx_id := $(cxx_id) +$(out_root)/%: cxx_optimize := $(cxx_optimize) +$(out_root)/%: cxx_debug := $(cxx_debug) +$(out_root)/%: cxx_rpath := $(cxx_rpath) + +$(out_root)/%: cxx_pp_extra_options := $(cxx_pp_extra_options) +$(out_root)/%: cxx_extra_options := $(cxx_extra_options) +$(out_root)/%: cxx_ld_extra_options := $(cxx_ld_extra_options) +$(out_root)/%: cxx_extra_libs := $(cxx_extra_libs) +$(out_root)/%: cxx_extra_lib_paths := $(cxx_extra_lib_paths) + +else + +.NOTPARALLEL: + +endif diff --git a/build-0.3/cxx/configure b/build-0.3/cxx/configure new file mode 100755 index 0000000..033424b --- /dev/null +++ b/build-0.3/cxx/configure @@ -0,0 +1,167 @@ +#! /usr/bin/env bash + +# file : build/cxx/configure +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2004-2010 Code Synthesis Tools CC +# license : GNU GPL v2; see accompanying LICENSE file + +# $1 out file +# $2 origin of the cxx_pp_options make variable +# $3 origin of the cxx_options make variable +# $4 origin of the cxx_ld_options make variable +# $5 origin of the cxx_libs make variable +# +# bld_root - build root +# project_name - project name +# + +source $bld_root/dialog.bash + + +$echo +$echo +$echo "configuring '$project_name'" +$echo +$echo + +$echo +$echo "Please select the C++ compiler you would like to use:" +$echo +$echo "(1) GNU C++ (g++)" +$echo "(2) Intel C++ (icc)" +$echo "(3) Other C++ compiler" +$echo + +id=`read_option "gnu intel generic" "gnu"` + +if [ "$id" != "generic" ]; then + + $echo + $echo "Would you like the C++ compiler to optimize generated code?" + $echo + + optimize=`read_y_n y` + + + $echo + $echo "Would you like the C++ compiler to generate debug information?" + $echo + + debug=`read_y_n y` + + $echo + $echo "Embed dynamic library paths into executables (rpath)?" + $echo + + rpath=`read_y_n y` + +fi + +# pp_options +# +if [ "$2" != "undefined" ]; then + + pp_options=$cxx_pp_options + + if [ "$pp_options" ]; then + $echo + $echo "Extra C++ preprocessor options: $pp_options" + $echo + fi +else + + $echo + $echo "Please enter any extra C++ preprocessor options." + $echo + + read -e -p "[]: " pp_options +fi + + +# options +# +if [ "$3" != "undefined" ]; then + + options=$cxx_options + + if [ "$options" ]; then + $echo + $echo "Extra C++ compiler options: $options" + $echo + fi +else + + $echo + $echo "Please enter any extra C++ compiler options." + $echo + + read -p "[]: " options +fi + + +# ld_options +# +if [ "$4" != "undefined" ]; then + + ld_options=$cxx_ld_options + + if [ "$ld_options" ]; then + $echo + $echo "Extra C++ linker options: $ld_options" + $echo + fi +else + + $echo + $echo "Please enter any extra C++ linker options." + $echo + + read -e -p "[]: " ld_options +fi + + +# libs +# +if [ "$5" != "undefined" ]; then + + libs=$cxx_libs + + if [ "$libs" ]; then + $echo + $echo "Extra C++ libraries: $libs" + $echo + fi +else + + $echo + $echo "Please enter any extra C++ libraries." + $echo + + read -e -p "[]: " libs +fi + + +# Extract -L paths from the ld options. +# +paths= + +if [ "$ld_options" ]; then + paths=`echo "$ld_options" | sed -e 's/-L *\([^ ]*\)/\\ +-L\1\\ +/g' | sed -e 's/^-L\([^ ]*\)$/\1/' -e t -e d` + paths=`echo $paths | sed -e 's/ /:/g'` +fi + +echo "cxx_id := $id" >$1 + +if [ "$id" != "generic" ]; then + echo "cxx_optimize := $optimize" >>$1 + echo "cxx_debug := $debug" >>$1 + echo "cxx_rpath := $rpath" >>$1 +fi + +echo "cxx_pp_extra_options := $pp_options" >>$1 +echo "cxx_extra_options := $options" >>$1 +echo "cxx_ld_extra_options := $ld_options" >>$1 +echo "cxx_extra_libs := $libs" >>$1 +echo "cxx_extra_lib_paths := $paths" >>$1 diff --git a/build-0.3/cxx/cxx-d.make b/build-0.3/cxx/cxx-d.make new file mode 100644 index 0000000..34b80c9 --- /dev/null +++ b/build-0.3/cxx/cxx-d.make @@ -0,0 +1,10 @@ +# file : build/cxx/cxx-d.make +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2004-2010 Code Synthesis Tools CC +# license : GNU GPL v2; see accompanying LICENSE file + +$(call include,$(bld_root)/cxx/configuration.make) + +ifdef cxx_id +$(call include-once,$(bld_root)/cxx/$(cxx_id)/cxx-d.make,$(out_base)) +endif diff --git a/build-0.3/cxx/cxx-o.make b/build-0.3/cxx/cxx-o.make new file mode 100644 index 0000000..e01067f --- /dev/null +++ b/build-0.3/cxx/cxx-o.make @@ -0,0 +1,10 @@ +# file : build/cxx/cxx-o.make +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2004-2010 Code Synthesis Tools CC +# license : GNU GPL v2; see accompanying LICENSE file + +$(call include,$(bld_root)/cxx/configuration.make) + +ifdef cxx_id +$(call include-once,$(bld_root)/cxx/$(cxx_id)/cxx-o.make,$(out_base)) +endif diff --git a/build-0.3/cxx/generic/configuration-rules.make b/build-0.3/cxx/generic/configuration-rules.make new file mode 100644 index 0000000..bb4fe67 --- /dev/null +++ b/build-0.3/cxx/generic/configuration-rules.make @@ -0,0 +1,15 @@ +# file : build/cxx/generic/configuration-rules.make +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2004-2010 Code Synthesis Tools CC +# license : GNU GPL v2; see accompanying LICENSE file + +$(dcf_root)/cxx/generic/configuration-dynamic.make: | $(dcf_root)/cxx/generic/. + $(call message,,$(bld_root)/cxx/generic/configure $@) + +ifndef %foreign% + +disfigure:: + $(call message,rm $(dcf_root)/cxx/generic/configuration-dynamic.make,\ +rm -f $(dcf_root)/cxx/generic/configuration-dynamic.make) + +endif diff --git a/build-0.3/cxx/generic/configuration-sl-rules.make b/build-0.3/cxx/generic/configuration-sl-rules.make new file mode 100644 index 0000000..cbcf160 --- /dev/null +++ b/build-0.3/cxx/generic/configuration-sl-rules.make @@ -0,0 +1,15 @@ +# file : build/cxx/generic/configuration-sl-rules.make +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2004-2010 Code Synthesis Tools CC +# license : GNU GPL v2; see accompanying LICENSE file + +$(dcf_root)/cxx/generic/configuration-sl-dynamic.make: | $(dcf_root)/cxx/generic/. + $(call message,,$(bld_root)/cxx/generic/configure-sl $@) + +ifndef %foreign% + +disfigure:: + $(call message,rm $(dcf_root)/cxx/generic/configuration-sl-dynamic.make,\ +rm -f $(dcf_root)/cxx/generic/configuration-sl-dynamic.make) + +endif diff --git a/build-0.3/cxx/generic/configuration-sl.make b/build-0.3/cxx/generic/configuration-sl.make new file mode 100644 index 0000000..2a5e682 --- /dev/null +++ b/build-0.3/cxx/generic/configuration-sl.make @@ -0,0 +1,21 @@ +# file : build/cxx/generic/configuration-sl.make +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2004-2010 Code Synthesis Tools CC +# license : GNU GPL v2; see accompanying LICENSE file + +$(call include-once,$(bld_root)/cxx/generic/configuration-sl-rules.make,$(dcf_root)) + +# Dynamic configuration. +# +cxx_generic_pic_option := + +$(call -include,$(dcf_root)/cxx/generic/configuration-sl-dynamic.make) + +ifdef cxx_generic_pic_option + +$(out_root)/%: cxx_generic_pic_option := $(cxx_generic_pic_option) +$(out_root)/%: cxx_generic_shared_option := $(cxx_generic_shared_option) + +else +.NOTPARALLEL: +endif diff --git a/build-0.3/cxx/generic/configuration.make b/build-0.3/cxx/generic/configuration.make new file mode 100644 index 0000000..b57eaaf --- /dev/null +++ b/build-0.3/cxx/generic/configuration.make @@ -0,0 +1,22 @@ +# file : build/cxx/generic/configuration.make +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2004-2010 Code Synthesis Tools CC +# license : GNU GPL v2; see accompanying LICENSE file + +$(call include-once,$(bld_root)/cxx/generic/configuration-rules.make,$(dcf_root)) + +# Static configuration. +# +ifneq ($(bld_root),$(scf_root)) +$(call -include,$(scf_root)/cxx/generic/configuration-static.make) +endif + +# Dynamic configuration. +# +cxx_generic := + +$(call -include,$(dcf_root)/cxx/generic/configuration-dynamic.make) + +ifndef cxx_generic +.NOTPARALLEL: +endif diff --git a/build-0.3/cxx/generic/configure b/build-0.3/cxx/generic/configure new file mode 100755 index 0000000..48b1b59 --- /dev/null +++ b/build-0.3/cxx/generic/configure @@ -0,0 +1,28 @@ +#! /usr/bin/env bash + +# file : build/cxx/generic/configure +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2004-2010 Code Synthesis Tools CC +# license : GNU GPL v2; see accompanying LICENSE file + +# $1 out file +# +# bld_root - build root +# project_name - project name +# + +source $bld_root/dialog.bash + +$echo +$echo +$echo "configuring '$project_name'" +$echo +$echo + +$echo +$echo "Please enter the C++ compiler executable you would like to use." +$echo + +cxx_generic=`read_path --command` + +echo "cxx_generic := $cxx_generic" > $1 diff --git a/build-0.3/cxx/generic/configure-sl b/build-0.3/cxx/generic/configure-sl new file mode 100755 index 0000000..1c4b8b5 --- /dev/null +++ b/build-0.3/cxx/generic/configure-sl @@ -0,0 +1,37 @@ +#! /usr/bin/env bash + +# file : build/cxx/generic/configure-sl +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2004-2010 Code Synthesis Tools CC +# license : GNU GPL v2; see accompanying LICENSE file + +# $1 out file +# +# bld_root - build root +# project_name - project name +# + +source $bld_root/dialog.bash + +$echo +$echo +$echo "configuring '$project_name'" +$echo +$echo + +$echo +$echo "Please enter C++ compiler option(s) used to build position-" +$echo "independent code (e.g., -fPIC, -Kpic, etc)." +$echo + +read -e -p "[]: " pic_option + +$echo +$echo "Please enter C++ compiler option(s) used to build shared" +$echo "libraries (e.g., -shared, -G, etc)." +$echo + +read -e -p "[]: " shared_option + +echo "cxx_generic_pic_option := $pic_option" > $1 +echo "cxx_generic_shared_option := $shared_option" >> $1 diff --git a/build-0.3/cxx/generic/cxx-d.make b/build-0.3/cxx/generic/cxx-d.make new file mode 100644 index 0000000..53f44b1 --- /dev/null +++ b/build-0.3/cxx/generic/cxx-d.make @@ -0,0 +1,19 @@ +# file : build/cxx/generic/cxx-o.make +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2004-2010 Code Synthesis Tools CC +# license : GNU GPL v2; see accompanying LICENSE file + +$(call include,$(bld_root)/cxx/generic/configuration.make) + +# Make will try to build dependecies (since they are ultimately included +# files) during configuartion phase without cxx_generic being discovered +# yet. This is also why dependecies should be included with -include. +# +ifdef cxx_generic + +.PHONY: $(out_base)/%.o.d.$(cxx_s_suffix).clean + +$(out_base)/%.o.d.$(cxx_s_suffix).clean: + @: + +endif diff --git a/build-0.3/cxx/generic/cxx-o.make b/build-0.3/cxx/generic/cxx-o.make new file mode 100644 index 0000000..e88f5c6 --- /dev/null +++ b/build-0.3/cxx/generic/cxx-o.make @@ -0,0 +1,40 @@ +# file : build/cxx/generic/cxx-o.make +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2004-2010 Code Synthesis Tools CC +# license : GNU GPL v2; see accompanying LICENSE file + +$(call include-once,$(bld_root)/c/cpp-options.make,$(out_base)) +$(call include,$(bld_root)/cxx/generic/configuration.make) + +$(out_base)/%.o: cxx := $(cxx_generic) + +#@@ wrong prefix +# +$(out_base)/%.o: expand-cpp-options-impl = \ +$(if $1,$(shell sed -e 's%include: \(.*\)%\1%' -e t -e d $1)) + +$(out_base)/%.o: expand-cpp-options = \ +$(call expand-cpp-options-impl,$(filter %.cpp-options,$1)) + +ifeq ($(out_base),$(src_base)) +$(out_base)/%.o: $(src_base)/%.$(cxx_s_suffix) +else +$(out_base)/%.o: $(src_base)/%.$(cxx_s_suffix) | $$(dir $$@). +endif + $(call message,c++ $<,$(cxx) \ +$(cpp_options) $(call expand-cpp-options,$^) $(cxx_pp_extra_options) \ +$(cxx_options) $(cxx_pic_options) $(cxx_extra_options) -o $@ -c $<) + +ifneq ($(out_base),$(src_base)) + +$(out_base)/%.o: $(out_base)/%.$(cxx_s_suffix) | $$(dir $$@). + $(call message,c++ $<,$(cxx) \ +$(cpp_options) $(call expand-cpp-options,$^) $(cxx_pp_extra_options) \ +$(cxx_options) $(cxx_pic_options) $(cxx_extra_options) -o $@ -c $<) + +endif + +.PHONY: $(out_base)/%.o.$(cxx_s_suffix).clean + +$(out_base)/%.o.$(cxx_s_suffix).clean: + $(call message,rm $$1,rm -f $$1,$(basename $(basename $@))) diff --git a/build-0.3/cxx/generic/o-e.make b/build-0.3/cxx/generic/o-e.make new file mode 100644 index 0000000..8170da3 --- /dev/null +++ b/build-0.3/cxx/generic/o-e.make @@ -0,0 +1,28 @@ +# file : build/cxx/generic/o-e.make +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2004-2010 Code Synthesis Tools CC +# license : GNU GPL v2; see accompanying LICENSE file + +$(call include,$(bld_root)/cxx/generic/configuration.make) + +ifneq ($(cxx_extra_lib_paths),) +vpath %.so $(cxx_extra_lib_paths) +vpath %.a $(cxx_extra_lib_paths) +endif + +$(out_base)/%: ld := $(cxx_generic) +$(out_base)/%: expand-l = $(shell sed -e 's%^rpath:\(.*\)%%' $1) + +ifeq ($(out_base),$(src_base)) +$(out_base)/%: $(out_base)/%.o +else +$(out_base)/%: $(out_base)/%.o | $$(dir $$@). +endif + $(call message,ld $@,$(ld) \ +$(cxx_extra_options) $(ld_options) $(cxx_ld_extra_options) -o $@ \ +$(foreach f,$^,$(if $(patsubst %.l,,$f),$f,$(call expand-l,$f))) $(cxx_extra_libs)) + +.PHONY: $(out_base)/%.o.clean + +$(out_base)/%.o.clean: + $(call message,rm $(basename $(basename $@)),rm -f $(basename $@) $(basename $(basename $@))) diff --git a/build-0.3/cxx/generic/o-l.make b/build-0.3/cxx/generic/o-l.make new file mode 100644 index 0000000..5b29855 --- /dev/null +++ b/build-0.3/cxx/generic/o-l.make @@ -0,0 +1,67 @@ +# file : build/cxx/generic/o-l.make +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2004-2010 Code Synthesis Tools CC +# license : GNU GPL v2; see accompanying LICENSE file + +$(call include,$(bld_root)/cxx/generic/configuration.make) + +ifeq ($(ld_lib_type),shared) +$(call include,$(bld_root)/cxx/generic/configuration-sl.make) +endif + +ifneq ($(cxx_extra_lib_paths),) +vpath %.so $(cxx_extra_lib_paths) +vpath %.a $(cxx_extra_lib_paths) +endif + +ifdef ld_lib_type + +.PHONY: $(out_base)/%.l.o.clean + +ifeq ($(ld_lib_type),archive) + +$(out_base)/%.l: ar := $(ld_lib_ar) +$(out_base)/%.l: ar_options ?= -rc + +$(out_base)/%.l: ranlib := $(ld_lib_ranlib) +$(out_base)/%.l: ranlib_options ?= + +ifeq ($(out_base),$(src_base)) +$(out_base)/%.l: +else +$(out_base)/%.l: | $$(dir $$@). +endif + $(call message,ar $@,$(ar) $(ar_options) $(@D)/lib$(basename $(@F)).a $(filter %.o,$^)) + $(call message,,$(ranlib) $(ranlib_options) $(@D)/lib$(basename $(@F)).a) + $(call message,,echo "$(@D)/lib$(basename $(@F)).a" >$@) + $(call message,,echo "$(patsubst %.l,`cat %.l`,$(filter %.a %.so %.l,$^))" | xargs -n 1 echo >>$@) + +$(out_base)/%.l.o.clean: + $(call message,rm $$1,rm -f $$1 $(@D)/$(patsubst %.l.o.clean,lib%.a,$(@F)),$(basename $(basename $@))) + +else + +$(out_base)/%.l: ld := $(cxx_generic) +$(out_base)/%.l: c_pic_options := $(cxx_generic_pic_option) +$(out_base)/%.l: cxx_pic_options := $(cxx_generic_pic_option) +$(out_base)/%.l: comma_ := , + +$(out_base)/%.l: expand-l = $(shell sed -e 's%^rpath:\(.*\)%%' $1) + +ifeq ($(out_base),$(src_base)) +$(out_base)/%.l: +else +$(out_base)/%.l: | $$(dir $$@). +endif + $(call message,ld $@,$(ld) $(cxx_generic_shared_option) \ +$(cxx_extra_options) $(ld_options) $(cxx_ld_extra_options) -o $(@D)/lib$(basename $(@F)).so \ +$(foreach f,$^,$(if $(patsubst %.l,,$f),$f,$(call expand-l,$f))) $(cxx_extra_libs)) + $(call message,,echo "$(@D)/lib$(basename $(@F)).so" >$@) + $(call message,,echo "rpath:$(@D)" >>$@) + $(call message,,echo "$(patsubst %.l,`cat %.l`,$(filter %.a %.so %.l,$^))" | xargs -n 1 echo >>$@) + +$(out_base)/%.l.o.clean: + $(call message,rm $$1,rm -f $$1 $(@D)/$(patsubst %.l.o.clean,lib%.so,$(@F)),$(basename $(basename $@))) + +endif +endif diff --git a/build-0.3/cxx/gnu/configuration-rules.make b/build-0.3/cxx/gnu/configuration-rules.make new file mode 100644 index 0000000..7598be9 --- /dev/null +++ b/build-0.3/cxx/gnu/configuration-rules.make @@ -0,0 +1,15 @@ +# file : build/cxx/gnu/configuration-rules.make +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2004-2010 Code Synthesis Tools CC +# license : GNU GPL v2; see accompanying LICENSE file + +$(dcf_root)/cxx/gnu/configuration-dynamic.make: | $(dcf_root)/cxx/gnu/. + $(call message,,$(bld_root)/cxx/gnu/configure $@ $(cxx_optimize)) + +ifndef %foreign% + +disfigure:: + $(call message,rm $(dcf_root)/cxx/gnu/configuration-dynamic.make,\ +rm -f $(dcf_root)/cxx/gnu/configuration-dynamic.make) + +endif diff --git a/build-0.3/cxx/gnu/configuration-static.make b/build-0.3/cxx/gnu/configuration-static.make new file mode 100644 index 0000000..9a2521a --- /dev/null +++ b/build-0.3/cxx/gnu/configuration-static.make @@ -0,0 +1,4 @@ +# file : build/cxx/gnu/configuration-static.make +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2004-2010 Code Synthesis Tools CC +# license : GNU GPL v2; see accompanying LICENSE file diff --git a/build-0.3/cxx/gnu/configuration.make b/build-0.3/cxx/gnu/configuration.make new file mode 100644 index 0000000..57e00e9 --- /dev/null +++ b/build-0.3/cxx/gnu/configuration.make @@ -0,0 +1,34 @@ +# file : build/cxx/gnu/configuration.make +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2004-2010 Code Synthesis Tools CC +# license : GNU GPL v2; see accompanying LICENSE file + +$(call include-once,$(bld_root)/cxx/gnu/configuration-rules.make,$(dcf_root)) + +# Static configuration. +# +$(call include,$(bld_root)/cxx/gnu/configuration-static.make) + +ifneq ($(bld_root),$(scf_root)) +$(call -include,$(scf_root)/cxx/gnu/configuration-static.make) +endif + +# Dynamic configuration. +# +cxx_gnu := +cxx_gnu_optimization_options := + +$(call -include,$(dcf_root)/cxx/gnu/configuration-dynamic.make) + +ifdef cxx_gnu + +cxx_gnu_debugging_options := $(if $(findstring y,$(cxx_debug)),-g) + +$(out_root)/%: cxx_gnu_debugging_options := $(cxx_gnu_debugging_options) +$(out_root)/%: cxx_gnu_optimization_options := $(cxx_gnu_optimization_options) + +else + +.NOTPARALLEL: + +endif diff --git a/build-0.3/cxx/gnu/configure b/build-0.3/cxx/gnu/configure new file mode 100755 index 0000000..b9c6ef6 --- /dev/null +++ b/build-0.3/cxx/gnu/configure @@ -0,0 +1,55 @@ +#! /usr/bin/env bash + +# file : build/cxx/gnu/configure +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2004-2010 Code Synthesis Tools CC +# license : GNU GPL v2; see accompanying LICENSE file + +# $1 out file +# $2 optimize (y/n) +# +# bld_root - build root +# project_name - project name +# + + +source $bld_root/dialog.bash + +$echo +$echo +$echo "configuring '$project_name'" +$echo +$echo + +$echo +$echo "Please enter the g++ binary you would like to use, for example 'g++-3.4'," +$echo "'/usr/local/bin/g++' or 'distcc g++'." +$echo + +cxx_gnu=`read_path --command g++` +cxx_gnu_libraries=`$cxx_gnu -print-search-dirs | sed -e 's/libraries: =//p' -e d` + + +optimization= + +if [ "$2" == "y" ]; then + + $echo + $echo "Please select the optimization level you would like to use:" + $echo + $echo "(1) -O1 [Tries to reduce code size and execution time, without" + $echo " performing any optimizations that take a great deal of" + $echo " compilation time.]" + $echo "(2) -O2 [Performs nearly all supported optimizations that do not" + $echo " involve a space-speed tradeoff.]" + $echo "(3) -O3 [Optimize even more.]" + $echo "(4) -Os [Optimize for size.]" + $echo + + optimization=`read_option "-O1 -O2 -O3 -Os" "-O2"` + +fi + +echo "cxx_gnu := $cxx_gnu" > $1 +echo "cxx_gnu_libraries := $cxx_gnu_libraries" >> $1 +echo "cxx_gnu_optimization_options := $optimization" >> $1 diff --git a/build-0.3/cxx/gnu/cxx-d.make b/build-0.3/cxx/gnu/cxx-d.make new file mode 100644 index 0000000..642a846 --- /dev/null +++ b/build-0.3/cxx/gnu/cxx-d.make @@ -0,0 +1,59 @@ +# file : build/cxx/gnu/cxx-o.make +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2004-2010 Code Synthesis Tools CC +# license : GNU GPL v2; see accompanying LICENSE file + +$(call include-once,$(bld_root)/c/cpp-options.make,$(out_base)) +$(call include,$(bld_root)/cxx/gnu/configuration.make) + +# Make will try to build dependecies (since they are ultimately included +# files) during configuartion phase without cxx_gnu being discovered yet. +# This is also why dependecies should be included with -include. +# +ifdef cxx_gnu + +$(out_base)/%.o.d: cxx := $(cxx_gnu) +$(out_base)/%.o.d: cpp_options ?= + +#@@ This needs to be shared with cxx-o. +# +#@@ wrong prefix +# +$(out_base)/%.o.d: expand-cpp-options-impl = \ +$(if $1,$(shell sed -e 's%include: \(.*\)%\1%' -e t -e d $1)) + +$(out_base)/%.o.d: expand-cpp-options = \ +$(call expand-cpp-options-impl,$(filter %.cpp-options,$1)) + +.PRECIOUS: $(out_base)/%.o.d + +ifeq ($(out_base),$(src_base)) +$(out_base)/%.o.d: $(src_base)/%.$(cxx_s_suffix) +else +$(out_base)/%.o.d: $(src_base)/%.$(cxx_s_suffix) | $$(dir $$@). +endif + $(call message,,if test -f $@; then mv $@ $@.old; fi && \ +$(cxx) $(cpp_options) $(call expand-cpp-options,$^) $(cxx_pp_extra_options) \ +$(cxx_extra_options) -M -MG -MP -MQ $@ -MQ $(basename $@) $< | \ +$(bld_root)/c/gnu/dep $(out_base) $(filter %.cpp-options,$^) >$@ && \ +if test -f $@.old; then if cmp -s $@ $@.old; then rm -f $@.old && false; \ +else rm -f $@.old && true; fi fi) + +ifneq ($(out_base),$(src_base)) + +$(out_base)/%.o.d: $(out_base)/%.$(cxx_s_suffix) | $$(dir $$@). + $(call message,,if test -f $@; then mv $@ $@.old; fi && \ +$(cxx) $(cpp_options) $(call expand-cpp-options,$^) $(cxx_pp_extra_options) \ +$(cxx_extra_options) -M -MG -MP -MQ $@ -MQ $(basename $@) $< | \ +$(bld_root)/c/gnu/dep $(out_base) $(filter %.cpp-options,$^) >$@ && \ +if test -f $@.old; then if cmp -s $@ $@.old; then rm -f $@.old && false; \ +else rm -f $@.old && true; fi fi) + +endif + +.PHONY: $(out_base)/%.o.d.$(cxx_s_suffix).clean + +$(out_base)/%.o.d.$(cxx_s_suffix).clean: + $(call message,rm $$1,rm -f $$1,$(basename $(basename $@))) + +endif diff --git a/build-0.3/cxx/gnu/cxx-o.make b/build-0.3/cxx/gnu/cxx-o.make new file mode 100644 index 0000000..0320177 --- /dev/null +++ b/build-0.3/cxx/gnu/cxx-o.make @@ -0,0 +1,41 @@ +# file : build/cxx/gnu/cxx-o.make +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2004-2010 Code Synthesis Tools CC +# license : GNU GPL v2; see accompanying LICENSE file + +$(call include-once,$(bld_root)/c/cpp-options.make,$(out_base)) +$(call include,$(bld_root)/cxx/gnu/configuration.make) + +$(out_base)/%.o: cxx := $(cxx_gnu) +$(out_base)/%.o: cxx_options := $(cxx_gnu_optimization_options) $(cxx_gnu_debugging_options) + +#@@ wrong prefix +# +$(out_base)/%.o: expand-cpp-options-impl = \ +$(if $1,$(shell sed -e 's%include: \(.*\)%\1%' -e t -e d $1)) + +$(out_base)/%.o: expand-cpp-options = \ +$(call expand-cpp-options-impl,$(filter %.cpp-options,$1)) + +ifeq ($(out_base),$(src_base)) +$(out_base)/%.o: $(src_base)/%.$(cxx_s_suffix) +else +$(out_base)/%.o: $(src_base)/%.$(cxx_s_suffix) | $$(dir $$@). +endif + $(call message,c++ $<,$(cxx) \ +$(cpp_options) $(call expand-cpp-options,$^) $(cxx_pp_extra_options) \ +$(cxx_options) $(cxx_pic_options) $(cxx_extra_options) -o $@ -c $<) + +ifneq ($(out_base),$(src_base)) + +$(out_base)/%.o: $(out_base)/%.$(cxx_s_suffix) | $$(dir $$@). + $(call message,c++ $<,$(cxx) \ +$(cpp_options) $(call expand-cpp-options,$^) $(cxx_pp_extra_options) \ +$(cxx_options) $(cxx_pic_options) $(cxx_extra_options) -o $@ -c $<) + +endif + +.PHONY: $(out_base)/%.o.$(cxx_s_suffix).clean + +$(out_base)/%.o.$(cxx_s_suffix).clean: + $(call message,rm $$1,rm -f $$1,$(basename $(basename $@))) diff --git a/build-0.3/cxx/gnu/o-e.make b/build-0.3/cxx/gnu/o-e.make new file mode 100644 index 0000000..8c233bd --- /dev/null +++ b/build-0.3/cxx/gnu/o-e.make @@ -0,0 +1,39 @@ +# file : build/cxx/gnu/o-e.make +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2004-2010 Code Synthesis Tools CC +# license : GNU GPL v2; see accompanying LICENSE file + +$(call include,$(bld_root)/cxx/gnu/configuration.make) + +#@@ should it be lib%.so? +# +ifneq ($(cxx_extra_lib_paths),) +vpath %.so $(cxx_extra_lib_paths) +vpath %.a $(cxx_extra_lib_paths) +endif + +ifneq ($(cxx_gnu_libraries),) +vpath %.so $(cxx_gnu_libraries) +vpath %.a $(cxx_gnu_libraries) +endif + +$(out_base)/%: ld := $(cxx_gnu) +$(out_base)/%: ld_options := $(cxx_gnu_optimization_options) $(cxx_gnu_debugging_options) $(cxx_ld_extra_options) + +$(out_base)/%: expand-l = $(if $(subst n,,$(cxx_rpath)),\ +$(shell sed -e 's%^rpath:\(.*\)%-Wl,-rpath,\1%' $1),\ +$(shell sed -e 's%^rpath:\(.*\)%%' $1)) + +ifeq ($(out_base),$(src_base)) +$(out_base)/%: $(out_base)/%.o +else +$(out_base)/%: $(out_base)/%.o | $$(dir $$@). +endif + $(call message,ld $@,$(ld) \ +$(cxx_extra_options) $(ld_options) $(cxx_ld_extra_options) -o $@ \ +$(foreach f,$^,$(if $(patsubst %.l,,$f),$f,$(call expand-l,$f))) $(cxx_extra_libs)) + +.PHONY: $(out_base)/%.o.clean + +$(out_base)/%.o.clean: + $(call message,rm $(basename $(basename $@)),rm -f $(basename $@) $(basename $(basename $@))) diff --git a/build-0.3/cxx/gnu/o-l.make b/build-0.3/cxx/gnu/o-l.make new file mode 100644 index 0000000..e378a4d --- /dev/null +++ b/build-0.3/cxx/gnu/o-l.make @@ -0,0 +1,72 @@ +# file : build/cxx/gnu/o-l.make +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2004-2010 Code Synthesis Tools CC +# license : GNU GPL v2; see accompanying LICENSE file + +$(call include,$(bld_root)/cxx/gnu/configuration.make) + +ifneq ($(cxx_extra_lib_paths),) +vpath %.so $(cxx_extra_lib_paths) +vpath %.a $(cxx_extra_lib_paths) +endif + +ifneq ($(cxx_gnu_libraries),) +vpath %.so $(cxx_gnu_libraries) +vpath %.a $(cxx_gnu_libraries) +endif + +ifdef ld_lib_type + +.PHONY: $(out_base)/%.l.o.clean + +ifeq ($(ld_lib_type),archive) + +$(out_base)/%.l: ar := $(ld_lib_ar) +$(out_base)/%.l: ar_options ?= -rc + +$(out_base)/%.l: ranlib := $(ld_lib_ranlib) +$(out_base)/%.l: ranlib_options ?= + +ifeq ($(out_base),$(src_base)) +$(out_base)/%.l: +else +$(out_base)/%.l: | $$(dir $$@). +endif + $(call message,ar $@,$(ar) $(ar_options) $(@D)/lib$(basename $(@F)).a $(filter %.o,$^)) + $(call message,,$(ranlib) $(ranlib_options) $(@D)/lib$(basename $(@F)).a) + $(call message,,echo "$(@D)/lib$(basename $(@F)).a" >$@) + $(call message,,echo "$(patsubst %.l,`cat %.l`,$(filter %.a %.so %.l,$^))" | xargs -n 1 echo >>$@) + +$(out_base)/%.l.o.clean: + $(call message,rm $$1,rm -f $$1 $(@D)/$(patsubst %.l.o.clean,lib%.a,$(@F)),$(basename $(basename $@))) + +else + +$(out_base)/%.l: ld := $(cxx_gnu) +$(out_base)/%.l: ld_options := $(cxx_gnu_optimization_options) $(cxx_gnu_debugging_options) +$(out_base)/%.l: c_pic_options := -fPIC +$(out_base)/%.l: cxx_pic_options := -fPIC +$(out_base)/%.l: comma_ := , + +$(out_base)/%.l: expand-l = $(if $(subst n,,$(cxx_rpath)),\ +$(shell sed -e 's%^rpath:\(.*\)%-Wl,-rpath,\1%' $1),\ +$(shell sed -e 's%^rpath:\(.*\)%%' $1)) + +ifeq ($(out_base),$(src_base)) +$(out_base)/%.l: +else +$(out_base)/%.l: | $$(dir $$@). +endif + $(call message,ld $@,$(ld) -shared \ +$(cxx_extra_options) $(ld_options) $(cxx_ld_extra_options) \ +-o $(@D)/lib$(basename $(@F)).so -Wl$(comma_)-soname=lib$(basename $(@F)).so \ +$(foreach f,$^,$(if $(patsubst %.l,,$f),$f,$(call expand-l,$f))) $(cxx_extra_libs)) + $(call message,,echo "$(@D)/lib$(basename $(@F)).so" >$@) + $(call message,,echo "rpath:$(@D)" >>$@) + $(call message,,echo "$(patsubst %.l,`cat %.l`,$(filter %.a %.so %.l,$^))" | xargs -n 1 echo >>$@) + +$(out_base)/%.l.o.clean: + $(call message,rm $$1,rm -f $$1 $(@D)/$(patsubst %.l.o.clean,lib%.so,$(@F)),$(basename $(basename $@))) + +endif +endif diff --git a/build-0.3/cxx/intel/configuration-rules.make b/build-0.3/cxx/intel/configuration-rules.make new file mode 100644 index 0000000..577f2f7 --- /dev/null +++ b/build-0.3/cxx/intel/configuration-rules.make @@ -0,0 +1,15 @@ +# file : build/cxx/intel/configuration-rules.make +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2004-2010 Code Synthesis Tools CC +# license : GNU GPL v2; see accompanying LICENSE file + +$(dcf_root)/cxx/intel/configuration-dynamic.make: | $(dcf_root)/cxx/intel/. + $(call message,,$(bld_root)/cxx/intel/configure $@ $(cxx_optimize)) + +ifndef %foreign% + +disfigure:: + $(call message,rm $(dcf_root)/cxx/intel/configuration-dynamic.make,\ +rm -f $(dcf_root)/cxx/intel/configuration-dynamic.make) + +endif diff --git a/build-0.3/cxx/intel/configuration-static.make b/build-0.3/cxx/intel/configuration-static.make new file mode 100644 index 0000000..e619365 --- /dev/null +++ b/build-0.3/cxx/intel/configuration-static.make @@ -0,0 +1,4 @@ +# file : build/cxx/intel/configuration-static.make +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2004-2010 Code Synthesis Tools CC +# license : GNU GPL v2; see accompanying LICENSE file diff --git a/build-0.3/cxx/intel/configuration.make b/build-0.3/cxx/intel/configuration.make new file mode 100644 index 0000000..eade065 --- /dev/null +++ b/build-0.3/cxx/intel/configuration.make @@ -0,0 +1,34 @@ +# file : build/cxx/intel/configuration.make +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2004-2010 Code Synthesis Tools CC +# license : GNU GPL v2; see accompanying LICENSE file + +$(call include-once,$(bld_root)/cxx/intel/configuration-rules.make,$(dcf_root)) + +# Static configuration. +# +$(call include,$(bld_root)/cxx/intel/configuration-static.make) + +ifneq ($(bld_root),$(scf_root)) +$(call -include,$(scf_root)/cxx/intel/configuration-static.make) +endif + +# Dynamic configuration. +# +cxx_intel := +cxx_intel_optimization_options := + +$(call -include,$(dcf_root)/cxx/intel/configuration-dynamic.make) + +ifdef cxx_intel + +cxx_intel_debugging_options := $(if $(findstring y,$(cxx_debug)),-g) + +$(out_root)/%: cxx_intel_debugging_options := $(cxx_intel_debugging_options) +$(out_root)/%: cxx_intel_optimization_options := $(cxx_intel_optimization_options) + +else + +.NOTPARALLEL: + +endif diff --git a/build-0.3/cxx/intel/configure b/build-0.3/cxx/intel/configure new file mode 100755 index 0000000..ef250cf --- /dev/null +++ b/build-0.3/cxx/intel/configure @@ -0,0 +1,52 @@ +#! /usr/bin/env bash + +# file : build/cxx/intel/configure +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2004-2010 Code Synthesis Tools CC +# license : GNU GPL v2; see accompanying LICENSE file + +# $1 out file +# $2 optimize (y/n) +# +# bld_root - build root +# project_name - project name +# + + +source $bld_root/dialog.bash + +$echo +$echo +$echo "configuring '$project_name'" +$echo +$echo + +$echo +$echo "Please enter the icc binary you would like to use, for example " +$echo "'/opt/intel_cc_80/bin/icpc'." +$echo + +cxx_intel=`read_path --command icpc` +cxx_intel_libraries=`$cxx_intel -print-search-dirs | sed -e 's/libraries: =//p' -e d` + +# Intel optimizes by default. +# +optimization=-O0 + +if [ "$2" == "y" ]; then + + $echo + $echo "Please select the optimization level you would like to use:" + $echo + $echo "(1) -O1 [Enable optimizations.]" + $echo "(2) -O2 [Same as -O1.]" + $echo "(3) -O3 [As -O2 plus more aggressive optimizations that may not" + $echo " improve performance for all programs.]" + $echo + + optimization=`read_option "-O1 -O2 -O3" "-O2"` +fi + +echo "cxx_intel := $cxx_intel" > $1 +echo "cxx_intel_libraries := $cxx_intel_libraries" >> $1 +echo "cxx_intel_optimization_options := $optimization" >> $1 diff --git a/build-0.3/cxx/intel/cxx-d.make b/build-0.3/cxx/intel/cxx-d.make new file mode 100644 index 0000000..cd7b567 --- /dev/null +++ b/build-0.3/cxx/intel/cxx-d.make @@ -0,0 +1,59 @@ +# file : build/cxx/intel/cxx-o.make +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2004-2010 Code Synthesis Tools CC +# license : GNU GPL v2; see accompanying LICENSE file + +$(call include-once,$(bld_root)/c/cpp-options.make,$(out_base)) +$(call include,$(bld_root)/cxx/intel/configuration.make) + +# Make will try to build dependecies (since they are ultimately included +# files) during configuartion phase without cxx_intel being discovered yet. +# This is also why dependecies should be included with -include. +# +ifdef cxx_intel + +$(out_base)/%.o.d: cxx := $(cxx_intel) +$(out_base)/%.o.d: cpp_options ?= + +#@@ This needs to be shared with cxx-o. +# +#@@ wrong prefix +# +$(out_base)/%.o.d: expand-cpp-options-impl = \ +$(if $1,$(shell sed -e 's%include: \(.*\)%\1%' -e t -e d $1)) + +$(out_base)/%.o.d: expand-cpp-options = \ +$(call expand-cpp-options-impl,$(filter %.cpp-options,$1)) + +.PRECIOUS: $(out_base)/%.o.d + +ifeq ($(out_base),$(src_base)) +$(out_base)/%.o.d: $(src_base)/%.$(cxx_s_suffix) +else +$(out_base)/%.o.d: $(src_base)/%.$(cxx_s_suffix) | $$(dir $$@). +endif + $(call message,,if test -f $@; then mv $@ $@.old; fi && \ +$(cxx) $(cpp_options) $(call expand-cpp-options,$^) $(cxx_pp_extra_options) \ +$(cxx_extra_options) -M -MG -MP -MQ $@ -MQ $(basename $@) $< | \ +$(bld_root)/c/intel/dep $(out_base) $(filter %.cpp-options,$^) >$@ && \ +if test -f $@.old; then if cmp -s $@ $@.old; then rm -f $@.old && false; \ +else rm -f $@.old && true; fi fi) + +ifneq ($(out_base),$(src_base)) + +$(out_base)/%.o.d: $(out_base)/%.$(cxx_s_suffix) | $$(dir $$@). + $(call message,,if test -f $@; then mv $@ $@.old; fi && \ +$(cxx) $(cpp_options) $(call expand-cpp-options,$^) $(cxx_pp_extra_options) \ +$(cxx_extra_options) -M -MG -MP -MQ $@ -MQ $(basename $@) $< | \ +$(bld_root)/c/intel/dep $(out_base) $(filter %.cpp-options,$^) >$@ && \ +if test -f $@.old; then if cmp -s $@ $@.old; then rm -f $@.old && false; \ +else rm -f $@.old && true; fi fi) + +endif + +.PHONY: $(out_base)/%.o.d.$(cxx_s_suffix).clean + +$(out_base)/%.o.d.$(cxx_s_suffix).clean: + $(call message,rm $$1,rm -f $$1,$(basename $(basename $@))) + +endif diff --git a/build-0.3/cxx/intel/cxx-o.make b/build-0.3/cxx/intel/cxx-o.make new file mode 100644 index 0000000..c64e2c8 --- /dev/null +++ b/build-0.3/cxx/intel/cxx-o.make @@ -0,0 +1,41 @@ +# file : build/cxx/intel/cxx-o.make +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2004-2010 Code Synthesis Tools CC +# license : GNU GPL v2; see accompanying LICENSE file + +$(call include-once,$(bld_root)/c/cpp-options.make,$(out_base)) +$(call include,$(bld_root)/cxx/intel/configuration.make) + +$(out_base)/%.o: cxx := $(cxx_intel) +$(out_base)/%.o: cxx_options := $(cxx_intel_optimization_options) $(cxx_intel_debugging_options) + +#@@ wrong prefix +# +$(out_base)/%.o: expand-cpp-options-impl = \ +$(if $1,$(shell sed -e 's%include: \(.*\)%\1%' -e t -e d $1)) + +$(out_base)/%.o: expand-cpp-options = \ +$(call expand-cpp-options-impl,$(filter %.cpp-options,$1)) + +ifeq ($(out_base),$(src_base)) +$(out_base)/%.o: $(src_base)/%.$(cxx_s_suffix) +else +$(out_base)/%.o: $(src_base)/%.$(cxx_s_suffix) | $$(dir $$@). +endif + $(call message,c++ $<,$(cxx) \ +$(cpp_options) $(call expand-cpp-options,$^) $(cxx_pp_extra_options) \ +$(cxx_options) $(cxx_pic_options) $(cxx_extra_options) -o $@ -c $<) + +ifneq ($(out_base),$(src_base)) + +$(out_base)/%.o: $(out_base)/%.$(cxx_s_suffix) | $$(dir $$@). + $(call message,c++ $<,$(cxx) \ +$(cpp_options) $(call expand-cpp-options,$^) $(cxx_pp_extra_options) \ +$(cxx_options) $(cxx_pic_options) $(cxx_extra_options) -o $@ -c $<) + +endif + +.PHONY: $(out_base)/%.o.$(cxx_s_suffix).clean + +$(out_base)/%.o.$(cxx_s_suffix).clean: + $(call message,rm $$1,rm -f $$1,$(basename $(basename $@))) diff --git a/build-0.3/cxx/intel/o-e.make b/build-0.3/cxx/intel/o-e.make new file mode 100644 index 0000000..c92173a --- /dev/null +++ b/build-0.3/cxx/intel/o-e.make @@ -0,0 +1,39 @@ +# file : build/cxx/intel/o-e.make +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2004-2010 Code Synthesis Tools CC +# license : GNU GPL v2; see accompanying LICENSE file + +$(call include,$(bld_root)/cxx/intel/configuration.make) + +#@@ should it be lib%.so? +# +ifneq ($(cxx_extra_lib_paths),) +vpath %.so $(cxx_extra_lib_paths) +vpath %.a $(cxx_extra_lib_paths) +endif + +ifneq ($(cxx_intel_libraries),) +vpath %.so $(cxx_intel_libraries) +vpath %.a $(cxx_intel_libraries) +endif + +$(out_base)/%: ld := $(cxx_intel) +$(out_base)/%: ld_options := $(cxx_intel_optimization_options) $(cxx_intel_debugging_options) $(cxx_ld_extra_options) + +$(out_base)/%: expand-l = $(if $(subst n,,$(cxx_rpath)),\ +$(shell sed -e 's%^rpath:\(.*\)%-Wl,-rpath,\1%' $1),\ +$(shell sed -e 's%^rpath:\(.*\)%%' $1)) + +ifeq ($(out_base),$(src_base)) +$(out_base)/%: $(out_base)/%.o +else +$(out_base)/%: $(out_base)/%.o | $$(dir $$@). +endif + $(call message,ld $@,$(ld) \ +$(cxx_extra_options) $(ld_options) $(cxx_ld_extra_options) -o $@ \ +$(foreach f,$^,$(if $(patsubst %.l,,$f),$f,$(call expand-l,$f))) $(cxx_extra_libs)) + +.PHONY: $(out_base)/%.o.clean + +$(out_base)/%.o.clean: + $(call message,rm $(basename $(basename $@)),rm -f $(basename $@) $(basename $(basename $@))) diff --git a/build-0.3/cxx/intel/o-l.make b/build-0.3/cxx/intel/o-l.make new file mode 100644 index 0000000..76f8cff --- /dev/null +++ b/build-0.3/cxx/intel/o-l.make @@ -0,0 +1,72 @@ +# file : build/cxx/intel/o-l.make +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2004-2010 Code Synthesis Tools CC +# license : GNU GPL v2; see accompanying LICENSE file + +$(call include,$(bld_root)/cxx/intel/configuration.make) + +ifneq ($(cxx_extra_lib_paths),) +vpath %.so $(cxx_extra_lib_paths) +vpath %.a $(cxx_extra_lib_paths) +endif + +ifneq ($(cxx_intel_libraries),) +vpath %.so $(cxx_intel_libraries) +vpath %.a $(cxx_intel_libraries) +endif + +ifdef ld_lib_type + +.PHONY: $(out_base)/%.l.o.clean + +ifeq ($(ld_lib_type),archive) + +$(out_base)/%.l: ar := $(ld_lib_ar) +$(out_base)/%.l: ar_options ?= -rc + +$(out_base)/%.l: ranlib := $(ld_lib_ranlib) +$(out_base)/%.l: ranlib_options ?= + +ifeq ($(out_base),$(src_base)) +$(out_base)/%.l: +else +$(out_base)/%.l: | $$(dir $$@). +endif + $(call message,ar $@,$(ar) $(ar_options) $(@D)/lib$(basename $(@F)).a $(filter %.o,$^)) + $(call message,,$(ranlib) $(ranlib_options) $(@D)/lib$(basename $(@F)).a) + $(call message,,echo "$(@D)/lib$(basename $(@F)).a" >$@) + $(call message,,echo "$(patsubst %.l,`cat %.l`,$(filter %.a %.so %.l,$^))" | xargs -n 1 echo >>$@) + +$(out_base)/%.l.o.clean: + $(call message,rm $$1,rm -f $$1 $(@D)/$(patsubst %.l.o.clean,lib%.a,$(@F)),$(basename $(basename $@))) + +else + +$(out_base)/%.l: ld := $(cxx_intel) +$(out_base)/%.l: ld_options := $(cxx_intel_optimization_options) $(cxx_intel_debugging_options) +$(out_base)/%.l: c_pic_options := -fPIC +$(out_base)/%.l: cxx_pic_options := -fPIC +$(out_base)/%.l: comma_ := , + +$(out_base)/%.l: expand-l = $(if $(subst n,,$(cxx_rpath)),\ +$(shell sed -e 's%^rpath:\(.*\)%-Wl,-rpath,\1%' $1),\ +$(shell sed -e 's%^rpath:\(.*\)%%' $1)) + +ifeq ($(out_base),$(src_base)) +$(out_base)/%.l: +else +$(out_base)/%.l: | $$(dir $$@). +endif + $(call message,ld $@,$(ld) -shared \ +$(cxx_extra_options) $(ld_options) $(cxx_ld_extra_options) \ +-o $(@D)/lib$(basename $(@F)).so -Wl$(comma_)-soname=lib$(basename $(@F)).so \ +$(foreach f,$^,$(if $(patsubst %.l,,$f),$f,$(call expand-l,$f))) $(cxx_extra_libs)) + $(call message,,echo "$(@D)/lib$(basename $(@F)).so" >$@) + $(call message,,echo "rpath:$(@D)" >>$@) + $(call message,,echo "$(patsubst %.l,`cat %.l`,$(filter %.a %.so %.l,$^))" | xargs -n 1 echo >>$@) + +$(out_base)/%.l.o.clean: + $(call message,rm $$1,rm -f $$1 $(@D)/$(patsubst %.l.o.clean,lib%.so,$(@F)),$(basename $(basename $@))) + +endif +endif diff --git a/build-0.3/cxx/o-e.make b/build-0.3/cxx/o-e.make new file mode 100644 index 0000000..55486b3 --- /dev/null +++ b/build-0.3/cxx/o-e.make @@ -0,0 +1,10 @@ +# file : build/cxx/o-e.make +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2004-2010 Code Synthesis Tools CC +# license : GNU GPL v2; see accompanying LICENSE file + +$(call include,$(bld_root)/cxx/configuration.make) + +ifdef cxx_id +$(call include-once,$(bld_root)/cxx/$(cxx_id)/o-e.make,$(out_base)) +endif diff --git a/build-0.3/cxx/o-l.make b/build-0.3/cxx/o-l.make new file mode 100644 index 0000000..5eb04d4 --- /dev/null +++ b/build-0.3/cxx/o-l.make @@ -0,0 +1,11 @@ +# file : build/cxx/o-l.make +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2004-2010 Code Synthesis Tools CC +# license : GNU GPL v2; see accompanying LICENSE file + +$(call include,$(bld_root)/ld/configuration-lib.make) +$(call include,$(bld_root)/cxx/configuration.make) + +ifdef cxx_id +$(call include-once,$(bld_root)/cxx/$(cxx_id)/o-l.make,$(out_base)) +endif diff --git a/build-0.3/dialog.bash b/build-0.3/dialog.bash new file mode 100644 index 0000000..17cced0 --- /dev/null +++ b/build-0.3/dialog.bash @@ -0,0 +1,249 @@ +# file : build/dialog.bash +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2004-2010 Code Synthesis Tools CC +# license : GNU GPL v2; see accompanying LICENSE file + +# bld_root - build root +# MAKE - GNU make executable +# + +#@@ can't I do exec 1>&2 or something? +# +function echo_error () +{ + echo "$*" 1>&2 +} + +echo=echo_error + +function abspath_old () +{ + local r=`eval echo $1` # for tilde-expansion + + if [ "`echo $r | sed -e 's%^/.*$%%'`" ]; then + + r=`pwd`/$r + fi + + # remove trailing `/' + # + r=`echo $r | sed -e 's%^\(.\+\)/$%\1%'` + + echo $r +} + +# Get rid of jobserver info. See GNU make bug #12229. +# +MAKEFLAGS=`echo $MAKEFLAGS | sed -e 's/--jobserver-fds=[^ ]* *//g'` +MAKEFLAGS=`echo $MAKEFLAGS | sed -e 's/-j *//g'` + + +function abspath () +{ + local r=`eval echo $1` # for tilde-expansion + + $MAKE --no-print-directory -f $bld_root/abspath.make $r +} + +# $1 Default answer ('y' or 'n'). [optional] +# +function read_y_n () +{ + local r + + while [ -z "$r" ]; do + + read -p "[$1]: " r + + if [ -z "$r" ]; then + r=$1 + fi + + case "$r" in + y) ;; + n) ;; + *) r= ;; + esac + done + + echo $r +} + +# $1 Default answer. [optional] +# +function read_value () +{ + local r + + read -p "[$1]: " r + + if [ -z "$r" ]; then + r=$1 + fi + + echo $r +} + +# $1 Space-separated list of options. +# $2 Default answer from the list of options. [optional] +# +function read_option () +{ + local d o r i + + if [ "$2" ]; then + + d=1 + + for o in $1; do + + if [ "$o" = "$2" ]; then break; fi + + d=$(($d + 1)) + done + fi + + while [ -z "$r" ]; do + + read -p "[$d]: " r + + if [ -z "$r" ]; then + + r=$d + fi + + i=1 + + for o in $1; do + + if [ "$i" = "$r" ]; then + + echo $o + return 0 + fi + + i=$(($i + 1)) + done + + # User must have entered some junk so let's ask her again. + # + r= + done +} + + +# $1 Default answer. [optional] +# +# --command - path to be read is a command (implies --exist) +# +# --directory - path to be read is a directory +# +# --exist - path to be read should exist +# +# +function read_path () +{ + local command=0 + local directory=0 + local exist=0 + + # Parse options + # + while [ "$1" ]; do + case $1 in + + --command) + + command=1 + exist=1 + shift + ;; + + --directory) + + directory=1 + shift + ;; + + --exist) + + exist=1 + shift + ;; + + *) + + break + ;; + + esac + done + + local r tmp + + while [ -z "$r" ]; do + + read -e -p "[$1]: " r + + if [ -z "$r" ]; then + + r=$1 + fi + + if [ -z "$r" ]; then + + continue + fi + + + if [ $command == 1 ]; then + + # Do tilde expansion. + # + r=`eval echo $r` + + # Extract first word. + # + local cmd=`echo $r | cut -d " " -f 1` + + type -p $cmd 1>/dev/null 2>&1 + + if [ $? != 0 ]; then + + $echo "$r: command not found" + r= + + fi + + continue + fi + + # abspath & checks + # + r=`abspath $r` + + if [ $exist == 1 ]; then + + if [ $directory == 1 ]; then + + if [ ! -d "$r" ]; then + + $echo "$r: no such directory" + r= + continue + fi + + else # something else + + if [ ! -e "$r" ]; then + + $echo "$r: no such file or directory" + r= + continue + fi + fi + fi + done + + echo $r +} diff --git a/build-0.3/dir.make b/build-0.3/dir.make new file mode 100644 index 0000000..32227b5 --- /dev/null +++ b/build-0.3/dir.make @@ -0,0 +1,9 @@ +# file : build/dir.make +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2004-2010 Code Synthesis Tools CC +# license : GNU GPL v2; see accompanying LICENSE file + +.PRECIOUS: %/. + +%/. : + $(call message,,mkdir -p $*) diff --git a/build-0.3/frame.make b/build-0.3/frame.make new file mode 100644 index 0000000..bb1526c --- /dev/null +++ b/build-0.3/frame.make @@ -0,0 +1,104 @@ +# file : build/frame.make +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2004-2010 Code Synthesis Tools CC +# license : GNU GPL v2; see accompanying LICENSE file + +%frame_exclude% += CURDIR SHELL MAKEFILE_LIST MAKEFLAGS +%frame_include% := #.DEFAULT_GOAL - for some reason it is already in the list + + +# return only vars with 'file' origin +# +%frame_exclude% += frame-vars-stage +define frame-vars-stage +$(foreach v,$1,$(if $(findstring file,$(origin $v)),$v)) +endef + + +# $1 holds exclusion list +# +%frame_exclude% += frame-vars +define frame-vars +$(call frame-vars-stage,$(filter-out \%% $(%frame_exclude%) $1,$(.VARIABLES))) \ +$(filter-out $1,$(%frame_include%)) +endef + + +%frame% := frame% + + +%frame_exclude% += frame-set-recursive +define frame-set-recursive +define $1 +$2 +endef +endef + +%frame_exclude% += frame-undefine +ifneq ($(filter undefine,$(.FEATURES)),) +define frame-undefine +$(eval undefine $$1) +endef +define frame-undefine-imm +$(eval undefine $1) +endef +else +define frame-undefine +$(eval $$1 :=) +endef +define frame-undefine-imm +$(eval $1 :=) +endef +endif + +%frame_exclude% += frame-save +define frame-save +$(eval $(if $(filter simple,$(flavor $1)),\ +%$1/$(%frame%) := $(value $1),\ +$(call frame-set-recursive,%$1/$(%frame%),$(value $1)))) +endef + +%frame_exclude% += frame-restore +define frame-restore +$(eval $(if $(filter simple,$(flavor %$1/$(%frame%))),\ +$1 := $(value %$1/$(%frame%)),\ +$(call frame-set-recursive,$1,$(value %$1/$(%frame%)))))\ +$(call frame-undefine-imm,%$1/$(%frame%)) +endef + +# Use debug messages to check for garbage being framed. +# + +#$$(warning framing $$(value %vars_$(%frame%))) + +%frame_exclude% += frame-enter-body +define frame-enter-body +%vars_$(%frame%) := $(call frame-vars,$1) +%excl_$(%frame%) := $1 +$$(foreach v,$$(value %vars_$(%frame%)),$$(call frame-save,$$v)) +%frame% := frame/$(%frame%) +endef + +%frame_exclude% += frame-enter +define frame-enter +$(eval $(call frame-enter-body,$1)) +endef + + +#$$(warning restoring $$(value %vars_$$(%frame%))) + +%frame_exclude% += frame-leave-body +define frame-leave-body +%frame% := $(patsubst frame/%,%,$(%frame%)) +$$(foreach v,$$(value %vars_$$(%frame%)),$$(call frame-restore,$$v)) +$$(foreach v,\ +$$(filter-out $$(value %vars_$$(%frame%)),$$(call frame-vars,$$(value %excl_$$(%frame%)))),\ +$$(call frame-undefine,$$v)) +$$(call frame-undefine,%vars_$$(%frame%)) +$$(call frame-undefine,%excl_$$(%frame%)) +endef + +%frame_exclude% += frame-leave +define frame-leave +$(eval $(call frame-leave-body)) +endef diff --git a/build-0.3/git/gitignore b/build-0.3/git/gitignore new file mode 100755 index 0000000..a8828d7 --- /dev/null +++ b/build-0.3/git/gitignore @@ -0,0 +1,13 @@ +#! /usr/bin/env bash + +# file : build/git/gitignore +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2004-2010 Code Synthesis Tools CC +# license : GNU GPL v2; see accompanying LICENSE file + +echo '# Generated .gitignore file; do not edit or version control.' +echo '#' + +for f in "$@"; do +echo $f +done diff --git a/build-0.3/git/gitignore.make b/build-0.3/git/gitignore.make new file mode 100644 index 0000000..c42467a --- /dev/null +++ b/build-0.3/git/gitignore.make @@ -0,0 +1,11 @@ +# file : build/git/gitignore.make +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2004-2010 Code Synthesis Tools CC +# license : GNU GPL v2; see accompanying LICENSE file + +$(out_base)/.gitignore: + @$(bld_root)/git/gitignore $(files) >$@ + +.PHONY: $(out_base)/.gitignore.clean +$(out_base)/.gitignore.clean: + @rm -f $(basename $@) diff --git a/build-0.3/import.make b/build-0.3/import.make new file mode 100644 index 0000000..122aee0 --- /dev/null +++ b/build-0.3/import.make @@ -0,0 +1,75 @@ +# file : build/import.make +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2004-2010 Code Synthesis Tools CC +# license : GNU GPL v2; see accompanying LICENSE file + + +# This cannot be eliminated. +# +%frame_exclude% += import-set-value +define import-set-value +$(eval $$1 := $$2) +endef + +%frame_exclude% += exported-names +define exported-names +$(foreach i,1 2 3 4 5 6 7,$(if $(value $i),$(lastword $(value $i)))) +endef + +%frame_exclude% += import-names +define import-names +$(foreach i,1 2 3 4 5 6 7,$(if $(lastword $(value $i)),\ +$(call import-set-value,$(lastword $(value $i)),$(value $(firstword $(value $i)))))) +endef + +%frame_exclude% += import-body +define import-body +$(call frame-enter,$(call exported-names,$2,$3,$4,$5,$6,$7,$8)) + +$(call include,$1) + +$(call import-names,$2,$3,$4,$5,$6,$7,$8) + +$(call frame-leave) +endef + + +# Simple case where there are no names imported. Also note that we use +# include-once here since there is no reason to do it more than once. +# We key it onto out_root to make sure we don't process the same makefile +# more than once since that's what export stubs do. +# +%frame_exclude% += import-body-simple +define import-body-simple +$(call frame-enter) + +$(call include-once,$1,$(out_root)) + +$(call frame-leave) +endef + + +# +# +%frame_exclude% += import +define import +$(eval $(if $(strip $2),\ +$(call import-body,$1,$2,$3,$4,$5,$6,$7,$8),\ +$(call import-body-simple,$1))) +endef + + +# +# export +# +%frame_exclude% += export-names +define export-names +$(foreach i,1 2 3 4 5 6 7,$(if $(value $i),\ +$(call import-set-value,$(firstword $(value $i)),$(wordlist 2,$(words $(value $i)),$(value $i))))) +endef + + +%frame_exclude% += export +define export +$(call export-names,$1,$2,$3,$4,$5,$6,$7) +endef diff --git a/build-0.3/install.make b/build-0.3/install.make new file mode 100644 index 0000000..213ad28 --- /dev/null +++ b/build-0.3/install.make @@ -0,0 +1,7 @@ +# file : build/install/install.make +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2004-2010 Code Synthesis Tools CC +# license : GNU GPL v2; see accompanying LICENSE file + +$(call include,$(bld_root)/install/configuration.make) +$(call include-once,$(bld_root)/install/install-functions.make,$(out_base)) diff --git a/build-0.3/install/configuration.make b/build-0.3/install/configuration.make new file mode 100644 index 0000000..66c9dd3 --- /dev/null +++ b/build-0.3/install/configuration.make @@ -0,0 +1,46 @@ +# file : build/install/configuration.make +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2004-2010 Code Synthesis Tools CC +# license : GNU GPL v2; see accompanying LICENSE file + +install_prefix := /usr/local +install_data_prefix := $(install_prefix) +install_exec_prefix := $(install_prefix) + +install_bin_dir := $(install_exec_prefix)/bin +install_sbin_dir := $(install_exec_prefix)/sbin +install_lib_dir := $(install_exec_prefix)/lib + +install_data_dir := $(install_data_prefix)/share +install_inc_dir := $(install_data_prefix)/include + +install_doc_dir := $(install_data_dir)/doc +install_man_dir := $(install_data_dir)/man +install_info_dir := $(install_data_dir)/info + +$(out_root)/%: install_bin_dir := $(install_bin_dir) +$(out_root)/%: install_sbin_dir := $(install_sbin_dir) +$(out_root)/%: install_lib_dir := $(install_lib_dir) + +$(out_root)/%: install_inc_dir := $(install_inc_dir) +$(out_root)/%: install_data_dir := $(install_data_dir) + +$(out_root)/%: install_doc_dir := $(install_doc_dir) +$(out_root)/%: install_man_dir := $(install_man_dir) +$(out_root)/%: install_info_dir := $(install_info_dir) + +install_cmd := $(bld_root)/install/install + +install_dir := $(install_cmd) -d -m 755 +install_data := $(install_cmd) -p -m 644 +install_exec := $(install_cmd) -p -m 755 + +$(out_root)/%: install_dir := $(install_dir) +$(out_root)/%: install_data := $(install_data) +$(out_root)/%: install_exec := $(install_exec) + + +#@@ Installation process is very os-dependant. For example +# on BSD there is libexec but there is no such thing on +# GNU/Linux. +# diff --git a/build-0.3/install/install b/build-0.3/install/install new file mode 100755 index 0000000..20193b6 --- /dev/null +++ b/build-0.3/install/install @@ -0,0 +1,22 @@ +#! /usr/bin/env bash + +# file : build/install/install +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2004-2010 Code Synthesis Tools CC +# license : GNU GPL v2; see accompanying LICENSE file + +# Run native install command if available and install-sh otherwise. +# Also strip the -p argument (should be first) if calling install-sh +# which doesn't support it. +# + +type install >/dev/null 2>&1 + +if [ $? -eq 0 ]; then + exec install $* +else + if [ "$1" = "-p" ]; then + shift + fi + exec `dirname $0`/install-sh $* +fi diff --git a/build-0.3/install/install-functions.make b/build-0.3/install/install-functions.make new file mode 100644 index 0000000..4434cbe --- /dev/null +++ b/build-0.3/install/install-functions.make @@ -0,0 +1,38 @@ +# file : build/install/install-functions.make +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2004-2010 Code Synthesis Tools CC +# license : GNU GPL v2; see accompanying LICENSE file + +#@@ could just call it functions.make +# + +$(out_base)/%: install-exec = \ +$(call message,,$(install_dir) $(dir $2))$(literal_newline)\ +$(literal_tab)$(call message,install $2,$(install_exec) $1 $2) + + +$(out_base)/%: install-lib = \ +$(call message,install $2,$(install_dir) $(dir $2))$(literal_newline)\ +$(literal_tab)$(call message,,$(value $(if $(patsubst %.so,,$(shell\ + sed -e '1q' <$1)),install_data,install_exec)) $(shell sed -e '1q' <$1) $2) + + +$(out_base)/%: install-data = \ +$(call message,install $2,$(install_dir) $(dir $2))$(literal_newline)\ +$(literal_tab)$(call message,,$(install_data) $1 $2) + + +$(out_base)/%: install-dir = \ +$(call message,install $2/,find -L $1 $3 -type f -print \ +| xargs -n 1 $(bld_root)/run-if-arg dirname \ +| sort -u \ +| sed -e 's%$1\(.*\)%$2/\1%' \ +| xargs -n 1 $(bld_root)/run-if-arg "$(install_dir)")$(literal_newline)\ +$(literal_tab)$(call message,,\ +find -L $1 $3 -type f ! -perm -100 -print \ +| sed -e 's%$1\(.*\)%$1/\1 $2/\1%' \ +| xargs -n 2 $(bld_root)/run-if-arg "$(install_data)")$(literal_newline)\ +$(literal_tab)$(call message,,\ +find -L $1 $3 -type f -perm -100 -print \ +| sed -e 's%$1\(.*\)%$1/\1 $2/\1%' \ +| xargs -n 2 $(bld_root)/run-if-arg "$(install_exec)") diff --git a/build-0.3/install/install-sh b/build-0.3/install/install-sh new file mode 100755 index 0000000..a5897de --- /dev/null +++ b/build-0.3/install/install-sh @@ -0,0 +1,519 @@ +#!/bin/sh +# install - install a program, script, or datafile + +scriptversion=2006-12-25.00 + +# This originates from X11R5 (mit/util/scripts/install.sh), which was +# later released in X11R6 (xc/config/util/install.sh) with the +# following copyright and license. +# +# Copyright (C) 1994 X Consortium +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to +# deal in the Software without restriction, including without limitation the +# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +# sell copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN +# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- +# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +# +# Except as contained in this notice, the name of the X Consortium shall not +# be used in advertising or otherwise to promote the sale, use or other deal- +# ings in this Software without prior written authorization from the X Consor- +# tium. +# +# +# FSF changes to this file are in the public domain. +# +# Calling this script install-sh is preferred over install.sh, to prevent +# `make' implicit rules from creating a file called install from it +# when there is no Makefile. +# +# This script is compatible with the BSD install script, but was written +# from scratch. + +nl=' +' +IFS=" "" $nl" + +# set DOITPROG to echo to test this script + +# Don't use :- since 4.3BSD and earlier shells don't like it. +doit=${DOITPROG-} +if test -z "$doit"; then + doit_exec=exec +else + doit_exec=$doit +fi + +# Put in absolute file names if you don't have them in your path; +# or use environment vars. + +chgrpprog=${CHGRPPROG-chgrp} +chmodprog=${CHMODPROG-chmod} +chownprog=${CHOWNPROG-chown} +cmpprog=${CMPPROG-cmp} +cpprog=${CPPROG-cp} +mkdirprog=${MKDIRPROG-mkdir} +mvprog=${MVPROG-mv} +rmprog=${RMPROG-rm} +stripprog=${STRIPPROG-strip} + +posix_glob='?' +initialize_posix_glob=' + test "$posix_glob" != "?" || { + if (set -f) 2>/dev/null; then + posix_glob= + else + posix_glob=: + fi + } +' + +posix_mkdir= + +# Desired mode of installed file. +mode=0755 + +chgrpcmd= +chmodcmd=$chmodprog +chowncmd= +mvcmd=$mvprog +rmcmd="$rmprog -f" +stripcmd= + +src= +dst= +dir_arg= +dst_arg= + +copy_on_change=false +no_target_directory= + +usage="\ +Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE + or: $0 [OPTION]... SRCFILES... DIRECTORY + or: $0 [OPTION]... -t DIRECTORY SRCFILES... + or: $0 [OPTION]... -d DIRECTORIES... + +In the 1st form, copy SRCFILE to DSTFILE. +In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. +In the 4th, create DIRECTORIES. + +Options: + --help display this help and exit. + --version display version info and exit. + + -c (ignored) + -C install only if different (preserve the last data modification time) + -d create directories instead of installing files. + -g GROUP $chgrpprog installed files to GROUP. + -m MODE $chmodprog installed files to MODE. + -o USER $chownprog installed files to USER. + -s $stripprog installed files. + -t DIRECTORY install into DIRECTORY. + -T report an error if DSTFILE is a directory. + +Environment variables override the default commands: + CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG + RMPROG STRIPPROG +" + +while test $# -ne 0; do + case $1 in + -c) ;; + + -C) copy_on_change=true;; + + -d) dir_arg=true;; + + -g) chgrpcmd="$chgrpprog $2" + shift;; + + --help) echo "$usage"; exit $?;; + + -m) mode=$2 + case $mode in + *' '* | *' '* | *' +'* | *'*'* | *'?'* | *'['*) + echo "$0: invalid mode: $mode" >&2 + exit 1;; + esac + shift;; + + -o) chowncmd="$chownprog $2" + shift;; + + -s) stripcmd=$stripprog;; + + -t) dst_arg=$2 + shift;; + + -T) no_target_directory=true;; + + --version) echo "$0 $scriptversion"; exit $?;; + + --) shift + break;; + + -*) echo "$0: invalid option: $1" >&2 + exit 1;; + + *) break;; + esac + shift +done + +if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then + # When -d is used, all remaining arguments are directories to create. + # When -t is used, the destination is already specified. + # Otherwise, the last argument is the destination. Remove it from $@. + for arg + do + if test -n "$dst_arg"; then + # $@ is not empty: it contains at least $arg. + set fnord "$@" "$dst_arg" + shift # fnord + fi + shift # arg + dst_arg=$arg + done +fi + +if test $# -eq 0; then + if test -z "$dir_arg"; then + echo "$0: no input file specified." >&2 + exit 1 + fi + # It's OK to call `install-sh -d' without argument. + # This can happen when creating conditional directories. + exit 0 +fi + +if test -z "$dir_arg"; then + trap '(exit $?); exit' 1 2 13 15 + + # Set umask so as not to create temps with too-generous modes. + # However, 'strip' requires both read and write access to temps. + case $mode in + # Optimize common cases. + *644) cp_umask=133;; + *755) cp_umask=22;; + + *[0-7]) + if test -z "$stripcmd"; then + u_plus_rw= + else + u_plus_rw='% 200' + fi + cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; + *) + if test -z "$stripcmd"; then + u_plus_rw= + else + u_plus_rw=,u+rw + fi + cp_umask=$mode$u_plus_rw;; + esac +fi + +for src +do + # Protect names starting with `-'. + case $src in + -*) src=./$src;; + esac + + if test -n "$dir_arg"; then + dst=$src + dstdir=$dst + test -d "$dstdir" + dstdir_status=$? + else + + # Waiting for this to be detected by the "$cpprog $src $dsttmp" command + # might cause directories to be created, which would be especially bad + # if $src (and thus $dsttmp) contains '*'. + if test ! -f "$src" && test ! -d "$src"; then + echo "$0: $src does not exist." >&2 + exit 1 + fi + + if test -z "$dst_arg"; then + echo "$0: no destination specified." >&2 + exit 1 + fi + + dst=$dst_arg + # Protect names starting with `-'. + case $dst in + -*) dst=./$dst;; + esac + + # If destination is a directory, append the input filename; won't work + # if double slashes aren't ignored. + if test -d "$dst"; then + if test -n "$no_target_directory"; then + echo "$0: $dst_arg: Is a directory" >&2 + exit 1 + fi + dstdir=$dst + dst=$dstdir/`basename "$src"` + dstdir_status=0 + else + # Prefer dirname, but fall back on a substitute if dirname fails. + dstdir=` + (dirname "$dst") 2>/dev/null || + expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$dst" : 'X\(//\)[^/]' \| \ + X"$dst" : 'X\(//\)$' \| \ + X"$dst" : 'X\(/\)' \| . 2>/dev/null || + echo X"$dst" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q' + ` + + test -d "$dstdir" + dstdir_status=$? + fi + fi + + obsolete_mkdir_used=false + + if test $dstdir_status != 0; then + case $posix_mkdir in + '') + # Create intermediate dirs using mode 755 as modified by the umask. + # This is like FreeBSD 'install' as of 1997-10-28. + umask=`umask` + case $stripcmd.$umask in + # Optimize common cases. + *[2367][2367]) mkdir_umask=$umask;; + .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; + + *[0-7]) + mkdir_umask=`expr $umask + 22 \ + - $umask % 100 % 40 + $umask % 20 \ + - $umask % 10 % 4 + $umask % 2 + `;; + *) mkdir_umask=$umask,go-w;; + esac + + # With -d, create the new directory with the user-specified mode. + # Otherwise, rely on $mkdir_umask. + if test -n "$dir_arg"; then + mkdir_mode=-m$mode + else + mkdir_mode= + fi + + posix_mkdir=false + case $umask in + *[123567][0-7][0-7]) + # POSIX mkdir -p sets u+wx bits regardless of umask, which + # is incompatible with FreeBSD 'install' when (umask & 300) != 0. + ;; + *) + tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ + trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 + + if (umask $mkdir_umask && + exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 + then + if test -z "$dir_arg" || { + # Check for POSIX incompatibilities with -m. + # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or + # other-writeable bit of parent directory when it shouldn't. + # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. + ls_ld_tmpdir=`ls -ld "$tmpdir"` + case $ls_ld_tmpdir in + d????-?r-*) different_mode=700;; + d????-?--*) different_mode=755;; + *) false;; + esac && + $mkdirprog -m$different_mode -p -- "$tmpdir" && { + ls_ld_tmpdir_1=`ls -ld "$tmpdir"` + test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" + } + } + then posix_mkdir=: + fi + rmdir "$tmpdir/d" "$tmpdir" + else + # Remove any dirs left behind by ancient mkdir implementations. + rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null + fi + trap '' 0;; + esac;; + esac + + if + $posix_mkdir && ( + umask $mkdir_umask && + $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" + ) + then : + else + + # The umask is ridiculous, or mkdir does not conform to POSIX, + # or it failed possibly due to a race condition. Create the + # directory the slow way, step by step, checking for races as we go. + + case $dstdir in + /*) prefix='/';; + -*) prefix='./';; + *) prefix='';; + esac + + eval "$initialize_posix_glob" + + oIFS=$IFS + IFS=/ + $posix_glob set -f + set fnord $dstdir + shift + $posix_glob set +f + IFS=$oIFS + + prefixes= + + for d + do + test -z "$d" && continue + + prefix=$prefix$d + if test -d "$prefix"; then + prefixes= + else + if $posix_mkdir; then + (umask=$mkdir_umask && + $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break + # Don't fail if two instances are running concurrently. + test -d "$prefix" || exit 1 + else + case $prefix in + *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; + *) qprefix=$prefix;; + esac + prefixes="$prefixes '$qprefix'" + fi + fi + prefix=$prefix/ + done + + if test -n "$prefixes"; then + # Don't fail if two instances are running concurrently. + (umask $mkdir_umask && + eval "\$doit_exec \$mkdirprog $prefixes") || + test -d "$dstdir" || exit 1 + obsolete_mkdir_used=true + fi + fi + fi + + if test -n "$dir_arg"; then + { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && + { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && + { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || + test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 + else + + # Make a couple of temp file names in the proper directory. + dsttmp=$dstdir/_inst.$$_ + rmtmp=$dstdir/_rm.$$_ + + # Trap to clean up those temp files at exit. + trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 + + # Copy the file name to the temp name. + (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && + + # and set any options; do chmod last to preserve setuid bits. + # + # If any of these fail, we abort the whole thing. If we want to + # ignore errors from any of these, just make sure not to ignore + # errors from the above "$doit $cpprog $src $dsttmp" command. + # + { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && + { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && + { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && + { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && + + # If -C, don't bother to copy if it wouldn't change the file. + if $copy_on_change && + old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && + new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && + + eval "$initialize_posix_glob" && + $posix_glob set -f && + set X $old && old=:$2:$4:$5:$6 && + set X $new && new=:$2:$4:$5:$6 && + $posix_glob set +f && + + test "$old" = "$new" && + $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 + then + rm -f "$dsttmp" + else + # Rename the file to the real destination. + $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || + + # The rename failed, perhaps because mv can't rename something else + # to itself, or perhaps because mv is so ancient that it does not + # support -f. + { + # Now remove or move aside any old file at destination location. + # We try this two ways since rm can't unlink itself on some + # systems and the destination file might be busy for other + # reasons. In this case, the final cleanup might fail but the new + # file should still install successfully. + { + test ! -f "$dst" || + $doit $rmcmd -f "$dst" 2>/dev/null || + { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && + { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } + } || + { echo "$0: cannot unlink or rename $dst" >&2 + (exit 1); exit 1 + } + } && + + # Now rename the file to the real destination. + $doit $mvcmd "$dsttmp" "$dst" + } + fi || exit 1 + + trap '' 0 + fi +done + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-end: "$" +# End: diff --git a/build-0.3/ld/configuration-lib-rules.make b/build-0.3/ld/configuration-lib-rules.make new file mode 100644 index 0000000..686d975 --- /dev/null +++ b/build-0.3/ld/configuration-lib-rules.make @@ -0,0 +1,16 @@ +# file : build/ld/configuration-lib-rules.make +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2004-2010 Code Synthesis Tools CC +# license : GNU GPL v2; see accompanying LICENSE file + +$(dcf_root)/ld/configuration-lib-dynamic.make: | $(dcf_root)/ld/. + $(call message,,$(bld_root)/ld/configure-lib $@) + + +ifndef %foreign% + +disfigure:: + $(call message,rm $(dcf_root)/ld/configuration-lib-dynamic.make,\ +rm -f $(dcf_root)/ld/configuration-lib-dynamic.make) + +endif diff --git a/build-0.3/ld/configuration-lib-static.make b/build-0.3/ld/configuration-lib-static.make new file mode 100644 index 0000000..5d26e8a --- /dev/null +++ b/build-0.3/ld/configuration-lib-static.make @@ -0,0 +1,10 @@ +# file : build/ld/configuration-lib-static.make +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2004-2010 Code Synthesis Tools CC +# license : GNU GPL v2; see accompanying LICENSE file + +#@@ Need to use these variables where I hardcoded those values. +# +ld_lib_prefix := lib +ld_lib_archive_suffix := .a +ld_lib_shared_suffix := .so diff --git a/build-0.3/ld/configuration-lib.make b/build-0.3/ld/configuration-lib.make new file mode 100644 index 0000000..6b910c5 --- /dev/null +++ b/build-0.3/ld/configuration-lib.make @@ -0,0 +1,42 @@ +# file : build/ld/configuration-lib.make +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2004-2010 Code Synthesis Tools CC +# license : GNU GPL v2; see accompanying LICENSE file + +$(call include-once,$(bld_root)/ld/configuration-lib-rules.make,$(dcf_root)) + +# Static configuration. +# +$(call include,$(bld_root)/ld/configuration-lib-static.make) + +ifneq ($(bld_root),$(scf_root)) +$(call -include,$(scf_root)/ld/configuration-lib-static.make) +endif + +# Dynamic configuration. +# +ld_lib_type := + +$(call -include,$(dcf_root)/ld/configuration-lib-dynamic.make) + +ifdef ld_lib_type + +ifeq ($(ld_lib_type),archive) + +ld_lib_suffix := $(ld_lib_archive_suffix) + +else + +ld_lib_suffix := $(ld_lib_shared_suffix) + +endif + +$(out_root)/%: ld_lib_type := $(ld_lib_type) +$(out_root)/%: ld_lib_prefix := $(ld_lib_prefix) +$(out_root)/%: ld_lib_suffix := $(ld_lib_suffix) + +else + +.NOTPARALLEL: + +endif diff --git a/build-0.3/ld/configure-lib b/build-0.3/ld/configure-lib new file mode 100755 index 0000000..84a2c2b --- /dev/null +++ b/build-0.3/ld/configure-lib @@ -0,0 +1,51 @@ +#! /usr/bin/env bash + +# file : build/ld/configure-lib +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2004-2010 Code Synthesis Tools CC +# license : GNU GPL v2; see accompanying LICENSE file + +# $1 out file +# +# bld_root - build root +# project_name - project name +# + +source $bld_root/dialog.bash + +$echo +$echo +$echo "configuring '$project_name'" +$echo +$echo + +$echo +$echo "Please select the default library type:" +$echo +$echo "(1) archive" +$echo "(2) shared object" +$echo + +type=`read_option "archive shared" "shared"` + +if [ "$type" == "archive" ]; then + + $echo + $echo "Please enter the archiver (ar) binary you would like to use." + $echo + + ar=`read_path --command ar` + + $echo + $echo "Please enter the indexer (ranlib) binary you would like to use." + $echo + + ranlib=`read_path --command ranlib` +fi + +echo "ld_lib_type := $type" > $1 + +if [ "$type" == "archive" ]; then + echo "ld_lib_ar := $ar" >> $1 + echo "ld_lib_ranlib := $ranlib" >> $1 +fi diff --git a/build-0.3/literals.make b/build-0.3/literals.make new file mode 100644 index 0000000..0528793 --- /dev/null +++ b/build-0.3/literals.make @@ -0,0 +1,14 @@ +# file : build/literals.make +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2004-2010 Code Synthesis Tools CC +# license : GNU GPL v2; see accompanying LICENSE file + +literal_empty := + +define literal_newline + + +endef + +literal_tab := $(literal_empty) $(literal_empty) +literal_percent := % diff --git a/build-0.3/m4/m4.make b/build-0.3/m4/m4.make new file mode 100644 index 0000000..96cd963 --- /dev/null +++ b/build-0.3/m4/m4.make @@ -0,0 +1,51 @@ +# file : build/m4/m4.make +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +# license : GNU GPL v2; see accompanying LICENSE file + +$(out_base)/%: m4 := m4 +$(out_base)/%: m4_options += + +ifeq ($(out_base),$(src_base)) +$(out_base)/%: $(src_base)/%.m4 +else +$(out_base)/%: $(src_base)/%.m4 | $$(dir $$@). +endif + $(call message,m4 $<,$(m4) $(m4_options) $< >$@) + +ifneq ($(out_base),$(src_base)) + +$(out_base)/%: $(out_base)/%.m4 | $$(dir $$@). + $(call message,m4 $<,$(m4) $(m4_options) $< >$@) + +endif + + +# @@ +# This is where things start breaking. Following standard logic I should +# make a $(out_base)/%.clean rule, i.e., "will clean anything" rule. If +# this rule happened to be before some other, more specialized rule, and +# that rule happened to rm some additional stuff (like %.o tries to rm +# .d file, which is also not quite correct...). In other word there +# doesn't seem to be a way to properly match "build" and "clean" rules. +# One idea is to make the "clean" rule depend on what "build" rule +# depends (%.m4 in our case) hoping that this way the rule won't match. +# +# There are two problems with this approach: +# +# 1. It is if not iff. However, since the rules come in pairs and make +# pick the first implicit rule that matches, it is certain that if +# make picked this "clean" rule it also picked corresponding "build" +# rule. +# +# 2. The prerequisite (%.m4) can be an intermidiate file which itself +# may not exist. We don't want make to build it just to clean it +# or, even worse, to leave it laying around. I guess the only way +# to work around this is to provide special do-nothing rules during +# cleanup. +# +# +.PHONY: $(out_base)/%.m4.clean + +$(out_base)/%.m4.clean: + $(call message,rm $(@:.m4.clean=),rm -f $(@:.m4.clean=)) diff --git a/build-0.3/message.make b/build-0.3/message.make new file mode 100644 index 0000000..ff499e6 --- /dev/null +++ b/build-0.3/message.make @@ -0,0 +1,36 @@ +# file : build/message.make +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2004-2010 Code Synthesis Tools CC +# license : GNU GPL v2; see accompanying LICENSE file + + +# @@ I should not use names like message especially if it is +# just for a convinience of a subsystem. +# +# @@ maybe I can use -message (use - in front for system +# utilities). +# + +%frame_exclude% += build-message-expand +define build-message-expand +$(eval _1 = $1)$(call _1,$2,$3,$4,$5,$6,$7,$8,$9) +endef + + +%frame_exclude% += message + +ifdef verbose + +define message +$(call build-message-expand,$2,$3,$4,$5,$6,$7,$8,$9) +endef + +else + +define message +$(if $1,@echo $(call build-message-expand,$1,$3,$4,$5,$6,$7,$8,$9) && \ + $(call build-message-expand,$2,$3,$4,$5,$6,$7,$8,$9),\ + @$(call build-message-expand,$2,$3,$4,$5,$6,$7,$8,$9)) +endef + +endif diff --git a/build-0.3/run-if-arg b/build-0.3/run-if-arg new file mode 100755 index 0000000..819a3cb --- /dev/null +++ b/build-0.3/run-if-arg @@ -0,0 +1,18 @@ +#! /usr/bin/env bash + +# file : build/run-if-arg +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2004-2010 Code Synthesis Tools CC +# license : GNU GPL v2; see accompanying LICENSE file + +# Run command if there are any non-empty arguments. +# +# $1 command to execute +# $2 argument to test + +cmd=$1 +shift + +if [ "$*" ]; then + exec $cmd $* +fi diff --git a/build-0.3/system.make b/build-0.3/system.make new file mode 100644 index 0000000..7de97db --- /dev/null +++ b/build-0.3/system.make @@ -0,0 +1,14 @@ +# file : build/system.make +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# license : GNU GPL v2; see accompanying LICENSE file + +$(call include-once,$(bld_root)/system/configuration-rules.make,$(dcf_root)) + +$(call -include,$(dcf_root)/system/configuration-dynamic.make) + +ifndef system_configuration + +.NOTPARALLEL: + +endif diff --git a/build-0.3/system/config.guess b/build-0.3/system/config.guess new file mode 100755 index 0000000..e792aac --- /dev/null +++ b/build-0.3/system/config.guess @@ -0,0 +1,1494 @@ +#! /bin/sh +# Attempt to guess a canonical system name. +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 +# Free Software Foundation, Inc. + +timestamp='2009-09-18' + +# This file is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +# 02110-1301, USA. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + + +# Originally written by Per Bothner. Please send patches (context +# diff format) to <config-patches@gnu.org> and include a ChangeLog +# entry. +# +# This script attempts to guess a canonical system name similar to +# config.sub. If it succeeds, it prints the system name on stdout, and +# exits with 0. Otherwise, it exits with 1. +# +# You can get the latest version of this script from: +# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] + +Output the configuration name of the system \`$me' is run on. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to <config-patches@gnu.org>." + +version="\ +GNU config.guess ($timestamp) + +Originally written by Per Bothner. +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, +2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit ;; + --version | -v ) + echo "$version" ; exit ;; + --help | --h* | -h ) + echo "$usage"; exit ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" >&2 + exit 1 ;; + * ) + break ;; + esac +done + +if test $# != 0; then + echo "$me: too many arguments$help" >&2 + exit 1 +fi + +trap 'exit 1' 1 2 15 + +# CC_FOR_BUILD -- compiler used by this script. Note that the use of a +# compiler to aid in system detection is discouraged as it requires +# temporary files to be created and, as you can see below, it is a +# headache to deal with in a portable fashion. + +# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still +# use `HOST_CC' if defined, but it is deprecated. + +# Portable tmp directory creation inspired by the Autoconf team. + +set_cc_for_build=' +trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; +trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; +: ${TMPDIR=/tmp} ; + { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || + { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || + { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || + { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; +dummy=$tmp/dummy ; +tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; +case $CC_FOR_BUILD,$HOST_CC,$CC in + ,,) echo "int x;" > $dummy.c ; + for c in cc gcc c89 c99 ; do + if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then + CC_FOR_BUILD="$c"; break ; + fi ; + done ; + if test x"$CC_FOR_BUILD" = x ; then + CC_FOR_BUILD=no_compiler_found ; + fi + ;; + ,,*) CC_FOR_BUILD=$CC ;; + ,*,*) CC_FOR_BUILD=$HOST_CC ;; +esac ; set_cc_for_build= ;' + +# This is needed to find uname on a Pyramid OSx when run in the BSD universe. +# (ghazi@noc.rutgers.edu 1994-08-24) +if (test -f /.attbin/uname) >/dev/null 2>&1 ; then + PATH=$PATH:/.attbin ; export PATH +fi + +UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown +UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown +UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown +UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown + +# Note: order is significant - the case branches are not exclusive. + +case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in + *:NetBSD:*:*) + # NetBSD (nbsd) targets should (where applicable) match one or + # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, + # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently + # switched to ELF, *-*-netbsd* would select the old + # object file format. This provides both forward + # compatibility and a consistent mechanism for selecting the + # object file format. + # + # Note: NetBSD doesn't particularly care about the vendor + # portion of the name. We always set it to "unknown". + sysctl="sysctl -n hw.machine_arch" + UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ + /usr/sbin/$sysctl 2>/dev/null || echo unknown)` + case "${UNAME_MACHINE_ARCH}" in + armeb) machine=armeb-unknown ;; + arm*) machine=arm-unknown ;; + sh3el) machine=shl-unknown ;; + sh3eb) machine=sh-unknown ;; + sh5el) machine=sh5le-unknown ;; + *) machine=${UNAME_MACHINE_ARCH}-unknown ;; + esac + # The Operating System including object format, if it has switched + # to ELF recently, or will in the future. + case "${UNAME_MACHINE_ARCH}" in + arm*|i386|m68k|ns32k|sh3*|sparc|vax) + eval $set_cc_for_build + if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ELF__ + then + # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). + # Return netbsd for either. FIX? + os=netbsd + else + os=netbsdelf + fi + ;; + *) + os=netbsd + ;; + esac + # The OS release + # Debian GNU/NetBSD machines have a different userland, and + # thus, need a distinct triplet. However, they do not need + # kernel version information, so it can be replaced with a + # suitable tag, in the style of linux-gnu. + case "${UNAME_VERSION}" in + Debian*) + release='-gnu' + ;; + *) + release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` + ;; + esac + # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: + # contains redundant information, the shorter form: + # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. + echo "${machine}-${os}${release}" + exit ;; + *:OpenBSD:*:*) + UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` + echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} + exit ;; + *:ekkoBSD:*:*) + echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} + exit ;; + *:SolidBSD:*:*) + echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} + exit ;; + macppc:MirBSD:*:*) + echo powerpc-unknown-mirbsd${UNAME_RELEASE} + exit ;; + *:MirBSD:*:*) + echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} + exit ;; + alpha:OSF1:*:*) + case $UNAME_RELEASE in + *4.0) + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` + ;; + *5.*) + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` + ;; + esac + # According to Compaq, /usr/sbin/psrinfo has been available on + # OSF/1 and Tru64 systems produced since 1995. I hope that + # covers most systems running today. This code pipes the CPU + # types through head -n 1, so we only detect the type of CPU 0. + ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` + case "$ALPHA_CPU_TYPE" in + "EV4 (21064)") + UNAME_MACHINE="alpha" ;; + "EV4.5 (21064)") + UNAME_MACHINE="alpha" ;; + "LCA4 (21066/21068)") + UNAME_MACHINE="alpha" ;; + "EV5 (21164)") + UNAME_MACHINE="alphaev5" ;; + "EV5.6 (21164A)") + UNAME_MACHINE="alphaev56" ;; + "EV5.6 (21164PC)") + UNAME_MACHINE="alphapca56" ;; + "EV5.7 (21164PC)") + UNAME_MACHINE="alphapca57" ;; + "EV6 (21264)") + UNAME_MACHINE="alphaev6" ;; + "EV6.7 (21264A)") + UNAME_MACHINE="alphaev67" ;; + "EV6.8CB (21264C)") + UNAME_MACHINE="alphaev68" ;; + "EV6.8AL (21264B)") + UNAME_MACHINE="alphaev68" ;; + "EV6.8CX (21264D)") + UNAME_MACHINE="alphaev68" ;; + "EV6.9A (21264/EV69A)") + UNAME_MACHINE="alphaev69" ;; + "EV7 (21364)") + UNAME_MACHINE="alphaev7" ;; + "EV7.9 (21364A)") + UNAME_MACHINE="alphaev79" ;; + esac + # A Pn.n version is a patched version. + # A Vn.n version is a released version. + # A Tn.n version is a released field test version. + # A Xn.n version is an unreleased experimental baselevel. + # 1.2 uses "1.2" for uname -r. + echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + exit ;; + Alpha\ *:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # Should we change UNAME_MACHINE based on the output of uname instead + # of the specific Alpha model? + echo alpha-pc-interix + exit ;; + 21064:Windows_NT:50:3) + echo alpha-dec-winnt3.5 + exit ;; + Amiga*:UNIX_System_V:4.0:*) + echo m68k-unknown-sysv4 + exit ;; + *:[Aa]miga[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-amigaos + exit ;; + *:[Mm]orph[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-morphos + exit ;; + *:OS/390:*:*) + echo i370-ibm-openedition + exit ;; + *:z/VM:*:*) + echo s390-ibm-zvmoe + exit ;; + *:OS400:*:*) + echo powerpc-ibm-os400 + exit ;; + arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) + echo arm-acorn-riscix${UNAME_RELEASE} + exit ;; + arm:riscos:*:*|arm:RISCOS:*:*) + echo arm-unknown-riscos + exit ;; + SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) + echo hppa1.1-hitachi-hiuxmpp + exit ;; + Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) + # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. + if test "`(/bin/universe) 2>/dev/null`" = att ; then + echo pyramid-pyramid-sysv3 + else + echo pyramid-pyramid-bsd + fi + exit ;; + NILE*:*:*:dcosx) + echo pyramid-pyramid-svr4 + exit ;; + DRS?6000:unix:4.0:6*) + echo sparc-icl-nx6 + exit ;; + DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) + case `/usr/bin/uname -p` in + sparc) echo sparc-icl-nx7; exit ;; + esac ;; + s390x:SunOS:*:*) + echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4H:SunOS:5.*:*) + echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) + echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) + eval $set_cc_for_build + SUN_ARCH="i386" + # If there is a compiler, see if it is configured for 64-bit objects. + # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. + # This test works for both compilers. + if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then + if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ + (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_64BIT_ARCH >/dev/null + then + SUN_ARCH="x86_64" + fi + fi + echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:6*:*) + # According to config.sub, this is the proper way to canonicalize + # SunOS6. Hard to guess exactly what SunOS6 will be like, but + # it's likely to be more like Solaris than SunOS4. + echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:*:*) + case "`/usr/bin/arch -k`" in + Series*|S4*) + UNAME_RELEASE=`uname -v` + ;; + esac + # Japanese Language versions have a version number like `4.1.3-JL'. + echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` + exit ;; + sun3*:SunOS:*:*) + echo m68k-sun-sunos${UNAME_RELEASE} + exit ;; + sun*:*:4.2BSD:*) + UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` + test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 + case "`/bin/arch`" in + sun3) + echo m68k-sun-sunos${UNAME_RELEASE} + ;; + sun4) + echo sparc-sun-sunos${UNAME_RELEASE} + ;; + esac + exit ;; + aushp:SunOS:*:*) + echo sparc-auspex-sunos${UNAME_RELEASE} + exit ;; + # The situation for MiNT is a little confusing. The machine name + # can be virtually everything (everything which is not + # "atarist" or "atariste" at least should have a processor + # > m68000). The system name ranges from "MiNT" over "FreeMiNT" + # to the lowercase version "mint" (or "freemint"). Finally + # the system name "TOS" denotes a system which is actually not + # MiNT. But MiNT is downward compatible to TOS, so this should + # be no problem. + atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) + echo m68k-milan-mint${UNAME_RELEASE} + exit ;; + hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) + echo m68k-hades-mint${UNAME_RELEASE} + exit ;; + *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) + echo m68k-unknown-mint${UNAME_RELEASE} + exit ;; + m68k:machten:*:*) + echo m68k-apple-machten${UNAME_RELEASE} + exit ;; + powerpc:machten:*:*) + echo powerpc-apple-machten${UNAME_RELEASE} + exit ;; + RISC*:Mach:*:*) + echo mips-dec-mach_bsd4.3 + exit ;; + RISC*:ULTRIX:*:*) + echo mips-dec-ultrix${UNAME_RELEASE} + exit ;; + VAX*:ULTRIX*:*:*) + echo vax-dec-ultrix${UNAME_RELEASE} + exit ;; + 2020:CLIX:*:* | 2430:CLIX:*:*) + echo clipper-intergraph-clix${UNAME_RELEASE} + exit ;; + mips:*:*:UMIPS | mips:*:*:RISCos) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c +#ifdef __cplusplus +#include <stdio.h> /* for printf() prototype */ + int main (int argc, char *argv[]) { +#else + int main (argc, argv) int argc; char *argv[]; { +#endif + #if defined (host_mips) && defined (MIPSEB) + #if defined (SYSTYPE_SYSV) + printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_SVR4) + printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) + printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); + #endif + #endif + exit (-1); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c && + dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && + SYSTEM_NAME=`$dummy $dummyarg` && + { echo "$SYSTEM_NAME"; exit; } + echo mips-mips-riscos${UNAME_RELEASE} + exit ;; + Motorola:PowerMAX_OS:*:*) + echo powerpc-motorola-powermax + exit ;; + Motorola:*:4.3:PL8-*) + echo powerpc-harris-powermax + exit ;; + Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) + echo powerpc-harris-powermax + exit ;; + Night_Hawk:Power_UNIX:*:*) + echo powerpc-harris-powerunix + exit ;; + m88k:CX/UX:7*:*) + echo m88k-harris-cxux7 + exit ;; + m88k:*:4*:R4*) + echo m88k-motorola-sysv4 + exit ;; + m88k:*:3*:R3*) + echo m88k-motorola-sysv3 + exit ;; + AViiON:dgux:*:*) + # DG/UX returns AViiON for all architectures + UNAME_PROCESSOR=`/usr/bin/uname -p` + if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] + then + if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ + [ ${TARGET_BINARY_INTERFACE}x = x ] + then + echo m88k-dg-dgux${UNAME_RELEASE} + else + echo m88k-dg-dguxbcs${UNAME_RELEASE} + fi + else + echo i586-dg-dgux${UNAME_RELEASE} + fi + exit ;; + M88*:DolphinOS:*:*) # DolphinOS (SVR3) + echo m88k-dolphin-sysv3 + exit ;; + M88*:*:R3*:*) + # Delta 88k system running SVR3 + echo m88k-motorola-sysv3 + exit ;; + XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) + echo m88k-tektronix-sysv3 + exit ;; + Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) + echo m68k-tektronix-bsd + exit ;; + *:IRIX*:*:*) + echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` + exit ;; + ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. + echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id + exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' + i*86:AIX:*:*) + echo i386-ibm-aix + exit ;; + ia64:AIX:*:*) + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} + exit ;; + *:AIX:2:3) + if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include <sys/systemcfg.h> + + main() + { + if (!__power_pc()) + exit(1); + puts("powerpc-ibm-aix3.2.5"); + exit(0); + } +EOF + if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` + then + echo "$SYSTEM_NAME" + else + echo rs6000-ibm-aix3.2.5 + fi + elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then + echo rs6000-ibm-aix3.2.4 + else + echo rs6000-ibm-aix3.2 + fi + exit ;; + *:AIX:*:[456]) + IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` + if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then + IBM_ARCH=rs6000 + else + IBM_ARCH=powerpc + fi + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${IBM_ARCH}-ibm-aix${IBM_REV} + exit ;; + *:AIX:*:*) + echo rs6000-ibm-aix + exit ;; + ibmrt:4.4BSD:*|romp-ibm:BSD:*) + echo romp-ibm-bsd4.4 + exit ;; + ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and + echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to + exit ;; # report: romp-ibm BSD 4.3 + *:BOSX:*:*) + echo rs6000-bull-bosx + exit ;; + DPX/2?00:B.O.S.:*:*) + echo m68k-bull-sysv3 + exit ;; + 9000/[34]??:4.3bsd:1.*:*) + echo m68k-hp-bsd + exit ;; + hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) + echo m68k-hp-bsd4.4 + exit ;; + 9000/[34678]??:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + case "${UNAME_MACHINE}" in + 9000/31? ) HP_ARCH=m68000 ;; + 9000/[34]?? ) HP_ARCH=m68k ;; + 9000/[678][0-9][0-9]) + if [ -x /usr/bin/getconf ]; then + sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` + sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` + case "${sc_cpu_version}" in + 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 + 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 + 532) # CPU_PA_RISC2_0 + case "${sc_kernel_bits}" in + 32) HP_ARCH="hppa2.0n" ;; + 64) HP_ARCH="hppa2.0w" ;; + '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 + esac ;; + esac + fi + if [ "${HP_ARCH}" = "" ]; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + + #define _HPUX_SOURCE + #include <stdlib.h> + #include <unistd.h> + + int main () + { + #if defined(_SC_KERNEL_BITS) + long bits = sysconf(_SC_KERNEL_BITS); + #endif + long cpu = sysconf (_SC_CPU_VERSION); + + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1"); break; + case CPU_PA_RISC2_0: + #if defined(_SC_KERNEL_BITS) + switch (bits) + { + case 64: puts ("hppa2.0w"); break; + case 32: puts ("hppa2.0n"); break; + default: puts ("hppa2.0"); break; + } break; + #else /* !defined(_SC_KERNEL_BITS) */ + puts ("hppa2.0"); break; + #endif + default: puts ("hppa1.0"); break; + } + exit (0); + } +EOF + (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` + test -z "$HP_ARCH" && HP_ARCH=hppa + fi ;; + esac + if [ ${HP_ARCH} = "hppa2.0w" ] + then + eval $set_cc_for_build + + # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating + # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler + # generating 64-bit code. GNU and HP use different nomenclature: + # + # $ CC_FOR_BUILD=cc ./config.guess + # => hppa2.0w-hp-hpux11.23 + # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess + # => hppa64-hp-hpux11.23 + + if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | + grep -q __LP64__ + then + HP_ARCH="hppa2.0w" + else + HP_ARCH="hppa64" + fi + fi + echo ${HP_ARCH}-hp-hpux${HPUX_REV} + exit ;; + ia64:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + echo ia64-hp-hpux${HPUX_REV} + exit ;; + 3050*:HI-UX:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include <unistd.h> + int + main () + { + long cpu = sysconf (_SC_CPU_VERSION); + /* The order matters, because CPU_IS_HP_MC68K erroneously returns + true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct + results, however. */ + if (CPU_IS_PA_RISC (cpu)) + { + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; + case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; + default: puts ("hppa-hitachi-hiuxwe2"); break; + } + } + else if (CPU_IS_HP_MC68K (cpu)) + puts ("m68k-hitachi-hiuxwe2"); + else puts ("unknown-hitachi-hiuxwe2"); + exit (0); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && + { echo "$SYSTEM_NAME"; exit; } + echo unknown-hitachi-hiuxwe2 + exit ;; + 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) + echo hppa1.1-hp-bsd + exit ;; + 9000/8??:4.3bsd:*:*) + echo hppa1.0-hp-bsd + exit ;; + *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) + echo hppa1.0-hp-mpeix + exit ;; + hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) + echo hppa1.1-hp-osf + exit ;; + hp8??:OSF1:*:*) + echo hppa1.0-hp-osf + exit ;; + i*86:OSF1:*:*) + if [ -x /usr/sbin/sysversion ] ; then + echo ${UNAME_MACHINE}-unknown-osf1mk + else + echo ${UNAME_MACHINE}-unknown-osf1 + fi + exit ;; + parisc*:Lites*:*:*) + echo hppa1.1-hp-lites + exit ;; + C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) + echo c1-convex-bsd + exit ;; + C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit ;; + C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) + echo c34-convex-bsd + exit ;; + C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) + echo c38-convex-bsd + exit ;; + C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) + echo c4-convex-bsd + exit ;; + CRAY*Y-MP:*:*:*) + echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*[A-Z]90:*:*:*) + echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ + | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ + -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ + -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*TS:*:*:*) + echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*T3E:*:*:*) + echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*SV1:*:*:*) + echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + *:UNICOS/mp:*:*) + echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) + FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` + echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; + 5000:UNIX_System_V:4.*:*) + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` + echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; + i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) + echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} + exit ;; + sparc*:BSD/OS:*:*) + echo sparc-unknown-bsdi${UNAME_RELEASE} + exit ;; + *:BSD/OS:*:*) + echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} + exit ;; + *:FreeBSD:*:*) + case ${UNAME_MACHINE} in + pc98) + echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + amd64) + echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + *) + echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + esac + exit ;; + i*:CYGWIN*:*) + echo ${UNAME_MACHINE}-pc-cygwin + exit ;; + *:MINGW*:*) + echo ${UNAME_MACHINE}-pc-mingw32 + exit ;; + i*:windows32*:*) + # uname -m includes "-pc" on this system. + echo ${UNAME_MACHINE}-mingw32 + exit ;; + i*:PW*:*) + echo ${UNAME_MACHINE}-pc-pw32 + exit ;; + *:Interix*:[3456]*) + case ${UNAME_MACHINE} in + x86) + echo i586-pc-interix${UNAME_RELEASE} + exit ;; + EM64T | authenticamd | genuineintel) + echo x86_64-unknown-interix${UNAME_RELEASE} + exit ;; + IA64) + echo ia64-unknown-interix${UNAME_RELEASE} + exit ;; + esac ;; + [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) + echo i${UNAME_MACHINE}-pc-mks + exit ;; + 8664:Windows_NT:*) + echo x86_64-pc-mks + exit ;; + i*:Windows_NT*:* | Pentium*:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we + # UNAME_MACHINE based on the output of uname instead of i386? + echo i586-pc-interix + exit ;; + i*:UWIN*:*) + echo ${UNAME_MACHINE}-pc-uwin + exit ;; + amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) + echo x86_64-unknown-cygwin + exit ;; + p*:CYGWIN*:*) + echo powerpcle-unknown-cygwin + exit ;; + prep*:SunOS:5.*:*) + echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + *:GNU:*:*) + # the GNU system + echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` + exit ;; + *:GNU/*:*:*) + # other systems with GNU libc and userland + echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu + exit ;; + i*86:Minix:*:*) + echo ${UNAME_MACHINE}-pc-minix + exit ;; + alpha:Linux:*:*) + case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in + EV5) UNAME_MACHINE=alphaev5 ;; + EV56) UNAME_MACHINE=alphaev56 ;; + PCA56) UNAME_MACHINE=alphapca56 ;; + PCA57) UNAME_MACHINE=alphapca56 ;; + EV6) UNAME_MACHINE=alphaev6 ;; + EV67) UNAME_MACHINE=alphaev67 ;; + EV68*) UNAME_MACHINE=alphaev68 ;; + esac + objdump --private-headers /bin/sh | grep -q ld.so.1 + if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi + echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} + exit ;; + arm*:Linux:*:*) + eval $set_cc_for_build + if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ARM_EABI__ + then + echo ${UNAME_MACHINE}-unknown-linux-gnu + else + echo ${UNAME_MACHINE}-unknown-linux-gnueabi + fi + exit ;; + avr32*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + cris:Linux:*:*) + echo cris-axis-linux-gnu + exit ;; + crisv32:Linux:*:*) + echo crisv32-axis-linux-gnu + exit ;; + frv:Linux:*:*) + echo frv-unknown-linux-gnu + exit ;; + i*86:Linux:*:*) + echo ${UNAME_MACHINE}-pc-linux-gnu + exit ;; + ia64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + m32r*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + m68*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + mips:Linux:*:* | mips64:Linux:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #undef CPU + #undef ${UNAME_MACHINE} + #undef ${UNAME_MACHINE}el + #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) + CPU=${UNAME_MACHINE}el + #else + #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) + CPU=${UNAME_MACHINE} + #else + CPU= + #endif + #endif +EOF + eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' + /^CPU/{ + s: ::g + p + }'`" + test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } + ;; + or32:Linux:*:*) + echo or32-unknown-linux-gnu + exit ;; + padre:Linux:*:*) + echo sparc-unknown-linux-gnu + exit ;; + parisc64:Linux:*:* | hppa64:Linux:*:*) + echo hppa64-unknown-linux-gnu + exit ;; + parisc:Linux:*:* | hppa:Linux:*:*) + # Look for CPU level + case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in + PA7*) echo hppa1.1-unknown-linux-gnu ;; + PA8*) echo hppa2.0-unknown-linux-gnu ;; + *) echo hppa-unknown-linux-gnu ;; + esac + exit ;; + ppc64:Linux:*:*) + echo powerpc64-unknown-linux-gnu + exit ;; + ppc:Linux:*:*) + echo powerpc-unknown-linux-gnu + exit ;; + s390:Linux:*:* | s390x:Linux:*:*) + echo ${UNAME_MACHINE}-ibm-linux + exit ;; + sh64*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + sh*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + sparc:Linux:*:* | sparc64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + vax:Linux:*:*) + echo ${UNAME_MACHINE}-dec-linux-gnu + exit ;; + x86_64:Linux:*:*) + echo x86_64-unknown-linux-gnu + exit ;; + xtensa*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + i*86:DYNIX/ptx:4*:*) + # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. + # earlier versions are messed up and put the nodename in both + # sysname and nodename. + echo i386-sequent-sysv4 + exit ;; + i*86:UNIX_SV:4.2MP:2.*) + # Unixware is an offshoot of SVR4, but it has its own version + # number series starting with 2... + # I am not positive that other SVR4 systems won't match this, + # I just have to hope. -- rms. + # Use sysv4.2uw... so that sysv4* matches it. + echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} + exit ;; + i*86:OS/2:*:*) + # If we were able to find `uname', then EMX Unix compatibility + # is probably installed. + echo ${UNAME_MACHINE}-pc-os2-emx + exit ;; + i*86:XTS-300:*:STOP) + echo ${UNAME_MACHINE}-unknown-stop + exit ;; + i*86:atheos:*:*) + echo ${UNAME_MACHINE}-unknown-atheos + exit ;; + i*86:syllable:*:*) + echo ${UNAME_MACHINE}-pc-syllable + exit ;; + i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) + echo i386-unknown-lynxos${UNAME_RELEASE} + exit ;; + i*86:*DOS:*:*) + echo ${UNAME_MACHINE}-pc-msdosdjgpp + exit ;; + i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) + UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` + if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then + echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} + else + echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} + fi + exit ;; + i*86:*:5:[678]*) + # UnixWare 7.x, OpenUNIX and OpenServer 6. + case `/bin/uname -X | grep "^Machine"` in + *486*) UNAME_MACHINE=i486 ;; + *Pentium) UNAME_MACHINE=i586 ;; + *Pent*|*Celeron) UNAME_MACHINE=i686 ;; + esac + echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} + exit ;; + i*86:*:3.2:*) + if test -f /usr/options/cb.name; then + UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name` + echo ${UNAME_MACHINE}-pc-isc$UNAME_REL + elif /bin/uname -X 2>/dev/null >/dev/null ; then + UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` + (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 + (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ + && UNAME_MACHINE=i586 + (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ + && UNAME_MACHINE=i686 + (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ + && UNAME_MACHINE=i686 + echo ${UNAME_MACHINE}-pc-sco$UNAME_REL + else + echo ${UNAME_MACHINE}-pc-sysv32 + fi + exit ;; + pc:*:*:*) + # Left here for compatibility: + # uname -m prints for DJGPP always 'pc', but it prints nothing about + # the processor, so we play safe by assuming i586. + # Note: whatever this is, it MUST be the same as what config.sub + # prints for the "djgpp" host, or else GDB configury will decide that + # this is a cross-build. + echo i586-pc-msdosdjgpp + exit ;; + Intel:Mach:3*:*) + echo i386-pc-mach3 + exit ;; + paragon:*:*:*) + echo i860-intel-osf1 + exit ;; + i860:*:4.*:*) # i860-SVR4 + if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then + echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 + else # Add other i860-SVR4 vendors below as they are discovered. + echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 + fi + exit ;; + mini*:CTIX:SYS*5:*) + # "miniframe" + echo m68010-convergent-sysv + exit ;; + mc68k:UNIX:SYSTEM5:3.51m) + echo m68k-convergent-sysv + exit ;; + M680?0:D-NIX:5.3:*) + echo m68k-diab-dnix + exit ;; + M68*:*:R3V[5678]*:*) + test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; + 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) + OS_REL='' + test -r /etc/.relid \ + && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; + 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4; exit; } ;; + NCR*:*:4.2:* | MPRAS*:*:4.2:*) + OS_REL='.3' + test -r /etc/.relid \ + && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; + m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) + echo m68k-unknown-lynxos${UNAME_RELEASE} + exit ;; + mc68030:UNIX_System_V:4.*:*) + echo m68k-atari-sysv4 + exit ;; + TSUNAMI:LynxOS:2.*:*) + echo sparc-unknown-lynxos${UNAME_RELEASE} + exit ;; + rs6000:LynxOS:2.*:*) + echo rs6000-unknown-lynxos${UNAME_RELEASE} + exit ;; + PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) + echo powerpc-unknown-lynxos${UNAME_RELEASE} + exit ;; + SM[BE]S:UNIX_SV:*:*) + echo mips-dde-sysv${UNAME_RELEASE} + exit ;; + RM*:ReliantUNIX-*:*:*) + echo mips-sni-sysv4 + exit ;; + RM*:SINIX-*:*:*) + echo mips-sni-sysv4 + exit ;; + *:SINIX-*:*:*) + if uname -p 2>/dev/null >/dev/null ; then + UNAME_MACHINE=`(uname -p) 2>/dev/null` + echo ${UNAME_MACHINE}-sni-sysv4 + else + echo ns32k-sni-sysv + fi + exit ;; + PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort + # says <Richard.M.Bartel@ccMail.Census.GOV> + echo i586-unisys-sysv4 + exit ;; + *:UNIX_System_V:4*:FTX*) + # From Gerald Hewes <hewes@openmarket.com>. + # How about differentiating between stratus architectures? -djm + echo hppa1.1-stratus-sysv4 + exit ;; + *:*:*:FTX*) + # From seanf@swdc.stratus.com. + echo i860-stratus-sysv4 + exit ;; + i*86:VOS:*:*) + # From Paul.Green@stratus.com. + echo ${UNAME_MACHINE}-stratus-vos + exit ;; + *:VOS:*:*) + # From Paul.Green@stratus.com. + echo hppa1.1-stratus-vos + exit ;; + mc68*:A/UX:*:*) + echo m68k-apple-aux${UNAME_RELEASE} + exit ;; + news*:NEWS-OS:6*:*) + echo mips-sony-newsos6 + exit ;; + R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) + if [ -d /usr/nec ]; then + echo mips-nec-sysv${UNAME_RELEASE} + else + echo mips-unknown-sysv${UNAME_RELEASE} + fi + exit ;; + BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. + echo powerpc-be-beos + exit ;; + BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. + echo powerpc-apple-beos + exit ;; + BePC:BeOS:*:*) # BeOS running on Intel PC compatible. + echo i586-pc-beos + exit ;; + BePC:Haiku:*:*) # Haiku running on Intel PC compatible. + echo i586-pc-haiku + exit ;; + SX-4:SUPER-UX:*:*) + echo sx4-nec-superux${UNAME_RELEASE} + exit ;; + SX-5:SUPER-UX:*:*) + echo sx5-nec-superux${UNAME_RELEASE} + exit ;; + SX-6:SUPER-UX:*:*) + echo sx6-nec-superux${UNAME_RELEASE} + exit ;; + SX-7:SUPER-UX:*:*) + echo sx7-nec-superux${UNAME_RELEASE} + exit ;; + SX-8:SUPER-UX:*:*) + echo sx8-nec-superux${UNAME_RELEASE} + exit ;; + SX-8R:SUPER-UX:*:*) + echo sx8r-nec-superux${UNAME_RELEASE} + exit ;; + Power*:Rhapsody:*:*) + echo powerpc-apple-rhapsody${UNAME_RELEASE} + exit ;; + *:Rhapsody:*:*) + echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} + exit ;; + *:Darwin:*:*) + UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown + case $UNAME_PROCESSOR in + i386) + eval $set_cc_for_build + if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then + if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ + (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_64BIT_ARCH >/dev/null + then + UNAME_PROCESSOR="x86_64" + fi + fi ;; + unknown) UNAME_PROCESSOR=powerpc ;; + esac + echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} + exit ;; + *:procnto*:*:* | *:QNX:[0123456789]*:*) + UNAME_PROCESSOR=`uname -p` + if test "$UNAME_PROCESSOR" = "x86"; then + UNAME_PROCESSOR=i386 + UNAME_MACHINE=pc + fi + echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} + exit ;; + *:QNX:*:4*) + echo i386-pc-qnx + exit ;; + NSE-?:NONSTOP_KERNEL:*:*) + echo nse-tandem-nsk${UNAME_RELEASE} + exit ;; + NSR-?:NONSTOP_KERNEL:*:*) + echo nsr-tandem-nsk${UNAME_RELEASE} + exit ;; + *:NonStop-UX:*:*) + echo mips-compaq-nonstopux + exit ;; + BS2000:POSIX*:*:*) + echo bs2000-siemens-sysv + exit ;; + DS/*:UNIX_System_V:*:*) + echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} + exit ;; + *:Plan9:*:*) + # "uname -m" is not consistent, so use $cputype instead. 386 + # is converted to i386 for consistency with other x86 + # operating systems. + if test "$cputype" = "386"; then + UNAME_MACHINE=i386 + else + UNAME_MACHINE="$cputype" + fi + echo ${UNAME_MACHINE}-unknown-plan9 + exit ;; + *:TOPS-10:*:*) + echo pdp10-unknown-tops10 + exit ;; + *:TENEX:*:*) + echo pdp10-unknown-tenex + exit ;; + KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) + echo pdp10-dec-tops20 + exit ;; + XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) + echo pdp10-xkl-tops20 + exit ;; + *:TOPS-20:*:*) + echo pdp10-unknown-tops20 + exit ;; + *:ITS:*:*) + echo pdp10-unknown-its + exit ;; + SEI:*:*:SEIUX) + echo mips-sei-seiux${UNAME_RELEASE} + exit ;; + *:DragonFly:*:*) + echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` + exit ;; + *:*VMS:*:*) + UNAME_MACHINE=`(uname -p) 2>/dev/null` + case "${UNAME_MACHINE}" in + A*) echo alpha-dec-vms ; exit ;; + I*) echo ia64-dec-vms ; exit ;; + V*) echo vax-dec-vms ; exit ;; + esac ;; + *:XENIX:*:SysV) + echo i386-pc-xenix + exit ;; + i*86:skyos:*:*) + echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' + exit ;; + i*86:rdos:*:*) + echo ${UNAME_MACHINE}-pc-rdos + exit ;; + i*86:AROS:*:*) + echo ${UNAME_MACHINE}-pc-aros + exit ;; +esac + +#echo '(No uname command or uname output not recognized.)' 1>&2 +#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 + +eval $set_cc_for_build +cat >$dummy.c <<EOF +#ifdef _SEQUENT_ +# include <sys/types.h> +# include <sys/utsname.h> +#endif +main () +{ +#if defined (sony) +#if defined (MIPSEB) + /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, + I don't know.... */ + printf ("mips-sony-bsd\n"); exit (0); +#else +#include <sys/param.h> + printf ("m68k-sony-newsos%s\n", +#ifdef NEWSOS4 + "4" +#else + "" +#endif + ); exit (0); +#endif +#endif + +#if defined (__arm) && defined (__acorn) && defined (__unix) + printf ("arm-acorn-riscix\n"); exit (0); +#endif + +#if defined (hp300) && !defined (hpux) + printf ("m68k-hp-bsd\n"); exit (0); +#endif + +#if defined (NeXT) +#if !defined (__ARCHITECTURE__) +#define __ARCHITECTURE__ "m68k" +#endif + int version; + version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; + if (version < 4) + printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); + else + printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); + exit (0); +#endif + +#if defined (MULTIMAX) || defined (n16) +#if defined (UMAXV) + printf ("ns32k-encore-sysv\n"); exit (0); +#else +#if defined (CMU) + printf ("ns32k-encore-mach\n"); exit (0); +#else + printf ("ns32k-encore-bsd\n"); exit (0); +#endif +#endif +#endif + +#if defined (__386BSD__) + printf ("i386-pc-bsd\n"); exit (0); +#endif + +#if defined (sequent) +#if defined (i386) + printf ("i386-sequent-dynix\n"); exit (0); +#endif +#if defined (ns32000) + printf ("ns32k-sequent-dynix\n"); exit (0); +#endif +#endif + +#if defined (_SEQUENT_) + struct utsname un; + + uname(&un); + + if (strncmp(un.version, "V2", 2) == 0) { + printf ("i386-sequent-ptx2\n"); exit (0); + } + if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ + printf ("i386-sequent-ptx1\n"); exit (0); + } + printf ("i386-sequent-ptx\n"); exit (0); + +#endif + +#if defined (vax) +# if !defined (ultrix) +# include <sys/param.h> +# if defined (BSD) +# if BSD == 43 + printf ("vax-dec-bsd4.3\n"); exit (0); +# else +# if BSD == 199006 + printf ("vax-dec-bsd4.3reno\n"); exit (0); +# else + printf ("vax-dec-bsd\n"); exit (0); +# endif +# endif +# else + printf ("vax-dec-bsd\n"); exit (0); +# endif +# else + printf ("vax-dec-ultrix\n"); exit (0); +# endif +#endif + +#if defined (alliant) && defined (i860) + printf ("i860-alliant-bsd\n"); exit (0); +#endif + + exit (1); +} +EOF + +$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && + { echo "$SYSTEM_NAME"; exit; } + +# Apollos put the system type in the environment. + +test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } + +# Convex versions that predate uname can use getsysinfo(1) + +if [ -x /usr/convex/getsysinfo ] +then + case `getsysinfo -f cpu_type` in + c1*) + echo c1-convex-bsd + exit ;; + c2*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit ;; + c34*) + echo c34-convex-bsd + exit ;; + c38*) + echo c38-convex-bsd + exit ;; + c4*) + echo c4-convex-bsd + exit ;; + esac +fi + +cat >&2 <<EOF +$0: unable to guess system type + +This script, last modified $timestamp, has failed to recognize +the operating system you are using. It is advised that you +download the most up to date version of the config scripts from + + http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD +and + http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD + +If the version you run ($0) is already up to date, please +send the following data and any information you think might be +pertinent to <config-patches@gnu.org> in order to provide the needed +information to handle your system. + +config.guess timestamp = $timestamp + +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null` + +hostinfo = `(hostinfo) 2>/dev/null` +/bin/universe = `(/bin/universe) 2>/dev/null` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` +/bin/arch = `(/bin/arch) 2>/dev/null` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` + +UNAME_MACHINE = ${UNAME_MACHINE} +UNAME_RELEASE = ${UNAME_RELEASE} +UNAME_SYSTEM = ${UNAME_SYSTEM} +UNAME_VERSION = ${UNAME_VERSION} +EOF + +exit 1 + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/build-0.3/system/config.sub b/build-0.3/system/config.sub new file mode 100755 index 0000000..5ecc18b --- /dev/null +++ b/build-0.3/system/config.sub @@ -0,0 +1,1700 @@ +#! /bin/sh +# Configuration validation subroutine script. +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 +# Free Software Foundation, Inc. + +timestamp='2009-10-07' + +# This file is (in principle) common to ALL GNU software. +# The presence of a machine in this file suggests that SOME GNU software +# can handle that machine. It does not imply ALL GNU software can. +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +# 02110-1301, USA. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + + +# Please send patches to <config-patches@gnu.org>. Submit a context +# diff and a properly formatted GNU ChangeLog entry. +# +# Configuration subroutine to validate and canonicalize a configuration type. +# Supply the specified configuration type as an argument. +# If it is invalid, we print an error message on stderr and exit with code 1. +# Otherwise, we print the canonical config type on stdout and succeed. + +# You can get the latest version of this script from: +# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD + +# This file is supposed to be the same for all GNU packages +# and recognize all the CPU types, system types and aliases +# that are meaningful with *any* GNU software. +# Each package is responsible for reporting which valid configurations +# it does not support. The user should be able to distinguish +# a failure to support a valid configuration from a meaningless +# configuration. + +# The goal of this file is to map all the various variations of a given +# machine specification into a single specification in the form: +# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM +# or in some cases, the newer four-part form: +# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM +# It is wrong to echo any other type of specification. + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] CPU-MFR-OPSYS + $0 [OPTION] ALIAS + +Canonicalize a configuration name. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to <config-patches@gnu.org>." + +version="\ +GNU config.sub ($timestamp) + +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, +2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit ;; + --version | -v ) + echo "$version" ; exit ;; + --help | --h* | -h ) + echo "$usage"; exit ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" + exit 1 ;; + + *local*) + # First pass through any local machine types. + echo $1 + exit ;; + + * ) + break ;; + esac +done + +case $# in + 0) echo "$me: missing argument$help" >&2 + exit 1;; + 1) ;; + *) echo "$me: too many arguments$help" >&2 + exit 1;; +esac + +# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). +# Here we must recognize all the valid KERNEL-OS combinations. +maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` +case $maybe_os in + nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \ + uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \ + kopensolaris*-gnu* | \ + storm-chaos* | os2-emx* | rtmk-nova*) + os=-$maybe_os + basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` + ;; + *) + basic_machine=`echo $1 | sed 's/-[^-]*$//'` + if [ $basic_machine != $1 ] + then os=`echo $1 | sed 's/.*-/-/'` + else os=; fi + ;; +esac + +### Let's recognize common machines as not being operating systems so +### that things like config.sub decstation-3100 work. We also +### recognize some manufacturers as not being operating systems, so we +### can provide default operating systems below. +case $os in + -sun*os*) + # Prevent following clause from handling this invalid input. + ;; + -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ + -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ + -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ + -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ + -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ + -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ + -apple | -axis | -knuth | -cray | -microblaze) + os= + basic_machine=$1 + ;; + -bluegene*) + os=-cnk + ;; + -sim | -cisco | -oki | -wec | -winbond) + os= + basic_machine=$1 + ;; + -scout) + ;; + -wrs) + os=-vxworks + basic_machine=$1 + ;; + -chorusos*) + os=-chorusos + basic_machine=$1 + ;; + -chorusrdb) + os=-chorusrdb + basic_machine=$1 + ;; + -hiux*) + os=-hiuxwe2 + ;; + -sco6) + os=-sco5v6 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco5) + os=-sco3.2v5 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco4) + os=-sco3.2v4 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2.[4-9]*) + os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2v[4-9]*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco5v6*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco*) + os=-sco3.2v2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -udk*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -isc) + os=-isc2.2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -clix*) + basic_machine=clipper-intergraph + ;; + -isc*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -lynx*) + os=-lynxos + ;; + -ptx*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` + ;; + -windowsnt*) + os=`echo $os | sed -e 's/windowsnt/winnt/'` + ;; + -psos*) + os=-psos + ;; + -mint | -mint[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; +esac + +# Decode aliases for certain CPU-COMPANY combinations. +case $basic_machine in + # Recognize the basic CPU types without company name. + # Some are omitted here because they have special meanings below. + 1750a | 580 \ + | a29k \ + | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ + | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ + | am33_2.0 \ + | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \ + | bfin \ + | c4x | clipper \ + | d10v | d30v | dlx | dsp16xx \ + | fido | fr30 | frv \ + | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ + | i370 | i860 | i960 | ia64 \ + | ip2k | iq2000 \ + | lm32 \ + | m32c | m32r | m32rle | m68000 | m68k | m88k \ + | maxq | mb | microblaze | mcore | mep | metag \ + | mips | mipsbe | mipseb | mipsel | mipsle \ + | mips16 \ + | mips64 | mips64el \ + | mips64octeon | mips64octeonel \ + | mips64orion | mips64orionel \ + | mips64r5900 | mips64r5900el \ + | mips64vr | mips64vrel \ + | mips64vr4100 | mips64vr4100el \ + | mips64vr4300 | mips64vr4300el \ + | mips64vr5000 | mips64vr5000el \ + | mips64vr5900 | mips64vr5900el \ + | mipsisa32 | mipsisa32el \ + | mipsisa32r2 | mipsisa32r2el \ + | mipsisa64 | mipsisa64el \ + | mipsisa64r2 | mipsisa64r2el \ + | mipsisa64sb1 | mipsisa64sb1el \ + | mipsisa64sr71k | mipsisa64sr71kel \ + | mipstx39 | mipstx39el \ + | mn10200 | mn10300 \ + | moxie \ + | mt \ + | msp430 \ + | nios | nios2 \ + | ns16k | ns32k \ + | or32 \ + | pdp10 | pdp11 | pj | pjl \ + | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ + | pyramid \ + | rx \ + | score \ + | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ + | sh64 | sh64le \ + | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ + | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ + | spu | strongarm \ + | tahoe | thumb | tic4x | tic80 | tron \ + | v850 | v850e \ + | we32k \ + | x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \ + | z8k | z80) + basic_machine=$basic_machine-unknown + ;; + m6811 | m68hc11 | m6812 | m68hc12 | picochip) + # Motorola 68HC11/12. + basic_machine=$basic_machine-unknown + os=-none + ;; + m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) + ;; + ms1) + basic_machine=mt-unknown + ;; + + # We use `pc' rather than `unknown' + # because (1) that's what they normally are, and + # (2) the word "unknown" tends to confuse beginning users. + i*86 | x86_64) + basic_machine=$basic_machine-pc + ;; + # Object if more than one company name word. + *-*-*) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; + # Recognize the basic CPU types with company name. + 580-* \ + | a29k-* \ + | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ + | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ + | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ + | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ + | avr-* | avr32-* \ + | bfin-* | bs2000-* \ + | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \ + | clipper-* | craynv-* | cydra-* \ + | d10v-* | d30v-* | dlx-* \ + | elxsi-* \ + | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ + | h8300-* | h8500-* \ + | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ + | i*86-* | i860-* | i960-* | ia64-* \ + | ip2k-* | iq2000-* \ + | lm32-* \ + | m32c-* | m32r-* | m32rle-* \ + | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ + | m88110-* | m88k-* | maxq-* | mcore-* | metag-* | microblaze-* \ + | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ + | mips16-* \ + | mips64-* | mips64el-* \ + | mips64octeon-* | mips64octeonel-* \ + | mips64orion-* | mips64orionel-* \ + | mips64r5900-* | mips64r5900el-* \ + | mips64vr-* | mips64vrel-* \ + | mips64vr4100-* | mips64vr4100el-* \ + | mips64vr4300-* | mips64vr4300el-* \ + | mips64vr5000-* | mips64vr5000el-* \ + | mips64vr5900-* | mips64vr5900el-* \ + | mipsisa32-* | mipsisa32el-* \ + | mipsisa32r2-* | mipsisa32r2el-* \ + | mipsisa64-* | mipsisa64el-* \ + | mipsisa64r2-* | mipsisa64r2el-* \ + | mipsisa64sb1-* | mipsisa64sb1el-* \ + | mipsisa64sr71k-* | mipsisa64sr71kel-* \ + | mipstx39-* | mipstx39el-* \ + | mmix-* \ + | mt-* \ + | msp430-* \ + | nios-* | nios2-* \ + | none-* | np1-* | ns16k-* | ns32k-* \ + | orion-* \ + | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ + | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ + | pyramid-* \ + | romp-* | rs6000-* | rx-* \ + | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ + | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ + | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ + | sparclite-* \ + | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \ + | tahoe-* | thumb-* \ + | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* | tile-* \ + | tron-* \ + | v850-* | v850e-* | vax-* \ + | we32k-* \ + | x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \ + | xstormy16-* | xtensa*-* \ + | ymp-* \ + | z8k-* | z80-*) + ;; + # Recognize the basic CPU types without company name, with glob match. + xtensa*) + basic_machine=$basic_machine-unknown + ;; + # Recognize the various machine names and aliases which stand + # for a CPU type and a company and sometimes even an OS. + 386bsd) + basic_machine=i386-unknown + os=-bsd + ;; + 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) + basic_machine=m68000-att + ;; + 3b*) + basic_machine=we32k-att + ;; + a29khif) + basic_machine=a29k-amd + os=-udi + ;; + abacus) + basic_machine=abacus-unknown + ;; + adobe68k) + basic_machine=m68010-adobe + os=-scout + ;; + alliant | fx80) + basic_machine=fx80-alliant + ;; + altos | altos3068) + basic_machine=m68k-altos + ;; + am29k) + basic_machine=a29k-none + os=-bsd + ;; + amd64) + basic_machine=x86_64-pc + ;; + amd64-*) + basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + amdahl) + basic_machine=580-amdahl + os=-sysv + ;; + amiga | amiga-*) + basic_machine=m68k-unknown + ;; + amigaos | amigados) + basic_machine=m68k-unknown + os=-amigaos + ;; + amigaunix | amix) + basic_machine=m68k-unknown + os=-sysv4 + ;; + apollo68) + basic_machine=m68k-apollo + os=-sysv + ;; + apollo68bsd) + basic_machine=m68k-apollo + os=-bsd + ;; + aros) + basic_machine=i386-pc + os=-aros + ;; + aux) + basic_machine=m68k-apple + os=-aux + ;; + balance) + basic_machine=ns32k-sequent + os=-dynix + ;; + blackfin) + basic_machine=bfin-unknown + os=-linux + ;; + blackfin-*) + basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; + bluegene*) + basic_machine=powerpc-ibm + os=-cnk + ;; + c90) + basic_machine=c90-cray + os=-unicos + ;; + cegcc) + basic_machine=arm-unknown + os=-cegcc + ;; + convex-c1) + basic_machine=c1-convex + os=-bsd + ;; + convex-c2) + basic_machine=c2-convex + os=-bsd + ;; + convex-c32) + basic_machine=c32-convex + os=-bsd + ;; + convex-c34) + basic_machine=c34-convex + os=-bsd + ;; + convex-c38) + basic_machine=c38-convex + os=-bsd + ;; + cray | j90) + basic_machine=j90-cray + os=-unicos + ;; + craynv) + basic_machine=craynv-cray + os=-unicosmp + ;; + cr16) + basic_machine=cr16-unknown + os=-elf + ;; + crds | unos) + basic_machine=m68k-crds + ;; + crisv32 | crisv32-* | etraxfs*) + basic_machine=crisv32-axis + ;; + cris | cris-* | etrax*) + basic_machine=cris-axis + ;; + crx) + basic_machine=crx-unknown + os=-elf + ;; + da30 | da30-*) + basic_machine=m68k-da30 + ;; + decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) + basic_machine=mips-dec + ;; + decsystem10* | dec10*) + basic_machine=pdp10-dec + os=-tops10 + ;; + decsystem20* | dec20*) + basic_machine=pdp10-dec + os=-tops20 + ;; + delta | 3300 | motorola-3300 | motorola-delta \ + | 3300-motorola | delta-motorola) + basic_machine=m68k-motorola + ;; + delta88) + basic_machine=m88k-motorola + os=-sysv3 + ;; + dicos) + basic_machine=i686-pc + os=-dicos + ;; + djgpp) + basic_machine=i586-pc + os=-msdosdjgpp + ;; + dpx20 | dpx20-*) + basic_machine=rs6000-bull + os=-bosx + ;; + dpx2* | dpx2*-bull) + basic_machine=m68k-bull + os=-sysv3 + ;; + ebmon29k) + basic_machine=a29k-amd + os=-ebmon + ;; + elxsi) + basic_machine=elxsi-elxsi + os=-bsd + ;; + encore | umax | mmax) + basic_machine=ns32k-encore + ;; + es1800 | OSE68k | ose68k | ose | OSE) + basic_machine=m68k-ericsson + os=-ose + ;; + fx2800) + basic_machine=i860-alliant + ;; + genix) + basic_machine=ns32k-ns + ;; + gmicro) + basic_machine=tron-gmicro + os=-sysv + ;; + go32) + basic_machine=i386-pc + os=-go32 + ;; + h3050r* | hiux*) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + h8300hms) + basic_machine=h8300-hitachi + os=-hms + ;; + h8300xray) + basic_machine=h8300-hitachi + os=-xray + ;; + h8500hms) + basic_machine=h8500-hitachi + os=-hms + ;; + harris) + basic_machine=m88k-harris + os=-sysv3 + ;; + hp300-*) + basic_machine=m68k-hp + ;; + hp300bsd) + basic_machine=m68k-hp + os=-bsd + ;; + hp300hpux) + basic_machine=m68k-hp + os=-hpux + ;; + hp3k9[0-9][0-9] | hp9[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k2[0-9][0-9] | hp9k31[0-9]) + basic_machine=m68000-hp + ;; + hp9k3[2-9][0-9]) + basic_machine=m68k-hp + ;; + hp9k6[0-9][0-9] | hp6[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k7[0-79][0-9] | hp7[0-79][0-9]) + basic_machine=hppa1.1-hp + ;; + hp9k78[0-9] | hp78[0-9]) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][13679] | hp8[0-9][13679]) + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][0-9] | hp8[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hppa-next) + os=-nextstep3 + ;; + hppaosf) + basic_machine=hppa1.1-hp + os=-osf + ;; + hppro) + basic_machine=hppa1.1-hp + os=-proelf + ;; + i370-ibm* | ibm*) + basic_machine=i370-ibm + ;; +# I'm not sure what "Sysv32" means. Should this be sysv3.2? + i*86v32) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv32 + ;; + i*86v4*) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv4 + ;; + i*86v) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv + ;; + i*86sol2) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-solaris2 + ;; + i386mach) + basic_machine=i386-mach + os=-mach + ;; + i386-vsta | vsta) + basic_machine=i386-unknown + os=-vsta + ;; + iris | iris4d) + basic_machine=mips-sgi + case $os in + -irix*) + ;; + *) + os=-irix4 + ;; + esac + ;; + isi68 | isi) + basic_machine=m68k-isi + os=-sysv + ;; + m68knommu) + basic_machine=m68k-unknown + os=-linux + ;; + m68knommu-*) + basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; + m88k-omron*) + basic_machine=m88k-omron + ;; + magnum | m3230) + basic_machine=mips-mips + os=-sysv + ;; + merlin) + basic_machine=ns32k-utek + os=-sysv + ;; + microblaze) + basic_machine=microblaze-xilinx + ;; + mingw32) + basic_machine=i386-pc + os=-mingw32 + ;; + mingw32ce) + basic_machine=arm-unknown + os=-mingw32ce + ;; + miniframe) + basic_machine=m68000-convergent + ;; + *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; + mips3*-*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` + ;; + mips3*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown + ;; + monitor) + basic_machine=m68k-rom68k + os=-coff + ;; + morphos) + basic_machine=powerpc-unknown + os=-morphos + ;; + msdos) + basic_machine=i386-pc + os=-msdos + ;; + ms1-*) + basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` + ;; + mvs) + basic_machine=i370-ibm + os=-mvs + ;; + ncr3000) + basic_machine=i486-ncr + os=-sysv4 + ;; + netbsd386) + basic_machine=i386-unknown + os=-netbsd + ;; + netwinder) + basic_machine=armv4l-rebel + os=-linux + ;; + news | news700 | news800 | news900) + basic_machine=m68k-sony + os=-newsos + ;; + news1000) + basic_machine=m68030-sony + os=-newsos + ;; + news-3600 | risc-news) + basic_machine=mips-sony + os=-newsos + ;; + necv70) + basic_machine=v70-nec + os=-sysv + ;; + next | m*-next ) + basic_machine=m68k-next + case $os in + -nextstep* ) + ;; + -ns2*) + os=-nextstep2 + ;; + *) + os=-nextstep3 + ;; + esac + ;; + nh3000) + basic_machine=m68k-harris + os=-cxux + ;; + nh[45]000) + basic_machine=m88k-harris + os=-cxux + ;; + nindy960) + basic_machine=i960-intel + os=-nindy + ;; + mon960) + basic_machine=i960-intel + os=-mon960 + ;; + nonstopux) + basic_machine=mips-compaq + os=-nonstopux + ;; + np1) + basic_machine=np1-gould + ;; + nsr-tandem) + basic_machine=nsr-tandem + ;; + op50n-* | op60c-*) + basic_machine=hppa1.1-oki + os=-proelf + ;; + openrisc | openrisc-*) + basic_machine=or32-unknown + ;; + os400) + basic_machine=powerpc-ibm + os=-os400 + ;; + OSE68000 | ose68000) + basic_machine=m68000-ericsson + os=-ose + ;; + os68k) + basic_machine=m68k-none + os=-os68k + ;; + pa-hitachi) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + paragon) + basic_machine=i860-intel + os=-osf + ;; + parisc) + basic_machine=hppa-unknown + os=-linux + ;; + parisc-*) + basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; + pbd) + basic_machine=sparc-tti + ;; + pbb) + basic_machine=m68k-tti + ;; + pc532 | pc532-*) + basic_machine=ns32k-pc532 + ;; + pc98) + basic_machine=i386-pc + ;; + pc98-*) + basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentium | p5 | k5 | k6 | nexgen | viac3) + basic_machine=i586-pc + ;; + pentiumpro | p6 | 6x86 | athlon | athlon_*) + basic_machine=i686-pc + ;; + pentiumii | pentium2 | pentiumiii | pentium3) + basic_machine=i686-pc + ;; + pentium4) + basic_machine=i786-pc + ;; + pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) + basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumpro-* | p6-* | 6x86-* | athlon-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentium4-*) + basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pn) + basic_machine=pn-gould + ;; + power) basic_machine=power-ibm + ;; + ppc) basic_machine=powerpc-unknown + ;; + ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppcle | powerpclittle | ppc-le | powerpc-little) + basic_machine=powerpcle-unknown + ;; + ppcle-* | powerpclittle-*) + basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64) basic_machine=powerpc64-unknown + ;; + ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64le | powerpc64little | ppc64-le | powerpc64-little) + basic_machine=powerpc64le-unknown + ;; + ppc64le-* | powerpc64little-*) + basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ps2) + basic_machine=i386-ibm + ;; + pw32) + basic_machine=i586-unknown + os=-pw32 + ;; + rdos) + basic_machine=i386-pc + os=-rdos + ;; + rom68k) + basic_machine=m68k-rom68k + os=-coff + ;; + rm[46]00) + basic_machine=mips-siemens + ;; + rtpc | rtpc-*) + basic_machine=romp-ibm + ;; + s390 | s390-*) + basic_machine=s390-ibm + ;; + s390x | s390x-*) + basic_machine=s390x-ibm + ;; + sa29200) + basic_machine=a29k-amd + os=-udi + ;; + sb1) + basic_machine=mipsisa64sb1-unknown + ;; + sb1el) + basic_machine=mipsisa64sb1el-unknown + ;; + sde) + basic_machine=mipsisa32-sde + os=-elf + ;; + sei) + basic_machine=mips-sei + os=-seiux + ;; + sequent) + basic_machine=i386-sequent + ;; + sh) + basic_machine=sh-hitachi + os=-hms + ;; + sh5el) + basic_machine=sh5le-unknown + ;; + sh64) + basic_machine=sh64-unknown + ;; + sparclite-wrs | simso-wrs) + basic_machine=sparclite-wrs + os=-vxworks + ;; + sps7) + basic_machine=m68k-bull + os=-sysv2 + ;; + spur) + basic_machine=spur-unknown + ;; + st2000) + basic_machine=m68k-tandem + ;; + stratus) + basic_machine=i860-stratus + os=-sysv4 + ;; + sun2) + basic_machine=m68000-sun + ;; + sun2os3) + basic_machine=m68000-sun + os=-sunos3 + ;; + sun2os4) + basic_machine=m68000-sun + os=-sunos4 + ;; + sun3os3) + basic_machine=m68k-sun + os=-sunos3 + ;; + sun3os4) + basic_machine=m68k-sun + os=-sunos4 + ;; + sun4os3) + basic_machine=sparc-sun + os=-sunos3 + ;; + sun4os4) + basic_machine=sparc-sun + os=-sunos4 + ;; + sun4sol2) + basic_machine=sparc-sun + os=-solaris2 + ;; + sun3 | sun3-*) + basic_machine=m68k-sun + ;; + sun4) + basic_machine=sparc-sun + ;; + sun386 | sun386i | roadrunner) + basic_machine=i386-sun + ;; + sv1) + basic_machine=sv1-cray + os=-unicos + ;; + symmetry) + basic_machine=i386-sequent + os=-dynix + ;; + t3e) + basic_machine=alphaev5-cray + os=-unicos + ;; + t90) + basic_machine=t90-cray + os=-unicos + ;; + tic54x | c54x*) + basic_machine=tic54x-unknown + os=-coff + ;; + tic55x | c55x*) + basic_machine=tic55x-unknown + os=-coff + ;; + tic6x | c6x*) + basic_machine=tic6x-unknown + os=-coff + ;; + tile*) + basic_machine=tile-unknown + os=-linux-gnu + ;; + tx39) + basic_machine=mipstx39-unknown + ;; + tx39el) + basic_machine=mipstx39el-unknown + ;; + toad1) + basic_machine=pdp10-xkl + os=-tops20 + ;; + tower | tower-32) + basic_machine=m68k-ncr + ;; + tpf) + basic_machine=s390x-ibm + os=-tpf + ;; + udi29k) + basic_machine=a29k-amd + os=-udi + ;; + ultra3) + basic_machine=a29k-nyu + os=-sym1 + ;; + v810 | necv810) + basic_machine=v810-nec + os=-none + ;; + vaxv) + basic_machine=vax-dec + os=-sysv + ;; + vms) + basic_machine=vax-dec + os=-vms + ;; + vpp*|vx|vx-*) + basic_machine=f301-fujitsu + ;; + vxworks960) + basic_machine=i960-wrs + os=-vxworks + ;; + vxworks68) + basic_machine=m68k-wrs + os=-vxworks + ;; + vxworks29k) + basic_machine=a29k-wrs + os=-vxworks + ;; + w65*) + basic_machine=w65-wdc + os=-none + ;; + w89k-*) + basic_machine=hppa1.1-winbond + os=-proelf + ;; + xbox) + basic_machine=i686-pc + os=-mingw32 + ;; + xps | xps100) + basic_machine=xps100-honeywell + ;; + ymp) + basic_machine=ymp-cray + os=-unicos + ;; + z8k-*-coff) + basic_machine=z8k-unknown + os=-sim + ;; + z80-*-coff) + basic_machine=z80-unknown + os=-sim + ;; + none) + basic_machine=none-none + os=-none + ;; + +# Here we handle the default manufacturer of certain CPU types. It is in +# some cases the only manufacturer, in others, it is the most popular. + w89k) + basic_machine=hppa1.1-winbond + ;; + op50n) + basic_machine=hppa1.1-oki + ;; + op60c) + basic_machine=hppa1.1-oki + ;; + romp) + basic_machine=romp-ibm + ;; + mmix) + basic_machine=mmix-knuth + ;; + rs6000) + basic_machine=rs6000-ibm + ;; + vax) + basic_machine=vax-dec + ;; + pdp10) + # there are many clones, so DEC is not a safe bet + basic_machine=pdp10-unknown + ;; + pdp11) + basic_machine=pdp11-dec + ;; + we32k) + basic_machine=we32k-att + ;; + sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) + basic_machine=sh-unknown + ;; + sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) + basic_machine=sparc-sun + ;; + cydra) + basic_machine=cydra-cydrome + ;; + orion) + basic_machine=orion-highlevel + ;; + orion105) + basic_machine=clipper-highlevel + ;; + mac | mpw | mac-mpw) + basic_machine=m68k-apple + ;; + pmac | pmac-mpw) + basic_machine=powerpc-apple + ;; + *-unknown) + # Make sure to match an already-canonicalized machine name. + ;; + *) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; +esac + +# Here we canonicalize certain aliases for manufacturers. +case $basic_machine in + *-digital*) + basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` + ;; + *-commodore*) + basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` + ;; + *) + ;; +esac + +# Decode manufacturer-specific aliases for certain operating systems. + +if [ x"$os" != x"" ] +then +case $os in + # First match some system type aliases + # that might get confused with valid system types. + # -solaris* is a basic system type, with this one exception. + -solaris1 | -solaris1.*) + os=`echo $os | sed -e 's|solaris1|sunos4|'` + ;; + -solaris) + os=-solaris2 + ;; + -svr4*) + os=-sysv4 + ;; + -unixware*) + os=-sysv4.2uw + ;; + -gnu/linux*) + os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` + ;; + # First accept the basic system types. + # The portable systems comes first. + # Each alternative MUST END IN A *, to match a version number. + # -sysv* is not here because it comes later, after sysvr4. + -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ + | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ + | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ + | -kopensolaris* \ + | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ + | -aos* | -aros* \ + | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ + | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ + | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ + | -openbsd* | -solidbsd* \ + | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ + | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ + | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ + | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ + | -chorusos* | -chorusrdb* | -cegcc* \ + | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ + | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \ + | -uxpv* | -beos* | -mpeix* | -udk* \ + | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ + | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ + | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ + | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ + | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ + | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ + | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*) + # Remember, each alternative MUST END IN *, to match a version number. + ;; + -qnx*) + case $basic_machine in + x86-* | i*86-*) + ;; + *) + os=-nto$os + ;; + esac + ;; + -nto-qnx*) + ;; + -nto*) + os=`echo $os | sed -e 's|nto|nto-qnx|'` + ;; + -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ + | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ + | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) + ;; + -mac*) + os=`echo $os | sed -e 's|mac|macos|'` + ;; + -linux-dietlibc) + os=-linux-dietlibc + ;; + -linux*) + os=`echo $os | sed -e 's|linux|linux-gnu|'` + ;; + -sunos5*) + os=`echo $os | sed -e 's|sunos5|solaris2|'` + ;; + -sunos6*) + os=`echo $os | sed -e 's|sunos6|solaris3|'` + ;; + -opened*) + os=-openedition + ;; + -os400*) + os=-os400 + ;; + -wince*) + os=-wince + ;; + -osfrose*) + os=-osfrose + ;; + -osf*) + os=-osf + ;; + -utek*) + os=-bsd + ;; + -dynix*) + os=-bsd + ;; + -acis*) + os=-aos + ;; + -atheos*) + os=-atheos + ;; + -syllable*) + os=-syllable + ;; + -386bsd) + os=-bsd + ;; + -ctix* | -uts*) + os=-sysv + ;; + -nova*) + os=-rtmk-nova + ;; + -ns2 ) + os=-nextstep2 + ;; + -nsk*) + os=-nsk + ;; + # Preserve the version number of sinix5. + -sinix5.*) + os=`echo $os | sed -e 's|sinix|sysv|'` + ;; + -sinix*) + os=-sysv4 + ;; + -tpf*) + os=-tpf + ;; + -triton*) + os=-sysv3 + ;; + -oss*) + os=-sysv3 + ;; + -svr4) + os=-sysv4 + ;; + -svr3) + os=-sysv3 + ;; + -sysvr4) + os=-sysv4 + ;; + # This must come after -sysvr4. + -sysv*) + ;; + -ose*) + os=-ose + ;; + -es1800*) + os=-ose + ;; + -xenix) + os=-xenix + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + os=-mint + ;; + -aros*) + os=-aros + ;; + -kaos*) + os=-kaos + ;; + -zvmoe) + os=-zvmoe + ;; + -dicos*) + os=-dicos + ;; + -none) + ;; + *) + # Get rid of the `-' at the beginning of $os. + os=`echo $os | sed 's/[^-]*-//'` + echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 + exit 1 + ;; +esac +else + +# Here we handle the default operating systems that come with various machines. +# The value should be what the vendor currently ships out the door with their +# machine or put another way, the most popular os provided with the machine. + +# Note that if you're going to try to match "-MANUFACTURER" here (say, +# "-sun"), then you have to tell the case statement up towards the top +# that MANUFACTURER isn't an operating system. Otherwise, code above +# will signal an error saying that MANUFACTURER isn't an operating +# system, and we'll never get to this point. + +case $basic_machine in + score-*) + os=-elf + ;; + spu-*) + os=-elf + ;; + *-acorn) + os=-riscix1.2 + ;; + arm*-rebel) + os=-linux + ;; + arm*-semi) + os=-aout + ;; + c4x-* | tic4x-*) + os=-coff + ;; + # This must come before the *-dec entry. + pdp10-*) + os=-tops20 + ;; + pdp11-*) + os=-none + ;; + *-dec | vax-*) + os=-ultrix4.2 + ;; + m68*-apollo) + os=-domain + ;; + i386-sun) + os=-sunos4.0.2 + ;; + m68000-sun) + os=-sunos3 + # This also exists in the configure program, but was not the + # default. + # os=-sunos4 + ;; + m68*-cisco) + os=-aout + ;; + mep-*) + os=-elf + ;; + mips*-cisco) + os=-elf + ;; + mips*-*) + os=-elf + ;; + or32-*) + os=-coff + ;; + *-tti) # must be before sparc entry or we get the wrong os. + os=-sysv3 + ;; + sparc-* | *-sun) + os=-sunos4.1.1 + ;; + *-be) + os=-beos + ;; + *-haiku) + os=-haiku + ;; + *-ibm) + os=-aix + ;; + *-knuth) + os=-mmixware + ;; + *-wec) + os=-proelf + ;; + *-winbond) + os=-proelf + ;; + *-oki) + os=-proelf + ;; + *-hp) + os=-hpux + ;; + *-hitachi) + os=-hiux + ;; + i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) + os=-sysv + ;; + *-cbm) + os=-amigaos + ;; + *-dg) + os=-dgux + ;; + *-dolphin) + os=-sysv3 + ;; + m68k-ccur) + os=-rtu + ;; + m88k-omron*) + os=-luna + ;; + *-next ) + os=-nextstep + ;; + *-sequent) + os=-ptx + ;; + *-crds) + os=-unos + ;; + *-ns) + os=-genix + ;; + i370-*) + os=-mvs + ;; + *-next) + os=-nextstep3 + ;; + *-gould) + os=-sysv + ;; + *-highlevel) + os=-bsd + ;; + *-encore) + os=-bsd + ;; + *-sgi) + os=-irix + ;; + *-siemens) + os=-sysv4 + ;; + *-masscomp) + os=-rtu + ;; + f30[01]-fujitsu | f700-fujitsu) + os=-uxpv + ;; + *-rom68k) + os=-coff + ;; + *-*bug) + os=-coff + ;; + *-apple) + os=-macos + ;; + *-atari*) + os=-mint + ;; + *) + os=-none + ;; +esac +fi + +# Here we handle the case where we know the os, and the CPU type, but not the +# manufacturer. We pick the logical manufacturer. +vendor=unknown +case $basic_machine in + *-unknown) + case $os in + -riscix*) + vendor=acorn + ;; + -sunos*) + vendor=sun + ;; + -cnk*|-aix*) + vendor=ibm + ;; + -beos*) + vendor=be + ;; + -hpux*) + vendor=hp + ;; + -mpeix*) + vendor=hp + ;; + -hiux*) + vendor=hitachi + ;; + -unos*) + vendor=crds + ;; + -dgux*) + vendor=dg + ;; + -luna*) + vendor=omron + ;; + -genix*) + vendor=ns + ;; + -mvs* | -opened*) + vendor=ibm + ;; + -os400*) + vendor=ibm + ;; + -ptx*) + vendor=sequent + ;; + -tpf*) + vendor=ibm + ;; + -vxsim* | -vxworks* | -windiss*) + vendor=wrs + ;; + -aux*) + vendor=apple + ;; + -hms*) + vendor=hitachi + ;; + -mpw* | -macos*) + vendor=apple + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + vendor=atari + ;; + -vos*) + vendor=stratus + ;; + esac + basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` + ;; +esac + +echo $basic_machine$os +exit + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/build-0.3/system/configuration-rules.make b/build-0.3/system/configuration-rules.make new file mode 100644 index 0000000..b1aa605 --- /dev/null +++ b/build-0.3/system/configuration-rules.make @@ -0,0 +1,25 @@ +# file : build/system/configuration-rules.make +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2004-2010 Code Synthesis Tools CC +# license : GNU GPL v2; see accompanying LICENSE file + + +$(dcf_root)/system/configuration-dynamic.make: | $(dcf_root)/system/. + $(call message,,$(bld_root)/system/configure $@) + +ifeq ($(.DEFAULT_GOAL),$(dcf_root)/system/configuration-dynamic.make) +.DEFAULT_GOAL := +endif + + +ifndef %foreign% + +disfigure:: + $(call message,rm $(dcf_root)/system/configuration-dynamic.make,\ +rm -f $(dcf_root)/system/configuration-dynamic.make) + +ifeq ($(.DEFAULT_GOAL),disfigure) +.DEFAULT_GOAL := +endif + +endif diff --git a/build-0.3/system/configure b/build-0.3/system/configure new file mode 100755 index 0000000..621a12a --- /dev/null +++ b/build-0.3/system/configure @@ -0,0 +1,138 @@ +#! /usr/bin/env bash + +# file : build/system/configure +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2004-2010 Code Synthesis Tools CC +# license : GNU GPL v2; see accompanying LICENSE file + +# $1 out file +# +# bld_root - build root +# project_name - project name +# + +source $bld_root/dialog.bash + +$echo +$echo +$echo "configuring '$project_name'" +$echo +$echo + +# Build system. +# + +build=`$bld_root/system/config.guess` + +if [ $? != 0 ]; then + + $echo "unable to determine build system type" + exit 1 +fi + +$echo "build system is $build" + +build_cpu=`echo $build | cut -f 1 -d -` +build_mf=`echo $build | cut -f 2 -d -` +build_kernel=`echo $build | cut -f 3 -d -` +build_os=`echo $build | cut -f 4 -d -` + +if [ -z "$build_os" ]; then + + # Old format: cpu-mf-os + # + build_os=$build_kernel + build_kernel= +fi + + +# Host system. +# + +if [ -n "$host_system" ]; then + + host=`$bld_root/system/config.sub "$host_system"` + + if [ $? != 0 ]; then + + $echo "unable to canonicalize host system '$host_system'" + exit 1 + fi +else + host=$build +fi + +$echo "host system is $host" + +host_cpu=`echo $host | cut -f 1 -d -` +host_mf=`echo $host | cut -f 2 -d -` +host_kernel=`echo $host | cut -f 3 -d -` +host_os=`echo $host | cut -f 4 -d -` + +if [ -z "$host_os" ]; then + + # Old format: cpu-mf-os + # + host_os=$host_kernel + host_kernel= +fi + + +# Target system. +# +if [ -n "$target_system" ]; then + + target=`$bld_root/system/config.sub "$target_system"` + + if [ $? != 0 ]; then + + $echo "unable to canonicalize target system '$target_system'" + exit 1 + fi + + $echo "target system is $target" + + target_cpu=`echo $target | cut -f 1 -d -` + target_mf=`echo $target | cut -f 2 -d -` + target_kernel=`echo $target | cut -f 3 -d -` + target_os=`echo $target | cut -f 4 -d -` + + if [ -z "$target_os" ]; then + + # Old format: cpu-mf-os + # + target_os=$target_kernel + target_kernel= + fi + +else +target= +target_cpu= +target_mf= +target_kernel= +target_os= +fi + + + +# Write the configuration out. +# +echo "system_configuration := y" >$1 +echo >>$1 +echo "build_system := $build" >>$1 +echo "build_cpu := $build_cpu" >>$1 +echo "build_manufacturer := $build_mf" >>$1 +echo "build_os := $build_os" >>$1 +echo "build_kernel := $build_kernel" >>$1 +echo >>$1 +echo "host_system := $host" >>$1 +echo "host_cpu := $host_cpu" >>$1 +echo "host_manufacturer := $host_mf" >>$1 +echo "host_os := $host_os" >>$1 +echo "host_kernel := $host_kernel" >>$1 +echo >>$1 +echo "target_system := $target" >>$1 +echo "target_cpu := $target_cpu" >>$1 +echo "target_manufacturer := $target_mf" >>$1 +echo "target_os := $target_os" >>$1 +echo "target_kernel := $target_kernel" >>$1 diff --git a/libbackend-elements/GPLv2 b/libbackend-elements/GPLv2 new file mode 100644 index 0000000..3912109 --- /dev/null +++ b/libbackend-elements/GPLv2 @@ -0,0 +1,340 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (C) <year> <name of author> + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + <signature of Ty Coon>, 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. diff --git a/libbackend-elements/INSTALL b/libbackend-elements/INSTALL new file mode 100644 index 0000000..71f9f4a --- /dev/null +++ b/libbackend-elements/INSTALL @@ -0,0 +1,26 @@ +Prerequisites + + build-time: + + - build >= 0.3.2 http://kolpackov.net/projects/build/ + - g++ >= 3.4.3 http://gcc.gnu.org + + run-time: + + - libcult >= 1.4.1 http://kolpackov.net/projects/libcult/ + - libboost_regex >= 1.33.1 http://boost.org + + +Building libbackend-elements + + To build in the source directory simply say `make'. You can also + build in a separate directory, e.g., + + $ mkdir libbackend-elements-i686-pc-linux-gnu + $ cd libbackend-elements-i686-pc-linux-gnu + $ make -f ../libbackend-elements-x.y.z/makefile + + +Installing libbackend-elements + + Not supported in this version. diff --git a/libbackend-elements/LICENSE b/libbackend-elements/LICENSE new file mode 100644 index 0000000..3204be4 --- /dev/null +++ b/libbackend-elements/LICENSE @@ -0,0 +1,25 @@ +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License version 2 as +published by the Free Software Foundation. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +In addition, as a special exception, Boris Kolpackov gives permission +to combine this library with other incompatibly-licensed modules in a +single program and to distribute such a combination provided that there +is no use of the functionality implemented by this library, directly +or indirectly, by such modules. You must obey the GNU General Public +License version 2 in all respects for all of the code used other than +such modules. In particular, the resulting program must be licensed +under a license compatible with the GNU General Public License version +2. If you modify this copy of the library, you may extend this exception +to your version of the library, but you are not obligated to do so. If +you do not wish to do so, delete this exception statement from your +version. diff --git a/libbackend-elements/NEWS b/libbackend-elements/NEWS new file mode 100644 index 0000000..6e1c5b9 --- /dev/null +++ b/libbackend-elements/NEWS @@ -0,0 +1,91 @@ +Version 1.7.2 + + * Fix a bug in C++ indenter. + + * Add support for libbackend-elements bundling. + + * New boost import stub. + +Version 1.7.1 + + * Add an exception to the licensing terms to allow combining with + incompatibly-licensed modules in a single program. See the LICENSE + file for details. + +Version 1.7.0 + + * Support for the '} foo_;' construct in the C++ indenter. + +Version 1.6.1 + + * Fixed a bug in import stubs. + + * Got rid of warnings reported by g++-4.3. + +Version 1.6.0 + + * New Regex::Pattern class that represents a regex pattern (without + substitution, unlike Regex::Expression). + + * Removed Regex::perl_s functions. Use the Regex::Expression class + which provides extended functionality and better error handling. + +Version 1.5.0 + + * New regex class. + + * Upgraded to the new boost import stub. + +Version 1.4.1 + + * Upgraded to the new boost import stub. + +Version 1.4.0 + + * Support for the do-while construct in the C++ indenter. + +Version 1.3.0 + + * Support for the C-style comments in the C++ indenter. + +Version 1.2.0 + + * Upgraded to build-0.3.0. + +Version 1.1.0 + + * Numerous improvements to the C++ indenter. In particular, it + now can properly indent single-line blocks after if, else, etc. + as well as suppress new lines between }else, }case, and }catch. + It was also optimized for speed. + + * Added a test for the C++ indenter. + + +Version 1.0.4 + + * Upgraded to the version-aware libboost import stub. + + +Version 1.0.3 + + * Upgraded to build-0.2.0. + + * C++ auto-indenter has been improved to recognize and ignore beginnings + of string literals (") and character literals (') in C++-style comments. + + +Version 1.0.2 + + * C++ auto-indenter has been improved to support function argument + indentation. Both "same-line" and "new-line" styles are supported. + + +Version 1.0.1 + + * Build system improvements. + + +Version 1.0.0 + + * First public release. diff --git a/libbackend-elements/README b/libbackend-elements/README new file mode 100644 index 0000000..42bf3d8 --- /dev/null +++ b/libbackend-elements/README @@ -0,0 +1,14 @@ +libbackend_elements is a collection of elementary building for +implementing compiler backends in c++. + +See the NEWS file for the user-visible changes from the previous release. + +See the LICENSE file for distribution conditions. + +See the INSTALL file for prerequisites and installation instructions. + +See the documentation/index.xhtml file for documentation. + +The project page is at http://kolpackov.net/projects/libfrontend_elements/. + +Send bug reports or any other feedback to boris@kolpackov.net . diff --git a/libbackend-elements/backend-elements/indentation/buffer.hxx b/libbackend-elements/backend-elements/indentation/buffer.hxx new file mode 100644 index 0000000..7058814 --- /dev/null +++ b/libbackend-elements/backend-elements/indentation/buffer.hxx @@ -0,0 +1,61 @@ +// file : backend-elements/indentation/buffer.hxx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef BACKEND_ELEMENTS_INDENTATION_BUFFER_HXX +#define BACKEND_ELEMENTS_INDENTATION_BUFFER_HXX + +#include <backend-elements/types.hxx> + +#include <string> + +namespace BackendElements +{ + namespace Indentation + { + template <typename C> + class Buffer: public NonCopyable + { + public: + struct Write {}; + + public: + virtual + ~Buffer () + { + } + + public: + typedef + std::char_traits<C> + Traits; + + typedef + typename Traits::char_type + AsChar; + + typedef + typename Traits::int_type + AsInt; + + public: + virtual AsInt + put (AsChar c) = 0; + + // Unbuffer flushes internal formatting buffers (if any). + // Note that unbuffer is not exactly flushing since it can + // result in formatting errors and in general can not be + // called at arbitrary points. Natural use case would be + // to call unbuffer at the end of the stream when no more + // data is expected. + // + virtual Void + unbuffer () = 0; + }; + } +} + +#include <backend-elements/indentation/buffer.txx> + +#endif // BACKEND_ELEMENTS_INDENTATION_BUFFER_HXX diff --git a/libbackend-elements/backend-elements/indentation/buffer.txx b/libbackend-elements/backend-elements/indentation/buffer.txx new file mode 100644 index 0000000..57ba7ab --- /dev/null +++ b/libbackend-elements/backend-elements/indentation/buffer.txx @@ -0,0 +1,12 @@ +// file : backend-elements/indentation/buffer.txx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +namespace BackendElements +{ + namespace Indentation + { + } +} + diff --git a/libbackend-elements/backend-elements/indentation/clip.hxx b/libbackend-elements/backend-elements/indentation/clip.hxx new file mode 100644 index 0000000..068ed0d --- /dev/null +++ b/libbackend-elements/backend-elements/indentation/clip.hxx @@ -0,0 +1,173 @@ +// file : backend-elements/indentation/clip.hxx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef BACKEND_ELEMENTS_INDENTATION_CLIP_HXX +#define BACKEND_ELEMENTS_INDENTATION_CLIP_HXX + +#include <backend-elements/types.hxx> + +#include <backend-elements/indentation/buffer.hxx> + +#include <ostream> + +namespace BackendElements +{ + namespace Indentation + { + template <typename C> + class ToStreambufAdapter: public std::basic_streambuf<C>, + public NonCopyable + { + public: + typedef + typename std::basic_streambuf<C>::traits_type + Traits; + + typedef + typename std::basic_streambuf<C>::char_type + AsChar; + + typedef + typename std::basic_streambuf<C>::int_type + AsInt; + + public: + ToStreambufAdapter (Buffer<C>& buffer) + : buffer_ (buffer) + { + } + + virtual AsInt + overflow (AsInt ch) + { + return buffer_.put (Traits::to_char_type (ch)); + } + + virtual Int + sync () + { + return 0; + } + + private: + Buffer<C>& buffer_; + }; + + + template <typename C> + class FromStreambufAdapter: public Buffer<C> + { + public: + typedef + typename Buffer<C>::Traits + Traits; + + typedef + typename Buffer<C>::AsChar + AsChar; + + typedef + typename Buffer<C>::AsInt + AsInt; + + typedef + typename Buffer<C>::Write + Write; + + public: + FromStreambufAdapter (std::basic_streambuf<C>& b) + : buffer_ (b) + { + } + + virtual AsInt + put (AsChar ch) + { + return buffer_.sputc (ch); + } + + virtual Void + unbuffer () + { + try + { + if (buffer_.pubsync () == 0) return; + } + catch (std::ios_base::failure const&) + { + } + + throw Write (); + } + + private: + std::basic_streambuf<C>& buffer_; + }; + + + template <template <typename> class Buffer, typename C = Char> + class Clip: public NonCopyable + { + public: + Clip (std::basic_ostream<C>& os) + : os_ (os), + prev_ (os_.rdbuf ()), + from_adapter_ (*prev_), + buffer_ (from_adapter_), + to_adapter_ (buffer_) + { + os_.rdbuf (&to_adapter_); + } + + /* + template <typename Arg0> + Clip (std::basic_ostream<C>& os, Arg0 a0) + : os_ (os), + prev_ (os_.rdbuf ()), + from_adapter_ (*prev_), + buffer_ (from_adapter_, a0), + to_adapter_ (buffer_) + { + os_.rdbuf (&to_adapter_); + } + */ + + ~Clip () + { + try + { + buffer_.unbuffer (); + } + catch (...) + { + os_.rdbuf (prev_); + throw; + } + + os_.rdbuf (prev_); + } + + Buffer<C>& + buffer () + { + return buffer_; + } + + private: + std::basic_ostream<C>& os_; + std::basic_streambuf<C>* prev_; + + FromStreambufAdapter<C> from_adapter_; + + Buffer<C> buffer_; + + ToStreambufAdapter<C> to_adapter_; + }; + } +} + +#include <backend-elements/indentation/clip.txx> + +#endif // BACKEND_ELEMENTS_INDENTATION_CLIP_HXX diff --git a/libbackend-elements/backend-elements/indentation/clip.txx b/libbackend-elements/backend-elements/indentation/clip.txx new file mode 100644 index 0000000..58112f1 --- /dev/null +++ b/libbackend-elements/backend-elements/indentation/clip.txx @@ -0,0 +1,12 @@ +// file : backend-elements/indentation/clip.txx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +namespace BackendElements +{ + namespace Indentation + { + } +} + diff --git a/libbackend-elements/backend-elements/indentation/cxx.hxx b/libbackend-elements/backend-elements/indentation/cxx.hxx new file mode 100644 index 0000000..f10341a --- /dev/null +++ b/libbackend-elements/backend-elements/indentation/cxx.hxx @@ -0,0 +1,1016 @@ +// file : backend-elements/indentation/cxx.hxx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef BACKEND_ELEMENTS_INDENTATION_CXX_HXX +#define BACKEND_ELEMENTS_INDENTATION_CXX_HXX + +#include <backend-elements/types.hxx> +#include <backend-elements/indentation/buffer.hxx> + +#include <cult/containers/set.hxx> +#include <cult/containers/stack.hxx> +#include <cult/containers/deque.hxx> + +#include <locale> + +// #include <iostream> // @@ tmp + +namespace BackendElements +{ + namespace Indentation + { + template <typename C> + class CXX: public Buffer<C>/*, public NonCopyable*/ + { + public: + typedef + typename Buffer<C>::Traits + Traits; + + typedef + typename Buffer<C>::AsChar + AsChar; + + typedef + typename Buffer<C>::AsInt + AsInt; + + typedef + typename Buffer<C>::Write + Write; + + public: + CXX (Buffer<C>& out) + : out_ (out), + buffering_ (false), + position_ (0), + paren_balance_ (0), + spaces_ (2), + construct_ (Construct::other), + lbrace_ ("{"), + rbrace_ ("}") + // locale_ ("C") + { + indentation_.push (0); + + single_line_blocks_.insert ("if"); + single_line_blocks_.insert ("do"); + single_line_blocks_.insert ("for"); + single_line_blocks_.insert ("else"); + single_line_blocks_.insert ("case"); + single_line_blocks_.insert ("while"); + + follow_blocks_.insert ("else"); + follow_blocks_.insert ("case"); + follow_blocks_.insert ("catch"); + follow_blocks_.insert ("default"); + } + + public: + virtual AsInt + put (AsChar c) + { + AsInt result (Traits::to_int_type (c)); + + try + { + // First determine what kind of construct we are in. + // + typename Construct::Value new_construct (construct_); + typename Construct::Value old_construct (construct_); + + switch (c) + { + case '\n': + { + if (construct_ == Construct::pp_directive || + construct_ == Construct::cxx_comment) + construct_ = new_construct = Construct::other; + + break; + } + case '#': + { + if (construct_ == Construct::other) + construct_ = new_construct = Construct::pp_directive; + + break; + } + case '\"': + { + if (construct_ != Construct::pp_directive && + construct_ != Construct::c_comment && + construct_ != Construct::cxx_comment && + construct_ != Construct::char_literal) + { + // We might be in an escape sequence. + // + Boolean es (!hold_.empty () && hold_.back () == '\\'); + + if (es) + { + // Scan the hold sequence backwards to figure out if this + // backslash is part of this escape sequence or a preceding + // one. + // + for (typename Hold::ReverseIterator i (hold_.rbegin () + 1), + e (hold_.rend ()); i != e && *i == '\\'; ++i) + es = !es; + } + + if (!es) + { + // Not an escape sequence. + // + if (construct_ == Construct::string_literal) + new_construct = Construct::other; + else + construct_ = new_construct = Construct::string_literal; + } + } + + break; + } + case '\'': + { + if (construct_ != Construct::pp_directive && + construct_ != Construct::c_comment && + construct_ != Construct::cxx_comment && + construct_ != Construct::string_literal) + { + // We might be in an escape sequence. + // + Boolean es (!hold_.empty () && hold_.back () == '\\'); + + if (es) + { + // Scan the hold sequence backwards to figure out if this + // backslash is part of this escape sequence or a preceding + // one. + // + for (typename Hold::ReverseIterator i (hold_.rbegin () + 1), + e (hold_.rend ()); i != e && *i == '\\'; ++i) + es = !es; + } + + if (!es) + { + if (construct_ == Construct::char_literal) + new_construct = Construct::other; + else + construct_ = new_construct = Construct::char_literal; + } + } + + break; + } + case '/': + { + if (construct_ == Construct::other) + { + if (!hold_.empty () && hold_.back () == '/') + construct_ = new_construct = Construct::cxx_comment; + } + + if (construct_ == Construct::c_comment) + { + if (!hold_.empty () && hold_.back () == '*') + construct_ = new_construct = Construct::other; + } + + break; + } + case '*': + { + if (construct_ == Construct::other) + { + if (!hold_.empty () && hold_.back () == '/') + construct_ = new_construct = Construct::c_comment; + } + + break; + } + default: + { + break; + } + } + + // Special handling of CPP directives. + // + if (construct_ == Construct::pp_directive) + { + result = write (c); + position_++; + return result; + } + + // + // + tokenize (c, old_construct); + + + // Indentation in parenthesis. We don't need to make sure + // we are not in a comments, etc. because we make sure we + // don't hold anything in those states. + // + if (!hold_.empty () && hold_.back () == '(') + { + unbuffer (); // We don't need to hold it anymore. + + if (c == '\n') + indentation_.push (indentation_.top () + spaces_); + else + indentation_.push (position_); + } + + + // + // + Boolean defaulting (false); + + switch (c) + { + case '\n': + { + if (!indent_block_.empty () && construct_ == Construct::other) + indent_block_.top ().newline_ = true; + + hold_.push_back (c); + position_ = 0; // Starting a new line. + + break; + } + case '{': + { + if (construct_ == Construct::other) + { + if (!indent_block_.empty ()) + { + // Pop all the blocks until the one that was indented. + // + while (!indent_block_.top ().indented_) + indent_block_.pop (); + + if (indentation_.size () > 1) + indentation_.pop (); + + indent_block_.pop (); + } + + ensure_new_line (); + output_indentation (); + result = write (c); + ensure_new_line (); + + indentation_.push (indentation_.top () + spaces_); + } + else + defaulting = true; + + break; + } + case '}': + { + if (construct_ == Construct::other) + { + if (indentation_.size () > 1) + indentation_.pop (); + + // Reduce multiple newlines to one. + // + while (hold_.size () > 1) + { + typename Hold::ReverseIterator i (hold_.rbegin ()); + + if (*i == '\n' && *(i + 1) == '\n') + hold_.pop_back (); + else + break; + } + + ensure_new_line (); + output_indentation (); + + hold_.push_back (c); + + + // Add double newline after '}'. + // + hold_.push_back ('\n'); + hold_.push_back ('\n'); + position_ = 0; + + buffering_ = true; + } + else + defaulting = true; + + break; + } + case ';': + { + if (construct_ == Construct::other) + { + // for (;;) + // + if (!indent_block_.empty () && paren_balance_ == 0) + { + // Pop all the blocks until the one that was indented. + // + while (!indent_block_.top ().indented_) + indent_block_.pop (); + + if (indentation_.size () > 1) + indentation_.pop (); + + indent_block_.pop (); + } + + if (paren_balance_ != 0) + { + // We are inside for (;;) statement. Nothing to do here. + // + defaulting = true; + } + else + { + // Handling '};' case. + // + + Boolean brace (false); + + if (hold_.size () > 1 && hold_.back () == '\n') + { + Boolean pop_nl (false); + + for (typename Hold::ReverseIterator + i (hold_.rbegin ()), e (hold_.rend ()); + i != e; ++i) + { + if (*i != '\n') + { + if (*i == '}') + brace = pop_nl = true; + + break; + } + } + + if (pop_nl) + while (hold_.back () == '\n') + hold_.pop_back (); + } + + output_indentation (); + result = write (c); + position_++; + + if (brace) + { + hold_.push_back ('\n'); + hold_.push_back ('\n'); + } + + ensure_new_line (); + } + } + else + defaulting = true; + + break; + } + case ' ': + { + if (construct_ == Construct::other) + { + // Handling '} foo_;' case. + // + if (hold_.size () > 1 && hold_.back () == '\n') + { + Boolean pop_nl (false); + + for (typename Hold::ReverseIterator + i (hold_.rbegin ()), e (hold_.rend ()); + i != e; ++i) + { + if (*i != '\n') + { + if (*i == '}') + pop_nl = true; + + break; + } + } + + if (pop_nl) + while (hold_.back () == '\n') + hold_.pop_back (); + } + } + + defaulting = true; + break; + } + case '\\': + { + if (construct_ != Construct::pp_directive && + construct_ != Construct::c_comment && + construct_ != Construct::cxx_comment) + { + output_indentation (); + hold_.push_back (c); + position_++; + } + else + defaulting = true; + + break; + + } + case '(': + { + if (construct_ == Construct::other) + { + // Hold it so that we can see what's coming next. + // + output_indentation (); + hold_.push_back (c); + position_++; + paren_balance_++; + } + else + defaulting = true; + break; + } + case ')': + { + if (construct_ == Construct::other) + { + if (indentation_.size () > 1) + indentation_.pop (); + + if (paren_balance_ > 0) + paren_balance_--; + } + + defaulting = true; + break; + } + case '/': + { + if (construct_ == Construct::other) + { + output_indentation (); + hold_.push_back (c); + position_++; + } + else + defaulting = true; + + break; + } + case '*': + { + if (construct_ == Construct::c_comment) + { + output_indentation (); + hold_.push_back (c); + position_++; + } + else + defaulting = true; + + break; + } + default: + { + defaulting = true; + break; + } + } + + + if (defaulting) + { + output_indentation (); + result = write (c); + position_++; + } + + construct_ = new_construct; + } + catch (Write const&) + { + result = Traits::eof (); + } + + return result; + } + + private: + typedef Cult::StringTemplate<C> String; + + Void + next_token (String const& old, AsChar c) + { + //std::cerr << "next token: " << token_ + // << "; old token: " << old << std::endl; + + // Handle one line indentation blocks (if, else, etc). + // + if (single_line_blocks_.find (token_) != single_line_blocks_.end ()) + { + // Only indent sub-blocks if we are on a new line. + // + Boolean indent (indent_block_.empty () || + indent_block_.top ().newline_); + + indent_block_.push (IndentBlockInfo (c == '\n', indent)); + + if (indent) + indentation_.push (indentation_.top () + spaces_); + } + + // Keep track of the do ... while construct in order to suppress + // the newline after } and before while. + // + if (old == String ("do") && token_ == lbrace_) + { + do_while_state_.push (0); + } + + if (!do_while_state_.empty ()) + { + if (token_ == lbrace_) + do_while_state_.top ()++; + + if (token_ == rbrace_) + do_while_state_.top ()--; + } + + // Suppress double newline in the "}else", etc., cases. + // + if (old == rbrace_) + { + Boolean dw (!do_while_state_.empty () && + do_while_state_.top () == 0); + + if (follow_blocks_.find (token_) != follow_blocks_.end () || dw) + { + if (dw) + do_while_state_.pop (); + + // Reduce double newline after "}" into a single one. + // + typename Hold::Iterator i (hold_.end ()), b (hold_.begin ()); + + for (--i; i != b; --i) + { + // See if this is the end of the "}\n\n" sequence. + // + if (*i == '\n') + { + --i; + if (i != b && *i == '\n') + { + --i; + if (*i == '}') + { + ++i; + hold_.erase (i); + break; + } + } + } + } + } + else if (token_ != rbrace_) + { + buffering_ = false; + } + } + } + + public: + virtual Void + unbuffer () + { + AsInt result; + + while (!hold_.empty ()) + { + result = out_.put (hold_.front ()); + + //@@ failed + if (result == Traits::eof ()) + throw Write (); + + hold_.pop_front (); + } + } + + private: + Void + ensure_new_line () + { + if (hold_.empty () || hold_.back () != '\n') + { + hold_.push_back ('\n'); + position_ = 0; // Starting a new line. + } + } + + + Void + output_indentation () + { + if (!hold_.empty () && hold_.back () == '\n') + { + for (UnsignedLong i (0); i < indentation_.top (); ++i) + write (' '); + + position_ += indentation_.top (); + } + } + + AsInt + write (AsChar c) + { + hold_.push_back (c); + + if (!buffering_) + { + AsInt result (Traits::eof ()); + + while (!hold_.empty ()) + { + result = out_.put (hold_.front ()); + + if (result == Traits::eof ()) + throw Write (); + + hold_.pop_front (); + } + + return result; + } + else + return c; + } + + private: + struct Construct + { + enum Value + { + other, + pp_directive, + c_comment, + cxx_comment, + string_literal, + char_literal + }; + }; + + Void + tokenize (AsChar c, typename Construct::Value old) + { + // + // + switch (construct_) + { + case Construct::pp_directive: + { + if (old == Construct::other) // Start PP directive + retire (c); + + return; + } + case Construct::c_comment: + { + if (old == Construct::other) // Start C comment. + lexeme_.clear (); + + return; + } + case Construct::cxx_comment: + { + if (old == Construct::other) // Start C++ comment. + lexeme_.clear (); + + return; + } + case Construct::string_literal: + { + if (old == Construct::other) // Start string literal + retire (c); + + lexeme_ += c; + return; + } + case Construct::char_literal: + { + if (old == Construct::other) // Start char literal + retire (c); + + lexeme_ += c; + return; + } + default: + break; + } + + // construct_ == other + // + switch (old) + { + case Construct::pp_directive: + { + // End PP directive (newline). + // + return; + } + case Construct::c_comment: + { + // End C comment. + // + return; + } + case Construct::cxx_comment: + { + // End C++ comment (newline). + // + return; + } + case Construct::string_literal: + { + // End string literal ("). + // + lexeme_ += c; + return; + } + case Construct::char_literal: + { + // End char literal ('). + // + lexeme_ += c; + return; + } + default: + break; + } + + + // construct_ == old == other + // + + /* + + The code below is equivalent to this (simpler) code which is + unfortunately not fast enough. + + using std::isalpha; + using std::isalnum; + using std::isdigit; + using std::isspace; + + if (c == '_' || isalpha (c, locale_)) + { + if (lexeme_.empty () || + lexeme_[0] == '_' || isalpha (lexeme_[0], locale_)) + lexeme_ += c; + else + { + retire (c); + lexeme_ += c; + } + } + else if (isdigit (c, locale_)) + { + if (lexeme_.empty () || + lexeme_[0] == '_' || isalnum (lexeme_[0], locale_)) + lexeme_ += c; + else + { + retire (c); + lexeme_ += c; + } + } + else // Delimiters + { + retire (c); + + if (!isspace (c, locale_)) + lexeme_ += c; + } + */ + + switch (char_class (c)) + { + case CharClass::alpha: + { + if (lexeme_.empty () || + char_class (lexeme_[0]) == CharClass::alpha) + lexeme_ += c; + else + { + retire (c); + lexeme_ += c; + } + break; + } + case CharClass::digit: + { + if (lexeme_.empty ()) + lexeme_ += c; + else + { + typename CharClass::Value cc (char_class (lexeme_[0])); + + if (cc == CharClass::alpha || cc == CharClass::digit) + lexeme_ += c; + else + { + retire (c); + lexeme_ += c; + } + } + break; + } + case CharClass::op_punc: + { + retire (c); + lexeme_ += c; + break; + } + case CharClass::space: + { + retire (c); + break; + } + } + } + + struct CharClass + { + enum Value + { + alpha, // Alpha + '_'. + digit, + op_punc, // Operator or punctuation. + space + }; + + }; + + typename CharClass::Value + char_class (C c) + { + switch (c) + { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + return CharClass::digit; + + case '!': + case '%': + case '^': + case '&': + case '*': + case '(': + case ')': + case '-': + case '+': + case '=': + case '{': + case '}': + case '|': + case '~': + case '[': + case ']': + case '\\': + case ';': + case '\'': + case ':': + case '"': + case '<': + case '>': + case '?': + case ',': + case '.': + case '/': + return CharClass::op_punc; + + case ' ': + case '\n': + case '\t': + case '\f': + case '\r': + case '\v': + return CharClass::space; + + default: + return CharClass::alpha; + } + } + + + Void + retire (AsChar c) + { + if (!lexeme_.empty ()) + { + token_.swap (lexeme_); + next_token (lexeme_, c); + lexeme_.clear (); + } + } + + private: + Buffer<C>& out_; + Boolean buffering_; // True if write() should buffer the char. + UnsignedLong position_; // Current position on the line. + UnsignedLong paren_balance_; // ( ) balance. + Cult::Containers::Stack<UnsignedLong> indentation_; + UnsignedLong spaces_; + + Boolean suppress_nl_; + + //@@ gcc bug# 18304 + // + typename Construct::Value construct_; + + // Special state stach for the do-while construct. The presence + // of an element in the stack indicates that we are in a braced + // do-while construct. The value of the element is the brace + // balance. + Cult::Containers::Stack<UnsignedLong> do_while_state_; + + typedef + Cult::Containers::Deque<AsInt> + Hold; + + Hold hold_; + + private: + String token_; // previously fully recognized token + String lexeme_; // current lexeme (accumulator) + + // std::locale locale_; + + // Keywords that may be folowed by a single-line block, e.g., if, + // else, etc. + // + Cult::Containers::Set<String> single_line_blocks_; + + // Keywords that may follow (and be related) to a previous block, + // e.g., else, case, catch. + // + Cult::Containers::Set<String> follow_blocks_; + + String lbrace_; + String rbrace_; + + private: + // Single-line indented blocks such as if, else, while, etc. The + // newline flag indicates whether a new line has been seen after + // the keyword. This is needed to properly distinguish cases such + // as: + // + // else if (...) + // foo (); + // + // else + // if (...) + // foo (); + // + struct IndentBlockInfo + { + IndentBlockInfo (Boolean newline, Boolean indented) + : newline_ (newline), indented_ (indented) + { + } + + Boolean newline_; + Boolean indented_; + }; + + Cult::Containers::Stack<IndentBlockInfo> indent_block_; + }; + } +} + +#include <backend-elements/indentation/cxx.txx> + +#endif // BACKEND_ELEMENTS_INDENTATION_CXX_HXX diff --git a/libbackend-elements/backend-elements/indentation/cxx.txx b/libbackend-elements/backend-elements/indentation/cxx.txx new file mode 100644 index 0000000..9acff37 --- /dev/null +++ b/libbackend-elements/backend-elements/indentation/cxx.txx @@ -0,0 +1,12 @@ +// file : backend-elements/indentation/cxx.txx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +namespace BackendElements +{ + namespace Indentation + { + } +} + diff --git a/libbackend-elements/backend-elements/indentation/idl.hxx b/libbackend-elements/backend-elements/indentation/idl.hxx new file mode 100644 index 0000000..e5a234f --- /dev/null +++ b/libbackend-elements/backend-elements/indentation/idl.hxx @@ -0,0 +1,290 @@ +// file : backend-elements/indentation/idl.hxx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef BACKEND_ELEMENTS_INDENTATION_IDL_HXX +#define BACKEND_ELEMENTS_INDENTATION_IDL_HXX + +#include <backend-elements/types.hxx> +#include <backend-elements/indentation/buffer.hxx> + +#include <cult/containers/deque.hxx> + +namespace BackendElements +{ + namespace Indentation + { + template <typename C> + class IDL: public Buffer<C>, public NonCopyable + { + public: + typedef + typename Buffer<C>::Traits + Traits; + + typedef + typename Buffer<C>::AsChar + AsChar; + + typedef + typename Buffer<C>::AsInt + AsInt; + + typedef + typename Buffer<C>::Write + Write; + + public: + IDL (Buffer<C>& out) + : out_ (out), + indentation_ (0), + spaces_ (2), + construct_ (Construct::other) + { + } + + public: + virtual AsInt + put (AsChar c) + { + AsInt result (Traits::to_int_type (c)); + + try + { + Boolean defaulting (false); + + switch (c) + { + case '\n': + { + hold_.push_back (c); + break; + } + case '{': + { + ensure_new_line (); + output_indentation (); + result = write (c); + ensure_new_line (); + indentation_++; + break; + } + case '}': + { + if (indentation_ > 0) indentation_--; + + // Reduce multiple newlines to one. + // + while (hold_.size () > 1) + { + typename Hold::ReverseIterator i (hold_.rbegin ()); + + if (*i == '\n' && *(i + 1) == '\n') + hold_.pop_back (); + else + break; + } + + ensure_new_line (); + output_indentation (); + + hold_.push_back (c); + + // Add double newline after '}'. + // + hold_.push_back ('\n'); + hold_.push_back ('\n'); + + + break; + } + case ';': + { + // Handling '};' case. + // + + Boolean brace (false); + + if (hold_.size () > 1 && hold_.back () == '\n') + { + Boolean pop_nl (false); + + for (typename Hold::ReverseIterator + i (hold_.rbegin ()), e (hold_.rend ()); i != e; ++i) + { + if (*i != '\n') + { + if (*i == '}') + brace = pop_nl = true; + + break; + } + } + + if (pop_nl) + while (hold_.back () == '\n') + hold_.pop_back (); + } + + output_indentation (); + result = write (c); + + if (brace) + { + hold_.push_back ('\n'); + hold_.push_back ('\n'); + } + + if (construct_ != Construct::string_literal && + construct_ != Construct::char_literal) + { + ensure_new_line (); + } + break; + } + case '\\': + { + hold_.push_back (c); + break; + } + case '\"': + { + if (hold_.empty () || hold_.back () != '\\') + { + // not escape sequence + if (construct_ == Construct::string_literal) + { + construct_ = Construct::other; + } + else construct_ = Construct::string_literal; + } + + defaulting = true; + break; + } + case '\'': + { + if (hold_.empty () || hold_.back () != '\\') + { + // not escape sequence + if (construct_ == Construct::char_literal) + { + construct_ = Construct::other; + } + else construct_ = Construct::char_literal; + } + + defaulting = true; + break; + } + default: + { + defaulting = true; + break; + } + } + + if (defaulting) + { + output_indentation (); + result = write (c); + } + } + catch (Write const&) + { + result = Traits::eof (); + } + + return result; + } + + virtual Void + unbuffer () + { + AsInt result; + + while (!hold_.empty ()) + { + result = out_.put (hold_.front ()); + + //@@ failed + if (result == Traits::eof ()) + throw Write (); + + hold_.pop_front (); + } + } + + private: + Void + ensure_new_line () + { + if (hold_.empty () || hold_.back () != '\n') + hold_.push_back ('\n'); + } + + + Void + output_indentation () + { + if (!hold_.empty () && hold_.back () == '\n') + for (UnsignedLong i (0); i < indentation_ * spaces_; ++i) + write (' '); + } + + AsInt + write (AsChar c) + { + hold_.push_back (c); + + AsInt result (Traits::eof ()); + + while (!hold_.empty ()) + { + result = out_.put (hold_.front ()); + + if (result == Traits::eof ()) + throw Write (); + + hold_.pop_front (); + } + + return result; + } + + + private: + + Buffer<C>& out_; + UnsignedLong indentation_; + UnsignedLong spaces_; + + Boolean suppress_nl_; + + struct Construct + { + enum Value + { + other, + string_literal, + char_literal + }; + }; + + //@@ gcc bug# 18304 + // + typename Construct::Value construct_; + + typedef + Cult::Containers::Deque<AsInt> + Hold; + + Hold hold_; + }; + } +} + +#include <backend-elements/indentation/idl.txx> + +#endif // BACKEND_ELEMENTS_INDENTATION_IDL_HXX diff --git a/libbackend-elements/backend-elements/indentation/idl.txx b/libbackend-elements/backend-elements/indentation/idl.txx new file mode 100644 index 0000000..6ddc63e --- /dev/null +++ b/libbackend-elements/backend-elements/indentation/idl.txx @@ -0,0 +1,11 @@ +// file : backend-elements/indentation/idl.txx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +namespace BackendElements +{ + namespace Indentation + { + } +} diff --git a/libbackend-elements/backend-elements/indentation/sloc.hxx b/libbackend-elements/backend-elements/indentation/sloc.hxx new file mode 100644 index 0000000..57e6989 --- /dev/null +++ b/libbackend-elements/backend-elements/indentation/sloc.hxx @@ -0,0 +1,277 @@ +// file : backend-elements/indentation/sloc.hxx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef BACKEND_ELEMENTS_INDENTATION_SLOC_HXX +#define BACKEND_ELEMENTS_INDENTATION_SLOC_HXX + +#include <backend-elements/types.hxx> +#include <backend-elements/indentation/buffer.hxx> + +#include <cctype> +#include <iostream> //@@ tmp + +namespace BackendElements +{ + namespace Indentation + { + template <typename C> + class SLOC: public Buffer<C>/*, public NonCopyable*/ + { + public: + typedef + typename Buffer<C>::Traits + Traits; + + typedef + typename Buffer<C>::AsChar + AsChar; + + typedef + typename Buffer<C>::AsInt + AsInt; + + typedef + typename Buffer<C>::Write + Write; + + public: + SLOC (Buffer<C>& out) + : out_ (out), + count_ (0), + prev_ ('\0'), + code_counted_ (false), + construct_ (Construct::code) + { + } + + UnsignedLong + count () const + { + return count_; + } + + public: + virtual AsInt + put (AsChar c) + { + typename Construct::Value old (construct_); + + switch (construct_) + { + case Construct::code: + { + code (c); + break; + } + case Construct::c_comment: + { + c_comment (c); + break; + } + case Construct::cxx_comment: + { + cxx_comment (c); + break; + } + case Construct::char_literal: + { + char_literal (c); + break; + } + case Construct::string_literal: + { + string_literal (c); + break; + } + } + + // There are cases when a previous character has been already + // 'used' and therefore can not be used again. Good example + // would be '/* *//'. Here, the second slash doesn't start + // C++ comment since it was already used by C comment. + // + // To account for this we are going to set prev_ to '\0' when + // the mode changes. + // + + prev_ = (old == construct_) ? c : '\0'; + + return out_.put (c); + } + + virtual Void + unbuffer () + { + } + + private: + Void + code (AsChar c) + { + bool count (true); + + switch (c) + { + case '/': + { + if (prev_ == '/') + { + construct_ = Construct::cxx_comment; + count = false; + } + else + { + // This slash can be a beginning of a comment but we + // yet have no way to know. Will have to examine it later + // (see below). + // + count = false; + } + + break; + } + case '*': + { + if (prev_ == '/') + { + construct_ = Construct::c_comment; + count = false; + } + break; + } + case '\'': + { + construct_ = Construct::char_literal; + break; + } + case '"': + { + construct_ = Construct::string_literal; + break; + } + case '\n': + { + code_counted_ = false; // reset for a new line + count = false; + break; + } + default: + { + if (std::isspace (c)) + count = false; + break; + } + } + + // The second condition here accounts for the fact that we cannot + // count '/' right away since it can be a beginning of a comment. + // + if (!code_counted_ && + (count || (prev_ == '/' && construct_ == Construct::code))) + { + //std::wcerr << "detected code @ " << c << std::endl; + count_++; + code_counted_ = true; + } + } + + Void + c_comment (AsChar c) + { + switch (c) + { + case '/': + { + if (prev_ == '*') + construct_ = Construct::code; + break; + } + case '\n': + { + code_counted_ = false; // reset for a new line + break; + } + } + } + + Void + cxx_comment (AsChar c) + { + switch (c) + { + case '\n': + { + construct_ = Construct::code; + code_counted_ = false; // reset for a new line + break; + } + } + } + + Void + char_literal (AsChar c) + { + switch (c) + { + case '\'': + { + if (prev_ != '\\') + construct_ = Construct::code; + break; + } + } + } + + Void + string_literal (AsChar c) + { + switch (c) + { + case '"': + { + if (prev_ != '\\') + construct_ = Construct::code; + break; + } + case '\n': + { + /*@@ Should I count multi-line string literal as multiple SLOC? */ + break; + } + } + } + + private: + Buffer<C>& out_; + UnsignedLong count_; + + AsChar prev_; // previous character or '\0' + + struct Construct + { + enum Value + { + code, + c_comment, + cxx_comment, + char_literal, + string_literal + }; + }; + + // code + // + bool code_counted_; + + //@@ gcc bug# 18304 + // + typename Construct::Value construct_; + }; + } +} + +//#include <backend-elements/indentation/sloc.txx> + +#endif // BACKEND_ELEMENTS_INDENTATION_SLOC_HXX diff --git a/libbackend-elements/backend-elements/makefile b/libbackend-elements/backend-elements/makefile new file mode 100644 index 0000000..70a3e4a --- /dev/null +++ b/libbackend-elements/backend-elements/makefile @@ -0,0 +1,63 @@ +# file : backend-elements/makefile +# author : Boris Kolpackov <boris@kolpackov.net> +# copyright : Copyright (c) 2005-2010 Boris Kolpackov +# license : GNU GPL v2; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../build/bootstrap.make + +cxx_tun := +cxx_obj := $(addprefix $(out_base)/,$(cxx_tun:.cxx=.o)) +cxx_od := $(cxx_obj:.o=.o.d) + +backend_elements.l := #$(out_base)/backend-elements.l +backend_elements.l.cpp-options := $(out_base)/backend-elements.l.cpp-options + +clean := $(out_base)/.clean + + +# Secure default target. +# +$(backend_elements.l.cpp-options): +#$(backend_elements.l): + + +# Imports. +# +$(call import,\ + $(scf_root)/import/libcult/stub.make,\ + l: cult.l,cpp-options: cult.l.cpp-options) + +$(call import,\ + $(scf_root)/import/libboost/regex/stub.make,\ + l: re.l,cpp-options: re.l.cpp-options) + + +# Build. +# +#$(backend_elements.l): $(cxx_obj) $(cult.l) + +#$(cxx_obj): $(backend_elements.l.cpp-options) + +$(backend_elements.l.cpp-options): value := -I$(src_root) +$(backend_elements.l.cpp-options): $(re.l.cpp-options) $(cult.l.cpp-options) + +#$(call include-dep,$(cxx_od)) + + +# Convenience alias for default target. +# +$(out_base)/: $(backend_elements.l.cpp-options) + + +# Clean. +# +#$(BackendElements.l).clean \ + +$(clean): $(addsuffix .cxx.clean,$(cxx_obj)) \ + $(backend_elements.l.cpp-options).clean + + +# How to. +# +$(call include,$(bld_root)/cxx/o-l.make) +$(call include,$(bld_root)/cxx/cxx-o.make) diff --git a/libbackend-elements/backend-elements/regex.hxx b/libbackend-elements/backend-elements/regex.hxx new file mode 100644 index 0000000..9dc6024 --- /dev/null +++ b/libbackend-elements/backend-elements/regex.hxx @@ -0,0 +1,208 @@ +// file : backend-elements/regex.hxx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef BACKEND_ELEMENTS_REGEX_HXX +#define BACKEND_ELEMENTS_REGEX_HXX + +#include <ostream> + +#include <boost/regex.hpp> + +#include <backend-elements/types.hxx> + +namespace BackendElements +{ + namespace Regex + { + template <typename C> + struct Format + { + Format (StringTemplate<C> const& expression, + StringTemplate<C> const& description) + : expression_ (expression), description_ (description) + { + } + + StringTemplate<C> const& + expression () const + { + return expression_; + } + + StringTemplate<C> const& + description () const + { + return description_; + } + + private: + StringTemplate<C> expression_; + StringTemplate<C> description_; + }; + + // Regex pattern. + // + template <typename C> + struct Pattern + { + Pattern () + { + } + + Pattern (Char const* p) + { + init (StringTemplate<C> (p)); + } + + Pattern (StringTemplate<C> const& p) + { + init (p); + } + + Pattern& + operator= (Char const* p) + { + init (StringTemplate<C> (p)); + return *this; + } + + Pattern& + operator= (StringTemplate<C> const& p) + { + init (p); + return *this; + } + + public: + Boolean + match (StringTemplate<C> const& s) const + { + return regex_match (s, pat_, boost::format_all); + } + + StringTemplate<C> + merge (StringTemplate<C> const& sub, + StringTemplate<C> const& s, + Boolean first_only = false) const + { + if (first_only) + return regex_merge ( + s, pat_, sub, boost::format_all | boost::format_first_only); + else + return regex_merge ( s, pat_, sub, boost::format_all); + } + + public: + Boolean + empty () const + { + return pat_.empty (); + } + + public: + boost::basic_regex<C> const& + impl_pattern () const + { + return pat_; + } + + private: + Void + init (StringTemplate<C> const& r); + + private: + boost::basic_regex<C> pat_; + }; + + template <typename C1, typename C2> + inline std::basic_ostream<C1>& + operator<< (std::basic_ostream<C1>& os, Pattern<C2> const& p) + { + return os << p.impl_pattern ().str ().c_str (); + } + + // Regex expression: '/pattern/substitution/'. + // + template <typename C> + struct Expression + { + Expression () + { + } + + // Expression is of the form /regex/format/ where '/' can be + // replaced with any delimiter. + // + Expression (Char const* e) + { + init (StringTemplate<C> (e)); + } + + Expression (StringTemplate<C> const& e) + { + init (e); + } + + Expression& + operator= (Char const* e) + { + init (StringTemplate<C> (e)); + return *this; + } + + Expression& + operator= (StringTemplate<C> const& e) + { + init (e); + return *this; + } + + public: + Boolean + match (StringTemplate<C> const& s) const + { + return pat_.match (s); + } + + StringTemplate<C> + merge (StringTemplate<C> const& s, Boolean first_only = false) const + { + return pat_.merge (sub_, s, first_only); + } + + public: + const Pattern<C>& + pattern () const + { + return pat_; + } + + const StringTemplate<C>& + substitution () const + { + return sub_; + } + + public: + Boolean + empty () const + { + return pat_.empty () && sub_.empty (); + } + + private: + Void + init (StringTemplate<C> const& r); + + private: + Pattern<C> pat_; + StringTemplate<C> sub_; + }; + } +} + +#include <backend-elements/regex.txx> + +#endif // BACKEND_ELEMENTS_REGEX_HXX diff --git a/libbackend-elements/backend-elements/regex.txx b/libbackend-elements/backend-elements/regex.txx new file mode 100644 index 0000000..897e0e8 --- /dev/null +++ b/libbackend-elements/backend-elements/regex.txx @@ -0,0 +1,52 @@ +// file : backend-elements/regex.txx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +namespace BackendElements +{ + namespace Regex + { + template <typename C> + Void Pattern<C>:: + init (StringTemplate<C> const& r) + { + try + { + pat_ = r; + } + catch (boost::regex_error const& e) + { + throw Format<C> (r, e.what ()); + } + } + + // + // + template <typename C> + Void Expression<C>:: + init (StringTemplate<C> const& r) + { + typedef StringTemplate<C> String; + + if (r.empty ()) + throw Format<C> (r, "empty expression"); + + C d (r[0]); + + Size first (0); + Size middle (r.find (d, first + 1)); + + if (middle == String::npos) + throw Format<C> (r, "missing second pattern-substitution separator"); + + Size last (r.find (d, middle + 1)); + + if (last == String::npos) + throw Format<C> (r, "missing third pattern-substitution separator"); + + pat_ = String (r, first + 1, middle - first - 1); + sub_.assign (r, middle + 1, last - middle - 1); + } + } +} diff --git a/libbackend-elements/backend-elements/types.hxx b/libbackend-elements/backend-elements/types.hxx new file mode 100644 index 0000000..f309f5d --- /dev/null +++ b/libbackend-elements/backend-elements/types.hxx @@ -0,0 +1,16 @@ +// file : backend-elements/types.hxx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef BACKEND_ELEMENTS_TYPES_HXX +#define BACKEND_ELEMENTS_TYPES_HXX + +#include <cult/types.hxx> + +namespace BackendElements +{ + using namespace Cult::Types; +} + +#endif // BACKEND_ELEMENTS_TYPES_HXX diff --git a/libbackend-elements/build/bootstrap.make b/libbackend-elements/build/bootstrap.make new file mode 100644 index 0000000..17981a7 --- /dev/null +++ b/libbackend-elements/build/bootstrap.make @@ -0,0 +1,46 @@ +# file : build/bootstrap.make +# author : Boris Kolpackov <boris@kolpackov.net> +# copyright : Copyright (c) 2005-2010 Boris Kolpackov +# license : GNU GPL v2; see accompanying LICENSE file + +project_name := libbackend-elements + +# First try to include the bundled bootstrap.make if it exist. If that +# fails, let make search for the external bootstrap.make. +# +build := build-0.3 + +-include $(dir $(lastword $(MAKEFILE_LIST)))../../$(build)/bootstrap.make + +ifeq ($(patsubst %build/bootstrap.make,,$(lastword $(MAKEFILE_LIST))),) +include $(build)/bootstrap.make +endif + +# Aliases +# +.PHONY: $(out_base)/ \ + $(out_base)/.test \ + $(out_base)/.clean + +ifdef %interactive% + +.PHONY: test clean + +test: $(out_base)/.test +clean: $(out_base)/.clean + +ifneq ($(filter $(.DEFAULT_GOAL),test clean),) +.DEFAULT_GOAL := +endif + +endif + +# Don't include dependency info for certain targets. +# +define include-dep +$(call -include,$1) +endef + +ifneq ($(filter $(MAKECMDGOALS),clean cleandoc disfigure),) +include-dep = +endif diff --git a/libbackend-elements/build/cxx/configuration-dynamic.make b/libbackend-elements/build/cxx/configuration-dynamic.make new file mode 100644 index 0000000..568ab40 --- /dev/null +++ b/libbackend-elements/build/cxx/configuration-dynamic.make @@ -0,0 +1,14 @@ +cxx_id := gnu +cxx_optimize := n +cxx_debug := n +cxx_rpath := n +cxx_pp_extra_options := $(CPPFLAGS) +cxx_extra_options := $(CXXFLAGS) +cxx_ld_extra_options := $(LDFLAGS) +cxx_extra_libs := $(LIBS) + +r := $(shell echo $(LDFLAGS) | sed -e 's/-L *\([^ ]*\)/-L\1/g') +r := $(patsubst -L%,%,$(filter -L%,$(r))) +r := $(shell echo $(r) | sed -e 's/ /:/g') + +cxx_extra_lib_paths := $(r) diff --git a/libbackend-elements/build/cxx/gnu/configuration-dynamic.make b/libbackend-elements/build/cxx/gnu/configuration-dynamic.make new file mode 100644 index 0000000..f3fe64d --- /dev/null +++ b/libbackend-elements/build/cxx/gnu/configuration-dynamic.make @@ -0,0 +1,8 @@ +ifneq ($(CXX),) +cxx_gnu := $(CXX) +else +cxx_gnu := g++ +endif + +cxx_gnu_libraries := +cxx_gnu_optimization_options := diff --git a/libbackend-elements/build/export/libbackend-elements/stub.make b/libbackend-elements/build/export/libbackend-elements/stub.make new file mode 100644 index 0000000..10b4ecb --- /dev/null +++ b/libbackend-elements/build/export/libbackend-elements/stub.make @@ -0,0 +1,13 @@ +# file : build/import/libbackend-elements/stub.make +# author : Boris Kolpackov <boris@kolpackov.net> +# copyright : Copyright (c) 2005-2010 Boris Kolpackov +# license : GNU GPL v2; see accompanying LICENSE file + +$(call include-once,$(src_root)/backend-elements/makefile,$(out_root)) + +#$(out_root)/backend-elements/backend-elements.l + +$(call export,\ + l: ,\ + cpp-options: $(out_root)/backend-elements/backend-elements.l.cpp-options) + diff --git a/libbackend-elements/build/import/libbackend-elements/LICENSE b/libbackend-elements/build/import/libbackend-elements/LICENSE new file mode 120000 index 0000000..5853aae --- /dev/null +++ b/libbackend-elements/build/import/libbackend-elements/LICENSE @@ -0,0 +1 @@ +../../../LICENSE
\ No newline at end of file diff --git a/libbackend-elements/build/import/libbackend-elements/configuration-rules.make b/libbackend-elements/build/import/libbackend-elements/configuration-rules.make new file mode 100644 index 0000000..4c65d9e --- /dev/null +++ b/libbackend-elements/build/import/libbackend-elements/configuration-rules.make @@ -0,0 +1,15 @@ +# file : build/import/libbackend-elements/configuration-rules.make +# author : Boris Kolpackov <boris@kolpackov.net> +# copyright : Copyright (c) 2005-2010 Boris Kolpackov +# license : GNU GPL v2; see accompanying LICENSE file + +$(dcf_root)/import/libbackend-elements/configuration-dynamic.make: | $(dcf_root)/import/libbackend-elements/. + $(call message,,$(scf_root)/import/libbackend-elements/configure $@) + +ifndef %foreign% + +disfigure:: + $(call message,rm $(dcf_root)/import/libbackend-elements/configuration-dynamic.make,\ +rm -f $(dcf_root)/import/libbackend-elements/configuration-dynamic.make) + +endif diff --git a/libbackend-elements/build/import/libbackend-elements/configure b/libbackend-elements/build/import/libbackend-elements/configure new file mode 100755 index 0000000..ab5cd7f --- /dev/null +++ b/libbackend-elements/build/import/libbackend-elements/configure @@ -0,0 +1,55 @@ +#! /usr/bin/env bash + +# file : build/import/libbackend-elements/configure +# author : Boris Kolpackov <boris@kolpackov.net> +# copyright : Copyright (c) 2005-2010 Boris Kolpackov +# license : GNU GPL v2; see accompanying LICENSE file + + +# $1 - out file +# +# bld_root - build root +# project_name - project name +# + +source $bld_root/dialog.bash + + +$echo +$echo "Configuring external dependency on 'libbackend-elements' for '$project_name'." +$echo + +$echo +$echo "Would you like to configure dependency on the installed version" +$echo "of 'libbackend-elements' as opposed to the development build?" +$echo + +installed=`read_y_n y` + +path= + +if [ "$installed" = "n" ]; then + +$echo +$echo "Please enter the src_root for 'libbackend-elements'." +$echo + +src_root=`read_path --directory --exist` + +$echo +$echo "Please enter the out_root for 'libbackend-elements'." +$echo + +out_root=`read_path --directory $src_root` + +fi + +echo libbackend_elements_installed := $installed >$1 + +if [ "$installed" = "n" ]; then + +echo src_root := $src_root >>$1 +echo scf_root := \$\(src_root\)/build >>$1 +echo out_root := $out_root >>$1 + +fi diff --git a/libbackend-elements/build/import/libbackend-elements/stub.make b/libbackend-elements/build/import/libbackend-elements/stub.make new file mode 100644 index 0000000..839d388 --- /dev/null +++ b/libbackend-elements/build/import/libbackend-elements/stub.make @@ -0,0 +1,32 @@ +# file : build/import/libbackend-elements/stub.make +# author : Boris Kolpackov <boris@kolpackov.net> +# copyright : Copyright (c) 2005-2010 Boris Kolpackov +# license : GNU GPL v2; see accompanying LICENSE file + +$(call include-once,$(scf_root)/import/libbackend-elements/configuration-rules.make,$(dcf_root)) + +libbackend_elements_installed := + +$(call -include,$(dcf_root)/import/libbackend-elements/configuration-dynamic.make) + +ifdef libbackend_elements_installed + +ifeq ($(libbackend_elements_installed),y) + +#-lbackend-elements + +$(call export,l: -lcult -lboost_regex,cpp_options: ) + +else + +# Include export stub. +# +$(call include,$(scf_root)/export/libbackend-elements/stub.make) + +endif + +else + +.NOTPARALLEL: + +endif diff --git a/libbackend-elements/build/import/libboost/LICENSE b/libbackend-elements/build/import/libboost/LICENSE new file mode 100644 index 0000000..3912109 --- /dev/null +++ b/libbackend-elements/build/import/libboost/LICENSE @@ -0,0 +1,340 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (C) <year> <name of author> + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + <signature of Ty Coon>, 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. diff --git a/libbackend-elements/build/import/libboost/configuration-dynamic.make b/libbackend-elements/build/import/libboost/configuration-dynamic.make new file mode 100644 index 0000000..ab55882 --- /dev/null +++ b/libbackend-elements/build/import/libboost/configuration-dynamic.make @@ -0,0 +1,8 @@ +libboost_installed := y +libboost_suffix := $(BOOST_LIB_SUFFIX) + +ifeq ($(BOOST_LINK_SYSTEM),n) +libboost_system := n +else +libboost_system := y +endif diff --git a/libbackend-elements/build/import/libboost/configuration-rules.make b/libbackend-elements/build/import/libboost/configuration-rules.make new file mode 100644 index 0000000..bfe3116 --- /dev/null +++ b/libbackend-elements/build/import/libboost/configuration-rules.make @@ -0,0 +1,15 @@ +# file : build/import/libboost/configuration-rules.make +# author : Boris Kolpackov <boris@kolpackov.net> +# copyright : Copyright (c) 2005-2008 Boris Kolpackov +# license : GNU GPL v2; see accompanying LICENSE file + +$(dcf_root)/import/libboost/configuration-dynamic.make: | $(dcf_root)/import/libboost/. + $(call message,,$(scf_root)/import/libboost/configure $@) + +ifndef %foreign% + +disfigure:: + $(call message,rm $(dcf_root)/import/libboost/configuration-dynamic.make,\ +rm -f $(dcf_root)/import/libboost/configuration-dynamic.make) + +endif diff --git a/libbackend-elements/build/import/libboost/configure b/libbackend-elements/build/import/libboost/configure new file mode 100755 index 0000000..2c62d45 --- /dev/null +++ b/libbackend-elements/build/import/libboost/configure @@ -0,0 +1,65 @@ +#! /usr/bin/env bash + +# file : build/import/libboost/configure +# author : Boris Kolpackov <boris@kolpackov.net> +# copyright : Copyright (c) 2005-2008 Boris Kolpackov +# license : GNU GPL v2; see accompanying LICENSE file + + +# $1 - out config file +# +# bld_root - build root +# project_name - project name +# + +source $bld_root/dialog.bash + + +$echo +$echo "Configuring external dependency on 'boost libraries' for '$project_name'." +$echo + +$echo +$echo "Would you like to configure dependency on the installed version" +$echo "of 'boost libraries' as opposed to the development build?" +$echo + +installed=`read_y_n y` + +if [ "$installed" = "n" ]; then + + $echo + $echo "Please enter the 'boost' root directory." + $echo + + root=`read_path --directory --exist` + + $echo + $echo "Please select the library type you would like to use:" + $echo + $echo "(1) archive" + $echo "(2) shared object" + $echo + + type=`read_option "archive shared" "shared"` +fi + +$echo +$echo "Please enter optional suffix that may be embedded into the" +$echo "boost library names. For example, if your library names are in" +$echo "the libboost_regex-gcc41-mt-d.so form, then enter -gcc41-mt-d" +$echo "Otherwise leave this field blank." +$echo + +suffix= +read -e -p "[]: " suffix + +echo libboost_installed := $installed >$1 +echo libboost_suffix := $suffix >>$1 + +if [ "$installed" = "n" ]; then + + echo libboost_root := $root >>$1 + echo libboost_type := $type >>$1 + +fi diff --git a/libbackend-elements/build/import/libboost/regex/rules.make b/libbackend-elements/build/import/libboost/regex/rules.make new file mode 100644 index 0000000..3b5a0f8 --- /dev/null +++ b/libbackend-elements/build/import/libboost/regex/rules.make @@ -0,0 +1,38 @@ +# file : build/import/libboost/regex/rules.make +# author : Boris Kolpackov <boris@kolpackov.net> +# copyright : Copyright (c) 2005-2008 Boris Kolpackov +# license : GNU GPL v2; see accompanying LICENSE file + +$(dcf_root)/import/libboost/%: root := $(libboost_root) + +$(dcf_root)/import/libboost/regex/regex.l: \ + | $(dcf_root)/import/libboost/regex/. + +ifeq ($(libboost_type),archive) + +$(dcf_root)/import/libboost/regex/regex.l: \ + $(libboost_root)/stage/lib/libboost_regex$(libboost_suffix).a + @echo $< >$@ + +else + +$(dcf_root)/import/libboost/regex/regex.l: \ + $(libboost_root)/stage/lib/libboost_regex$(libboost_suffix).so + @echo $< >$@ + @echo rpath:$(root)/stage/lib >>$@ + +endif + + +$(dcf_root)/import/libboost/regex/regex.l.cpp-options: \ + | $(dcf_root)/import/libboost/regex/. + @echo include: -I$(root) >$@ + +ifndef %foreign% + +disfigure:: + $(call message,rm $(dcf_root)/import/libboost/regex/regex.l,\ +rm -f $(dcf_root)/import/libboost/regex/regex.l) + $(call message,,rm -f $(dcf_root)/import/libboost/regex/regex.l.cpp-options) + +endif diff --git a/libbackend-elements/build/import/libboost/regex/stub.make b/libbackend-elements/build/import/libboost/regex/stub.make new file mode 100644 index 0000000..2095e33 --- /dev/null +++ b/libbackend-elements/build/import/libboost/regex/stub.make @@ -0,0 +1,32 @@ +# file : build/import/libboost/regex/stub.make +# author : Boris Kolpackov <boris@kolpackov.net> +# copyright : Copyright (c) 2005-2008 Boris Kolpackov +# license : GNU GPL v2; see accompanying LICENSE file + +$(call include-once,$(scf_root)/import/libboost/configuration-rules.make,$(dcf_root)) + +libboost_installed := + +$(call -include,$(dcf_root)/import/libboost/configuration-dynamic.make) + +ifdef libboost_installed + +ifeq ($(libboost_installed),y) + +$(call export,l: -lboost_regex$(libboost_suffix),cpp_options: ) + +else + +$(call include-once,$(scf_root)/import/libboost/regex/rules.make,$(dcf_root)) + +$(call export,\ + l: $(dcf_root)/import/libboost/regex/regex.l,\ + cpp-options: $(dcf_root)/import/libboost/regex/regex.l.cpp-options) + +endif + +else + +.NOTPARALLEL: + +endif diff --git a/libbackend-elements/build/import/libboost/version b/libbackend-elements/build/import/libboost/version new file mode 100644 index 0000000..a918a2a --- /dev/null +++ b/libbackend-elements/build/import/libboost/version @@ -0,0 +1 @@ +0.6.0 diff --git a/libbackend-elements/build/import/libcult/LICENSE b/libbackend-elements/build/import/libcult/LICENSE new file mode 100644 index 0000000..3912109 --- /dev/null +++ b/libbackend-elements/build/import/libcult/LICENSE @@ -0,0 +1,340 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (C) <year> <name of author> + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + <signature of Ty Coon>, 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. diff --git a/libbackend-elements/build/import/libcult/configuration-dynamic.make b/libbackend-elements/build/import/libcult/configuration-dynamic.make new file mode 100644 index 0000000..73c92bb --- /dev/null +++ b/libbackend-elements/build/import/libcult/configuration-dynamic.make @@ -0,0 +1,4 @@ +libcult_installed := n +src_root := $(abspath $(src_root)/../libcult) +scf_root := $(src_root)/build +out_root := $(src_root) diff --git a/libbackend-elements/build/import/libcult/configuration-rules.make b/libbackend-elements/build/import/libcult/configuration-rules.make new file mode 100644 index 0000000..dc19df4 --- /dev/null +++ b/libbackend-elements/build/import/libcult/configuration-rules.make @@ -0,0 +1,15 @@ +# file : build/import/libcult/configuration-rules.make +# author : Boris Kolpackov <boris@kolpackov.net> +# copyright : Copyright (c) 2005-2009 Boris Kolpackov +# license : GNU GPL v2; see accompanying LICENSE file + +$(dcf_root)/import/libcult/configuration-dynamic.make: | $(dcf_root)/import/libcult/. + $(call message,,$(scf_root)/import/libcult/configure $@) + +ifndef %foreign% + +disfigure:: + $(call message,rm $(dcf_root)/import/libcult/configuration-dynamic.make,\ +rm -f $(dcf_root)/import/libcult/configuration-dynamic.make) + +endif diff --git a/libbackend-elements/build/import/libcult/configure b/libbackend-elements/build/import/libcult/configure new file mode 100755 index 0000000..afa4c9c --- /dev/null +++ b/libbackend-elements/build/import/libcult/configure @@ -0,0 +1,55 @@ +#! /usr/bin/env bash + +# file : build/import/libcult/configure +# author : Boris Kolpackov <boris@kolpackov.net> +# copyright : Copyright (c) 2005-2009 Boris Kolpackov +# license : GNU GPL v2; see accompanying LICENSE file + + +# $1 - out file +# +# bld_root - build root +# project_name - project name +# + +source $bld_root/dialog.bash + + +$echo +$echo "Configuring external dependency on 'libcult' for '$project_name'." +$echo + +$echo +$echo "Would you like to configure dependency on the installed " +$echo "version of 'libcult' as opposed to the development build?" +$echo + +installed=`read_y_n y` + +path= + +if [ "$installed" = "n" ]; then + +$echo +$echo "Please enter the src_root for 'libcult'." +$echo + +src_root=`read_path --directory --exist` + +$echo +$echo "Please enter the out_root for 'libcult'." +$echo + +out_root=`read_path --directory $src_root` + +fi + +echo libcult_installed := $installed >$1 + +if [ "$installed" = "n" ]; then + +echo src_root := $src_root >>$1 +echo scf_root := \$\(src_root\)/build >>$1 +echo out_root := $out_root >>$1 + +fi diff --git a/libbackend-elements/build/import/libcult/stub.make b/libbackend-elements/build/import/libcult/stub.make new file mode 100644 index 0000000..f5f7691 --- /dev/null +++ b/libbackend-elements/build/import/libcult/stub.make @@ -0,0 +1,30 @@ +# file : build/import/libcult/stub.make +# author : Boris Kolpackov <boris@kolpackov.net> +# copyright : Copyright (c) 2005-2009 Boris Kolpackov +# license : GNU GPL v2; see accompanying LICENSE file + +$(call include-once,$(scf_root)/import/libcult/configuration-rules.make,$(dcf_root)) + +libcult_installed := + +$(call -include,$(dcf_root)/import/libcult/configuration-dynamic.make) + +ifdef libcult_installed + +ifeq ($(libcult_installed),y) + +$(call export,l: -lcult,cpp-options: ) + +else + +# Include export stub. +# +$(call include,$(scf_root)/export/libcult/stub.make) + +endif + +else + +.NOTPARALLEL: + +endif diff --git a/libbackend-elements/build/ld/configuration-lib-dynamic.make b/libbackend-elements/build/ld/configuration-lib-dynamic.make new file mode 100644 index 0000000..74c8885 --- /dev/null +++ b/libbackend-elements/build/ld/configuration-lib-dynamic.make @@ -0,0 +1,13 @@ +ld_lib_type := archive + +ifneq ($(AR),) +ld_lib_ar := $(AR) +else +ld_lib_ar := ar +endif + +ifneq ($(RANLIB),) +ld_lib_ranlib := $(RANLIB) +else +ld_lib_ranlib := ranlib +endif diff --git a/libbackend-elements/documentation/BUGS b/libbackend-elements/documentation/BUGS new file mode 100644 index 0000000..102bf7d --- /dev/null +++ b/libbackend-elements/documentation/BUGS @@ -0,0 +1 @@ +@@ Should properly depend on libboost. diff --git a/libbackend-elements/documentation/TODO b/libbackend-elements/documentation/TODO new file mode 100644 index 0000000..68f4d71 --- /dev/null +++ b/libbackend-elements/documentation/TODO @@ -0,0 +1 @@ +@@ examples diff --git a/libbackend-elements/documentation/default.css b/libbackend-elements/documentation/default.css new file mode 100644 index 0000000..7242a94 --- /dev/null +++ b/libbackend-elements/documentation/default.css @@ -0,0 +1,160 @@ +body { + font-family : sans-serif; + font-weight : normal; + + color : black; + background : white; + + max-width : 42em; + padding : 2em 2em 2em 3em; + margin : 0 auto; +} + +h1, h2, h3, h4, h5, h6 { + font-family : sans-serif; + font-weight : 500; +} + +h1 { font-size : 170%; } +h2 { font-size : 145%; } +h3 { font-size : 125%; } +h4 { font-size : 110%; } +h5 { font-size : 106%; } +h6 { font-size : 100%; } + + +p.indent { + margin-left : 1.5em; +} + + +/* table of content */ +ul.toc li { + padding : .4em 0em 0em 0em; +} + + + +/* list of links */ +ul.menu { + list-style-type : none; +} + +ul.menu li { + padding-top : 0.3em; + padding-bottom : 0.3em; +} + + + +/* @@ I should probably use child selector here */ +/* list with multiline list-elements */ +ul.multiline li { + padding-top : 0.4em; + padding-bottom : 0.4em; +} + +ol.multiline li { + padding-top : 0.4em; + padding-bottom : 0.4em; +} + +dl.multiline dd { + padding-top : 0.4em; + padding-bottom : 0.4em; +} + +/* code */ + +code { + font-size : 114%; + font-family : monospace; +} + + +/* C++ code snippet */ +pre.cxx { + + margin-top : 0em; + margin-bottom : 2em; + + margin-left : 1em; +} + + + +/* make code snippet */ +pre.make { + + margin-top : 0em; + margin-bottom : 2em; + + margin-left : 1em; +} + + + +/* terminal output */ +pre.term { + + margin-top : 0em; + margin-bottom : 2em; + + margin-left : 1em; +} + + +/* Images */ +div.center { + text-align: center; +} + +/* Navigation. */ +#navigation { + margin-top: 1em; + border-bottom: 1px dashed #000000; +} + +#content { + margin-top: 2.5em; +} + + +/* Document info. */ +#docinfo { + margin-top: 4em; + border-top: 1px dashed #000000; + font-size: 70%; +} + +/* distribution terms */ +div.terms { + font-size : 114%; + font-family : monospace; +} + + + +/* Footnote */ + +#footnote { + margin-top: 2em; +} + +#footnote hr { + margin-left: 0; + margin-bottom: 1.5em; + width: 8em; + border-top: 1px solid #000000; + border-right: none; + border-bottom: none; + border-left: none; + +} + +#footnote p { + font-size: .91em; + text-indent: -0.8em; + padding-left: 0.8em; +} + diff --git a/libbackend-elements/documentation/index.xhtml b/libbackend-elements/documentation/index.xhtml new file mode 100644 index 0000000..028cc40 --- /dev/null +++ b/libbackend-elements/documentation/index.xhtml @@ -0,0 +1,56 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> + +<!-- + +file : documentation/index.xhtml +author : Boris Kolpackov <boris@kolpackov.net> +copyright : Copyright (c) 2005-2010 Boris Kolpackov +license : GNU FDL v1.2; http://kolpackov.net/licenses/fdl-1.2.txt + +--> + +<head> + + <title>libbackend-elements/documentation</title> + + <meta name="author" content="Boris Kolpackov"/> + <meta name="copyright" content="© 2005-2010 Boris Kolpackov"/> + <meta name="keywords" content="c++,library,compiler,backend"/> + <meta name="description" content="libbackend-elements/documentation"/> + + <link rel="stylesheet" type="text/css" href="default.css"/> + +</head> + +<body> + +<div id="navigation"> +<p> +<a href=".."><code>libbackend-elements</code></a> <code>/</code> +<code>documentation</code> +</p> +</div> + +<div id="content"> +<p><i>libbackend-elements</i> contains a collection of +indentation buffers for automatic source code indentation. Indentation +buffers can be attached to any <code>std::ostream</code> instance. C++ +and OMG IDL are supported in this version.</p> +</div> + +<div id="docinfo"> +<p>Copyright © 2005-2010 <a title="Boris Kolpackov" +href="http://kolpackov.net">Boris Kolpackov</a>.</p> + +<div class="terms"> +Permission is granted to copy, distribute and/or modify this document under +the terms of the <a href="http://kolpackov.net/licenses/fdl-1.2.txt">GNU Free +Documentation License, version 1.2</a>; with no Invariant Sections, no +Front-Cover Texts and no Back-Cover Texts. +</div> +</div> + +</body> +</html> diff --git a/libbackend-elements/makefile b/libbackend-elements/makefile new file mode 100644 index 0000000..3929387 --- /dev/null +++ b/libbackend-elements/makefile @@ -0,0 +1,17 @@ +# file : makefile +# author : Boris Kolpackov <boris@kolpackov.net> +# copyright : Copyright (c) 2005-2010 Boris Kolpackov +# license : GNU GPL v2; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))build/bootstrap.make + +default := $(out_base)/ +test := $(out_base)/.test +clean := $(out_base)/.clean + +$(default): $(out_base)/backend-elements/ $(out_base)/tests/ +$(test): $(out_base)/tests/.test +$(clean): $(out_base)/backend-elements/.clean $(out_base)/tests/.clean + +$(call import,$(src_base)/backend-elements/makefile) +$(call import,$(src_base)/tests/makefile) diff --git a/libbackend-elements/tests/indentation/cxx/driver.cxx b/libbackend-elements/tests/indentation/cxx/driver.cxx new file mode 100644 index 0000000..adfc2fc --- /dev/null +++ b/libbackend-elements/tests/indentation/cxx/driver.cxx @@ -0,0 +1,105 @@ +// file : tests/indentation/cxx/driver.cxx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2006-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <iostream> + +#include <cult/types.hxx> + +#include <backend-elements/indentation/cxx.hxx> +#include <backend-elements/indentation/clip.hxx> + +using namespace Cult::Types; +using namespace BackendElements::Indentation; + +using std::cout; +using std::endl; + +Int +main () +{ + std::ostream& os (cout); + Clip<CXX, Char> clip (os); + + os << "if (true)" + << "{" + << "// Hello there" << endl + << "//" << endl + << "a ();" + << "}" + << "else" + << "{" + << "b ();" + << "}"; + + os << "if (false)" + << "{" + << "if (true)" + << "{" + << "// test" << endl + << "}" + << "else" + << "{" + << "// test" << endl + << "b ();" + << "}" + << "}"; + + os << "namespace a" + << "{" + << "void f ();" + << "}" + << "#if defined(__HP_aCC) && __HP_aCC <= 39999" << endl + << "#include <foo.h>" << endl + << "#endif" << endl + << endl + << "namespace b" + << "{" + << "void f ();" + << "}"; + + // Test do-while handling. + // + os << "do" << endl + << "f ();" + << "while (false);" + << endl; + + os << "do" + << "{" + << "f ();" + << "}" + << "while (false);" + << endl; + + os << "do" + << "{" + << "if (f ())" + << "{" + << "g ();" + << "}" + << "}" + << "while (false);" + << endl; + + os << "do" + << "{" + << "do" << endl + << "f ();" + << "while (false);" + << "}" + << "while (false);" + << endl; + + os << "do" + << "{" + << "do" + << "{" + << "f ();" + << "}" + << "while (false);" + << "}" + << "while (false);" + << endl; +} diff --git a/libbackend-elements/tests/indentation/cxx/makefile b/libbackend-elements/tests/indentation/cxx/makefile new file mode 100644 index 0000000..ff2e15d --- /dev/null +++ b/libbackend-elements/tests/indentation/cxx/makefile @@ -0,0 +1,57 @@ +# file : tests/indentation/cxx/makefile +# author : Boris Kolpackov <boris@kolpackov.net> +# copyright : Copyright (c) 2006-2010 Boris Kolpackov +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../build/bootstrap.make + +cxx_tun := driver.cxx +cxx_obj := $(addprefix $(out_base)/,$(cxx_tun:.cxx=.o)) +cxx_od := $(cxx_obj:.o=.o.d) + +#be.l := $(out_root)/backend-elements/backend-elements.l +be.l.cpp-options := $(out_root)/backend-elements/backend-elements.l.cpp-options + +driver := $(out_base)/driver +test := $(out_base)/.test +clean := $(out_base)/.clean + + +# Build. +# +$(driver): $(cxx_obj) #$(be.l) + +$(cxx_obj) $(cxx_od): $(be.l.cpp-options) + +$(call include-dep,$(cxx_od)) + + +# Convenience alias for default target. +# +$(out_base)/: $(driver) + + +# Test. +# +$(test): driver := $(driver) +$(test): $(driver) $(src_base)/output.cxx + $(driver) | diff -u $(src_base)/output.cxx - + + +# Clean. +# +$(clean): $(driver).o.clean \ + $(addsuffix .cxx.clean,$(cxx_obj)) \ + $(addsuffix .cxx.clean,$(cxx_od)) + + +# How to. +# +$(call include,$(bld_root)/cxx/o-e.make) +$(call include,$(bld_root)/cxx/cxx-o.make) +$(call include,$(bld_root)/cxx/cxx-d.make) + + +# Dependencies. +# +$(call import,$(src_root)/backend-elements/makefile) diff --git a/libbackend-elements/tests/indentation/cxx/output.cxx b/libbackend-elements/tests/indentation/cxx/output.cxx new file mode 100644 index 0000000..1a22bc7 --- /dev/null +++ b/libbackend-elements/tests/indentation/cxx/output.cxx @@ -0,0 +1,75 @@ +if (true) +{ + // Hello there + // + a (); +} +else +{ + b (); +} + +if (false) +{ + if (true) + { + // test + } + else + { + // test + b (); + } +} + +namespace a +{ + void f (); +} + +#if defined(__HP_aCC) && __HP_aCC <= 39999 +#include <foo.h> +#endif + +namespace b +{ + void f (); +} + +do + f (); +while (false); + +do +{ + f (); +} +while (false); + +do +{ + if (f ()) + { + g (); + } +} +while (false); + +do +{ + do + f (); + while (false); +} +while (false); + +do +{ + do + { + f (); + } + while (false); +} +while (false); + diff --git a/libbackend-elements/tests/indentation/makefile b/libbackend-elements/tests/indentation/makefile new file mode 100644 index 0000000..debbeec --- /dev/null +++ b/libbackend-elements/tests/indentation/makefile @@ -0,0 +1,18 @@ +# file : tests/indentation/makefile +# author : Boris Kolpackov <boris@kolpackov.net> +# copyright : Copyright (c) 2006-2010 Boris Kolpackov +# license : GNU GPL v2; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../build/bootstrap.make + +tests := cxx + +default := $(out_base)/ +test := $(out_base)/.test +clean := $(out_base)/.clean + +$(default): $(addprefix $(out_base)/,$(addsuffix /,$(tests))) +$(test): $(addprefix $(out_base)/,$(addsuffix /.test,$(tests))) +$(clean): $(addprefix $(out_base)/,$(addsuffix /.clean,$(tests))) + +$(foreach t,$(tests),$(call import,$(src_base)/$t/makefile)) diff --git a/libbackend-elements/tests/makefile b/libbackend-elements/tests/makefile new file mode 100644 index 0000000..2e14098 --- /dev/null +++ b/libbackend-elements/tests/makefile @@ -0,0 +1,18 @@ +# file : tests/makefile +# author : Boris Kolpackov <boris@kolpackov.net> +# copyright : Copyright (c) 2006-2010 Boris Kolpackov +# license : GNU GPL v2; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../build/bootstrap.make + +tests := indentation + +default := $(out_base)/ +test := $(out_base)/.test +clean := $(out_base)/.clean + +$(default): $(addprefix $(out_base)/,$(addsuffix /,$(tests))) +$(test): $(addprefix $(out_base)/,$(addsuffix /.test,$(tests))) +$(clean): $(addprefix $(out_base)/,$(addsuffix /.clean,$(tests))) + +$(foreach t,$(tests),$(call import,$(src_base)/$t/makefile)) diff --git a/libbackend-elements/version b/libbackend-elements/version new file mode 100644 index 0000000..f8a696c --- /dev/null +++ b/libbackend-elements/version @@ -0,0 +1 @@ +1.7.2 diff --git a/libcult/GPLv2 b/libcult/GPLv2 new file mode 100644 index 0000000..3912109 --- /dev/null +++ b/libcult/GPLv2 @@ -0,0 +1,340 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (C) <year> <name of author> + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + <signature of Ty Coon>, 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. diff --git a/libcult/INSTALL b/libcult/INSTALL new file mode 100644 index 0000000..72c7a29 --- /dev/null +++ b/libcult/INSTALL @@ -0,0 +1,21 @@ +Prerequisites + + build-time: + + - build >= 0.3.2 http://www.codesynthesis.com/projects/build/ + - g++ >= 3.4.3 http://gcc.gnu.org + + +Building libcult + + To build in the source directory simply say `make'. You can also + build in a separate directory, e.g., + + $ mkdir libcult-i686-pc-linux-gnu + $ cd libcult-i686-pc-linux-gnu + $ make -f ../libcult-x.y.z/makefile + + +Installing libcult + + Not supported in this version. diff --git a/libcult/LICENSE b/libcult/LICENSE new file mode 100644 index 0000000..3204be4 --- /dev/null +++ b/libcult/LICENSE @@ -0,0 +1,25 @@ +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License version 2 as +published by the Free Software Foundation. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +In addition, as a special exception, Boris Kolpackov gives permission +to combine this library with other incompatibly-licensed modules in a +single program and to distribute such a combination provided that there +is no use of the functionality implemented by this library, directly +or indirectly, by such modules. You must obey the GNU General Public +License version 2 in all respects for all of the code used other than +such modules. In particular, the resulting program must be licensed +under a license compatible with the GNU General Public License version +2. If you modify this copy of the library, you may extend this exception +to your version of the library, but you are not obligated to do so. If +you do not wish to do so, delete this exception statement from your +version. diff --git a/libcult/NEWS b/libcult/NEWS new file mode 100644 index 0000000..2924310 --- /dev/null +++ b/libcult/NEWS @@ -0,0 +1,126 @@ +Version 1.4.6 + + * Add support for deleting graph nodes. + +Version 1.4.5 + + * Add support for libcult bundling. + + * Suppress warning in exception inheritance. + +Version 1.4.4 + + * Add an exception to the licensing terms to allow combining with + incompatibly-licensed modules in a single program. See the LICENSE + file for details. + +Version 1.4.3 + + * Remove leading and trailing whitespaces from arguments in + CLI::FileArguments. + +Version 1.4.2 + + * Support for stripping leading and (some) trailing whitespaces + in the FileArguments class. + +Version 1.4.1 + + * The number of options in CLI was increased from 80 to 100. + + * Fixed a bug in import stubs. + + * Got rid of warnings reported by g++-4.3. + +Version 1.4.0 + + * New arguments scanners: BasicArguments and FileArguments. + + * Conversion to narrow format in StringTemplate. + +Version 1.3.0 + + * Upgraded to build-0.3.0. + +Version 1.2.3 + + * Compilation time and generated code size optimizations in CLI. + + * Set of typedefs in Containers::Iterator to be compatible with + std::iterator_traits. + +Version 1.2.2 + + * A bug in Cult::String has been fixed. + +Version 1.2.1 + + * The number of options in CLI was increased from 50 to 80. + + * A bug in Containers::Any has been fixed. + + +Version 1.2.0 + + * Containers::Graph now supports removal of edges. + + * Added missing member functions to container wrappers. + + +Version 1.1.0 + + * Generic, std::istream-based parser has been added to CLI parsers. + + * Containers::IteratorAdapter has been modified to use + std::iterator_traits for better portability. + + * Threading, networking and data representation subsystems were + made optional. + + +Version 1.0.6 + + * Upgraded to build-0.2.1. + + +Version 1.0.5 + + * Moved to the build 0.2 series. + + +Version 1.0.4 + + * Containers::Graph has been extended to support more arguments in + the new_node() and new_edge() functions. + + +Version 1.0.3 + + * MM::Counter has been re-implemented to use size_t instead of int + on i386 and x86_64. + + * Containers::Graph has been extended to support more arguments in + the new_node() function. + + * Fixed a bug in CLI::OptionsSpec that resulted in a wrong default + initialization of options. + + +Version 1.0.2 + + * New Containers::List wrapper for std::list. + + * CLI::OptionsParser now skips arguments instead of erasing them when + UnknownMode is set to skip. + + +Version 1.0.1 + + * WideString can now be initialized with NarrowString and NarrowChar const*. + + * Build system improvements. + + +Version 1.0.0 + + * First public release. diff --git a/libcult/README b/libcult/README new file mode 100644 index 0000000..2227831 --- /dev/null +++ b/libcult/README @@ -0,0 +1,15 @@ +libcult is a collection of c++ libraries that were designed to form +a cohesive union of clean, simple and readable c++ code that uses +the most powerful mechanisms available on the GNU development platform. + +See the NEWS file for the user-visible changes from the previous release. + +See the LICENSE file for distribution conditions. + +See the INSTALL file for prerequisites and installation instructions. + +See the documentation/index.xhtml file for documentation. + +The project page is at http://kolpackov.net/projects/c++/libcult/. + +Send bug reports or any other feedback to boris@kolpackov.net . diff --git a/libcult/build/bootstrap.make b/libcult/build/bootstrap.make new file mode 100644 index 0000000..fc9cd38 --- /dev/null +++ b/libcult/build/bootstrap.make @@ -0,0 +1,46 @@ +# file : build/bootstrap.make +# author : Boris Kolpackov <boris@kolpackov.net> +# copyright : Copyright (c) 2005-2010 Boris Kolpackov +# license : GNU GPL v2; see accompanying LICENSE file + +project_name := libcult + +# First try to include the bundled bootstrap.make if it exist. If that +# fails, let make search for the external bootstrap.make. +# +build := build-0.3 + +-include $(dir $(lastword $(MAKEFILE_LIST)))../../$(build)/bootstrap.make + +ifeq ($(patsubst %build/bootstrap.make,,$(lastword $(MAKEFILE_LIST))),) +include $(build)/bootstrap.make +endif + +# Aliases +# +.PHONY: $(out_base)/ \ + $(out_base)/.test \ + $(out_base)/.clean + +ifdef %interactive% + +.PHONY: test clean + +test: $(out_base)/.test +clean: $(out_base)/.clean + +ifneq ($(filter $(.DEFAULT_GOAL),test clean),) +.DEFAULT_GOAL := +endif + +endif + +# Don't include dependency info for certain targets. +# +define include-dep +$(call -include,$1) +endef + +ifneq ($(filter $(MAKECMDGOALS),clean cleandoc disfigure),) +include-dep = +endif diff --git a/libcult/build/configuration-dynamic.make b/libcult/build/configuration-dynamic.make new file mode 100644 index 0000000..e027b0b --- /dev/null +++ b/libcult/build/configuration-dynamic.make @@ -0,0 +1,3 @@ +cult_dr := n +cult_threads := n +cult_network := n diff --git a/libcult/build/configuration-rules.make b/libcult/build/configuration-rules.make new file mode 100644 index 0000000..e6df883 --- /dev/null +++ b/libcult/build/configuration-rules.make @@ -0,0 +1,18 @@ +# file : build/configuration-rules.make +# author : Boris Kolpackov <boris@kolpackov.net> +# copyright : Copyright (c) 2006-2010 Boris Kolpackov +# license : GNU GPL v2; see accompanying LICENSE file + +$(dcf_root)/configuration-dynamic.make: | $(dcf_root)/. + $(call message,,$(scf_root)/configure $@) + +ifndef %foreign% + +disfigure:: + $(call message,rm $$1,rm -f $$1,$(dcf_root)/configuration-dynamic.make) + +endif + +ifeq ($(.DEFAULT_GOAL),$(dcf_root)/configuration-dynamic.make) +.DEFAULT_GOAL := +endif diff --git a/libcult/build/configuration.make b/libcult/build/configuration.make new file mode 100644 index 0000000..b8724c8 --- /dev/null +++ b/libcult/build/configuration.make @@ -0,0 +1,28 @@ +# file : build/configuration.make +# author : Boris Kolpackov <boris@kolpackov.net> +# copyright : Copyright (c) 2006-2010 Boris Kolpackov +# license : GNU GPL v2; see accompanying LICENSE file + +$(call include-once,$(scf_root)/configuration-rules.make,$(dcf_root)) + + +# Dynamic configuration. +# +cult_dr := +cult_threads := +cult_network := + + +$(call -include,$(dcf_root)/configuration-dynamic.make) + +ifdef cult_dr + +$(out_root)/%: cult_threads := $(cult_threads) +$(out_root)/%: cult_network := $(cult_network) +$(out_root)/%: cult_dr := $(cult_dr) + +else + +.NOTPARALLEL: + +endif diff --git a/libcult/build/configure b/libcult/build/configure new file mode 100755 index 0000000..4473653 --- /dev/null +++ b/libcult/build/configure @@ -0,0 +1,47 @@ +#! /usr/bin/env bash + +# file : build/configure +# author : Boris Kolpackov <boris@kolpackov.net> +# copyright : Copyright (c) 2006-2010 Boris Kolpackov +# license : GNU GPL v2; see accompanying LICENSE file + +# $1 out file +# +# bld_root - build root +# project_name - project name +# + +source $bld_root/dialog.bash + + +$echo +$echo +$echo "configuring '$project_name'" +$echo +$echo + + +$echo +$echo "Would you like to build a multi-threaded version of '$project_name'?" +$echo + +threads=`read_y_n y` + + +$echo +$echo "Would you like to build the network subsystem of '$project_name'?" +$echo + +network=`read_y_n y` + + +$echo +$echo "Would you like to build the data representation subsystem of '$project_name'?" +$echo + +dr=`read_y_n y` + + +echo "cult_dr := $dr" >$1 +echo "cult_threads := $threads" >>$1 +echo "cult_network := $network" >>$1 diff --git a/libcult/build/cxx/configuration-dynamic.make b/libcult/build/cxx/configuration-dynamic.make new file mode 100644 index 0000000..568ab40 --- /dev/null +++ b/libcult/build/cxx/configuration-dynamic.make @@ -0,0 +1,14 @@ +cxx_id := gnu +cxx_optimize := n +cxx_debug := n +cxx_rpath := n +cxx_pp_extra_options := $(CPPFLAGS) +cxx_extra_options := $(CXXFLAGS) +cxx_ld_extra_options := $(LDFLAGS) +cxx_extra_libs := $(LIBS) + +r := $(shell echo $(LDFLAGS) | sed -e 's/-L *\([^ ]*\)/-L\1/g') +r := $(patsubst -L%,%,$(filter -L%,$(r))) +r := $(shell echo $(r) | sed -e 's/ /:/g') + +cxx_extra_lib_paths := $(r) diff --git a/libcult/build/cxx/gnu/configuration-dynamic.make b/libcult/build/cxx/gnu/configuration-dynamic.make new file mode 100644 index 0000000..f3fe64d --- /dev/null +++ b/libcult/build/cxx/gnu/configuration-dynamic.make @@ -0,0 +1,8 @@ +ifneq ($(CXX),) +cxx_gnu := $(CXX) +else +cxx_gnu := g++ +endif + +cxx_gnu_libraries := +cxx_gnu_optimization_options := diff --git a/libcult/build/export/libcult/stub.make b/libcult/build/export/libcult/stub.make new file mode 100644 index 0000000..354b083 --- /dev/null +++ b/libcult/build/export/libcult/stub.make @@ -0,0 +1,10 @@ +# file : build/export/libcult/stub.make +# author : Boris Kolpackov <boris@kolpackov.net> +# copyright : Copyright (c) 2005-2010 Boris Kolpackov +# license : GNU GPL v2; see accompanying LICENSE file + +$(call include-once,$(src_root)/cult/makefile,$(out_root)) + +$(call export,\ + l: $(out_root)/cult/cult.l,\ + cpp-options: $(out_root)/cult/cult.l.cpp-options) diff --git a/libcult/build/import/libcult/LICENSE b/libcult/build/import/libcult/LICENSE new file mode 120000 index 0000000..5853aae --- /dev/null +++ b/libcult/build/import/libcult/LICENSE @@ -0,0 +1 @@ +../../../LICENSE
\ No newline at end of file diff --git a/libcult/build/import/libcult/configuration-rules.make b/libcult/build/import/libcult/configuration-rules.make new file mode 100644 index 0000000..5d8c939 --- /dev/null +++ b/libcult/build/import/libcult/configuration-rules.make @@ -0,0 +1,15 @@ +# file : build/import/libcult/configuration-rules.make +# author : Boris Kolpackov <boris@kolpackov.net> +# copyright : Copyright (c) 2005-2010 Boris Kolpackov +# license : GNU GPL v2; see accompanying LICENSE file + +$(dcf_root)/import/libcult/configuration-dynamic.make: | $(dcf_root)/import/libcult/. + $(call message,,$(scf_root)/import/libcult/configure $@) + +ifndef %foreign% + +disfigure:: + $(call message,rm $(dcf_root)/import/libcult/configuration-dynamic.make,\ +rm -f $(dcf_root)/import/libcult/configuration-dynamic.make) + +endif diff --git a/libcult/build/import/libcult/configure b/libcult/build/import/libcult/configure new file mode 100755 index 0000000..0eb142f --- /dev/null +++ b/libcult/build/import/libcult/configure @@ -0,0 +1,55 @@ +#! /usr/bin/env bash + +# file : build/import/libcult/configure +# author : Boris Kolpackov <boris@kolpackov.net> +# copyright : Copyright (c) 2005-2010 Boris Kolpackov +# license : GNU GPL v2; see accompanying LICENSE file + + +# $1 - out file +# +# bld_root - build root +# project_name - project name +# + +source $bld_root/dialog.bash + + +$echo +$echo "Configuring external dependency on 'libcult' for '$project_name'." +$echo + +$echo +$echo "Would you like to configure dependency on the installed " +$echo "version of 'libcult' as opposed to the development build?" +$echo + +installed=`read_y_n y` + +path= + +if [ "$installed" = "n" ]; then + +$echo +$echo "Please enter the src_root for 'libcult'." +$echo + +src_root=`read_path --directory --exist` + +$echo +$echo "Please enter the out_root for 'libcult'." +$echo + +out_root=`read_path --directory $src_root` + +fi + +echo libcult_installed := $installed >$1 + +if [ "$installed" = "n" ]; then + +echo src_root := $src_root >>$1 +echo scf_root := \$\(src_root\)/build >>$1 +echo out_root := $out_root >>$1 + +fi diff --git a/libcult/build/import/libcult/stub.make b/libcult/build/import/libcult/stub.make new file mode 100644 index 0000000..7469300 --- /dev/null +++ b/libcult/build/import/libcult/stub.make @@ -0,0 +1,30 @@ +# file : build/import/libcult/stub.make +# author : Boris Kolpackov <boris@kolpackov.net> +# copyright : Copyright (c) 2005-2010 Boris Kolpackov +# license : GNU GPL v2; see accompanying LICENSE file + +$(call include-once,$(scf_root)/import/libcult/configuration-rules.make,$(dcf_root)) + +libcult_installed := + +$(call -include,$(dcf_root)/import/libcult/configuration-dynamic.make) + +ifdef libcult_installed + +ifeq ($(libcult_installed),y) + +$(call export,l: -lcult,cpp-options: ) + +else + +# Include export stub. +# +$(call include,$(scf_root)/export/libcult/stub.make) + +endif + +else + +.NOTPARALLEL: + +endif diff --git a/libcult/build/ld/configuration-lib-dynamic.make b/libcult/build/ld/configuration-lib-dynamic.make new file mode 100644 index 0000000..74c8885 --- /dev/null +++ b/libcult/build/ld/configuration-lib-dynamic.make @@ -0,0 +1,13 @@ +ld_lib_type := archive + +ifneq ($(AR),) +ld_lib_ar := $(AR) +else +ld_lib_ar := ar +endif + +ifneq ($(RANLIB),) +ld_lib_ranlib := $(RANLIB) +else +ld_lib_ranlib := ranlib +endif diff --git a/libcult/cult/cli/arguments.cxx b/libcult/cult/cli/arguments.cxx new file mode 100644 index 0000000..28805d0 --- /dev/null +++ b/libcult/cult/cli/arguments.cxx @@ -0,0 +1,22 @@ +// file : cult/cli/arguments.cxx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <cult/cli/arguments.hxx> + +namespace Cult +{ + namespace CLI + { + Arguments:: + ~Arguments () + { + } + + BasicArguments:: + ~BasicArguments () + { + } + } +} diff --git a/libcult/cult/cli/arguments.hxx b/libcult/cult/cli/arguments.hxx new file mode 100644 index 0000000..5381172 --- /dev/null +++ b/libcult/cult/cli/arguments.hxx @@ -0,0 +1,85 @@ +// file : cult/cli/arguments.hxx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef CULT_CLI_ARGUMENTS_HXX +#define CULT_CLI_ARGUMENTS_HXX + +#include <cult/types.hxx> + +#include <cult/cli/exceptions.hxx> + +namespace Cult +{ + namespace CLI + { + class Arguments: public NonCopyable + { + public: + virtual + ~Arguments (); + + public: + class Bounds: public virtual Exception {}; + + virtual Size + size () const = 0; + + virtual Char const* + operator[] (Index) const = 0; + + virtual Void + erase (Index) = 0; + }; + + class BasicArguments: public Arguments + { + public: + virtual + ~BasicArguments (); + + BasicArguments (Int& argc, Char** argv); + + public: + virtual Size + size () const + { + return static_cast<Size> (argc_); + } + + virtual Char const* + operator[] (Index i) const + { + if (i >= size ()) + throw Bounds (); + + return argv_[i]; + } + + virtual Void + erase (Index i) + { + if (i >= size ()) + throw Bounds (); + + for (++i; i < size (); ++i) + { + argv_[i - 1] = argv_[i]; + } + + --argc_; + + argv_[argc_] = 0; + } + + private: + Int& argc_; + Char** argv_; + }; + } +} + +#include <cult/cli/arguments.ixx> + +#endif // CULT_CLI_ARGUMENTS_HXX diff --git a/libcult/cult/cli/arguments.ixx b/libcult/cult/cli/arguments.ixx new file mode 100644 index 0000000..b05295d --- /dev/null +++ b/libcult/cult/cli/arguments.ixx @@ -0,0 +1,21 @@ +// file : cult/cli/arguments.ixx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <cassert> + +namespace Cult +{ + namespace CLI + { + inline + BasicArguments:: + BasicArguments (Int& argc, Char** argv) + : argc_ (argc), argv_ (argv) + { + assert (argc > 0); + } + } +} + diff --git a/libcult/cult/cli/exceptions.hxx b/libcult/cult/cli/exceptions.hxx new file mode 100644 index 0000000..886e008 --- /dev/null +++ b/libcult/cult/cli/exceptions.hxx @@ -0,0 +1,136 @@ +// file : cult/cli/exceptions.hxx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef CULT_CLI_EXCEPTIONS_HXX +#define CULT_CLI_EXCEPTIONS_HXX + +#include <cult/types.hxx> + +#include <cult/eh/exception.hxx> + +namespace Cult +{ + namespace CLI + { + // + // + class Exception: public virtual EH::Exception + { + }; + + // Exception for FileArguments class. + // + class OptionFile: public virtual Exception + { + public: + ~OptionFile () throw () + { + } + + OptionFile (String const& description) + : description_ (description) + { + } + + OptionFile (String const& value, + String const& description) + : value_ (value), description_ (description) + { + } + + String const& + value () const + { + return value_; + } + + String const& + description () const + { + return description_; + } + + private: + String value_; + String description_; + }; + + // + // + class UnexpectedOption: public virtual Exception + { + public: + ~UnexpectedOption () throw () + { + } + + UnexpectedOption (String const& option) + : option_ (option) + { + } + + String const& + option () const + { + return option_; + } + + private: + String option_; + }; + + + // + // + class UnexpectedArgument: public virtual Exception + { + public: + ~UnexpectedArgument () throw () + { + } + + UnexpectedArgument (String const& argument) + : argument_ (argument) + { + } + + String const& + argument () const + { + return argument_; + } + + private: + String argument_; + }; + + + // + // + class OptionFormat: public virtual Exception + { + public: + ~OptionFormat () throw () + { + } + + OptionFormat (String const& option) + : option_ (option) + { + } + + String const& + option () const + { + return option_; + } + + private: + String option_; + }; + } +} + +#endif // CULT_CLI_EXCEPTIONS_HXX diff --git a/libcult/cult/cli/file-arguments.cxx b/libcult/cult/cli/file-arguments.cxx new file mode 100644 index 0000000..4f082dc --- /dev/null +++ b/libcult/cult/cli/file-arguments.cxx @@ -0,0 +1,118 @@ +// file : cult/cli/file-arguments.cxx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <cstring> // strcmp +#include <fstream> + +#include <cult/cli/file-arguments.hxx> + +namespace Cult +{ + namespace CLI + { + FileArguments:: + ~FileArguments () + { + } + + FileArguments:: + FileArguments (Int argc, Char const* const* argv, Char const* op) + { + using namespace std; + + if (argc == 0) + return; + + args_.push_back (argv[0]); + + Boolean skip (false); + + for (Int i (1); i < argc; ++i) + { + if (!skip) + { + if (strcmp (argv[i], "--") == 0) + { + skip = true; + } + else if (strcmp (argv[i], op) == 0) + { + ++i; + + if (i >= argc) + throw OptionFile ("missing file name"); + + ifstream is (argv[i]); + + if (!is.is_open ()) + throw OptionFile (argv[i], "unable to open in read mode"); + + while (!is.eof ()) + { + String line; + getline (is, line); + + if (is.fail () && !is.eof ()) + throw OptionFile (argv[i], "read failure"); + + Size size (line.size ()); + + // Trim the line from leading and trailing whitespaces. + // + if (size != 0) + { + const Char* f (line.data ()); + const Char* l (f + size); + + const Char* of (f); + while (f < l && (*f == ' ' || *f == '\t' || *f == '\r')) + ++f; + + --l; + + const Char* ol (l); + while (l > f && (*l == ' ' || *l == '\t' || *l == '\r')) + --l; + + if (f != of || l != ol) + line = f <= l ? String (f, l - f + 1) : String (); + } + + if (line.empty () || line[0] == '#') + continue; // Ignore empty lines, those that start with # + + Size pos (line.find (' ')); + + if (pos == String::npos) + args_.push_back (line); + else + { + Size size (line.size ()); + + args_.push_back (String (line, 0, pos)); + + // Skip leading whitespaces in the argument. + // + for (pos++; pos < size; pos++) + { + Char c (line[pos]); + + if (c != ' ' && c != '\t' && c != '\r') + break; + } + + args_.push_back (String (line, pos)); + } + } + + continue; + } + } + + args_.push_back (argv[i]); + } + } + } +} diff --git a/libcult/cult/cli/file-arguments.hxx b/libcult/cult/cli/file-arguments.hxx new file mode 100644 index 0000000..e14f53c --- /dev/null +++ b/libcult/cult/cli/file-arguments.hxx @@ -0,0 +1,59 @@ +// file : cult/cli/file-arguments.hxx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef CULT_CLI_FILE_ARGUMENTS_HXX +#define CULT_CLI_FILE_ARGUMENTS_HXX + +#include <cult/types.hxx> +#include <cult/containers/vector.hxx> + +#include <cult/cli/exceptions.hxx> +#include <cult/cli/arguments.hxx> + +namespace Cult +{ + namespace CLI + { + class FileArguments: public Arguments + { + public: + virtual + ~FileArguments (); + + FileArguments (Int argc, + Char const* const* argv, + Char const* file_option); + public: + virtual Size + size () const + { + return args_.size (); + } + + virtual Char const* + operator[] (Index i) const + { + if (i >= size ()) + throw Bounds (); + + return args_[i].c_str (); + } + + virtual Void + erase (Index i) + { + if (i >= size ()) + throw Bounds (); + + args_.erase (args_.begin () + i); + } + + private: + Containers::Vector<String> args_; + }; + } +} + +#endif // CULT_CLI_FILE_ARGUMENTS_HXX diff --git a/libcult/cult/cli/mapper.hxx.m4 b/libcult/cult/cli/mapper.hxx.m4 new file mode 100644 index 0000000..7ac6760 --- /dev/null +++ b/libcult/cult/cli/mapper.hxx.m4 @@ -0,0 +1,65 @@ +divert(-1) + +# file : cult/cli/mapper.hxx.m4 +# author : Boris Kolpackov <boris@kolpackov.net> +# copyright : Copyright (c) 2005-2010 Boris Kolpackov +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +define(`N', 100) + +define(`forloop', + `pushdef(`$1', `$2')_forloop(`$1', `$2', `$3', `$4')popdef(`$1')') + +define(`_forloop', + `$4`'ifelse($1, `$3', , + `define(`$1', incr($1))_forloop(`$1', `$2', `$3', `$4')')') + +define(`specialization',` +template +< +forloop(`i', 1, $1, ` char const* x`'i, typename Y`'i`'ifelse(i, $1, ,`,') +')dnl +> +struct Mapper +< +forloop(`i', 1, $1, ` x`'i, Y`'i, +')dnl +forloop(`i', $1, N, ` null, Null`'ifelse(i, N, ,`,') +')dnl +> +{ +`#ifdef __GNUC__' +forloop(`i', 1, $1, ` static Y`'i f (Tag<x`'i>*); +')dnl + + template <char const* x> + struct Selector + { + typedef typeof (Mapper::f ((Tag<x>*) (0))) Type; + }; +`#else' + template <char const* x> + struct Selector + { + typedef typename if_<same<x, x1>::r, Y1,ifelse($1, 1, ` Void', ` + typename Mapper + < +forloop(`i', 2, $1, ` x`'i, Y`'i`'ifelse(i, $1, ,`,') +') >::template Selector<x>::Type')>::Type Type; + }; +`#endif' +}; +') + +divert(0)dnl + +template +< +forloop(`i', 1, incr(N), + ` char const* x`'i`'ifelse(i, 1, ,`= null'), dnl +typename Y`'i`'ifelse(i, 1, ,`= Null')`'ifelse(i, incr(N), ,`,') +')dnl +> +struct Mapper; + +forloop(`n', 1, N, `specialization(n)') diff --git a/libcult/cult/cli/options-parser.cxx b/libcult/cult/cli/options-parser.cxx new file mode 100644 index 0000000..4a2b6b3 --- /dev/null +++ b/libcult/cult/cli/options-parser.cxx @@ -0,0 +1,40 @@ +// file : cult/cli/options-parser.cxx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <cult/cli/options-parser.hxx> + +namespace Cult +{ + namespace CLI + { + Trace::Stream OptionsParserBase::tout ("Cult::CLI::OptionsParser", 7); + + + // OptionParserBooleanBase + // + Boolean OptionParserBooleanBase:: + parse (Char const*, Scanner&) + { + return true; + } + + // OptionParserStringBase + // + String OptionParserStringBase:: + parse (Char const* o, Scanner& s) + { + Char const* v (s.next ()); + + if (v == Scanner::eos) + { + //@@ "expected string literal after --option"? + // + throw OptionFormat (o); + } + + return v; + } + } +} diff --git a/libcult/cult/cli/options-parser.hxx b/libcult/cult/cli/options-parser.hxx new file mode 100644 index 0000000..4068fa6 --- /dev/null +++ b/libcult/cult/cli/options-parser.hxx @@ -0,0 +1,570 @@ +// file : cult/cli/options-parser.hxx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef CULT_CLI_OPTIONS_PARSER_HXX +#define CULT_CLI_OPTIONS_PARSER_HXX + +#include <cult/types.hxx> + +#include <cult/containers/map.hxx> +#include <cult/containers/vector.hxx> + +#include <cult/trace/stream.hxx> + +#include <cult/cli/exceptions.hxx> +#include <cult/cli/scanner.hxx> +#include <cult/cli/options-spec.hxx> + +#include <sstream> + +//@! which types should be NonCopyable + +namespace Cult +{ + namespace CLI + { + struct UnknownMode + { + enum Value + { + skip, + stop, + fail + }; + }; + + template <typename T> + struct OptionParserBase + { + T + parse (Char const* o, Scanner& s); + }; + + template <typename Spec> + struct OptionParser: OptionParserBase<typename Spec::Type> + { + OptionParser (Spec const&) + { + } + }; + + template<Char const* o, typename T> + class OptionParser<OptionSpec<o, Containers::Vector<T> > > + { + public: + OptionParser (OptionSpec<o, Containers::Vector<T> > const&) + : impl_ (OptionSpec<o, T> ()) + { + } + + T + parse (Char const* k, Scanner& s) + { + return impl_.parse (k, s); + } + + private: + OptionParser<OptionSpec<o, T> > impl_; + }; + + struct OptionParserBooleanBase + { + Boolean + parse (Char const*, Scanner& s); + }; + + template<Char const* o> + struct OptionParser<OptionSpec<o, Boolean> >: OptionParserBooleanBase + { + OptionParser (OptionSpec<o, Boolean> const&) + { + } + }; + + struct OptionParserStringBase + { + String + parse (Char const*, Scanner& s); + }; + + template<Char const* o> + struct OptionParser<OptionSpec<o, String> >: OptionParserStringBase + { + OptionParser (OptionSpec<o, String> const&) + { + } + }; + + // + // + // + + class OptionsParserBase + { + protected: + struct GlueBase + { + // I am using Void* here to (significantly) reduce the length + // on the object file symbols. + // + virtual Void + operator() (Char const*, Scanner&, Void* options) = 0; + }; + + static Trace::Stream tout; + }; + + template <typename Spec> + class OptionsParser : OptionsParserBase + { + typedef + Containers::Map<String, Evptr<GlueBase> > + Map; + + template <typename> + struct Glue; + + template <Char const* k, typename T> + struct Glue<OptionSpec<k, T> > : GlueBase + { + Glue (OptionSpec<k, T> const& spec) + : parser_ (spec) + { + } + + virtual Void + operator() (Char const* o, Scanner& scan, Void* options) + { + typedef typename Spec::Options Options; + + Options& ops (*reinterpret_cast<Options*> (options)); + + ops.template value<k> () = parser_.parse (o, scan); + } + + private: + OptionParser<OptionSpec<k, T> > parser_; + }; + + //@@ It's bad that I also have to specialize Glue. Need to redesign + // this. + // + template <Char const* k, typename T> + struct Glue<OptionSpec<k, Containers::Vector<T> > > : GlueBase + { + Glue (OptionSpec<k, Containers::Vector<T> > const& spec) + : parser_ (spec) + { + } + + virtual Void + operator() (Char const* o, Scanner& scan, Void* options) + { + typedef typename Spec::Options Options; + + Options& ops (*reinterpret_cast<Options*> (options)); + + ops.template value<k> ().push_back (parser_.parse (o, scan)); + } + + private: + OptionParser<OptionSpec<k, Containers::Vector<T> > > parser_; + }; + + + // Option-specific specializations of some functions. + // + template <typename> + struct S_ + { + // This is a "specialization" for when type is Bits::Null. + // + static Void + add_parser (Spec const&, Map&) + { + } + + static Void + set_default (typename Spec::Options&, Spec const&) + { + } + }; + + template <Char const* k, typename T> + struct S_<OptionSpec<k, T> > + { + static Void + add_parser (Spec const& spec, Map& map) + { + if (k[0] != '\0') + { + OptionSpec<k, T> const& os (spec.template option<k> ()); + map[os.name ()] = new Glue<OptionSpec<k, T> > (os); + } + } + + static Void + set_default (typename Spec::Options& o, Spec const& s) + { + o.template value<k> () = s.template option<k> ().default_value (); + } + }; + + public: + + OptionsParser (Spec const& spec) + : spec_ (spec) + { + S_<typename Spec::o01>::add_parser (spec_, map_); + S_<typename Spec::o02>::add_parser (spec_, map_); + S_<typename Spec::o03>::add_parser (spec_, map_); + S_<typename Spec::o04>::add_parser (spec_, map_); + S_<typename Spec::o05>::add_parser (spec_, map_); + S_<typename Spec::o06>::add_parser (spec_, map_); + S_<typename Spec::o07>::add_parser (spec_, map_); + S_<typename Spec::o08>::add_parser (spec_, map_); + S_<typename Spec::o09>::add_parser (spec_, map_); + S_<typename Spec::o10>::add_parser (spec_, map_); + S_<typename Spec::o11>::add_parser (spec_, map_); + S_<typename Spec::o12>::add_parser (spec_, map_); + S_<typename Spec::o13>::add_parser (spec_, map_); + S_<typename Spec::o14>::add_parser (spec_, map_); + S_<typename Spec::o15>::add_parser (spec_, map_); + S_<typename Spec::o16>::add_parser (spec_, map_); + S_<typename Spec::o17>::add_parser (spec_, map_); + S_<typename Spec::o18>::add_parser (spec_, map_); + S_<typename Spec::o19>::add_parser (spec_, map_); + S_<typename Spec::o20>::add_parser (spec_, map_); + S_<typename Spec::o21>::add_parser (spec_, map_); + S_<typename Spec::o22>::add_parser (spec_, map_); + S_<typename Spec::o23>::add_parser (spec_, map_); + S_<typename Spec::o24>::add_parser (spec_, map_); + S_<typename Spec::o25>::add_parser (spec_, map_); + S_<typename Spec::o26>::add_parser (spec_, map_); + S_<typename Spec::o27>::add_parser (spec_, map_); + S_<typename Spec::o28>::add_parser (spec_, map_); + S_<typename Spec::o29>::add_parser (spec_, map_); + S_<typename Spec::o30>::add_parser (spec_, map_); + S_<typename Spec::o31>::add_parser (spec_, map_); + S_<typename Spec::o32>::add_parser (spec_, map_); + S_<typename Spec::o33>::add_parser (spec_, map_); + S_<typename Spec::o34>::add_parser (spec_, map_); + S_<typename Spec::o35>::add_parser (spec_, map_); + S_<typename Spec::o36>::add_parser (spec_, map_); + S_<typename Spec::o37>::add_parser (spec_, map_); + S_<typename Spec::o38>::add_parser (spec_, map_); + S_<typename Spec::o39>::add_parser (spec_, map_); + S_<typename Spec::o40>::add_parser (spec_, map_); + S_<typename Spec::o41>::add_parser (spec_, map_); + S_<typename Spec::o42>::add_parser (spec_, map_); + S_<typename Spec::o43>::add_parser (spec_, map_); + S_<typename Spec::o44>::add_parser (spec_, map_); + S_<typename Spec::o45>::add_parser (spec_, map_); + S_<typename Spec::o46>::add_parser (spec_, map_); + S_<typename Spec::o47>::add_parser (spec_, map_); + S_<typename Spec::o48>::add_parser (spec_, map_); + S_<typename Spec::o49>::add_parser (spec_, map_); + S_<typename Spec::o50>::add_parser (spec_, map_); + S_<typename Spec::o51>::add_parser (spec_, map_); + S_<typename Spec::o52>::add_parser (spec_, map_); + S_<typename Spec::o53>::add_parser (spec_, map_); + S_<typename Spec::o54>::add_parser (spec_, map_); + S_<typename Spec::o55>::add_parser (spec_, map_); + S_<typename Spec::o56>::add_parser (spec_, map_); + S_<typename Spec::o57>::add_parser (spec_, map_); + S_<typename Spec::o58>::add_parser (spec_, map_); + S_<typename Spec::o59>::add_parser (spec_, map_); + S_<typename Spec::o60>::add_parser (spec_, map_); + S_<typename Spec::o61>::add_parser (spec_, map_); + S_<typename Spec::o62>::add_parser (spec_, map_); + S_<typename Spec::o63>::add_parser (spec_, map_); + S_<typename Spec::o64>::add_parser (spec_, map_); + S_<typename Spec::o65>::add_parser (spec_, map_); + S_<typename Spec::o66>::add_parser (spec_, map_); + S_<typename Spec::o67>::add_parser (spec_, map_); + S_<typename Spec::o68>::add_parser (spec_, map_); + S_<typename Spec::o69>::add_parser (spec_, map_); + S_<typename Spec::o70>::add_parser (spec_, map_); + S_<typename Spec::o71>::add_parser (spec_, map_); + S_<typename Spec::o72>::add_parser (spec_, map_); + S_<typename Spec::o73>::add_parser (spec_, map_); + S_<typename Spec::o74>::add_parser (spec_, map_); + S_<typename Spec::o75>::add_parser (spec_, map_); + S_<typename Spec::o76>::add_parser (spec_, map_); + S_<typename Spec::o77>::add_parser (spec_, map_); + S_<typename Spec::o78>::add_parser (spec_, map_); + S_<typename Spec::o79>::add_parser (spec_, map_); + S_<typename Spec::o80>::add_parser (spec_, map_); + S_<typename Spec::o81>::add_parser (spec_, map_); + S_<typename Spec::o82>::add_parser (spec_, map_); + S_<typename Spec::o83>::add_parser (spec_, map_); + S_<typename Spec::o84>::add_parser (spec_, map_); + S_<typename Spec::o85>::add_parser (spec_, map_); + S_<typename Spec::o86>::add_parser (spec_, map_); + S_<typename Spec::o87>::add_parser (spec_, map_); + S_<typename Spec::o88>::add_parser (spec_, map_); + S_<typename Spec::o89>::add_parser (spec_, map_); + S_<typename Spec::o90>::add_parser (spec_, map_); + S_<typename Spec::o91>::add_parser (spec_, map_); + S_<typename Spec::o92>::add_parser (spec_, map_); + S_<typename Spec::o93>::add_parser (spec_, map_); + S_<typename Spec::o94>::add_parser (spec_, map_); + S_<typename Spec::o95>::add_parser (spec_, map_); + S_<typename Spec::o96>::add_parser (spec_, map_); + S_<typename Spec::o97>::add_parser (spec_, map_); + S_<typename Spec::o98>::add_parser (spec_, map_); + S_<typename Spec::o99>::add_parser (spec_, map_); + S_<typename Spec::o100>::add_parser (spec_, map_); + } + + + typename Spec::Options + parse (Scanner& scan, + UnknownMode::Value option_mode = UnknownMode::fail, + UnknownMode::Value argument_mode = UnknownMode::stop) + { + typename Spec::Options ops; + + S_<typename Spec::o01>::set_default (ops, spec_); + S_<typename Spec::o02>::set_default (ops, spec_); + S_<typename Spec::o03>::set_default (ops, spec_); + S_<typename Spec::o04>::set_default (ops, spec_); + S_<typename Spec::o05>::set_default (ops, spec_); + S_<typename Spec::o06>::set_default (ops, spec_); + S_<typename Spec::o07>::set_default (ops, spec_); + S_<typename Spec::o08>::set_default (ops, spec_); + S_<typename Spec::o09>::set_default (ops, spec_); + S_<typename Spec::o10>::set_default (ops, spec_); + S_<typename Spec::o11>::set_default (ops, spec_); + S_<typename Spec::o12>::set_default (ops, spec_); + S_<typename Spec::o13>::set_default (ops, spec_); + S_<typename Spec::o14>::set_default (ops, spec_); + S_<typename Spec::o15>::set_default (ops, spec_); + S_<typename Spec::o16>::set_default (ops, spec_); + S_<typename Spec::o17>::set_default (ops, spec_); + S_<typename Spec::o18>::set_default (ops, spec_); + S_<typename Spec::o19>::set_default (ops, spec_); + S_<typename Spec::o20>::set_default (ops, spec_); + S_<typename Spec::o21>::set_default (ops, spec_); + S_<typename Spec::o22>::set_default (ops, spec_); + S_<typename Spec::o23>::set_default (ops, spec_); + S_<typename Spec::o24>::set_default (ops, spec_); + S_<typename Spec::o25>::set_default (ops, spec_); + S_<typename Spec::o26>::set_default (ops, spec_); + S_<typename Spec::o27>::set_default (ops, spec_); + S_<typename Spec::o28>::set_default (ops, spec_); + S_<typename Spec::o29>::set_default (ops, spec_); + S_<typename Spec::o30>::set_default (ops, spec_); + S_<typename Spec::o31>::set_default (ops, spec_); + S_<typename Spec::o32>::set_default (ops, spec_); + S_<typename Spec::o33>::set_default (ops, spec_); + S_<typename Spec::o34>::set_default (ops, spec_); + S_<typename Spec::o35>::set_default (ops, spec_); + S_<typename Spec::o36>::set_default (ops, spec_); + S_<typename Spec::o37>::set_default (ops, spec_); + S_<typename Spec::o38>::set_default (ops, spec_); + S_<typename Spec::o39>::set_default (ops, spec_); + S_<typename Spec::o40>::set_default (ops, spec_); + S_<typename Spec::o41>::set_default (ops, spec_); + S_<typename Spec::o42>::set_default (ops, spec_); + S_<typename Spec::o43>::set_default (ops, spec_); + S_<typename Spec::o44>::set_default (ops, spec_); + S_<typename Spec::o45>::set_default (ops, spec_); + S_<typename Spec::o46>::set_default (ops, spec_); + S_<typename Spec::o47>::set_default (ops, spec_); + S_<typename Spec::o48>::set_default (ops, spec_); + S_<typename Spec::o49>::set_default (ops, spec_); + S_<typename Spec::o50>::set_default (ops, spec_); + S_<typename Spec::o51>::set_default (ops, spec_); + S_<typename Spec::o52>::set_default (ops, spec_); + S_<typename Spec::o53>::set_default (ops, spec_); + S_<typename Spec::o54>::set_default (ops, spec_); + S_<typename Spec::o55>::set_default (ops, spec_); + S_<typename Spec::o56>::set_default (ops, spec_); + S_<typename Spec::o57>::set_default (ops, spec_); + S_<typename Spec::o58>::set_default (ops, spec_); + S_<typename Spec::o59>::set_default (ops, spec_); + S_<typename Spec::o60>::set_default (ops, spec_); + S_<typename Spec::o61>::set_default (ops, spec_); + S_<typename Spec::o62>::set_default (ops, spec_); + S_<typename Spec::o63>::set_default (ops, spec_); + S_<typename Spec::o64>::set_default (ops, spec_); + S_<typename Spec::o65>::set_default (ops, spec_); + S_<typename Spec::o66>::set_default (ops, spec_); + S_<typename Spec::o67>::set_default (ops, spec_); + S_<typename Spec::o68>::set_default (ops, spec_); + S_<typename Spec::o69>::set_default (ops, spec_); + S_<typename Spec::o70>::set_default (ops, spec_); + S_<typename Spec::o71>::set_default (ops, spec_); + S_<typename Spec::o72>::set_default (ops, spec_); + S_<typename Spec::o73>::set_default (ops, spec_); + S_<typename Spec::o74>::set_default (ops, spec_); + S_<typename Spec::o75>::set_default (ops, spec_); + S_<typename Spec::o76>::set_default (ops, spec_); + S_<typename Spec::o77>::set_default (ops, spec_); + S_<typename Spec::o78>::set_default (ops, spec_); + S_<typename Spec::o79>::set_default (ops, spec_); + S_<typename Spec::o80>::set_default (ops, spec_); + S_<typename Spec::o81>::set_default (ops, spec_); + S_<typename Spec::o82>::set_default (ops, spec_); + S_<typename Spec::o83>::set_default (ops, spec_); + S_<typename Spec::o84>::set_default (ops, spec_); + S_<typename Spec::o85>::set_default (ops, spec_); + S_<typename Spec::o86>::set_default (ops, spec_); + S_<typename Spec::o87>::set_default (ops, spec_); + S_<typename Spec::o88>::set_default (ops, spec_); + S_<typename Spec::o89>::set_default (ops, spec_); + S_<typename Spec::o90>::set_default (ops, spec_); + S_<typename Spec::o91>::set_default (ops, spec_); + S_<typename Spec::o92>::set_default (ops, spec_); + S_<typename Spec::o93>::set_default (ops, spec_); + S_<typename Spec::o94>::set_default (ops, spec_); + S_<typename Spec::o95>::set_default (ops, spec_); + S_<typename Spec::o96>::set_default (ops, spec_); + S_<typename Spec::o97>::set_default (ops, spec_); + S_<typename Spec::o98>::set_default (ops, spec_); + S_<typename Spec::o99>::set_default (ops, spec_); + S_<typename Spec::o100>::set_default (ops, spec_); + + for (Char const* s (scan.peek ()); s != Scanner::eos; s = scan.peek ()) + { + tout << "looking at \"" << s << "\""; + + //@@ Std:: + // + if (strcmp (s, "--") == 0) + { + // We don't want to remove '--' if our option mode is skip. + // + if (option_mode == UnknownMode::skip) + scan.skip (); + else + scan.next (); + + break; + } + + typename Map::ConstIterator it (map_.find (s)); + + if (it != map_.end ()) + { + tout << "found parser for \"" << s << "\""; + + s = scan.next (); + (*(it->second)) (s, scan, &ops); + } + else if (s[0] == '-') + { + // Unknown option. + // + switch (option_mode) + { + case UnknownMode::skip: + { + scan.skip (); + continue; + } + case UnknownMode::stop: + { + break; + } + case UnknownMode::fail: + { + throw UnexpectedOption (s); + } + } + + break; // stop case + } + else + { + // Something else. + // + switch (argument_mode) + { + case UnknownMode::skip: + { + scan.skip (); + continue; + } + case UnknownMode::stop: + { + break; + } + case UnknownMode::fail: + { + throw UnexpectedArgument (s); + } + } + + break; // stop case + } + } + + return ops; + } + + private: + Map map_; + Spec spec_; + }; + + // + // + // + + template <typename Spec> + typename Spec::Options + parse (Spec const& s, + Arguments& args, + UnknownMode::Value option_mode = UnknownMode::fail, + UnknownMode::Value argument_mode = UnknownMode::stop) + { + Scanner scan (args, Scanner::Action::erase); + OptionsParser<Spec> parser (s); + + return parser.parse (scan, option_mode, argument_mode); + } + + template <typename Options> + Options + parse (Arguments& args, + UnknownMode::Value option_mode = UnknownMode::fail, + UnknownMode::Value argument_mode = UnknownMode::stop) + { + OptionsSpec<Options> spec; + return parse (spec, args, option_mode, argument_mode); + } + + template <typename Spec> + typename Spec::Options + parse (Spec const& s, + Int& argc, + Char** argv, + UnknownMode::Value option_mode = UnknownMode::fail, + UnknownMode::Value argument_mode = UnknownMode::stop) + { + BasicArguments args (argc, argv); + return parse (s, args, option_mode, argument_mode); + } + + template <typename Options> + Options + parse (Int& argc, + Char** argv, + UnknownMode::Value option_mode = UnknownMode::fail, + UnknownMode::Value argument_mode = UnknownMode::stop) + { + OptionsSpec<Options> spec; + + return parse (spec, argc, argv, option_mode, argument_mode); + } + } +} + +#include <cult/cli/options-parser.ixx> +#include <cult/cli/options-parser.txx> + +#endif // CULT_CLI_OPTIONS_PARSER_HXX diff --git a/libcult/cult/cli/options-parser.ixx b/libcult/cult/cli/options-parser.ixx new file mode 100644 index 0000000..80427f2 --- /dev/null +++ b/libcult/cult/cli/options-parser.ixx @@ -0,0 +1,12 @@ +// file : cult/cli/options-parser.ixx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +namespace Cult +{ + namespace CLI + { + } +} + diff --git a/libcult/cult/cli/options-parser.txx b/libcult/cult/cli/options-parser.txx new file mode 100644 index 0000000..bd8172a --- /dev/null +++ b/libcult/cult/cli/options-parser.txx @@ -0,0 +1,34 @@ +// file : cult/cli/options-parser.txx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +namespace Cult +{ + namespace CLI + { + // OptionParserBase + // + template <typename T> + T OptionParserBase<T>:: + parse (Char const* o, Scanner& s) + { + Char const* v (s.next ()); + + //@@ "expected something after --option"? + // + if (v == Scanner::eos) + throw OptionFormat (o); + + T r; + std::istringstream is (v); + is >> r; + + if (is.fail () || !is.eof ()) + throw OptionFormat (o); + + return r; + } + } +} + diff --git a/libcult/cult/cli/options-spec.cxx b/libcult/cult/cli/options-spec.cxx new file mode 100644 index 0000000..9f1e43b --- /dev/null +++ b/libcult/cult/cli/options-spec.cxx @@ -0,0 +1,14 @@ +// file : cult/cli/options-spec.cxx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <cult/cli/options-spec.hxx> + +namespace Cult +{ + namespace CLI + { + } +} + diff --git a/libcult/cult/cli/options-spec.hxx b/libcult/cult/cli/options-spec.hxx new file mode 100644 index 0000000..aff4541 --- /dev/null +++ b/libcult/cult/cli/options-spec.hxx @@ -0,0 +1,723 @@ +// file : cult/cli/options-spec.hxx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef CULT_CLI_OPTIONS_SPEC_HXX +#define CULT_CLI_OPTIONS_SPEC_HXX + +#include <cult/types.hxx> + +#include <cult/cli/options.hxx> + +namespace Cult +{ + namespace CLI + { + template <Char const* k, typename T> + class OptionSpec + { + public: + static Char const* const key; + typedef T Type; + + public: + ~OptionSpec () + { + } + + OptionSpec () + : default_value_ (), + name_ ("--") + { + name_ += k; + } + + T const& + default_value () const + { + return default_value_; + } + + Void + default_value (T const& value) + { + default_value_ = value; + } + + //@@ bad name + // + Char const* + name () const + { + return name_.c_str (); + } + + private: + T default_value_; + String name_; + }; + + template <Char const* k, typename T> + struct OptionSpecType + { + typedef OptionSpec<k, T> Type; + }; + + template <> + struct OptionSpecType<Bits::null, Bits::Null> + { + typedef Bits::Null Type; + }; + + + template <Char const* k, typename T> + Char const* const OptionSpec<k, T>::key = k; + + template <typename> + class OptionsSpec; + + template <Char const* k01, typename T01, + Char const* k02, typename T02, + Char const* k03, typename T03, + Char const* k04, typename T04, + Char const* k05, typename T05, + Char const* k06, typename T06, + Char const* k07, typename T07, + Char const* k08, typename T08, + Char const* k09, typename T09, + Char const* k10, typename T10, + Char const* k11, typename T11, + Char const* k12, typename T12, + Char const* k13, typename T13, + Char const* k14, typename T14, + Char const* k15, typename T15, + Char const* k16, typename T16, + Char const* k17, typename T17, + Char const* k18, typename T18, + Char const* k19, typename T19, + Char const* k20, typename T20, + Char const* k21, typename T21, + Char const* k22, typename T22, + Char const* k23, typename T23, + Char const* k24, typename T24, + Char const* k25, typename T25, + Char const* k26, typename T26, + Char const* k27, typename T27, + Char const* k28, typename T28, + Char const* k29, typename T29, + Char const* k30, typename T30, + Char const* k31, typename T31, + Char const* k32, typename T32, + Char const* k33, typename T33, + Char const* k34, typename T34, + Char const* k35, typename T35, + Char const* k36, typename T36, + Char const* k37, typename T37, + Char const* k38, typename T38, + Char const* k39, typename T39, + Char const* k40, typename T40, + Char const* k41, typename T41, + Char const* k42, typename T42, + Char const* k43, typename T43, + Char const* k44, typename T44, + Char const* k45, typename T45, + Char const* k46, typename T46, + Char const* k47, typename T47, + Char const* k48, typename T48, + Char const* k49, typename T49, + Char const* k50, typename T50, + Char const* k51, typename T51, + Char const* k52, typename T52, + Char const* k53, typename T53, + Char const* k54, typename T54, + Char const* k55, typename T55, + Char const* k56, typename T56, + Char const* k57, typename T57, + Char const* k58, typename T58, + Char const* k59, typename T59, + Char const* k60, typename T60, + Char const* k61, typename T61, + Char const* k62, typename T62, + Char const* k63, typename T63, + Char const* k64, typename T64, + Char const* k65, typename T65, + Char const* k66, typename T66, + Char const* k67, typename T67, + Char const* k68, typename T68, + Char const* k69, typename T69, + Char const* k70, typename T70, + Char const* k71, typename T71, + Char const* k72, typename T72, + Char const* k73, typename T73, + Char const* k74, typename T74, + Char const* k75, typename T75, + Char const* k76, typename T76, + Char const* k77, typename T77, + Char const* k78, typename T78, + Char const* k79, typename T79, + Char const* k80, typename T80, + Char const* k81, typename T81, + Char const* k82, typename T82, + Char const* k83, typename T83, + Char const* k84, typename T84, + Char const* k85, typename T85, + Char const* k86, typename T86, + Char const* k87, typename T87, + Char const* k88, typename T88, + Char const* k89, typename T89, + Char const* k90, typename T90, + Char const* k91, typename T91, + Char const* k92, typename T92, + Char const* k93, typename T93, + Char const* k94, typename T94, + Char const* k95, typename T95, + Char const* k96, typename T96, + Char const* k97, typename T97, + Char const* k98, typename T98, + Char const* k99, typename T99, + Char const* k100, typename T100> + + class OptionsSpec<Options<k01, T01, + k02, T02, + k03, T03, + k04, T04, + k05, T05, + k06, T06, + k07, T07, + k08, T08, + k09, T09, + k10, T10, + k11, T11, + k12, T12, + k13, T13, + k14, T14, + k15, T15, + k16, T16, + k17, T17, + k18, T18, + k19, T19, + k20, T20, + k21, T21, + k22, T22, + k23, T23, + k24, T24, + k25, T25, + k26, T26, + k27, T27, + k28, T28, + k29, T29, + k30, T30, + k31, T31, + k32, T32, + k33, T33, + k34, T34, + k35, T35, + k36, T36, + k37, T37, + k38, T38, + k39, T39, + k40, T40, + k41, T41, + k42, T42, + k43, T43, + k44, T44, + k45, T45, + k46, T46, + k47, T47, + k48, T48, + k49, T49, + k50, T50, + k51, T51, + k52, T52, + k53, T53, + k54, T54, + k55, T55, + k56, T56, + k57, T57, + k58, T58, + k59, T59, + k60, T60, + k61, T61, + k62, T62, + k63, T63, + k64, T64, + k65, T65, + k66, T66, + k67, T67, + k68, T68, + k69, T69, + k70, T70, + k71, T71, + k72, T72, + k73, T73, + k74, T74, + k75, T75, + k76, T76, + k77, T77, + k78, T78, + k79, T79, + k80, T80, + k81, T81, + k82, T82, + k83, T83, + k84, T84, + k85, T85, + k86, T86, + k87, T87, + k88, T88, + k89, T89, + k90, T90, + k91, T91, + k92, T92, + k93, T93, + k94, T94, + k95, T95, + k96, T96, + k97, T97, + k98, T98, + k99, T99, + k100, T100> > + { + public: + typedef CLI::Options<k01, T01, + k02, T02, + k03, T03, + k04, T04, + k05, T05, + k06, T06, + k07, T07, + k08, T08, + k09, T09, + k10, T10, + k11, T11, + k12, T12, + k13, T13, + k14, T14, + k15, T15, + k16, T16, + k17, T17, + k18, T18, + k19, T19, + k20, T20, + k21, T21, + k22, T22, + k23, T23, + k24, T24, + k25, T25, + k26, T26, + k27, T27, + k28, T28, + k29, T29, + k30, T30, + k31, T31, + k32, T32, + k33, T33, + k34, T34, + k35, T35, + k36, T36, + k37, T37, + k38, T38, + k39, T39, + k40, T40, + k41, T41, + k42, T42, + k43, T43, + k44, T44, + k45, T45, + k46, T46, + k47, T47, + k48, T48, + k49, T49, + k50, T50, + k51, T51, + k52, T52, + k53, T53, + k54, T54, + k55, T55, + k56, T56, + k57, T57, + k58, T58, + k59, T59, + k60, T60, + k61, T61, + k62, T62, + k63, T63, + k64, T64, + k65, T65, + k66, T66, + k67, T67, + k68, T68, + k69, T69, + k70, T70, + k71, T71, + k72, T72, + k73, T73, + k74, T74, + k75, T75, + k76, T76, + k77, T77, + k78, T78, + k79, T79, + k80, T80, + k81, T81, + k82, T82, + k83, T83, + k84, T84, + k85, T85, + k86, T86, + k87, T87, + k88, T88, + k89, T89, + k90, T90, + k91, T91, + k92, T92, + k93, T93, + k94, T94, + k95, T95, + k96, T96, + k97, T97, + k98, T98, + k99, T99, + k100, T100> Options; + + typedef typename OptionSpecType<k01, T01>::Type o01; + typedef typename OptionSpecType<k02, T02>::Type o02; + typedef typename OptionSpecType<k03, T03>::Type o03; + typedef typename OptionSpecType<k04, T04>::Type o04; + typedef typename OptionSpecType<k05, T05>::Type o05; + typedef typename OptionSpecType<k06, T06>::Type o06; + typedef typename OptionSpecType<k07, T07>::Type o07; + typedef typename OptionSpecType<k08, T08>::Type o08; + typedef typename OptionSpecType<k09, T09>::Type o09; + typedef typename OptionSpecType<k10, T10>::Type o10; + typedef typename OptionSpecType<k11, T11>::Type o11; + typedef typename OptionSpecType<k12, T12>::Type o12; + typedef typename OptionSpecType<k13, T13>::Type o13; + typedef typename OptionSpecType<k14, T14>::Type o14; + typedef typename OptionSpecType<k15, T15>::Type o15; + typedef typename OptionSpecType<k16, T16>::Type o16; + typedef typename OptionSpecType<k17, T17>::Type o17; + typedef typename OptionSpecType<k18, T18>::Type o18; + typedef typename OptionSpecType<k19, T19>::Type o19; + typedef typename OptionSpecType<k20, T20>::Type o20; + typedef typename OptionSpecType<k21, T21>::Type o21; + typedef typename OptionSpecType<k22, T22>::Type o22; + typedef typename OptionSpecType<k23, T23>::Type o23; + typedef typename OptionSpecType<k24, T24>::Type o24; + typedef typename OptionSpecType<k25, T25>::Type o25; + typedef typename OptionSpecType<k26, T26>::Type o26; + typedef typename OptionSpecType<k27, T27>::Type o27; + typedef typename OptionSpecType<k28, T28>::Type o28; + typedef typename OptionSpecType<k29, T29>::Type o29; + typedef typename OptionSpecType<k30, T30>::Type o30; + typedef typename OptionSpecType<k31, T31>::Type o31; + typedef typename OptionSpecType<k32, T32>::Type o32; + typedef typename OptionSpecType<k33, T33>::Type o33; + typedef typename OptionSpecType<k34, T34>::Type o34; + typedef typename OptionSpecType<k35, T35>::Type o35; + typedef typename OptionSpecType<k36, T36>::Type o36; + typedef typename OptionSpecType<k37, T37>::Type o37; + typedef typename OptionSpecType<k38, T38>::Type o38; + typedef typename OptionSpecType<k39, T39>::Type o39; + typedef typename OptionSpecType<k40, T40>::Type o40; + typedef typename OptionSpecType<k41, T41>::Type o41; + typedef typename OptionSpecType<k42, T42>::Type o42; + typedef typename OptionSpecType<k43, T43>::Type o43; + typedef typename OptionSpecType<k44, T44>::Type o44; + typedef typename OptionSpecType<k45, T45>::Type o45; + typedef typename OptionSpecType<k46, T46>::Type o46; + typedef typename OptionSpecType<k47, T47>::Type o47; + typedef typename OptionSpecType<k48, T48>::Type o48; + typedef typename OptionSpecType<k49, T49>::Type o49; + typedef typename OptionSpecType<k50, T50>::Type o50; + typedef typename OptionSpecType<k51, T51>::Type o51; + typedef typename OptionSpecType<k52, T52>::Type o52; + typedef typename OptionSpecType<k53, T53>::Type o53; + typedef typename OptionSpecType<k54, T54>::Type o54; + typedef typename OptionSpecType<k55, T55>::Type o55; + typedef typename OptionSpecType<k56, T56>::Type o56; + typedef typename OptionSpecType<k57, T57>::Type o57; + typedef typename OptionSpecType<k58, T58>::Type o58; + typedef typename OptionSpecType<k59, T59>::Type o59; + typedef typename OptionSpecType<k60, T60>::Type o60; + typedef typename OptionSpecType<k61, T61>::Type o61; + typedef typename OptionSpecType<k62, T62>::Type o62; + typedef typename OptionSpecType<k63, T63>::Type o63; + typedef typename OptionSpecType<k64, T64>::Type o64; + typedef typename OptionSpecType<k65, T65>::Type o65; + typedef typename OptionSpecType<k66, T66>::Type o66; + typedef typename OptionSpecType<k67, T67>::Type o67; + typedef typename OptionSpecType<k68, T68>::Type o68; + typedef typename OptionSpecType<k69, T69>::Type o69; + typedef typename OptionSpecType<k70, T70>::Type o70; + typedef typename OptionSpecType<k71, T71>::Type o71; + typedef typename OptionSpecType<k72, T72>::Type o72; + typedef typename OptionSpecType<k73, T73>::Type o73; + typedef typename OptionSpecType<k74, T74>::Type o74; + typedef typename OptionSpecType<k75, T75>::Type o75; + typedef typename OptionSpecType<k76, T76>::Type o76; + typedef typename OptionSpecType<k77, T77>::Type o77; + typedef typename OptionSpecType<k78, T78>::Type o78; + typedef typename OptionSpecType<k79, T79>::Type o79; + typedef typename OptionSpecType<k80, T80>::Type o80; + typedef typename OptionSpecType<k81, T81>::Type o81; + typedef typename OptionSpecType<k82, T82>::Type o82; + typedef typename OptionSpecType<k83, T83>::Type o83; + typedef typename OptionSpecType<k84, T84>::Type o84; + typedef typename OptionSpecType<k85, T85>::Type o85; + typedef typename OptionSpecType<k86, T86>::Type o86; + typedef typename OptionSpecType<k87, T87>::Type o87; + typedef typename OptionSpecType<k88, T88>::Type o88; + typedef typename OptionSpecType<k89, T89>::Type o89; + typedef typename OptionSpecType<k90, T90>::Type o90; + typedef typename OptionSpecType<k91, T91>::Type o91; + typedef typename OptionSpecType<k92, T92>::Type o92; + typedef typename OptionSpecType<k93, T93>::Type o93; + typedef typename OptionSpecType<k94, T94>::Type o94; + typedef typename OptionSpecType<k95, T95>::Type o95; + typedef typename OptionSpecType<k96, T96>::Type o96; + typedef typename OptionSpecType<k97, T97>::Type o97; + typedef typename OptionSpecType<k98, T98>::Type o98; + typedef typename OptionSpecType<k99, T99>::Type o99; + typedef typename OptionSpecType<k100, T100>::Type o100; + + + private: + typedef Bits::Mapper<k01, o01, + k02, o02, + k03, o03, + k04, o04, + k05, o05, + k06, o06, + k07, o07, + k08, o08, + k09, o09, + k10, o10, + k11, o11, + k12, o12, + k13, o13, + k14, o14, + k15, o15, + k16, o16, + k17, o17, + k18, o18, + k19, o19, + k20, o20, + k21, o21, + k22, o22, + k23, o23, + k24, o24, + k25, o25, + k26, o26, + k27, o27, + k28, o28, + k29, o29, + k30, o30, + k31, o31, + k32, o32, + k33, o33, + k34, o34, + k35, o35, + k36, o36, + k37, o37, + k38, o38, + k39, o39, + k40, o40, + k41, o41, + k42, o42, + k43, o43, + k44, o44, + k45, o45, + k46, o46, + k47, o47, + k48, o48, + k49, o49, + k50, o50, + k51, o51, + k52, o52, + k53, o53, + k54, o54, + k55, o55, + k56, o56, + k57, o57, + k58, o58, + k59, o59, + k60, o60, + k61, o61, + k62, o62, + k63, o63, + k64, o64, + k65, o65, + k66, o66, + k67, o67, + k68, o68, + k69, o69, + k70, o70, + k71, o71, + k72, o72, + k73, o73, + k74, o74, + k75, o75, + k76, o76, + k77, o77, + k78, o78, + k79, o79, + k80, o80, + k81, o81, + k82, o82, + k83, o83, + k84, o84, + k85, o85, + k86, o86, + k87, o87, + k88, o88, + k89, o89, + k90, o90, + k91, o91, + k92, o92, + k93, o93, + k94, o94, + k95, o95, + k96, o96, + k97, o97, + k98, o98, + k99, o99, + k100, o100> Mapper; + + public: + template <Char const* k> + typename Mapper::template Selector<k>::Type& + option () + { + typedef + typename Mapper::template Selector<k>::Type + Type; + + return *reinterpret_cast<Type*> (option (k)); + } + + template <Char const* k> + typename Mapper::template Selector<k>::Type const& + option () const + { + typedef + typename Mapper::template Selector<k>::Type + Type; + + return *reinterpret_cast<Type const*> (option (k)); + } + + private: + Void* + option (Char const*) const; + + private: + o01 o01_; + o02 o02_; + o03 o03_; + o04 o04_; + o05 o05_; + o06 o06_; + o07 o07_; + o08 o08_; + o09 o09_; + o10 o10_; + o11 o11_; + o12 o12_; + o13 o13_; + o14 o14_; + o15 o15_; + o16 o16_; + o17 o17_; + o18 o18_; + o19 o19_; + o20 o20_; + o21 o21_; + o22 o22_; + o23 o23_; + o24 o24_; + o25 o25_; + o26 o26_; + o27 o27_; + o28 o28_; + o29 o29_; + o30 o30_; + o31 o31_; + o32 o32_; + o33 o33_; + o34 o34_; + o35 o35_; + o36 o36_; + o37 o37_; + o38 o38_; + o39 o39_; + o40 o40_; + o41 o41_; + o42 o42_; + o43 o43_; + o44 o44_; + o45 o45_; + o46 o46_; + o47 o47_; + o48 o48_; + o49 o49_; + o50 o50_; + o51 o51_; + o52 o52_; + o53 o53_; + o54 o54_; + o55 o55_; + o56 o56_; + o57 o57_; + o58 o58_; + o59 o59_; + o60 o60_; + o61 o61_; + o62 o62_; + o63 o63_; + o64 o64_; + o65 o65_; + o66 o66_; + o67 o67_; + o68 o68_; + o69 o69_; + o70 o70_; + o71 o71_; + o72 o72_; + o73 o73_; + o74 o74_; + o75 o75_; + o76 o76_; + o77 o77_; + o78 o78_; + o79 o79_; + o80 o80_; + o81 o81_; + o82 o82_; + o83 o83_; + o84 o84_; + o85 o85_; + o86 o86_; + o87 o87_; + o88 o88_; + o89 o89_; + o90 o90_; + o91 o91_; + o92 o92_; + o93 o93_; + o94 o94_; + o95 o95_; + o96 o96_; + o97 o97_; + o98 o98_; + o99 o99_; + o100 o100_; + }; + } +} + +#include <cult/cli/options-spec.ixx> +#include <cult/cli/options-spec.txx> + +#endif // CULT_CLI_OPTIONS_SPEC_HXX diff --git a/libcult/cult/cli/options-spec.ixx b/libcult/cult/cli/options-spec.ixx new file mode 100644 index 0000000..1c47da1 --- /dev/null +++ b/libcult/cult/cli/options-spec.ixx @@ -0,0 +1,12 @@ +// file : cult/cli/options-spec.ixx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +namespace Cult +{ + namespace CLI + { + } +} + diff --git a/libcult/cult/cli/options-spec.txx b/libcult/cult/cli/options-spec.txx new file mode 100644 index 0000000..f5d59a0 --- /dev/null +++ b/libcult/cult/cli/options-spec.txx @@ -0,0 +1,320 @@ +// file : cult/cli/options-spec.txx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +namespace Cult +{ + namespace CLI + { + template <Char const* k01, typename T01, + Char const* k02, typename T02, + Char const* k03, typename T03, + Char const* k04, typename T04, + Char const* k05, typename T05, + Char const* k06, typename T06, + Char const* k07, typename T07, + Char const* k08, typename T08, + Char const* k09, typename T09, + Char const* k10, typename T10, + Char const* k11, typename T11, + Char const* k12, typename T12, + Char const* k13, typename T13, + Char const* k14, typename T14, + Char const* k15, typename T15, + Char const* k16, typename T16, + Char const* k17, typename T17, + Char const* k18, typename T18, + Char const* k19, typename T19, + Char const* k20, typename T20, + Char const* k21, typename T21, + Char const* k22, typename T22, + Char const* k23, typename T23, + Char const* k24, typename T24, + Char const* k25, typename T25, + Char const* k26, typename T26, + Char const* k27, typename T27, + Char const* k28, typename T28, + Char const* k29, typename T29, + Char const* k30, typename T30, + Char const* k31, typename T31, + Char const* k32, typename T32, + Char const* k33, typename T33, + Char const* k34, typename T34, + Char const* k35, typename T35, + Char const* k36, typename T36, + Char const* k37, typename T37, + Char const* k38, typename T38, + Char const* k39, typename T39, + Char const* k40, typename T40, + Char const* k41, typename T41, + Char const* k42, typename T42, + Char const* k43, typename T43, + Char const* k44, typename T44, + Char const* k45, typename T45, + Char const* k46, typename T46, + Char const* k47, typename T47, + Char const* k48, typename T48, + Char const* k49, typename T49, + Char const* k50, typename T50, + Char const* k51, typename T51, + Char const* k52, typename T52, + Char const* k53, typename T53, + Char const* k54, typename T54, + Char const* k55, typename T55, + Char const* k56, typename T56, + Char const* k57, typename T57, + Char const* k58, typename T58, + Char const* k59, typename T59, + Char const* k60, typename T60, + Char const* k61, typename T61, + Char const* k62, typename T62, + Char const* k63, typename T63, + Char const* k64, typename T64, + Char const* k65, typename T65, + Char const* k66, typename T66, + Char const* k67, typename T67, + Char const* k68, typename T68, + Char const* k69, typename T69, + Char const* k70, typename T70, + Char const* k71, typename T71, + Char const* k72, typename T72, + Char const* k73, typename T73, + Char const* k74, typename T74, + Char const* k75, typename T75, + Char const* k76, typename T76, + Char const* k77, typename T77, + Char const* k78, typename T78, + Char const* k79, typename T79, + Char const* k80, typename T80, + Char const* k81, typename T81, + Char const* k82, typename T82, + Char const* k83, typename T83, + Char const* k84, typename T84, + Char const* k85, typename T85, + Char const* k86, typename T86, + Char const* k87, typename T87, + Char const* k88, typename T88, + Char const* k89, typename T89, + Char const* k90, typename T90, + Char const* k91, typename T91, + Char const* k92, typename T92, + Char const* k93, typename T93, + Char const* k94, typename T94, + Char const* k95, typename T95, + Char const* k96, typename T96, + Char const* k97, typename T97, + Char const* k98, typename T98, + Char const* k99, typename T99, + Char const* k100, typename T100> + Void* + OptionsSpec<Options<k01, T01, + k02, T02, + k03, T03, + k04, T04, + k05, T05, + k06, T06, + k07, T07, + k08, T08, + k09, T09, + k10, T10, + k11, T11, + k12, T12, + k13, T13, + k14, T14, + k15, T15, + k16, T16, + k17, T17, + k18, T18, + k19, T19, + k20, T20, + k21, T21, + k22, T22, + k23, T23, + k24, T24, + k25, T25, + k26, T26, + k27, T27, + k28, T28, + k29, T29, + k30, T30, + k31, T31, + k32, T32, + k33, T33, + k34, T34, + k35, T35, + k36, T36, + k37, T37, + k38, T38, + k39, T39, + k40, T40, + k41, T41, + k42, T42, + k43, T43, + k44, T44, + k45, T45, + k46, T46, + k47, T47, + k48, T48, + k49, T49, + k50, T50, + k51, T51, + k52, T52, + k53, T53, + k54, T54, + k55, T55, + k56, T56, + k57, T57, + k58, T58, + k59, T59, + k60, T60, + k61, T61, + k62, T62, + k63, T63, + k64, T64, + k65, T65, + k66, T66, + k67, T67, + k68, T68, + k69, T69, + k70, T70, + k71, T71, + k72, T72, + k73, T73, + k74, T74, + k75, T75, + k76, T76, + k77, T77, + k78, T78, + k79, T79, + k80, T80, + k81, T81, + k82, T82, + k83, T83, + k84, T84, + k85, T85, + k86, T86, + k87, T87, + k88, T88, + k89, T89, + k90, T90, + k91, T91, + k92, T92, + k93, T93, + k94, T94, + k95, T95, + k96, T96, + k97, T97, + k98, T98, + k99, T99, + k100, T100> >:: + option (Char const* k) const + { + Void* r (0); + + if (k == k01) r = (Void*) (&o01_); else + if (k == k02) r = (Void*) (&o02_); else + if (k == k03) r = (Void*) (&o03_); else + if (k == k04) r = (Void*) (&o04_); else + if (k == k05) r = (Void*) (&o05_); else + if (k == k06) r = (Void*) (&o06_); else + if (k == k07) r = (Void*) (&o07_); else + if (k == k08) r = (Void*) (&o08_); else + if (k == k09) r = (Void*) (&o09_); else + if (k == k10) r = (Void*) (&o10_); else + if (k == k11) r = (Void*) (&o11_); else + if (k == k12) r = (Void*) (&o12_); else + if (k == k13) r = (Void*) (&o13_); else + if (k == k14) r = (Void*) (&o14_); else + if (k == k15) r = (Void*) (&o15_); else + if (k == k16) r = (Void*) (&o16_); else + if (k == k17) r = (Void*) (&o17_); else + if (k == k18) r = (Void*) (&o18_); else + if (k == k19) r = (Void*) (&o19_); else + if (k == k20) r = (Void*) (&o20_); else + if (k == k21) r = (Void*) (&o21_); else + if (k == k22) r = (Void*) (&o22_); else + if (k == k23) r = (Void*) (&o23_); else + if (k == k24) r = (Void*) (&o24_); else + if (k == k25) r = (Void*) (&o25_); else + if (k == k26) r = (Void*) (&o26_); else + if (k == k27) r = (Void*) (&o27_); else + if (k == k28) r = (Void*) (&o28_); else + if (k == k29) r = (Void*) (&o29_); else + if (k == k30) r = (Void*) (&o30_); else + if (k == k31) r = (Void*) (&o31_); else + if (k == k32) r = (Void*) (&o32_); else + if (k == k33) r = (Void*) (&o33_); else + if (k == k34) r = (Void*) (&o34_); else + if (k == k35) r = (Void*) (&o35_); else + if (k == k36) r = (Void*) (&o36_); else + if (k == k37) r = (Void*) (&o37_); else + if (k == k38) r = (Void*) (&o38_); else + if (k == k39) r = (Void*) (&o39_); else + if (k == k40) r = (Void*) (&o40_); else + if (k == k41) r = (Void*) (&o41_); else + if (k == k42) r = (Void*) (&o42_); else + if (k == k43) r = (Void*) (&o43_); else + if (k == k44) r = (Void*) (&o44_); else + if (k == k45) r = (Void*) (&o45_); else + if (k == k46) r = (Void*) (&o46_); else + if (k == k47) r = (Void*) (&o47_); else + if (k == k48) r = (Void*) (&o48_); else + if (k == k49) r = (Void*) (&o49_); else + if (k == k50) r = (Void*) (&o50_); else + if (k == k51) r = (Void*) (&o51_); else + if (k == k52) r = (Void*) (&o52_); else + if (k == k53) r = (Void*) (&o53_); else + if (k == k54) r = (Void*) (&o54_); else + if (k == k55) r = (Void*) (&o55_); else + if (k == k56) r = (Void*) (&o56_); else + if (k == k57) r = (Void*) (&o57_); else + if (k == k58) r = (Void*) (&o58_); else + if (k == k59) r = (Void*) (&o59_); else + if (k == k60) r = (Void*) (&o60_); else + if (k == k61) r = (Void*) (&o61_); else + if (k == k62) r = (Void*) (&o62_); else + if (k == k63) r = (Void*) (&o63_); else + if (k == k64) r = (Void*) (&o64_); else + if (k == k65) r = (Void*) (&o65_); else + if (k == k66) r = (Void*) (&o66_); else + if (k == k67) r = (Void*) (&o67_); else + if (k == k68) r = (Void*) (&o68_); else + if (k == k69) r = (Void*) (&o69_); else + if (k == k70) r = (Void*) (&o70_); else + if (k == k71) r = (Void*) (&o71_); else + if (k == k72) r = (Void*) (&o72_); else + if (k == k73) r = (Void*) (&o73_); else + if (k == k74) r = (Void*) (&o74_); else + if (k == k75) r = (Void*) (&o75_); else + if (k == k76) r = (Void*) (&o76_); else + if (k == k77) r = (Void*) (&o77_); else + if (k == k78) r = (Void*) (&o78_); else + if (k == k79) r = (Void*) (&o79_); else + if (k == k80) r = (Void*) (&o80_); else + if (k == k81) r = (Void*) (&o81_); else + if (k == k82) r = (Void*) (&o82_); else + if (k == k83) r = (Void*) (&o83_); else + if (k == k84) r = (Void*) (&o84_); else + if (k == k85) r = (Void*) (&o85_); else + if (k == k86) r = (Void*) (&o86_); else + if (k == k87) r = (Void*) (&o87_); else + if (k == k88) r = (Void*) (&o88_); else + if (k == k89) r = (Void*) (&o89_); else + if (k == k90) r = (Void*) (&o90_); else + if (k == k91) r = (Void*) (&o91_); else + if (k == k92) r = (Void*) (&o92_); else + if (k == k93) r = (Void*) (&o93_); else + if (k == k94) r = (Void*) (&o94_); else + if (k == k95) r = (Void*) (&o95_); else + if (k == k96) r = (Void*) (&o96_); else + if (k == k97) r = (Void*) (&o97_); else + if (k == k98) r = (Void*) (&o98_); else + if (k == k99) r = (Void*) (&o99_); else + if (k == k100) r = (Void*) (&o100_); else + assert (false); + + return r; + } + } +} diff --git a/libcult/cult/cli/options.cxx b/libcult/cult/cli/options.cxx new file mode 100644 index 0000000..6b6e996 --- /dev/null +++ b/libcult/cult/cli/options.cxx @@ -0,0 +1,17 @@ +// file : cult/cli/options.cxx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <cult/cli/options.hxx> + +namespace Cult +{ + namespace CLI + { + namespace Bits + { + extern Char const null[] = ""; + } + } +} diff --git a/libcult/cult/cli/options.hxx b/libcult/cult/cli/options.hxx new file mode 100644 index 0000000..2a780e1 --- /dev/null +++ b/libcult/cult/cli/options.hxx @@ -0,0 +1,502 @@ +// file : cult/cli/options.hxx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef CULT_CLI_OPTIONS_HXX +#define CULT_CLI_OPTIONS_HXX + +#include <cult/types.hxx> + +#include <cassert> + +namespace Cult +{ + namespace CLI + { + namespace Bits + { + template <Boolean t, typename X, typename Y> + struct if_; + + template <typename X, typename Y> + struct if_<true, X, Y> + { + typedef X Type; + }; + + template <typename X, typename Y> + struct if_<false, X, Y> + { + typedef Y Type; + }; + + template <Char const* x, Char const* y> + struct same + { + static Boolean const r = false; + }; + + template <Char const* x> + struct same<x, x> + { + static Boolean const r = true; + }; + + template <Char const* x> + struct Tag + { + }; + + //@@ should end up in Cult::Meta + // + struct Null {}; + extern Char const null[]; + +#include <cult/cli/mapper.hxx> + + } + + template <Char const* k01, typename T01, + Char const* k02 = Bits::null, typename T02 = Bits::Null, + Char const* k03 = Bits::null, typename T03 = Bits::Null, + Char const* k04 = Bits::null, typename T04 = Bits::Null, + Char const* k05 = Bits::null, typename T05 = Bits::Null, + Char const* k06 = Bits::null, typename T06 = Bits::Null, + Char const* k07 = Bits::null, typename T07 = Bits::Null, + Char const* k08 = Bits::null, typename T08 = Bits::Null, + Char const* k09 = Bits::null, typename T09 = Bits::Null, + Char const* k10 = Bits::null, typename T10 = Bits::Null, + Char const* k11 = Bits::null, typename T11 = Bits::Null, + Char const* k12 = Bits::null, typename T12 = Bits::Null, + Char const* k13 = Bits::null, typename T13 = Bits::Null, + Char const* k14 = Bits::null, typename T14 = Bits::Null, + Char const* k15 = Bits::null, typename T15 = Bits::Null, + Char const* k16 = Bits::null, typename T16 = Bits::Null, + Char const* k17 = Bits::null, typename T17 = Bits::Null, + Char const* k18 = Bits::null, typename T18 = Bits::Null, + Char const* k19 = Bits::null, typename T19 = Bits::Null, + Char const* k20 = Bits::null, typename T20 = Bits::Null, + Char const* k21 = Bits::null, typename T21 = Bits::Null, + Char const* k22 = Bits::null, typename T22 = Bits::Null, + Char const* k23 = Bits::null, typename T23 = Bits::Null, + Char const* k24 = Bits::null, typename T24 = Bits::Null, + Char const* k25 = Bits::null, typename T25 = Bits::Null, + Char const* k26 = Bits::null, typename T26 = Bits::Null, + Char const* k27 = Bits::null, typename T27 = Bits::Null, + Char const* k28 = Bits::null, typename T28 = Bits::Null, + Char const* k29 = Bits::null, typename T29 = Bits::Null, + Char const* k30 = Bits::null, typename T30 = Bits::Null, + Char const* k31 = Bits::null, typename T31 = Bits::Null, + Char const* k32 = Bits::null, typename T32 = Bits::Null, + Char const* k33 = Bits::null, typename T33 = Bits::Null, + Char const* k34 = Bits::null, typename T34 = Bits::Null, + Char const* k35 = Bits::null, typename T35 = Bits::Null, + Char const* k36 = Bits::null, typename T36 = Bits::Null, + Char const* k37 = Bits::null, typename T37 = Bits::Null, + Char const* k38 = Bits::null, typename T38 = Bits::Null, + Char const* k39 = Bits::null, typename T39 = Bits::Null, + Char const* k40 = Bits::null, typename T40 = Bits::Null, + Char const* k41 = Bits::null, typename T41 = Bits::Null, + Char const* k42 = Bits::null, typename T42 = Bits::Null, + Char const* k43 = Bits::null, typename T43 = Bits::Null, + Char const* k44 = Bits::null, typename T44 = Bits::Null, + Char const* k45 = Bits::null, typename T45 = Bits::Null, + Char const* k46 = Bits::null, typename T46 = Bits::Null, + Char const* k47 = Bits::null, typename T47 = Bits::Null, + Char const* k48 = Bits::null, typename T48 = Bits::Null, + Char const* k49 = Bits::null, typename T49 = Bits::Null, + Char const* k50 = Bits::null, typename T50 = Bits::Null, + Char const* k51 = Bits::null, typename T51 = Bits::Null, + Char const* k52 = Bits::null, typename T52 = Bits::Null, + Char const* k53 = Bits::null, typename T53 = Bits::Null, + Char const* k54 = Bits::null, typename T54 = Bits::Null, + Char const* k55 = Bits::null, typename T55 = Bits::Null, + Char const* k56 = Bits::null, typename T56 = Bits::Null, + Char const* k57 = Bits::null, typename T57 = Bits::Null, + Char const* k58 = Bits::null, typename T58 = Bits::Null, + Char const* k59 = Bits::null, typename T59 = Bits::Null, + Char const* k60 = Bits::null, typename T60 = Bits::Null, + Char const* k61 = Bits::null, typename T61 = Bits::Null, + Char const* k62 = Bits::null, typename T62 = Bits::Null, + Char const* k63 = Bits::null, typename T63 = Bits::Null, + Char const* k64 = Bits::null, typename T64 = Bits::Null, + Char const* k65 = Bits::null, typename T65 = Bits::Null, + Char const* k66 = Bits::null, typename T66 = Bits::Null, + Char const* k67 = Bits::null, typename T67 = Bits::Null, + Char const* k68 = Bits::null, typename T68 = Bits::Null, + Char const* k69 = Bits::null, typename T69 = Bits::Null, + Char const* k70 = Bits::null, typename T70 = Bits::Null, + Char const* k71 = Bits::null, typename T71 = Bits::Null, + Char const* k72 = Bits::null, typename T72 = Bits::Null, + Char const* k73 = Bits::null, typename T73 = Bits::Null, + Char const* k74 = Bits::null, typename T74 = Bits::Null, + Char const* k75 = Bits::null, typename T75 = Bits::Null, + Char const* k76 = Bits::null, typename T76 = Bits::Null, + Char const* k77 = Bits::null, typename T77 = Bits::Null, + Char const* k78 = Bits::null, typename T78 = Bits::Null, + Char const* k79 = Bits::null, typename T79 = Bits::Null, + Char const* k80 = Bits::null, typename T80 = Bits::Null, + Char const* k81 = Bits::null, typename T81 = Bits::Null, + Char const* k82 = Bits::null, typename T82 = Bits::Null, + Char const* k83 = Bits::null, typename T83 = Bits::Null, + Char const* k84 = Bits::null, typename T84 = Bits::Null, + Char const* k85 = Bits::null, typename T85 = Bits::Null, + Char const* k86 = Bits::null, typename T86 = Bits::Null, + Char const* k87 = Bits::null, typename T87 = Bits::Null, + Char const* k88 = Bits::null, typename T88 = Bits::Null, + Char const* k89 = Bits::null, typename T89 = Bits::Null, + Char const* k90 = Bits::null, typename T90 = Bits::Null, + Char const* k91 = Bits::null, typename T91 = Bits::Null, + Char const* k92 = Bits::null, typename T92 = Bits::Null, + Char const* k93 = Bits::null, typename T93 = Bits::Null, + Char const* k94 = Bits::null, typename T94 = Bits::Null, + Char const* k95 = Bits::null, typename T95 = Bits::Null, + Char const* k96 = Bits::null, typename T96 = Bits::Null, + Char const* k97 = Bits::null, typename T97 = Bits::Null, + Char const* k98 = Bits::null, typename T98 = Bits::Null, + Char const* k99 = Bits::null, typename T99 = Bits::Null, + Char const* k100 = Bits::null, typename T100 = Bits::Null> + class Options + { + typedef Bits::Mapper<k01, T01, + k02, T02, + k03, T03, + k04, T04, + k05, T05, + k06, T06, + k07, T07, + k08, T08, + k09, T09, + k10, T10, + k11, T11, + k12, T12, + k13, T13, + k14, T14, + k15, T15, + k16, T16, + k17, T17, + k18, T18, + k19, T19, + k20, T20, + k21, T21, + k22, T22, + k23, T23, + k24, T24, + k25, T25, + k26, T26, + k27, T27, + k28, T28, + k29, T29, + k30, T30, + k31, T31, + k32, T32, + k33, T33, + k34, T34, + k35, T35, + k36, T36, + k37, T37, + k38, T38, + k39, T39, + k40, T40, + k41, T41, + k42, T42, + k43, T43, + k44, T44, + k45, T45, + k46, T46, + k47, T47, + k48, T48, + k49, T49, + k50, T50, + k51, T51, + k52, T52, + k53, T53, + k54, T54, + k55, T55, + k56, T56, + k57, T57, + k58, T58, + k59, T59, + k60, T60, + k61, T61, + k62, T62, + k63, T63, + k64, T64, + k65, T65, + k66, T66, + k67, T67, + k68, T68, + k69, T69, + k70, T70, + k71, T71, + k72, T72, + k73, T73, + k74, T74, + k75, T75, + k76, T76, + k77, T77, + k78, T78, + k79, T79, + k80, T80, + k81, T81, + k82, T82, + k83, T83, + k84, T84, + k85, T85, + k86, T86, + k87, T87, + k88, T88, + k89, T89, + k90, T90, + k91, T91, + k92, T92, + k93, T93, + k94, T94, + k95, T95, + k96, T96, + k97, T97, + k98, T98, + k99, T99, + k100, T100> Mapper; + + public: + Options () + : i01_ (), + i02_ (), + i03_ (), + i04_ (), + i05_ (), + i06_ (), + i07_ (), + i08_ (), + i09_ (), + i10_ (), + i11_ (), + i12_ (), + i13_ (), + i14_ (), + i15_ (), + i16_ (), + i17_ (), + i18_ (), + i19_ (), + i20_ (), + i21_ (), + i22_ (), + i23_ (), + i24_ (), + i25_ (), + i26_ (), + i27_ (), + i28_ (), + i29_ (), + i30_ (), + i31_ (), + i32_ (), + i33_ (), + i34_ (), + i35_ (), + i36_ (), + i37_ (), + i38_ (), + i39_ (), + i40_ (), + i41_ (), + i42_ (), + i43_ (), + i44_ (), + i45_ (), + i46_ (), + i47_ (), + i48_ (), + i49_ (), + i50_ (), + i51_ (), + i52_ (), + i53_ (), + i54_ (), + i55_ (), + i56_ (), + i57_ (), + i58_ (), + i59_ (), + i60_ (), + i61_ (), + i62_ (), + i63_ (), + i64_ (), + i65_ (), + i66_ (), + i67_ (), + i68_ (), + i69_ (), + i70_ (), + i71_ (), + i72_ (), + i73_ (), + i74_ (), + i75_ (), + i76_ (), + i77_ (), + i78_ (), + i79_ (), + i80_ (), + i81_ (), + i82_ (), + i83_ (), + i84_ (), + i85_ (), + i86_ (), + i87_ (), + i88_ (), + i89_ (), + i90_ (), + i91_ (), + i92_ (), + i93_ (), + i94_ (), + i95_ (), + i96_ (), + i97_ (), + i98_ (), + i99_ (), + i100_ () + { + } + + template <Char const* k> + typename Mapper::template Selector<k>::Type& + value () + { + typedef + typename Mapper::template Selector<k>::Type + Type; + + return *reinterpret_cast<Type*> (value (k)); + } + + template <Char const* k> + typename Mapper::template Selector<k>::Type const& + value () const + { + typedef + typename Mapper::template Selector<k>::Type + Type; + + return *reinterpret_cast<Type const*> (value (k)); + } + + private: + Void* + value (Char const*) const; + + private: + T01 i01_; + T02 i02_; + T03 i03_; + T04 i04_; + T05 i05_; + T06 i06_; + T07 i07_; + T08 i08_; + T09 i09_; + T10 i10_; + T11 i11_; + T12 i12_; + T13 i13_; + T14 i14_; + T15 i15_; + T16 i16_; + T17 i17_; + T18 i18_; + T19 i19_; + T20 i20_; + T21 i21_; + T22 i22_; + T23 i23_; + T24 i24_; + T25 i25_; + T26 i26_; + T27 i27_; + T28 i28_; + T29 i29_; + T30 i30_; + T31 i31_; + T32 i32_; + T33 i33_; + T34 i34_; + T35 i35_; + T36 i36_; + T37 i37_; + T38 i38_; + T39 i39_; + T40 i40_; + T41 i41_; + T42 i42_; + T43 i43_; + T44 i44_; + T45 i45_; + T46 i46_; + T47 i47_; + T48 i48_; + T49 i49_; + T50 i50_; + T51 i51_; + T52 i52_; + T53 i53_; + T54 i54_; + T55 i55_; + T56 i56_; + T57 i57_; + T58 i58_; + T59 i59_; + T60 i60_; + T61 i61_; + T62 i62_; + T63 i63_; + T64 i64_; + T65 i65_; + T66 i66_; + T67 i67_; + T68 i68_; + T69 i69_; + T70 i70_; + T71 i71_; + T72 i72_; + T73 i73_; + T74 i74_; + T75 i75_; + T76 i76_; + T77 i77_; + T78 i78_; + T79 i79_; + T80 i80_; + T81 i81_; + T82 i82_; + T83 i83_; + T84 i84_; + T85 i85_; + T86 i86_; + T87 i87_; + T88 i88_; + T89 i89_; + T90 i90_; + T91 i91_; + T92 i92_; + T93 i93_; + T94 i94_; + T95 i95_; + T96 i96_; + T97 i97_; + T98 i98_; + T99 i99_; + T100 i100_; + }; + } +} + +#include <cult/cli/options.ixx> +#include <cult/cli/options.txx> + +#endif // CULT_CLI_OPTIONS_HXX diff --git a/libcult/cult/cli/options.ixx b/libcult/cult/cli/options.ixx new file mode 100644 index 0000000..c25b833 --- /dev/null +++ b/libcult/cult/cli/options.ixx @@ -0,0 +1,12 @@ +// file : cult/cli/options.ixx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +namespace Cult +{ + namespace CLI + { + } +} + diff --git a/libcult/cult/cli/options.txx b/libcult/cult/cli/options.txx new file mode 100644 index 0000000..b26666d --- /dev/null +++ b/libcult/cult/cli/options.txx @@ -0,0 +1,320 @@ +// file : cult/cli/options.txx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +namespace Cult +{ + namespace CLI + { + template <Char const* k01, typename T01, + Char const* k02, typename T02, + Char const* k03, typename T03, + Char const* k04, typename T04, + Char const* k05, typename T05, + Char const* k06, typename T06, + Char const* k07, typename T07, + Char const* k08, typename T08, + Char const* k09, typename T09, + Char const* k10, typename T10, + Char const* k11, typename T11, + Char const* k12, typename T12, + Char const* k13, typename T13, + Char const* k14, typename T14, + Char const* k15, typename T15, + Char const* k16, typename T16, + Char const* k17, typename T17, + Char const* k18, typename T18, + Char const* k19, typename T19, + Char const* k20, typename T20, + Char const* k21, typename T21, + Char const* k22, typename T22, + Char const* k23, typename T23, + Char const* k24, typename T24, + Char const* k25, typename T25, + Char const* k26, typename T26, + Char const* k27, typename T27, + Char const* k28, typename T28, + Char const* k29, typename T29, + Char const* k30, typename T30, + Char const* k31, typename T31, + Char const* k32, typename T32, + Char const* k33, typename T33, + Char const* k34, typename T34, + Char const* k35, typename T35, + Char const* k36, typename T36, + Char const* k37, typename T37, + Char const* k38, typename T38, + Char const* k39, typename T39, + Char const* k40, typename T40, + Char const* k41, typename T41, + Char const* k42, typename T42, + Char const* k43, typename T43, + Char const* k44, typename T44, + Char const* k45, typename T45, + Char const* k46, typename T46, + Char const* k47, typename T47, + Char const* k48, typename T48, + Char const* k49, typename T49, + Char const* k50, typename T50, + Char const* k51, typename T51, + Char const* k52, typename T52, + Char const* k53, typename T53, + Char const* k54, typename T54, + Char const* k55, typename T55, + Char const* k56, typename T56, + Char const* k57, typename T57, + Char const* k58, typename T58, + Char const* k59, typename T59, + Char const* k60, typename T60, + Char const* k61, typename T61, + Char const* k62, typename T62, + Char const* k63, typename T63, + Char const* k64, typename T64, + Char const* k65, typename T65, + Char const* k66, typename T66, + Char const* k67, typename T67, + Char const* k68, typename T68, + Char const* k69, typename T69, + Char const* k70, typename T70, + Char const* k71, typename T71, + Char const* k72, typename T72, + Char const* k73, typename T73, + Char const* k74, typename T74, + Char const* k75, typename T75, + Char const* k76, typename T76, + Char const* k77, typename T77, + Char const* k78, typename T78, + Char const* k79, typename T79, + Char const* k80, typename T80, + Char const* k81, typename T81, + Char const* k82, typename T82, + Char const* k83, typename T83, + Char const* k84, typename T84, + Char const* k85, typename T85, + Char const* k86, typename T86, + Char const* k87, typename T87, + Char const* k88, typename T88, + Char const* k89, typename T89, + Char const* k90, typename T90, + Char const* k91, typename T91, + Char const* k92, typename T92, + Char const* k93, typename T93, + Char const* k94, typename T94, + Char const* k95, typename T95, + Char const* k96, typename T96, + Char const* k97, typename T97, + Char const* k98, typename T98, + Char const* k99, typename T99, + Char const* k100, typename T100> + Void* + Options<k01, T01, + k02, T02, + k03, T03, + k04, T04, + k05, T05, + k06, T06, + k07, T07, + k08, T08, + k09, T09, + k10, T10, + k11, T11, + k12, T12, + k13, T13, + k14, T14, + k15, T15, + k16, T16, + k17, T17, + k18, T18, + k19, T19, + k20, T20, + k21, T21, + k22, T22, + k23, T23, + k24, T24, + k25, T25, + k26, T26, + k27, T27, + k28, T28, + k29, T29, + k30, T30, + k31, T31, + k32, T32, + k33, T33, + k34, T34, + k35, T35, + k36, T36, + k37, T37, + k38, T38, + k39, T39, + k40, T40, + k41, T41, + k42, T42, + k43, T43, + k44, T44, + k45, T45, + k46, T46, + k47, T47, + k48, T48, + k49, T49, + k50, T50, + k51, T51, + k52, T52, + k53, T53, + k54, T54, + k55, T55, + k56, T56, + k57, T57, + k58, T58, + k59, T59, + k60, T60, + k61, T61, + k62, T62, + k63, T63, + k64, T64, + k65, T65, + k66, T66, + k67, T67, + k68, T68, + k69, T69, + k70, T70, + k71, T71, + k72, T72, + k73, T73, + k74, T74, + k75, T75, + k76, T76, + k77, T77, + k78, T78, + k79, T79, + k80, T80, + k81, T81, + k82, T82, + k83, T83, + k84, T84, + k85, T85, + k86, T86, + k87, T87, + k88, T88, + k89, T89, + k90, T90, + k91, T91, + k92, T92, + k93, T93, + k94, T94, + k95, T95, + k96, T96, + k97, T97, + k98, T98, + k99, T99, + k100, T100>:: + value (Char const* k) const + { + Void* r (0); + + if (k == k01) r = (Void*) (&i01_); else + if (k == k02) r = (Void*) (&i02_); else + if (k == k03) r = (Void*) (&i03_); else + if (k == k04) r = (Void*) (&i04_); else + if (k == k05) r = (Void*) (&i05_); else + if (k == k06) r = (Void*) (&i06_); else + if (k == k07) r = (Void*) (&i07_); else + if (k == k08) r = (Void*) (&i08_); else + if (k == k09) r = (Void*) (&i09_); else + if (k == k10) r = (Void*) (&i10_); else + if (k == k11) r = (Void*) (&i11_); else + if (k == k12) r = (Void*) (&i12_); else + if (k == k13) r = (Void*) (&i13_); else + if (k == k14) r = (Void*) (&i14_); else + if (k == k15) r = (Void*) (&i15_); else + if (k == k16) r = (Void*) (&i16_); else + if (k == k17) r = (Void*) (&i17_); else + if (k == k18) r = (Void*) (&i18_); else + if (k == k19) r = (Void*) (&i19_); else + if (k == k20) r = (Void*) (&i20_); else + if (k == k21) r = (Void*) (&i21_); else + if (k == k22) r = (Void*) (&i22_); else + if (k == k23) r = (Void*) (&i23_); else + if (k == k24) r = (Void*) (&i24_); else + if (k == k25) r = (Void*) (&i25_); else + if (k == k26) r = (Void*) (&i26_); else + if (k == k27) r = (Void*) (&i27_); else + if (k == k28) r = (Void*) (&i28_); else + if (k == k29) r = (Void*) (&i29_); else + if (k == k30) r = (Void*) (&i30_); else + if (k == k31) r = (Void*) (&i31_); else + if (k == k32) r = (Void*) (&i32_); else + if (k == k33) r = (Void*) (&i33_); else + if (k == k34) r = (Void*) (&i34_); else + if (k == k35) r = (Void*) (&i35_); else + if (k == k36) r = (Void*) (&i36_); else + if (k == k37) r = (Void*) (&i37_); else + if (k == k38) r = (Void*) (&i38_); else + if (k == k39) r = (Void*) (&i39_); else + if (k == k40) r = (Void*) (&i40_); else + if (k == k41) r = (Void*) (&i41_); else + if (k == k42) r = (Void*) (&i42_); else + if (k == k43) r = (Void*) (&i43_); else + if (k == k44) r = (Void*) (&i44_); else + if (k == k45) r = (Void*) (&i45_); else + if (k == k46) r = (Void*) (&i46_); else + if (k == k47) r = (Void*) (&i47_); else + if (k == k48) r = (Void*) (&i48_); else + if (k == k49) r = (Void*) (&i49_); else + if (k == k50) r = (Void*) (&i50_); else + if (k == k51) r = (Void*) (&i51_); else + if (k == k52) r = (Void*) (&i52_); else + if (k == k53) r = (Void*) (&i53_); else + if (k == k54) r = (Void*) (&i54_); else + if (k == k55) r = (Void*) (&i55_); else + if (k == k56) r = (Void*) (&i56_); else + if (k == k57) r = (Void*) (&i57_); else + if (k == k58) r = (Void*) (&i58_); else + if (k == k59) r = (Void*) (&i59_); else + if (k == k60) r = (Void*) (&i60_); else + if (k == k61) r = (Void*) (&i61_); else + if (k == k62) r = (Void*) (&i62_); else + if (k == k63) r = (Void*) (&i63_); else + if (k == k64) r = (Void*) (&i64_); else + if (k == k65) r = (Void*) (&i65_); else + if (k == k66) r = (Void*) (&i66_); else + if (k == k67) r = (Void*) (&i67_); else + if (k == k68) r = (Void*) (&i68_); else + if (k == k69) r = (Void*) (&i69_); else + if (k == k70) r = (Void*) (&i70_); else + if (k == k71) r = (Void*) (&i71_); else + if (k == k72) r = (Void*) (&i72_); else + if (k == k73) r = (Void*) (&i73_); else + if (k == k74) r = (Void*) (&i74_); else + if (k == k75) r = (Void*) (&i75_); else + if (k == k76) r = (Void*) (&i76_); else + if (k == k77) r = (Void*) (&i77_); else + if (k == k78) r = (Void*) (&i78_); else + if (k == k79) r = (Void*) (&i79_); else + if (k == k80) r = (Void*) (&i80_); else + if (k == k81) r = (Void*) (&i81_); else + if (k == k82) r = (Void*) (&i82_); else + if (k == k83) r = (Void*) (&i83_); else + if (k == k84) r = (Void*) (&i84_); else + if (k == k85) r = (Void*) (&i85_); else + if (k == k86) r = (Void*) (&i86_); else + if (k == k87) r = (Void*) (&i87_); else + if (k == k88) r = (Void*) (&i88_); else + if (k == k89) r = (Void*) (&i89_); else + if (k == k90) r = (Void*) (&i90_); else + if (k == k91) r = (Void*) (&i91_); else + if (k == k92) r = (Void*) (&i92_); else + if (k == k93) r = (Void*) (&i93_); else + if (k == k94) r = (Void*) (&i94_); else + if (k == k95) r = (Void*) (&i95_); else + if (k == k96) r = (Void*) (&i96_); else + if (k == k97) r = (Void*) (&i97_); else + if (k == k98) r = (Void*) (&i98_); else + if (k == k99) r = (Void*) (&i99_); else + if (k == k100) r = (Void*) (&i100_); else + assert (false); + + return r; + } + } +} diff --git a/libcult/cult/cli/scanner.cxx b/libcult/cult/cli/scanner.cxx new file mode 100644 index 0000000..af51bfa --- /dev/null +++ b/libcult/cult/cli/scanner.cxx @@ -0,0 +1,17 @@ +// file : cult/cli/scanner.cxx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <cult/cli/scanner.hxx> + +namespace Cult +{ + namespace CLI + { + Scanner::Action const Scanner::Action::keep (Scanner::Action::keep_); + Scanner::Action const Scanner::Action::erase (Scanner::Action::erase_); + + Char const* const Scanner::eos = 0; + } +} diff --git a/libcult/cult/cli/scanner.hxx b/libcult/cult/cli/scanner.hxx new file mode 100644 index 0000000..13fa804 --- /dev/null +++ b/libcult/cult/cli/scanner.hxx @@ -0,0 +1,132 @@ +// file : cult/cli/scanner.hxx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef CULT_CLI_SCANNER_HXX +#define CULT_CLI_SCANNER_HXX + +#include <cult/types.hxx> + +#include <cult/cli/exceptions.hxx> +#include <cult/cli/arguments.hxx> + +namespace Cult +{ + namespace CLI + { + class Scanner: public NonCopyable + { + public: + class Action + { + public: + static Action const keep, erase; + + friend Boolean + operator== (Action const& a, Action const& b) + { + return a.v_ == b.v_; + } + + friend Boolean + operator!= (Action const& a, Action const& b) + { + return a.v_ != b.v_; + } + + private: + enum Value { keep_, erase_ } v_; + + Action (Value v) + : v_ (v) + { + } + }; + + public: + Scanner (Arguments& args, Action a = Action::keep, Index start = 1) + : cargs_ (args), + args_ (a == Action::erase ? &args : 0), + next_ (start) + { + } + + Scanner (Arguments const& args, Index start = 1) + : cargs_ (args), args_ (0), next_ (start) + { + } + + public: + static Char const* const eos; + + class PastEOS: public virtual Exception {}; + + Char const* + next () + { + if (next_ > cargs_.size ()) + { + throw PastEOS (); + } + else if (next_ == cargs_.size ()) + { + ++next_; + return eos; + } + else + { + Char const* r (cargs_[next_]); + + if (args_ != 0) + { + hold_ = r; + args_->erase (next_); + return hold_.c_str (); + } + else + { + ++next_; + return r; + } + } + } + + Char const* + peek () + { + if (next_ > cargs_.size ()) + { + throw PastEOS (); + } + else if (next_ == cargs_.size ()) + { + return eos; + } + else + { + return cargs_[next_]; + } + } + + Void + skip () + { + if (next_ > cargs_.size ()) + throw PastEOS (); + else + ++next_; + } + + private: + Arguments const& cargs_; + Arguments* args_; + Index next_; + String hold_; + }; + } +} + +#include <cult/cli/scanner.ixx> + +#endif // CULT_CLI_SCANNER_HXX diff --git a/libcult/cult/cli/scanner.ixx b/libcult/cult/cli/scanner.ixx new file mode 100644 index 0000000..5e84451 --- /dev/null +++ b/libcult/cult/cli/scanner.ixx @@ -0,0 +1,12 @@ +// file : cult/cli/scanner.ixx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +namespace Cult +{ + namespace CLI + { + } +} + diff --git a/libcult/cult/containers/any.hxx b/libcult/cult/containers/any.hxx new file mode 100644 index 0000000..10f771f --- /dev/null +++ b/libcult/cult/containers/any.hxx @@ -0,0 +1,192 @@ +// file : cult/containers/any.hxx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef CULT_CONTAINERS_ANY_HXX +#define CULT_CONTAINERS_ANY_HXX + +#include <cult/types.hxx> + +#include <cult/rtti/type-id.hxx> + +namespace Cult +{ + namespace Containers + { + //@@ eager clonning: do I need it? + // + // + class Any + { + public: + struct Typing {}; + + public: + template <typename X> + Any (X const& x) + : holder_ (new HolderTemplate<X> (x)) + { + } + + Any (Any const& any) + : holder_ (any.holder_->clone ()) + { + } + + public: + template <typename X> + Any& + operator= (X const& x) + { + holder_ = Evptr<Holder> (new HolderTemplate<X> (x)); + return *this; + } + + Any& + operator= (Any const& any) + { + holder_ = any.holder_->clone (); + return *this; + } + + public: + /* + template <typename X> + operator X& () + { + return value<X> (); + } + + template <typename X> + operator X const& () const + { + return value<X> (); + } + */ + + public: + template <typename X> + X& + value () + { + //@@ too strict + // + if (holder_->type_id () == typeid (X)) + { + return dynamic_cast<HolderTemplate<X>*>(holder_.get ())->value (); + } + else + { + throw Typing (); + } + } + + template <typename X> + X const& + value () const + { + if (holder_->type_id () == typeid (X)) + { + return dynamic_cast<HolderTemplate<X>*>(holder_.get ())->value (); + } + else + { + throw Typing (); + } + } + + public: + RTTI::TypeId + type_id () const + { + return holder_->type_id (); + } + + public: + /* + template <typename x> + friend x + operator+ (any const& a, x const& b) + { + return a.value<x> () + b; + } + + template <typename x> + friend x + operator+ (x const& a, any const& b) + { + return a + b.value<x> (); + } + */ + + private: + class Holder + { + public: + virtual + ~Holder () + { + } + + Evptr<Holder> + clone () const + { + return clone_ (); + } + + virtual RTTI::TypeId + type_id () const = 0; + + protected: + virtual Evptr<Holder> + clone_ () const = 0; + }; + + template <typename X> + class HolderTemplate : public Holder + { + public: + HolderTemplate (X const& value) + : value_ (value) + { + } + + virtual RTTI::TypeId + type_id () const + { + return RTTI::TypeId (typeid (value_)); + } + + X const& + value () const + { + return value_; + } + + X& + value () + { + return value_; + } + + protected: + virtual Evptr<Holder> + clone_ () const + { + return new HolderTemplate<X> (value_); + } + + private: + X value_; + }; + + private: + Evptr<Holder> holder_; + }; + } +} + +#include <cult/containers/any.txx> + +#endif // CULT_CONTAINERS_ANY_HXX diff --git a/libcult/cult/containers/any.txx b/libcult/cult/containers/any.txx new file mode 100644 index 0000000..8e97345 --- /dev/null +++ b/libcult/cult/containers/any.txx @@ -0,0 +1,11 @@ +// file : cult/containers/any.txx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +namespace Cult +{ + namespace Containers + { + } +} diff --git a/libcult/cult/containers/deque.hxx b/libcult/cult/containers/deque.hxx new file mode 100644 index 0000000..ed17a0c --- /dev/null +++ b/libcult/cult/containers/deque.hxx @@ -0,0 +1,166 @@ +// file : cult/containers/deque.hxx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef CULT_CONTAINERS_DEQUE_HXX +#define CULT_CONTAINERS_DEQUE_HXX + +#include <cult/types.hxx> + +#include <cult/containers/iterator.hxx> + +#include <deque> + +namespace Cult +{ + namespace Containers + { + template <typename T> + class Deque: public std::deque<T> + { + typedef std::deque<T> Base; + + Base& + base () + { + return *this; + } + + Base const& + base () const + { + return *this; + } + + public: + typedef typename Base::value_type Value; + + + typedef typename Base::reference Reference; + typedef typename Base::const_reference ConstReference; + + + typedef typename Base::pointer Pointer; + typedef typename Base::const_pointer ConstPointer; + + + typedef + IteratorAdapter<typename Base::iterator> + Iterator; + + typedef + IteratorAdapter<typename Base::const_iterator> + ConstIterator; + + + typedef + IteratorAdapter<typename Base::reverse_iterator> + ReverseIterator; + + typedef + IteratorAdapter<typename Base::const_reverse_iterator> + ConstReverseIterator; + + + // Use Cult::Size and Cult::PtrDifference. + // + // typedef Base::size_type; + // typedef Base::difference_type; + + public: + explicit + Deque () + : Base () + { + } + + explicit + Deque (Size size, Value const& value = Value ()) + : Base (size, value) + { + } + + template <typename InputIterator> + Deque (InputIterator first, InputIterator last) + : Base (first, last) + { + } + + Deque (Deque<Value> const& other) + : Base (other) + { + } + + Deque<Value>& + operator= (Deque<Value> const& other) + { + base () = other; + return *this; + } + + public: + Iterator + begin () + { + return Iterator (base ().begin ()); + } + + Iterator + end () + { + return Iterator (base ().end ()); + } + + + ConstIterator + begin () const + { + return ConstIterator (base ().begin ()); + } + + ConstIterator + end () const + { + return ConstIterator (base ().end ()); + } + + // + // + + ReverseIterator + rbegin () + { + return ReverseIterator (base ().rbegin ()); + } + + ReverseIterator + rend () + { + return ReverseIterator (base ().rend ()); + } + + + ConstReverseIterator + rbegin () const + { + return ConstReverseIterator (base ().rbegin ()); + } + + ConstReverseIterator + rend () const + { + return ConstReverseIterator (base ().rend ()); + } + + public: + Void + swap (Deque<Value>& other) + { + base ().swap (other); + } + }; + } +} + +#endif // CULT_CONTAINERS_DEQUE_HXX diff --git a/libcult/cult/containers/graph.hxx b/libcult/cult/containers/graph.hxx new file mode 100644 index 0000000..d61cd53 --- /dev/null +++ b/libcult/cult/containers/graph.hxx @@ -0,0 +1,193 @@ +// file : cult/containers/graph.hxx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef CULT_CONTAINERS_GRAPH_HXX +#define CULT_CONTAINERS_GRAPH_HXX + +#include <cult/types.hxx> +#include <cult/eh/exception.hxx> +#include <cult/containers/map.hxx> + +namespace Cult +{ + namespace Containers + { + template <typename N, typename E> + class Graph + { + public: + typedef N Node; + typedef E Edge; + + struct NoEdge: virtual EH::Exception {}; + struct NoNode: virtual EH::Exception {}; + + public: + template <typename T> + T& + new_node (); + + template <typename T, typename A0> + T& + new_node (A0 const&); + + template <typename T, typename A0, typename A1> + T& + new_node (A0 const&, A1 const&); + + template <typename T, typename A0, typename A1, typename A2> + T& + new_node (A0 const&, A1 const&, A2 const&); + + template <typename T, typename A0, typename A1, typename A2, + typename A3> + T& + new_node (A0 const&, A1 const&, A2 const&, A3 const&); + + template <typename T, typename A0, typename A1, typename A2, + typename A3, typename A4> + T& + new_node (A0 const&, A1 const&, A2 const&, A3 const&, A4 const&); + + template <typename T, typename A0, typename A1, typename A2, + typename A3, typename A4, typename A5> + T& + new_node (A0 const&, A1 const&, A2 const&, A3 const&, A4 const&, + A5 const&); + + template <typename T, typename A0, typename A1, typename A2, + typename A3, typename A4, typename A5, typename A6> + T& + new_node (A0 const&, A1 const&, A2 const&, A3 const&, A4 const&, + A5 const&, A6 const&); + + template <typename T, typename A0, typename A1, typename A2, + typename A3, typename A4, typename A5, typename A6, + typename A7> + T& + new_node (A0 const&, A1 const&, A2 const&, A3 const&, A4 const&, + A5 const&, A6 const&, A7 const&); + + template <typename T, typename A0, typename A1, typename A2, + typename A3, typename A4, typename A5, typename A6, + typename A7, typename A8> + T& + new_node (A0 const&, A1 const&, A2 const&, A3 const&, A4 const&, + A5 const&, A6 const&, A7 const&, A8 const&); + + template <typename T, typename A0, typename A1, typename A2, + typename A3, typename A4, typename A5, typename A6, + typename A7, typename A8, typename A9> + T& + new_node (A0 const&, A1 const&, A2 const&, A3 const&, A4 const&, + A5 const&, A6 const&, A7 const&, A8 const&, A9 const&); + + public: + template <typename T, typename Left, typename Right> + T& + new_edge (Left&, Right&); + + template <typename T, typename Left, typename Right, + typename A0> + T& + new_edge (Left&, Right&, A0 const&); + + template <typename T, typename Left, typename Right, + typename A0, typename A1> + T& + new_edge (Left&, Right&, A0 const&, A1 const&); + + template <typename T, typename Left, typename Right, + typename A0, typename A1, typename A2> + T& + new_edge (Left&, Right&, A0 const&, A1 const&, A2 const&); + + template <typename T, typename Left, typename Right, + typename A0, typename A1, typename A2, typename A3> + T& + new_edge (Left&, Right&, A0 const&, A1 const&, A2 const&, A3 const&); + + template <typename T, typename Left, typename Right, + typename A0, typename A1, typename A2, typename A3, + typename A4> + T& + new_edge (Left&, Right&, A0 const&, A1 const&, A2 const&, A3 const&, + A4 const&); + + template <typename T, typename Left, typename Right, + typename A0, typename A1, typename A2, typename A3, + typename A4, typename A5> + T& + new_edge (Left&, Right&, A0 const&, A1 const&, A2 const&, A3 const&, + A4 const&, A5 const&); + + // Functions to reset edge's nodes. + // + public: + template <typename TE, typename TN> + Void + reset_left_node (TE& edge, TN& node) + { + edge.set_left_node (node); + } + + template <typename TE, typename TN> + Void + reset_right_node (TE& edge, TN& node) + { + edge.set_right_node (node); + } + + // Functions to add edges to a node. + // + public: + template <typename TN, typename TE> + Void + add_edge_left (TN& node, TE& edge) + { + node.add_edge_left (edge); + } + + template <typename TN, typename TE> + Void + add_edge_right (TN& node, TE& edge) + { + node.add_edge_right (edge); + } + + // Functions to delete edges and nodes. In order to delete a + // a node without leaving any dangling edges you need to make + // sure that each edge pointing to it is either deleted or reset + // to some other node. + // + public: + template <typename T, typename Left, typename Right> + Void + delete_edge (Left& left_node, Right& right_node, T& edge); + + Void + delete_node (Node& node) + { + if (nodes_.erase (&node) == 0) + throw NoNode (); + } + + protected: + typedef Shptr<Node> NodePtr; + typedef Shptr<Edge> EdgePtr; + + typedef Map<Node*, NodePtr> Nodes; + typedef Map<Edge*, EdgePtr> Edges; + + Nodes nodes_; + Edges edges_; + }; + } +} + + +#include <cult/containers/graph.txx> + +#endif // CULT_CONTAINERS_GRAPH_HXX diff --git a/libcult/cult/containers/graph.txx b/libcult/cult/containers/graph.txx new file mode 100644 index 0000000..a9c9979 --- /dev/null +++ b/libcult/cult/containers/graph.txx @@ -0,0 +1,313 @@ +// file : cult/containers/graph.txx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +namespace Cult +{ + namespace Containers + { + + // Nodes. + // + + template <typename N, typename E> + template <typename T> + T& Graph<N, E>:: + new_node () + { + Shptr<T> node (new T); + nodes_[node.get ()] = node; + + return *node; + } + + + template <typename N, typename E> + template <typename T, typename A0> + T& Graph<N, E>:: + new_node (A0 const& a0) + { + Shptr<T> node (new T (a0)); + nodes_[node.get ()] = node; + + return *node; + } + + + template <typename N, typename E> + template <typename T, typename A0, typename A1> + T& Graph<N, E>:: + new_node (A0 const& a0, A1 const& a1) + { + Shptr<T> node (new T (a0, a1)); + nodes_[node.get ()] = node; + + return *node; + } + + template <typename N, typename E> + template <typename T, typename A0, typename A1, typename A2> + T& Graph<N, E>:: + new_node (A0 const& a0, A1 const& a1, A2 const& a2) + { + Shptr<T> node (new T (a0, a1, a2)); + nodes_[node.get ()] = node; + + return *node; + } + + template <typename N, typename E> + template <typename T, typename A0, typename A1, typename A2, + typename A3> + T& Graph<N, E>:: + new_node (A0 const& a0, A1 const& a1, A2 const& a2, A3 const& a3) + { + Shptr<T> node (new T (a0, a1, a2, a3)); + nodes_[node.get ()] = node; + + return *node; + } + + template <typename N, typename E> + template <typename T, typename A0, typename A1, typename A2, + typename A3, typename A4> + T& Graph<N, E>:: + new_node (A0 const& a0, A1 const& a1, A2 const& a2, A3 const& a3, + A4 const& a4) + { + Shptr<T> node (new T (a0, a1, a2, a3, a4)); + nodes_[node.get ()] = node; + + return *node; + } + + template <typename N, typename E> + template <typename T, typename A0, typename A1, typename A2, + typename A3, typename A4, typename A5> + T& Graph<N, E>:: + new_node (A0 const& a0, A1 const& a1, A2 const& a2, A3 const& a3, + A4 const& a4, A5 const& a5) + { + Shptr<T> node (new T (a0, a1, a2, a3, a4, a5)); + nodes_[node.get ()] = node; + + return *node; + } + + template <typename N, typename E> + template <typename T, typename A0, typename A1, typename A2, + typename A3, typename A4, typename A5, typename A6> + T& Graph<N, E>:: + new_node (A0 const& a0, A1 const& a1, A2 const& a2, A3 const& a3, + A4 const& a4, A5 const& a5, A6 const& a6) + { + Shptr<T> node (new T (a0, a1, a2, a3, a4, a5, a6)); + nodes_[node.get ()] = node; + + return *node; + } + + template <typename N, typename E> + template <typename T, typename A0, typename A1, typename A2, + typename A3, typename A4, typename A5, typename A6, + typename A7> + T& Graph<N, E>:: + new_node (A0 const& a0, A1 const& a1, A2 const& a2, A3 const& a3, + A4 const& a4, A5 const& a5, A6 const& a6, A7 const& a7) + { + Shptr<T> node (new T (a0, a1, a2, a3, a4, a5, a6, a7)); + nodes_[node.get ()] = node; + + return *node; + } + + + template <typename N, typename E> + template <typename T, typename A0, typename A1, typename A2, + typename A3, typename A4, typename A5, typename A6, + typename A7, typename A8> + T& Graph<N, E>:: + new_node (A0 const& a0, A1 const& a1, A2 const& a2, A3 const& a3, + A4 const& a4, A5 const& a5, A6 const& a6, A7 const& a7, + A8 const& a8) + { + Shptr<T> node (new T (a0, a1, a2, a3, a4, a5, a6, a7, a8)); + nodes_[node.get ()] = node; + + return *node; + } + + + template <typename N, typename E> + template <typename T, typename A0, typename A1, typename A2, + typename A3, typename A4, typename A5, typename A6, + typename A7, typename A8, typename A9> + T& Graph<N, E>:: + new_node (A0 const& a0, A1 const& a1, A2 const& a2, A3 const& a3, + A4 const& a4, A5 const& a5, A6 const& a6, A7 const& a7, + A8 const& a8, A9 const& a9) + { + Shptr<T> node (new T (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9)); + nodes_[node.get ()] = node; + + return *node; + } + + + // Edges. + // + + template <typename N, typename E> + template <typename T, typename Left, typename Right> + T& Graph<N, E>:: + new_edge (Left& l, Right& r) + { + Shptr<T> edge (new T); + edges_[edge.get ()] = edge; + + edge->set_left_node (l); + edge->set_right_node (r); + + l.add_edge_left (*edge); + r.add_edge_right (*edge); + + return *edge; + } + + template <typename N, typename E> + template <typename T, typename Left, typename Right, + typename A0> + T& Graph<N, E>:: + new_edge (Left& l, Right& r, A0 const& a0) + { + Shptr<T> edge (new T (a0)); + edges_[edge.get ()] = edge; + + edge->set_left_node (l); + edge->set_right_node (r); + + l.add_edge_left (*edge); + r.add_edge_right (*edge); + + return *edge; + } + + template <typename N, typename E> + template <typename T, typename Left, typename Right, + typename A0, typename A1> + T& Graph<N, E>:: + new_edge (Left& l, Right& r, A0 const& a0, A1 const& a1) + { + Shptr<T> edge (new T (a0, a1)); + edges_[edge.get ()] = edge; + + edge->set_left_node (l); + edge->set_right_node (r); + + l.add_edge_left (*edge); + r.add_edge_right (*edge); + + return *edge; + } + + template <typename N, typename E> + template <typename T, typename Left, typename Right, + typename A0, typename A1, typename A2> + T& Graph<N, E>:: + new_edge (Left& l, Right& r, A0 const& a0, A1 const& a1, A2 const& a2) + { + Shptr<T> edge (new T (a0, a1, a2)); + edges_[edge.get ()] = edge; + + edge->set_left_node (l); + edge->set_right_node (r); + + l.add_edge_left (*edge); + r.add_edge_right (*edge); + + return *edge; + } + + template <typename N, typename E> + template <typename T, typename Left, typename Right, + typename A0, typename A1, typename A2, typename A3> + T& Graph<N, E>:: + new_edge (Left& l, Right& r, A0 const& a0, A1 const& a1, A2 const& a2, + A3 const& a3) + { + Shptr<T> edge (new T (a0, a1, a2, a3)); + edges_[edge.get ()] = edge; + + edge->set_left_node (l); + edge->set_right_node (r); + + l.add_edge_left (*edge); + r.add_edge_right (*edge); + + return *edge; + } + + template <typename N, typename E> + template <typename T, typename Left, typename Right, + typename A0, typename A1, typename A2, typename A3, + typename A4> + T& Graph<N, E>:: + new_edge (Left& l, Right& r, A0 const& a0, A1 const& a1, A2 const& a2, + A3 const& a3, A4 const& a4) + { + Shptr<T> edge (new T (a0, a1, a2, a3, a4)); + edges_[edge.get ()] = edge; + + edge->set_left_node (l); + edge->set_right_node (r); + + l.add_edge_left (*edge); + r.add_edge_right (*edge); + + return *edge; + } + + template <typename N, typename E> + template <typename T, typename Left, typename Right, + typename A0, typename A1, typename A2, typename A3, + typename A4, typename A5> + T& Graph<N, E>:: + new_edge (Left& l, Right& r, A0 const& a0, A1 const& a1, A2 const& a2, + A3 const& a3, A4 const& a4, A5 const& a5) + { + Shptr<T> edge (new T (a0, a1, a2, a3, a4, a5)); + edges_[edge.get ()] = edge; + + edge->set_left_node (l); + edge->set_right_node (r); + + l.add_edge_left (*edge); + r.add_edge_right (*edge); + + return *edge; + } + + + template <typename N, typename E> + template <typename T, typename Left, typename Right> + Void Graph<N, E>:: + delete_edge (Left& l, Right& r, T& edge) + { + typename Edges::Iterator i (edges_.find (&edge)); + + if (i == edges_.end () || + nodes_.find (&l) == nodes_.end () || + nodes_.find (&r) == nodes_.end ()) + throw NoEdge (); + + r.remove_edge_right (edge); + l.remove_edge_left (edge); + + edge.clear_right_node (r); + edge.clear_left_node (l); + + edges_.erase (i); + } + } +} diff --git a/libcult/cult/containers/iterator.hxx b/libcult/cult/containers/iterator.hxx new file mode 100644 index 0000000..132043b --- /dev/null +++ b/libcult/cult/containers/iterator.hxx @@ -0,0 +1,227 @@ +// file : cult/containers/iterator.hxx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef CULT_CONTAINERS_ITERATOR_HXX +#define CULT_CONTAINERS_ITERATOR_HXX + +#include <cult/types.hxx> + +#include <iterator> + +namespace Cult +{ + namespace Containers + { + template <typename I> + class IteratorAdapter + { + public: + typedef typename std::iterator_traits<I>::value_type Value; + typedef typename std::iterator_traits<I>::difference_type Difference; + typedef typename std::iterator_traits<I>::pointer Pointer; + typedef typename std::iterator_traits<I>::reference Reference; + typedef typename std::iterator_traits<I>::iterator_category Category; + + // For compatibility with std::iterator_traits + // + public: + typedef Value value_type; + typedef Reference reference; + typedef Pointer pointer; + typedef Category iterator_category; + typedef Difference difference_type; + + public: + IteratorAdapter () + : i_ () // i_ can be of a pointer type. + { + } + + explicit + IteratorAdapter (I const& i) + : i_ (i) + { + } + + template <typename J> + IteratorAdapter (IteratorAdapter<J> const& j) + : i_ (j.i_) + { + } + public: + // Forward iterator requirements. + // + Reference + operator* () const + { + return *i_; + } + + Pointer + operator-> () const + { + return &(*i_); + } + + IteratorAdapter& + operator++ () + { + ++i_; + return *this; + } + + IteratorAdapter + operator++ (Int) + { + return IteratorAdapter (i_++); + } + + public: + // Bidirectional iterator requirements. + // + IteratorAdapter& + operator-- () + { + --i_; + return *this; + } + + IteratorAdapter + operator-- (Int) + { + return IteratorAdapter (i_--); + } + + public: + // Random access iterator requirements. + // + Reference + operator[] (Difference n) const + { + return i_[n]; + } + + IteratorAdapter + operator+ (Difference n) const + { + return IteratorAdapter (i_ + n); + } + + IteratorAdapter& + operator+= (Difference n) + { + i_ += n; + return *this; + } + + IteratorAdapter + operator- (Difference n) const + { + return IteratorAdapter (i_ - n); + } + + IteratorAdapter& + operator-= (Difference n) + { + i_ += n; + return *this; + } + + public: + I const& + base () const + { + return i_; + } + + // @@ This is needed so that call to functions such as erase() + // be possible without writing a wrapper. This should be a temporary + // measure. + + operator I& () + { + return i_; + } + + operator I const& () const + { + return i_; + } + + private: + template<typename> + friend class IteratorAdapter; + + I i_; + }; + + // Note: We use different types for left- and right-hand-side + // arguments to allow comparison between iterator and const_iterator. + // + + // Forward iterator requirements. + // + template <typename I, typename J> + inline Boolean + operator== (IteratorAdapter<I> const& i, IteratorAdapter<J> const& j) + { + return i.base () == j.base (); + } + + template <typename I, typename J> + inline Boolean + operator!= (IteratorAdapter<I> const& i, IteratorAdapter<J> const& j) + { + return i.base () != j.base (); + } + + // Random access iterator requirements + // + template <typename I, typename J> + inline Boolean + operator< (IteratorAdapter<I> const& i, IteratorAdapter<J> const& j) + { + return i.base() < j.base(); + } + + template <typename I, typename J> + inline Boolean + operator> (IteratorAdapter<I> const& i, IteratorAdapter<J> const& j) + { + return i.base() > j.base(); + } + + template <typename I, typename J> + inline Boolean + operator<= (IteratorAdapter<I> const& i, IteratorAdapter<J> const& j) + { + return i.base() <= j.base(); + } + + template <typename I, typename J> + inline Boolean + operator>= (IteratorAdapter<I> const& i, IteratorAdapter<J> const& j) + { + return i.base() >= j.base(); + } + + template <typename I, typename J> + inline typename IteratorAdapter<I>::Difference + operator- (IteratorAdapter<I> const& i, IteratorAdapter<J> const& j) + { + return i.base () - j.base (); + } + + template <typename I> + IteratorAdapter<I> + operator+ (typename IteratorAdapter<I>::Difference n, + IteratorAdapter<I> const& x) + { + return x + n; + } + } +} + +#endif // CULT_CONTAINERS_ITERATOR_HXX diff --git a/libcult/cult/containers/list.hxx b/libcult/cult/containers/list.hxx new file mode 100644 index 0000000..161052e --- /dev/null +++ b/libcult/cult/containers/list.hxx @@ -0,0 +1,193 @@ +// file : cult/containers/list.hxx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef CULT_CONTAINERS_LIST_HXX +#define CULT_CONTAINERS_LIST_HXX + +#include <cult/types.hxx> + +#include <cult/containers/iterator.hxx> + +#include <list> + +namespace Cult +{ + namespace Containers + { + template <typename T> + class List: public std::list<T> + { + typedef std::list<T> Base; + + Base& + base () + { + return *this; + } + + Base const& + base () const + { + return *this; + } + + public: + typedef typename Base::value_type Value; + + typedef typename Base::reference Reference; + typedef typename Base::const_reference ConstReference; + + typedef typename Base::pointer Pointer; + typedef typename Base::const_pointer ConstPointer; + + + typedef + IteratorAdapter<typename Base::iterator> + Iterator; + + typedef + IteratorAdapter<typename Base::const_iterator> + ConstIterator; + + + typedef + IteratorAdapter<typename Base::reverse_iterator> + ReverseIterator; + + typedef + IteratorAdapter<typename Base::const_reverse_iterator> + ConstReverseIterator; + + + // Use Cult::Size and Cult::PtrDifference. + // + // typedef Base::size_type; + // typedef Base::difference_type; + + public: + explicit + List () + : Base () + { + } + + explicit + List (Size size, Value const& value = Value ()) + : Base (size, value) + { + } + + template <typename InputIterator> + List (InputIterator first, InputIterator last) + : Base (first, last) + { + } + + List (List<Value> const& other) + : Base (other) + { + } + + List<Value>& + operator= (List<Value> const& other) + { + base () = other; + return *this; + } + + public: + Void + swap (List<Value>& other) + { + base ().swap (other); + } + + public: + Iterator + begin () + { + return Iterator (base ().begin ()); + } + + Iterator + end () + { + return Iterator (base ().end ()); + } + + + ConstIterator + begin () const + { + return ConstIterator (base ().begin ()); + } + + ConstIterator + end () const + { + return ConstIterator (base ().end ()); + } + + // + // + + ReverseIterator + rbegin () + { + return ReverseIterator (base ().rbegin ()); + } + + ReverseIterator + rend () + { + return ReverseIterator (base ().rend ()); + } + + + ConstReverseIterator + rbegin () const + { + return ConstReverseIterator (base ().rbegin ()); + } + + ConstReverseIterator + rend () const + { + return ConstReverseIterator (base ().rend ()); + } + + public: + Iterator + insert (Iterator const& p, Value const& x) + { + return Iterator (base ().insert (p.base (), x)); + } + + template <typename I> + Void + insert (Iterator const& p, I const& first, I const& last) + { + base ().insert (p.base (), first, last); + } + + template <typename I> + Void + insert (Iterator const& p, + IteratorAdapter<I> const& first, + IteratorAdapter<I> const& last) + { + base ().insert (p.base (), first.base (), last.base ()); + } + + Iterator + erase (Iterator const& i) + { + return Iterator (base ().erase (i.base ())); + } + }; + } +} + +#endif // CULT_CONTAINERS_LIST_HXX diff --git a/libcult/cult/containers/map.hxx b/libcult/cult/containers/map.hxx new file mode 100644 index 0000000..8a3fbdb --- /dev/null +++ b/libcult/cult/containers/map.hxx @@ -0,0 +1,175 @@ +// file : cult/containers/map.hxx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef CULT_CONTAINERS_MAP_HXX +#define CULT_CONTAINERS_MAP_HXX + +#include <cult/types.hxx> + +#include <cult/containers/iterator.hxx> + +#include <map> + +namespace Cult +{ + namespace Containers + { + template <typename K, typename T, typename C = std::less<K> > + class Map: public std::map<K, T, C> + { + typedef std::map<K, T, C> Base; + + Base& + base () + { + return *this; + } + + Base const& + base () const + { + return *this; + } + + public: + typedef typename Base::key_type Key; + typedef typename Base::mapped_type Value; + typedef typename Base::value_type Pair; + typedef typename Base::key_compare Compare; + + typedef typename Base::reference Reference; + typedef typename Base::const_reference ConstReference; + + typedef typename Base::pointer Pointer; + typedef typename Base::const_pointer ConstPointer; + + + typedef + IteratorAdapter<typename Base::iterator> + Iterator; + + typedef + IteratorAdapter<typename Base::const_iterator> + ConstIterator; + + + typedef + IteratorAdapter<typename Base::reverse_iterator> + ReverseIterator; + + typedef + IteratorAdapter<typename Base::const_reverse_iterator> + ConstReverseIterator; + + // Use Cult::Size and Cult::PtrDifference. + // + // typedef Base::size_type; + // typedef Base::difference_type; + + public: + explicit + Map (Compare const& comp = Compare ()) + : Base (comp) + { + } + + template <typename InputIterator> + Map (InputIterator first, + InputIterator last, + Compare const& comp = Compare ()) + : Base (first, last, comp) + { + } + + Map (Map<Key, Value, Compare> const& other) + : Base (other) + { + } + + Map<Key, Value, Compare>& + operator= (Map<Key, Value, Compare> const& other) + { + base () = other; + return *this; + } + + public: + Iterator + begin () + { + return Iterator (base ().begin ()); + } + + Iterator + end () + { + return Iterator (base ().end ()); + } + + + ConstIterator + begin () const + { + return ConstIterator (base ().begin ()); + } + + ConstIterator + end () const + { + return ConstIterator (base ().end ()); + } + + // + // + + ReverseIterator + rbegin () + { + return ReverseIterator (base ().rbegin ()); + } + + ReverseIterator + rend () + { + return ReverseIterator (base ().rend ()); + } + + + ConstReverseIterator + rbegin () const + { + return ConstReverseIterator (base ().rbegin ()); + } + + ConstReverseIterator + rend () const + { + return ConstReverseIterator (base ().rend ()); + } + + public: + Iterator + find (Key const& k) + { + return Iterator (base ().find (k)); + } + + ConstIterator + find (Key const& k) const + { + return ConstIterator (base ().find (k)); + } + + public: + Void + swap (Map<Key, Value, Compare>& other) + { + base ().swap (other); + } + }; + } +} + +#endif // CULT_CONTAINERS_MAP_HXX diff --git a/libcult/cult/containers/pair.hxx b/libcult/cult/containers/pair.hxx new file mode 100644 index 0000000..b8b7506 --- /dev/null +++ b/libcult/cult/containers/pair.hxx @@ -0,0 +1,58 @@ +// file : cult/containers/pair.hxx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef CULT_CONTAINERS_PAIR_HXX +#define CULT_CONTAINERS_PAIR_HXX + +#include <utility> + +namespace Cult +{ + namespace Containers + { + template <typename T1, typename T2> + class Pair: public std::pair<T1, T2> + { + typedef std::pair<T1, T2> Base; + + Base& + base () + { + return *this; + } + + public: + typedef T1 First; + typedef T2 Second; + + public: + Pair () + : Base () + { + } + + Pair (First const& first, Second const& second) + : Base (first, second) + { + } + + template <typename X, typename Y> + Pair (std::pair<X, Y> const& pair) + : Base (pair) + { + } + + template <typename X, typename Y> + Pair& + operator= (std::pair<X, Y> const& pair) + { + base () = pair; + return *this; + } + }; + } +} + +#endif // CULT_CONTAINERS_PAIR_HXX diff --git a/libcult/cult/containers/set.hxx b/libcult/cult/containers/set.hxx new file mode 100644 index 0000000..a911c19 --- /dev/null +++ b/libcult/cult/containers/set.hxx @@ -0,0 +1,175 @@ +// file : cult/containers/set.hxx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef CULT_CONTAINERS_SET_HXX +#define CULT_CONTAINERS_SET_HXX + +#include <cult/types.hxx> + +#include <cult/containers/iterator.hxx> + +#include <set> + +namespace Cult +{ + namespace Containers + { + template <typename K, typename C = std::less<K> > + class Set: public std::set<K, C> + { + typedef std::set<K, C> Base; + + Base& + base () + { + return *this; + } + + Base const& + base () const + { + return *this; + } + + public: + typedef typename Base::key_type Key; + typedef typename Base::value_type Value; // Same as Key. + typedef typename Base::key_compare Compare; + + typedef typename Base::reference Reference; + typedef typename Base::const_reference ConstReference; + + typedef typename Base::pointer Pointer; + typedef typename Base::const_pointer ConstPointer; + + + typedef + IteratorAdapter<typename Base::iterator> + Iterator; + + typedef + IteratorAdapter<typename Base::const_iterator> + ConstIterator; + + + typedef + IteratorAdapter<typename Base::reverse_iterator> + ReverseIterator; + + typedef + IteratorAdapter<typename Base::const_reverse_iterator> + ConstReverseIterator; + + + // Use Cult::Size and Cult::PtrDifference. + // + // typedef Base::size_type; + // typedef Base::difference_type; + + public: + explicit + Set (Compare const& comp = Compare ()) + : Base (comp) + { + } + + template <typename InputIterator> + Set (InputIterator first, + InputIterator last, + Compare const& comp = Compare ()) + : Base (first, last, comp) + { + } + + Set (Set<Key, Compare> const& other) + : Base (other) + { + } + + Set<Key, Compare>& + operator= (Set<Key, Compare> const& other) + { + base () = other; + return *this; + } + + public: + Iterator + begin () + { + return Iterator (base ().begin ()); + } + + Iterator + end () + { + return Iterator (base ().end ()); + } + + + ConstIterator + begin () const + { + return ConstIterator (base ().begin ()); + } + + ConstIterator + end () const + { + return ConstIterator (base ().end ()); + } + + // + // + + ReverseIterator + rbegin () + { + return ReverseIterator (base ().rbegin ()); + } + + ReverseIterator + rend () + { + return ReverseIterator (base ().rend ()); + } + + + ConstReverseIterator + rbegin () const + { + return ConstReverseIterator (base ().rbegin ()); + } + + ConstReverseIterator + rend () const + { + return ConstReverseIterator (base ().rend ()); + } + + public: + Iterator + find (Key const& k) + { + return Iterator (base ().find (k)); + } + + ConstIterator + find (Key const& k) const + { + return ConstIterator (base ().find (k)); + } + + public: + Void + swap (Set<Key, Compare>& other) + { + base ().swap (other); + } + }; + } +} + +#endif // CULT_CONTAINERS_SET_HXX diff --git a/libcult/cult/containers/stack.hxx b/libcult/cult/containers/stack.hxx new file mode 100644 index 0000000..930bfe8 --- /dev/null +++ b/libcult/cult/containers/stack.hxx @@ -0,0 +1,95 @@ +// file : cult/containers/stack.hxx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef CULT_CONTAINERS_STACK_HXX +#define CULT_CONTAINERS_STACK_HXX + +#include <cult/types.hxx> + +#include <cult/containers/deque.hxx> + +namespace Cult +{ + namespace Containers + { + template <typename T, typename C = Deque<T> > + class Stack + { + public: + typedef C Container; + typedef typename Container::Value Value; + + + public: + explicit + Stack (Container const& c = Container()) + : c_ (c) + { + } + + Boolean + empty () const + { + return c_.empty(); + } + + Size + size () const + { + return c_.size(); + } + + Value& + top () + { + return c_.back(); + } + + Value const& + top () const + { + return c_.back(); + } + + Void + push (const Value& x) + { + c_.push_back(x); + } + + Void + pop() + { + c_.pop_back(); + } + + protected: + Container c_; + }; + + /* + template <class T, class Container> + bool operator==(const stack<T, Container>& x, + const stack<T, Container>& y); + template <class T, class Container> + bool operator< (const stack<T, Container>& x, + const stack<T, Container>& y); + template <class T, class Container> + bool operator!=(const stack<T, Container>& x, + const stack<T, Container>& y); + template <class T, class Container> + bool operator> (const stack<T, Container>& x, + const stack<T, Container>& y); + template <class T, class Container> + bool operator>=(const stack<T, Container>& x, + const stack<T, Container>& y); + template <class T, class Container> + bool operator<=(const stack<T, Container>& x, + const stack<T, Container>& y); + */ + } +} + +#endif // CULT_CONTAINERS_STACK_HXX diff --git a/libcult/cult/containers/vector.hxx b/libcult/cult/containers/vector.hxx new file mode 100644 index 0000000..3a3b32f --- /dev/null +++ b/libcult/cult/containers/vector.hxx @@ -0,0 +1,164 @@ +// file : cult/containers/vector.hxx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef CULT_CONTAINERS_VECTOR_HXX +#define CULT_CONTAINERS_VECTOR_HXX + +#include <cult/types.hxx> + +#include <cult/containers/iterator.hxx> + +#include <vector> + +namespace Cult +{ + namespace Containers + { + template <typename T> + class Vector: public std::vector<T> + { + typedef std::vector<T> Base; + + Base& + base () + { + return *this; + } + + Base const& + base () const + { + return *this; + } + + public: + typedef typename Base::value_type Value; + + typedef typename Base::reference Reference; + typedef typename Base::const_reference ConstReference; + + typedef typename Base::pointer Pointer; + typedef typename Base::const_pointer ConstPointer; + + + typedef + IteratorAdapter<typename Base::iterator> + Iterator; + + typedef + IteratorAdapter<typename Base::const_iterator> + ConstIterator; + + + typedef + IteratorAdapter<typename Base::reverse_iterator> + ReverseIterator; + + typedef + IteratorAdapter<typename Base::const_reverse_iterator> + ConstReverseIterator; + + + // Use Cult::Size and Cult::PtrDifference. + // + // typedef Base::size_type; + // typedef Base::difference_type; + + public: + explicit + Vector () + : Base () + { + } + + explicit + Vector (Size size, Value const& value = Value ()) + : Base (size, value) + { + } + + template <typename InputIterator> + Vector (InputIterator first, InputIterator last) + : Base (first, last) + { + } + + Vector (Vector<Value> const& other) + : Base (other) + { + } + + Vector<Value>& + operator= (Vector<Value> const& other) + { + base () = other; + return *this; + } + + public: + Iterator + begin () + { + return Iterator (base ().begin ()); + } + + Iterator + end () + { + return Iterator (base ().end ()); + } + + + ConstIterator + begin () const + { + return ConstIterator (base ().begin ()); + } + + ConstIterator + end () const + { + return ConstIterator (base ().end ()); + } + + // + // + + ReverseIterator + rbegin () + { + return ReverseIterator (base ().rbegin ()); + } + + ReverseIterator + rend () + { + return ReverseIterator (base ().rend ()); + } + + + ConstReverseIterator + rbegin () const + { + return ConstReverseIterator (base ().rbegin ()); + } + + ConstReverseIterator + rend () const + { + return ConstReverseIterator (base ().rend ()); + } + + public: + Void + swap (Vector<Value>& other) + { + base ().swap (other); + } + }; + } +} + +#endif // CULT_CONTAINERS_VECTOR_HXX diff --git a/libcult/cult/dr/xdr/input-stream.cxx b/libcult/cult/dr/xdr/input-stream.cxx new file mode 100644 index 0000000..1730763 --- /dev/null +++ b/libcult/cult/dr/xdr/input-stream.cxx @@ -0,0 +1,152 @@ +// file : cult/dr/xdr/input-stream.cxx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <cult/dr/xdr/input-stream.hxx> + +namespace Cult +{ + namespace DR + { + namespace XDR + { + InputStream:: + InputStream (Shptr<Buffer> buffer) + : buffer_ (buffer) + { + xdrmem_create (&xdr_, buffer_->data (), buffer_->size (), XDR_DECODE); + } + + InputStream:: + ~InputStream () + { + xdr_destroy (&xdr_); + } + + InputStream& InputStream:: + operator>> (Boolean& v) + { + bool_t b; + + if (!xdr_bool (&xdr_, &b)) + throw Extraction (); + + v = b; + + return *this; + } + + InputStream& InputStream:: + operator>> (Int8& v) + { + if (!xdr_int8_t (&xdr_, &v)) + throw Extraction (); + + return *this; + } + + InputStream& InputStream:: + operator>> (UnsignedInt8& v) + { + if (!xdr_uint8_t (&xdr_, &v)) + throw Extraction (); + + return *this; + } + + InputStream& InputStream:: + operator>> (Int16& v) + { + if (!xdr_int16_t (&xdr_, &v)) + throw Extraction (); + + return *this; + } + + InputStream& InputStream:: + operator>> (UnsignedInt16& v) + { + if (!xdr_uint16_t (&xdr_, &v)) + throw Extraction (); + + return *this; + } + + InputStream& InputStream:: + operator>> (Int32& v) + { + if (!xdr_int32_t (&xdr_, &v)) + throw Extraction (); + + return *this; + } + + InputStream& InputStream:: + operator>> (UnsignedInt32& v) + { + if (!xdr_uint32_t (&xdr_, &v)) + throw Extraction (); + + return *this; + } + + InputStream& InputStream:: + operator>> (Int64& v) + { + if (!xdr_int64_t (&xdr_, (int64_t*)&v)) + throw Extraction (); + + return *this; + } + + InputStream& InputStream:: + operator>> (UnsignedInt64& v) + { + if (!xdr_uint64_t (&xdr_, (uint64_t*)&v)) + throw Extraction (); + + return *this; + } + + InputStream& InputStream:: + operator>> (String& v) + { + UnsignedInt32 size; + + if (!xdr_uint32_t (&xdr_, &size)) + throw Extraction (); + + // I dare to change the guts! + // + v.resize (size); + + Char* p (const_cast<Char*> (v.data ())); + + if (!xdr_opaque (&xdr_, p, size)) + throw Extraction (); + + return *this; + } + + Void InputStream:: + read (Buffer& buffer, Size size) + { + Size new_size (buffer.position () + size); + + buffer.capacity (new_size); + + if (!xdr_opaque (&xdr_, buffer.data () + buffer.position (), size)) + throw Extraction (); + + buffer.size (new_size); + } + + Boolean InputStream:: + eos () const + { + return xdr_getpos (&xdr_) >= buffer_->size (); + } + } + } +} diff --git a/libcult/cult/dr/xdr/input-stream.hxx b/libcult/cult/dr/xdr/input-stream.hxx new file mode 100644 index 0000000..653b228 --- /dev/null +++ b/libcult/cult/dr/xdr/input-stream.hxx @@ -0,0 +1,78 @@ +// file : cult/dr/xdr/input-stream.hxx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef CULT_DR_XDR_INPUT_STREAM_HXX +#define CULT_DR_XDR_INPUT_STREAM_HXX + +#include <cult/types.hxx> + +#include <cult/eh/exception.hxx> + +#include <cult/mm/buffer.hxx> + +#include <rpc/xdr.h> + +namespace Cult +{ + namespace DR + { + namespace XDR + { + struct Extraction: virtual EH::Exception {}; + + class InputStream: public NonCopyable + { + public: + InputStream (Shptr<Buffer> buffer); + + ~InputStream (); + + public: + InputStream& + operator>> (Boolean&); + + InputStream& + operator>> (Int8&); + + InputStream& + operator>> (UnsignedInt8&); + + InputStream& + operator>> (Int16&); + + InputStream& + operator>> (UnsignedInt16&); + + InputStream& + operator>> (Int32&); + + InputStream& + operator>> (UnsignedInt32&); + + InputStream& + operator>> (Int64&); + + InputStream& + operator>> (UnsignedInt64&); + + InputStream& + operator>> (String&); + + public: + Void + read (Buffer& buffer, Size size); + + Boolean + eos () const; + + private: + ::XDR xdr_; + Shptr<Buffer> buffer_; + }; + } + } +} + +#endif // CULT_DR_XDR_INPUT_STREAM_HXX diff --git a/libcult/cult/dr/xdr/output-stream.cxx b/libcult/cult/dr/xdr/output-stream.cxx new file mode 100644 index 0000000..acda64c --- /dev/null +++ b/libcult/cult/dr/xdr/output-stream.cxx @@ -0,0 +1,222 @@ +// file : cult/dr/xdr/output-stream.cxx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <cult/dr/xdr/output-stream.hxx> + +namespace Cult +{ + namespace DR + { + namespace XDR + { + OutputStream:: + OutputStream (Size hint) + : buffer_ (new Buffer (hint ? hint : 256)) + { + xdrmem_create (&xdr_, buffer_->data (), ~(u_int (0)), XDR_ENCODE); + } + + + OutputStream:: + ~OutputStream () + { + xdr_destroy (&xdr_); + } + + Shptr<Buffer> OutputStream:: + buffer () + { + return buffer_; + } + + Void OutputStream:: + ensure_space (Size size) + { + size += size % 4 ? 4 - size % 4 : 0; + + Size needed (size + xdr_getpos (&xdr_)); + + if (needed > buffer_->capacity ()) + { + Size new_size (buffer_->capacity () * 2); + + if (needed > new_size) + new_size = needed % 8 ? 8 - new_size % 8 : 0; + + if (buffer_->capacity (new_size)) + { + xdr_destroy (&xdr_); + + xdrmem_create (&xdr_, + buffer_->data () + buffer_->size (), + ~(u_int (0)), + XDR_ENCODE); + } + } + } + + Void OutputStream:: + update_position (Size position) + { + // Align to 4-boundary. + // + position += position % 4 ? 4 - position % 4 : 0; + + buffer_->size (buffer_->size () + position); + } + + OutputStream& OutputStream:: + operator<< (Boolean v) + { + ensure_space (4); + + bool_t b (v); + + if (!xdr_bool (&xdr_, &b)) + throw Insertion (); + + update_position (4); + return *this; + } + + OutputStream& OutputStream:: + operator<< (Int8 v) + { + ensure_space (4); + + if (!xdr_int8_t (&xdr_, &v)) + throw Insertion (); + + update_position (4); + + return *this; + } + + OutputStream& OutputStream:: + operator<< (UnsignedInt8 v) + { + ensure_space (4); + + if (!xdr_uint8_t (&xdr_, &v)) + throw Insertion (); + + update_position (4); + + return *this; + } + + OutputStream& OutputStream:: + operator<< (Int16 v) + { + ensure_space (4); + + if (!xdr_int16_t (&xdr_, &v)) + throw Insertion (); + + update_position (4); + + return *this; + } + + OutputStream& OutputStream:: + operator<< (UnsignedInt16 v) + { + ensure_space (4); + + if (!xdr_uint16_t (&xdr_, &v)) + throw Insertion (); + + update_position (4); + + return *this; + } + + OutputStream& OutputStream:: + operator<< (Int32 v) + { + ensure_space (4); + + if (!xdr_int32_t (&xdr_, &v)) + throw Insertion (); + + update_position (4); + + return *this; + } + + OutputStream& OutputStream:: + operator<< (UnsignedInt32 v) + { + ensure_space (4); + + if (!xdr_uint32_t (&xdr_, &v)) + throw Insertion (); + + update_position (4); + + return *this; + } + + OutputStream& OutputStream:: + operator<< (Int64 v) + { + ensure_space (8); + + if (!xdr_int64_t (&xdr_, (int64_t*)&v)) + throw Insertion (); + + update_position (8); + + return *this; + } + + OutputStream& OutputStream:: + operator<< (UnsignedInt64 v) + { + ensure_space (8); + + if (!xdr_uint64_t (&xdr_, (uint64_t*)&v)) + throw Insertion (); + + update_position (8); + + return *this; + } + + OutputStream& OutputStream:: + operator<< (String const& v) + { + UnsignedInt32 size (v.size ()); + + ensure_space (4 + size); + + Char* p (const_cast<Char*>(v.c_str ())); + + if (!xdr_string (&xdr_, &p, size)) + throw Insertion (); + + update_position (4 + size); + + return *this; + } + + Void OutputStream:: + write (Buffer const& buffer) + { + Size size (buffer.size () - buffer.position ()); + + ensure_space (size); + + if (!xdr_opaque ( + &xdr_, + const_cast<Char*> (buffer.data ()) + buffer.position (), + size)) + throw Insertion (); + + update_position (size); + } + } + } +} diff --git a/libcult/cult/dr/xdr/output-stream.hxx b/libcult/cult/dr/xdr/output-stream.hxx new file mode 100644 index 0000000..72e0c19 --- /dev/null +++ b/libcult/cult/dr/xdr/output-stream.hxx @@ -0,0 +1,89 @@ +// file : cult/dr/xdr/output-stream.hxx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef CULT_DR_XDR_OUTPUT_STREAM_HXX +#define CULT_DR_XDR_OUTPUT_STREAM_HXX + +#include <cult/types.hxx> + +#include <cult/eh/exception.hxx> + +#include <cult/mm/buffer.hxx> + +#include <rpc/xdr.h> + +namespace Cult +{ + namespace DR + { + namespace XDR + { + struct Insertion: virtual EH::Exception {}; + + //@@ I think I should use refernce to buffer instead of Shptr. + // To keep it simple, so to speak. + // + class OutputStream: public NonCopyable + { + public: + OutputStream (Size hint = 0); + + ~OutputStream (); + + public: + Shptr<Buffer> + buffer (); + + public: + OutputStream& + operator<< (Boolean); + + OutputStream& + operator<< (Int8); + + OutputStream& + operator<< (UnsignedInt8); + + OutputStream& + operator<< (Int16); + + OutputStream& + operator<< (UnsignedInt16); + + OutputStream& + operator<< (Int32); + + OutputStream& + operator<< (UnsignedInt32); + + OutputStream& + operator<< (Int64); + + OutputStream& + operator<< (UnsignedInt64); + + OutputStream& + operator<< (String const&); + + public: + Void + write (Buffer const& buffer); + + private: + Void + ensure_space (Size size); + + Void + update_position (Size position); + + private: + ::XDR xdr_; + Shptr<Buffer> buffer_; + }; + } + } +} + +#endif // CULT_DR_XDR_OUTPUT_STREAM_HXX diff --git a/libcult/cult/eh/exception.cxx b/libcult/cult/eh/exception.cxx new file mode 100644 index 0000000..21494cd --- /dev/null +++ b/libcult/cult/eh/exception.cxx @@ -0,0 +1,27 @@ +// file : cult/eh/exception.cxx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <cult/eh/exception.hxx> + +#include <typeinfo> + +namespace Cult +{ + namespace EH + { + Char const* Exception:: + what () const throw () + { + try + { + return typeid (*this).name (); + } + catch (...) + { + return ""; + } + } + } +} diff --git a/libcult/cult/eh/exception.hxx b/libcult/cult/eh/exception.hxx new file mode 100644 index 0000000..266c591 --- /dev/null +++ b/libcult/cult/eh/exception.hxx @@ -0,0 +1,25 @@ +// file : cult/eh/exception.hxx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef CULT_EH_EXCEPTION_HXX +#define CULT_EH_EXCEPTION_HXX + +#include <cult/types/fundamental.hxx> + +#include <exception> // std::exception + +namespace Cult +{ + namespace EH + { + struct Exception : std::exception + { + virtual Char const* + what () const throw (); + }; + } +} + +#endif // CULT_EH_EXCEPTION_HXX diff --git a/libcult/cult/makefile b/libcult/cult/makefile new file mode 100644 index 0000000..e4ce5ea --- /dev/null +++ b/libcult/cult/makefile @@ -0,0 +1,160 @@ +# file : cult/makefile +# author : Boris Kolpackov <boris@kolpackov.net> +# copyright : Copyright (c) 2005-2010 Boris Kolpackov +# license : GNU GPL v2; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../build/bootstrap.make + +$(call include,$(bld_root)/system.make) +$(call include,$(scf_root)/configuration.make) + +cxx_tun := eh/exception.cxx + +cxx_tun += mm/new.cxx \ + mm/counter.cxx \ + mm/buffer.cxx + +cxx_tun += rtti/type-info.cxx + +cxx_tun += trace/log.cxx + +cxx_tun += cli/arguments.cxx \ + cli/file-arguments.cxx \ + cli/scanner.cxx \ + cli/options.cxx \ + cli/options-parser.cxx \ + cli/options-spec.cxx + +ifeq ($(cult_threads),y) +cxx_tun += sched/condition.cxx \ + sched/mutex.cxx \ + sched/spin.cxx \ + sched/thread.cxx +endif + + +ifeq ($(cult_network),y) +cxx_tun += os/net/address.cxx \ + os/net/socket.cxx \ + os/net/datagram-socket.cxx \ + os/net/multicast-socket.cxx \ + os/net/ipv4/address.cxx \ + os/net/ipv4/datagram-socket.cxx \ + os/net/ipv4/multicast-socket.cxx +endif + + +ifeq ($(cult_dr),y) +cxx_tun += dr/xdr/input-stream.cxx \ + dr/xdr/output-stream.cxx +endif + + +cxx_o := $(addprefix $(out_base)/,$(cxx_tun:.cxx=.o)) +cxx_d := $(cxx_o:.o=.o.d) + +cult.l := $(out_base)/cult.l +cult.l.cpp-options := $(out_base)/cult.l.cpp-options + +clean := $(out_base)/.clean + + +# Architectures. +# +# +#@@ arch can collide if src_root == out_root +# + +# List of known architectures. +# +architectures := i386 \ + i386/i486 \ + i386/i486/i586 \ + i386/i486/i586/i686 \ + i386/i486/i586/i686/x86_64 + +# Directories with architecture-specific code. +# +arch_dirs := mm +arch := $(filter %$(host_cpu),$(architectures)) + +r := +r := generic $(foreach a,$(subst /, ,$(arch)),$(eval r := $(if $r,$r/)$a)$r) + +sub_archs := +$(foreach a,$r,$(eval sub_archs := $a $(sub_archs))) + +#$(warning $(sub_archs)) + +# $1 - sub-architecture dir (e.g. i386/i486) +# +define arch-rule + +arch_targets += $(foreach d,$(arch_dirs),$(out_base)/arch/$1/cult/$d/arch) + +$(out_base)/arch/$1/cult/%/arch: $(src_base)/%/arch/$1 | $(out_base)/arch/$1/cult/%/. + $(call message,using $1,ln -s $$$$< $$$$@) +endef + +arch_targets := +$(foreach a,$(sub_archs),$(eval $(call arch-rule,$a))) + + +# Build. +# +$(cult.l): $(cxx_o) + +ifeq ($(cult_threads),y) +$(cult.l): -lpthread +endif + +$(cxx_o) $(cxx_d): $(cult.l.cpp-options) + +$(cult.l.cpp-options): prefix := cult/ $(out_root)/ +$(cult.l.cpp-options): value := $(addprefix -I$(out_base)/arch/,$(sub_archs))\ + -I$(out_root)\ + -I$(src_root) + +$(cult.l.cpp-options): | $(arch_targets) + +$(call include-dep,$(cxx_d)) + + +# config.hxx +# +ifdef cult_dr +$(out_base)/config.hxx: cult_threads := $(cult_threads) +$(out_base)/config.hxx: + @echo '// file : cult/config.hxx' >$@ + @echo '// author : automatically generated' >>$@ + @echo '// copyright : Copyright (c) 2006-2010 Boris Kolpackov' >>$@ + @echo '// license : GNU GPL v2; see accompanying LICENSE file' >>$@ + @echo '#ifndef CULT_CONFIG_HXX' >>$@ + @echo '#define CULT_CONFIG_HXX' >>$@ +ifeq ($(cult_threads),y) + @echo '#define CULT_THREADS' >>$@ +endif + @echo '#endif // CULT_CONFIG_HXX' >>$@ +endif + +# Convenience alias for default target. +# +$(out_base)/: $(cult.l) + + +# Clean. +# +$(clean): $(cult.l).o.clean \ + $(cult.l.cpp-options).clean \ + $(out_base)/cli/mapper.hxx.m4.clean \ + $(addsuffix .cxx.clean,$(cxx_o)) \ + $(addsuffix .cxx.clean,$(cxx_d)) + $(call message,rm $$1,rm -f -r $$1,$(out_base)/arch) + $(call message,rm $$1,rm -f $$1,$(out_base)/config.hxx) + +# How to. +# +$(call include,$(bld_root)/cxx/o-l.make) +$(call include,$(bld_root)/cxx/cxx-o.make) +$(call include,$(bld_root)/cxx/cxx-d.make) +$(call include,$(bld_root)/m4/m4.make) diff --git a/libcult/cult/meta/answer.hxx b/libcult/cult/meta/answer.hxx new file mode 100644 index 0000000..402d152 --- /dev/null +++ b/libcult/cult/meta/answer.hxx @@ -0,0 +1,27 @@ +// file : cult/meta/answer.hxx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef CULT_META_ANSWER_HXX +#define CULT_META_ANSWER_HXX + +#include <cult/types/fundamental.hxx> + +namespace Cult +{ + namespace Meta + { + struct Yes + { + Char filling; + }; + + struct No + { + Char filling[2]; + }; + } +} + +#endif // CULT_META_ANSWER_HXX diff --git a/libcult/cult/meta/class-p.hxx b/libcult/cult/meta/class-p.hxx new file mode 100644 index 0000000..6ac056d --- /dev/null +++ b/libcult/cult/meta/class-p.hxx @@ -0,0 +1,33 @@ +// file : cult/meta/class-p.hxx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef CULT_META_CLASS_HXX +#define CULT_META_CLASS_HXX + +#include <cult/types/fundamental.hxx> + +#include <cult/meta/answer.hxx> + +namespace Cult +{ + namespace Meta + { + template <typename X> + class class_p + { + //@@ g++ bug 14881 + public: + template <typename Y> static No test (...); + template <typename Y> static Yes test (Void* Y::*); + + public: + //@@ Qualification bug fixed for g++ 3.4.0. + static Boolean const r = + sizeof (class_p<X>::template test<X> (0)) == sizeof (Yes); + }; + } +} + +#endif // CULT_META_CLASS_HXX diff --git a/libcult/cult/meta/polymorphic-p.hxx b/libcult/cult/meta/polymorphic-p.hxx new file mode 100644 index 0000000..0743de3 --- /dev/null +++ b/libcult/cult/meta/polymorphic-p.hxx @@ -0,0 +1,56 @@ +// file : cult/meta/polymorphic-p.hxx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef CULT_META_POLYMORPHIC_HXX +#define CULT_META_POLYMORPHIC_HXX + +#include <cult/types/fundamental.hxx> + +#include <cult/meta/class-p.hxx> +#include <cult/meta/remove-cv.hxx> + +namespace Cult +{ + namespace Meta + { + template <typename CVX> + class polymorphic_p + { + typedef typename remove_cv<CVX>::R X; + + template <typename Y, Boolean c> + struct impl + { + static const Boolean r = false; + }; + + template <typename Y> + struct impl<Y, true> + { + //@@ private + + struct S1 : Y + { + S1 (); + }; + + struct S2 : Y + { + S2 (); + + virtual + ~S2 () throw (); + }; + + static const Boolean r = sizeof (S1) == sizeof (S2); + }; + + public: + static const Boolean r = impl<X, class_p<X>::r>::r; + }; + } +} + +#endif // CULT_META_POLYMORPHIC_HXX diff --git a/libcult/cult/meta/remove-c.hxx b/libcult/cult/meta/remove-c.hxx new file mode 100644 index 0000000..a25382c --- /dev/null +++ b/libcult/cult/meta/remove-c.hxx @@ -0,0 +1,27 @@ +// file : cult/meta/remove-c.hxx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef CULT_META_REMOVE_C_HXX +#define CULT_META_REMOVE_C_HXX + +namespace Cult +{ + namespace Meta + { + template <typename X> + struct remove_c + { + typedef X R; + }; + + template <typename X> + struct remove_c<X const> + { + typedef X R; + }; + } +} + +#endif // CULT_META_REMOVE_C_HXX diff --git a/libcult/cult/meta/remove-cv.hxx b/libcult/cult/meta/remove-cv.hxx new file mode 100644 index 0000000..190e393 --- /dev/null +++ b/libcult/cult/meta/remove-cv.hxx @@ -0,0 +1,24 @@ +// file : cult/meta/remove-cv.hxx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef CULT_META_REMOVE_CV_HXX +#define CULT_META_REMOVE_CV_HXX + +#include <cult/meta/remove-c.hxx> +#include <cult/meta/remove-v.hxx> + +namespace Cult +{ + namespace Meta + { + template <typename X> + struct remove_cv + { + typedef typename remove_v<typename remove_c<X>::R>::R R; + }; + } +} + +#endif // CULT_META_REMOVE_CV_HXX diff --git a/libcult/cult/meta/remove-v.hxx b/libcult/cult/meta/remove-v.hxx new file mode 100644 index 0000000..eb6e4ee --- /dev/null +++ b/libcult/cult/meta/remove-v.hxx @@ -0,0 +1,27 @@ +// file : cult/meta/remove-v.hxx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef CULT_META_REMOVE_V_HXX +#define CULT_META_REMOVE_V_HXX + +namespace Cult +{ + namespace Meta + { + template <typename X> + struct remove_v + { + typedef X R; + }; + + template <typename X> + struct remove_v<X volatile> + { + typedef X R; + }; + } +} + +#endif // CULT_META_REMOVE_V_HXX diff --git a/libcult/cult/mm/arch/generic/counter.hxx b/libcult/cult/mm/arch/generic/counter.hxx new file mode 100644 index 0000000..6a26759 --- /dev/null +++ b/libcult/cult/mm/arch/generic/counter.hxx @@ -0,0 +1,45 @@ +// file : cult/mm/arch/generic/counter.hxx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef CULT_MM_ARCH_GENERIC_COUNTER_HXX +#define CULT_MM_ARCH_GENERIC_COUNTER_HXX + +#include <cult/types/fundamental.hxx> +#include <cult/sched/spin.hxx> + +namespace Cult +{ + namespace MM + { + class Counter: public NonCopyable + { + public: + Counter (); + + // After failure assume the counter has its old value. + // + Void + inc_ref (); + + + // After failure assume the counter has its new value. + // + Boolean + dec_ref (); + + + Size + count () const; + + private: + Size value_; + mutable Sched::Spin spin_; + }; + } +} + +#include <cult/mm/arch/generic/counter.ixx> + +#endif // CULT_MM_ARCH_GENERIC_COUNTER_HXX diff --git a/libcult/cult/mm/arch/generic/counter.ixx b/libcult/cult/mm/arch/generic/counter.ixx new file mode 100644 index 0000000..648d28a --- /dev/null +++ b/libcult/cult/mm/arch/generic/counter.ixx @@ -0,0 +1,47 @@ +// file : cult/mm/arch/generic/counter.ixx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <cult/sched/lock.hxx> + +namespace Cult +{ + namespace MM + { + inline + Counter:: + Counter () + : value_ (1) + { + } + + inline + Void Counter:: + inc_ref () + { + Sched::Lock l (spin_); + + ++value_; + } + + inline + Boolean Counter:: + dec_ref () + { + Sched::Lock l (spin_); + + return --value_ == 0; + + } + + inline + Size Counter:: + count () const + { + Sched::Lock l (spin_); + + return value_; + } + } +} diff --git a/libcult/cult/mm/arch/i386/counter.hxx b/libcult/cult/mm/arch/i386/counter.hxx new file mode 100644 index 0000000..21f5f63 --- /dev/null +++ b/libcult/cult/mm/arch/i386/counter.hxx @@ -0,0 +1,43 @@ +// file : cult/mm/arch/i386/counter.hxx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef CULT_MM_ARCH_I386_COUNTER_HXX +#define CULT_MM_ARCH_I386_COUNTER_HXX + +#include <cult/types/fundamental.hxx> + +namespace Cult +{ + namespace MM + { + class Counter: public NonCopyable + { + public: + Counter (); + + // After failure assume the counter has its old value. + // + Void + inc_ref (); + + + // After failure assume the counter has its new value. + // + Boolean + dec_ref (); + + + Size + count () const; + + private: + Size value_; + }; + } +} + +#include <cult/mm/arch/i386/counter.ixx> + +#endif // CULT_MM_ARCH_I386_COUNTER_HXX diff --git a/libcult/cult/mm/arch/i386/counter.ixx b/libcult/cult/mm/arch/i386/counter.ixx new file mode 100644 index 0000000..8279394 --- /dev/null +++ b/libcult/cult/mm/arch/i386/counter.ixx @@ -0,0 +1,46 @@ +// file : cult/mm/arch/i386/counter.ixx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +namespace Cult +{ + namespace MM + { + inline + Counter:: + Counter () + : value_ (1) + { + } + + inline + Void Counter:: + inc_ref () + { + asm volatile ("lock; incl %0" + :"=m" (value_) + :"m" (value_)); + } + + inline + Boolean Counter:: + dec_ref () + { + register unsigned char r; + + asm volatile("lock; decl %0; setz %1" + :"=m" (value_), "=rm" (r) + :"m" (value_)); + + return r != 0; + } + + inline + Size Counter:: + count () const + { + return value_; + } + } +} diff --git a/libcult/cult/mm/arch/i386/i486/i586/i686/x86_64/counter.hxx b/libcult/cult/mm/arch/i386/i486/i586/i686/x86_64/counter.hxx new file mode 100644 index 0000000..5869b09 --- /dev/null +++ b/libcult/cult/mm/arch/i386/i486/i586/i686/x86_64/counter.hxx @@ -0,0 +1,43 @@ +// file : cult/mm/arch/i386/i486/i586/i686/x86_64/counter.hxx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef CULT_MM_ARCH_I386_I486_I586_I686_X86_64_COUNTER_HXX +#define CULT_MM_ARCH_I386_I486_I586_I686_X86_64_COUNTER_HXX + +#include <cult/types/fundamental.hxx> + +namespace Cult +{ + namespace MM + { + class Counter: public NonCopyable + { + public: + Counter (); + + // After failure assume the counter has its old value. + // + Void + inc_ref (); + + + // After failure assume the counter has its new value. + // + Boolean + dec_ref (); + + + Size + count () const; + + private: + Size value_; + }; + } +} + +#include <cult/mm/arch/i386/i486/i586/i686/x86_64/counter.ixx> + +#endif // CULT_MM_ARCH_I386_I486_I586_I686_X86_64_COUNTER_HXX diff --git a/libcult/cult/mm/arch/i386/i486/i586/i686/x86_64/counter.ixx b/libcult/cult/mm/arch/i386/i486/i586/i686/x86_64/counter.ixx new file mode 100644 index 0000000..9e9e7f4 --- /dev/null +++ b/libcult/cult/mm/arch/i386/i486/i586/i686/x86_64/counter.ixx @@ -0,0 +1,46 @@ +// file : cult/mm/arch/i386/i486/i586/i686/x86_64/counter.ixx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +namespace Cult +{ + namespace MM + { + inline + Counter:: + Counter () + : value_ (1) + { + } + + inline + Void Counter:: + inc_ref () + { + asm volatile ("lock; incq %0" + :"=m" (value_) + :"m" (value_)); + } + + inline + Boolean Counter:: + dec_ref () + { + register unsigned char r; + + asm volatile("lock; decq %0; setz %1" + :"=m" (value_), "=rm" (r) + :"m" (value_)); + + return r != 0; + } + + inline + Size Counter:: + count () const + { + return value_; + } + } +} diff --git a/libcult/cult/mm/bits/evptr.hxx b/libcult/cult/mm/bits/evptr.hxx new file mode 100644 index 0000000..02f0b48 --- /dev/null +++ b/libcult/cult/mm/bits/evptr.hxx @@ -0,0 +1,379 @@ +// file : cult/mm/bits/evptr.hxx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef CULT_MM_BITS_EVPTR_HXX +#define CULT_MM_BITS_EVPTR_HXX + +#include <cult/types/fundamental.hxx> + +#include <cult/meta/answer.hxx> + +#include <cult/mm/counter.hxx> +#include <cult/mm/exception.hxx> + +#include <cassert> // assert + +namespace Cult +{ + namespace MM + { + + //@@ Should be in mm/evptr.hxx + // + struct Clone: virtual Exception {}; + + template <typename X> + class Evptr; + + namespace Bits + { + template <typename x, Evptr<x> (x::*f) () const = &x::clone> + struct Helper; + + //@@ Should be generalized and moved to Cult::meta + // + template <typename X> + struct has_clone + { + template <typename y> + static Meta::Yes + test (Helper<y>*); + + template <typename> + static Meta::No + test (...); + + static Boolean const r = sizeof (test<X> (0)) == sizeof (Meta::Yes); + }; + + //@@ Need to incorporate tests for polymorpism and NonCopyable. + // + + template <typename X, Boolean = has_clone<X>::r> + struct Cloner; + + template <typename X> + struct Cloner<X, true> + { + static X* + clone (X const* cp) + { + return cp->clone ().release (); + } + }; + + template <typename X> + struct Cloner<X, false> + { + static X* + clone (X const*) + { + throw MM::Clone (); + } + }; + } + + namespace Bits + { + template <typename X> + class Transfer; + } + + namespace Bits + { + template <typename X> + class EvptrBase + { + protected: + ~EvptrBase () + { + free (p_ ? p_ : cp_, c_); + } + + EvptrBase (X* p, X const* cp, Counter* c, Boolean inc = true) + : p_ (p), cp_ (cp), c_ (c) + { + assert (!(p_ != 0 && cp_ != 0)); + + if (cp_ != 0 && c_ && inc) c_->inc_ref (); + } + + public: + X* + get () const + { + return get_ (); + } + + X* + release () + { + X* p (get_ ()); + + c_ = 0; + p_ = 0; + cp_ = 0; + + return p; + } + + Size + count () const + { + if (c_ == 0) throw NullPointer (); + return c_->count (); + } + + public: + // Conversion to Boolean. + // + typedef X* (EvptrBase::*BooleanConvertible)() const; + + operator BooleanConvertible () const + { + return c_ ? &EvptrBase::get : 0; + } + + protected: + Void + assign (X const* cp, Counter* c) + { + if (c_ && c_ == c) throw SelfAssignment (); + + free (p_ ? p_ : cp_, c_); + + if (c) c->inc_ref (); + + c_ = c; + p_ = 0; + cp_ = cp; + } + + Void + transfer (X* p, X const* cp, Counter* c) + { + free (p_ ? p_ : cp_, c_); + + c_ = c; + p_ = p; + cp_ = cp; + } + + protected: + X* + get_ () const + { + if (c_ == 0) return 0; + + assert (p_ != 0 || cp_ != 0); + + if (p_ != 0) + { + if (c_->count () == 1) return p_; + else + { + // Convert to shared case. + // + cp_ = p_; + p_ = 0; + } + } + + // Shared case with cloning. + // + + // Check if we are the sole owner. + // + if (c_->count () == 1) + { + // Convert to exclusive case. + // + p_ = const_cast<X*> (cp_); + cp_ = 0; + } + else + { + assert (cp_ != 0); + + //p_ = cp_->clone ().release (); + + p_ = Cloner<X>::clone (cp_); + + free (cp_, c_); + + cp_ = 0; + c_ = locate (p_, *counted); + } + + return p_; + } + + static Void + free (X const* p, Counter* c) + { + if (c && c->dec_ref ()) + { + assert (p != 0); + delete p; + } + } + + private: + template <typename> + friend class Evptr; + + template <typename> + friend class Transfer; + + mutable X* p_; + mutable X const* cp_; + mutable Counter* c_; + }; + + + template <typename X> + class EvptrBase<X const> + { + protected: + ~EvptrBase () + { + free (p_ ? p_ : cp_, c_); + } + + EvptrBase (X const* p, X const* cp, Counter* c, Boolean inc = true) + : p_ (p), cp_ (cp), c_ (c) + { + assert (!(p_ != 0 && cp_ != 0)); + + if (cp_ != 0 && c_ && inc) c_->inc_ref (); + } + + public: + X const* + get () + { + return get_ (); + } + + //@@ Should clone if shared? + // + X const* + release () + { + X const* p (get_ ()); + + c_ = 0; + p_ = 0; + cp_ = 0; + + return p; + } + + Size + count () const + { + if (c_ == 0) throw NullPointer (); + return c_->count (); + } + + public: + // Conversion to Boolean. + // + typedef X const* (EvptrBase::*BooleanConvertible)() const; + + operator BooleanConvertible () const + { + return c_ ? &EvptrBase::get : 0; + } + + protected: + Void + assign (X const* cp, Counter* c) + { + if (c_ && c_ == c) throw SelfAssignment (); + + free (p_ ? p_ : cp_, c_); + + if (c) c->inc_ref (); + + c_ = c; + p_ = 0; + cp_ = cp; + } + + Void + transfer (X const* p, X const* cp, Counter* c) + { + free (p_ ? p_ : cp_, c_); + + c_ = c; + p_ = p; + cp_ = cp; + } + + protected: + X const* + get_ () const + { + return p_ ? p_ : cp_; + } + + static Void + free (X const* p, Counter* c) + { + if (c && c->dec_ref ()) + { + assert (p != 0); + delete p; + } + } + + private: + template <typename> + friend class Evptr; + + template <typename> + friend class Transfer; + + mutable X const* p_; + mutable X const* cp_; + mutable Counter* c_; + }; + } + + namespace Bits + { + template <typename X> + class Transfer : protected EvptrBase<X> + { + public: + Transfer (Transfer<X> const& ct) + : EvptrBase<X> (ct.p_, ct.cp_, ct.c_, false) + { + Transfer<X>& t (const_cast<Transfer<X>&> (ct)); + + t.c_ = 0; + t.p_ = 0; + t.cp_ = 0; + } + + private: + Transfer (X* p, X const* cp, Counter* c) + : EvptrBase<X> (p, cp, c, false) + { + } + + template <typename> + friend class Evptr; + + private: + Transfer<X>& + operator= (Transfer<X> const&); + }; + } + } +} + +#endif // CULT_MM_BITS_EVPTR_HXX diff --git a/libcult/cult/mm/bits/shptr.hxx b/libcult/cult/mm/bits/shptr.hxx new file mode 100644 index 0000000..7089c53 --- /dev/null +++ b/libcult/cult/mm/bits/shptr.hxx @@ -0,0 +1,85 @@ +// file : cult/mm/bits/shptr.hxx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef CULT_MM_BITS_SHPTR_HXX +#define CULT_MM_BITS_SHPTR_HXX + +#include <cult/types/fundamental.hxx> + +#include <cult/mm/counter.hxx> +#include <cult/mm/exception.hxx> + +namespace Cult +{ + namespace MM + { + namespace Bits + { + template <typename X> + class Shptr + { + protected: + ~Shptr () + { + if (c_ && c_->dec_ref ()) delete p_; + } + + Shptr (X* p, Counter* c, Boolean inc = true) + : p_ (p), c_ (c) + { + if (c_ && inc) c_->inc_ref (); + } + + protected: + X* + release_ () throw () + { + X* tmp (p_); + + c_ = 0; + p_ = 0; + + return tmp; + } + + protected: + template<typename y> + Void + assign (Shptr<y> const& bp, Boolean inc = true) + { + assign (bp.p_, bp.c_, inc); + } + + Void + assign (X* p, Counter* c, Boolean inc) + { + if (c_ && c_ == c) throw SelfAssignment (); + + if (c_) + { + Counter* t (c_); + c_ = 0; + p_ = 0; + t->dec_ref (); + } + + if (c && inc) c->inc_ref (); + + p_ = p; + c_ = c; + } + + protected: + template <typename> + friend class Shptr; + + X* p_; + Counter* c_; + }; + } + } +} + +#endif // CULT_MM_BITS_SHPTR_HXX diff --git a/libcult/cult/mm/buffer.cxx b/libcult/cult/mm/buffer.cxx new file mode 100644 index 0000000..c3a28ff --- /dev/null +++ b/libcult/cult/mm/buffer.cxx @@ -0,0 +1,140 @@ +// file : cult/mm/buffer.cxx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <cult/mm/buffer.hxx> + +#include <cstdlib> // malloc, realloc, free +#include <cstring> // memcpy + +namespace Cult +{ + namespace MM + { + Buffer:: + ~Buffer () + { + std::free (b_); + } + + Buffer:: + Buffer (Size capacity, Size size) throw (ZeroCapacity, Bounds, BadAlloc) + : c_ (capacity), s_ (size), p_ (0) + { + if (c_ == 0) throw ZeroCapacity (); + if (s_ > c_) throw Bounds (); + + b_ = std::malloc (c_); + + if (b_ == 0) throw BadAlloc (); + } + + Buffer:: + Buffer (void const* p, size_t s) + : c_ (s), s_ (s), p_ (0) + { + if (c_ == 0) throw ZeroCapacity (); + + b_ = std::malloc (c_); + + if (b_ == 0) throw BadAlloc (); + + std::memcpy (b_, p, s); + } + + + Buffer:: + Buffer (Buffer const& b) + : c_ (b.c_), s_ (b.s_), p_ (b.p_) + { + b_ = std::malloc (c_); + + if (b_ == 0) throw BadAlloc (); + + std::memcpy (b_, b.b_, s_); + } +/* + Buffer& + operator= (Buffer const&) + { + return *this; + } +*/ + + // capacity + // + + Size Buffer:: + capacity () const throw () + { + return c_; + } + + Boolean Buffer:: + capacity (Size c) throw (ZeroCapacity, Bounds, BadAlloc) + { + if (c == 0) throw ZeroCapacity (); + if (s_ > c) throw Bounds (); + + Void* b (std::realloc (b_, c)); + + if (b == 0) throw BadAlloc (); + + c_ = c; + + if (b == b_) return false; + + b_ = b; + + return true; + } + + // size + // + + Size Buffer:: + size () const throw () + { + return s_; + } + + void Buffer:: + size (Size s) throw (Bounds) + { + if (s > c_ || p_ > s) throw Bounds (); + + s_ = s; + } + + // position + // + + Index Buffer:: + position () const throw () + { + return p_; + } + + Void Buffer:: + position (Index p) throw (Bounds) + { + if (p > s_) throw Bounds (); + + p_ = p; + } + + + Char const* Buffer:: + data () const + { + return reinterpret_cast<Char const*> (b_); + } + + Char* Buffer:: + data () + { + return reinterpret_cast<Char*> (b_); + } + } +} diff --git a/libcult/cult/mm/buffer.hxx b/libcult/cult/mm/buffer.hxx new file mode 100644 index 0000000..d50c824 --- /dev/null +++ b/libcult/cult/mm/buffer.hxx @@ -0,0 +1,80 @@ +// file : cult/mm/buffer.hxx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef CULT_MM_BUFFER_HXX +#define CULT_MM_BUFFER_HXX + +#include <cult/types/fundamental.hxx> + +#include <cult/mm/exception.hxx> + +namespace Cult +{ + namespace MM + { + //@@ why can't capacity be zero? + // + + class Buffer + { + public: + struct Bounds: virtual Exception {}; + struct ZeroCapacity: virtual Exception {}; + + public: + virtual + ~Buffer (); + + Buffer (Size capacity, Size size = 0) + throw (ZeroCapacity, Bounds, BadAlloc); + + Buffer (Void const*, Size size); + + Buffer (Buffer const& other); + + private: + Buffer& + operator= (Buffer const&); + + public: + Size + capacity () const throw (); + + // Returns true if the underlying buffer has been moved. + // + Boolean + capacity (Size capacity) throw (ZeroCapacity, Bounds, BadAlloc); + + public: + Size + size () const throw (); + + Void + size (Size size) throw (Bounds); + + public: + Index + position () const throw (); + + Void + position (Index) throw (Bounds); + + public: + Char const* + data () const; + + Char* + data (); + + private: + Void* b_; + Size c_, s_, p_; + }; + } + + using MM::Buffer; +} + +#endif // CULT_MM_BUFFER_HXX diff --git a/libcult/cult/mm/counter.cxx b/libcult/cult/mm/counter.cxx new file mode 100644 index 0000000..7d43e3c --- /dev/null +++ b/libcult/cult/mm/counter.cxx @@ -0,0 +1,14 @@ +// file : cult/mm/counter.cxx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <cult/mm/counter.hxx> + +namespace Cult +{ + namespace MM + { + StaticPtr<Key<Counter> > counted; + } +} diff --git a/libcult/cult/mm/counter.hxx b/libcult/cult/mm/counter.hxx new file mode 100644 index 0000000..12e1e70 --- /dev/null +++ b/libcult/cult/mm/counter.hxx @@ -0,0 +1,79 @@ +// file : cult/mm/counter.hxx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef CULT_MM_COUNTER_HXX +#define CULT_MM_COUNTER_HXX + +#ifdef CULT_THREADS + +// Multi-threaded version is architecture-specific. +// +#include <cult/mm/arch/counter.hxx> + +#else + +// Single-threaded version. +// + +#include <cult/types/fundamental.hxx> + +namespace Cult +{ + namespace MM + { + class Counter: public NonCopyable + { + public: + Counter (); + + // After failure assume the counter has its old value. + // + Void + inc_ref (); + + + // After failure assume the counter has its new value. + // + Boolean + dec_ref (); + + + Size + count () const; + + private: + Size value_; + }; + } +} + +#include <cult/mm/counter.ixx> + +#endif // CULT_THREADS + + +#include <cult/mm/new.hxx> +#include <cult/mm/static-ptr.hxx> + +namespace Cult +{ + namespace MM + { + extern StaticPtr<Key<Counter> > counted; + + + // Non-member inc_ref. Especially useful for messing with `this'. + // + template <typename X> + X* + inc_ref (X* p) + { + locate (p, *counted)->inc_ref (); + return p; + } + } +} + +#endif // CULT_MM_COUNTER_HXX diff --git a/libcult/cult/mm/counter.ixx b/libcult/cult/mm/counter.ixx new file mode 100644 index 0000000..f807552 --- /dev/null +++ b/libcult/cult/mm/counter.ixx @@ -0,0 +1,38 @@ +// file : cult/mm/counter.ixx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +namespace Cult +{ + namespace MM + { + inline + Counter:: + Counter () + : value_ (1) + { + } + + inline + Void Counter:: + inc_ref () + { + ++value_; + } + + inline + Boolean Counter:: + dec_ref () + { + return --value_ == 0; + } + + inline + Size Counter:: + count () const + { + return value_; + } + } +} diff --git a/libcult/cult/mm/evptr.hxx b/libcult/cult/mm/evptr.hxx new file mode 100644 index 0000000..ed0bd93 --- /dev/null +++ b/libcult/cult/mm/evptr.hxx @@ -0,0 +1,221 @@ +// file : cult/mm/evptr.hxx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef CULT_MM_EVPTR_HXX +#define CULT_MM_EVPTR_HXX + +#include <cult/types/fundamental.hxx> + +#include <cult/mm/exception.hxx> +#include <cult/mm/bits/evptr.hxx> + +#include <typeinfo> //@@ tmp + +namespace Cult +{ + namespace MM + { + // Leaks resource should dec_ref fail. + // + template <typename X> + class Evptr: public Bits::EvptrBase<X> + { + typedef Bits::EvptrBase<X> Base; + + public: + Evptr (X* p = 0) + : Base (p, 0, locate (p, *counted)) + { + } + + Evptr (Evptr const& ep) + : Base (0, ep.cp_ ? ep.cp_ : ep.p_, ep.c_) + { + } + + template <typename Y> + Evptr (Bits::Transfer<Y> const& ct) + : Base (ct.p_, ct.cp_, ct.c_, false) + { + Bits::Transfer<Y>& t (const_cast<Bits::Transfer<Y>&> (ct)); + + t.c_ = 0; + t.p_ = 0; + t.cp_ = 0; + } + + template <typename Y> + Evptr (Evptr<Y> const& ep) + : Base (0, ep.cp_ ? ep.cp_ : ep.p_, ep.c_) + { + //@@ + //printf ("X : %s\n", typeid (X).name ()); + //printf ("Y : %s\n", typeid (Y).name ()); + } + + template <typename Y> + Evptr (Evptr<Y const> const& ep) + : Base (0, ep.cp_ ? ep.cp_ : ep.p_, ep.c_) + { + //@@ + //printf ("X : %s\n", typeid (X).name ()); + //printf ("Y : %s const\n", typeid (Y).name ()); + } + + public: + // After failure leaves object in destructable state. + // + Evptr& + operator= (Evptr const& ep) + { + this->assign (ep.cp_ ? ep.cp_ : ep.p_, ep.c_); + + return *this; + } + + template <typename Y> + Evptr& + operator= (Evptr<Y> const& ep) + { + this->assign (ep.cp_ ? ep.cp_ : ep.p_, ep.c_); + + return *this; + } + + template <typename Y> + Evptr& + operator= (Bits::Transfer<Y> const& ct) + { + Bits::Transfer<Y>& t (const_cast<Bits::Transfer<Y>&> (ct)); + + transfer (t.p_, t.cp_, t.c_); + + t.c_ = 0; + t.p_ = 0; + t.cp_ = 0; + + return *this; + } + + protected: + using Base::get_; + + public: + X* + operator-> () const + { + if (X* p = get_ ()) return p; + + throw NullPointer (); + } + + X& + operator* () const + { + if (X* p = get_ ()) return *p; + + throw NullPointer (); + } + + Bits::Transfer<X> + operator~ () + { + Counter* c (c_); + X* p (p_); + X const* cp (cp_); + + c_ = 0; + p_ = 0; + cp_ = 0; + + return Bits::Transfer<X> (p, cp, c); + } + + public: + using Base::p_; + using Base::cp_; + using Base::c_; + + // Object pointed to by this becomes null. + // + template<typename Y> + Evptr<Y> + s_cast () + { + if (p_) + { + Counter* c (c_); + Y* p (static_cast<Y*> (p_)); + + + c_ = 0; + p_ = 0; + cp_ = 0; + + return Evptr<Y> (p, 0, c); + } + else + { + Counter* c (c_); + Y const* cp (static_cast<Y const*> (cp_)); + + c_ = 0; + p_ = 0; + cp_ = 0; + + return Evptr<Y> (0, cp, c); + } + } + + // Object pointed to by this becomes null if dynamic_cast succeeds. + // + template<typename Y> + Evptr<Y> + d_cast () + { + if (p_) + { + if (Y* p = dynamic_cast<Y*> (p_)) + { + Counter* c (c_); + + c_ = 0; + p_ = 0; + cp_ = 0; + + return Evptr<Y> (p, 0, c); + } + } + else if (Y const* cp = dynamic_cast<Y const*> (cp_)) + { + Counter* c (c_); + + c_ = 0; + p_ = 0; + cp_ = 0; + + return Evptr<Y> (0, cp, c); + } + + return Evptr<Y> (0); + } + + + private: + Evptr (X* p, X const* cp, Counter* c) // for *_cast + : Base (p, cp, c, false) + { + } + + private: + template <typename> + friend class Evptr; + }; + } + + using MM::Evptr; +} + +#endif // CULT_MM_EVPTR_HXX diff --git a/libcult/cult/mm/exception.hxx b/libcult/cult/mm/exception.hxx new file mode 100644 index 0000000..38b3412 --- /dev/null +++ b/libcult/cult/mm/exception.hxx @@ -0,0 +1,31 @@ +// file : cult/mm/exceptions.hxx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef CULT_MM_EXCEPTIONS_HXX +#define CULT_MM_EXCEPTIONS_HXX + +#include <cult/eh/exception.hxx> + +#include <new> // std::bad_alloc + +namespace Cult +{ + namespace MM + { + typedef std::bad_alloc StdBadAlloc; + + struct Exception: virtual EH::Exception {}; + + struct BadAlloc: virtual Exception, StdBadAlloc {}; + + //@@ who uses this? + // + struct SelfAssignment: virtual Exception {}; + + struct NullPointer : virtual Exception {}; + } +} + +#endif // CULT_MM_EXCEPTIONS_HXX diff --git a/libcult/cult/mm/new.cxx b/libcult/cult/mm/new.cxx new file mode 100644 index 0000000..2443f1f --- /dev/null +++ b/libcult/cult/mm/new.cxx @@ -0,0 +1,192 @@ +// file : cult/mm/new.cxx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <cult/mm/new.hxx> +#include <cult/mm/counter.hxx> + +#include <cstdlib> // std::malloc, std::free + +#include <cult/trace/stream.hxx> + +namespace +{ + Cult::Trace::Stream& + tout () + { + static Cult::Trace::Stream o ("Cult::MM", 7); + return o; + } +} + +namespace Cult +{ + namespace MM + { + using Bits::Offset; + + + namespace + { + Void* + allocate (Size size, KeyList const& l) throw (StdBadAlloc) + { + Size zone_size (0); + + for (KeyList::Iterator i (l.begin ()); i != l.end (); ++i) + { + zone_size += (*i)->size (); + } + + Size map_size ((l.size () + 1) * sizeof (Offset)); + + //tout () << "allocate: size: " << size + // << " map size: " << map_size + // << " zone size: " << zone_size; + + Char* block (reinterpret_cast<Char*> ( + std::malloc (size + zone_size + map_size))); + + Char* base (block + zone_size + map_size); + + Offset* map (reinterpret_cast<Offset*> (base) - 1); // map bottom + Char* zone (block + zone_size); // zone bottom + + //tout () << 9 << "allocate:" << '\n' + // << " block : " << (Void*) block << '\n' + // << " base : " << (Void*) base << '\n' + // << " map : " << (Void*) zone << '\n' + // << " zone : " << (Void*) block; + + + // Initialize zone map and construct services. + // + for (KeyList::Iterator i (l.begin ()); i != l.end (); ++i) + { + KeyBase const& k (**i); + + zone -= k.size (); // now at the beginning of the block + + try + { + k.construct (zone); + } + catch (...) + { + std::free (block); + throw StdBadAlloc (); + } + + map->key = &k; + map->offset = base - zone; + + --map; + } + + // Last element. + // + map->key = 0; + map->offset = 0; + + return base; + } + + Void + free (Void* p) throw () + { + Char* base (reinterpret_cast<Char*> (p)); + + Offset* map (reinterpret_cast<Offset*> (base) - 1); // Map bottom. + + Char* block (reinterpret_cast<Char*> (map)); + + while (map->key != 0) + { + Char* zone (base - map->offset); + + block = zone; // Last zone is the begining of the block. + + map->key->destroy (zone); + + --map; + } + + //tout () << 9 << "free:" << '\n' + // << " block : " << (Void*) block; + + std::free (block); + } + } + } +} + +namespace Cult +{ + namespace MM + { + namespace Bits + { +#ifdef CULT_THREADS + __thread + Block* first_ __attribute__ ((tls_model ("initial-exec"))) = 0; +#else + Block* first_ = 0; +#endif + } + } +} + +using namespace Cult; + +Void* +operator new (Size s) throw (MM::StdBadAlloc) +{ + return MM::allocate (s, *MM::counted); +} + +Void* +operator new (Size size, MM::KeyList const& list, MM::Bits::Block const& b) + throw (MM::StdBadAlloc) +{ + Void* p (MM::allocate (size, list)); + + const_cast<MM::Bits::Block&> (b).set (p, size); + + return p; +} + +Void +operator delete (Void* p) throw () +{ + if (p) MM::free (p); +} + +Void +operator delete (Void* p, Size) throw () +{ + if (p) MM::free (p); +} + +namespace Cult +{ + namespace MM + { + + Void* ServiceAwareObject:: + operator new (Size size, Bits::Block const& block) + { + Void* p (allocate (size, *MM::counted)); + + const_cast<MM::Bits::Block&> (block).set (p, size); + + return p; + } + + Void ServiceAwareObject:: + operator delete (Void* p, Size) + { + if (p) MM::free (p); + } + } +} diff --git a/libcult/cult/mm/new.hxx b/libcult/cult/mm/new.hxx new file mode 100644 index 0000000..2b815b4 --- /dev/null +++ b/libcult/cult/mm/new.hxx @@ -0,0 +1,297 @@ +// file : cult/mm/new.hxx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef CULT_MM_NEW_HXX +#define CULT_MM_NEW_HXX + +#include <cult/config.hxx> + +#include <cult/types/fundamental.hxx> + +#include <cult/mm/exception.hxx> + +#include <cult/meta/polymorphic-p.hxx> + +namespace Cult +{ + namespace MM + { + class KeyBase + { + public: + // Returned size should be a multiple of a "perfect" size, + // sizeof (size_t) * 2. + // + virtual Size + size () const = 0; + + virtual Void + construct (Void* p) const = 0; + + virtual Void + destroy (Void* p) const = 0; + + virtual + ~KeyBase () + { + } + }; + + + template <typename X> + class Key: public KeyBase, public NonCopyable + { + public: + Key () + { + } + + virtual Size + size () const + { + //@@ I can do this transparently in allocate(). + // + Size align (sizeof (Size) * 2); + Size size (sizeof (X)); + + return align * (size / align + ((size % align) ? 1 : 0)); + } + + virtual Void + construct (Void* p) const + { + new (p) X; + } + + virtual Void + destroy (Void* p) const + { + reinterpret_cast<X*> (p)->~X (); + } + }; + + + struct Absent : virtual Exception {}; + + + namespace Bits + { + Void* + locate (Void const* p, KeyBase const& k) throw (Absent); + + template <typename X, Boolean poly = Meta::polymorphic_p<X>::r> + struct Locator; + + template <typename X> + struct Locator<X, false> + { + static Void* + locate (X* p, KeyBase const& k) throw (Absent) + { + return Bits::locate (p, k); + } + }; + + template <typename X> + struct Locator<X, true> + { + static Void* + locate (X* p, KeyBase const& k) throw (Absent) + { + return Bits::locate (dynamic_cast<Void const*> (p), k); + } + }; + + // Note that this structure has a "perfect" size: sizeof (size_t) * 2. + // If its size is added to the properly-aligned pointer the result will + // still be a properly-aligned pointer. + // + struct Offset //@@ better name would be OffsetMap + { + KeyBase const* key; + Size offset; + }; + } + + + template <typename X, typename Y> + inline + Y* + locate (X* p, Key<Y> const& k) throw (Absent) + { + return p ? reinterpret_cast<Y*> (Bits::Locator<X>::locate (p, k)) : 0; + } + + class KeyList + { + public: + KeyList () + : size_ (0) + { + } + + KeyList (KeyBase const& k) + : size_ (1) + { + keys_[0] = &k; + } + + friend KeyList + operator| (KeyList const& list, KeyBase const& key); + + public: + typedef KeyBase const* const* Iterator; + + Iterator + begin () const + { + return keys_; + } + + Iterator + end () const + { + return &(keys_[size_]); + } + + Size + size () const + { + return size_; + } + + private: + KeyBase const* keys_[8]; + Size size_; + }; + + inline KeyList + operator| (KeyList const& list, KeyBase const& key) + { + //@@ Need to throw on overflow. + // + KeyList r (list); + r.keys_[r.size_++] = &key; + return r; + } + + inline KeyList + operator| (KeyBase const& a, KeyBase const& b) + { + return KeyList (a) | b; + } + } +} + +namespace Cult +{ + namespace MM + { + namespace Bits + { + class Block; + +#ifdef CULT_THREADS + extern __thread + Block* first_ __attribute__ ((tls_model ("initial-exec"))); +#else + extern + Block* first_; +#endif + + class Block + { + public: + Block () + { + } + + ~Block () + { + //@@ assert (first_ == this); + first_ = next_; + } + + Void + set (Void* p, Size size) + { + p_ = reinterpret_cast<Char*> (p); + size_ = size; + + next_ = first_; + first_ = this; + } + + public: + static Void* + locate (Void const* p) + { + return locate (p, first_); + } + + private: + static Void* + locate (Void const* p, Block* b) + { + if (b) + { + if (p >= b->p_ && p < b->p_ + b->size_) return b->p_; + else return locate (p, b->next_); + } + + return 0; + } + + private: + Char* p_; + Size size_; + + Block* next_; + }; + } + } +} + +Cult::Void* +operator new (Cult::Size) throw (Cult::MM::StdBadAlloc); + +Cult::Void* +operator new (Cult::Size, + Cult::MM::KeyList const&, + Cult::MM::Bits::Block const& = Cult::MM::Bits::Block ()) + throw (Cult::MM::StdBadAlloc); + +//@@ Need a special operator new that just allocates memory (to use in +// static_ptr for instance). +// + +Cult::Void +operator delete (Cult::Void*) throw (); + +Cult::Void +operator delete (Cult::Void*, Cult::Size) throw (); + + +namespace Cult +{ + namespace MM + { + // Inherit from this class if you plan to access service objects + // from a ctor. + // + struct ServiceAwareObject + { + static Void* + operator new (Size s, Bits::Block const& b = Bits::Block ()); + + static Void + operator delete (Void* p, Size s); + }; + } +} + +#include <cult/mm/new.ixx> + +#endif // CULT_MM_NEW_HXX diff --git a/libcult/cult/mm/new.ixx b/libcult/cult/mm/new.ixx new file mode 100644 index 0000000..c3287fb --- /dev/null +++ b/libcult/cult/mm/new.ixx @@ -0,0 +1,36 @@ +// file : cult/mm/new.ixx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +namespace Cult +{ + namespace MM + { + namespace Bits + { + inline + Void* + locate (Void const* p, KeyBase const& k) throw (Absent) + { + if (Void* bp = Block::locate (p)) p = bp; + + Char* base (reinterpret_cast<Char*> (const_cast<Void*> (p))); + + Offset* map (reinterpret_cast<Offset*> (base) - 1); // Map bottom. + + while (map->key != 0) + { + if (map->key == &k) + { + return base - map->offset; + } + + --map; + } + + throw Absent (); + } + } + } +} diff --git a/libcult/cult/mm/shptr.hxx b/libcult/cult/mm/shptr.hxx new file mode 100644 index 0000000..6630b1c --- /dev/null +++ b/libcult/cult/mm/shptr.hxx @@ -0,0 +1,139 @@ +// file : cult/mm/Shptr.hxx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef CULT_MM_SHPTR_HXX +#define CULT_MM_SHPTR_HXX + +#include <cult/types/fundamental.hxx> + +#include <cult/mm/exception.hxx> +#include <cult/mm/bits/shptr.hxx> + +namespace Cult +{ + namespace MM + { + // Leaks resource should dec_ref fail. + // + template <typename X> + class Shptr : public Bits::Shptr<X> + { + typedef Bits::Shptr<X> Base; + + public: + Shptr (X* p = 0) + : Base (p, locate (p, *counted), false) + { + } + + Shptr (Shptr const& ap) + : Base (ap.p_, ap.c_) + { + } + + template <typename Y> + Shptr (Shptr<Y> const& ap) + : Base (ap.p_, ap.c_) + { + } + + public: + // After failure leaves object in destructable state. + // + Shptr& + operator= (Shptr const& ap) + { + this->assign (ap); + return *this; + } + + template <typename Y> + Shptr& + operator= (Shptr<Y> const& ap) + { + this->assign (ap); + return *this; + } + + public: + X* + operator-> () const + { + if (p_ == 0) + throw NullPointer (); + + return p_; + } + + X& + operator* () const + { + if (p_ == 0) + throw NullPointer (); + + return *p_; + } + + // conversion to bool + // + typedef X* (Shptr::*BooleanConvertible)() const; + + operator BooleanConvertible () const throw () + { + return p_ ? &Shptr<X>::operator-> : 0; + } + + public: + X* + get () const throw () + { + return p_; + } + + X* + release () throw () + { + return release_ (); + } + + Size + count () const + { + if (p_ == 0) + throw NullPointer (); + + return c_->count (); + } + + public: + template<typename Y> + Shptr<Y> + d_cast () const + { + Y* p (dynamic_cast<Y*> (p_)); + return Shptr<Y> (p, p ? c_ : 0); + } + + private: + Shptr (X* p, Counter* c) + : Base (p, c) + { + } + + template <typename> + friend class Shptr; + + protected: + using Base::release_; + + using Base::p_; + using Base::c_; + }; + } + + using MM::Shptr; +} + +#endif // CULT_MM_SHPTR_HXX diff --git a/libcult/cult/mm/static-ptr.hxx b/libcult/cult/mm/static-ptr.hxx new file mode 100644 index 0000000..d3dffbd --- /dev/null +++ b/libcult/cult/mm/static-ptr.hxx @@ -0,0 +1,75 @@ +// file : cult/mm/static-ptr.hxx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef CULT_MM_STATIC_PTR_HXX +#define CULT_MM_STATIC_PTR_HXX + +#include <cult/types/fundamental.hxx> + +#include <cult/mm/new.hxx> // operator new + +namespace Cult +{ + namespace MM + { + namespace Bits + { + struct Default {}; + } + + template <typename X, typename Id = Bits::Default> + class StaticPtr: public NonCopyable + { + public: + X& + operator* () const + { + return instance (); + } + + X* + operator-> () const + { + return &instance (); + } + + public: + StaticPtr () + { + if (i_ == 0) i_ = instance_ (); + } + + ~StaticPtr () + { + // Note that we don't delete the object in order to avoid + // destruction order problem. + // + } + + private: + static X& + instance () + { + if (i_ == 0) i_ = instance_ (); + + return *i_; + } + + static X* + instance_ () + { + static X* i = new (KeyList ()) X; + return i; + } + + static X* i_; + }; + + template <typename X, typename Id> + X* StaticPtr<X, Id>::i_ = 0; + } +} + +#endif // CULT_MM_STATIC_PTR_HXX diff --git a/libcult/cult/os/exception.cxx b/libcult/cult/os/exception.cxx new file mode 100644 index 0000000..1fd7e3b --- /dev/null +++ b/libcult/cult/os/exception.cxx @@ -0,0 +1,13 @@ +// file : cult/os/exception.cxx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <cult/os/exception.hxx> + +namespace Cult +{ + namespace OS + { + } +} diff --git a/libcult/cult/os/exception.hxx b/libcult/cult/os/exception.hxx new file mode 100644 index 0000000..3c4164e --- /dev/null +++ b/libcult/cult/os/exception.hxx @@ -0,0 +1,46 @@ +// file : cult/os/exception.hxx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef CULT_OS_EXCEPTION_HXX +#define CULT_OS_EXCEPTION_HXX + +#include <cult/types/fundamental.hxx> + +#include <cult/eh/exception.hxx> + +#include <errno.h> + +namespace Cult +{ + namespace OS + { + class Exception : public virtual EH::Exception + { + public: + Exception (Int code = error_code ()) throw () + : code_ (code) + { + } + + Int + code () const throw () + { + return code_; + } + + private: + static Int + error_code () throw () + { + return errno; + } + + private: + Int code_; + }; + } +} + +#endif // CULT_OS_EXCEPTION_HXX diff --git a/libcult/cult/os/net/address.cxx b/libcult/cult/os/net/address.cxx new file mode 100644 index 0000000..7860b29 --- /dev/null +++ b/libcult/cult/os/net/address.cxx @@ -0,0 +1,37 @@ +// file : cult/os/net/address.cxx +// author : Boris Kolpackov <boris@kolpackov.Net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <cult/os/net/address.hxx> + +namespace Cult +{ + namespace OS + { + namespace Net + { + Address:: + Address () + { + } + + Address:: + ~Address () + { + } + + Address:: + Address (Address const&) + { + } + + Address& Address:: + operator= (Address const&) + { + return *this; + } + } + } +} + diff --git a/libcult/cult/os/net/address.hxx b/libcult/cult/os/net/address.hxx new file mode 100644 index 0000000..2923ec6 --- /dev/null +++ b/libcult/cult/os/net/address.hxx @@ -0,0 +1,60 @@ +// file : cult/os/net/address.hxx +// author : Boris Kolpackov <boris@kolpackov.Net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef CULT_OS_NET_ADDRESS_HXX +#define CULT_OS_NET_ADDRESS_HXX + +#include <cult/types.hxx> + +#include <cult/os/exception.hxx> + +#include <sys/socket.h> // sa_family_t, sockaddr + +namespace Cult +{ + namespace OS + { + namespace Net + { + class Address + { + public: + struct Exception: virtual OS::Exception {}; + + struct Invalid : virtual Exception {}; + + public: + Address (); + + virtual + ~Address (); + + public: + //@@ need to wrap family + // + virtual sa_family_t + familiy () const = 0; + + virtual sockaddr const* + raw_addr () const = 0; + + virtual Size + raw_size () const = 0; + + + //@@ Should it be Clonable rather? + // + protected: + Address (Address const&); + + Address& + operator= (Address const&); + }; + } + } +} + + +#endif // CULT_OS_NET_ADDRESS_HXX diff --git a/libcult/cult/os/net/datagram-socket.cxx b/libcult/cult/os/net/datagram-socket.cxx new file mode 100644 index 0000000..b023b46 --- /dev/null +++ b/libcult/cult/os/net/datagram-socket.cxx @@ -0,0 +1,26 @@ +// file : cult/os/net/datagram-socket.cxx +// author : Boris Kolpackov <boris@kolpackov.Net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <cult/os/net/datagram-socket.hxx> + +namespace Cult +{ + namespace OS + { + namespace Net + { + DatagramSocket:: + DatagramSocket () + { + } + + DatagramSocket:: + ~DatagramSocket () + { + } + } + } +} + diff --git a/libcult/cult/os/net/datagram-socket.hxx b/libcult/cult/os/net/datagram-socket.hxx new file mode 100644 index 0000000..62d1a07 --- /dev/null +++ b/libcult/cult/os/net/datagram-socket.hxx @@ -0,0 +1,57 @@ +// file : cult/os/net/datagram-socket.hxx +// author : Boris Kolpackov <boris@kolpackov.Net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef CULT_OS_NET_DATAGRAM_SOCKET_HXX +#define CULT_OS_NET_DATAGRAM_SOCKET_HXX + +#include <cult/types.hxx> + +#include <cult/os/net/address.hxx> +#include <cult/os/net/socket.hxx> + +#include <sys/socket.h> // SOCK_DGRAM + +namespace Cult +{ + namespace OS + { + namespace Net + { + class DatagramSocket: public virtual Socket + { + protected: + DatagramSocket (); + + virtual + ~DatagramSocket (); + + public: + virtual Int + type () const + { + return SOCK_DGRAM; + } + + public: + virtual Size + send (Void const* buf, Size size, Address const& addr) = 0; + + virtual Size + recv (Void* buf, Size size) = 0; + + /* + virtual Boolean + recv (Void* buf, + Size size, + Size& received, + OS::Time const& timeout) = 0; + */ + }; + } + } +} + + +#endif // CULT_OS_NET_DATAGRAM_SOCKET_HXX diff --git a/libcult/cult/os/net/ipv4/address.cxx b/libcult/cult/os/net/ipv4/address.cxx new file mode 100644 index 0000000..2507ed6 --- /dev/null +++ b/libcult/cult/os/net/ipv4/address.cxx @@ -0,0 +1,37 @@ +// file : cult/os/net/ipv4/address.cxx +// author : Boris Kolpackov <boris@kolpackov.Net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <cult/os/net/ipv4/address.hxx> + +#include <ostream> + +namespace Cult +{ + namespace OS + { + namespace Net + { + namespace IPv4 + { + std::ostream& + operator<< (std::ostream& os, Address const& addr) + { + char str[INET_ADDRSTRLEN]; + + if (inet_ntop (AF_INET, + &addr.addr_.sin_addr, + str, + INET_ADDRSTRLEN) == 0) + { + throw Address::Invalid (); + } + + return os << str << ":" << addr.port (); + } + } + } + } +} + diff --git a/libcult/cult/os/net/ipv4/address.hxx b/libcult/cult/os/net/ipv4/address.hxx new file mode 100644 index 0000000..9168507 --- /dev/null +++ b/libcult/cult/os/net/ipv4/address.hxx @@ -0,0 +1,143 @@ +// file : cult/os/net/ipv4/address.hxx +// author : Boris Kolpackov <boris@kolpackov.Net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef CULT_OS_NET_IPV4_ADDRESS_HXX +#define CULT_OS_NET_IPV4_ADDRESS_HXX + +#include <cult/types.hxx> + +#include <cult/os/net/address.hxx> + +#include <netinet/in.h> // IPv4 types (sockaddr_in, etc) +#include <arpa/inet.h> // hto{n,h}{s,l}, iNet_pton + +#include <iosfwd> +#include <cstring> // memset + +namespace Cult +{ + namespace OS + { + namespace Net + { + namespace IPv4 + { + class Address: public Net::Address + { + public: + Address () + { + std::memset (&addr_, 0, sizeof (addr_)); + } + + Address (sockaddr_in const& addr) + { + if (addr.sin_family != AF_INET) + throw Invalid (); + + std::memset (&addr_, 0, sizeof (addr_)); + + addr_.sin_family = AF_INET; + addr_.sin_addr.s_addr = addr.sin_addr.s_addr; + addr_.sin_port = addr.sin_port; + } + + Address (in_addr_t host_addr, in_port_t host_port) + { + std::memset (&addr_, 0, sizeof (addr_)); + + addr_.sin_family = AF_INET; + addr_.sin_addr.s_addr = htonl (host_addr); + addr_.sin_port = htons (host_port); + } + + Address (String const& host_addr, in_port_t host_port) + { + std::memset (&addr_, 0, sizeof (addr_)); + + addr_.sin_family = AF_INET; + addr_.sin_port = htons (host_port); + + if (inet_pton (AF_INET, host_addr.c_str (), &addr_.sin_addr) <= 0) + throw Invalid (); + } + + public: + virtual sa_family_t + familiy () const + { + return AF_INET; + } + + virtual sockaddr const* + raw_addr () const + { + return reinterpret_cast<sockaddr const*> (&addr_); + } + + virtual Size + raw_size () const + { + return sizeof (addr_); + } + + public: + sockaddr_in const& + addr () const + { + return addr_; + } + + in_addr_t + ip () const + { + return ntohl (addr_.sin_addr.s_addr); + } + + in_port_t + port () const + { + return ntohs (addr_.sin_port); + } + + public: + friend + Boolean + operator< (Address const& x, Address const& y) + { + return (x.addr_.sin_addr.s_addr < y.addr_.sin_addr.s_addr) || + ((x.addr_.sin_addr.s_addr == y.addr_.sin_addr.s_addr) && + (x.addr_.sin_port < y.addr_.sin_port)); + } + + friend + Boolean + operator== (Address const& x, Address const& y) + { + return (x.addr_.sin_addr.s_addr == y.addr_.sin_addr.s_addr) && + (x.addr_.sin_port == y.addr_.sin_port); + } + + friend + Boolean + operator!= (Address const& x, Address const& y) + { + return !(x == y); + } + + friend + std::ostream& + operator<< (std::ostream&, Address const&); + + private: + sockaddr_in addr_; + }; + } + } + } +} + + +#endif // CULT_OS_NET_IPV4_ADDRESS_HXX diff --git a/libcult/cult/os/net/ipv4/datagram-socket.cxx b/libcult/cult/os/net/ipv4/datagram-socket.cxx new file mode 100644 index 0000000..ce470cc --- /dev/null +++ b/libcult/cult/os/net/ipv4/datagram-socket.cxx @@ -0,0 +1,20 @@ +// file : cult/os/net/ipv4/datagram-socket.cxx +// author : Boris Kolpackov <boris@kolpackov.Net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <cult/os/net/ipv4/datagram-socket.hxx> + +namespace Cult +{ + namespace OS + { + namespace Net + { + namespace IPv4 + { + } + } + } +} + diff --git a/libcult/cult/os/net/ipv4/datagram-socket.hxx b/libcult/cult/os/net/ipv4/datagram-socket.hxx new file mode 100644 index 0000000..2aad43f --- /dev/null +++ b/libcult/cult/os/net/ipv4/datagram-socket.hxx @@ -0,0 +1,282 @@ +// file : cult/os/net/ipv4/datagram-socket.hxx +// author : Boris Kolpackov <boris@kolpackov.Net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef CULT_OS_NET_IPV4_DATAGRAM_SOCKET_HXX +#define CULT_OS_NET_IPV4_DATAGRAM_SOCKET_HXX + +#include <cult/types.hxx> + +#include <cult/os/net/address.hxx> +#include <cult/os/net/datagram-socket.hxx> +#include <cult/os/net/ipv4/address.hxx> + +#include <unistd.h> // close +#include <sys/socket.h> // socket, bind, sendto, revcfrom + +namespace Cult +{ + namespace OS + { + namespace Net + { + namespace IPv4 + { + class DatagramSocket: public virtual Net::DatagramSocket + { + public: + virtual + ~DatagramSocket () + { + ::close (sock_); + } + + DatagramSocket () + { + sock_ = ::socket (AF_INET, SOCK_DGRAM, IPPROTO_UDP); + + if (sock_ == -1) + throw Exception (); //@@ + } + + DatagramSocket (Address const& addr) + { + sock_ = ::socket (AF_INET, SOCK_DGRAM, IPPROTO_UDP); + + if (sock_ == -1) + throw Exception (); //@@ + + if (::bind (sock_, addr.raw_addr (), addr.raw_size ()) == -1) + throw Exception (); //@@ + } + + public: + virtual sa_family_t + familiy () const + { + return AF_INET; + } + + virtual Int + protocol () const + { + return IPPROTO_UDP; + } + + // Options. + // + public: + Size + recv_buffer_size () const + { + Int r; + socklen_t s (sizeof (r)); + + if (::getsockopt (sock_, + SOL_SOCKET, + SO_RCVBUF, + &r, + &s) == -1) + { + throw Exception (); //@@ + } + + return static_cast<Size> (r); + } + + Void + recv_buffer_size (Size size) + { + Int r (static_cast<Int> (size)); + + if (::setsockopt (sock_, + SOL_SOCKET, + SO_RCVBUF, + &r, + sizeof (r)) == -1) + { + throw Exception (); + } + } + + Size + send_buffer_size () const + { + Int r; + socklen_t s (sizeof (r)); + + if (::getsockopt (sock_, + SOL_SOCKET, + SO_SNDBUF, + &r, + &s) == -1) + { + throw Exception (); + } + + return static_cast<Size> (r); + } + + void + send_buffer_size (Size size) + { + Int r (static_cast<Int> (size)); + + if (::setsockopt (sock_, + SOL_SOCKET, + SO_SNDBUF, + &r, + sizeof (r)) == -1) + { + throw Exception (); + } + } + + public: + Void + connect (Address const& addr) + { + if (::connect (sock_, addr.raw_addr (), addr.raw_size ()) == -1) + throw Exception (); + } + + Address + address () const + { + sockaddr_in raw_addr; + socklen_t raw_size (sizeof (raw_addr)); + + if (::getsockname (sock_, + reinterpret_cast<sockaddr*> (&raw_addr), + &raw_size) == -1) + { + throw Exception (); + } + + return Address (raw_addr); + } + + + public: + virtual Size + send (Void const* buf, Size size, Net::Address const& addr) + { + if (addr.familiy () != familiy ()) + throw InvalidAddress (); + + return send (buf, size, dynamic_cast<Address const&> (addr)); + } + + virtual Size + send (Void const* buf, Size size, Address const& addr) + { + ssize_t n (::sendto (sock_, + buf, + size, + 0, + addr.raw_addr (), + addr.raw_size ())); + + if (n == -1) + throw Exception (); + + return static_cast<Size> (n); + } + + virtual Size + recv (Void* buf, Size size) + { + ssize_t n (::recvfrom (sock_, buf, size, 0, 0, 0)); + + if (n == -1) + throw Exception (); + + return static_cast<Size> (n); + } + + virtual Size + recv (Void* buf, Size size, Address& addr) + { + sockaddr_in raw_addr; + socklen_t raw_size (sizeof (raw_addr)); + + ssize_t n (::recvfrom (sock_, + buf, + size, + 0, + reinterpret_cast<sockaddr*> (&raw_addr), + &raw_size)); + + if (n == -1) + throw Exception (); + + addr = Address (raw_addr); + + return static_cast<Size> (n); + } + + virtual Size + peek (Void* buf, Size size, Address& addr) + { + sockaddr_in raw_addr; + socklen_t raw_size (sizeof (raw_addr)); + + ssize_t n (::recvfrom (sock_, + buf, + size, + MSG_PEEK, + reinterpret_cast<sockaddr*> (&raw_addr), + &raw_size)); + + if (n == -1) + throw Exception (); + + addr = Address (raw_addr); + + return static_cast<Size> (n); + } + + /* + virtual Boolean + recv (Void* buf, + Size size, + Size& received, + OS::Time const& timeout) + { + fd_set r,e; + + FD_ZERO (&r); + FD_ZERO (&e); + + FD_SET (sock_, &r); + FD_SET (sock_, &e); + + int n = ::pselect (sock_ + 1, &r, 0, &e, &timeout.timespec (), 0); + + if (n > 0) + { + recv_size = recv (buf, buf_size); + return true; + } + else if (n == 0) // timeout + { + return false; + } + else + { + throw Failure ("pselect"); + } + } + */ + + protected: + Int sock_; + }; + } + } + } +} + + +#endif // CULT_OS_NET_IPV4_DATAGRAM_SOCKET_HXX diff --git a/libcult/cult/os/net/ipv4/multicast-socket.cxx b/libcult/cult/os/net/ipv4/multicast-socket.cxx new file mode 100644 index 0000000..1431adc --- /dev/null +++ b/libcult/cult/os/net/ipv4/multicast-socket.cxx @@ -0,0 +1,19 @@ +// file : cult/os/net/ipv4/multicast-socket.cxx +// author : Boris Kolpackov <boris@kolpackov.Net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <cult/os/net/ipv4/multicast-socket.hxx> + +namespace Cult +{ + namespace OS + { + namespace Net + { + namespace IPv4 + { + } + } + } +} diff --git a/libcult/cult/os/net/ipv4/multicast-socket.hxx b/libcult/cult/os/net/ipv4/multicast-socket.hxx new file mode 100644 index 0000000..70207a3 --- /dev/null +++ b/libcult/cult/os/net/ipv4/multicast-socket.hxx @@ -0,0 +1,133 @@ +// file : cult/os/net/ipv4/multicast-socket.hxx +// author : Boris Kolpackov <boris@kolpackov.Net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef CULT_OS_NET_IPV4_MULTICAST_SOCKET_HXX +#define CULT_OS_NET_IPV4_MULTICAST_SOCKET_HXX + +#include <cult/types.hxx> + +#include <cult/os/net/address.hxx> +#include <cult/os/net/multicast-socket.hxx> +#include <cult/os/net/ipv4/address.hxx> +#include <cult/os/net/ipv4/datagram-socket.hxx> + +#include <cstring> // memcpy +#include <sys/socket.h> // bind, setsockopt +#include <arpa/inet.h> // htonl + +namespace Cult +{ + namespace OS + { + namespace Net + { + namespace IPv4 + { + //@@ Add MulticastAddress (with proper checks)? + // + + class MulticastSocket : public virtual Net::MulticastSocket, + public virtual DatagramSocket + { + public: + virtual + ~MulticastSocket () + { + } + + public: + MulticastSocket (Boolean loop = true, UnsignedShort ttl = 1) + { + unsigned char ttl_ (static_cast<unsigned char> (ttl)); + + { + Int flag (1); + + if (::setsockopt (sock_, + SOL_SOCKET, + SO_REUSEADDR, + &flag, + sizeof (flag)) == -1) + { + throw Exception (); + } + } + + if (ttl != 1) + { + if (::setsockopt (sock_, + IPPROTO_IP, + IP_MULTICAST_TTL, + &ttl_, + sizeof (ttl_)) == -1) + { + throw Exception (); + } + } + + if (!loop) + { + unsigned char flag (0); + + if (::setsockopt (sock_, + IPPROTO_IP, + IP_MULTICAST_LOOP, + &flag, + sizeof (flag)) == -1) + { + throw Exception (); + } + } + + } + + public: + virtual Void + join (Net::Address const& addr) + { + if (addr.familiy () != familiy ()) + throw InvalidAddress (); + + join (dynamic_cast<Address const&> (addr)); + } + + virtual Void + join (Address const& addr) + { + ip_mreq mreq; + + std::memcpy (&mreq.imr_multiaddr, + &addr.addr ().sin_addr, + sizeof (in_addr)); + + mreq.imr_interface.s_addr = htonl (INADDR_ANY); + + if (::setsockopt (sock_, + IPPROTO_IP, + IP_ADD_MEMBERSHIP, + &mreq, + sizeof (mreq)) == -1) + { + throw Exception (); + } + + if (::bind (sock_, addr.raw_addr (), addr.raw_size ()) == -1) + throw Exception (); + } + + virtual Void + leave () + { + //@@ TODO + abort (); + } + }; + } + } + } +} + + +#endif // CULT_OS_NET_IPV4_MULTICAST_SOCKET_HXX diff --git a/libcult/cult/os/net/multicast-socket.cxx b/libcult/cult/os/net/multicast-socket.cxx new file mode 100644 index 0000000..64710cf --- /dev/null +++ b/libcult/cult/os/net/multicast-socket.cxx @@ -0,0 +1,26 @@ +// file : cult/os/net/multicast-socket.cxx +// author : Boris Kolpackov <boris@kolpackov.Net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <cult/os/net/multicast-socket.hxx> + +namespace Cult +{ + namespace OS + { + namespace Net + { + MulticastSocket:: + MulticastSocket () + { + } + + MulticastSocket:: + ~MulticastSocket () + { + } + } + } +} + diff --git a/libcult/cult/os/net/multicast-socket.hxx b/libcult/cult/os/net/multicast-socket.hxx new file mode 100644 index 0000000..7aeff74 --- /dev/null +++ b/libcult/cult/os/net/multicast-socket.hxx @@ -0,0 +1,40 @@ +// file : cult/os/net/multicast-socket.hxx +// author : Boris Kolpackov <boris@kolpackov.Net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef CULT_OS_NET_MULTICAST_SOCKET_HXX +#define CULT_OS_NET_MULTICAST_SOCKET_HXX + +#include <cult/types.hxx> + +#include <cult/os/net/address.hxx> +#include <cult/os/net/datagram-socket.hxx> + +namespace Cult +{ + namespace OS + { + namespace Net + { + class MulticastSocket : public virtual DatagramSocket + { + protected: + MulticastSocket (); + + virtual + ~MulticastSocket (); + + public: + virtual Void + join (Address const& addr) = 0; + + virtual Void + leave () = 0; + }; + } + } +} + + +#endif // CULT_OS_NET_MULTICAST_SOCKET_HXX diff --git a/libcult/cult/os/net/socket.cxx b/libcult/cult/os/net/socket.cxx new file mode 100644 index 0000000..bd9969c --- /dev/null +++ b/libcult/cult/os/net/socket.cxx @@ -0,0 +1,26 @@ +// file : cult/os/net/socket.cxx +// author : Boris Kolpackov <boris@kolpackov.Net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <cult/os/net/socket.hxx> + +namespace Cult +{ + namespace OS + { + namespace Net + { + Socket:: + Socket () + { + } + + Socket:: + ~Socket () + { + } + } + } +} + diff --git a/libcult/cult/os/net/socket.hxx b/libcult/cult/os/net/socket.hxx new file mode 100644 index 0000000..a471186 --- /dev/null +++ b/libcult/cult/os/net/socket.hxx @@ -0,0 +1,54 @@ +// file : cult/os/net/socket.hxx +// author : Boris Kolpackov <boris@kolpackov.Net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef CULT_OS_NET_SOCKET_HXX +#define CULT_OS_NET_SOCKET_HXX + +#include <cult/types.hxx> +#include <cult/os/exception.hxx> + +#include <sys/socket.h> // sa_family_t + +namespace Cult +{ + namespace OS + { + namespace Net + { + class Socket: public NonCopyable + { + public: + struct Exception : virtual OS::Exception {}; + + struct InvalidAddress : virtual Exception {}; + + protected: + Socket (); + + virtual + ~Socket (); + + public: + // AF_INET, AF_INET6, etc. + // + virtual sa_family_t + familiy () const = 0; + + // SOCK_DGRAM, SOCK_STREAM, etc. + // + virtual Int + type () const = 0; + + // IPPROTO_UDP, IPPROTO_TCP, IPPROTO_SCTP, etc. + // + virtual Int + protocol () const = 0; + }; + } + } +} + + +#endif // CULT_OS_NET_SOCKET_HXX diff --git a/libcult/cult/rtti/type-id.hxx b/libcult/cult/rtti/type-id.hxx new file mode 100644 index 0000000..21494b1 --- /dev/null +++ b/libcult/cult/rtti/type-id.hxx @@ -0,0 +1,52 @@ +// file : cult/rtti/type-id.hxx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef CULT_RTTI_TYPE_ID_HXX +#define CULT_RTTI_TYPE_ID_HXX + +#include <cult/types/fundamental.hxx> + +#include <typeinfo> // std::type_info + +namespace Cult +{ + namespace RTTI + { + class TypeId + { + public: + template<typename X> + TypeId (X const volatile&); + + TypeId (std::type_info const&); + + public: + Char const* + name () const; + + friend Boolean + operator== (TypeId const&, TypeId const&); + + friend Boolean + operator!= (TypeId const&, TypeId const&); + + friend Boolean + operator< (TypeId const&, TypeId const&); + + /* + friend std::ostream& + operator << (std::ostream& os, TypeId const& t); + */ + + private: + std::type_info const* ti_; + }; + } +} + +#include <cult/rtti/type-id.ixx> +#include <cult/rtti/type-id.txx> + +#endif // CULT_RTTI_TYPE_ID_HXX diff --git a/libcult/cult/rtti/type-id.ixx b/libcult/cult/rtti/type-id.ixx new file mode 100644 index 0000000..cc77d5f --- /dev/null +++ b/libcult/cult/rtti/type-id.ixx @@ -0,0 +1,45 @@ +// file : cult/rtti/type-id.ixx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +namespace Cult +{ + namespace RTTI + { + inline + TypeId:: + TypeId (std::type_info const& ti) + : ti_ (&ti) + { + } + + inline + Char const* TypeId:: + name () const + { + return ti_->name (); + } + + inline + Boolean + operator== (TypeId const& x, TypeId const& y) + { + return *x.ti_ == *y.ti_; + } + + inline + Boolean + operator!= (TypeId const& x, TypeId const& y) + { + return *x.ti_ != *y.ti_; + } + + inline + Boolean + operator< (TypeId const& x, TypeId const& y) + { + return x.ti_->before (*y.ti_); + } + } +} diff --git a/libcult/cult/rtti/type-id.txx b/libcult/cult/rtti/type-id.txx new file mode 100644 index 0000000..4fd771a --- /dev/null +++ b/libcult/cult/rtti/type-id.txx @@ -0,0 +1,18 @@ +// file : cult/rtti/type-id.txx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +namespace Cult +{ + namespace RTTI + { + template <typename X> + inline + TypeId:: + TypeId (X const volatile& x) + : ti_ (&typeid (x)) + { + } + } +} diff --git a/libcult/cult/rtti/type-info.cxx b/libcult/cult/rtti/type-info.cxx new file mode 100644 index 0000000..5bc4040 --- /dev/null +++ b/libcult/cult/rtti/type-info.cxx @@ -0,0 +1,42 @@ +// file : cult/rtti/type-info.cxx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <cult/rtti/type-info.hxx> + +#include <cult/mm/static-ptr.hxx> + +#include <cult/containers/map.hxx> + +namespace Cult +{ + namespace RTTI + { + Access const Access::private_ (Access::private__); + Access const Access::protected_ (Access::protected__); + Access const Access::public_ (Access::public__); + + typedef + Containers::Map<TypeId, TypeInfo> + TypeInfoMap; + + static MM::StaticPtr<TypeInfoMap> map_; + + TypeInfo const& + lookup (TypeId const& type_id) + { + TypeInfoMap::ConstIterator i (map_->find (type_id)); + + if (i == map_->end ()) throw NoInfo (); + + return i->second; + } + + Void + insert (TypeInfo const& type_info) + { + map_->insert (TypeInfoMap::Pair (type_info.type_id (), type_info)); + } + } +} diff --git a/libcult/cult/rtti/type-info.hxx b/libcult/cult/rtti/type-info.hxx new file mode 100644 index 0000000..dce4923 --- /dev/null +++ b/libcult/cult/rtti/type-info.hxx @@ -0,0 +1,147 @@ +// file : cult/rtti/type-info.hxx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef CULT_RTTI_TYPE_INFO_HXX +#define CULT_RTTI_TYPE_INFO_HXX + +#include <cult/types/fundamental.hxx> + +#include <cult/rtti/type-id.hxx> + +#include <cult/containers/vector.hxx> + +#include <typeinfo> // std::type_info + +namespace Cult +{ + namespace RTTI + { + // + // + // + class Access + { + public: + static Access const private_, protected_, public_; + + friend Boolean + operator== (Access const& a, Access const& b) + { + return a.v_ == b.v_; + } + + friend Boolean + operator!= (Access const& a, Access const& b) + { + return a.v_ != b.v_; + } + + private: + enum Value { private__, protected__, public__ } v_; + + Access (Value v) + : v_ (v) + { + } + }; + + // + // + class TypeInfo; + + + // + // + class BaseInfo + { + public: + BaseInfo (Access access, Boolean virtual_, TypeId const& type_id); + + public: + TypeInfo const& + type_info () const; + + Access + access () const; + + Boolean + virtual_ () const; + + private: + Access access_; + Boolean virtual__; + TypeId type_id_; + mutable TypeInfo const* type_info_; + }; + + + // + // + class TypeInfo + { + typedef Containers::Vector<BaseInfo> BaseInfoList; + + public: + typedef + BaseInfoList::ConstIterator + BaseIterator; + + public: + TypeInfo (TypeId const& type_id); + + TypeId + type_id () const; + + BaseIterator + begin_base () const; + + BaseIterator + end_base () const; + + Void + add_base (Access access, Boolean virtual_, TypeId const& type_id); + + private: + TypeId type_id_; + BaseInfoList base_list_; + }; + + + // + // + class NoInfo {}; + + TypeInfo const& + lookup (TypeId const& type_id); + + inline + TypeInfo const& + lookup (std::type_info const& type_info) + { + return lookup (TypeId (type_info)); + } + + template<typename X> + TypeInfo const& + lookup (X const& x) + { + return lookup (typeid (x)); + } + + template<typename X> + TypeInfo const& + lookup () + { + return lookup (typeid (X)); + } + + Void + insert (TypeInfo const&); + } +} + +#include <cult/rtti/type-info.ixx> + +#endif // CULT_RTTI_TYPE_INFO_HXX diff --git a/libcult/cult/rtti/type-info.ixx b/libcult/cult/rtti/type-info.ixx new file mode 100644 index 0000000..f96ad6c --- /dev/null +++ b/libcult/cult/rtti/type-info.ixx @@ -0,0 +1,87 @@ +// file : cult/rtti/type-info.ixx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +namespace Cult +{ + namespace RTTI + { + // BaseInfo + // + + inline + BaseInfo:: + BaseInfo (Access access, Boolean virtual_, TypeId const& type_id) + : access_ (access), + virtual__ (virtual_), + type_id_ (type_id), + type_info_ (0) + { + } + + inline + TypeInfo const& BaseInfo:: + type_info () const + { + if (type_info_ == 0) type_info_ = &(lookup (type_id_)); + + return *type_info_; + } + + + inline + Access BaseInfo:: + access () const + { + return access_; + } + + inline + Boolean BaseInfo:: + virtual_ () const + { + return virtual__; + } + + + // TypeInfo + // + + inline + TypeInfo:: + TypeInfo (TypeId const& type_id) + : type_id_ (type_id) + { + } + + inline + TypeId TypeInfo:: + type_id () const + { + return type_id_; + } + + inline + TypeInfo::BaseIterator TypeInfo:: + begin_base () const + { + return base_list_.begin (); + } + + + inline + TypeInfo::BaseIterator TypeInfo:: + end_base () const + { + return base_list_.end (); + } + + inline + Void TypeInfo:: + add_base (Access access, Boolean virtual_, TypeId const& type_id) + { + base_list_.push_back (BaseInfo (access, virtual_, type_id)); + } + } +} diff --git a/libcult/cult/sched/condition.cxx b/libcult/cult/sched/condition.cxx new file mode 100644 index 0000000..5f547c8 --- /dev/null +++ b/libcult/cult/sched/condition.cxx @@ -0,0 +1,49 @@ +// file : cult/sched/condition.cxx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <cult/sched/condition.hxx> +#include <cult/sched/exception.hxx> + +namespace Cult +{ + namespace Sched + { + Condition:: + ~Condition () + { + if (Int e = pthread_cond_destroy (&cond_)) + throw Implementation (e); + } + + Condition:: + Condition (Mutex& mutex) + : mutex_ (mutex) + { + if (Int e = pthread_cond_init (&cond_, 0)) + throw Implementation (e); + } + + Void Condition:: + signal () + { + if (Int e = pthread_cond_signal (&cond_)) + throw Implementation (e); + } + + Void Condition:: + broadcast () + { + if (Int e = pthread_cond_broadcast (&cond_)) + throw Implementation (e); + } + + Void Condition:: + wait () + { + if (Int e = pthread_cond_wait (&cond_, &mutex_.mutex_)) + throw Implementation (e); + } + } +} diff --git a/libcult/cult/sched/condition.hxx b/libcult/cult/sched/condition.hxx new file mode 100644 index 0000000..b1a0f30 --- /dev/null +++ b/libcult/cult/sched/condition.hxx @@ -0,0 +1,42 @@ +// file : cult/sched/condition.hxx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef CULT_SCHED_CONDITION_HXX +#define CULT_SCHED_CONDITION_HXX + +#include <cult/types/fundamental.hxx> + +#include <cult/sched/mutex.hxx> + +#include <pthread.h> + +namespace Cult +{ + namespace Sched + { + class Condition: public NonCopyable + { + public: + ~Condition (); + + Condition (Mutex& mutex); + + Void + signal (); + + Void + broadcast (); + + Void + wait (); + + private: + Mutex& mutex_; + pthread_cond_t cond_; + }; + } +} + +#endif // CULT_SCHED_CONDITION_HXX diff --git a/libcult/cult/sched/exception.hxx b/libcult/cult/sched/exception.hxx new file mode 100644 index 0000000..3fa6e5f --- /dev/null +++ b/libcult/cult/sched/exception.hxx @@ -0,0 +1,30 @@ +// file : cult/sched/exception.hxx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef CULT_SCHED_EXCEPTION_HXX +#define CULT_SCHED_EXCEPTION_HXX + +#include <cult/types/fundamental.hxx> + +#include <cult/eh/exception.hxx> +#include <cult/os/exception.hxx> + +namespace Cult +{ + namespace Sched + { + struct Exception: virtual EH::Exception {}; + + struct Implementation: virtual Exception, virtual OS::Exception + { + Implementation (Int code) throw () + : OS::Exception (code) + { + } + }; + } +} + +#endif // CULT_SCHED_EXCEPTION_HXX diff --git a/libcult/cult/sched/lock.cxx b/libcult/cult/sched/lock.cxx new file mode 100644 index 0000000..853d9b0 --- /dev/null +++ b/libcult/cult/sched/lock.cxx @@ -0,0 +1,13 @@ +// file : cult/sched/lock.cxx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <cult/sched/lock.hxx> + +namespace Cult +{ + namespace Sched + { + } +} diff --git a/libcult/cult/sched/lock.hxx b/libcult/cult/sched/lock.hxx new file mode 100644 index 0000000..1ecf3fb --- /dev/null +++ b/libcult/cult/sched/lock.hxx @@ -0,0 +1,58 @@ +// file : cult/sched/lock.hxx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef CULT_SCHED_LOCK_HXX +#define CULT_SCHED_LOCK_HXX + +#include <cult/types/fundamental.hxx> + +namespace Cult +{ + namespace Sched + { + class Lock: public NonCopyable + { + public: + ~Lock () + { + unlock (); + } + + template <typename X> + Lock (X& x) + : x_ (reinterpret_cast<Void*>(&x)), + unlock_ (&unlock<X>), + locked_ (true) + { + x.lock (); + } + + Void + unlock () + { + if (locked_) + { + unlock_ (x_); + locked_ = false; + } + } + + private: + template <typename X> + static Void + unlock (Void* p) + { + reinterpret_cast<X*> (p)->unlock (); + } + + private: + Void* x_; + Void (*unlock_) (Void*); + Boolean locked_; + }; + } +} + +#endif // CULT_SCHED_LOCK_HXX diff --git a/libcult/cult/sched/mutex.cxx b/libcult/cult/sched/mutex.cxx new file mode 100644 index 0000000..9667a67 --- /dev/null +++ b/libcult/cult/sched/mutex.cxx @@ -0,0 +1,54 @@ +// file : cult/sched/mutex.cxx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <cult/sched/mutex.hxx> +#include <cult/sched/exception.hxx> + +namespace Cult +{ + namespace Sched + { + Mutex:: + ~Mutex () + { + if (Int e = pthread_mutex_destroy (&mutex_)) + throw Implementation (e); + } + + Mutex:: + Mutex () + { + if (Int e = pthread_mutex_init (&mutex_, 0)) + throw Implementation (e); + } + + Void Mutex:: + lock () + { + if (Int e = pthread_mutex_lock (&mutex_)) + throw Implementation (e); + } + + Boolean Mutex:: + try_lock () + { + Int e (pthread_mutex_trylock (&mutex_)); + + switch (e) + { + case 0: return true; + case EBUSY: return false; + default: throw Implementation (e); + } + } + + Void Mutex:: + unlock () + { + if (Int e = pthread_mutex_unlock (&mutex_)) + throw Implementation (e); + } + } +} diff --git a/libcult/cult/sched/mutex.hxx b/libcult/cult/sched/mutex.hxx new file mode 100644 index 0000000..0c6daee --- /dev/null +++ b/libcult/cult/sched/mutex.hxx @@ -0,0 +1,41 @@ +// file : cult/sched/mutex.hxx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef CULT_SCHED_MUTEX_HXX +#define CULT_SCHED_MUTEX_HXX + +#include <cult/types/fundamental.hxx> + +#include <pthread.h> + +namespace Cult +{ + namespace Sched + { + class Mutex: public NonCopyable + { + public: + ~Mutex (); + + Mutex (); + + Void + lock (); + + Boolean + try_lock (); + + Void + unlock (); + + private: + friend class Condition; + + pthread_mutex_t mutex_; + }; + } +} + +#endif // CULT_SCHED_MUTEX_HXX diff --git a/libcult/cult/sched/spin.cxx b/libcult/cult/sched/spin.cxx new file mode 100644 index 0000000..54df7ce --- /dev/null +++ b/libcult/cult/sched/spin.cxx @@ -0,0 +1,28 @@ +// file : cult/sched/spin.cxx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <cult/sched/spin.hxx> +#include <cult/sched/exception.hxx> + +namespace Cult +{ + namespace Sched + { + Spin:: + ~Spin () + { + if (Int e = pthread_spin_destroy (&spin_)) + throw Implementation (e); + } + + Spin:: + Spin () + { + if (Int e = pthread_spin_init (&spin_, PTHREAD_PROCESS_PRIVATE)) + throw Implementation (e); + } + } +} + diff --git a/libcult/cult/sched/spin.hxx b/libcult/cult/sched/spin.hxx new file mode 100644 index 0000000..c32e836 --- /dev/null +++ b/libcult/cult/sched/spin.hxx @@ -0,0 +1,41 @@ +// file : cult/sched/spin.hxx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef CULT_SCHED_SPIN_HXX +#define CULT_SCHED_SPIN_HXX + +#include <cult/types/fundamental.hxx> + +#include <pthread.h> + +namespace Cult +{ + namespace Sched + { + class Spin: public NonCopyable + { + public: + ~Spin (); + + Spin (); + + Void + lock (); + + Boolean + try_lock (); + + Void + unlock (); + + private: + pthread_spinlock_t spin_; + }; + } +} + +#include <cult/sched/spin.ixx> + +#endif // CULT_SCHED_SPIN_HXX diff --git a/libcult/cult/sched/spin.ixx b/libcult/cult/sched/spin.ixx new file mode 100644 index 0000000..2accdde --- /dev/null +++ b/libcult/cult/sched/spin.ixx @@ -0,0 +1,43 @@ +// file : cult/sched/spin.ixx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <cult/sched/exception.hxx> + +namespace Cult +{ + namespace Sched + { + inline + Void Spin:: + lock () + { + if (Int e = pthread_spin_lock (&spin_)) + throw Implementation (e); + } + + inline + Boolean Spin:: + try_lock () + { + Int e (pthread_spin_trylock (&spin_)); + + switch (e) + { + case 0: return true; + case EBUSY: return false; + default: throw Implementation (e); + } + } + + inline + Void Spin:: + unlock () + { + if (Int e = pthread_spin_unlock (&spin_)) + throw Implementation (e); + } + } +} + diff --git a/libcult/cult/sched/thread.cxx b/libcult/cult/sched/thread.cxx new file mode 100644 index 0000000..89368b6 --- /dev/null +++ b/libcult/cult/sched/thread.cxx @@ -0,0 +1,211 @@ +// file : cult/sched/thread.cxx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <cult/sched/thread.hxx> +#include <cult/sched/lock.hxx> +#include <cult/sched/exception.hxx> + +#include <cult/mm/counter.hxx> // MM::inc_ref + +#include <cult/trace/stream.hxx> + +namespace Cult +{ + namespace Sched + { + namespace + { + Trace::Stream tout ("Cult::Sched::Thread", 7); + } + + namespace Bits + { + typedef Void* (*Routine) (Void*); + + struct StartData + { + StartData (Shptr<Thread> const& thread, Routine routine, void* arg) + : thread_ (thread), routine_ (routine), arg_ (arg) + { + } + + ~StartData () + { + tout << 8 << "start data is being destroyed."; + } + + Shptr<Thread> thread_; + Routine routine_; + Void* arg_; + }; + + static pthread_key_t key; + static pthread_once_t key_once = PTHREAD_ONCE_INIT; + + extern "C" Void + cult_thread_dtor (Void* p) + { + // Exception in this function will result in the call + // to std::terminate(). + // + + tout << "cult_thread_dtor is being executed."; + + Shptr<Thread> self (reinterpret_cast<Thread*> (p)); + } + + extern "C" Void + cult_thread_make_key () + { + if (Int e = pthread_key_create (&key, &cult_thread_dtor)) + throw Implementation (e); + } + + extern "C" Void* + cult_thread_trampoline (Void* arg) + { + // Any failure in this function will result in the call + // to std::terminate(). + // + + Routine routine; + + { + Shptr<StartData> data (reinterpret_cast<StartData*> (arg)); + + Thread* p (data->thread_.get ()); + + if (Int e = pthread_setspecific (key, p)) + throw Implementation (e); + else + MM::inc_ref (p); + + routine = data->routine_; + arg = data->arg_; + } + + return routine (arg); + } + } + + Thread:: + Thread (Void* (*routine) (Void*), Void* arg) + : detached_ (false) + { + using Bits::StartData; + + tout << "thread is being constructed."; + + pthread_once (&Bits::key_once, &Bits::cult_thread_make_key); + + Shptr<Thread> self (MM::inc_ref (this)); + + Shptr<StartData> data (new StartData (self, routine, arg)); + + if (Int e = pthread_create (&id_, + 0, + &Bits::cult_thread_trampoline, + data.get ())) + { + throw Implementation (e); + } + else + { + // If pthread_create did not fail then thread_trampoline + // will release the data. + // + data.release (); + } + } + + Thread:: + Thread () + : id_ (pthread_self ()), detached_ (false) //@@ We can't be sure + // the it is detached. + { + tout << "thread is being adopted."; + + pthread_once (&Bits::key_once, &Bits::cult_thread_make_key); + + if (pthread_getspecific (Bits::key) != 0) + throw Adopted (); + + Shptr<Thread> self (MM::inc_ref (this)); + + if(Int e = pthread_setspecific (Bits::key, this)) + { + throw Implementation (e); + } + else + { + // TSD slot has the reference now. + // + self.release (); + } + } + + Void* Thread:: + join () + { + Lock lock (mutex_); + + if (detached_) + throw Joined (); + + Void* r; + + if (Int e = pthread_join (id_, &r)) + throw Implementation (e); + + detached_ = true; + + return r; + } + + Void Thread:: + cancel () + { + if (Int e = pthread_cancel (id_)) + throw Implementation (e); + } + + Void Thread:: + exit (Void* ret) + { + pthread_exit (ret); + } + + Shptr<Thread> Thread:: + self () + { + Thread* p (reinterpret_cast<Thread*> (pthread_getspecific (Bits::key))); + + if (p != 0) + return Shptr<Thread> (MM::inc_ref (p)); + else + throw Foreign (); + } + + Void Thread:: + test_cancel () + { + pthread_testcancel (); + } + + Thread:: + ~Thread () + { + tout << "thread is being destroyed."; + + Lock lock (mutex_); + + if (!detached_) + { + if (Int e = pthread_detach (id_)) + throw Implementation (e); + } + } + } +} diff --git a/libcult/cult/sched/thread.hxx b/libcult/cult/sched/thread.hxx new file mode 100644 index 0000000..49d6225 --- /dev/null +++ b/libcult/cult/sched/thread.hxx @@ -0,0 +1,86 @@ +// file : cult/sched/thread.hxx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef CULT_SCHED_THREAD_HXX +#define CULT_SCHED_THREAD_HXX + +#include <cult/types/fundamental.hxx> +#include <cult/types/shptr.hxx> + +#include <cult/sched/mutex.hxx> +#include <cult/sched/exception.hxx> + +#include <cult/mm/new.hxx> + +#include <pthread.h> + +namespace Cult +{ + namespace Sched + { + // Instantiating an automatic variable of type Thread results + // in undefined behavior (read core dump). + // + class Thread: public MM::ServiceAwareObject + { + public: + struct Exception: virtual Sched::Exception {}; + + public: + virtual + ~Thread (); + + Thread (Void* (*StartRoutine) (Void*), Void* arg = 0); + + // Adopt an existing thread. Adoption of a detached thread + // results in undefined behavior. Adoption of an already + // adopted thread results in Adopted exception. + // + + struct Adopted: virtual Exception {}; + + Thread (); + + public: + // Joining an already joined thread results in Joined exception. + // + + struct Joined: virtual Exception {}; + + //@@ Need to work out the cancelled case. + // + Void* + join (); + + Void + cancel (); + + public: + static Void + exit (Void* ret); + + // self() may not be called in TSD destructors. Call to self() from + // a foreign thread (i.e., one that is neither native nor adopted) + // results in Foreign exception. + // + + struct Foreign: virtual Exception {}; + + static Shptr<Thread> + self (); + + static Void + test_cancel (); + + private: + pthread_t id_; + + Boolean detached_; + Mutex mutex_; + }; + } +} + +#endif // CULT_SCHED_THREAD_HXX diff --git a/libcult/cult/trace/log.cxx b/libcult/cult/trace/log.cxx new file mode 100644 index 0000000..f77c2c3 --- /dev/null +++ b/libcult/cult/trace/log.cxx @@ -0,0 +1,49 @@ +// file : cult/trace/log.cxx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <cult/trace/log.hxx> + +#include <iostream> + +namespace Cult +{ + namespace Trace + { + Log:: + Log (Int level) + : level_ (level) + { + } + + Int Log:: + level () const + { + return level_; + } + + Void Log:: + level (Int level) + { + level_ = level; + } + + Log& Log:: + instance () + { + //@@ Need to use -once initialization. Plus is it legal to + // use trace in (static) dtors? + // + static Log log; + return log; + } + + Void Log:: + log_impl (Record const& r) + { + std::cerr << '[' << r.id () << ':' << r.level () << "] " << r.text () + << std::endl; + } + } +} diff --git a/libcult/cult/trace/log.hxx b/libcult/cult/trace/log.hxx new file mode 100644 index 0000000..2b21acf --- /dev/null +++ b/libcult/cult/trace/log.hxx @@ -0,0 +1,51 @@ +// file : cult/trace/log.hxx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef CULT_TRACE_LOG_HXX +#define CULT_TRACE_LOG_HXX + +#include <cult/types/fundamental.hxx> + +#include <cult/trace/record.hxx> + +namespace Cult +{ + namespace Trace + { + class Log: public NonCopyable + { + public: + Log (Int level = -1); + + public: + Int + level () const; + + Void + level (Int level); + + public: + //@@ should it be virtual? + // + Log& + operator<< (Record const& r); + + public: + static Log& + instance (); + + private: + Void + log_impl (Record const& r); + + private: + Int level_; + }; + } +} + +#include <cult/trace/log.ixx> + +#endif // CULT_TRACE_LOG_HXX diff --git a/libcult/cult/trace/log.ixx b/libcult/cult/trace/log.ixx new file mode 100644 index 0000000..fbc23d9 --- /dev/null +++ b/libcult/cult/trace/log.ixx @@ -0,0 +1,20 @@ +// file : cult/trace/log.ixx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +namespace Cult +{ + namespace Trace + { + inline + Log& Log:: + operator<< (Record const& r) + { + if (r.level () <= level_) + log_impl (r); + + return *this; + } + } +} diff --git a/libcult/cult/trace/null/record.ixx b/libcult/cult/trace/null/record.ixx new file mode 100644 index 0000000..c93b1a0 --- /dev/null +++ b/libcult/cult/trace/null/record.ixx @@ -0,0 +1,45 @@ +// file : cult/trace/null/record.ixx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +namespace Cult +{ + namespace Trace + { + inline + Record:: + Record (Char const* id, Int level) + : id_ (id), level_ (level) + { + } + + inline + Char const* Record:: + text () const + { + return ""; + } + + inline + Char const* Record:: + id () const + { + return id_; + } + + inline + Int Record:: + level () const + { + return level_; + } + + inline + Void Record:: + level (Int level) + { + level_ = level; + } + } +} diff --git a/libcult/cult/trace/null/record.txx b/libcult/cult/trace/null/record.txx new file mode 100644 index 0000000..1413f1e --- /dev/null +++ b/libcult/cult/trace/null/record.txx @@ -0,0 +1,18 @@ +// file : cult/trace/null/record.txx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +namespace Cult +{ + namespace Trace + { + template <typename T> + inline + Record& Record:: + operator<< (T const&) + { + return *this; + } + } +} diff --git a/libcult/cult/trace/null/stream.ixx b/libcult/cult/trace/null/stream.ixx new file mode 100644 index 0000000..45b6e78 --- /dev/null +++ b/libcult/cult/trace/null/stream.ixx @@ -0,0 +1,67 @@ +// file : cult/trace/null/stream.ixx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +namespace Cult +{ + namespace Trace + { + inline + Stream:: + Stream (Char const* id, Int level, Log& l) + : id_ (id), level_ (level), log_ (l) + { + } + + inline + Char const* Stream:: + id () const + { + return id_; + } + + inline + Int Stream:: + level () const + { + return level_; + } + + inline + Stream& Stream:: + operator << (Record const& r) + { + return *this; + } + + inline + Stream::Mediator:: + Mediator (Stream& s) + : s_ (s), r_ (s.id (), s.level ()) + { + } + + inline + Stream::Mediator:: + ~Mediator () + { + } + + inline + Record& + operator<< (Stream::Mediator const& mc, Int level) + { + Stream::Mediator& m (const_cast<Stream::Mediator&> (mc)); + // m.r_.level (level); + return m.r_; + } + + inline + Record& + operator<< (Stream::Mediator const& mc, Char const* s) + { + return const_cast<Stream::Mediator&> (mc).r_; + } + } +} diff --git a/libcult/cult/trace/null/stream.txx b/libcult/cult/trace/null/stream.txx new file mode 100644 index 0000000..e9ab70c --- /dev/null +++ b/libcult/cult/trace/null/stream.txx @@ -0,0 +1,18 @@ +// file : cult/trace/null/stream.txx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +namespace Cult +{ + namespace Trace + { + template <typename T> + inline + Record& + operator<< (Stream::Mediator const& mc, T const&) + { + return const_cast<stream::mediator&> (mc).r_; + } + } +} diff --git a/libcult/cult/trace/record.hxx b/libcult/cult/trace/record.hxx new file mode 100644 index 0000000..90276dd --- /dev/null +++ b/libcult/cult/trace/record.hxx @@ -0,0 +1,86 @@ +// file : cult/trace/record.hxx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef CULT_TRACE_RECORD_HXX +#define CULT_TRACE_RECORD_HXX + +#include <cult/types/fundamental.hxx> + +#include <cstring> // memset +#include <ostream> +#include <streambuf> + +namespace Cult +{ + namespace Trace + { + class Record: public NonCopyable + { + public: + Record (Char const* id, Int level); + + public: + Char const* + text () const; + + Char const* + id () const; + + Int + level () const; + + Void + level (Int); + + public: + template <typename T> + Record& + operator<< (T const& arg); + + private: + Char const* id_; + Int level_; + + //@@ need to wrap streambuf. + // + class FixedBuffer : public std::streambuf + { + public: + FixedBuffer (Char* buf, Size size) + { + std::memset (buf, 0, size); + setp (buf, buf + size - 1); + }; + + virtual int_type + overflow (int_type c) + { + return c; + } + }; + +#ifndef CULT_TRACE_NULL + char buf_[1024]; + FixedBuffer sbuf_; + std::ostream os_; +#endif + }; + } +} + +#ifndef CULT_TRACE_NULL + +#include <cult/trace/record.ixx> +#include <cult/trace/record.txx> + +#else + +#include <cult/trace/null/record.ixx> +#include <cult/trace/null/record.txx> + +#endif + + +#endif // CULT_TRACE_RECORD_HXX diff --git a/libcult/cult/trace/record.ixx b/libcult/cult/trace/record.ixx new file mode 100644 index 0000000..ae564a4 --- /dev/null +++ b/libcult/cult/trace/record.ixx @@ -0,0 +1,45 @@ +// file : cult/trace/record.ixx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +namespace Cult +{ + namespace Trace + { + inline + Record:: + Record (Char const* id, Int level) + : id_ (id), level_ (level), sbuf_ (buf_, sizeof (buf_)), os_ (&sbuf_) + { + } + + inline + Char const* Record:: + text () const + { + return buf_; + } + + inline + Char const* Record:: + id () const + { + return id_; + } + + inline + Int Record:: + level () const + { + return level_; + } + + inline + Void Record:: + level (Int level) + { + level_ = level; + } + } +} diff --git a/libcult/cult/trace/record.txx b/libcult/cult/trace/record.txx new file mode 100644 index 0000000..0c4ef1b --- /dev/null +++ b/libcult/cult/trace/record.txx @@ -0,0 +1,19 @@ +// file : cult/trace/record.txx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +namespace Cult +{ + namespace Trace + { + template <typename T> + inline + Record& Record:: + operator<< (T const& arg) + { + os_ << arg; + return *this; + } + } +} diff --git a/libcult/cult/trace/stream.hxx b/libcult/cult/trace/stream.hxx new file mode 100644 index 0000000..728e973 --- /dev/null +++ b/libcult/cult/trace/stream.hxx @@ -0,0 +1,74 @@ +// file : cult/trace/stream.hxx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef CULT_TRACE_STREAM_HXX +#define CULT_TRACE_STREAM_HXX + +#include <cult/types/fundamental.hxx> + +#include <cult/trace/log.hxx> +#include <cult/trace/record.hxx> + +namespace Cult +{ + namespace Trace + { + class Stream: public NonCopyable + { + public: + Stream (Char const* id, Int level, Log& l = Log::instance ()); + + public: + Char const* + id () const; + + Int + level () const; + + public: + Stream& + operator<< (Record const& r); + + private: + struct Mediator + { + ~Mediator (); + Mediator (Stream&); + + Stream& s_; + Record r_; + }; + + friend Record& + operator<< (Mediator const&, Int level); + + friend Record& + operator<< (Mediator const&, Char const* s); + + template <typename T> + friend Record& + operator<< (Mediator const&, T const& arg); + + private: + Char const* id_; + Int level_; + Log& log_; + }; + } +} + +#ifndef CULT_TRACE_NULL + +#include <cult/trace/stream.ixx> +#include <cult/trace/stream.txx> + +#else + +#include <cult/trace/null/stream.ixx> +#include <cult/trace/null/stream.txx> + +#endif + +#endif // CULT_TRACE_STREAM_HXX diff --git a/libcult/cult/trace/stream.ixx b/libcult/cult/trace/stream.ixx new file mode 100644 index 0000000..718383c --- /dev/null +++ b/libcult/cult/trace/stream.ixx @@ -0,0 +1,76 @@ +// file : cult/trace/stream.ixx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +namespace Cult +{ + namespace Trace + { + // Stream::Mediator + // + inline + Stream::Mediator:: + Mediator (Stream& s) + : s_ (s), r_ (s.id (), s.level ()) + { + } + + inline + Stream::Mediator:: + ~Mediator () + { + s_ << r_; + } + + // Stream + // + inline + Stream:: + Stream (Char const* id, Int level, Log& log) + : id_ (id), level_ (level), log_ (log) + { + } + + inline + char const* Stream:: + id () const + { + return id_; + } + + inline + int Stream:: + level () const + { + return level_; + } + + // + // + inline + Stream& Stream:: + operator << (Record const& r) + { + log_ << r; + return *this; + } + + inline + Record& + operator<< (Stream::Mediator const& mc, Int level) + { + Stream::Mediator& m (const_cast<Stream::Mediator&> (mc)); + m.r_.level (level); + return m.r_; + } + + inline + Record& + operator<< (Stream::Mediator const& mc, Char const* s) + { + Stream::Mediator& m (const_cast<Stream::Mediator&> (mc)); + return m.r_ << s; + } + } +} diff --git a/libcult/cult/trace/stream.txx b/libcult/cult/trace/stream.txx new file mode 100644 index 0000000..1ac20ed --- /dev/null +++ b/libcult/cult/trace/stream.txx @@ -0,0 +1,19 @@ +// file : cult/trace/stream.txx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +namespace Cult +{ + namespace Trace + { + template <typename T> + inline + Record& + operator<< (Stream::Mediator const& mc, T const& arg) + { + Stream::Mediator& m (const_cast<Stream::Mediator&> (mc)); + return m.r_ << arg; + } + } +} diff --git a/libcult/cult/types.hxx b/libcult/cult/types.hxx new file mode 100644 index 0000000..5e4c9c2 --- /dev/null +++ b/libcult/cult/types.hxx @@ -0,0 +1,14 @@ +// file : cult/types.hxx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef CULT_TYPES_HXX +#define CULT_TYPES_HXX + +#include <cult/types/fundamental.hxx> +#include <cult/types/string.hxx> +#include <cult/types/evptr.hxx> +#include <cult/types/shptr.hxx> + +#endif // CULT_TYPES_HXX diff --git a/libcult/cult/types/evptr.hxx b/libcult/cult/types/evptr.hxx new file mode 100644 index 0000000..a39cd86 --- /dev/null +++ b/libcult/cult/types/evptr.hxx @@ -0,0 +1,21 @@ +// file : cult/types/evptr.hxx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef CULT_TYPES_EVPTR_HXX +#define CULT_TYPES_EVPTR_HXX + +#include <cult/mm/evptr.hxx> + +namespace Cult +{ + namespace Types + { + using MM::Evptr; + } + + using Types::Evptr; +} + +#endif // CULT_TYPES_EVPTR_HXX diff --git a/libcult/cult/types/fundamental.hxx b/libcult/cult/types/fundamental.hxx new file mode 100644 index 0000000..01116f1 --- /dev/null +++ b/libcult/cult/types/fundamental.hxx @@ -0,0 +1,175 @@ +// file : cult/types/fundamental.hxx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef CULT_TYPES_FUNDAMENTAL_HXX +#define CULT_TYPES_FUNDAMENTAL_HXX + +#include <cstddef> // std::size_t, std::ptrdiff_t + +namespace Cult +{ + namespace Types + { + namespace Fundamental + { + // Fundamental types + // + typedef void Void; + + typedef bool Boolean; + + typedef char Char; + typedef wchar_t WideChar; + + typedef short Short; + typedef unsigned short UnsignedShort; + + typedef int Int; + typedef unsigned int UnsignedInt; + + typedef long Long; + typedef unsigned long UnsignedLong; + + //@@ what would be a good name for float, double and long double? + // ShortFloat, Float and LongFloat + // ShortReal, Real, LongReal + + typedef std::size_t Size; + typedef std::ptrdiff_t PtrDifference; + typedef Size Index; + + // Fixed-size types. + // + typedef signed char Int8; + typedef unsigned char UnsignedInt8; + + typedef signed short Int16; + typedef unsigned short UnsignedInt16; + + typedef signed int Int32; + typedef unsigned int UnsignedInt32; + + typedef signed long long Int64; + typedef unsigned long long UnsignedInt64; + + + typedef float Float32; + typedef double Float64; + typedef long double Float128; // Only 96 on x86-32. + } + + + // Fundamental types + // + using Fundamental::Void; + + using Fundamental::Boolean; + + using Fundamental::Char; + using Fundamental::WideChar; + + using Fundamental::Short; + using Fundamental::UnsignedShort; + + using Fundamental::Int; + using Fundamental::UnsignedInt; + + using Fundamental::Long; + using Fundamental::UnsignedLong; + + using Fundamental::Size; + using Fundamental::PtrDifference; + using Fundamental::Index; + + + // Fixed-size types. + // + using Fundamental::Int8; + using Fundamental::UnsignedInt8; + + using Fundamental::Int16; + using Fundamental::UnsignedInt16; + + using Fundamental::Int32; + using Fundamental::UnsignedInt32; + + using Fundamental::Int64; + using Fundamental::UnsignedInt64; + + + using Fundamental::Float32; + using Fundamental::Float64; + using Fundamental::Float128; // Only 96 on x86-32. + + + // Note: make sure you inherit publicly from this type for + // it could be used for metaprogramming. + // + class NonCopyable + { + NonCopyable (NonCopyable const&); + + NonCopyable& + operator= (NonCopyable const&); + + protected: + NonCopyable () + { + } + }; + + // class Clonable ? + // + + } + + // Fundamental types + // + using Types::Void; + + using Types::Boolean; + + using Types::Char; + using Types::WideChar; + + using Types::Short; + using Types::UnsignedShort; + + using Types::Int; + using Types::UnsignedInt; + + using Types::Long; + using Types::UnsignedLong; + + using Types::Size; + using Types::PtrDifference; + using Types::Index; + + + // Fixed-size types. + // + using Types::Int8; + using Types::UnsignedInt8; + + using Types::Int16; + using Types::UnsignedInt16; + + using Types::Int32; + using Types::UnsignedInt32; + + using Types::Int64; + using Types::UnsignedInt64; + + + using Types::Float32; + using Types::Float64; + using Types::Float128; // Only 96 on x86-32. + + // + // + using Types::NonCopyable; +} + +#endif // CULT_TYPES_FUNDAMENTAL_HXX diff --git a/libcult/cult/types/shptr.hxx b/libcult/cult/types/shptr.hxx new file mode 100644 index 0000000..c5d2d66 --- /dev/null +++ b/libcult/cult/types/shptr.hxx @@ -0,0 +1,21 @@ +// file : cult/types/shptr.hxx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef CULT_TYPES_SHPTR_HXX +#define CULT_TYPES_SHPTR_HXX + +#include <cult/mm/shptr.hxx> + +namespace Cult +{ + namespace Types + { + using MM::Shptr; + } + + using Types::Shptr; +} + +#endif // CULT_TYPES_SHPTR_HXX diff --git a/libcult/cult/types/string.hxx b/libcult/cult/types/string.hxx new file mode 100644 index 0000000..108f830 --- /dev/null +++ b/libcult/cult/types/string.hxx @@ -0,0 +1,397 @@ +// file : cult/types/string.hxx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef CULT_TYPES_STRING_HXX +#define CULT_TYPES_STRING_HXX + +#include <cult/types/fundamental.hxx> +#include <cult/eh/exception.hxx> + +//@@ Dependency on 'containers'. Maybe move iterator to 'types'? +// +#include <cult/containers/iterator.hxx> + +#include <string> +#include <cstdlib> // mbstowcs + +namespace Cult +{ + namespace Types + { + //@@ Maybe create StringFwd.hxx + // + + namespace Bits + { + struct None {}; + + template <typename C> + struct NarrowerChar + { + typedef None Type; + }; + + + template <> + struct NarrowerChar<WideChar> + { + typedef Char Type; + }; + } + + template <typename C, + typename NarrowerChar = typename Bits::NarrowerChar<C>::Type> + class StringTemplate; + + template <> + class StringTemplate<Bits::None, Bits::None> + { + }; + + + template <typename C, typename NarrowerChar> + class StringTemplate : public std::basic_string<C> + { + typedef std::basic_string<C> Base; + typedef std::basic_string<NarrowerChar> NarrowerBase; + + Base& + base () + { + return *this; + } + + Base const& + base () const + { + return *this; + } + + public: + typedef typename Base::value_type Value; + + /* + typedef traits traits_type; + typedef typename traits::char_type value_type; + typedef Allocator allocator_type; + typedef typename Allocator::size_type size_type; + typedef typename Allocator::difference_type difference_type; + typedef typename Allocator::reference reference; + typedef typename Allocator::const_reference const_reference; + typedef typename Allocator::pointer pointer; + typedef typename Allocator::const_pointer const_pointer; + */ + + typedef + Containers::IteratorAdapter<typename Base::iterator> + Iterator; + + typedef + Containers::IteratorAdapter<typename Base::const_iterator> + ConstIterator; + + + typedef + Containers::IteratorAdapter<typename Base::reverse_iterator> + ReverseIterator; + + typedef + Containers::IteratorAdapter<typename Base::const_reverse_iterator> + ConstReverseIterator; + + + using Base::npos; + using Base::empty; + + public: + explicit + StringTemplate () + { + } + + StringTemplate (StringTemplate const& str, Size pos, Size n = npos) + : Base (str, pos, n) + { + } + + StringTemplate (Value const* s, Size n) + : Base (s, n) + { + } + + StringTemplate (Value const* s) + : Base (s) + { + } + + StringTemplate (Size n, Value c) + : Base (n, c) + { + } + + template <typename InputIterator> + StringTemplate(InputIterator begin, InputIterator end) + : Base (begin, end) + { + } + + StringTemplate (StringTemplate const& other) + : Base (other) + { + } + + // Conversion from Base. + // + StringTemplate (Base const& str) + : Base (str) + { + } + + // Conversion from the Narrower type. Experimental. + // + StringTemplate (NarrowerChar const* s) + { + from_narrow (s); + } + + StringTemplate (StringTemplate<NarrowerChar> const& other) + { + from_narrow (other.c_str ()); + } + + StringTemplate (NarrowerBase const& other) + { + from_narrow (other.c_str ()); + } + + // Conversion to the Narrower type. Experimental. + // + struct NonRepresentable: virtual EH::Exception {}; + + StringTemplate<NarrowerChar> + to_narrow () const; + + // Assignment. + // + StringTemplate& + operator= (StringTemplate const& str) + { + base () = str; + return *this; + } + + StringTemplate& + operator= (Value const* s) + { + base () = s; + return *this; + } + + StringTemplate& + operator= (Value c) + { + base () = c; + return *this; + } + + // Assignment from Base. + // + StringTemplate& + operator= (Base const& str) + { + base () = str; + return *this; + } + + public: + StringTemplate& + operator+= (StringTemplate const& str) + { + base () += str; + return *this; + } + + StringTemplate& + operator+= (Value const* s) + { + base () += s; + return *this; + } + + StringTemplate& + operator+= (Value c) + { + base () += c; + return *this; + } + + + public: + Iterator + begin () + { + return Iterator (base ().begin ()); + } + + Iterator + end () + { + return Iterator (base ().end ()); + } + + + ConstIterator + begin () const + { + return ConstIterator (base ().begin ()); + } + + ConstIterator + end () const + { + return ConstIterator (base ().end ()); + } + + // + // + + ReverseIterator + rbegin () + { + return ReverseIterator (base ().rbegin ()); + } + + ReverseIterator + rend () + { + return ReverseIterator (base ().rend ()); + } + + + ConstReverseIterator + rbegin () const + { + return ConstReverseIterator (base ().rbegin ()); + } + + ConstReverseIterator + rend () const + { + return ConstReverseIterator (base ().rend ()); + } + + + // Conversion to Boolean. + // + private: + typedef Void (StringTemplate::*BooleanConvertable)(); + + void + true_ () + { + } + + public: + operator BooleanConvertable () const + { + return empty () ? 0 : &StringTemplate::true_; + } + + private: + Void + from_narrow (NarrowerChar const* s); + }; + + + template<typename C> + StringTemplate<C> + operator+ (StringTemplate<C> const& lhs, StringTemplate<C> const& rhs) + { + return StringTemplate<C> (lhs) += rhs; + } + + template<typename C> + StringTemplate<C> + operator+ (C const* lhs, StringTemplate<C> const& rhs) + { + return StringTemplate<C> (lhs) += rhs; + } + + template<typename C> + StringTemplate<C> + operator+ (StringTemplate<C> const& lhs, C const* rhs) + { + return StringTemplate<C> (lhs) += rhs; + } + + template<typename C> + StringTemplate<C> + operator+ (C lhs, StringTemplate<C> const& rhs) + { + return StringTemplate<C> (1, lhs) += rhs; + } + + + template<typename C> + StringTemplate<C> + operator+ (StringTemplate<C> const& lhs, C rhs) + { + return StringTemplate<C> (lhs) += rhs; + } + + // + // + typedef StringTemplate<Char> String; + typedef StringTemplate<Char> NarrowString; + typedef StringTemplate<WideChar> WideString; + + // Specialization for Char to WideChar conversion. + // + template <> + inline Void StringTemplate<WideChar, Char>:: + from_narrow (Char const* s) + { + Size size (std::mbstowcs (0, s, 0) + 1); + + // I dare to change the guts! + // + resize (size - 1); + + WideChar* p (const_cast<WideChar*> (data ())); + + std::mbstowcs (p, s, size); + } + + // Specialization for WideChar to Char conversion. + // + template <> + inline StringTemplate<Char> StringTemplate<WideChar, Char>:: + to_narrow () const + { + Size size (std::wcstombs (0, c_str (), 0)); + + if (size == Size (-1)) + throw NonRepresentable (); + + // I dare to change the guts! + // + StringTemplate<Char> r; + r.resize (size); + + Char* p (const_cast<Char*> (r.data ())); + + std::wcstombs (p, c_str (), size + 1); + + return r; + } + } + + using Types::String; + using Types::NarrowString; + using Types::WideString; + using Types::StringTemplate; +} + +#endif // CULT_TYPES_STRING_HXX diff --git a/libcult/documentation/BUGS b/libcult/documentation/BUGS new file mode 100644 index 0000000..139597f --- /dev/null +++ b/libcult/documentation/BUGS @@ -0,0 +1,2 @@ + + diff --git a/libcult/documentation/CORE b/libcult/documentation/CORE new file mode 100644 index 0000000..76e1a69 --- /dev/null +++ b/libcult/documentation/CORE @@ -0,0 +1,14 @@ +* types + +* eh + +* trace + +* mm -> eh, sched + +* meta + +* rtti -> containers!! + +* sched -> eh, mm + diff --git a/libcult/documentation/DESIGN b/libcult/documentation/DESIGN new file mode 100644 index 0000000..6d469a5 --- /dev/null +++ b/libcult/documentation/DESIGN @@ -0,0 +1,12 @@ + +@@ First layer include language usage policies (e.g. namespaces, eh) + and base libraries: + + eh, threading, memory management, tracing, containers + +@@ Tracing in libraries? Is it possible? + + + + +
\ No newline at end of file diff --git a/libcult/documentation/DOC b/libcult/documentation/DOC new file mode 100644 index 0000000..a593886 --- /dev/null +++ b/libcult/documentation/DOC @@ -0,0 +1 @@ +@@ Update README, NEWS and INSTALL (from index.xhtml) diff --git a/libcult/documentation/NOTES b/libcult/documentation/NOTES new file mode 100644 index 0000000..81b48e5 --- /dev/null +++ b/libcult/documentation/NOTES @@ -0,0 +1,3 @@ +@@ SUS dlsym has some ideas about symbol interpositions. + This could be relevant to the problem of calling orginal + operator new. diff --git a/libcult/documentation/RELEASE b/libcult/documentation/RELEASE new file mode 100644 index 0000000..3a7f1ab --- /dev/null +++ b/libcult/documentation/RELEASE @@ -0,0 +1 @@ +@@ copyright diff --git a/libcult/documentation/THOGHTS b/libcult/documentation/THOGHTS new file mode 100644 index 0000000..7bf1767 --- /dev/null +++ b/libcult/documentation/THOGHTS @@ -0,0 +1 @@ +@@ Access local resources the same way you access remote resources. diff --git a/libcult/documentation/TODO b/libcult/documentation/TODO new file mode 100644 index 0000000..a35515b --- /dev/null +++ b/libcult/documentation/TODO @@ -0,0 +1,3 @@ +@@ installation + +@@ Add short description for each example.
\ No newline at end of file diff --git a/libcult/documentation/TODO-CLI b/libcult/documentation/TODO-CLI new file mode 100644 index 0000000..242c0da --- /dev/null +++ b/libcult/documentation/TODO-CLI @@ -0,0 +1,7 @@ +@@ I should not assume that Utility::CommandLine is the only mechanism + used to parse command line. Application developer may be using + different components that employ different command line parsers. + Thus it seem to me that I should use argv/argc as input/output + format. + +@@ Notion of a default command (e.g., a& --help). diff --git a/libcult/documentation/TODO-EH b/libcult/documentation/TODO-EH new file mode 100644 index 0000000..ed7c133 --- /dev/null +++ b/libcult/documentation/TODO-EH @@ -0,0 +1,5 @@ +@@ Since there is only one header in eh maybe I should just make it + top-level eh.hxx? One disadvantage of this is that I will have to + qualify it with cult::exception when I inherit class-specific + exception base (maybe it is not too bad actually). +
\ No newline at end of file diff --git a/libcult/documentation/TODO-META b/libcult/documentation/TODO-META new file mode 100644 index 0000000..21eabd5 --- /dev/null +++ b/libcult/documentation/TODO-META @@ -0,0 +1,2 @@ + +@@ Move meta tests from other places to meta/. diff --git a/libcult/documentation/TODO-MM b/libcult/documentation/TODO-MM new file mode 100644 index 0000000..7979d15 --- /dev/null +++ b/libcult/documentation/TODO-MM @@ -0,0 +1,3 @@ +@@ new with arbitrary alignment + +%% Does not work if thread is not the most derived type. See 12.7.5. diff --git a/libcult/documentation/TODO-SCHED b/libcult/documentation/TODO-SCHED new file mode 100644 index 0000000..eeea3bb --- /dev/null +++ b/libcult/documentation/TODO-SCHED @@ -0,0 +1,12 @@ +@@ typedef std::thread_cancel in cult::os::sched? + +@@ maybe define USE_CXX_UNWIND or something in pthread.h + so I can detect that? + +@@ rename auto_lock to lock? + +@@ maybe add sched::exception: os::exception i.e., "scheduling exception"? + +@@ I am throwing exceptions in sched::thread that are not derived from + sched::exception. +
\ No newline at end of file diff --git a/libcult/documentation/cli/index.xhtml b/libcult/documentation/cli/index.xhtml new file mode 100644 index 0000000..9c3f1a8 --- /dev/null +++ b/libcult/documentation/cli/index.xhtml @@ -0,0 +1,106 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> + +<!-- + +file : documentation/cli/index.xhtml +author : Boris Kolpackov <boris@kolpackov.net> +copyright : Copyright (c) 2005-2010 Boris Kolpackov +license : GNU FDL v1.2; http://kolpackov.net/licenses/fdl-1.2.txt + +--> + +<head> + + <title>libcult/documentation/cli</title> + + <meta name="author" content="Boris Kolpackov"/> + <meta name="copyright" content="© 2005-2010 Boris Kolpackov"/> + <meta name="keywords" content="libcult,c++,command,line,interface,option,argument"/> + <meta name="description" content="libcult/documentation/cli"/> + + <link rel="stylesheet" type="text/css" href="../default.css"/> + +</head> + +<body> + +<div id="navigation"> +<p> +<a href="../.."><code>libcult</code></a> <code>/</code> +<a href=".."><code>documentation</code></a> <code>/</code> +<code>cli</code> +</p> +</div> + +<div id="content"> +<p>The <em>libcult</em> command line interace library provides +mechanisms for extracting informtaion from the command line. The +following code fragment is from <code>libcult/examples/cli</code>:</p> + +<pre class="cxx"> +namespace +{ + extern Char const help[] = "help"; + extern Char const version[] = "version"; + extern Char const outdir[] = "outdir"; +} + +typedef +CLI::Options<help, Boolean, + version, Boolean, + outdir, String> +Options; + +Int +main (Int argc, Char* argv[]) +{ + try + { + Options options (CLI::parse<Options> (argc, argv)); + + if (options.value<help> ()) + { + cerr << "usage: " << argv[0] << " [--help] [--version] [--outdir <dir>]" + << endl; + return 0; + } + + if (options.value<version> ()) + { + cerr << argv[0] << " 1.2.3" << endl; + return 0; + } + + if (String dir = options.value<outdir> ()) + { + cerr << "outdir: " << dir << endl; + } + } + catch (CLI::UnexpectedOption const& e) + { + cerr << "unexpected option " << e.option () <<endl; + } + catch (CLI::OptionFormat const& e) + { + cerr << "bad format for " << e.option () << endl; + } +} +</pre> +</div> + +<div id="docinfo"> +<p>Copyright © 2005-2010 <a title="Boris Kolpackov" +href="http://kolpackov.net">Boris Kolpackov</a>.</p> + +<div class="terms"> +Permission is granted to copy, distribute and/or modify this document under +the terms of the <a href="http://kolpackov.net/licenses/fdl-1.2.txt">GNU Free +Documentation License, version 1.2</a>; with no Invariant Sections, no +Front-Cover Texts and no Back-Cover Texts. +</div> +</div> + +</body> +</html> diff --git a/libcult/documentation/default.css b/libcult/documentation/default.css new file mode 100644 index 0000000..7242a94 --- /dev/null +++ b/libcult/documentation/default.css @@ -0,0 +1,160 @@ +body { + font-family : sans-serif; + font-weight : normal; + + color : black; + background : white; + + max-width : 42em; + padding : 2em 2em 2em 3em; + margin : 0 auto; +} + +h1, h2, h3, h4, h5, h6 { + font-family : sans-serif; + font-weight : 500; +} + +h1 { font-size : 170%; } +h2 { font-size : 145%; } +h3 { font-size : 125%; } +h4 { font-size : 110%; } +h5 { font-size : 106%; } +h6 { font-size : 100%; } + + +p.indent { + margin-left : 1.5em; +} + + +/* table of content */ +ul.toc li { + padding : .4em 0em 0em 0em; +} + + + +/* list of links */ +ul.menu { + list-style-type : none; +} + +ul.menu li { + padding-top : 0.3em; + padding-bottom : 0.3em; +} + + + +/* @@ I should probably use child selector here */ +/* list with multiline list-elements */ +ul.multiline li { + padding-top : 0.4em; + padding-bottom : 0.4em; +} + +ol.multiline li { + padding-top : 0.4em; + padding-bottom : 0.4em; +} + +dl.multiline dd { + padding-top : 0.4em; + padding-bottom : 0.4em; +} + +/* code */ + +code { + font-size : 114%; + font-family : monospace; +} + + +/* C++ code snippet */ +pre.cxx { + + margin-top : 0em; + margin-bottom : 2em; + + margin-left : 1em; +} + + + +/* make code snippet */ +pre.make { + + margin-top : 0em; + margin-bottom : 2em; + + margin-left : 1em; +} + + + +/* terminal output */ +pre.term { + + margin-top : 0em; + margin-bottom : 2em; + + margin-left : 1em; +} + + +/* Images */ +div.center { + text-align: center; +} + +/* Navigation. */ +#navigation { + margin-top: 1em; + border-bottom: 1px dashed #000000; +} + +#content { + margin-top: 2.5em; +} + + +/* Document info. */ +#docinfo { + margin-top: 4em; + border-top: 1px dashed #000000; + font-size: 70%; +} + +/* distribution terms */ +div.terms { + font-size : 114%; + font-family : monospace; +} + + + +/* Footnote */ + +#footnote { + margin-top: 2em; +} + +#footnote hr { + margin-left: 0; + margin-bottom: 1.5em; + width: 8em; + border-top: 1px solid #000000; + border-right: none; + border-bottom: none; + border-left: none; + +} + +#footnote p { + font-size: .91em; + text-indent: -0.8em; + padding-left: 0.8em; +} + diff --git a/libcult/documentation/dr/index.xhtml b/libcult/documentation/dr/index.xhtml new file mode 100644 index 0000000..0726adb --- /dev/null +++ b/libcult/documentation/dr/index.xhtml @@ -0,0 +1,57 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> + +<!-- + +file : documentation/dr/index.xhtml +author : Boris Kolpackov <boris@kolpackov.net> +copyright : Copyright (c) 2005-2010 Boris Kolpackov +license : GNU FDL v1.2; http://kolpackov.net/licenses/fdl-1.2.txt + +--> + +<head> + + <title>libcult/documentation/dr</title> + + <meta name="author" content="Boris Kolpackov"/> + <meta name="copyright" content="© 2005-2010 Boris Kolpackov"/> + <meta name="keywords" content="libcult,c++,data,representation,xdr"/> + <meta name="description" content="libcult/documentation/dr"/> + + <link rel="stylesheet" type="text/css" href="../default.css"/> + +</head> + +<body> + +<div id="navigation"> +<p> +<a href="../.."><code>libcult</code></a> <code>/</code> +<a href=".."><code>documentation</code></a> <code>/</code> +<code>dr</code> +</p> +</div> + +<div id="content"> +<p>The <em>libcult</em> data representation library provides serialization +streams for reading/writing data representations. Only XDR is supported +in current version.</p> +</div> + + +<div id="docinfo"> +<p>Copyright © 2005-2010 <a title="Boris Kolpackov" +href="http://kolpackov.net">Boris Kolpackov</a>.</p> + +<div class="terms"> +Permission is granted to copy, distribute and/or modify this document under +the terms of the <a href="http://kolpackov.net/licenses/fdl-1.2.txt">GNU Free +Documentation License, version 1.2</a>; with no Invariant Sections, no +Front-Cover Texts and no Back-Cover Texts. +</div> +</div> + +</body> +</html> diff --git a/libcult/documentation/eh/index.xhtml b/libcult/documentation/eh/index.xhtml new file mode 100644 index 0000000..7847c11 --- /dev/null +++ b/libcult/documentation/eh/index.xhtml @@ -0,0 +1,106 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> + +<!-- + +file : documentation/eh/index.xhtml +author : Boris Kolpackov <boris@kolpackov.net> +copyright : Copyright (c) 2005-2010 Boris Kolpackov +license : GNU FDL v1.2; http://kolpackov.net/licenses/fdl-1.2.txt + +--> + +<head> + + <title>libcult/documentation/eh</title> + + <meta name="author" content="Boris Kolpackov"/> + <meta name="copyright" content="© 2005-2010 Boris Kolpackov"/> + <meta name="keywords" content="libcult,c++,exception,handling"/> + <meta name="description" content="libcult/documentation/eh"/> + + <link rel="stylesheet" type="text/css" href="../default.css"/> + +</head> + +<body> + +<div id="navigation"> +<p> +<a href="../.."><code>libcult</code></a> <code>/</code> +<a href=".."><code>documentation</code></a> <code>/</code> +<code>eh</code> +</p> +</div> + +<div id="content"> +<p>The <code>libcult</code> exception handling library defines a base +exception type to be used by the rest of <code>libcult</code>. It has +a very basic interface:</p> + +<pre class="cxx"> +namespace Cult +{ + namespace EH + { + class Exception: public virtual std::exception + { + public: + virtual char const* + what () const throw (); + }; + } +} +</pre> + +<p>It derives from <code>std::exception</code> to allow catching +all exceptions with a single handler. Default implementation of the +<code>what()</code> member function returns type-name of the exception. +</p> + +<p>Every non-trivial library in <em>libcult</em> derives its own +base exception which all library-defined exceptions inherit. This +way you can catch all exceptions from a library with one handler.</p> + +<p>Sometimes it may seem convenient to further partition (by providing +corresponding base classes) exceptions space into <em>logic</em> +exceptions (shared by all implementations) and <em>implementation</em> +exceptions. For example, if you pass an allocator illegal size 0 then +the allocator throws an exception which can be classified as a logic +exception. If, however, you passed valid size but there is not enough +memory then the allocator throws an exception which can be classified +as an implementation exception<sup><a href="#fn1">1</a></sup>.</p> + +<p>The problem with this approach lies in the fact that someone's logic +exception is someone else's implementation exception. Consider, for +instance, a buffer type that is implemented in terms of our allocator. +If the buffer happened to request a memory block of size 0 and let +the exception propagate through the interface boundaries it is no longer +a logic exception.</p> + + +<div id="footnote"> +<hr/> +<p id="fn1"><sup>1</sup> It can be argued that the +<code>NoMemory</code> exception should rather be classified +as logic. However, let's assume there are allocator implementations +that have infinite memory.</p> +</div> + +</div> + +<div id="docinfo"> +<p>Copyright © 2005-2010 <a title="Boris Kolpackov" +href="http://kolpackov.net">Boris Kolpackov</a>.</p> + +<div class="terms"> +Permission is granted to copy, distribute and/or modify this document under +the terms of the <a href="http://kolpackov.net/licenses/fdl-1.2.txt">GNU Free +Documentation License, version 1.2</a>; with no Invariant Sections, no +Front-Cover Texts and no Back-Cover Texts. +</div> +</div> + +</body> +</html> diff --git a/libcult/documentation/index.xhtml b/libcult/documentation/index.xhtml new file mode 100644 index 0000000..cc2f45d --- /dev/null +++ b/libcult/documentation/index.xhtml @@ -0,0 +1,78 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> + +<!-- + +file : documentation/index.xhtml +author : Boris Kolpackov <boris@kolpackov.net> +copyright : Copyright (c) 2005-2010 Boris Kolpackov +license : GNU FDL v1.2; http://kolpackov.net/licenses/fdl-1.2.txt + +--> + +<head> + + <title>libcult/documentation</title> + + <meta name="author" content="Boris Kolpackov"/> + <meta name="copyright" content="© 2005-2010 Boris Kolpackov"/> + <meta name="keywords" content="c++,library"/> + <meta name="description" content="libcult/documentation"/> + + <link rel="stylesheet" type="text/css" href="default.css"/> + +</head> + +<body> + +<div id="navigation"> +<p> +<a href=".."><code>libcult</code></a> <code>/</code> +<code>documentation</code> +</p> +</div> + +<div id="content"> +<p>A number of lower-level libraries are grouped to form a core. Certain +organizational rules are relaxed for this group. For instance, libraries +from the core are allowed to have cyclic dependecies and can inject names +into the top-level namespace <code>cult</code>. Below is the list of +libraries that currently constitute the core:</p> + +<ul class="menu"> + <li><a href="eh/"><code>eh</code></a></li> + <li><a href="meta/"><code>meta</code></a></li> + <li><a href="mm/"><code>mm</code></a></li> + <li><a href="rtti/"><code>rtti</code></a></li> + <li><a href="sched/"><code>sched</code></a></li> + <li><a href="trace/"><code>trace</code></a></li> + <li><a href="types/"><code>types</code></a></li> +</ul> + +<p>The rest of the libraries normally depend on the core but not +vice-versa. Below is the list of them:</p> + +<ul class="menu"> + <li><a href="cli/"><code>cli</code></a></li> + <!--li><a href="containers/"><code>containers</code></a></li --> + <li><a href="dr/"><code>dr</code></a></li> + <li><a href="os/"><code>os</code></a></li> +</ul> +</div> + + +<div id="docinfo"> +<p>Copyright © 2005-2010 <a title="Boris Kolpackov" +href="http://kolpackov.net">Boris Kolpackov</a>.</p> + +<div class="terms"> +Permission is granted to copy, distribute and/or modify this document under +the terms of the <a href="http://kolpackov.net/licenses/fdl-1.2.txt">GNU Free +Documentation License, version 1.2</a>; with no Invariant Sections, no +Front-Cover Texts and no Back-Cover Texts. +</div> +</div> + +</body> +</html> diff --git a/libcult/documentation/meta/index.xhtml b/libcult/documentation/meta/index.xhtml new file mode 100644 index 0000000..15ae7a5 --- /dev/null +++ b/libcult/documentation/meta/index.xhtml @@ -0,0 +1,70 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> + +<!-- + +file : documentation/meta/index.xhtml +author : Boris Kolpackov <boris@kolpackov.net> +copyright : Copyright (c) 2005-2010 Boris Kolpackov +license : GNU FDL v1.2; http://kolpackov.net/licenses/fdl-1.2.txt + +--> + +<head> + + <title>libcult/documentation/meta</title> + + <meta name="author" content="Boris Kolpackov"/> + <meta name="copyright" content="© 2005-2010 Boris Kolpackov"/> + <meta name="keywords" content="libcult,c++,meta,programming"/> + <meta name="description" content="libcult/documentation/meta"/> + + <link rel="stylesheet" type="text/css" href="../default.css"/> + +</head> + +<body> + +<div id="navigation"> +<p> +<a href="../.."><code>libcult</code></a> <code>/</code> +<a href=".."><code>documentation</code></a> <code>/</code> +<code>meta</code> +</p> +</div> + +<div id="content"> +<p>The <em>libcult</em> metaprogramming library provides a template +metaprogramming framework, tests and transformations.</p> + +<p>Tests:</p> + +<ul class="menu"> + <li><code>class_p</code></li> + <li><code>polymorphic_p</code></li> +</ul> + +<p>Transformations:</p> + +<ul class="menu"> + <li><code>remove_c</code></li> + <li><code>remove_v</code></li> + <li><code>remove_cv</code></li> +</ul> +</div> + +<div id="docinfo"> +<p>Copyright © 2005-2010 <a title="Boris Kolpackov" +href="http://kolpackov.net">Boris Kolpackov</a>.</p> + +<div class="terms"> +Permission is granted to copy, distribute and/or modify this document under +the terms of the <a href="http://kolpackov.net/licenses/fdl-1.2.txt">GNU Free +Documentation License, version 1.2</a>; with no Invariant Sections, no +Front-Cover Texts and no Back-Cover Texts. +</div> +</div> + +</body> +</html> diff --git a/libcult/documentation/mm/index.xhtml b/libcult/documentation/mm/index.xhtml new file mode 100644 index 0000000..8ed79d4 --- /dev/null +++ b/libcult/documentation/mm/index.xhtml @@ -0,0 +1,77 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> + +<!-- + +file : documentation/mm/index.xhtml +author : Boris Kolpackov <boris@kolpackov.net> +copyright : Copyright (c) 2005-2010 Boris Kolpackov +license : GNU FDL v1.2; http://kolpackov.net/licenses/fdl-1.2.txt + +--> + +<head> + + <title>libcult/documentation/mm</title> + + <meta name="author" content="Boris Kolpackov"/> + <meta name="copyright" content="© 2005-2010 Boris Kolpackov"/> + <meta name="keywords" content="libcult,c++,memory,management"/> + <meta name="description" content="libcult/documentation/mm"/> + + <link rel="stylesheet" type="text/css" href="../default.css"/> + +</head> + +<body> + +<div id="navigation"> +<p> +<a href="../.."><code>libcult</code></a> <code>/</code> +<a href=".."><code>documentation</code></a> <code>/</code> +<code>mm</code> +</p> +</div> + +<div id="content"> +<p>The <em>libcult</em> memory management library provides +non-intrusive reference counter and a couple of smart pointers.</p> + +<p>It also overrides and overloads default memory management operators +(<code>operator new</code> and <code>operator delete</code>) to allow +special service objects (reference counter being one of them) to be +constructed in the memory block preceding the instance. This allows +transparent <em>instrumentation</em> of objects with a special +functionality like reference counting or locking.</p> + +<p>The two flavors of smart pointers are exclusive (called +<code>Evptr</code>, from <b>e</b>xclusi<b>v</b>e +<b>p</b>oin<b>t</b>e<b>r</b>) and shared (called <code>Shptr</code>, +from <b>sh</b>ared <b>p</b>oin<b>t</b>e<b>r</b>) pointers.</p> + +<p>The exclusive pointer has semantics similar to <code>std::auto_ptr</code> +(i.e., exclusive ownership of the object pointed to) except that it performs +automatic copying of the object pointed to when copied or assigned to another +exclusive pointer. Built-in copy-on-write optimization eliminates unnecessary +copying when instances of exclusive pointers are returned from functions or +stored in containers.</p> + +<p>The shared pointer has standard semantics of a reference-counting smart +pointer.</p> +</div> + +<div id="docinfo"> +<p>Copyright © 2005-2010 <a title="Boris Kolpackov" +href="http://kolpackov.net">Boris Kolpackov</a>.</p> + +<div class="terms"> +Permission is granted to copy, distribute and/or modify this document under +the terms of the <a href="http://kolpackov.net/licenses/fdl-1.2.txt">GNU Free +Documentation License, version 1.2</a>; with no Invariant Sections, no +Front-Cover Texts and no Back-Cover Texts. +</div> +</div> + +</body> +</html> diff --git a/libcult/documentation/os/index.xhtml b/libcult/documentation/os/index.xhtml new file mode 100644 index 0000000..62914fa --- /dev/null +++ b/libcult/documentation/os/index.xhtml @@ -0,0 +1,57 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> + +<!-- + +file : documentation/os/index.xhtml +author : Boris Kolpackov <boris@kolpackov.net> +copyright : Copyright (c) 2005-2010 Boris Kolpackov +license : GNU FDL v1.2; http://kolpackov.net/licenses/fdl-1.2.txt + +--> + +<head> + + <title>libcult/documentation/os</title> + + <meta name="author" content="Boris Kolpackov"/> + <meta name="copyright" content="© 2005-2010 Boris Kolpackov"/> + <meta name="keywords" content="libcult,os,net"/> + <meta name="description" content="libcult/documentation/os"/> + + <link rel="stylesheet" type="text/css" href="../default.css"/> + +</head> + +<body> + +<div id="navigation"> +<p> +<a href="../.."><code>libcult</code></a> <code>/</code> +<a href=".."><code>documentation</code></a> <code>/</code> +<code>os</code> +</p> +</div> + +<div id="content"> +<p>The <em>libcult</em> operating system library provides an object-oriented +interface to the OS primitives as defined by the Single +UNIX Specification. Only basic networking is supported in this +version.</p> +</div> + +<div id="docinfo"> +<p>Copyright © 2005-2010 <a title="Boris Kolpackov" +href="http://kolpackov.net">Boris Kolpackov</a>.</p> + +<div class="terms"> +Permission is granted to copy, distribute and/or modify this document under +the terms of the <a href="http://kolpackov.net/licenses/fdl-1.2.txt">GNU Free +Documentation License, version 1.2</a>; with no Invariant Sections, no +Front-Cover Texts and no Back-Cover Texts. +</div> +</div> + +</body> +</html> diff --git a/libcult/documentation/rtti/index.xhtml b/libcult/documentation/rtti/index.xhtml new file mode 100644 index 0000000..ff3238c --- /dev/null +++ b/libcult/documentation/rtti/index.xhtml @@ -0,0 +1,57 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> + +<!-- + +file : documentation/rtti/index.xhtml +author : Boris Kolpackov <boris@kolpackov.net> +copyright : Copyright (c) 2005-2010 Boris Kolpackov +license : GNU FDL v1.2; http://kolpackov.net/licenses/fdl-1.2.txt + +--> + +<head> + + <title>libcult/documentation/rtti</title> + + <meta name="author" content="Boris Kolpackov"/> + <meta name="copyright" content="© 2005-2010 Boris Kolpackov"/> + <meta name="keywords" content="libcult,c++,rtti,run-time,type,information"/> + <meta name="description" content="libcult/documentation/rtti"/> + + <link rel="stylesheet" type="text/css" href="../default.css"/> + +</head> + +<body> + +<div id="navigation"> +<p> +<a href="../.."><code>libcult</code></a> <code>/</code> +<a href=".."><code>documentation</code></a> <code>/</code> +<code>rtti</code> +</p> +</div> + +<div id="content"> +<p>The <em>libcult</em> run-time type information (rtti) library provides +a convenience wrapper around <code>std::type_info</code> as well as +facilities for optional extended type information (e.g., inheritance +graph).</p> +</div> + +<div id="docinfo"> +<p>Copyright © 2005-2010 <a title="Boris Kolpackov" +href="http://kolpackov.net">Boris Kolpackov</a>.</p> + +<div class="terms"> +Permission is granted to copy, distribute and/or modify this document under +the terms of the <a href="http://kolpackov.net/licenses/fdl-1.2.txt">GNU Free +Documentation License, version 1.2</a>; with no Invariant Sections, no +Front-Cover Texts and no Back-Cover Texts. +</div> +</div> + +</body> +</html> diff --git a/libcult/documentation/sched/index.xhtml b/libcult/documentation/sched/index.xhtml new file mode 100644 index 0000000..b685471 --- /dev/null +++ b/libcult/documentation/sched/index.xhtml @@ -0,0 +1,57 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> + +<!-- + +file : documentation/sched/index.xhtml +author : Boris Kolpackov <boris@kolpackov.net> +copyright : Copyright (c) 2005-2010 Boris Kolpackov +license : GNU FDL v1.2; http://kolpackov.net/licenses/fdl-1.2.txt + +--> + +<head> + + <title>libcult/documentation/sched</title> + + <meta name="author" content="Boris Kolpackov"/> + <meta name="copyright" content="© 2005-2010 Boris Kolpackov"/> + <meta name="keywords" content="libcult,c++,scheduling,thread,lock,mutex"/> + <meta name="description" content="libcult/documentation/sched"/> + + <link rel="stylesheet" type="text/css" href="../default.css"/> + +</head> + +<body> + +<div id="navigation"> +<p> +<a href="../.."><code>libcult</code></a> <code>/</code> +<a href=".."><code>documentation</code></a> <code>/</code> +<code>sched</code> +</p> +</div> + +<div id="content"> +<p>The <em>libcult</em> scheduling library provides an object-oriented +interface to POSIX thread primitives as defined by the Single +UNIX Specification.</p> +</div> + + +<div id="docinfo"> +<p>Copyright © 2005-2010 <a title="Boris Kolpackov" +href="http://kolpackov.net">Boris Kolpackov</a>.</p> + +<div class="terms"> +Permission is granted to copy, distribute and/or modify this document under +the terms of the <a href="http://kolpackov.net/licenses/fdl-1.2.txt">GNU Free +Documentation License, version 1.2</a>; with no Invariant Sections, no +Front-Cover Texts and no Back-Cover Texts. +</div> +</div> + +</body> +</html> diff --git a/libcult/documentation/trace/index.xhtml b/libcult/documentation/trace/index.xhtml new file mode 100644 index 0000000..eb00f04 --- /dev/null +++ b/libcult/documentation/trace/index.xhtml @@ -0,0 +1,102 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> + +<!-- + +file : documentation/trace/index.xhtml +author : Boris Kolpackov <boris@kolpackov.net> +copyright : Copyright (c) 2005-2010 Boris Kolpackov +license : GNU FDL v1.2; http://kolpackov.net/licenses/fdl-1.2.txt + +--> + +<head> + + <title>libcult/documentation/trace</title> + + <meta name="author" content="Boris Kolpackov"/> + <meta name="copyright" content="© 2005-2010 Boris Kolpackov"/> + <meta name="keywords" content="libcult,c++,tracing"/> + <meta name="description" content="libcult/documentation/trace"/> + + <link rel="stylesheet" type="text/css" href="../default.css"/> + +</head> + +<body> + +<div id="navigation"> +<p> +<a href="../.."><code>libcult</code></a> <code>/</code> +<a href=".."><code>documentation</code></a> <code>/</code> +<code>trace</code> +</p> +</div> + +<div id="content"> +<p>The <em>libcult</em> trace library provides a general-purpose +program tracing facility. The following code fragment can be found +in <code>libcult/examples/trace</code>:</p> + +<pre class="cxx"> +struct foo {}; + +std::ostream& +operator<< (std::ostream& o, foo const&) +{ + return o << "::foo"; +} + +namespace trace = cult::trace; + +trace::stream tout ("main", 4); + +int +main () +{ + using trace::record; + + trace::log::instance ().level (9); + + record a ("main", 2); + a << "notationally burdensome"; + tout << a; + + record b ("main", 2); + tout << (b << "a bit better, but still burdensome"); + + tout << (record ("main", 2) << "this is" + << " somewhat" + << " twisted but nice to be able to"); + + tout << "concise, using default level"; + + tout << 9 << "concise, using custom level"; + + foo f; + + tout << 3 << f << " " << 5; +} +</pre> + +<p>Along with the proper implementation, a <em>null</em> implementation is +provided which can be used to completely optimize trace code away. For details +see the <a href="http://kolpackov.net/pipermail/notes/2004-July/000010.html"> +Inlining code away</a> essay.</p> +</div> + +<div id="docinfo"> +<p>Copyright © 2005-2010 <a title="Boris Kolpackov" +href="http://kolpackov.net">Boris Kolpackov</a>.</p> + +<div class="terms"> +Permission is granted to copy, distribute and/or modify this document under +the terms of the <a href="http://kolpackov.net/licenses/fdl-1.2.txt">GNU Free +Documentation License, version 1.2</a>; with no Invariant Sections, no +Front-Cover Texts and no Back-Cover Texts. +</div> +</div> + +</body> +</html> diff --git a/libcult/documentation/types/index.xhtml b/libcult/documentation/types/index.xhtml new file mode 100644 index 0000000..07cb7db --- /dev/null +++ b/libcult/documentation/types/index.xhtml @@ -0,0 +1,56 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> + +<!-- + +file : documentation/types/index.xhtml +author : Boris Kolpackov <boris@kolpackov.net> +copyright : Copyright (c) 2005-2010 Boris Kolpackov +license : GNU FDL v1.2; http://kolpackov.net/licenses/fdl-1.2.txt + +--> + +<head> + + <title>libcult/documentation/types</title> + + <meta name="author" content="Boris Kolpackov"/> + <meta name="copyright" content="© 2005-2010 Boris Kolpackov"/> + <meta name="keywords" content="libcult,c++,types"/> + <meta name="description" content="libcult/documentation/types"/> + + <link rel="stylesheet" type="text/css" href="../default.css"/> + +</head> + +<body> + +<div id="navigation"> +<p> +<a href="../.."><code>libcult</code></a> <code>/</code> +<a href=".."><code>documentation</code></a> <code>/</code> +<code>types</code> +</p> +</div> + +<div id="content"> +<p>The <em>libcult</em> type library provides convenience aliases +for basic c++ types (e.g., <code>wchar</code> and <code>size</code>) +as well as a set of fixed-size integer types.</p> +</div> + +<div id="docinfo"> +<p>Copyright © 2005-2010 <a title="Boris Kolpackov" +href="http://kolpackov.net">Boris Kolpackov</a>.</p> + +<div class="terms"> +Permission is granted to copy, distribute and/or modify this document under +the terms of the <a href="http://kolpackov.net/licenses/fdl-1.2.txt">GNU Free +Documentation License, version 1.2</a>; with no Invariant Sections, no +Front-Cover Texts and no Back-Cover Texts. +</div> +</div> + +</body> +</html> diff --git a/libcult/examples/cli/cli.cxx b/libcult/examples/cli/cli.cxx new file mode 100644 index 0000000..922a23d --- /dev/null +++ b/libcult/examples/cli/cli.cxx @@ -0,0 +1,65 @@ +// file : examples/cli/cli.cxx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <cult/types.hxx> + +#include <cult/cli/options.hxx> +#include <cult/cli/options-spec.hxx> +#include <cult/cli/options-parser.hxx> + +#include <iostream> + +using std::cerr; +using std::endl; + +using namespace Cult; + +namespace +{ + extern Char const help[] = "help"; + extern Char const version[] = "version"; + extern Char const outdir[] = "outdir"; +} + +typedef +CLI::Options<help, Boolean, + version, Boolean, + outdir, String> +Options; + +Int +main (Int argc, Char* argv[]) +{ + try + { + Options options (CLI::parse<Options> (argc, argv)); + + if (options.value<help> ()) + { + cerr << "usage: " << argv[0] << " [--help] [--version] [--outdir <dir>]" + << endl; + return 0; + } + + if (options.value<version> ()) + { + cerr << argv[0] << " 1.2.3" << endl; + return 0; + } + + if (String dir = options.value<outdir> ()) + { + cerr << "outdir: " << dir << endl; + } + } + catch (CLI::UnexpectedOption const& e) + { + cerr << "unexpected option " << e.option () <<endl; + } + catch (CLI::OptionFormat const& e) + { + cerr << "bad format for " << e.option () << endl; + } +} diff --git a/libcult/examples/cli/makefile b/libcult/examples/cli/makefile new file mode 100644 index 0000000..004f135 --- /dev/null +++ b/libcult/examples/cli/makefile @@ -0,0 +1,48 @@ +# file : examples/cli/makefile +# author : Boris Kolpackov <boris@kolpackov.net> +# copyright : Copyright (c) 2005-2010 Boris Kolpackov +# license : GNU GPL v2; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../build/bootstrap.make + +cxx_tun := cli.cxx +cxx_obj := $(addprefix $(out_base)/,$(cxx_tun:.cxx=.o)) +cxx_od := $(cxx_obj:.o=.o.d) + +cult.l := $(out_root)/cult/cult.l +cult.l.cpp-options := $(out_root)/cult/cult.l.cpp-options + +cli := $(out_base)/cli +clean := $(out_base)/.clean + + +# Build. +# +$(cli): $(cxx_obj) $(cult.l) + +$(cxx_obj) $(cxx_od): $(cult.l.cpp-options) + +$(call include-dep,$(cxx_od)) + + +# Convenience alias for default target. +# +$(out_base)/: $(cli) + + +# Clean. +# +$(clean): $(cli).o.clean \ + $(addsuffix .cxx.clean,$(cxx_obj)) \ + $(addsuffix .cxx.clean,$(cxx_od)) + + +# How to. +# +$(call include,$(bld_root)/cxx/o-e.make) +$(call include,$(bld_root)/cxx/cxx-o.make) +$(call include,$(bld_root)/cxx/cxx-d.make) + +# Dependencies. +# +$(call import,$(src_root)/cult/makefile) diff --git a/libcult/examples/dr/xdr/makefile b/libcult/examples/dr/xdr/makefile new file mode 100644 index 0000000..6a4fa8f --- /dev/null +++ b/libcult/examples/dr/xdr/makefile @@ -0,0 +1,49 @@ +# file : examples/dr/xdr/makefile +# author : Boris Kolpackov <boris@kolpackov.net> +# copyright : Copyright (c) 2005-2010 Boris Kolpackov +# license : GNU GPL v2; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../build/bootstrap.make + +cxx_tun := xdr.cxx +cxx_obj := $(addprefix $(out_base)/,$(cxx_tun:.cxx=.o)) +cxx_od := $(cxx_obj:.o=.o.d) + +cult.l := $(out_root)/cult/cult.l +cult.l.cpp-options := $(out_root)/cult/cult.l.cpp-options + +xdr := $(out_base)/xdr +clean := $(out_base)/.clean + + +# Build. +# +$(xdr): $(cxx_obj) $(cult.l) + +$(cxx_obj) $(cxx_od): $(cult.l.cpp-options) + +$(call include-dep,$(cxx_od)) + + +# Convenience alias for default target. +# +$(out_base)/: $(xdr) + + +# Clean. +# +$(clean): $(xdr).o.clean \ + $(addsuffix .cxx.clean,$(cxx_obj)) \ + $(addsuffix .cxx.clean,$(cxx_od)) + + +# How to. +# +$(call include,$(bld_root)/cxx/o-e.make) +$(call include,$(bld_root)/cxx/cxx-o.make) +$(call include,$(bld_root)/cxx/cxx-d.make) + + +# Dependencies. +# +$(call import,$(src_root)/cult/makefile) diff --git a/libcult/examples/dr/xdr/xdr.cxx b/libcult/examples/dr/xdr/xdr.cxx new file mode 100644 index 0000000..38e948d --- /dev/null +++ b/libcult/examples/dr/xdr/xdr.cxx @@ -0,0 +1,87 @@ +// file : examples/dr/xdr/xdr.cxx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <cult/types.hxx> + +#include <cult/dr/xdr/input-stream.hxx> +#include <cult/dr/xdr/output-stream.hxx> + +#include <iostream> + +using namespace Cult; +using namespace DR::XDR; + +using std::cerr; +using std::endl; + +Int +main () +{ + try + { + OutputStream o (8); + + o << true << false; + + UnsignedInt8 a8 (0xDE); + UnsignedInt16 a16 (0xDEAD); + UnsignedInt32 a32 (0xDEADBEEF); + UnsignedInt64 a64 (0xDEADBEEFDEADBEEFULL); + + o << a8 << a16 << a32 << a64; + + Int8 b8 (-8); + Int16 b16 (-16); + Int32 b32 (-32); + Int64 b64 (-64); + + o << b8 << b16 << b32 << b64; + + String s ("reasonably loooooooooooooong string with some junk in it"); + + o << s; + + InputStream i (o.buffer ()); + + Boolean t, f; + String s1; + + i >> t >> f; + i >> a8 >> a16 >> a32 >> a64; + i >> b8 >> b16 >> b32 >> b64; + i >> s1; + + if (!t + || f + || a8 != 0xDE + || a16 != 0xDEAD + || a32 != 0xDEADBEEF + || a64 != 0xDEADBEEFDEADBEEFULL + || b8 != -8 + || b16 != -16 + || b32 != -32 + || b64 != -64 + || s1 != s) return 1; + + try + { + i >> t; + } + catch (Extraction const&) + { + return 0; + } + } + catch (Insertion const&) + { + cerr << "insertion" << endl; + } + catch (Extraction const&) + { + cerr << "extraction" << endl; + } + + return 1; +} diff --git a/libcult/examples/makefile b/libcult/examples/makefile new file mode 100644 index 0000000..d264910 --- /dev/null +++ b/libcult/examples/makefile @@ -0,0 +1,36 @@ +# file : examples/makefile +# author : Boris Kolpackov <boris@kolpackov.net> +# copyright : Copyright (c) 2005-2010 Boris Kolpackov +# license : GNU GPL v2; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../build/bootstrap.make +include $(scf_root)/configuration.make + +default := $(out_base)/ +clean := $(out_base)/.clean + +examples := $(out_base)/cli \ + $(out_base)/mm/shptr \ + $(out_base)/mm/transfer \ + $(out_base)/trace + +ifeq ($(cult_threads),y) +examples += $(out_base)/sched/main \ + $(out_base)/sched/cancel +endif + + +ifeq ($(cult_network),y) +examples += $(out_base)/os/net/ipv4/datagram \ + $(out_base)/os/net/ipv4/multicast +endif + +ifeq ($(cult_dr),y) +examples += $(out_base)/dr/xdr +endif + + +$(default): $(addsuffix /,$(examples)) +$(clean): $(addsuffix /.clean,$(examples)) + +$(foreach e,$(subst $(out_base),$(src_base),$(examples)),$(call import,$e/makefile)) diff --git a/libcult/examples/mm/shptr/makefile b/libcult/examples/mm/shptr/makefile new file mode 100644 index 0000000..2bf1598 --- /dev/null +++ b/libcult/examples/mm/shptr/makefile @@ -0,0 +1,48 @@ +# file : examples/mm/shptr/makefile +# author : Boris Kolpackov <boris@kolpackov.net> +# copyright : Copyright (c) 2005-2010 Boris Kolpackov +# license : GNU GPL v2; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../build/bootstrap.make + +cxx_tun := shptr.cxx +cxx_obj := $(addprefix $(out_base)/,$(cxx_tun:.cxx=.o)) +cxx_od := $(cxx_obj:.o=.o.d) + +cult.l := $(out_root)/cult/cult.l +cult.l.cpp-options := $(out_root)/cult/cult.l.cpp-options + +shptr := $(out_base)/shptr +clean := $(out_base)/.clean + + +# Build. +# +$(shptr): $(cxx_obj) $(cult.l) + +$(cxx_obj) $(cxx_od): $(cult.l.cpp-options) + +$(call include-dep,$(cxx_od)) + + +# Convenience alias for default target. +# +$(out_base)/: $(shptr) + + +# Clean. +# +$(clean): $(shptr).o.clean \ + $(addsuffix .cxx.clean,$(cxx_obj)) \ + $(addsuffix .cxx.clean,$(cxx_od)) + + +# How to. +# +$(call include,$(bld_root)/cxx/o-e.make) +$(call include,$(bld_root)/cxx/cxx-o.make) +$(call include,$(bld_root)/cxx/cxx-d.make) + +# Dependencies. +# +$(call import,$(src_root)/cult/makefile) diff --git a/libcult/examples/mm/shptr/shptr.cxx b/libcult/examples/mm/shptr/shptr.cxx new file mode 100644 index 0000000..cb026d4 --- /dev/null +++ b/libcult/examples/mm/shptr/shptr.cxx @@ -0,0 +1,73 @@ +// file : examples/mm/shptr/shptr.cxx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <cult/mm/shptr.hxx> +#include <cult/mm/new.hxx> // MM::locate +#include <cult/mm/counter.hxx> // MM::inc_ref + +#include <iostream> + +using std::cerr; +using std::endl; + +using namespace Cult; +using namespace MM; + +struct Foo +{ + virtual ~Foo () {} + char c; +}; + +struct Bar: virtual Foo {char c;}; + +struct Baz: virtual Foo {char c;}; + +struct Fox: Bar, Baz {}; + + +struct A +{ + char c[8]; +}; + +struct B +{ + char c[8]; +}; + +struct C : A, B +{ + char c[8]; +}; + +int +main () +{ + { + Baz* bp (new Fox); + Foo* fp (bp); + + Counter* cp (locate (fp, *counted)); + + inc_ref (bp); + + cp->dec_ref (); + + if (cp->dec_ref ()) cerr << "good: destroying" << endl; + else cerr << "bad: leaking" << endl; + + delete bp; + } + + { + Shptr<Fox> pfox (new Fox); + Shptr<Bar> pbar (pfox); + + Shptr<Foo> pfoo; + + pfoo = pbar; + } +} diff --git a/libcult/examples/mm/transfer/makefile b/libcult/examples/mm/transfer/makefile new file mode 100644 index 0000000..3380f10 --- /dev/null +++ b/libcult/examples/mm/transfer/makefile @@ -0,0 +1,48 @@ +# file : examples/mm/transfer/makefile +# author : Boris Kolpackov <boris@kolpackov.net> +# copyright : Copyright (c) 2005-2010 Boris Kolpackov +# license : GNU GPL v2; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../build/bootstrap.make + +cxx_tun := transfer.cxx +cxx_obj := $(addprefix $(out_base)/,$(cxx_tun:.cxx=.o)) +cxx_od := $(cxx_obj:.o=.o.d) + +cult.l := $(out_root)/cult/cult.l +cult.l.cpp-options := $(out_root)/cult/cult.l.cpp-options + +transfer := $(out_base)/transfer +clean := $(out_base)/.clean + + +# Build. +# +$(transfer): $(cxx_obj) $(cult.l) + +$(cxx_obj) $(cxx_od): $(cult.l.cpp-options) + +$(call include-dep,$(cxx_od)) + + +# Convenience alias for default target. +# +$(out_base)/: $(transfer) + + +# Clean. +# +$(clean): $(transfer).o.clean \ + $(addsuffix .cxx.clean,$(cxx_obj)) \ + $(addsuffix .cxx.clean,$(cxx_od)) + + +# How to. +# +$(call include,$(bld_root)/cxx/o-e.make) +$(call include,$(bld_root)/cxx/cxx-o.make) +$(call include,$(bld_root)/cxx/cxx-d.make) + +# Dependencies. +# +$(call import,$(src_root)/cult/makefile) diff --git a/libcult/examples/mm/transfer/transfer.cxx b/libcult/examples/mm/transfer/transfer.cxx new file mode 100644 index 0000000..81014d0 --- /dev/null +++ b/libcult/examples/mm/transfer/transfer.cxx @@ -0,0 +1,117 @@ +// file : examples/mm/transfer/transfer.cxx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <cult/mm/evptr.hxx> + +#include <iostream> + +using std::cerr; +using std::endl; + +using namespace Cult; + +unsigned long count = 0; +unsigned long clone_count = 0; + +struct Type +{ + Type () + { + ++count; + } + + ~Type () + { + --count; + } + + Evptr<Type> + clone () const + { + ++clone_count; + return Evptr<Type> (new Type); + } + + Void + f () const + { + Int i = i_; + ++i; + } + + Int i_; +}; + + +Evptr<Type> +source () +{ + return Evptr<Type> (new Type); +} + +Void +sink (Evptr<Type> a, Boolean r = true) +{ + if (r) + { + sink (a, false); + } + else + { + Evptr<Type> b (a); + + cerr << "\tshare count: " << b.count () << endl; + + // Any of these will trigger cloning. + // + b->f (); + } +} + +Int +main () +{ + // case 1 + // + { + cerr << "sink (new type)" << endl; + + clone_count = 0; + sink (new Type); + + cerr << "\tclone count: " << clone_count << endl + << endl; + } + + // case 2 + // + { + cerr << "sink (source ())" << endl; + + clone_count = 0; + sink (source ()); + + cerr << "\tclone count: " << clone_count << endl + << endl; + } + + + // case 3 + // + { + cerr << "sink (p)" << endl; + + clone_count = 0; + + Evptr<Type> p (new Type); + sink (p); + + cerr << "\tclone count: " << clone_count << endl + << endl; + } + + + cerr << "balance: " << count << endl; +} diff --git a/libcult/examples/os/net/ipv4/datagram/client.cxx b/libcult/examples/os/net/ipv4/datagram/client.cxx new file mode 100644 index 0000000..863fc25 --- /dev/null +++ b/libcult/examples/os/net/ipv4/datagram/client.cxx @@ -0,0 +1,66 @@ +// file : examples/os/net/ipv4/datagram/client.cxx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <cult/types.hxx> + +#include <cult/os/net/ipv4/address.hxx> +#include <cult/os/net/ipv4/datagram-socket.hxx> + +#include <iostream> +#include <unistd.h> // usleep + +#include "protocol.hxx" + +using std::cerr; +using std::endl; + +using namespace Cult; +using namespace OS::Net::IPv4; + +class Args {}; + +Int +main (Int argc, Char* argv[]) +{ + try + { + if (argc < 2) + throw Args (); + + Address addr (argv[1], 10000); + + DatagramSocket socket; + + Message msg; + msg.sn = 0; + + cerr << "message size : " << sizeof (msg) << " bytes" << endl; + cerr << "send buffer : " << socket.send_buffer_size () << " bytes" << endl; + + for (Index i = 0; i < payload_size; i++) + { + msg.payload[i] = i; + } + + for (; msg.sn < message_count; msg.sn++) + { + socket.send (&msg, sizeof (msg), addr); + + // ::usleep (10); + } + + return 0; + } + catch (OS::Exception const& e) + { + cerr << "errno: " << strerror (e.code ()) << endl; + } + catch (Args const&) + { + cerr << "usage: client <IPv4 address>" << endl; + } + + return 1; +} diff --git a/libcult/examples/os/net/ipv4/datagram/makefile b/libcult/examples/os/net/ipv4/datagram/makefile new file mode 100644 index 0000000..2dc8e1b --- /dev/null +++ b/libcult/examples/os/net/ipv4/datagram/makefile @@ -0,0 +1,55 @@ +# file : examples/os/net/ipv4/datagram/makefile +# author : Boris Kolpackov <boris@kolpackov.net> +# copyright : Copyright (c) 2005-2010 Boris Kolpackov +# license : GNU GPL v2; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../../../build/bootstrap.make + +client_cxx_tun := client.cxx +server_cxx_tun := server.cxx + +client_cxx_obj := $(addprefix $(out_base)/,$(client_cxx_tun:.cxx=.o)) +server_cxx_obj := $(addprefix $(out_base)/,$(server_cxx_tun:.cxx=.o)) + +cxx_obj := $(client_cxx_obj) $(server_cxx_obj) +cxx_od := $(cxx_obj:.o=.o.d) + +cult.l := $(out_root)/cult/cult.l +cult.l.cpp-options := $(out_root)/cult/cult.l.cpp-options + +client := $(out_base)/client +server := $(out_base)/server +clean := $(out_base)/.clean + +# Convenience alias for default target. +# +$(out_base)/: $(client) $(server) + +# Build. +# + +$(client): $(client_cxx_obj) $(cult.l) +$(server): $(server_cxx_obj) $(cult.l) + +$(cxx_obj) $(cxx_od): $(cult.l.cpp-options) + +$(call include-dep,$(cxx_od)) + + +# Clean. +# +$(clean): $(client).o.clean \ + $(server).o.clean \ + $(addsuffix .cxx.clean,$(cxx_obj)) \ + $(addsuffix .cxx.clean,$(cxx_od)) + + +# How to. +# +$(call include,$(bld_root)/cxx/o-e.make) +$(call include,$(bld_root)/cxx/cxx-o.make) +$(call include,$(bld_root)/cxx/cxx-d.make) + +# Dependencies. +# +$(call import,$(src_root)/cult/makefile) diff --git a/libcult/examples/os/net/ipv4/datagram/protocol.hxx b/libcult/examples/os/net/ipv4/datagram/protocol.hxx new file mode 100644 index 0000000..0f418e8 --- /dev/null +++ b/libcult/examples/os/net/ipv4/datagram/protocol.hxx @@ -0,0 +1,20 @@ +// file : examples/os/net/ipv4/datagram/protocol.hxx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef PROTOCOL_HXX +#define PROTOCOL_HXX + +#include <cult/types.hxx> + +Cult::UnsignedShort const payload_size = 256; +Cult::UnsignedLong const message_count = 100; + +struct Message +{ + Cult::UnsignedLong sn; + Cult::UnsignedShort payload[payload_size]; +}; + +#endif // PROTOCOL_HXX diff --git a/libcult/examples/os/net/ipv4/datagram/server.cxx b/libcult/examples/os/net/ipv4/datagram/server.cxx new file mode 100644 index 0000000..e788056 --- /dev/null +++ b/libcult/examples/os/net/ipv4/datagram/server.cxx @@ -0,0 +1,123 @@ +// file : examples/os/net/ipv4/datagram/server.cxx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <cult/types.hxx> +#include <cult/containers/vector.hxx> + +#include <cult/os/net/ipv4/address.hxx> +#include <cult/os/net/ipv4/datagram-socket.hxx> + +#include <iostream> +#include <cstring> // memcmp + +#include "protocol.hxx" + +using std::cerr; +using std::endl; + +using namespace Cult; +using namespace OS::Net::IPv4; + +typedef Containers::Vector<Boolean> StatusList; + +Int +main () +{ + try + { + Address addr (INADDR_ANY, 10000); + + DatagramSocket socket (addr); + + Message expected_msg; + expected_msg.sn = 0; + + for (UnsignedShort i = 0; i < payload_size; ++i) + { + expected_msg.payload[i] = i; + } + + StatusList received (message_count, 0); + StatusList damaged (message_count, 0); + StatusList duplicate (message_count, 0); + + Message msg; + + while (true) + { + socket.recv (&msg, sizeof (msg)); + + if (received[msg.sn]) + { + duplicate[msg.sn] = true; + } + else + { + received[msg.sn] = true; + + if (std::memcmp (expected_msg.payload, msg.payload, payload_size) != 0) + { + damaged[msg.sn] = true; + } + } + + if (msg.sn + 1 == message_count) break; + } + + UnsignedLong lost_count (0), damaged_count (0), duplicate_count (0); + + for (StatusList::Iterator i (received.begin ()), end (received.end ()); + i != end; + ++i) + if (!*i) ++lost_count; + + for (StatusList::Iterator i (damaged.begin ()), end (damaged.end ()); + i != end; + ++i) + if (*i) ++damaged_count; + + for (StatusList::Iterator i (duplicate.begin ()), end (duplicate.end ()); + i != end; + ++i) + if (*i) ++duplicate_count; + + cerr << "lost : " << lost_count << endl + << "damaged : " << damaged_count << endl + << "duplicate : " << duplicate_count << endl << endl; + + if (lost_count != 0) + { + cerr << "lost message dump:" << endl; + + UnsignedLong total = 0; + + for (StatusList::Iterator + begin (received.begin ()), i (begin), end (received.end ()); + i != end;) + { + if (!*i) + { + UnsignedLong count = 1; + + for (StatusList::Iterator j = i + 1; j < end && !*j; j++, count++) ; + + cerr << '\t' << i - begin << " : " << count << endl; + + i += count; + total += count; + } + else + ++i; + } + + if (total != lost_count) + cerr << "trouble" << endl; + } + } + catch (OS::Exception const& e) + { + cerr << "errno: " << e.code () << endl; + } +} diff --git a/libcult/examples/os/net/ipv4/multicast/client.cxx b/libcult/examples/os/net/ipv4/multicast/client.cxx new file mode 100644 index 0000000..863fc25 --- /dev/null +++ b/libcult/examples/os/net/ipv4/multicast/client.cxx @@ -0,0 +1,66 @@ +// file : examples/os/net/ipv4/datagram/client.cxx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <cult/types.hxx> + +#include <cult/os/net/ipv4/address.hxx> +#include <cult/os/net/ipv4/datagram-socket.hxx> + +#include <iostream> +#include <unistd.h> // usleep + +#include "protocol.hxx" + +using std::cerr; +using std::endl; + +using namespace Cult; +using namespace OS::Net::IPv4; + +class Args {}; + +Int +main (Int argc, Char* argv[]) +{ + try + { + if (argc < 2) + throw Args (); + + Address addr (argv[1], 10000); + + DatagramSocket socket; + + Message msg; + msg.sn = 0; + + cerr << "message size : " << sizeof (msg) << " bytes" << endl; + cerr << "send buffer : " << socket.send_buffer_size () << " bytes" << endl; + + for (Index i = 0; i < payload_size; i++) + { + msg.payload[i] = i; + } + + for (; msg.sn < message_count; msg.sn++) + { + socket.send (&msg, sizeof (msg), addr); + + // ::usleep (10); + } + + return 0; + } + catch (OS::Exception const& e) + { + cerr << "errno: " << strerror (e.code ()) << endl; + } + catch (Args const&) + { + cerr << "usage: client <IPv4 address>" << endl; + } + + return 1; +} diff --git a/libcult/examples/os/net/ipv4/multicast/makefile b/libcult/examples/os/net/ipv4/multicast/makefile new file mode 100644 index 0000000..cb35bf6 --- /dev/null +++ b/libcult/examples/os/net/ipv4/multicast/makefile @@ -0,0 +1,55 @@ +# file : examples/os/net/ipv4/multicast/makefile +# author : Boris Kolpackov <boris@kolpackov.net> +# copyright : Copyright (c) 2005-2010 Boris Kolpackov +# license : GNU GPL v2; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../../../build/bootstrap.make + +client_cxx_tun := client.cxx +server_cxx_tun := server.cxx + +client_cxx_obj := $(addprefix $(out_base)/,$(client_cxx_tun:.cxx=.o)) +server_cxx_obj := $(addprefix $(out_base)/,$(server_cxx_tun:.cxx=.o)) + +cxx_obj := $(client_cxx_obj) $(server_cxx_obj) +cxx_od := $(cxx_obj:.o=.o.d) + +cult.l := $(out_root)/cult/cult.l +cult.l.cpp-options := $(out_root)/cult/cult.l.cpp-options + +client := $(out_base)/client +server := $(out_base)/server +clean := $(out_base)/.clean + +# Convenience alias for default target. +# +$(out_base)/: $(client) $(server) + +# Build. +# + +$(client): $(client_cxx_obj) $(cult.l) +$(server): $(server_cxx_obj) $(cult.l) + +$(cxx_obj) $(cxx_od): $(cult.l.cpp-options) + +$(call include-dep,$(cxx_od)) + + +# Clean. +# +$(clean): $(client).o.clean \ + $(server).o.clean \ + $(addsuffix .cxx.clean,$(cxx_obj)) \ + $(addsuffix .cxx.clean,$(cxx_od)) + + +# How to. +# +$(call include,$(bld_root)/cxx/o-e.make) +$(call include,$(bld_root)/cxx/cxx-o.make) +$(call include,$(bld_root)/cxx/cxx-d.make) + +# Dependencies. +# +$(call import,$(src_root)/cult/makefile) diff --git a/libcult/examples/os/net/ipv4/multicast/protocol.hxx b/libcult/examples/os/net/ipv4/multicast/protocol.hxx new file mode 100644 index 0000000..a4057de --- /dev/null +++ b/libcult/examples/os/net/ipv4/multicast/protocol.hxx @@ -0,0 +1,20 @@ +// file : examples/os/net/ipv4/multicast/protocol.hxx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef PROTOCOL_HXX +#define PROTOCOL_HXX + +#include <cult/types.hxx> + +Cult::UnsignedShort const payload_size = 256; +Cult::UnsignedLong const message_count = 100; + +struct Message +{ + Cult::UnsignedLong sn; + Cult::UnsignedShort payload[payload_size]; +}; + +#endif // PROTOCOL_HXX diff --git a/libcult/examples/os/net/ipv4/multicast/server.cxx b/libcult/examples/os/net/ipv4/multicast/server.cxx new file mode 100644 index 0000000..5d8fe99 --- /dev/null +++ b/libcult/examples/os/net/ipv4/multicast/server.cxx @@ -0,0 +1,134 @@ +// file : examples/os/net/ipv4/datagram/server.cxx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <cult/types.hxx> +#include <cult/containers/vector.hxx> + +#include <cult/os/net/ipv4/address.hxx> +#include <cult/os/net/ipv4/multicast-socket.hxx> + +#include <iostream> +#include <cstring> // memcmp + +#include "protocol.hxx" + +using std::cerr; +using std::endl; + +using namespace Cult; +using namespace OS::Net::IPv4; + +typedef Containers::Vector<Boolean> StatusList; + +class Args {}; + +Int +main (Int argc, Char* argv[]) +{ + try + { + if (argc < 2) + throw Args (); + + Address addr (argv[1], 10000); + + MulticastSocket socket; + + socket.join (addr); + + Message expected_msg; + expected_msg.sn = 0; + + for (UnsignedShort i = 0; i < payload_size; ++i) + { + expected_msg.payload[i] = i; + } + + StatusList received (message_count, 0); + StatusList damaged (message_count, 0); + StatusList duplicate (message_count, 0); + + Message msg; + + while (true) + { + socket.recv (&msg, sizeof (msg)); + + if (received[msg.sn]) + { + duplicate[msg.sn] = true; + } + else + { + received[msg.sn] = true; + + if (std::memcmp (expected_msg.payload, msg.payload, payload_size) != 0) + { + damaged[msg.sn] = true; + } + } + + if (msg.sn + 1 == message_count) break; + } + + UnsignedLong lost_count (0), damaged_count (0), duplicate_count (0); + + for (StatusList::Iterator i (received.begin ()), end (received.end ()); + i != end; + ++i) + if (!*i) ++lost_count; + + for (StatusList::Iterator i (damaged.begin ()), end (damaged.end ()); + i != end; + ++i) + if (*i) ++damaged_count; + + for (StatusList::Iterator i (duplicate.begin ()), end (duplicate.end ()); + i != end; + ++i) + if (*i) ++duplicate_count; + + cerr << "lost : " << lost_count << endl + << "damaged : " << damaged_count << endl + << "duplicate : " << duplicate_count << endl << endl; + + if (lost_count != 0) + { + cerr << "lost message dump:" << endl; + + UnsignedLong total = 0; + + for (StatusList::Iterator + begin (received.begin ()), i (begin), end (received.end ()); + i != end;) + { + if (!*i) + { + UnsignedLong count = 1; + + for (StatusList::Iterator j = i + 1; j < end && !*j; j++, count++) ; + + cerr << '\t' << i - begin << " : " << count << endl; + + i += count; + total += count; + } + else + ++i; + } + + if (total != lost_count) + cerr << "trouble" << endl; + } + } + catch (OS::Exception const& e) + { + cerr << "errno: " << e.code () << endl; + } + catch (Args const&) + { + cerr << "usage: client <IPv4 address>" << endl; + } +} diff --git a/libcult/examples/sched/cancel/cancel.cxx b/libcult/examples/sched/cancel/cancel.cxx new file mode 100644 index 0000000..ee71449 --- /dev/null +++ b/libcult/examples/sched/cancel/cancel.cxx @@ -0,0 +1,63 @@ +// file : examples/sched/cancel/cancel.cxx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <cult/types.hxx> + +#include <cult/mm/shptr.hxx> + +#include <cult/sched/lock.hxx> +#include <cult/sched/mutex.hxx> +#include <cult/sched/thread.hxx> +#include <cult/sched/condition.hxx> + + +#include <iostream> +#include <unistd.h> // sleep + +using std::cerr; +using std::endl; + +using namespace Cult; +using namespace Sched; + +Void* +cond_wait_thread_proc (Void*) +{ + try + { + Mutex mutex; + Condition cond (mutex); + + Lock lock (mutex); + + cond.wait (); + } + /* + catch (std::thread_canceled const& e) + { + cerr << "caught thread_canceled" << endl; + throw; + } + */ + catch (...) + { + cerr << "presumably caught thread_canceled" << endl; + throw; + } + + return 0; +} + + +Int +main () +{ + Shptr<Thread> thread (new Thread (cond_wait_thread_proc)); + + sleep (1); + + thread->cancel (); + thread->join (); +} diff --git a/libcult/examples/sched/cancel/makefile b/libcult/examples/sched/cancel/makefile new file mode 100644 index 0000000..38a96bd --- /dev/null +++ b/libcult/examples/sched/cancel/makefile @@ -0,0 +1,48 @@ +# file : examples/sched/cancel/makefile +# author : Boris Kolpackov <boris@kolpackov.net> +# copyright : Copyright (c) 2005-2010 Boris Kolpackov +# license : GNU GPL v2; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../build/bootstrap.make + +cxx_tun := cancel.cxx +cxx_obj := $(addprefix $(out_base)/,$(cxx_tun:.cxx=.o)) +cxx_od := $(cxx_obj:.o=.o.d) + +cult.l := $(out_root)/cult/cult.l +cult.l.cpp-options := $(out_root)/cult/cult.l.cpp-options + +cancel := $(out_base)/cancel +clean := $(out_base)/.clean + + +# Build. +# +$(cancel): $(cxx_obj) $(cult.l) + +$(cxx_obj) $(cxx_od): $(cult.l.cpp-options) + +$(call include-dep,$(cxx_od)) + + +# Convenience alias for default target. +# +$(out_base)/: $(cancel) + + +# clean +# +$(clean): $(cancel).o.clean \ + $(addsuffix .cxx.clean,$(cxx_obj)) \ + $(addsuffix .cxx.clean,$(cxx_od)) + + +# How to. +# +$(call include,$(bld_root)/cxx/o-e.make) +$(call include,$(bld_root)/cxx/cxx-o.make) +$(call include,$(bld_root)/cxx/cxx-d.make) + +# Dependencies. +# +$(call import,$(src_root)/cult/makefile) diff --git a/libcult/examples/sched/main/main.cxx b/libcult/examples/sched/main/main.cxx new file mode 100644 index 0000000..58cc2cc --- /dev/null +++ b/libcult/examples/sched/main/main.cxx @@ -0,0 +1,43 @@ +// file : examples/sched/main/main.cxx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <cult/types.hxx> + +#include <cult/mm/shptr.hxx> +#include <cult/sched/thread.hxx> + +#include <iostream> +#include <unistd.h> // sleep + +using namespace Cult; +using namespace Sched; + +using std::cerr; +using std::endl; + +Void* +thread_func (Void*) +{ + cerr << "second thread: going to sleep for a few seconds" << endl; + + sleep (2); + + cerr << "second thread: woke up, now exiting" << endl; + + return 0; +} + + +Int +main () +{ + Shptr<Thread> self (new Thread); + + Shptr<Thread> other (new Thread (thread_func)); + + cerr << "initial thread: exiting" << endl; + + Thread::exit (0); +} diff --git a/libcult/examples/sched/main/makefile b/libcult/examples/sched/main/makefile new file mode 100644 index 0000000..945237f --- /dev/null +++ b/libcult/examples/sched/main/makefile @@ -0,0 +1,48 @@ +# file : examples/sched/main/makefile +# author : Boris Kolpackov <boris@kolpackov.net> +# copyright : Copyright (c) 2005-2010 Boris Kolpackov +# license : GNU GPL v2; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../build/bootstrap.make + +cxx_tun := main.cxx +cxx_obj := $(addprefix $(out_base)/,$(cxx_tun:.cxx=.o)) +cxx_od := $(cxx_obj:.o=.o.d) + +cult.l := $(out_root)/cult/cult.l +cult.l.cpp-options := $(out_root)/cult/cult.l.cpp-options + +main := $(out_base)/main +clean := $(out_base)/.clean + + +# Build. +# +$(main): $(cxx_obj) $(cult.l) + +$(cxx_obj) $(cxx_od): $(cult.l.cpp-options) + +$(call include-dep,$(cxx_od)) + + +# Convenience alias for default target. +# +$(out_base)/: $(main) + + +# Clean. +# +$(clean): $(main).o.clean \ + $(addsuffix .cxx.clean,$(cxx_obj)) \ + $(addsuffix .cxx.clean,$(cxx_od)) + + +# How to. +# +$(call include,$(bld_root)/cxx/o-e.make) +$(call include,$(bld_root)/cxx/cxx-o.make) +$(call include,$(bld_root)/cxx/cxx-d.make) + +# Dependencies. +# +$(call import,$(src_root)/cult/makefile) diff --git a/libcult/examples/trace/makefile b/libcult/examples/trace/makefile new file mode 100644 index 0000000..57e2b7b --- /dev/null +++ b/libcult/examples/trace/makefile @@ -0,0 +1,48 @@ +# file : examples/trace/makefile +# author : Boris Kolpackov <boris@kolpackov.net> +# copyright : Copyright (c) 2005-2010 Boris Kolpackov +# license : GNU GPL v2; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../build/bootstrap.make + +cxx_tun := trace.cxx +cxx_obj := $(addprefix $(out_base)/,$(cxx_tun:.cxx=.o)) +cxx_od := $(cxx_obj:.o=.o.d) + +cult.l := $(out_root)/cult/cult.l +cult.l.cpp-options := $(out_root)/cult/cult.l.cpp-options + +trace := $(out_base)/trace +clean := $(out_base)/.clean + + +# Build. +# +$(trace): $(cxx_obj) $(cult.l) + +$(cxx_obj) $(cxx_od): $(cult.l.cpp-options) + +$(call include-dep,$(cxx_od)) + + +# Convenience alias for default target. +# +$(out_base)/: $(trace) + + +# Clean. +# +$(clean): $(trace).o.clean \ + $(addsuffix .cxx.clean,$(cxx_obj)) \ + $(addsuffix .cxx.clean,$(cxx_od)) + + +# How to. +# +$(call include,$(bld_root)/cxx/o-e.make) +$(call include,$(bld_root)/cxx/cxx-o.make) +$(call include,$(bld_root)/cxx/cxx-d.make) + +# Dependencies. +# +$(call import,$(src_root)/cult/makefile) diff --git a/libcult/examples/trace/trace.cxx b/libcult/examples/trace/trace.cxx new file mode 100644 index 0000000..e2a09d4 --- /dev/null +++ b/libcult/examples/trace/trace.cxx @@ -0,0 +1,51 @@ +// file : examples/trace/trace.cxx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <cult/types.hxx> + +#include <cult/trace/log.hxx> +#include <cult/trace/record.hxx> +#include <cult/trace/stream.hxx> + +#include <ostream> + +using namespace Cult; + +struct Foo {}; + +std::ostream& +operator<< (std::ostream& o, Foo const&) +{ + return o << "::Foo"; +} + +Trace::Stream tout ("Examples::Trace", 4); + +Int +main () +{ + using Trace::Record; + + Trace::Log::instance ().level (9); + + Record a ("main", 2); + a << "notationally burdensome"; + tout << a; + + Record b ("main", 2); + tout << (b << "a bit better, but still burdensome"); + + tout << (Record ("main", 2) << "this is" + << " somewhat" + << " twisted but nice to be able to"); + + tout << "concise, using default level"; + + tout << 9 << "concise, using custom level"; + + Foo f; + + tout << 3 << f << " " << 5; +} diff --git a/libcult/makefile b/libcult/makefile new file mode 100644 index 0000000..64c9286 --- /dev/null +++ b/libcult/makefile @@ -0,0 +1,15 @@ +# file : makefile +# author : Boris Kolpackov <boris@kolpackov.net> +# copyright : Copyright (c) 2005-2010 Boris Kolpackov +# license : GNU GPL v2; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))build/bootstrap.make + +default := $(out_base)/ +clean := $(out_base)/.clean + +$(default): $(out_base)/cult/ $(out_base)/examples/ +$(clean): $(out_base)/cult/.clean $(out_base)/examples/.clean + +$(call import,$(src_base)/cult/makefile) +$(call import,$(src_base)/examples/makefile) diff --git a/libcult/version b/libcult/version new file mode 100644 index 0000000..c514bd8 --- /dev/null +++ b/libcult/version @@ -0,0 +1 @@ +1.4.6 diff --git a/libfrontend-elements/GPLv2 b/libfrontend-elements/GPLv2 new file mode 100644 index 0000000..3912109 --- /dev/null +++ b/libfrontend-elements/GPLv2 @@ -0,0 +1,340 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (C) <year> <name of author> + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + <signature of Ty Coon>, 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. diff --git a/libfrontend-elements/INSTALL b/libfrontend-elements/INSTALL new file mode 100644 index 0000000..0f8459c --- /dev/null +++ b/libfrontend-elements/INSTALL @@ -0,0 +1,25 @@ +Prerequisites + + build-time: + + - build >= 0.3.2 http://www.codesynthesis.com/projects/build/ + - g++ >= 3.4.3 http://gcc.gnu.org + + run-time: + + - libcult >= 1.4.1 http://kolpackov.net/projects/libcult/ + + +Building libfrontend-elements + + To build in the source directory simply say `make'. You can also + build in a separate directory, e.g., + + $ mkdir libfrontend-elements-i686-pc-linux-gnu + $ cd libfrontend-elements-i686-pc-linux-gnu + $ make -f ../libfrontend-elements-x.y.z/makefile + + +Installing libfrontend-elements + + Not supported in this version. diff --git a/libfrontend-elements/LICENSE b/libfrontend-elements/LICENSE new file mode 100644 index 0000000..3204be4 --- /dev/null +++ b/libfrontend-elements/LICENSE @@ -0,0 +1,25 @@ +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License version 2 as +published by the Free Software Foundation. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +In addition, as a special exception, Boris Kolpackov gives permission +to combine this library with other incompatibly-licensed modules in a +single program and to distribute such a combination provided that there +is no use of the functionality implemented by this library, directly +or indirectly, by such modules. You must obey the GNU General Public +License version 2 in all respects for all of the code used other than +such modules. In particular, the resulting program must be licensed +under a license compatible with the GNU General Public License version +2. If you modify this copy of the library, you may extend this exception +to your version of the library, but you are not obligated to do so. If +you do not wish to do so, delete this exception statement from your +version. diff --git a/libfrontend-elements/NEWS b/libfrontend-elements/NEWS new file mode 100644 index 0000000..68e3e22 --- /dev/null +++ b/libfrontend-elements/NEWS @@ -0,0 +1,40 @@ +Version 1.1.4 + + * Add swap() to the context class. + +Version 1.1.3 + + * Add support for libfrontend-elements bundling. + +Version 1.1.2 + + * Add an exception to the licensing terms to allow combining with + incompatibly-licensed modules in a single program. See the LICENSE + file for details. + +Version 1.1.1 + + * Fixed a bug in import stubs. + + * Got rid of warnings. + +Version 1.1.0 + + * Upgraded to build-0.3.0. + +Version 1.0.3 + + * Added non-const get function to context which returns non-const + reference. + +Version 1.0.2 + + * Upgraded to build-0.2.0. + +Version 1.0.1 + + * Build system improvements. + +Version 1.0.0 + + * First public release. diff --git a/libfrontend-elements/README b/libfrontend-elements/README new file mode 100644 index 0000000..7db441e --- /dev/null +++ b/libfrontend-elements/README @@ -0,0 +1,14 @@ +libfrontend-elements is a collection of elementary building blocks +for implementing compiler frontends in c++. + +See the NEWS file for the user-visible changes from the previous release. + +See the LICENSE file for distribution conditions. + +See the INSTALL file for prerequisites and installation instructions. + +See the documentation/index.xhtml file for documentation. + +The project page is at http://kolpackov.net/projects/libfrontend-elements/. + +Send bug reports or any other feedback to boris@kolpackov.net . diff --git a/libfrontend-elements/build/bootstrap.make b/libfrontend-elements/build/bootstrap.make new file mode 100644 index 0000000..cafe739 --- /dev/null +++ b/libfrontend-elements/build/bootstrap.make @@ -0,0 +1,46 @@ +# file : build/bootstrap.make +# author : Boris Kolpackov <boris@kolpackov.net> +# copyright : Copyright (c) 2005-2010 Boris Kolpackov +# license : GNU GPL v2; see accompanying LICENSE file + +project_name := libfrontend-elements + +# First try to include the bundled bootstrap.make if it exist. If that +# fails, let make search for the external bootstrap.make. +# +build := build-0.3 + +-include $(dir $(lastword $(MAKEFILE_LIST)))../../$(build)/bootstrap.make + +ifeq ($(patsubst %build/bootstrap.make,,$(lastword $(MAKEFILE_LIST))),) +include $(build)/bootstrap.make +endif + +# Aliases +# +.PHONY: $(out_base)/ \ + $(out_base)/.test \ + $(out_base)/.clean + +ifdef %interactive% + +.PHONY: test clean + +test: $(out_base)/.test +clean: $(out_base)/.clean + +ifneq ($(filter $(.DEFAULT_GOAL),test clean),) +.DEFAULT_GOAL := +endif + +endif + +# Don't include dependency info for certain targets. +# +define include-dep +$(call -include,$1) +endef + +ifneq ($(filter $(MAKECMDGOALS),clean cleandoc disfigure),) +include-dep = +endif diff --git a/libfrontend-elements/build/cxx/configuration-dynamic.make b/libfrontend-elements/build/cxx/configuration-dynamic.make new file mode 100644 index 0000000..568ab40 --- /dev/null +++ b/libfrontend-elements/build/cxx/configuration-dynamic.make @@ -0,0 +1,14 @@ +cxx_id := gnu +cxx_optimize := n +cxx_debug := n +cxx_rpath := n +cxx_pp_extra_options := $(CPPFLAGS) +cxx_extra_options := $(CXXFLAGS) +cxx_ld_extra_options := $(LDFLAGS) +cxx_extra_libs := $(LIBS) + +r := $(shell echo $(LDFLAGS) | sed -e 's/-L *\([^ ]*\)/-L\1/g') +r := $(patsubst -L%,%,$(filter -L%,$(r))) +r := $(shell echo $(r) | sed -e 's/ /:/g') + +cxx_extra_lib_paths := $(r) diff --git a/libfrontend-elements/build/cxx/gnu/configuration-dynamic.make b/libfrontend-elements/build/cxx/gnu/configuration-dynamic.make new file mode 100644 index 0000000..f3fe64d --- /dev/null +++ b/libfrontend-elements/build/cxx/gnu/configuration-dynamic.make @@ -0,0 +1,8 @@ +ifneq ($(CXX),) +cxx_gnu := $(CXX) +else +cxx_gnu := g++ +endif + +cxx_gnu_libraries := +cxx_gnu_optimization_options := diff --git a/libfrontend-elements/build/export/libfrontend-elements/stub.make b/libfrontend-elements/build/export/libfrontend-elements/stub.make new file mode 100644 index 0000000..27c0940 --- /dev/null +++ b/libfrontend-elements/build/export/libfrontend-elements/stub.make @@ -0,0 +1,10 @@ +# file : build/import/libfrontend-elements/stub.make +# author : Boris Kolpackov <boris@kolpackov.net> +# copyright : Copyright (c) 2005-2010 Boris Kolpackov +# license : GNU GPL v2; see accompanying LICENSE file + +$(call include-once,$(src_root)/frontend-elements/makefile,$(out_root)) + +$(call export,\ + l: $(out_root)/frontend-elements/frontend-elements.l,\ + cpp-options: $(out_root)/frontend-elements/frontend-elements.l.cpp-options) diff --git a/libfrontend-elements/build/import/libcult/LICENSE b/libfrontend-elements/build/import/libcult/LICENSE new file mode 100644 index 0000000..3912109 --- /dev/null +++ b/libfrontend-elements/build/import/libcult/LICENSE @@ -0,0 +1,340 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (C) <year> <name of author> + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + <signature of Ty Coon>, 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. diff --git a/libfrontend-elements/build/import/libcult/configuration-dynamic.make b/libfrontend-elements/build/import/libcult/configuration-dynamic.make new file mode 100644 index 0000000..73c92bb --- /dev/null +++ b/libfrontend-elements/build/import/libcult/configuration-dynamic.make @@ -0,0 +1,4 @@ +libcult_installed := n +src_root := $(abspath $(src_root)/../libcult) +scf_root := $(src_root)/build +out_root := $(src_root) diff --git a/libfrontend-elements/build/import/libcult/configuration-rules.make b/libfrontend-elements/build/import/libcult/configuration-rules.make new file mode 100644 index 0000000..dc19df4 --- /dev/null +++ b/libfrontend-elements/build/import/libcult/configuration-rules.make @@ -0,0 +1,15 @@ +# file : build/import/libcult/configuration-rules.make +# author : Boris Kolpackov <boris@kolpackov.net> +# copyright : Copyright (c) 2005-2009 Boris Kolpackov +# license : GNU GPL v2; see accompanying LICENSE file + +$(dcf_root)/import/libcult/configuration-dynamic.make: | $(dcf_root)/import/libcult/. + $(call message,,$(scf_root)/import/libcult/configure $@) + +ifndef %foreign% + +disfigure:: + $(call message,rm $(dcf_root)/import/libcult/configuration-dynamic.make,\ +rm -f $(dcf_root)/import/libcult/configuration-dynamic.make) + +endif diff --git a/libfrontend-elements/build/import/libcult/configure b/libfrontend-elements/build/import/libcult/configure new file mode 100755 index 0000000..afa4c9c --- /dev/null +++ b/libfrontend-elements/build/import/libcult/configure @@ -0,0 +1,55 @@ +#! /usr/bin/env bash + +# file : build/import/libcult/configure +# author : Boris Kolpackov <boris@kolpackov.net> +# copyright : Copyright (c) 2005-2009 Boris Kolpackov +# license : GNU GPL v2; see accompanying LICENSE file + + +# $1 - out file +# +# bld_root - build root +# project_name - project name +# + +source $bld_root/dialog.bash + + +$echo +$echo "Configuring external dependency on 'libcult' for '$project_name'." +$echo + +$echo +$echo "Would you like to configure dependency on the installed " +$echo "version of 'libcult' as opposed to the development build?" +$echo + +installed=`read_y_n y` + +path= + +if [ "$installed" = "n" ]; then + +$echo +$echo "Please enter the src_root for 'libcult'." +$echo + +src_root=`read_path --directory --exist` + +$echo +$echo "Please enter the out_root for 'libcult'." +$echo + +out_root=`read_path --directory $src_root` + +fi + +echo libcult_installed := $installed >$1 + +if [ "$installed" = "n" ]; then + +echo src_root := $src_root >>$1 +echo scf_root := \$\(src_root\)/build >>$1 +echo out_root := $out_root >>$1 + +fi diff --git a/libfrontend-elements/build/import/libcult/stub.make b/libfrontend-elements/build/import/libcult/stub.make new file mode 100644 index 0000000..f5f7691 --- /dev/null +++ b/libfrontend-elements/build/import/libcult/stub.make @@ -0,0 +1,30 @@ +# file : build/import/libcult/stub.make +# author : Boris Kolpackov <boris@kolpackov.net> +# copyright : Copyright (c) 2005-2009 Boris Kolpackov +# license : GNU GPL v2; see accompanying LICENSE file + +$(call include-once,$(scf_root)/import/libcult/configuration-rules.make,$(dcf_root)) + +libcult_installed := + +$(call -include,$(dcf_root)/import/libcult/configuration-dynamic.make) + +ifdef libcult_installed + +ifeq ($(libcult_installed),y) + +$(call export,l: -lcult,cpp-options: ) + +else + +# Include export stub. +# +$(call include,$(scf_root)/export/libcult/stub.make) + +endif + +else + +.NOTPARALLEL: + +endif diff --git a/libfrontend-elements/build/import/libfrontend-elements/LICENSE b/libfrontend-elements/build/import/libfrontend-elements/LICENSE new file mode 120000 index 0000000..5853aae --- /dev/null +++ b/libfrontend-elements/build/import/libfrontend-elements/LICENSE @@ -0,0 +1 @@ +../../../LICENSE
\ No newline at end of file diff --git a/libfrontend-elements/build/import/libfrontend-elements/configuration-rules.make b/libfrontend-elements/build/import/libfrontend-elements/configuration-rules.make new file mode 100644 index 0000000..ab45f1c --- /dev/null +++ b/libfrontend-elements/build/import/libfrontend-elements/configuration-rules.make @@ -0,0 +1,15 @@ +# file : build/import/libfrontend-elements/configuration-rules.make +# author : Boris Kolpackov <boris@kolpackov.net> +# copyright : Copyright (c) 2005-2010 Boris Kolpackov +# license : GNU GPL v2; see accompanying LICENSE file + +$(dcf_root)/import/libfrontend-elements/configuration-dynamic.make: | $(dcf_root)/import/libfrontend-elements/. + $(call message,,$(scf_root)/import/libfrontend-elements/configure $@) + +ifndef %foreign% + +disfigure:: + $(call message,rm $(dcf_root)/import/libfrontend-elements/configuration-dynamic.make,\ +rm -f $(dcf_root)/import/libfrontend-elements/configuration-dynamic.make) + +endif diff --git a/libfrontend-elements/build/import/libfrontend-elements/configure b/libfrontend-elements/build/import/libfrontend-elements/configure new file mode 100755 index 0000000..c0b60f4 --- /dev/null +++ b/libfrontend-elements/build/import/libfrontend-elements/configure @@ -0,0 +1,55 @@ +#! /usr/bin/env bash + +# file : build/import/libfrontend-elements/configure +# author : Boris Kolpackov <boris@kolpackov.net> +# copyright : Copyright (c) 2005-2010 Boris Kolpackov +# license : GNU GPL v2; see accompanying LICENSE file + + +# $1 - out file +# +# bld_root - build root +# project_name - project name +# + +source $bld_root/dialog.bash + + +$echo +$echo "Configuring external dependency on 'libfrontend-elements' for '$project_name'." +$echo + +$echo +$echo "Would you like to configure dependency on the installed version" +$echo "of 'libfrontend-elements' as opposed to the development build?" +$echo + +installed=`read_y_n y` + +path= + +if [ "$installed" = "n" ]; then + +$echo +$echo "Please enter the src_root for 'libfrontend-elements'." +$echo + +src_root=`read_path --directory --exist` + +$echo +$echo "Please enter the out_root for 'libfrontend-elements'." +$echo + +out_root=`read_path --directory $src_root` + +fi + +echo libfrontend_elements_installed := $installed >$1 + +if [ "$installed" = "n" ]; then + +echo src_root := $src_root >>$1 +echo scf_root := \$\(src_root\)/build >>$1 +echo out_root := $out_root >>$1 + +fi diff --git a/libfrontend-elements/build/import/libfrontend-elements/stub.make b/libfrontend-elements/build/import/libfrontend-elements/stub.make new file mode 100644 index 0000000..7eb1153 --- /dev/null +++ b/libfrontend-elements/build/import/libfrontend-elements/stub.make @@ -0,0 +1,30 @@ +# file : build/import/libfrontend-elements/stub.make +# author : Boris Kolpackov <boris@kolpackov.net> +# copyright : Copyright (c) 2005-2010 Boris Kolpackov +# license : GNU GPL v2; see accompanying LICENSE file + +$(call include-once,$(scf_root)/import/libfrontend-elements/configuration-rules.make,$(dcf_root)) + +libfrontend_elements_installed := + +$(call -include,$(dcf_root)/import/libfrontend-elements/configuration-dynamic.make) + +ifdef libfrontend_elements_installed + +ifeq ($(libfrontend_elements_installed),y) + +$(call export,l: -lfrontend-elements -lcult,cpp_options: ) + +else + +# Include export stub. +# +$(call include,$(scf_root)/export/libfrontend-elements/stub.make) + +endif + +else + +.NOTPARALLEL: + +endif diff --git a/libfrontend-elements/build/ld/configuration-lib-dynamic.make b/libfrontend-elements/build/ld/configuration-lib-dynamic.make new file mode 100644 index 0000000..74c8885 --- /dev/null +++ b/libfrontend-elements/build/ld/configuration-lib-dynamic.make @@ -0,0 +1,13 @@ +ld_lib_type := archive + +ifneq ($(AR),) +ld_lib_ar := $(AR) +else +ld_lib_ar := ar +endif + +ifneq ($(RANLIB),) +ld_lib_ranlib := $(RANLIB) +else +ld_lib_ranlib := ranlib +endif diff --git a/libfrontend-elements/documentation/DIAGNOSTIC b/libfrontend-elements/documentation/DIAGNOSTIC new file mode 100644 index 0000000..b9b6004 --- /dev/null +++ b/libfrontend-elements/documentation/DIAGNOSTIC @@ -0,0 +1,4 @@ +@@ How am I going to address the problem of translation? + +@@ Check Cult::Trace for any new ideas. + diff --git a/libfrontend-elements/documentation/TODO b/libfrontend-elements/documentation/TODO new file mode 100644 index 0000000..27d4041 --- /dev/null +++ b/libfrontend-elements/documentation/TODO @@ -0,0 +1 @@ +@@ Add example for traversal. diff --git a/libfrontend-elements/documentation/default.css b/libfrontend-elements/documentation/default.css new file mode 100644 index 0000000..7242a94 --- /dev/null +++ b/libfrontend-elements/documentation/default.css @@ -0,0 +1,160 @@ +body { + font-family : sans-serif; + font-weight : normal; + + color : black; + background : white; + + max-width : 42em; + padding : 2em 2em 2em 3em; + margin : 0 auto; +} + +h1, h2, h3, h4, h5, h6 { + font-family : sans-serif; + font-weight : 500; +} + +h1 { font-size : 170%; } +h2 { font-size : 145%; } +h3 { font-size : 125%; } +h4 { font-size : 110%; } +h5 { font-size : 106%; } +h6 { font-size : 100%; } + + +p.indent { + margin-left : 1.5em; +} + + +/* table of content */ +ul.toc li { + padding : .4em 0em 0em 0em; +} + + + +/* list of links */ +ul.menu { + list-style-type : none; +} + +ul.menu li { + padding-top : 0.3em; + padding-bottom : 0.3em; +} + + + +/* @@ I should probably use child selector here */ +/* list with multiline list-elements */ +ul.multiline li { + padding-top : 0.4em; + padding-bottom : 0.4em; +} + +ol.multiline li { + padding-top : 0.4em; + padding-bottom : 0.4em; +} + +dl.multiline dd { + padding-top : 0.4em; + padding-bottom : 0.4em; +} + +/* code */ + +code { + font-size : 114%; + font-family : monospace; +} + + +/* C++ code snippet */ +pre.cxx { + + margin-top : 0em; + margin-bottom : 2em; + + margin-left : 1em; +} + + + +/* make code snippet */ +pre.make { + + margin-top : 0em; + margin-bottom : 2em; + + margin-left : 1em; +} + + + +/* terminal output */ +pre.term { + + margin-top : 0em; + margin-bottom : 2em; + + margin-left : 1em; +} + + +/* Images */ +div.center { + text-align: center; +} + +/* Navigation. */ +#navigation { + margin-top: 1em; + border-bottom: 1px dashed #000000; +} + +#content { + margin-top: 2.5em; +} + + +/* Document info. */ +#docinfo { + margin-top: 4em; + border-top: 1px dashed #000000; + font-size: 70%; +} + +/* distribution terms */ +div.terms { + font-size : 114%; + font-family : monospace; +} + + + +/* Footnote */ + +#footnote { + margin-top: 2em; +} + +#footnote hr { + margin-left: 0; + margin-bottom: 1.5em; + width: 8em; + border-top: 1px solid #000000; + border-right: none; + border-bottom: none; + border-left: none; + +} + +#footnote p { + font-size: .91em; + text-indent: -0.8em; + padding-left: 0.8em; +} + diff --git a/libfrontend-elements/documentation/index.xhtml b/libfrontend-elements/documentation/index.xhtml new file mode 100644 index 0000000..ad12e50 --- /dev/null +++ b/libfrontend-elements/documentation/index.xhtml @@ -0,0 +1,77 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> + +<!-- + +file : documentation/index.xhtml +author : Boris Kolpackov <boris@kolpackov.net> +copyright : Copyright (c) 2005-2010 Boris Kolpackov +license : GNU FDL v1.2; http://kolpackov.net/licenses/fdl-1.2.txt + +--> + +<head> + + <title>libfrontend-elements/documentation</title> + + <meta name="author" content="Boris Kolpackov"/> + <meta name="copyright" content="© 2005-2010 Boris Kolpackov"/> + <meta name="keywords" content="c++,library,compiler,frontend"/> + <meta name="description" content="libfrontend-elements/documentation"/> + + <link rel="stylesheet" type="text/css" href="default.css"/> + +</head> + +<body> + +<div id="navigation"> +<p> +<a href=".."><code>libfrontend-elements</code></a> <code>/</code> +<code>documentation</code> +</p> +</div> + +<div id="content"> +<p><i>libfrontend-elements</i> consists of the following +elements:</p> + +<ul class="menu"> + <li><code>context</code></li> + <li><code>diagnostic</code></li> + <li><code>token-stream</code></li> + <li><code>traversal</code></li> +</ul> + + +<p>Context is essentially a heterogeneous map of names to instances of +arbitrary types. It is primarily used to allow arbitrary annotations of +<em>semantic graph</em> nodes and edges, which are often useful +during code generation.</p> + +<p>Diagnostic framework allows to implement consistent and extensible +compiler diagnostic without incurring significant notational burden.</p> + +<p><code>TokenStream</code> is a generic interface which is usually +implemented by a <em>lexical analyzer</em>.</p> + +<p>Traversal is a significant enhancement of a well-known <em>visitor</em> +idiom which is often used to traverse <em>semantic graphs</em>.</p> + +</div> + +<div id="docinfo"> +<p>Copyright © 2005-2010 <a title="Boris Kolpackov" +href="http://kolpackov.net">Boris Kolpackov</a>.</p> + +<div class="terms"> +Permission is granted to copy, distribute and/or modify this document under +the terms of the <a href="http://kolpackov.net/licenses/fdl-1.2.txt">GNU Free +Documentation License, version 1.2</a>; with no Invariant Sections, no +Front-Cover Texts and no Back-Cover Texts. +</div> +</div> + +</body> +</html> diff --git a/libfrontend-elements/examples/diagnostic/driver.cxx b/libfrontend-elements/examples/diagnostic/driver.cxx new file mode 100644 index 0000000..edb8a18 --- /dev/null +++ b/libfrontend-elements/examples/diagnostic/driver.cxx @@ -0,0 +1,29 @@ +// file : examples/diagnostic/driver.cxx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <cult/types.hxx> + +#include <frontend-elements/diagnostic.hxx> + +using namespace Cult::Types; +using namespace FrontendElements::Diagnostic; + +// Some ideas: The first letter (`e') in `epsyntx' is for error. +// The second letter identifies part of the system (p - parser). +// +// +Error epsyntx ("EPSYNTX"); + +Warning wscoer ("WS001"); + +Stream dout; + +Int +main () +{ + dout << epsyntx << "foo.cxx" << 1UL << 12UL << "syntax error"; + + dout << wscoer << "foo.cxx" << 2UL << "type coercion"; +} diff --git a/libfrontend-elements/examples/diagnostic/makefile b/libfrontend-elements/examples/diagnostic/makefile new file mode 100644 index 0000000..0945a81 --- /dev/null +++ b/libfrontend-elements/examples/diagnostic/makefile @@ -0,0 +1,48 @@ +# file : examples/diagnostic/makefile +# author : Boris Kolpackov <boris@kolpackov.net> +# copyright : Copyright (c) 2005-2010 Boris Kolpackov +# license : GNU GPL v2; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../build/bootstrap.make + +cxx_tun := driver.cxx +cxx_obj := $(addprefix $(out_base)/,$(cxx_tun:.cxx=.o)) +cxx_od := $(cxx_obj:.o=.o.d) + +frontend_elements.l := $(out_root)/frontend-elements/frontend-elements.l +frontend_elements.l.cpp-options := $(out_root)/frontend-elements/frontend-elements.l.cpp-options + +diagnostic := $(out_base)/diagnostic +clean := $(out_base)/.clean + + +# Build. +# +$(diagnostic): $(cxx_obj) $(frontend_elements.l) + +$(cxx_obj) $(cxx_od): $(frontend_elements.l.cpp-options) + +$(call include-dep,$(cxx_od)) + + +# Convenience alias for default target. +# +$(out_base)/: $(diagnostic) + + +# Clean. +# +$(clean): $(diagnostic).o.clean \ + $(addsuffix .cxx.clean,$(cxx_obj)) \ + $(addsuffix .cxx.clean,$(cxx_od)) + + +# How to. +# +$(call include,$(bld_root)/cxx/o-e.make) +$(call include,$(bld_root)/cxx/cxx-o.make) +$(call include,$(bld_root)/cxx/cxx-d.make) + +# Dependencies. +# +$(call import,$(src_root)/frontend-elements/makefile) diff --git a/libfrontend-elements/examples/makefile b/libfrontend-elements/examples/makefile new file mode 100644 index 0000000..7d7abd3 --- /dev/null +++ b/libfrontend-elements/examples/makefile @@ -0,0 +1,16 @@ +# file : examples/makefile +# author : Boris Kolpackov <boris@kolpackov.net> +# copyright : Copyright (c) 2005-2010 Boris Kolpackov +# license : GNU GPL v2; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../build/bootstrap.make + +default := $(out_base)/ +clean := $(out_base)/.clean + +examples := $(out_base)/diagnostic + +$(default): $(addsuffix /,$(examples)) +$(clean): $(addsuffix /.clean,$(examples)) + +$(foreach e,$(subst $(out_base),$(src_base),$(examples)),$(call import,$e/makefile)) diff --git a/libfrontend-elements/frontend-elements/context.cxx b/libfrontend-elements/frontend-elements/context.cxx new file mode 100644 index 0000000..295ce74 --- /dev/null +++ b/libfrontend-elements/frontend-elements/context.cxx @@ -0,0 +1,11 @@ +// file : frontend-elements/context.cxx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <frontend-elements/context.hxx> + +namespace FrontendElements +{ +} + diff --git a/libfrontend-elements/frontend-elements/context.hxx b/libfrontend-elements/frontend-elements/context.hxx new file mode 100644 index 0000000..9a31da2 --- /dev/null +++ b/libfrontend-elements/frontend-elements/context.hxx @@ -0,0 +1,133 @@ +// file : frontend-elements/context.hxx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef FRONTEND_ELEMENTS_CONTEXT_HXX +#define FRONTEND_ELEMENTS_CONTEXT_HXX + +#include <frontend-elements/types.hxx> + +#include <cult/containers/any.hxx> +#include <cult/containers/map.hxx> + +namespace FrontendElements +{ + class Context: public NonCopyable + { + typedef + Cult::Containers::Map<String, Cult::Containers::Any> + Map; + + public: + struct NoEntry {}; + struct Typing {}; + + Context () + { + } + + Void + swap (Context& c) + { + map_.swap (c.map_); + } + + Size + count (Char const* key) const + { + return map_.count (key); + } + + template <typename X> + X& + get (Char const* key) + { + Map::Iterator i (map_.find (key)); + + if (i == map_.end ()) + throw NoEntry (); + + try + { + return i->second. template value<X> (); + } + catch (Cult::Containers::Any::Typing const&) + { + throw Typing (); + } + } + + template <typename X> + X const& + get (Char const* key) const + { + Map::ConstIterator i (map_.find (key)); + + if (i == map_.end ()) + throw NoEntry (); + + try + { + return i->second. template value<X> (); + } + catch (Cult::Containers::Any::Typing const&) + { + throw Typing (); + } + } + + template <typename X> + X const& + get (Char const* key, X const& default_value) const + { + Map::ConstIterator i (map_.find (key)); + + if (i == map_.end ()) + return default_value; + + try + { + return i->second. template value<X> (); + } + catch (Cult::Containers::Any::Typing const&) + { + throw Typing (); + } + } + + template <typename X> + Void + set (Char const* key, X const& value) + { + try + { + if (!map_.insert (Map::Pair (key, value)).second) + { + Map::Iterator i (map_.find (key)); + i->second.template value <X> () = value; + } + } + catch (Cult::Containers::Any::Typing const&) + { + throw Typing (); + } + } + + Void + remove (Char const* key) + { + Map::Iterator i (map_.find (key)); + + if (i == map_.end ()) + throw NoEntry (); + + map_.erase (i); + } + + private: + Map map_; + }; +} + +#endif // FRONTEND_ELEMENTS_CONTEXT_HXX diff --git a/libfrontend-elements/frontend-elements/diagnostic.cxx b/libfrontend-elements/frontend-elements/diagnostic.cxx new file mode 100644 index 0000000..c99061f --- /dev/null +++ b/libfrontend-elements/frontend-elements/diagnostic.cxx @@ -0,0 +1,41 @@ +// file : frontend-elements/diagnostic.cxx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <frontend-elements/diagnostic.hxx> + +#include <iostream> + +namespace FrontendElements +{ + namespace Diagnostic + { + using std::cerr; + using std::endl; + + Log& Log:: + operator<< (Record const& r) + { + cerr << r.file () << ":" << r.line (); + + if (r.char_p ()) cerr << ":" << r.char_ (); + + cerr << ": "; + + r.kind ().print (cerr); + + cerr << ": " << r.text () << endl; + + return *this; + } + + Log& Log:: + instance () + { + static Log l; + return l; + } + } +} + diff --git a/libfrontend-elements/frontend-elements/diagnostic.hxx b/libfrontend-elements/frontend-elements/diagnostic.hxx new file mode 100644 index 0000000..6cc48da --- /dev/null +++ b/libfrontend-elements/frontend-elements/diagnostic.hxx @@ -0,0 +1,364 @@ +// file : frontend-elements/diagnostic.hxx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef FRONTEND_ELEMENTS_DIAGNOSTIC_HXX +#define FRONTEND_ELEMENTS_DIAGNOSTIC_HXX + +#include <frontend-elements/types.hxx> + +#include <ostream> +#include <sstream> + +namespace FrontendElements +{ + namespace Diagnostic + { + struct Kind + { + virtual + ~Kind () + { + } + + Kind (String const& id) + : id_ (id) + { + } + + Char const* + id () const + { + return id_.c_str (); + } + + virtual std::ostream& + print (std::ostream& o) const = 0; + + private: + String id_; + }; + + struct Error: Kind + { + virtual + ~Error () + { + } + + Error (String const& id) + : Kind (id) + { + } + + virtual std::ostream& + print (std::ostream& o) const + { + return o << "error " << id (); + } + }; + + struct Warning: Kind + { + virtual + ~Warning () + { + } + + Warning (String const& id) + : Kind (id) + { + } + + virtual std::ostream& + print (std::ostream& o) const + { + return o << "warning " << id (); + } + }; + + struct Remark: Kind + { + virtual + ~Remark () + { + } + + Remark (String const& id) + : Kind (id) + { + } + + virtual std::ostream& + print (std::ostream& o) const + { + return o << "remark " << id (); + } + }; + + struct Info: Kind + { + virtual + ~Info () + { + } + + Info (String const& id) + : Kind (id) + { + } + + virtual std::ostream& + print (std::ostream& o) const + { + return o << "info " << id (); + } + }; + + // + // + // + namespace Bits + { + class Mediator; + } + + class Record: public NonCopyable + { + public: + Record (Kind const& kind, + String const& file, + UnsignedLong line, + UnsignedLong char_) + : kind_ (&kind), + file_p_ (true), + file_ (file), + line_p_ (true), + line_ (line), + char_p_ (true), + char__ (char_) + { + } + + Record (Kind const& kind, + String const& file, + UnsignedLong line) + : kind_ (&kind), + file_p_ (true), + file_ (file), + line_p_ (true), + line_ (line), + char_p_ (false) + { + } + + private: + Record () + : kind_ (0), + file_p_ (false), + line_p_ (false), + char_p_ (false) + { + } + + + Void + kind (Kind const& kind) + { + kind_ = &kind; + } + + friend class Bits::Mediator; + + friend Record& + operator<< (Bits::Mediator const&, Kind const&); + + public: + class Undefined {}; + + Kind const& + kind () const + { + return *kind_; + } + + Char const* + file () const + { + if (file_p_) return file_.c_str (); + + throw Undefined (); + } + + UnsignedLong + line () const + { + if (line_p_) return line_; + + throw Undefined (); + } + + Boolean + char_p () const + { + return char_p_; + } + + UnsignedLong + char_ () const + { + if (char_p_) return char__; + + throw Undefined (); + } + + String + text () const + { + return o_.str (); + } + + public: + Record& + operator<< (Char const* s) + { + if (!char_p_ && !line_p_ && !file_p_) + { + file_ = s; + file_p_ = true; + } + else + o_ << s; + + return *this; + } + + //@@ Make it Int. + // + Record& + operator<< (UnsignedLong l) + { + if (file_p_ && !char_p_) + { + if (line_p_) + { + char__ = l; + char_p_ = true; + } + else + { + line_ = l; + line_p_ = true; + } + } + else + o_ << l; + + return *this; + } + + template <typename X> + Record& + operator<< (X const& x) + { + o_ << x; + return *this; + } + + private: + Kind const* kind_; + + Boolean file_p_; + String file_; + + Boolean line_p_; + UnsignedLong line_; + + Boolean char_p_; + UnsignedLong char__; + + std::ostringstream o_; + }; + + + // + // + // + class Log: public NonCopyable + { + public: + virtual + ~Log () + { + } + + public: + virtual Log& + operator<< (Record const& r); + + public: + static Log& + instance (); + }; + + + // + // + // + class Stream; + + namespace Bits + { + class Mediator + { + public: + Mediator (Stream& s) + : s_ (s) + { + } + + ~Mediator (); + + Stream& s_; + mutable Record r_; + }; + } + + class Stream: public NonCopyable + { + public: + Stream (Log& l = Log::instance ()) + : log_ (l) + { + } + + public: + Stream& + operator<< (Record const& r) + { + log_ << r; + return *this; + } + + friend Record& + operator<< (Bits::Mediator const& m, Kind const& k) + { + Record& r (m.r_); + + r.kind (k); + + return r; + } + + private: + Log& log_; + }; + + } +} + +#include <frontend-elements/diagnostic.ixx> +#include <frontend-elements/diagnostic.txx> + +#endif // FRONTEND_ELEMENTS_DIAGNOSTIC_HXX diff --git a/libfrontend-elements/frontend-elements/diagnostic.ixx b/libfrontend-elements/frontend-elements/diagnostic.ixx new file mode 100644 index 0000000..d32325d --- /dev/null +++ b/libfrontend-elements/frontend-elements/diagnostic.ixx @@ -0,0 +1,21 @@ +// file : frontend-elements/diagnostic.ixx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +namespace FrontendElements +{ + namespace Diagnostic + { + namespace Bits + { + inline + Mediator:: + ~Mediator () + { + s_ << r_; + } + } + } +} + diff --git a/libfrontend-elements/frontend-elements/diagnostic.txx b/libfrontend-elements/frontend-elements/diagnostic.txx new file mode 100644 index 0000000..b8391f4 --- /dev/null +++ b/libfrontend-elements/frontend-elements/diagnostic.txx @@ -0,0 +1,9 @@ +// file : frontend-elements/diagnostic.txx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +namespace FrontendElements +{ +} + diff --git a/libfrontend-elements/frontend-elements/makefile b/libfrontend-elements/frontend-elements/makefile new file mode 100644 index 0000000..8ca30b0 --- /dev/null +++ b/libfrontend-elements/frontend-elements/makefile @@ -0,0 +1,63 @@ +# file : frontend-elements/makefile +# author : Boris Kolpackov <boris@kolpackov.net> +# copyright : Copyright (c) 2005-2010 Boris Kolpackov +# license : GNU GPL v2; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../build/bootstrap.make + +cxx_tun := context.cxx \ + diagnostic.cxx \ + token-stream.cxx \ + traversal.cxx + +cxx_obj := $(addprefix $(out_base)/,$(cxx_tun:.cxx=.o)) +cxx_od := $(cxx_obj:.o=.o.d) + +frontend_elements.l := $(out_base)/frontend-elements.l +frontend_elements.l.cpp-options := $(out_base)/frontend-elements.l.cpp-options + +clean := $(out_base)/.clean + + +# Secure default target. +# +$(frontend_elements.l): + + +# Import libcult. +# +$(call import,\ + $(scf_root)/import/libcult/stub.make,\ + l: cult.l,cpp-options: cult.l.cpp-options) + +# Build. +# +$(frontend_elements.l): $(cxx_obj) $(cult.l) + +$(cxx_obj) $(cxx_od): $(frontend_elements.l.cpp-options) + +$(frontend_elements.l.cpp-options): value := -I$(src_root) +$(frontend_elements.l.cpp-options): $(cult.l.cpp-options) + +$(call include-dep,$(cxx_od)) + + +# Convenience alias for default target. +# +$(out_base)/: $(frontend_elements.l) + + +# Clean. +# +$(clean): $(frontend_elements.l).o.clean \ + $(frontend_elements.l.cpp-options).clean \ + $(addsuffix .cxx.clean,$(cxx_obj)) \ + $(addsuffix .cxx.clean,$(cxx_od)) + + + +# How to. +# +$(call include,$(bld_root)/cxx/o-l.make) +$(call include,$(bld_root)/cxx/cxx-o.make) +$(call include,$(bld_root)/cxx/cxx-d.make) diff --git a/libfrontend-elements/frontend-elements/token-stream.cxx b/libfrontend-elements/frontend-elements/token-stream.cxx new file mode 100644 index 0000000..dab785a --- /dev/null +++ b/libfrontend-elements/frontend-elements/token-stream.cxx @@ -0,0 +1,10 @@ +// file : frontend-elements/token-stream.cxx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <frontend-elements/token-stream.hxx> + +namespace FrontendElements +{ +} diff --git a/libfrontend-elements/frontend-elements/token-stream.hxx b/libfrontend-elements/frontend-elements/token-stream.hxx new file mode 100644 index 0000000..023842f --- /dev/null +++ b/libfrontend-elements/frontend-elements/token-stream.hxx @@ -0,0 +1,99 @@ +// file : frontend-elements/token-stream.hxx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef FRONTEND_ELEMENTS_TOKEN_STREAM_HXX +#define FRONTEND_ELEMENTS_TOKEN_STREAM_HXX + +#include <frontend-elements/types.hxx> + +#include <string> // std::char_traits +#include <istream> + +namespace FrontendElements +{ + // + // + template <typename Token> + class TokenStream + { + public: + virtual + ~TokenStream () + { + } + + public: + virtual Token + next () = 0; + }; + + + // + // + template <> + class TokenStream<Char> + { + public: + typedef + std::char_traits<FrontendElements::Char> + Traits; + + typedef + Traits::int_type + AsInt; + + typedef + Traits::char_type + AsChar; + + public: + virtual + ~TokenStream () + { + } + + public: + virtual AsInt + next () = 0; + + static AsChar + to_char (AsInt i) + { + return Traits::to_char_type (i); + } + + static AsInt + eos () + { + return Traits::eof (); + } + }; + + class InputStreamAdapter: public TokenStream<Char> + { + public: + virtual + ~InputStreamAdapter () + { + } + + InputStreamAdapter (std::istream& is) + : is_ (is) + { + } + + public: + virtual AsInt + next () + { + return is_.get (); + } + + private: + std::istream& is_; + }; +} + +#endif // FRONTEND_ELEMENTS_TOKEN_STREAM_HXX diff --git a/libfrontend-elements/frontend-elements/traversal.cxx b/libfrontend-elements/frontend-elements/traversal.cxx new file mode 100644 index 0000000..079a2a8 --- /dev/null +++ b/libfrontend-elements/frontend-elements/traversal.cxx @@ -0,0 +1,10 @@ +// file : frontend-elements/traversal.cxx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <frontend-elements/traversal.hxx> + +namespace FrontendElements +{ +} diff --git a/libfrontend-elements/frontend-elements/traversal.hxx b/libfrontend-elements/frontend-elements/traversal.hxx new file mode 100644 index 0000000..b320484 --- /dev/null +++ b/libfrontend-elements/frontend-elements/traversal.hxx @@ -0,0 +1,293 @@ +// file : frontend-elements/traversal.hxx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef FRONTEND_ELEMENTS_TRAVERSAL_HXX +#define FRONTEND_ELEMENTS_TRAVERSAL_HXX + +#include <frontend-elements/types.hxx> + +#include <cult/containers/map.hxx> +#include <cult/containers/set.hxx> +#include <cult/containers/vector.hxx> + +#include <cult/rtti/type-info.hxx> + +#include <cult/trace/stream.hxx> + +//@@ Move to trace next time you are about to uncomment this. +// +// #include <iostream> +// using std::wcerr; +// using std::endl; + + +namespace FrontendElements +{ + namespace Traversal + { + // + // + template<typename X> + class TraverserBase + { + protected: + virtual + ~TraverserBase (); + + virtual Void + trampoline (X&) = 0; + + virtual Void + trampoline (X const&) = 0; + + template <typename> + friend class DispatcherBase; + }; + + + // + // + template <typename X> + class DispatcherBase + { + typedef + Cult::RTTI::TypeId + TypeId; + + typedef + Cult::RTTI::TypeInfo + TypeInfo; + + public: + virtual + ~DispatcherBase (); + + virtual Void + dispatch (X&); + + virtual Void + dispatch (X const&); + + Void + map (TypeId id, TraverserBase<X>& t) + { + //wcerr << "map for " << id.name () << " to " << &t + // << " in " << &traversal_map_ << endl; + + Traversers& traversers (traversal_map_[id]); + traversers.push_back (&t); + } + + public: + typedef + Cult::Containers::Vector<TraverserBase<X>*> + Traversers; + + typedef + Cult::Containers::Map<TypeId, Traversers> + TraversalMap; + + typedef + typename TraversalMap::ConstIterator + Iterator; + + Iterator + begin () const + { + return traversal_map_.begin (); + } + + Iterator + end () const + { + return traversal_map_.end (); + } + + protected: + static Cult::Trace::Stream tout; + + private: + template<typename Y> + Void + dispatch_ (Y&); + + private: + + struct TypeInfoComparator + { + Boolean + operator () (TypeInfo const& a, TypeInfo const& b) const + { + return a.type_id () < b.type_id (); + } + }; + + typedef + Cult::Containers::Map<TypeInfo, UnsignedLong, TypeInfoComparator> + LevelMap; + + typedef + Cult::Containers::Set<TypeInfo, TypeInfoComparator> + TypeInfoSet; + + static UnsignedLong + compute_levels (TypeInfo const& ti, UnsignedLong cur, LevelMap& map); + + static Void + flatten_tree (TypeInfo const& ti, TypeInfoSet& set); + + private: + TraversalMap traversal_map_; + }; + + + // + // + template <typename X> + class Dispatcher: public virtual DispatcherBase<X> + { + public: + Dispatcher () + : merge_ (true) + { + } + + Void + traverser (DispatcherBase<X>& d) + { + for (typename DispatcherBase<X>::Iterator + i (d.begin ()), e (d.end ()); i != e; ++i) + { + for (typename DispatcherBase<X>::Traversers::ConstIterator + t (i->second.begin ()), e (i->second.end ()); t != e; ++t) + { + dispatcher_.map (i->first, **t); + } + } + } + + public: + virtual Void + dispatch (X& x) + { + merge (); + dispatcher_.dispatch (x); + } + + virtual Void + dispatch (X const& x) + { + merge (); + dispatcher_.dispatch (x); + } + + using DispatcherBase<X>::begin; + using DispatcherBase<X>::end; + + private: + Void + merge () + { + if (merge_) + { + for (typename DispatcherBase<X>::Iterator + i (begin ()), e (end ()); i != e; ++i) + { + for (typename DispatcherBase<X>::Traversers::ConstIterator + t (i->second.begin ()), e (i->second.end ()); t != e; ++t) + { + dispatcher_.map (i->first, **t); + } + } + + merge_ = false; + } + } + + protected: + template <typename I, typename Y> + Void + iterate_and_dispatch (I begin, I end, DispatcherBase<Y>& d) + { + for (; begin != end; ++begin) + { + d.dispatch (*begin); + } + } + + template <typename T, typename A, typename I, typename Y> + Void + iterate_and_dispatch (I begin, + I end, + DispatcherBase<Y>& d, + T& t, + Void (T::*next)(A&), + A& a) + { + for (; begin != end;) + { + d.dispatch (*begin); + + if (++begin != end && next != 0) + (t.*next) (a); + } + } + + private: + Boolean merge_; + DispatcherBase<X> dispatcher_; + }; + + + // + // + template <typename T, typename X> + struct Traverser : TraverserBase<X>, virtual Dispatcher<X> + { + typedef T Type; + + Traverser () + { + map (typeid (Type), *this); + } + + virtual Void + traverse (Type&) + { + abort (); + } + + virtual Void + traverse (Type const&) + { + abort (); + } + + protected: + virtual Void + trampoline (X& x) + { + //wcerr << "trampoline for " << &i << " to type " + // << typeid (type).name () << endl; + + traverse (dynamic_cast<Type&> (x)); + } + + virtual Void + trampoline (X const& x) + { + //wcerr << "trampoline for " << &i << " to type " + // << typeid (Type).name () << endl; + + traverse (dynamic_cast<Type const&> (x)); + } + }; + } +} + +#include <frontend-elements/traversal.ixx> +#include <frontend-elements/traversal.txx> + +#endif // FRONTEND_ELEMENTS_TRAVERSAL_HXX diff --git a/libfrontend-elements/frontend-elements/traversal.ixx b/libfrontend-elements/frontend-elements/traversal.ixx new file mode 100644 index 0000000..47c7314 --- /dev/null +++ b/libfrontend-elements/frontend-elements/traversal.ixx @@ -0,0 +1,8 @@ +// file : frontend-elements/traversal.ixx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +namespace FrontendElements +{ +} diff --git a/libfrontend-elements/frontend-elements/traversal.txx b/libfrontend-elements/frontend-elements/traversal.txx new file mode 100644 index 0000000..6e6bfa3 --- /dev/null +++ b/libfrontend-elements/frontend-elements/traversal.txx @@ -0,0 +1,135 @@ +// file : frontend-elements/traversal.txx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +namespace FrontendElements +{ + namespace Traversal + { + // TraverserBase + // + + template<typename X> + TraverserBase<X>:: + ~TraverserBase () + { + } + + // DispatcherBase + // + + template <typename X> + DispatcherBase<X>:: + ~DispatcherBase () + { + } + + template <typename X> + Void DispatcherBase<X>:: + dispatch (X& x) + { + dispatch_ (x); + } + + template <typename X> + void DispatcherBase<X>:: + dispatch (X const& x) + { + dispatch_ (x); + } + + template <typename X> + template <typename Y> + void DispatcherBase<X>:: + dispatch_ (Y& y) + { + LevelMap levels; + + TypeInfo const& ti (Cult::RTTI::lookup (typeid (y))); + + UnsignedLong max (compute_levels (ti, 0, levels)); + + tout << "starting dispatch process for " << ti.type_id ().name () + << " with " << max << " levels"; + + for (UnsignedLong l (0); l < max + 1; ++l) + { + TypeInfoSet dispatched; + + for (typename LevelMap::ConstIterator + i (levels.begin ()), e (levels.end ()); i != e; ++i) + { + if (i->second == l) + { + typename TraversalMap::ConstIterator v ( + traversal_map_.find (i->first.type_id ())); + + if (v != traversal_map_.end ()) + { + tout << "dispatching traversers for " << ti.type_id ().name () + << " as " << i->first.type_id ().name (); + + Traversers const& traversers (v->second); + + for (typename Traversers::ConstIterator + ti (traversers.begin ()), te (traversers.end ()); ti != te; ++ti) + { + (*ti)->trampoline (y); + } + + flatten_tree (i->first, dispatched); + } + } + } + + // Remove traversed types from the level map. + // + for (typename TypeInfoSet::ConstIterator i (dispatched.begin ()); + i != dispatched.end (); ++i) + { + levels.erase (*i); + } + } + } + + + template <typename X> + UnsignedLong DispatcherBase<X>:: + compute_levels (TypeInfo const& ti, UnsignedLong cur, LevelMap& map) + { + UnsignedLong ret (cur); + + if (map.find (ti) == map.end () || map[ti] < cur) map[ti] = cur; + + for (TypeInfo::BaseIterator i (ti.begin_base ()); + i != ti.end_base (); ++i) + { + UnsignedLong tmp (compute_levels (i->type_info (), cur + 1, map)); + + if (tmp > ret) + ret = tmp; + } + + return ret; + } + + template <typename X> + Void DispatcherBase<X>:: + flatten_tree (TypeInfo const& ti, TypeInfoSet& set) + { + set.insert (ti); + + for (TypeInfo::BaseIterator i = ti.begin_base (); + i != ti.end_base (); ++i) + { + flatten_tree (i->type_info (), set); + } + } + + template <typename X> + Cult::Trace::Stream DispatcherBase<X>:: + tout ("frontend-elements::traversal", 5); + } +} + diff --git a/libfrontend-elements/frontend-elements/types.hxx b/libfrontend-elements/frontend-elements/types.hxx new file mode 100644 index 0000000..f9a6905 --- /dev/null +++ b/libfrontend-elements/frontend-elements/types.hxx @@ -0,0 +1,16 @@ +// file : frontend-elements/types.hxx +// author : Boris Kolpackov <boris@kolpackov.net> +// copyright : Copyright (c) 2005-2010 Boris Kolpackov +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef FRONTEND_ELEMENTS_TYPES_HXX +#define FRONTEND_ELEMENTS_TYPES_HXX + +#include <cult/types.hxx> + +namespace FrontendElements +{ + using namespace Cult::Types; +} + +#endif // FRONTEND_ELEMENTS_TYPES_HXX diff --git a/libfrontend-elements/makefile b/libfrontend-elements/makefile new file mode 100644 index 0000000..99af2f9 --- /dev/null +++ b/libfrontend-elements/makefile @@ -0,0 +1,15 @@ +# file : makefile +# author : Boris Kolpackov <boris@kolpackov.net> +# copyright : Copyright (c) 2005-2010 Boris Kolpackov +# license : GNU GPL v2; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))build/bootstrap.make + +default := $(out_base)/ +clean := $(out_base)/.clean + +$(default): $(out_base)/frontend-elements/ $(out_base)/examples/ +$(clean): $(out_base)/frontend-elements/.clean $(out_base)/examples/.clean + +$(call import,$(src_base)/frontend-elements/makefile) +$(call import,$(src_base)/examples/makefile) diff --git a/libfrontend-elements/version b/libfrontend-elements/version new file mode 100644 index 0000000..65087b4 --- /dev/null +++ b/libfrontend-elements/version @@ -0,0 +1 @@ +1.1.4 diff --git a/libxsd-frontend/GPLv2 b/libxsd-frontend/GPLv2 new file mode 100644 index 0000000..3912109 --- /dev/null +++ b/libxsd-frontend/GPLv2 @@ -0,0 +1,340 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (C) <year> <name of author> + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + <signature of Ty Coon>, 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. diff --git a/libxsd-frontend/INSTALL b/libxsd-frontend/INSTALL new file mode 100644 index 0000000..756b7e4 --- /dev/null +++ b/libxsd-frontend/INSTALL @@ -0,0 +1,28 @@ +Prerequisites + + build-time: + + - build >= 0.3.7 http://www.codesynthesis.com/projects/build/ + - g++ >= 3.4.3 http://gcc.gnu.org + + run-time: + + - libfrontend-elements >= 1.1.4 http://kolpackov.net/projects/libfrontend-elements/ + - libcult >= 1.4.6 http://kolpackov.net/projects/libcult/ + - libxerces-c >= 2.6.0 http://xerces.apache.org/xerces-c/ + - libboost_filesystem >= 1.33.1 http://boost.org + + +Building libxsd-frontend + + To build in the source directory simply run 'make'. You can also + build in a separate directory, e.g., + + $ mkdir libxsd-frontend-i686-pc-linux-gnu + $ cd libxsd-frontend-i686-pc-linux-gnu + $ make -f ../libxsd-frontend-x.y.z/makefile + + +Installing libxsd-frontend + + Not supported in this version. diff --git a/libxsd-frontend/LICENSE b/libxsd-frontend/LICENSE new file mode 100644 index 0000000..33b4cbc --- /dev/null +++ b/libxsd-frontend/LICENSE @@ -0,0 +1,22 @@ +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License version 2 as +published by the Free Software Foundation. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +In addition, as a special exception, Code Synthesis Tools CC gives +permission to link this program with the Xerces-C++ library (or with +modified versions of Xerces-C++ that use the same license as Xerces-C++), +and distribute linked combinations including the two. You must obey +the GNU General Public License version 2 in all respects for all of +the code used other than Xerces-C++. If you modify this copy of the +program, you may extend this exception to your version of the program, +but you are not obligated to do so. If you do not wish to do so, delete +this exception statement from your version. diff --git a/libxsd-frontend/NEWS b/libxsd-frontend/NEWS new file mode 100644 index 0000000..aca46a7 --- /dev/null +++ b/libxsd-frontend/NEWS @@ -0,0 +1,281 @@ +Version 1.17.0 + + * Add support for resolving default/fixed values of QName type. Now + the qualified value is represented in the <namespace>#<qname> form. + + * Anonymous transformation now passes the actual file path instead of + the empty string to the AnonymousNameTranslator::translate() function + for the translation unit. + + * Anonymous transformation now names anonymous union member types. + + * Do not copy ref'ed default values for non-optional attributes. + + * Change predicate names in the semantic graph to consistently end + with _p. + + * New transformation: enum synthesis. + + * Add union information to the semantics graph. + + * Add support for translating schema file paths. + +Version 1.16.0 + + * New transformation: simplifier. It simplifies the schema graph + by, for example, removing empty compositors where it would not + change the semantics of the schema. + + * Added min() and max() accessors to the Particle and Compositor + semantic graph nodes. + + * Added optional strong include key to the schema-per-type + transformation. + +Version 1.15.0 + + * Support for the simple type/simple content restriction facets. + + * Support for suppressing frontend warnings. + + * Support for suppressing full schema checking. + + * Support for the interface changes introduced in Xerces-C++ 3.0.0.b2. + +Version 1.14.0 + + * Support for referencing names in including schema in chameleon inclusion. + + * Support for native paths in include/import directives. + + * Support for UTF-32 and UTF-16 in wchar_t. + + * Fixed a bug in import stubs. + + * Got rid of warnings reported by g++-4.3. + +Version 1.13.0 + + * Support for anonymous list item and simple type restriction base + in both parser and anonymous transformation. + +Version 1.12.0 + + * New transformations: anonymous and schema-per-type. + + * Optional location translator can now be passed to parser's + c-tor to translate included and imported schema locations. + + * Support for the upcoming Xerces-C++ 3.0.0 release. + + * Upgraded to the new boost import stub. + + * Upgraded to the new xerces-c import stub. + +Version 1.11.0 + + * New transformation, xsd-frontend/transformations/restriction.hxx, + copies omitted attributes and establishes associations between + attributes, elements, and wildcards in complex type inheritance + by restriction. + + * Upgraded to the new boost import stub. + +Version 1.10.1 + + * Add XML Schema error detection that is missing in Xerces-C++. + + * Update Xerces-C++ import stub to use the include directory + instead of src for header inclusion. + +Version 1.10.0 + + * New semantic graph node Annotation and edge Annotates. The parser + now handles XML Schema annotations and builds the corresponding + representation in the semantic graph. + + * The library no longer depends on the internal Xerces-C++ headers + and can be built against an installed version of Xerces-C++. + +Version 1.9.1 + + * Element wildcard (SemanticGraph::Any) is now present in the complex + type scope with an auto-generated name. + + * Additional regression tests for wildcard parsing. + +Version 1.9.0 + + * Upgraded to build-0.3.0. + +Version 1.8.3 + + * Fix for a bug in the edge case of empty prefix namespace resolution. + +Version 1.8.2 + + * Fix for a bug in element ordering. + + +Version 1.8.1 + + * Fix for a bug in element group forward reference resolution. + + * Set of regression tests. + + +Version 1.8.0 + + * Support for the anyAttribute wildcard. + + * Substitution edge is now propagated to referenced elements. + + * Special parsing method which returns a graph that virtually + corresponds to the XML Schema namespace definition with all + the built-in type. + + * Mixed content flag in SemanticGraph::Complex. + + * Optional proper handling of inheritance by restriction. + + +Version 1.7.0 + + * Added Restricts and Extends edges that model XML Schema inheritance + by restriction and inheritance by extension, respectively. The parser + was adjusted to use these edges instead of the generic Inherits edge. + + * Implemented handling of the complex content inheritance by restriction. + + * Fixed the chameleon inclusion code to create one Schema node per each + unique namespace. + + * Removed support for multiple inheritance in Complex. + + * Added a constructor that takes one node traverser to all edge traversers. + + +Version 1.6.1 + + * Bug fixes in the parser. + + +Version 1.6.0 + + * Support for traversing inheritance graph of enumerations. + + * Support for removal of Names edges. + + +Version 1.5.0 + + * Semantic graph now captures containment relations for elements. New + semantic graph nodes: particle, compositor, all, choice, sequence. + + * Element and attribute groups are not first-class semantic graph + nodes: element-group and attribute-group. References to groups + are still fully resolved (i.e., their content is copied into + referencing constructs). + + +Version 1.4.1 + + * Upgraded to the version-aware libboost import stub. + + +Version 1.4.0 + + * Moved to the build 0.2 series. + + * Support for the default and fixed values in attribute and element + definitions. + + +Version 1.3.0 + + * Several bug fixes in the parser. + + * Basic support for union. Union member types are not yet tracked. + + +Version 1.2.0 + + * Bug fixes in the parser. + + * Support for the 'substitutes' relation. + + * A flag that indicates whether an element is global. + + +Version 1.1.0 + + * Basic support for inheritance-by-restriction of complex types. + + * Support for mixed content model by simply ignoring the attribute. + + * Support for xsd:anyAttribute by simply ignoring the declaration. + + * Support for xsd:any. + + * Support for the element/attribute-belongs-to-a-namespace relation + for qualified elements and attributes. + + +Version 1.0.6 + + * Bug fixes in the parser. + + * Support for xsd:list. + + * Support for the 'refType' extension attribute which allows to specify + referenced type for IDREF/IDREFS data types. + + +Version 1.0.5 + + * Bug fixes in the parser. + + * SemanticGraph::Scope::NamesList uses List container instead of Vector. + This allows changing the semantic graph while traversing it. + + * SemanticGraph::Schema graph node supports multiple incoming Contains + edges. + + * Traversal::Scope has been extended to support traversal of changing + semantic graphs. + + +Version 1.0.4 + + * Diagnostics improvements. + + * Bug fixes in the filesystem path handling logic. + + +Version 1.0.3 + + * Bug fixes in the filesystem path handling logic. + + +Version 1.0.2 + + * Parser now handles subsequent inclusion/importing of the same + schema by creating an appropriate edge in the semantic graph. + Note that this may result in the semantic graph having cycles + of Includes/Imports/Sources edges. + + * Support for iteration over Belongs edges in SemanticGraph::Type. + + +Version 1.0.1 + + * Diagnostics improvements. + + * Build system improvements. + + * Code cleanups. + + +Version 1.0.0 + + * First public release. diff --git a/libxsd-frontend/README b/libxsd-frontend/README new file mode 100644 index 0000000..afc6e58 --- /dev/null +++ b/libxsd-frontend/README @@ -0,0 +1,13 @@ +libxsd-frontend is a compiler frontend for the W3C XML Schema definition +language. It includes parser, semantic graph types and traversal mechanism. + +See the NEWS file for the user-visible changes from the previous release. + +See the LICENSE file for distribution conditions. + +See the INSTALL file for prerequisites and installation instructions. + +The project page is at http://codesynthesis.com/projects/libxsd-frontend/. + +Send bug reports or any other feedback to the +libxsd-frontend-users@codesynthesis.com mailing list. diff --git a/libxsd-frontend/build/bootstrap.make b/libxsd-frontend/build/bootstrap.make new file mode 100644 index 0000000..4db3c99 --- /dev/null +++ b/libxsd-frontend/build/bootstrap.make @@ -0,0 +1,46 @@ +# file : build/bootstrap.make +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +project_name := libxsd-frontend + +# First try to include the bundled bootstrap.make if it exist. If that +# fails, let make search for the external bootstrap.make. +# +build := build-0.3 + +-include $(dir $(lastword $(MAKEFILE_LIST)))../../$(build)/bootstrap.make + +ifeq ($(patsubst %build/bootstrap.make,,$(lastword $(MAKEFILE_LIST))),) +include $(build)/bootstrap.make +endif + +# Aliases +# +.PHONY: $(out_base)/ \ + $(out_base)/.test \ + $(out_base)/.clean + +ifdef %interactive% + +.PHONY: test clean + +test: $(out_base)/.test +clean: $(out_base)/.clean + +ifneq ($(filter $(.DEFAULT_GOAL),test clean),) +.DEFAULT_GOAL := +endif + +endif + +# Don't include dependency info for certain targets. +# +define include-dep +$(call -include,$1) +endef + +ifneq ($(filter $(MAKECMDGOALS),clean cleandoc disfigure),) +include-dep = +endif diff --git a/libxsd-frontend/build/cxx/configuration-dynamic.make b/libxsd-frontend/build/cxx/configuration-dynamic.make new file mode 100644 index 0000000..568ab40 --- /dev/null +++ b/libxsd-frontend/build/cxx/configuration-dynamic.make @@ -0,0 +1,14 @@ +cxx_id := gnu +cxx_optimize := n +cxx_debug := n +cxx_rpath := n +cxx_pp_extra_options := $(CPPFLAGS) +cxx_extra_options := $(CXXFLAGS) +cxx_ld_extra_options := $(LDFLAGS) +cxx_extra_libs := $(LIBS) + +r := $(shell echo $(LDFLAGS) | sed -e 's/-L *\([^ ]*\)/-L\1/g') +r := $(patsubst -L%,%,$(filter -L%,$(r))) +r := $(shell echo $(r) | sed -e 's/ /:/g') + +cxx_extra_lib_paths := $(r) diff --git a/libxsd-frontend/build/cxx/gnu/configuration-dynamic.make b/libxsd-frontend/build/cxx/gnu/configuration-dynamic.make new file mode 100644 index 0000000..f3fe64d --- /dev/null +++ b/libxsd-frontend/build/cxx/gnu/configuration-dynamic.make @@ -0,0 +1,8 @@ +ifneq ($(CXX),) +cxx_gnu := $(CXX) +else +cxx_gnu := g++ +endif + +cxx_gnu_libraries := +cxx_gnu_optimization_options := diff --git a/libxsd-frontend/build/export/libxsd-frontend/stub.make b/libxsd-frontend/build/export/libxsd-frontend/stub.make new file mode 100644 index 0000000..adae4b7 --- /dev/null +++ b/libxsd-frontend/build/export/libxsd-frontend/stub.make @@ -0,0 +1,10 @@ +# file : build/import/libxsd-frontend/stub.make +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +$(call include-once,$(src_root)/xsd-frontend/makefile,$(out_root)) + +$(call export,\ + l: $(out_root)/xsd-frontend/xsd-frontend.l,\ + cpp-options: $(out_root)/xsd-frontend/xsd-frontend.l.cpp-options) diff --git a/libxsd-frontend/build/import/libboost/LICENSE b/libxsd-frontend/build/import/libboost/LICENSE new file mode 100644 index 0000000..3912109 --- /dev/null +++ b/libxsd-frontend/build/import/libboost/LICENSE @@ -0,0 +1,340 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (C) <year> <name of author> + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + <signature of Ty Coon>, 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. diff --git a/libxsd-frontend/build/import/libboost/configuration-dynamic.make b/libxsd-frontend/build/import/libboost/configuration-dynamic.make new file mode 100644 index 0000000..ab55882 --- /dev/null +++ b/libxsd-frontend/build/import/libboost/configuration-dynamic.make @@ -0,0 +1,8 @@ +libboost_installed := y +libboost_suffix := $(BOOST_LIB_SUFFIX) + +ifeq ($(BOOST_LINK_SYSTEM),n) +libboost_system := n +else +libboost_system := y +endif diff --git a/libxsd-frontend/build/import/libboost/configuration-rules.make b/libxsd-frontend/build/import/libboost/configuration-rules.make new file mode 100644 index 0000000..40fff9f --- /dev/null +++ b/libxsd-frontend/build/import/libboost/configuration-rules.make @@ -0,0 +1,15 @@ +# file : build/import/libboost/configuration-rules.make +# author : Boris Kolpackov <boris@kolpackov.net> +# copyright : Copyright (c) 2005-2010 Boris Kolpackov +# license : GNU GPL v2; see accompanying LICENSE file + +$(dcf_root)/import/libboost/configuration-dynamic.make: | $(dcf_root)/import/libboost/. + $(call message,,$(scf_root)/import/libboost/configure $@) + +ifndef %foreign% + +disfigure:: + $(call message,rm $(dcf_root)/import/libboost/configuration-dynamic.make,\ +rm -f $(dcf_root)/import/libboost/configuration-dynamic.make) + +endif diff --git a/libxsd-frontend/build/import/libboost/configure b/libxsd-frontend/build/import/libboost/configure new file mode 100755 index 0000000..c924a30 --- /dev/null +++ b/libxsd-frontend/build/import/libboost/configure @@ -0,0 +1,74 @@ +#! /usr/bin/env bash + +# file : build/import/libboost/configure +# author : Boris Kolpackov <boris@kolpackov.net> +# copyright : Copyright (c) 2005-2010 Boris Kolpackov +# license : GNU GPL v2; see accompanying LICENSE file + + +# $1 - out config file +# +# bld_root - build root +# project_name - project name +# + +source $bld_root/dialog.bash + + +$echo +$echo "Configuring external dependency on 'boost libraries' for '$project_name'." +$echo + +$echo +$echo "Would you like to configure dependency on the installed version" +$echo "of 'boost libraries' as opposed to the development build?" +$echo + +installed=`read_y_n y` + +if [ "$installed" = "n" ]; then + + $echo + $echo "Please enter the 'boost' root directory." + $echo + + root=`read_path --directory --exist` + + $echo + $echo "Please select the library type you would like to use:" + $echo + $echo "(1) archive" + $echo "(2) shared object" + $echo + + type=`read_option "archive shared" "shared"` +fi + +$echo +$echo "Link explicitly to the boost system library? This library" +$echo "is available since boost 1.35.0 and linking to it explicitly" +$echo "may be required by newer linkers." +$echo + +link_system=`read_y_n y` + +$echo +$echo "Please enter optional suffix that may be embedded into the" +$echo "boost library names. For example, if your library names are in" +$echo "the libboost_regex-gcc41-mt-d.so form, then enter -gcc41-mt-d" +$echo "Otherwise leave this field blank." +$echo + +suffix= +read -e -p "[]: " suffix + +echo libboost_installed := $installed >$1 +echo libboost_suffix := $suffix >>$1 +echo libboost_system := $link_system >>$1 + +if [ "$installed" = "n" ]; then + + echo libboost_root := $root >>$1 + echo libboost_type := $type >>$1 + +fi diff --git a/libxsd-frontend/build/import/libboost/filesystem/rules.make b/libxsd-frontend/build/import/libboost/filesystem/rules.make new file mode 100644 index 0000000..b5febd3 --- /dev/null +++ b/libxsd-frontend/build/import/libboost/filesystem/rules.make @@ -0,0 +1,53 @@ +# file : build/import/libboost/filesystem/rules.make +# author : Boris Kolpackov <boris@kolpackov.net> +# copyright : Copyright (c) 2005-2010 Boris Kolpackov +# license : GNU GPL v2; see accompanying LICENSE file + +#@@ Should use message everywhere. +# + +$(dcf_root)/import/libboost/%: root := $(libboost_root) + +$(dcf_root)/import/libboost/filesystem/filesystem.l: \ + | $(dcf_root)/import/libboost/filesystem/. + +ifeq ($(libboost_type),archive) + +ifeq ($(libboost_system),y) +$(dcf_root)/import/libboost/filesystem/filesystem.l: \ + $(libboost_root)/stage/lib/libboost_filesystem$(libboost_suffix).a \ + $(libboost_root)/stage/lib/libboost_system$(libboost_suffix).a +else +$(dcf_root)/import/libboost/filesystem/filesystem.l: \ + $(libboost_root)/stage/lib/libboost_filesystem$(libboost_suffix).a +endif + @echo $^ >$@ + +else + +ifeq ($(libboost_system),y) +$(dcf_root)/import/libboost/filesystem/filesystem.l: \ + $(libboost_root)/stage/lib/libboost_filesystem$(libboost_suffix).so \ + $(libboost_root)/stage/lib/libboost_system$(libboost_suffix).so +else +$(dcf_root)/import/libboost/filesystem/filesystem.l: \ + $(libboost_root)/stage/lib/libboost_filesystem$(libboost_suffix).so +endif + @echo $^ >$@ + @echo rpath:$(root)/stage/lib >>$@ + +endif + + +$(dcf_root)/import/libboost/filesystem/filesystem.l.cpp-options: \ + | $(dcf_root)/import/libboost/filesystem/. + @echo include: -I$(root) >$@ + +ifndef %foreign% + +disfigure:: + $(call message,rm $(dcf_root)/import/libboost/filesystem/filesystem.l,\ +rm -f $(dcf_root)/import/libboost/filesystem/filesystem.l) + $(call message,,rm -f $(dcf_root)/import/libboost/filesystem/filesystem.l.cpp-options) + +endif diff --git a/libxsd-frontend/build/import/libboost/filesystem/stub.make b/libxsd-frontend/build/import/libboost/filesystem/stub.make new file mode 100644 index 0000000..fb7398d --- /dev/null +++ b/libxsd-frontend/build/import/libboost/filesystem/stub.make @@ -0,0 +1,36 @@ +# file : build/import/libboost/filesystem/stub.make +# author : Boris Kolpackov <boris@kolpackov.net> +# copyright : Copyright (c) 2005-2010 Boris Kolpackov +# license : GNU GPL v2; see accompanying LICENSE file + +$(call include-once,$(scf_root)/import/libboost/configuration-rules.make,$(dcf_root)) + +libboost_installed := + +$(call -include,$(dcf_root)/import/libboost/configuration-dynamic.make) + +ifdef libboost_installed + +ifeq ($(libboost_installed),y) + +ifeq ($(libboost_system),y) +$(call export,l: -lboost_filesystem$(libboost_suffix) -lboost_system$(libboost_suffix),cpp_options: ) +else +$(call export,l: -lboost_filesystem$(libboost_suffix),cpp_options: ) +endif + +else + +$(call include-once,$(scf_root)/import/libboost/filesystem/rules.make,$(dcf_root)) + +$(call export,\ + l: $(dcf_root)/import/libboost/filesystem/filesystem.l,\ + cpp-options: $(dcf_root)/import/libboost/filesystem/filesystem.l.cpp-options) + +endif + +else + +.NOTPARALLEL: + +endif diff --git a/libxsd-frontend/build/import/libboost/version b/libxsd-frontend/build/import/libboost/version new file mode 100644 index 0000000..faef31a --- /dev/null +++ b/libxsd-frontend/build/import/libboost/version @@ -0,0 +1 @@ +0.7.0 diff --git a/libxsd-frontend/build/import/libcult/LICENSE b/libxsd-frontend/build/import/libcult/LICENSE new file mode 100644 index 0000000..3912109 --- /dev/null +++ b/libxsd-frontend/build/import/libcult/LICENSE @@ -0,0 +1,340 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (C) <year> <name of author> + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + <signature of Ty Coon>, 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. diff --git a/libxsd-frontend/build/import/libcult/configuration-dynamic.make b/libxsd-frontend/build/import/libcult/configuration-dynamic.make new file mode 100644 index 0000000..73c92bb --- /dev/null +++ b/libxsd-frontend/build/import/libcult/configuration-dynamic.make @@ -0,0 +1,4 @@ +libcult_installed := n +src_root := $(abspath $(src_root)/../libcult) +scf_root := $(src_root)/build +out_root := $(src_root) diff --git a/libxsd-frontend/build/import/libcult/configuration-rules.make b/libxsd-frontend/build/import/libcult/configuration-rules.make new file mode 100644 index 0000000..dc19df4 --- /dev/null +++ b/libxsd-frontend/build/import/libcult/configuration-rules.make @@ -0,0 +1,15 @@ +# file : build/import/libcult/configuration-rules.make +# author : Boris Kolpackov <boris@kolpackov.net> +# copyright : Copyright (c) 2005-2009 Boris Kolpackov +# license : GNU GPL v2; see accompanying LICENSE file + +$(dcf_root)/import/libcult/configuration-dynamic.make: | $(dcf_root)/import/libcult/. + $(call message,,$(scf_root)/import/libcult/configure $@) + +ifndef %foreign% + +disfigure:: + $(call message,rm $(dcf_root)/import/libcult/configuration-dynamic.make,\ +rm -f $(dcf_root)/import/libcult/configuration-dynamic.make) + +endif diff --git a/libxsd-frontend/build/import/libcult/configure b/libxsd-frontend/build/import/libcult/configure new file mode 100755 index 0000000..afa4c9c --- /dev/null +++ b/libxsd-frontend/build/import/libcult/configure @@ -0,0 +1,55 @@ +#! /usr/bin/env bash + +# file : build/import/libcult/configure +# author : Boris Kolpackov <boris@kolpackov.net> +# copyright : Copyright (c) 2005-2009 Boris Kolpackov +# license : GNU GPL v2; see accompanying LICENSE file + + +# $1 - out file +# +# bld_root - build root +# project_name - project name +# + +source $bld_root/dialog.bash + + +$echo +$echo "Configuring external dependency on 'libcult' for '$project_name'." +$echo + +$echo +$echo "Would you like to configure dependency on the installed " +$echo "version of 'libcult' as opposed to the development build?" +$echo + +installed=`read_y_n y` + +path= + +if [ "$installed" = "n" ]; then + +$echo +$echo "Please enter the src_root for 'libcult'." +$echo + +src_root=`read_path --directory --exist` + +$echo +$echo "Please enter the out_root for 'libcult'." +$echo + +out_root=`read_path --directory $src_root` + +fi + +echo libcult_installed := $installed >$1 + +if [ "$installed" = "n" ]; then + +echo src_root := $src_root >>$1 +echo scf_root := \$\(src_root\)/build >>$1 +echo out_root := $out_root >>$1 + +fi diff --git a/libxsd-frontend/build/import/libcult/stub.make b/libxsd-frontend/build/import/libcult/stub.make new file mode 100644 index 0000000..f5f7691 --- /dev/null +++ b/libxsd-frontend/build/import/libcult/stub.make @@ -0,0 +1,30 @@ +# file : build/import/libcult/stub.make +# author : Boris Kolpackov <boris@kolpackov.net> +# copyright : Copyright (c) 2005-2009 Boris Kolpackov +# license : GNU GPL v2; see accompanying LICENSE file + +$(call include-once,$(scf_root)/import/libcult/configuration-rules.make,$(dcf_root)) + +libcult_installed := + +$(call -include,$(dcf_root)/import/libcult/configuration-dynamic.make) + +ifdef libcult_installed + +ifeq ($(libcult_installed),y) + +$(call export,l: -lcult,cpp-options: ) + +else + +# Include export stub. +# +$(call include,$(scf_root)/export/libcult/stub.make) + +endif + +else + +.NOTPARALLEL: + +endif diff --git a/libxsd-frontend/build/import/libfrontend-elements/LICENSE b/libxsd-frontend/build/import/libfrontend-elements/LICENSE new file mode 100644 index 0000000..3912109 --- /dev/null +++ b/libxsd-frontend/build/import/libfrontend-elements/LICENSE @@ -0,0 +1,340 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (C) <year> <name of author> + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + <signature of Ty Coon>, 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. diff --git a/libxsd-frontend/build/import/libfrontend-elements/configuration-dynamic.make b/libxsd-frontend/build/import/libfrontend-elements/configuration-dynamic.make new file mode 100644 index 0000000..70d0da6 --- /dev/null +++ b/libxsd-frontend/build/import/libfrontend-elements/configuration-dynamic.make @@ -0,0 +1,4 @@ +libfrontend_elements_installed := n +src_root := $(abspath $(src_root)/../libfrontend-elements) +scf_root := $(src_root)/build +out_root := $(src_root) diff --git a/libxsd-frontend/build/import/libfrontend-elements/configuration-rules.make b/libxsd-frontend/build/import/libfrontend-elements/configuration-rules.make new file mode 100644 index 0000000..a7db697 --- /dev/null +++ b/libxsd-frontend/build/import/libfrontend-elements/configuration-rules.make @@ -0,0 +1,15 @@ +# file : build/import/libfrontend-elements/configuration-rules.make +# author : Boris Kolpackov <boris@kolpackov.net> +# copyright : Copyright (c) 2005-2009 Boris Kolpackov +# license : GNU GPL v2; see accompanying LICENSE file + +$(dcf_root)/import/libfrontend-elements/configuration-dynamic.make: | $(dcf_root)/import/libfrontend-elements/. + $(call message,,$(scf_root)/import/libfrontend-elements/configure $@) + +ifndef %foreign% + +disfigure:: + $(call message,rm $(dcf_root)/import/libfrontend-elements/configuration-dynamic.make,\ +rm -f $(dcf_root)/import/libfrontend-elements/configuration-dynamic.make) + +endif diff --git a/libxsd-frontend/build/import/libfrontend-elements/configure b/libxsd-frontend/build/import/libfrontend-elements/configure new file mode 100755 index 0000000..d02b4f7 --- /dev/null +++ b/libxsd-frontend/build/import/libfrontend-elements/configure @@ -0,0 +1,55 @@ +#! /usr/bin/env bash + +# file : build/import/libfrontend-elements/configure +# author : Boris Kolpackov <boris@kolpackov.net> +# copyright : Copyright (c) 2005-2009 Boris Kolpackov +# license : GNU GPL v2; see accompanying LICENSE file + + +# $1 - out file +# +# bld_root - build root +# project_name - project name +# + +source $bld_root/dialog.bash + + +$echo +$echo "Configuring external dependency on 'libfrontend-elements' for '$project_name'." +$echo + +$echo +$echo "Would you like to configure dependency on the installed version" +$echo "of 'libfrontend-elements' as opposed to the development build?" +$echo + +installed=`read_y_n y` + +path= + +if [ "$installed" = "n" ]; then + +$echo +$echo "Please enter the src_root for 'libfrontend-elements'." +$echo + +src_root=`read_path --directory --exist` + +$echo +$echo "Please enter the out_root for 'libfrontend-elements'." +$echo + +out_root=`read_path --directory $src_root` + +fi + +echo libfrontend_elements_installed := $installed >$1 + +if [ "$installed" = "n" ]; then + +echo src_root := $src_root >>$1 +echo scf_root := \$\(src_root\)/build >>$1 +echo out_root := $out_root >>$1 + +fi diff --git a/libxsd-frontend/build/import/libfrontend-elements/stub.make b/libxsd-frontend/build/import/libfrontend-elements/stub.make new file mode 100644 index 0000000..d701305 --- /dev/null +++ b/libxsd-frontend/build/import/libfrontend-elements/stub.make @@ -0,0 +1,30 @@ +# file : build/import/libfrontend-elements/stub.make +# author : Boris Kolpackov <boris@kolpackov.net> +# copyright : Copyright (c) 2005-2009 Boris Kolpackov +# license : GNU GPL v2; see accompanying LICENSE file + +$(call include-once,$(scf_root)/import/libfrontend-elements/configuration-rules.make,$(dcf_root)) + +libfrontend_elements_installed := + +$(call -include,$(dcf_root)/import/libfrontend-elements/configuration-dynamic.make) + +ifdef libfrontend_elements_installed + +ifeq ($(libfrontend_elements_installed),y) + +$(call export,l: -lfrontend-elements -lcult,cpp_options: ) + +else + +# Include export stub. +# +$(call include,$(scf_root)/export/libfrontend-elements/stub.make) + +endif + +else + +.NOTPARALLEL: + +endif diff --git a/libxsd-frontend/build/import/libxerces-c/LICENSE b/libxsd-frontend/build/import/libxerces-c/LICENSE new file mode 100644 index 0000000..3912109 --- /dev/null +++ b/libxsd-frontend/build/import/libxerces-c/LICENSE @@ -0,0 +1,340 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (C) <year> <name of author> + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + <signature of Ty Coon>, 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. diff --git a/libxsd-frontend/build/import/libxerces-c/configuration-dynamic.make b/libxsd-frontend/build/import/libxerces-c/configuration-dynamic.make new file mode 100644 index 0000000..91f61b2 --- /dev/null +++ b/libxsd-frontend/build/import/libxerces-c/configuration-dynamic.make @@ -0,0 +1 @@ +libxerces_c_installed := y diff --git a/libxsd-frontend/build/import/libxerces-c/configuration-rules.make b/libxsd-frontend/build/import/libxerces-c/configuration-rules.make new file mode 100644 index 0000000..fdb2263 --- /dev/null +++ b/libxsd-frontend/build/import/libxerces-c/configuration-rules.make @@ -0,0 +1,15 @@ +# file : build/import/libxerces-c/configuration-rules.make +# author : Boris Kolpackov <boris@kolpackov.net> +# copyright : Copyright (c) 2005-2009 Boris Kolpackov +# license : GNU GPL v2; see accompanying LICENSE file + +$(dcf_root)/import/libxerces-c/configuration-dynamic.make: | $(dcf_root)/import/libxerces-c/. + $(call message,,$(scf_root)/import/libxerces-c/configure $@) + +ifndef %foreign% + +disfigure:: + $(call message,rm $(dcf_root)/import/libxerces-c/configuration-dynamic.make,\ +rm -f $(dcf_root)/import/libxerces-c/configuration-dynamic.make) + +endif diff --git a/libxsd-frontend/build/import/libxerces-c/configure b/libxsd-frontend/build/import/libxerces-c/configure new file mode 100755 index 0000000..26e56a7 --- /dev/null +++ b/libxsd-frontend/build/import/libxerces-c/configure @@ -0,0 +1,73 @@ +#! /usr/bin/env bash + +# file : build/import/libxerces-c/configure +# author : Boris Kolpackov <boris@kolpackov.net> +# copyright : Copyright (c) 2005-2009 Boris Kolpackov +# license : GNU GPL v2; see accompanying LICENSE file + + +# $1 - out config file +# +# bld_root - build root +# project_name - project name +# + +source $bld_root/dialog.bash + + +$echo +$echo "Configuring external dependency on 'libxerces-c' for '$project_name'." +$echo + +$echo +$echo "Would you like to configure dependency on the installed version" +$echo "of 'libxerces-c' as opposed to the development build?" +$echo + +installed=`read_y_n y` + +path= +type= + +if [ "$installed" = "n" ]; then + + version= + + while [ -z "$version" ]; do + + $echo + $echo "Please enter the 'libxerces-c' root directory." + $echo + + root=`read_path --directory --exist` + + version=`sed -e 's/^VER=\([^_]*\)_\([^_]*\)_\([^_]*\)[ ]*$/\1.\2.\3/' \ +-e t -e d $root/version.incl 2>/dev/null` + + if [ $? != 0 -o -z "$version" ]; then + + version= + echo "Unable to read version information from $root/version.incl" + fi + done + + $echo + $echo "Please select the library type you would like to use:" + $echo + $echo "(1) archive" + $echo "(2) shared object" + $echo + + type=`read_option "archive shared" "shared"` + +fi + +echo libxerces_c_installed := $installed >$1 + +if [ "$installed" = "n" ]; then + + echo libxerces_c_root := $root >>$1 + echo libxerces_c_type := $type >>$1 + echo libxerces_c_version := $version >>$1 + +fi diff --git a/libxsd-frontend/build/import/libxerces-c/rules.make b/libxsd-frontend/build/import/libxerces-c/rules.make new file mode 100644 index 0000000..7cdca8c --- /dev/null +++ b/libxsd-frontend/build/import/libxerces-c/rules.make @@ -0,0 +1,52 @@ +# file : build/import/libxerces-c/rules.make +# author : Boris Kolpackov <boris@kolpackov.net> +# copyright : Copyright (c) 2005-2009 Boris Kolpackov +# license : GNU GPL v2; see accompanying LICENSE file + +$(dcf_root)/import/libxerces-c/%: root := $(libxerces_c_root) + +ifneq ($(filter 3.%,$(libxerces_c_version)),) + +# 3.x.y +# +ifeq ($(libxerces_c_type),archive) + +$(dcf_root)/import/libxerces-c/xerces-c.l: $(libxerces_c_root)/src/.libs/libxerces-c.a + @echo $< >$@ +else + +$(dcf_root)/import/libxerces-c/xerces-c.l: $(libxerces_c_root)/src/.libs/libxerces-c.so + @echo $< >$@ + @echo rpath:$(root)/src/.libs >>$@ +endif + +$(dcf_root)/import/libxerces-c/xerces-c.l.cpp-options: + @echo include: -I$(root)/src >$@ +else + +# 2.x.y +# +ifeq ($(libxerces_c_type),archive) + +$(dcf_root)/import/libxerces-c/xerces-c.l: $(libxerces_c_root)/lib/libxerces-c.a + @echo $< >$@ +else + +$(dcf_root)/import/libxerces-c/xerces-c.l: $(libxerces_c_root)/lib/libxerces-c.so + @echo $< >$@ + @echo rpath:$(root)/lib >>$@ +endif + +$(dcf_root)/import/libxerces-c/xerces-c.l.cpp-options: + @echo include: -I$(root)/include >$@ +endif + + +ifndef %foreign% + +disfigure:: + $(call message,rm $(dcf_root)/import/libxerces-c/xerces-c.l,\ +rm -f $(dcf_root)/import/libxerces-c/xerces-c.l) + $(call message,,rm -f $(dcf_root)/import/libxerces-c/xerces-c.l.cpp-options) + +endif diff --git a/libxsd-frontend/build/import/libxerces-c/stub.make b/libxsd-frontend/build/import/libxerces-c/stub.make new file mode 100644 index 0000000..d4de5ec --- /dev/null +++ b/libxsd-frontend/build/import/libxerces-c/stub.make @@ -0,0 +1,32 @@ +# file : build/import/libxerces-c/stub.make +# author : Boris Kolpackov <boris@kolpackov.net> +# copyright : Copyright (c) 2005-2009 Boris Kolpackov +# license : GNU GPL v2; see accompanying LICENSE file + +$(call include-once,$(scf_root)/import/libxerces-c/configuration-rules.make,$(dcf_root)) + +libxerces_c_installed := + +$(call -include,$(dcf_root)/import/libxerces-c/configuration-dynamic.make) + +ifdef libxerces_c_installed + +ifeq ($(libxerces_c_installed),y) + +$(call export,l: -lxerces-c,cpp-options: ) + +else + +$(call include-once,$(scf_root)/import/libxerces-c/rules.make,$(dcf_root)) + +$(call export,\ + l: $(dcf_root)/import/libxerces-c/xerces-c.l,\ + cpp-options: $(dcf_root)/import/libxerces-c/xerces-c.l.cpp-options) + +endif + +else + +.NOTPARALLEL: + +endif diff --git a/libxsd-frontend/build/import/libxerces-c/version b/libxsd-frontend/build/import/libxerces-c/version new file mode 100644 index 0000000..a918a2a --- /dev/null +++ b/libxsd-frontend/build/import/libxerces-c/version @@ -0,0 +1 @@ +0.6.0 diff --git a/libxsd-frontend/build/import/libxsd-frontend/LICENSE b/libxsd-frontend/build/import/libxsd-frontend/LICENSE new file mode 120000 index 0000000..5853aae --- /dev/null +++ b/libxsd-frontend/build/import/libxsd-frontend/LICENSE @@ -0,0 +1 @@ +../../../LICENSE
\ No newline at end of file diff --git a/libxsd-frontend/build/import/libxsd-frontend/configuration-rules.make b/libxsd-frontend/build/import/libxsd-frontend/configuration-rules.make new file mode 100644 index 0000000..29e8083 --- /dev/null +++ b/libxsd-frontend/build/import/libxsd-frontend/configuration-rules.make @@ -0,0 +1,15 @@ +# file : build/import/libxsd-frontend/configuration-rules.make +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +$(dcf_root)/import/libxsd-frontend/configuration-dynamic.make: | $(dcf_root)/import/libxsd-frontend/. + $(call message,,$(scf_root)/import/libxsd-frontend/configure $@) + +ifndef %foreign% + +disfigure:: + $(call message,rm $(dcf_root)/import/libxsd-frontend/configuration-dynamic.make,\ +rm -f $(dcf_root)/import/libxsd-frontend/configuration-dynamic.make) + +endif diff --git a/libxsd-frontend/build/import/libxsd-frontend/configure b/libxsd-frontend/build/import/libxsd-frontend/configure new file mode 100755 index 0000000..cc6881c --- /dev/null +++ b/libxsd-frontend/build/import/libxsd-frontend/configure @@ -0,0 +1,55 @@ +#! /usr/bin/env bash + +# file : build/import/libxsd-frontend/configure +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + + +# $1 - out file +# +# bld_root - build root +# project_name - project name +# + +source $bld_root/dialog.bash + + +$echo +$echo "Configuring external dependency on 'libxsd-frontend' for '$project_name'." +$echo + +$echo +$echo "Would you like to configure dependency on the installed " +$echo "version of 'libxsd-frontend' as opposed to the development build?" +$echo + +installed=`read_y_n y` + +path= + +if [ "$installed" = "n" ]; then + +$echo +$echo "Please enter the src_root for 'libxsd-frontend'." +$echo + +src_root=`read_path --directory --exist` + +$echo +$echo "Please enter the out_root for 'libxsd-frontend'." +$echo + +out_root=`read_path --directory $src_root` + +fi + +echo libxsd_frontend_installed := $installed >$1 + +if [ "$installed" = "n" ]; then + +echo src_root := $src_root >>$1 +echo scf_root := \$\(src_root\)/build >>$1 +echo out_root := $out_root >>$1 + +fi diff --git a/libxsd-frontend/build/import/libxsd-frontend/stub.make b/libxsd-frontend/build/import/libxsd-frontend/stub.make new file mode 100644 index 0000000..3721928 --- /dev/null +++ b/libxsd-frontend/build/import/libxsd-frontend/stub.make @@ -0,0 +1,30 @@ +# file : build/import/libxsd-frontend/stub.make +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +$(call include-once,$(scf_root)/import/libxsd-frontend/configuration-rules.make,$(dcf_root)) + +libxsd_frontend_installed := + +$(call -include,$(dcf_root)/import/libxsd-frontend/configuration-dynamic.make) + +ifdef libxsd_frontend_installed + +ifeq ($(libxsd_frontend_installed),y) + +$(call export,l: -lxsd-frontend -lfrontend-elements -lcult -lboost_filesystem -lxerces-c,cpp_options: ) + +else + +# Include export stub. +# +$(call include,$(scf_root)/export/libxsd-frontend/stub.make) + +endif + +else + +.NOTPARALLEL: + +endif diff --git a/libxsd-frontend/build/ld/configuration-lib-dynamic.make b/libxsd-frontend/build/ld/configuration-lib-dynamic.make new file mode 100644 index 0000000..74c8885 --- /dev/null +++ b/libxsd-frontend/build/ld/configuration-lib-dynamic.make @@ -0,0 +1,13 @@ +ld_lib_type := archive + +ifneq ($(AR),) +ld_lib_ar := $(AR) +else +ld_lib_ar := ar +endif + +ifneq ($(RANLIB),) +ld_lib_ranlib := $(RANLIB) +else +ld_lib_ranlib := ranlib +endif diff --git a/libxsd-frontend/makefile b/libxsd-frontend/makefile new file mode 100644 index 0000000..de97507 --- /dev/null +++ b/libxsd-frontend/makefile @@ -0,0 +1,17 @@ +# file : makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))build/bootstrap.make + +default := $(out_base)/ +test := $(out_base)/.test +clean := $(out_base)/.clean + +$(default): $(out_base)/xsd-frontend/ $(out_base)/tests/ +$(test): $(out_base)/tests/.test +$(clean): $(out_base)/xsd-frontend/.clean $(out_base)/tests/.clean + +$(call import,$(src_base)/xsd-frontend/makefile) +$(call import,$(src_base)/tests/makefile) diff --git a/libxsd-frontend/tests/dump/driver.cxx b/libxsd-frontend/tests/dump/driver.cxx new file mode 100644 index 0000000..5217ebf --- /dev/null +++ b/libxsd-frontend/tests/dump/driver.cxx @@ -0,0 +1,734 @@ +// file : tests/dump/driver.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <cult/types.hxx> + +#include <xsd-frontend/parser.hxx> +#include <xsd-frontend/transformations/anonymous.hxx> +#include <xsd-frontend/transformations/enum-synthesis.hxx> + +#include <xsd-frontend/semantic-graph.hxx> +#include <xsd-frontend/traversal.hxx> + +#include <iostream> + +using namespace Cult::Types; +using namespace XSDFrontend; + +using std::wcerr; +using std::wcout; +using std::endl; + +UnsignedLong indent = 0; + +std::wostream& +ind (std::wostream& os) +{ + for (UnsignedLong n (0); n < indent; ++n) + os << L" "; + + return os; +} + +namespace +{ + typedef Cult::Types::WideString String; + + // Nameable which is named in the namespace scope. + // + String + ref_name (SemanticGraph::Nameable& n) + { + String const& scope (n.scope ().name ()); + + return scope + (scope.empty () ? L"" : L"#") + n.name (); + } + + struct List: Traversal::List + { + virtual Void + traverse (Type& l) + { + if (l.annotated_p ()) + wcout << ind << "<" << l.annotation ().documentation () << ">" + << endl; + + wcout << ind << "list " << + (l.named_p () ? l.name () : String ("<anonymous>")); + + SemanticGraph::Type& t (l.argumented ().type ()); + + if (t.named_p ()) + wcout << " " << ref_name (t) << endl; + else + { + wcout << endl + << ind << "{" << endl; + indent++; + + edge_traverser ().dispatch (l.argumented ()); + + indent--; + wcout << ind << "}" << endl; + } + } + }; + + struct Union: Traversal::Union + { + virtual Void + traverse (Type& u) + { + if (u.annotated_p ()) + wcout << ind << "<" << u.annotation ().documentation () << ">" + << endl; + + wcout << ind << "union " << + (u.named_p () ? u.name () : String ("<anonymous>")) << " "; + + for (Type::ArgumentedIterator i (u.argumented_begin ()); + i != u.argumented_end (); ++i) + { + SemanticGraph::Type& t (i->type ()); + + if (t.named_p ()) + wcout << ref_name (t) << " "; + else + { + wcout << endl + << ind << "{" << endl; + indent++; + + edge_traverser ().dispatch (*i); + + indent--; + wcout << ind << "}" << endl; + } + } + + wcout << endl; + } + }; + + struct Enumerator: Traversal::Enumerator + { + virtual Void + traverse (Type& e) + { + if (e.annotated_p ()) + wcout << ind << "<" << e.annotation ().documentation () << ">" + << endl; + + wcout << ind << "enumerator " << e.name () << endl; + } + }; + + struct Enumeration: Traversal::Enumeration + { + virtual Void + traverse (Type& e) + { + if (e.annotated_p ()) + wcout << ind << "<" << e.annotation ().documentation () << ">" + << endl; + + wcout << ind << "enumeration " << + (e.named_p () ? e.name () : String ("<anonymous>")) << ": " << + ref_name (e.inherits ().base ()) << endl + << ind << "{" << endl; + + indent++; + Traversal::Enumeration::traverse (e); + indent--; + + wcout << ind << "}" << endl; + } + }; + + struct ContainsParticle: Traversal::ContainsParticle + { + virtual Void + traverse (Type& cp) + { + wcout << ind << "[" << cp.min () << ", "; + + if (cp.max () == 0) + wcout << "unbounded] "; + else + wcout << cp.max () << "] "; + + Traversal::ContainsParticle::traverse (cp); + } + }; + + struct ContainsCompositor: Traversal::ContainsCompositor + { + virtual Void + traverse (Type& cc) + { + wcout << ind << "[" << cc.min () << ", "; + + if (cc.max () == 0) + wcout << "unbounded] "; + else + wcout << cc.max () << "] "; + + Traversal::ContainsCompositor::traverse (cc); + } + }; + + struct Compositor: Traversal::All, + Traversal::Choice, + Traversal::Sequence + { + virtual Void + traverse (SemanticGraph::All& a) + { + wcout << "all" << endl + << ind << "{" << endl; + + indent++; + + Traversal::All::traverse (a); + + indent--; + + wcout << ind << "}" << endl; + } + + virtual Void + traverse (SemanticGraph::Choice& c) + { + wcout << "choice" << endl + << ind << "{" << endl; + + indent++; + + Traversal::Choice::traverse (c); + + indent--; + + wcout << ind << "}" << endl; + } + + virtual Void + traverse (SemanticGraph::Sequence& s) + { + wcout << "sequence" << endl + << ind << "{" << endl; + + indent++; + + Traversal::Sequence::traverse (s); + + indent--; + + wcout << ind << "}" << endl; + } + }; + + struct Attribute: Traversal::Attribute + { + virtual Void + traverse (Type& a) + { + if (a.annotated_p ()) + wcout << ind << "<" << a.annotation ().documentation () << ">" + << endl; + + wcout << ind << (a.optional_p () ? "optional" : "required") + << " attribute " << a.name (); + + if (a.fixed_p ()) + wcout << "==" << a.value (); + else if (a.default_p ()) + wcout << "=" << a.value (); + + SemanticGraph::Type& t (a.type ()); + + if (t.named_p ()) + wcout << " " << ref_name (t) << endl; + else + { + wcout << endl + << ind << "{" << endl; + indent++; + + belongs (a); + + indent--; + wcout << ind << "}" << endl; + } + } + }; + + struct AnyAttribute: Traversal::AnyAttribute + { + virtual Void + traverse (Type& a) + { + if (a.annotated_p ()) + wcout << ind << "<" << a.annotation ().documentation () << ">" + << endl; + + wcout << ind << "any-attribute '" << a.name () << "'" << endl; + } + }; + + struct Element: Traversal::Element + { + virtual Void + traverse (Type& e) + { + wcout << "element " << e.name (); + + if (e.fixed_p ()) + wcout << "==" << e.value (); + else if (e.default_p ()) + wcout << "=" << e.value (); + + SemanticGraph::Type& t (e.type ()); + + if (t.named_p ()) + wcout << " " << ref_name (t) << endl; + else + { + wcout << endl + << ind << "{" << endl; + indent++; + + belongs (e); + + indent--; + wcout << ind << "}" << endl; + } + } + }; + + struct ElementFlat: Traversal::Element + { + virtual Void + traverse (Type& e) + { + if (e.annotated_p ()) + wcout << ind << "<" << e.annotation ().documentation () << ">" + << endl; + + wcout << ind << "element " << e.name (); + + if (e.fixed_p ()) + wcout << "==" << e.value (); + else if (e.default_p ()) + wcout << "=" << e.value (); + + wcout << endl; + } + }; + + struct Any: Traversal::Any + { + virtual Void + traverse (Type& a) + { + wcout << "any '" << a.name () << "'" << endl; + } + }; + + struct AnyFlat: Traversal::Any + { + virtual Void + traverse (Type& a) + { + if (a.annotated_p ()) + wcout << ind << "<" << a.annotation ().documentation () << ">" + << endl; + + wcout << ind << "any '" << a.name () << "'" << endl; + } + }; + + struct Complex: Traversal::Complex + { + virtual Void + traverse (Type& c) + { + // Anonymous type definition can recursively refer to itself. + // + if (c.context ().count ("seen")) + { + wcout << ind << "complex <recursive-anonymous>" << endl; + return; + } + + c.context ().set ("seen", true); + + if (c.annotated_p ()) + wcout << ind << "<" << c.annotation ().documentation () << ">" + << endl; + + wcout << ind << "complex " << + (c.named_p () ? c.name () : String ("<anonymous>")); + + if (c.inherits_p ()) + wcout << ": " << ref_name (c.inherits ().base ()); + + wcout << endl + << ind << "{" << endl; + indent++; + + Traversal::Complex::traverse (c); + + indent--; + wcout << ind << "}" << endl; + + c.context ().remove ("seen"); + } + }; + + struct GlobalAttribute: Traversal::Attribute + { + virtual Void + traverse (Type& a) + { + if (a.annotated_p ()) + wcout << ind << "<" << a.annotation ().documentation () << ">" + << endl; + + wcout << ind << "attribute " << a.name (); + + if (a.fixed_p ()) + wcout << "==" << a.value (); + else if (a.default_p ()) + wcout << "=" << a.value (); + + SemanticGraph::Type& t (a.type ()); + + if (t.named_p ()) + wcout << " " << ref_name (t) << endl; + else + { + wcout << endl + << ind << "{" << endl; + indent++; + + belongs (a); + + indent--; + wcout << ind << "}" << endl; + } + } + }; + + struct GlobalElement: Traversal::Element + { + virtual Void + traverse (Type& e) + { + if (e.annotated_p ()) + wcout << ind << "<" << e.annotation ().documentation () << ">" + << endl; + + wcout << ind << "element " << e.name (); + + if (e.fixed_p ()) + wcout << "==" << e.value (); + else if (e.default_p ()) + wcout << "=" << e.value (); + + SemanticGraph::Type& t (e.type ()); + + if (t.named_p ()) + wcout << " " << ref_name (t) << endl; + else + { + wcout << endl + << ind << "{" << endl; + indent++; + + belongs (e); + + indent--; + wcout << ind << "}" << endl; + } + } + }; + + struct Namespace: Traversal::Namespace + { + virtual Void + traverse (Type& n) + { + wcout << ind << "namespace " << n.name () << endl + << ind << "{" << endl; + indent++; + Traversal::Namespace::traverse (n); + indent--; + wcout << ind << "}" << endl; + } + }; + + // Go into implied/included/imported schemas while making sure + // we don't recurse forever. + // + struct Uses: Traversal::Imports, + Traversal::Includes, + Traversal::Sources + //Traversal::Implies @@ Need a --with-implies option + { + virtual Void + traverse (SemanticGraph::Imports& i) + { + if (traverse_uses (i, "imports")) + Traversal::Imports::traverse (i); + } + + virtual Void + traverse (SemanticGraph::Includes& i) + { + if (traverse_uses (i, "includes")) + Traversal::Includes::traverse (i); + } + + virtual Void + traverse (SemanticGraph::Sources& s) + { + if (traverse_uses (s, "sources")) + Traversal::Sources::traverse (s); + } + + /* + virtual Void + traverse (SemanticGraph::Implies& i) + { + if (traverse_uses (i, "implies")) + Traversal::Implies::traverse (i); + } + */ + + Boolean + traverse_uses (SemanticGraph::Uses& u, String const& type) + { + SemanticGraph::Schema& s (u.schema ()); + + if (s.context ().count ("seen")) + { + wcout << ind << "recursively " << type << " " << u.path () << endl; + return false; + } + + s.context ().set ("seen", true); + + if (s.annotated_p ()) + wcout << ind << "<" << s.annotation ().documentation () << ">" << endl; + + wcout << ind << type << " " << u.path () << endl; + + return true; + } + }; + + struct Schema: Traversal::Schema + { + virtual Void + traverse (Type& s) + { + wcout << ind << "{" << endl; + indent++; + Traversal::Schema::traverse (s); + indent--; + wcout << ind << "}" << endl; + } + }; +} + +struct AnonymousNameTranslator: Transformations::AnonymousNameTranslator +{ + virtual WideString + translate (WideString const& /*file*/, + WideString const& ns, + WideString const& name, + WideString const& xpath) + { + wcout << "anonymous: " << ns << " " << name << " " << xpath << endl; + return name; + } +}; + + +Int +main (Int argc, Char* argv[]) +{ + try + { + if (argc < 2) + { + wcerr << argv[0] << ": error: no input file." << endl; + return 1; + } + + // Parse options. + // + Int i (1); + Boolean anon (false); + Boolean enum_synth (false); + + for (; i < argc; ++i) + { + if (argv[i] == NarrowString ("--anonymous")) + anon = true; + else if (argv[i] == NarrowString ("--enum-synthesis")) + enum_synth = true; + else + break; + } + + // Parse schema. + // + SemanticGraph::Path path (argv[i], boost::filesystem::native); + + Parser parser (true, false, true); + Evptr<SemanticGraph::Schema> tu (parser.parse (path)); + + // + // + if (anon) + { + try + { + AnonymousNameTranslator transl; + Transformations::Anonymous transf (transl); + transf.transform (*tu, path, true); + } + catch (Transformations::Anonymous::Failed const&) + { + // Diagnostics has already been issued. + // + return 1; + } + } + + // + // + if (enum_synth) + { + Transformations::EnumSynthesis transf; + transf.transform (*tu, path); + } + + // + // + Schema schema; + Uses uses; + + schema >> uses >> schema; + + Traversal::Names schema_names; + Namespace ns; + Traversal::Names ns_names; + + schema >> schema_names >> ns >> ns_names; + + // + // + List list; + Union union_; + Complex complex; + Enumeration enumeration; + GlobalElement global_element; + GlobalAttribute global_attribute; + + Traversal::Names complex_names; + Traversal::Names enumeration_names; + ContainsCompositor contains_compositor; + + ns_names >> list; + ns_names >> union_; + ns_names >> complex; + ns_names >> enumeration; + ns_names >> global_attribute; + ns_names >> global_element; + + complex >> complex_names; + complex >> contains_compositor; + + enumeration >> enumeration_names; + + // + // + Compositor compositor; + ContainsParticle contains_particle; + + contains_compositor >> compositor; + compositor >> contains_particle >> compositor; + + // + // + Any any; + AnyFlat any_flat; + Element element; + ElementFlat element_flat; + Attribute attribute; + AnyAttribute any_attribute; + Traversal::Belongs belongs; + + element >> belongs; + attribute >> belongs; + + global_element >> belongs; + global_attribute >> belongs; + + complex_names >> attribute; + complex_names >> any_attribute; + complex_names >> any_flat; + complex_names >> element_flat; + + contains_particle >> any; + contains_particle >> element; + + belongs >> list; + belongs >> union_; + belongs >> complex; + belongs >> enumeration; + + // + // + Traversal::Argumented argumented; + list >> argumented; + union_ >> argumented; + + argumented >> list; + argumented >> union_; + argumented >> complex; + argumented >> enumeration; + + // + // + Enumerator enumerator; + enumeration_names >> enumerator; + + // + // + if (tu->annotated_p ()) + wcout << ind << "<" << tu->annotation ().documentation () << ">" + << endl; + + wcout << ind << "primary" << endl; + tu->context ().set ("seen", true); + schema.dispatch (*tu); + + return 0; + } + catch (InvalidSchema const&) + { + // Diagnostic has already been issued. + } + catch (SemanticGraph::InvalidPath const&) + { + wcerr << argv[0] << ": error: '" << argv[1] << "' is not a valid " + << "filesystem path" << endl; + } + + return 1; +} diff --git a/libxsd-frontend/tests/dump/makefile b/libxsd-frontend/tests/dump/makefile new file mode 100644 index 0000000..c51e72e --- /dev/null +++ b/libxsd-frontend/tests/dump/makefile @@ -0,0 +1,56 @@ +# file : tests/dump/makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../build/bootstrap.make + +cxx_tun := driver.cxx +cxx_obj := $(addprefix $(out_base)/,$(cxx_tun:.cxx=.o)) +cxx_od := $(cxx_obj:.o=.o.d) + +xsd-fe.l := $(out_root)/xsd-frontend/xsd-frontend.l +xsd-fe.l.cpp-options := $(out_root)/xsd-frontend/xsd-frontend.l.cpp-options + +driver := $(out_base)/driver +clean := $(out_base)/.clean + +# Build. +# +$(driver): $(cxx_obj) $(xsd-fe.l) + +$(cxx_obj) $(cxx_od): $(xsd-fe.l.cpp-options) + +$(call include-dep,$(cxx_od)) + +# Convenience alias for default target. +# +$(out_base)/: $(driver) + +# Clean. +# +$(clean): $(driver).o.clean \ + $(addsuffix .cxx.clean,$(cxx_obj)) \ + $(addsuffix .cxx.clean,$(cxx_od)) + +# Generated .gitignore. +# +ifeq ($(out_base),$(src_base)) +$(driver): | $(out_base)/.gitignore + +$(out_base)/.gitignore: files := driver +$(clean): $(out_base)/.gitignore.clean + +$(call include,$(bld_root)/git/gitignore.make) +endif + +# How to. +# +$(call include,$(bld_root)/cxx/o-e.make) +$(call include,$(bld_root)/cxx/cxx-o.make) +$(call include,$(bld_root)/cxx/cxx-d.make) + + +# Dependencies. +# +$(call import,$(src_root)/xsd-frontend/makefile) diff --git a/libxsd-frontend/tests/makefile b/libxsd-frontend/tests/makefile new file mode 100644 index 0000000..6b794d6 --- /dev/null +++ b/libxsd-frontend/tests/makefile @@ -0,0 +1,17 @@ +# file : tests/makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../build/bootstrap.make + +default := $(out_base)/ +test := $(out_base)/.test +clean := $(out_base)/.clean + +$(default): $(out_base)/dump/ $(out_base)/schema/ +$(test): $(out_base)/schema/.test +$(clean): $(out_base)/dump/.clean $(out_base)/schema/.clean + +$(call import,$(src_base)/dump/makefile) +$(call import,$(src_base)/schema/makefile) diff --git a/libxsd-frontend/tests/schema/annotation/makefile b/libxsd-frontend/tests/schema/annotation/makefile new file mode 100644 index 0000000..97f578b --- /dev/null +++ b/libxsd-frontend/tests/schema/annotation/makefile @@ -0,0 +1,35 @@ +# file : tests/schema/annotation/makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../build/bootstrap.make + +tests := 000 001 + +driver := $(out_root)/tests/dump/driver +test := $(out_base)/.test +clean := $(out_base)/.clean + +# Convenience alias for default target. +# +$(out_base)/: $(driver) + +# Test. +# +test_targets := $(addprefix $(out_base)/.test-,$(tests)) + +$(test): $(test_targets) +$(test_targets): driver := $(driver) + +.PHONY: $(out_base)/.test-% +$(out_base)/.test-%: $(driver) $(src_base)/test-%.xsd $(src_base)/test-%.std + $(call message,test $(out_base)/$*,$(driver) $(src_base)/test-$*.xsd | diff -u $(src_base)/test-$*.std -) + +# Clean. +# +$(clean): + +# Dependencies. +# +$(call import,$(src_root)/tests/dump/makefile) diff --git a/libxsd-frontend/tests/schema/annotation/test-000.std b/libxsd-frontend/tests/schema/annotation/test-000.std new file mode 100644 index 0000000..15f3e89 --- /dev/null +++ b/libxsd-frontend/tests/schema/annotation/test-000.std @@ -0,0 +1,67 @@ +<schema documentation> +primary +{ + namespace test + { + <list type documentation> + list list http://www.w3.org/2001/XMLSchema#string + <union type documentation> + union union http://www.w3.org/2001/XMLSchema#int http://www.w3.org/2001/XMLSchema#string + <enumeration type documentation> + enumeration enum: http://www.w3.org/2001/XMLSchema#string + { + <enumerator documentation (male)> + enumerator male + <enumerator documentation (female)> + enumerator female + } + <complex type documentation> + complex type + { + <local element efoo documentation> + element efoo + <local element ebar documentation> + element ebar + <local element ebaz documentation> + element ebaz + <any documentation> + any 'any #0' + <local attribute afoo documentation> + optional attribute afoo http://www.w3.org/2001/XMLSchema#string + <local attribute abar documentation> + optional attribute abar + { + <list type documentation> + list <anonymous> http://www.w3.org/2001/XMLSchema#string + } + <local attribute abaz documentation> + optional attribute abaz http://www.w3.org/2001/XMLSchema#string + <anyAttribute documentation> + any-attribute 'any-attribute #0' + [1, 1] sequence + { + [1, 1] element efoo http://www.w3.org/2001/XMLSchema#string + [1, 1] element ebar + { + complex <anonymous> + { + <nested local element efoo documentation> + element efoo + <nested local attribute afoo documentation> + optional attribute afoo http://www.w3.org/2001/XMLSchema#string + [1, 1] sequence + { + [1, 1] element efoo http://www.w3.org/2001/XMLSchema#string + } + } + } + [1, 1] element ebaz http://www.w3.org/2001/XMLSchema#string + [1, 1] any 'any #0' + } + } + <global element documentation> + element ebaz http://www.w3.org/2001/XMLSchema#string + <global attribute documentation> + attribute abaz http://www.w3.org/2001/XMLSchema#string + } +} diff --git a/libxsd-frontend/tests/schema/annotation/test-000.xsd b/libxsd-frontend/tests/schema/annotation/test-000.xsd new file mode 100644 index 0000000..f768b45 --- /dev/null +++ b/libxsd-frontend/tests/schema/annotation/test-000.xsd @@ -0,0 +1,120 @@ +<?xml version="1.0"?> +<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:t="test" targetNamespace="test"> + + <annotation> + <documentation>schema documentation</documentation> + </annotation> + + <simpleType name="list"> + <annotation> + <documentation>list type documentation</documentation> + </annotation> + <list itemType="string"/> + </simpleType> + + <simpleType name="union"> + <annotation> + <documentation>union type documentation</documentation> + </annotation> + <union memberTypes="int string"/> + </simpleType> + + <simpleType name="enum"> + <annotation> + <documentation>enumeration type documentation</documentation> + </annotation> + <restriction base="string"> + <enumeration value="male"> + <annotation> + <documentation>enumerator documentation (male)</documentation> + </annotation> + </enumeration> + <enumeration value="female"> + <annotation> + <documentation>enumerator documentation (female)</documentation> + </annotation> + </enumeration> + </restriction> + </simpleType> + + <complexType name="type"> + <annotation> + <documentation>complex type documentation</documentation> + </annotation> + <sequence> + <element name="efoo" type="string"> + <annotation> + <documentation>local element efoo documentation</documentation> + </annotation> + </element> + <element name="ebar"> + <annotation> + <documentation>local element ebar documentation</documentation> + </annotation> + <complexType> + <sequence> + <element name="efoo" type="string"> + <annotation> + <documentation>nested local element efoo documentation</documentation> + </annotation> + </element> + </sequence> + <attribute name="afoo" type="string"> + <annotation> + <documentation>nested local attribute afoo documentation</documentation> + </annotation> + </attribute> + </complexType> + </element> + <element ref="t:ebaz"> + <annotation> + <documentation>local element ebaz documentation</documentation> + </annotation> + </element> + <any namespace="##other"> + <annotation> + <documentation>any documentation</documentation> + </annotation> + </any> + </sequence> + <attribute name="afoo" type="string"> + <annotation> + <documentation>local attribute afoo documentation</documentation> + </annotation> + </attribute> + <attribute name="abar"> + <annotation> + <documentation>local attribute abar documentation</documentation> + </annotation> + <simpleType> + <annotation> + <documentation>list type documentation</documentation> + </annotation> + <list itemType="string"/> + </simpleType> + </attribute> + <attribute ref="t:abaz"> + <annotation> + <documentation>local attribute abaz documentation</documentation> + </annotation> + </attribute> + <anyAttribute namespace="##other"> + <annotation> + <documentation>anyAttribute documentation</documentation> + </annotation> + </anyAttribute> + </complexType> + + <element name="ebaz" type="string"> + <annotation> + <documentation>global element documentation</documentation> + </annotation> + </element> + + <attribute name="abaz" type="string"> + <annotation> + <documentation>global attribute documentation</documentation> + </annotation> + </attribute> + +</schema> diff --git a/libxsd-frontend/tests/schema/annotation/test-001.std b/libxsd-frontend/tests/schema/annotation/test-001.std new file mode 100644 index 0000000..9e2c99a --- /dev/null +++ b/libxsd-frontend/tests/schema/annotation/test-001.std @@ -0,0 +1,36 @@ +primary +{ + namespace test + { + complex type + { + <global element ebar documentation> + element ebar + <group element efoo documentation> + element efoo + <global element ebar documentation> + element ebar + <global attribute abar documentation> + optional attribute abar http://www.w3.org/2001/XMLSchema#string + <group attribute afoo documentation> + optional attribute afoo http://www.w3.org/2001/XMLSchema#string + <global attribute abaz documentation> + optional attribute abaz http://www.w3.org/2001/XMLSchema#string + [1, 1] sequence + { + [1, 1] element ebar http://www.w3.org/2001/XMLSchema#string + [1, 1] choice + { + [1, 1] element efoo http://www.w3.org/2001/XMLSchema#string + [1, 1] element ebar http://www.w3.org/2001/XMLSchema#string + } + } + } + <global element ebar documentation> + element ebar http://www.w3.org/2001/XMLSchema#string + <global attribute abar documentation> + attribute abar http://www.w3.org/2001/XMLSchema#string + <global attribute abaz documentation> + attribute abaz http://www.w3.org/2001/XMLSchema#string + } +} diff --git a/libxsd-frontend/tests/schema/annotation/test-001.xsd b/libxsd-frontend/tests/schema/annotation/test-001.xsd new file mode 100644 index 0000000..286f63a --- /dev/null +++ b/libxsd-frontend/tests/schema/annotation/test-001.xsd @@ -0,0 +1,53 @@ +<?xml version="1.0"?> +<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:t="test" targetNamespace="test"> + + <!-- Test various ref constructs. --> + + <complexType name="type"> + <sequence> + <element ref="t:ebar"/> + <group ref="t:eg"/> + </sequence> + <attribute ref="t:abar"/> + <attributeGroup ref="t:ag"/> + </complexType> + + <group name="eg"> + <choice> + <element name="efoo" type="string"> + <annotation> + <documentation>group element efoo documentation</documentation> + </annotation> + </element> + <element ref="t:ebar"/> + </choice> + </group> + + <element name="ebar" type="string"> + <annotation> + <documentation>global element ebar documentation</documentation> + </annotation> + </element> + + <attributeGroup name="ag"> + <attribute name="afoo" type="string"> + <annotation> + <documentation>group attribute afoo documentation</documentation> + </annotation> + </attribute> + <attribute ref="t:abaz"/> + </attributeGroup> + + <attribute name="abar" type="string"> + <annotation> + <documentation>global attribute abar documentation</documentation> + </annotation> + </attribute> + + <attribute name="abaz" type="string"> + <annotation> + <documentation>global attribute abaz documentation</documentation> + </annotation> + </attribute> + +</schema> diff --git a/libxsd-frontend/tests/schema/anonymous/makefile b/libxsd-frontend/tests/schema/anonymous/makefile new file mode 100644 index 0000000..950e34b --- /dev/null +++ b/libxsd-frontend/tests/schema/anonymous/makefile @@ -0,0 +1,35 @@ +# file : tests/schema/annotation/makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../build/bootstrap.make + +tests := 000 001 + +driver := $(out_root)/tests/dump/driver +test := $(out_base)/.test +clean := $(out_base)/.clean + +# Convenience alias for default target. +# +$(out_base)/: $(driver) + +# Test. +# +test_targets := $(addprefix $(out_base)/.test-,$(tests)) + +$(test): $(test_targets) +$(test_targets): driver := $(driver) + +.PHONY: $(out_base)/.test-% +$(out_base)/.test-%: $(driver) $(src_base)/test-%.xsd $(src_base)/test-%.std + $(call message,test $(out_base)/$*,$(driver) --anonymous $(src_base)/test-$*.xsd | diff -u $(src_base)/test-$*.std -) + +# Clean. +# +$(clean): + +# Dependencies. +# +$(call import,$(src_root)/tests/dump/makefile) diff --git a/libxsd-frontend/tests/schema/anonymous/test-000.std b/libxsd-frontend/tests/schema/anonymous/test-000.std new file mode 100644 index 0000000..1f33cb0 --- /dev/null +++ b/libxsd-frontend/tests/schema/anonymous/test-000.std @@ -0,0 +1,30 @@ +anonymous: test anon_item anon +anonymous: test anon_nested_item anon_nested +anonymous: test anon_nested_item_base anon_nested_item +primary +{ + namespace test + { + list named http://www.w3.org/2001/XMLSchema#string + enumeration anon_item: http://www.w3.org/2001/XMLSchema#string + { + enumerator male + enumerator female + } + list anon test#anon_item1 + list anon_nested test#anon_nested_item + enumeration anon_item1: http://www.w3.org/2001/XMLSchema#string + { + enumerator male + enumerator female + } + enumeration anon_nested_item: test#anon_nested_item_base + { + enumerator male + enumerator female + } + complex anon_nested_item_base: http://www.w3.org/2001/XMLSchema#string + { + } + } +} diff --git a/libxsd-frontend/tests/schema/anonymous/test-000.xsd b/libxsd-frontend/tests/schema/anonymous/test-000.xsd new file mode 100644 index 0000000..ece8f4a --- /dev/null +++ b/libxsd-frontend/tests/schema/anonymous/test-000.xsd @@ -0,0 +1,42 @@ +<?xml version="1.0"?> +<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:t="test" targetNamespace="test"> + + <simpleType name="named"> + <list itemType="string"/> + </simpleType> + + <simpleType name="anon_item"> + <restriction base="string"> + <enumeration value="male"/> + <enumeration value="female"/> + </restriction> + </simpleType> + + <simpleType name="anon"> + <list> + <simpleType> + <restriction base="string"> + <enumeration value="male"/> + <enumeration value="female"/> + </restriction> + </simpleType> + </list> + </simpleType> + + <simpleType name="anon_nested"> + <list> + <simpleType> + <restriction> + <simpleType> + <restriction base="string"> + <maxLength value="20"/> + </restriction> + </simpleType> + <enumeration value="male"/> + <enumeration value="female"/> + </restriction> + </simpleType> + </list> + </simpleType> + +</schema> diff --git a/libxsd-frontend/tests/schema/anonymous/test-001.std b/libxsd-frontend/tests/schema/anonymous/test-001.std new file mode 100644 index 0000000..cc3f2d1 --- /dev/null +++ b/libxsd-frontend/tests/schema/anonymous/test-001.std @@ -0,0 +1,38 @@ +anonymous: test anon_base anon +anonymous: test anon_nested_base anon_nested +anonymous: test anon_nested_base_base anon_nested_base +primary +{ + namespace test + { + enumeration named: http://www.w3.org/2001/XMLSchema#string + { + enumerator male + enumerator female + } + enumeration anon_base: http://www.w3.org/2001/XMLSchema#string + { + enumerator male + enumerator female + } + enumeration anon: test#anon_base1 + { + enumerator male + enumerator female + } + enumeration anon_nested: test#anon_nested_base + { + enumerator male + enumerator female + } + complex anon_base1: http://www.w3.org/2001/XMLSchema#string + { + } + complex anon_nested_base: test#anon_nested_base_base + { + } + complex anon_nested_base_base: http://www.w3.org/2001/XMLSchema#string + { + } + } +} diff --git a/libxsd-frontend/tests/schema/anonymous/test-001.xsd b/libxsd-frontend/tests/schema/anonymous/test-001.xsd new file mode 100644 index 0000000..4a8414f --- /dev/null +++ b/libxsd-frontend/tests/schema/anonymous/test-001.xsd @@ -0,0 +1,47 @@ +<?xml version="1.0"?> +<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:t="test" targetNamespace="test"> + + <simpleType name="named"> + <restriction base="string"> + <enumeration value="male"/> + <enumeration value="female"/> + </restriction> + </simpleType> + + <simpleType name="anon_base"> + <restriction base="string"> + <enumeration value="male"/> + <enumeration value="female"/> + </restriction> + </simpleType> + + <simpleType name="anon"> + <restriction> + <simpleType> + <restriction base="string"> + <maxLength value="20"/> + </restriction> + </simpleType> + <enumeration value="male"/> + <enumeration value="female"/> + </restriction> + </simpleType> + + <simpleType name="anon_nested"> + <restriction> + <simpleType> + <restriction> + <simpleType> + <restriction base="string"> + <maxLength value="40"/> + </restriction> + </simpleType> + <maxLength value="20"/> + </restriction> + </simpleType> + <enumeration value="male"/> + <enumeration value="female"/> + </restriction> + </simpleType> + +</schema> diff --git a/libxsd-frontend/tests/schema/attribute-group/makefile b/libxsd-frontend/tests/schema/attribute-group/makefile new file mode 100644 index 0000000..e96c0c7 --- /dev/null +++ b/libxsd-frontend/tests/schema/attribute-group/makefile @@ -0,0 +1,35 @@ +# file : tests/schema/attribute-group/makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../build/bootstrap.make + +tests := 000 001 + +driver := $(out_root)/tests/dump/driver +test := $(out_base)/.test +clean := $(out_base)/.clean + +# Convenience alias for default target. +# +$(out_base)/: $(driver) + +# Test. +# +test_targets := $(addprefix $(out_base)/.test-,$(tests)) + +$(test): $(test_targets) +$(test_targets): driver := $(driver) + +.PHONY: $(out_base)/.test-% +$(out_base)/.test-%: $(driver) $(src_base)/test-%.xsd $(src_base)/test-%.std + $(call message,test $(out_base)/$*,$(driver) $(src_base)/test-$*.xsd | diff -u $(src_base)/test-$*.std -) + +# Clean. +# +$(clean): + +# Dependencies. +# +$(call import,$(src_root)/tests/dump/makefile) diff --git a/libxsd-frontend/tests/schema/attribute-group/test-000.std b/libxsd-frontend/tests/schema/attribute-group/test-000.std new file mode 100644 index 0000000..61ad802 --- /dev/null +++ b/libxsd-frontend/tests/schema/attribute-group/test-000.std @@ -0,0 +1,17 @@ +primary +{ + namespace test + { + complex type + { + optional attribute foo2 http://www.w3.org/2001/XMLSchema#string + required attribute bar2 http://www.w3.org/2001/XMLSchema#string + optional attribute foo3 http://www.w3.org/2001/XMLSchema#string + required attribute bar3 http://www.w3.org/2001/XMLSchema#string + } + attribute foo2 http://www.w3.org/2001/XMLSchema#string + attribute bar2 http://www.w3.org/2001/XMLSchema#string + attribute foo3 http://www.w3.org/2001/XMLSchema#string + attribute bar3 http://www.w3.org/2001/XMLSchema#string + } +} diff --git a/libxsd-frontend/tests/schema/attribute-group/test-000.xsd b/libxsd-frontend/tests/schema/attribute-group/test-000.xsd new file mode 100644 index 0000000..9087a2b --- /dev/null +++ b/libxsd-frontend/tests/schema/attribute-group/test-000.xsd @@ -0,0 +1,31 @@ +<?xml version="1.0"?> +<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:t="test" targetNamespace="test"> + + <!-- Multiple levels of forward reference. --> + + <complexType name="type"> + <attributeGroup ref="t:g1"/> + </complexType> + + <attributeGroup name="g1"> + <attributeGroup ref="t:g2"/> + <attributeGroup ref="t:g3"/> + </attributeGroup> + + <attributeGroup name="g2"> + <attribute ref="t:foo2"/> + <attribute ref="t:bar2" use="required"/> + </attributeGroup> + + <attributeGroup name="g3"> + <attribute ref="t:foo3"/> + <attribute ref="t:bar3" use="required"/> + </attributeGroup> + + <attribute name="foo2" type="string"/> + <attribute name="bar2" type="string"/> + + <attribute name="foo3" type="string"/> + <attribute name="bar3" type="string"/> + +</schema> diff --git a/libxsd-frontend/tests/schema/attribute-group/test-001.std b/libxsd-frontend/tests/schema/attribute-group/test-001.std new file mode 100644 index 0000000..54a1e96 --- /dev/null +++ b/libxsd-frontend/tests/schema/attribute-group/test-001.std @@ -0,0 +1,12 @@ +primary +{ + namespace test + { + complex type + { + any-attribute 'any-attribute #1' + optional attribute foo http://www.w3.org/2001/XMLSchema#string + any-attribute 'any-attribute #0' + } + } +} diff --git a/libxsd-frontend/tests/schema/attribute-group/test-001.xsd b/libxsd-frontend/tests/schema/attribute-group/test-001.xsd new file mode 100644 index 0000000..dc44a70 --- /dev/null +++ b/libxsd-frontend/tests/schema/attribute-group/test-001.xsd @@ -0,0 +1,20 @@ +<?xml version="1.0"?> +<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:t="test" targetNamespace="test"> + + <!-- AnyAttribute in attribute groups. --> + + <complexType name="type"> + <attributeGroup ref="t:g1"/> + <attributeGroup ref="t:g2"/> + </complexType> + + <attributeGroup name="g1"> + <anyAttribute namespace="http://www.foo.com"/> + </attributeGroup> + + <attributeGroup name="g2"> + <attribute name="foo" type="string"/> + <anyAttribute namespace="http://www.bar.com"/> + </attributeGroup> + +</schema> diff --git a/libxsd-frontend/tests/schema/default/makefile b/libxsd-frontend/tests/schema/default/makefile new file mode 100644 index 0000000..dbb5fa9 --- /dev/null +++ b/libxsd-frontend/tests/schema/default/makefile @@ -0,0 +1,35 @@ +# file : tests/schema/default/makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../build/bootstrap.make + +tests := 000 001 + +driver := $(out_root)/tests/dump/driver +test := $(out_base)/.test +clean := $(out_base)/.clean + +# Convenience alias for default target. +# +$(out_base)/: $(driver) + +# Test. +# +test_targets := $(addprefix $(out_base)/.test-,$(tests)) + +$(test): $(test_targets) +$(test_targets): driver := $(driver) + +.PHONY: $(out_base)/.test-% +$(out_base)/.test-%: $(driver) $(src_base)/test-%.xsd $(src_base)/test-%.std + $(call message,test $(out_base)/$*,$(driver) --anonymous $(src_base)/test-$*.xsd | diff -u $(src_base)/test-$*.std -) + +# Clean. +# +$(clean): + +# Dependencies. +# +$(call import,$(src_root)/tests/dump/makefile) diff --git a/libxsd-frontend/tests/schema/default/test-000.std b/libxsd-frontend/tests/schema/default/test-000.std new file mode 100644 index 0000000..efa1140 --- /dev/null +++ b/libxsd-frontend/tests/schema/default/test-000.std @@ -0,0 +1,28 @@ +primary +{ + namespace test + { + complex type + { + element e1=123 + element e2==456 + element e3=unqual + element e4==test#t:foo + element e5=foo#x:bar + optional attribute a1=123 http://www.w3.org/2001/XMLSchema#int + optional attribute a2==456 http://www.w3.org/2001/XMLSchema#int + optional attribute a3=foo#x:bar test#qname + [1, 1] sequence + { + [1, 1] element e1=123 http://www.w3.org/2001/XMLSchema#int + [1, 1] element e2==456 http://www.w3.org/2001/XMLSchema#int + [1, 1] element e3=unqual http://www.w3.org/2001/XMLSchema#QName + [1, 1] element e4==test#t:foo http://www.w3.org/2001/XMLSchema#QName + [1, 1] element e5=foo#x:bar http://www.w3.org/2001/XMLSchema#QName + } + } + complex qname: http://www.w3.org/2001/XMLSchema#QName + { + } + } +} diff --git a/libxsd-frontend/tests/schema/default/test-000.xsd b/libxsd-frontend/tests/schema/default/test-000.xsd new file mode 100644 index 0000000..bfaedc5 --- /dev/null +++ b/libxsd-frontend/tests/schema/default/test-000.xsd @@ -0,0 +1,23 @@ +<?xml version="1.0"?> +<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:t="test" xmlns:x="foo" targetNamespace="test"> + + <xs:complexType name="type"> + <xs:sequence> + <xs:element name="e1" type="xs:int" default="123"/> + <xs:element name="e2" type="xs:int" fixed="456"/> + + <xs:element name="e3" type="xs:QName" default="unqual"/> + <xs:element name="e4" type="xs:QName" fixed="t:foo"/> + <xs:element name="e5" type="xs:QName" default="x:bar"/> + </xs:sequence> + <xs:attribute name="a1" type="xs:int" default="123"/> + <xs:attribute name="a2" type="xs:int" fixed="456"/> + + <xs:attribute name="a3" type="t:qname" default="x:bar"/> + </xs:complexType> + + <xs:simpleType name="qname"> + <xs:restriction base="xs:QName"/> + </xs:simpleType> + +</xs:schema> diff --git a/libxsd-frontend/tests/schema/default/test-001.std b/libxsd-frontend/tests/schema/default/test-001.std new file mode 100644 index 0000000..1b84a07 --- /dev/null +++ b/libxsd-frontend/tests/schema/default/test-001.std @@ -0,0 +1,15 @@ +primary +{ + namespace test + { + complex type + { + element e=foo#unqual + optional attribute a=foo#unqual http://www.w3.org/2001/XMLSchema#QName + [1, 1] sequence + { + [1, 1] element e=foo#unqual http://www.w3.org/2001/XMLSchema#QName + } + } + } +} diff --git a/libxsd-frontend/tests/schema/default/test-001.xsd b/libxsd-frontend/tests/schema/default/test-001.xsd new file mode 100644 index 0000000..5ee0507 --- /dev/null +++ b/libxsd-frontend/tests/schema/default/test-001.xsd @@ -0,0 +1,11 @@ +<?xml version="1.0"?> +<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:t="test" xmlns="foo" targetNamespace="test"> + + <xs:complexType name="type"> + <xs:sequence> + <xs:element name="e" type="xs:QName" default="unqual"/> + </xs:sequence> + <xs:attribute name="a" type="xs:QName" default="unqual"/> + </xs:complexType> + +</xs:schema> diff --git a/libxsd-frontend/tests/schema/element-group/makefile b/libxsd-frontend/tests/schema/element-group/makefile new file mode 100644 index 0000000..8a4ad89 --- /dev/null +++ b/libxsd-frontend/tests/schema/element-group/makefile @@ -0,0 +1,35 @@ +# file : tests/schema/element-group/makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../build/bootstrap.make + +tests := 000 001 002 + +driver := $(out_root)/tests/dump/driver +test := $(out_base)/.test +clean := $(out_base)/.clean + +# Convenience alias for default target. +# +$(out_base)/: $(driver) + +# Test. +# +test_targets := $(addprefix $(out_base)/.test-,$(tests)) + +$(test): $(test_targets) +$(test_targets): driver := $(driver) + +.PHONY: $(out_base)/.test-% +$(out_base)/.test-%: $(driver) $(src_base)/test-%.xsd $(src_base)/test-%.std + $(call message,test $(out_base)/$*,$(driver) $(src_base)/test-$*.xsd | diff -u $(src_base)/test-$*.std -) + +# Clean. +# +$(clean): + +# Dependencies. +# +$(call import,$(src_root)/tests/dump/makefile) diff --git a/libxsd-frontend/tests/schema/element-group/test-000.std b/libxsd-frontend/tests/schema/element-group/test-000.std new file mode 100644 index 0000000..1652b68 --- /dev/null +++ b/libxsd-frontend/tests/schema/element-group/test-000.std @@ -0,0 +1,33 @@ +primary +{ + namespace test + { + complex type + { + element foo2 + element bar2 + element foo3 + element bar3 + [1, 1] sequence + { + [0, unbounded] choice + { + [0, 1] choice + { + [1, 1] element foo2 http://www.w3.org/2001/XMLSchema#string + [0, 1] element bar2 http://www.w3.org/2001/XMLSchema#string + } + [1, unbounded] choice + { + [1, unbounded] element foo3 http://www.w3.org/2001/XMLSchema#string + [0, unbounded] element bar3 http://www.w3.org/2001/XMLSchema#string + } + } + } + } + element foo2 http://www.w3.org/2001/XMLSchema#string + element bar2 http://www.w3.org/2001/XMLSchema#string + element foo3 http://www.w3.org/2001/XMLSchema#string + element bar3 http://www.w3.org/2001/XMLSchema#string + } +} diff --git a/libxsd-frontend/tests/schema/element-group/test-000.xsd b/libxsd-frontend/tests/schema/element-group/test-000.xsd new file mode 100644 index 0000000..1864b28 --- /dev/null +++ b/libxsd-frontend/tests/schema/element-group/test-000.xsd @@ -0,0 +1,39 @@ +<?xml version="1.0"?> +<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:t="test" targetNamespace="test"> + + <!-- Multiple levels of forward reference. --> + + <complexType name="type"> + <sequence> + <group ref="t:g1" minOccurs="0" maxOccurs="unbounded"/> + </sequence> + </complexType> + + <group name="g1"> + <choice> + <group ref="t:g2" minOccurs="0"/> + <group ref="t:g3" maxOccurs="unbounded"/> + </choice> + </group> + + <group name="g2"> + <choice> + <element ref="t:foo2"/> + <element ref="t:bar2" minOccurs="0"/> + </choice> + </group> + + <group name="g3"> + <choice> + <element ref="t:foo3" maxOccurs="unbounded"/> + <element ref="t:bar3" minOccurs="0" maxOccurs="unbounded"/> + </choice> + </group> + + <element name="foo2" type="string"/> + <element name="bar2" type="string"/> + + <element name="foo3" type="string"/> + <element name="bar3" type="string"/> + +</schema> diff --git a/libxsd-frontend/tests/schema/element-group/test-001.std b/libxsd-frontend/tests/schema/element-group/test-001.std new file mode 100644 index 0000000..ae8c1fc --- /dev/null +++ b/libxsd-frontend/tests/schema/element-group/test-001.std @@ -0,0 +1,137 @@ +primary +{ + namespace test + { + complex type + { + element foo + element bar + [1, 1] sequence + { + [1, 1] choice + { + [1, 1] element foo + { + complex <anonymous> + { + element foo + element bar + [1, 1] sequence + { + [1, 1] choice + { + [1, 1] element foo + { + complex <recursive-anonymous> + } + [1, 1] element bar + { + complex <anonymous> + { + element foo + element bar + [1, 1] sequence + { + [1, 1] choice + { + [1, 1] element foo + { + complex <recursive-anonymous> + } + [1, 1] element bar + { + complex <recursive-anonymous> + } + } + } + } + } + } + } + } + } + [1, 1] element bar + { + complex <anonymous> + { + element foo + element bar + [1, 1] sequence + { + [1, 1] choice + { + [1, 1] element foo + { + complex <anonymous> + { + element foo + element bar + [1, 1] sequence + { + [1, 1] choice + { + [1, 1] element foo + { + complex <recursive-anonymous> + } + [1, 1] element bar + { + complex <recursive-anonymous> + } + } + } + } + } + [1, 1] element bar + { + complex <recursive-anonymous> + } + } + } + } + } + } + } + } + element bar + { + complex <anonymous> + { + element foo + element bar + [1, 1] sequence + { + [1, 1] choice + { + [1, 1] element foo + { + complex <anonymous> + { + element foo + element bar + [1, 1] sequence + { + [1, 1] choice + { + [1, 1] element foo + { + complex <recursive-anonymous> + } + [1, 1] element bar + { + complex <recursive-anonymous> + } + } + } + } + } + [1, 1] element bar + { + complex <recursive-anonymous> + } + } + } + } + } + } +} diff --git a/libxsd-frontend/tests/schema/element-group/test-001.xsd b/libxsd-frontend/tests/schema/element-group/test-001.xsd new file mode 100644 index 0000000..c6059af --- /dev/null +++ b/libxsd-frontend/tests/schema/element-group/test-001.xsd @@ -0,0 +1,33 @@ +<?xml version="1.0"?> +<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:t="test" targetNamespace="test"> + + <!-- Recursive reference: g1->element->type->g1 --> + + <complexType name="type"> + <sequence> + <group ref="t:g1"/> + </sequence> + </complexType> + + <group name="g1"> + <choice> + <element name="foo"> + <complexType> + <sequence> + <group ref="t:g1"/> + </sequence> + </complexType> + </element> + <element ref="t:bar"/> + </choice> + </group> + + <element name="bar"> + <complexType> + <sequence> + <group ref="t:g1"/> + </sequence> + </complexType> + </element> + +</schema> diff --git a/libxsd-frontend/tests/schema/element-group/test-002.std b/libxsd-frontend/tests/schema/element-group/test-002.std new file mode 100644 index 0000000..d2c60fe --- /dev/null +++ b/libxsd-frontend/tests/schema/element-group/test-002.std @@ -0,0 +1,24 @@ +primary +{ + namespace test + { + complex type + { + any 'any #1' + element foo + any 'any #0' + [1, 1] sequence + { + [0, unbounded] sequence + { + [1, 1] any 'any #1' + } + [0, unbounded] sequence + { + [1, 1] element foo http://www.w3.org/2001/XMLSchema#int + [1, 1] any 'any #0' + } + } + } + } +} diff --git a/libxsd-frontend/tests/schema/element-group/test-002.xsd b/libxsd-frontend/tests/schema/element-group/test-002.xsd new file mode 100644 index 0000000..bc1bd70 --- /dev/null +++ b/libxsd-frontend/tests/schema/element-group/test-002.xsd @@ -0,0 +1,26 @@ +<?xml version="1.0"?> +<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:t="test" targetNamespace="test"> + + <!-- Any in groups. --> + + <complexType name="type"> + <sequence> + <group ref="t:g1" minOccurs="0" maxOccurs="unbounded"/> + <group ref="t:g2" minOccurs="0" maxOccurs="unbounded"/> + </sequence> + </complexType> + + <group name="g1"> + <sequence> + <any namespace="http://www.foo.com"/> + </sequence> + </group> + + <group name="g2"> + <sequence> + <element name="foo" type="int"/> + <any namespace="http://www.bar.com"/> + </sequence> + </group> + +</schema> diff --git a/libxsd-frontend/tests/schema/enumeration/makefile b/libxsd-frontend/tests/schema/enumeration/makefile new file mode 100644 index 0000000..d958178 --- /dev/null +++ b/libxsd-frontend/tests/schema/enumeration/makefile @@ -0,0 +1,35 @@ +# file : tests/schema/enumeration/makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../build/bootstrap.make + +tests := 000 + +driver := $(out_root)/tests/dump/driver +test := $(out_base)/.test +clean := $(out_base)/.clean + +# Convenience alias for default target. +# +$(out_base)/: $(driver) + +# Test. +# +test_targets := $(addprefix $(out_base)/.test-,$(tests)) + +$(test): $(test_targets) +$(test_targets): driver := $(driver) + +.PHONY: $(out_base)/.test-% +$(out_base)/.test-%: $(driver) $(src_base)/test-%.xsd $(src_base)/test-%.std + $(call message,test $(out_base)/$*,$(driver) --enum-synthesis $(src_base)/test-$*.xsd | diff -u $(src_base)/test-$*.std -) + +# Clean. +# +$(clean): + +# Dependencies. +# +$(call import,$(src_root)/tests/dump/makefile) diff --git a/libxsd-frontend/tests/schema/enumeration/test-000.std b/libxsd-frontend/tests/schema/enumeration/test-000.std new file mode 100644 index 0000000..64e3065 --- /dev/null +++ b/libxsd-frontend/tests/schema/enumeration/test-000.std @@ -0,0 +1,62 @@ +primary +{ + namespace test + { + complex common-base: http://www.w3.org/2001/XMLSchema#string + { + } + complex base: test#common-base + { + } + enumeration one: test#base + { + <romance documentation> + enumerator romance + enumerator fiction + enumerator horror + } + enumeration two: test#common-base + { + enumerator horror + enumerator history + enumerator philosophy + } + enumeration three: http://www.w3.org/2001/XMLSchema#anyURI + { + enumerator foo + enumerator bar + } + enumeration union0: test#common-base + { + <romance documentation> + enumerator romance + enumerator fiction + enumerator horror + enumerator history + enumerator philosophy + } + <union1 documentation> + enumeration union1: test#common-base + { + <romance documentation> + enumerator romance + enumerator fiction + enumerator horror + enumerator history + enumerator philosophy + } + union union2 test#one test#union1 test#common-base + union union3 test#one test#three + complex complex1 + { + element a + [1, 1] sequence + { + [1, 1] element a test#union1 + } + } + complex complex2: test#union1 + { + } + } +} diff --git a/libxsd-frontend/tests/schema/enumeration/test-000.xsd b/libxsd-frontend/tests/schema/enumeration/test-000.xsd new file mode 100644 index 0000000..08539bf --- /dev/null +++ b/libxsd-frontend/tests/schema/enumeration/test-000.xsd @@ -0,0 +1,72 @@ +<?xml version="1.0"?> +<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:t="test" targetNamespace="test"> + + <!-- Enumeration synthesis --> + + <simpleType name="common-base"> + <restriction base="string"/> + </simpleType> + + <simpleType name="base"> + <restriction base="t:common-base"/> + </simpleType> + + <simpleType name="one"> + <restriction base="t:base"> + <enumeration value="romance"> + <annotation> + <documentation>romance documentation</documentation> + </annotation> + </enumeration> + <enumeration value="fiction"/> + <enumeration value="horror"/> + </restriction> + </simpleType> + + <simpleType name="two"> + <restriction base="t:common-base"> + <enumeration value="horror"/> + <enumeration value="history"/> + <enumeration value="philosophy"/> + </restriction> + </simpleType> + + <simpleType name="three"> + <restriction base="anyURI"> + <enumeration value="foo"/> + <enumeration value="bar"/> + </restriction> + </simpleType> + + <simpleType name="union0"> + <union memberTypes="t:one t:two t:union1"/> + </simpleType> + + <simpleType name="union1"> + <annotation> + <documentation>union1 documentation</documentation> + </annotation> + <union memberTypes="t:one t:two"/> + </simpleType> + + <simpleType name="union2"> + <union memberTypes="t:one t:union1 t:common-base"/> + </simpleType> + + <simpleType name="union3"> + <union memberTypes="t:one t:three"/> + </simpleType> + + <complexType name="complex1"> + <sequence> + <element name="a" type="t:union1"/> + </sequence> + </complexType> + + <complexType name="complex2"> + <simpleContent> + <extension base="t:union1"/> + </simpleContent> + </complexType> + +</schema> diff --git a/libxsd-frontend/tests/schema/makefile b/libxsd-frontend/tests/schema/makefile new file mode 100644 index 0000000..fde5482 --- /dev/null +++ b/libxsd-frontend/tests/schema/makefile @@ -0,0 +1,25 @@ +# file : tests/schema +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../build/bootstrap.make + +tests := \ +annotation \ +anonymous \ +attribute-group \ +default \ +element-group \ +enumeration \ +union + +default := $(out_base)/ +test := $(out_base)/.test +clean := $(out_base)/.clean + +$(default): $(addprefix $(out_base)/,$(addsuffix /,$(tests))) +$(test): $(addprefix $(out_base)/,$(addsuffix /.test,$(tests))) +$(clean): $(addprefix $(out_base)/,$(addsuffix /.clean,$(tests))) + +$(foreach t,$(tests),$(call import,$(src_base)/$t/makefile)) diff --git a/libxsd-frontend/tests/schema/union/makefile b/libxsd-frontend/tests/schema/union/makefile new file mode 100644 index 0000000..7f01070 --- /dev/null +++ b/libxsd-frontend/tests/schema/union/makefile @@ -0,0 +1,35 @@ +# file : tests/schema/union/makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../build/bootstrap.make + +tests := 000 001 + +driver := $(out_root)/tests/dump/driver +test := $(out_base)/.test +clean := $(out_base)/.clean + +# Convenience alias for default target. +# +$(out_base)/: $(driver) + +# Test. +# +test_targets := $(addprefix $(out_base)/.test-,$(tests)) + +$(test): $(test_targets) +$(test_targets): driver := $(driver) + +.PHONY: $(out_base)/.test-% +$(out_base)/.test-%: $(driver) $(src_base)/test-%.xsd $(src_base)/test-%.std + $(call message,test $(out_base)/$*,$(driver) $(src_base)/test-$*.xsd | diff -u $(src_base)/test-$*.std -) + +# Clean. +# +$(clean): + +# Dependencies. +# +$(call import,$(src_root)/tests/dump/makefile) diff --git a/libxsd-frontend/tests/schema/union/test-000.std b/libxsd-frontend/tests/schema/union/test-000.std new file mode 100644 index 0000000..6f95b0c --- /dev/null +++ b/libxsd-frontend/tests/schema/union/test-000.std @@ -0,0 +1,37 @@ +primary +{ + namespace test + { + union u1 http://www.w3.org/2001/XMLSchema#int http://www.w3.org/2001/XMLSchema#string + union u2 + { + enumeration <anonymous>: http://www.w3.org/2001/XMLSchema#token + { + enumerator one + } + } + + { + enumeration <anonymous>: http://www.w3.org/2001/XMLSchema#string + { + enumerator two + } + } + + union u3 http://www.w3.org/2001/XMLSchema#int test#u1 + { + enumeration <anonymous>: http://www.w3.org/2001/XMLSchema#token + { + enumerator one + } + } + + { + enumeration <anonymous>: http://www.w3.org/2001/XMLSchema#string + { + enumerator two + } + } + + } +} diff --git a/libxsd-frontend/tests/schema/union/test-000.xsd b/libxsd-frontend/tests/schema/union/test-000.xsd new file mode 100644 index 0000000..99535de --- /dev/null +++ b/libxsd-frontend/tests/schema/union/test-000.xsd @@ -0,0 +1,40 @@ +<?xml version="1.0"?> +<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:t="test" targetNamespace="test"> + + <simpleType name="u1"> + <union memberTypes="int string"/> + </simpleType> + + <simpleType name="u2"> + <union> + <simpleType> + <restriction base="token"> + <enumeration value="one"/> + </restriction> + </simpleType> + <simpleType> + <restriction base="string"> + <enumeration value="two"/> + </restriction> + </simpleType> + </union> + </simpleType> + + <simpleType name="u3"> + <union memberTypes=" int + +t:u1 "> + <simpleType> + <restriction base="token"> + <enumeration value="one"/> + </restriction> + </simpleType> + <simpleType> + <restriction base="string"> + <enumeration value="two"/> + </restriction> + </simpleType> + </union> + </simpleType> + +</schema> diff --git a/libxsd-frontend/tests/schema/union/test-001.std b/libxsd-frontend/tests/schema/union/test-001.std new file mode 100644 index 0000000..f407b30 --- /dev/null +++ b/libxsd-frontend/tests/schema/union/test-001.std @@ -0,0 +1,15 @@ +primary +{ + namespace test + { + list list + { + union <anonymous> http://www.w3.org/2001/XMLSchema#int test#enum + } + enumeration enum: http://www.w3.org/2001/XMLSchema#string + { + enumerator male + enumerator female + } + } +} diff --git a/libxsd-frontend/tests/schema/union/test-001.xsd b/libxsd-frontend/tests/schema/union/test-001.xsd new file mode 100644 index 0000000..00fd8ce --- /dev/null +++ b/libxsd-frontend/tests/schema/union/test-001.xsd @@ -0,0 +1,21 @@ +<?xml version="1.0"?> +<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:t="test" targetNamespace="test"> + + <!-- Test resolution of anonymous argument types. --> + + <simpleType name="list"> + <list> + <simpleType> + <union memberTypes="int t:enum"/> + </simpleType> + </list> + </simpleType> + + <simpleType name="enum"> + <restriction base="string"> + <enumeration value="male"/> + <enumeration value="female"/> + </restriction> + </simpleType> + +</schema> diff --git a/libxsd-frontend/version b/libxsd-frontend/version new file mode 100644 index 0000000..092afa1 --- /dev/null +++ b/libxsd-frontend/version @@ -0,0 +1 @@ +1.17.0 diff --git a/libxsd-frontend/xsd-frontend/makefile b/libxsd-frontend/xsd-frontend/makefile new file mode 100644 index 0000000..abf6565 --- /dev/null +++ b/libxsd-frontend/xsd-frontend/makefile @@ -0,0 +1,126 @@ +# file : xsd-frontend/makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../build/bootstrap.make + +cxx_tun := semantic-graph/annotation.cxx \ + semantic-graph/any.cxx \ + semantic-graph/any-attribute.cxx \ + semantic-graph/attribute.cxx \ + semantic-graph/attribute-group.cxx \ + semantic-graph/complex.cxx \ + semantic-graph/compositors.cxx \ + semantic-graph/element.cxx \ + semantic-graph/element-group.cxx \ + semantic-graph/elements.cxx \ + semantic-graph/enumeration.cxx \ + semantic-graph/fundamental.cxx \ + semantic-graph/list.cxx \ + semantic-graph/namespace.cxx \ + semantic-graph/particle.cxx \ + semantic-graph/schema.cxx \ + semantic-graph/union.cxx + +cxx_tun += traversal/attribute.cxx \ + traversal/attribute-group.cxx \ + traversal/complex.cxx \ + traversal/compositors.cxx \ + traversal/element.cxx \ + traversal/element-group.cxx \ + traversal/elements.cxx \ + traversal/enumeration.cxx \ + traversal/fundamental.cxx \ + traversal/list.cxx \ + traversal/namespace.cxx \ + traversal/particle.cxx \ + traversal/schema.cxx \ + traversal/union.cxx + +cxx_tun += transformations/anonymous.cxx \ + transformations/enum-synthesis.cxx \ + transformations/restriction.cxx \ + transformations/schema-per-type.cxx \ + transformations/simplifier.cxx + +cxx_tun += parser.cxx schema-dom-parser.cxx + + +cxx_obj := $(addprefix $(out_base)/,$(cxx_tun:.cxx=.o)) +cxx_od := $(cxx_obj:.o=.o.d) +m4_cxx := $(out_base)/semantic-graph/fundamental.hxx \ + $(out_base)/semantic-graph/fundamental.cxx + +xsd_frontend.l := $(out_base)/xsd-frontend.l +xsd_frontend.l.cpp-options := $(out_base)/xsd-frontend.l.cpp-options + +clean := $(out_base)/.clean + +# Import. +# +$(call import,\ + $(scf_root)/import/libboost/filesystem/stub.make,\ + l: fs.l,cpp-options: fs.l.cpp-options) + +$(call import,\ + $(scf_root)/import/libxerces-c/stub.make,\ + l: xerces_c.l,cpp-options: xerces_c.l.cpp-options) + +$(call import,\ + $(scf_root)/import/libcult/stub.make,\ + l: cult.l,cpp-options: cult.l.cpp-options) + +$(call import,\ + $(scf_root)/import/libfrontend-elements/stub.make,\ + l: fe.l,cpp-options: fe.l.cpp-options) + +# what to build +# +$(xsd_frontend.l): $(cxx_obj) $(fe.l) $(cult.l) $(xerces_c.l) $(fs.l) + +$(xsd_frontend.l.cpp-options): prefix := xsd-frontend/ $(out_root)/ +$(xsd_frontend.l.cpp-options): value := -I$(src_root) -I$(out_root) +$(xsd_frontend.l.cpp-options): \ + $(fs.l.cpp-options) \ + $(fe.l.cpp-options) \ + $(cult.l.cpp-options) + +#@@ This can be further optimized since only parser depends on xerces. +# +$(cxx_obj) $(cxx_od): $(xsd_frontend.l.cpp-options) $(xerces_c.l.cpp-options) + +$(m4_cxx): $(src_base)/semantic-graph/fundamental.m4 +$(m4_cxx): m4_options := -I $(src_base)/semantic-graph + +$(call include-dep,$(cxx_od)) + +# Alias for default target. +# +$(out_base)/: $(xsd_frontend.l) + +# Clean +# +$(clean): $(xsd_frontend.l).o.clean \ + $(xsd_frontend.l.cpp-options).clean \ + $(addsuffix .cxx.clean,$(cxx_obj)) \ + $(addsuffix .cxx.clean,$(cxx_od)) \ + $(addsuffix .m4.clean,$(m4_cxx)) + +# Generated .gitignore. +# +ifeq ($(out_base),$(src_base)) +$(xsd_frontend.l): | $(out_base)/.gitignore + +$(out_base)/.gitignore: files := semantic-graph/fundamental.hxx semantic-graph/fundamental.cxx +$(clean): $(out_base)/.gitignore.clean + +$(call include,$(bld_root)/git/gitignore.make) +endif + +# How to. +# +$(call include,$(bld_root)/cxx/o-l.make) +$(call include,$(bld_root)/cxx/cxx-o.make) +$(call include,$(bld_root)/cxx/cxx-d.make) +$(call include,$(bld_root)/m4/m4.make) diff --git a/libxsd-frontend/xsd-frontend/parser.cxx b/libxsd-frontend/xsd-frontend/parser.cxx new file mode 100644 index 0000000..901a8d3 --- /dev/null +++ b/libxsd-frontend/xsd-frontend/parser.cxx @@ -0,0 +1,5126 @@ +// file : xsd-frontend/parser.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <xsd-frontend/types.hxx> +#include <xsd-frontend/parser.hxx> +#include <xsd-frontend/xml.hxx> +#include <xsd-frontend/schema-dom-parser.hxx> + +#include <xsd-frontend/semantic-graph.hxx> +#include <xsd-frontend/traversal.hxx> + +#include <cult/containers/map.hxx> +#include <cult/containers/stack.hxx> +#include <cult/containers/vector.hxx> +#include <cult/rtti/type-id.hxx> + +//@@ Do i need this? +// +#include <xercesc/dom/DOM.hpp> + +#include <xercesc/sax/ErrorHandler.hpp> +#include <xercesc/sax/SAXParseException.hpp> + +#include <xercesc/sax2/SAX2XMLReader.hpp> +#include <xercesc/sax2/XMLReaderFactory.hpp> + +#include <xercesc/util/XMLUniDefs.hpp> +#include <xercesc/util/XMLString.hpp> +#include <xercesc/util/PlatformUtils.hpp> +#include <xercesc/util/BinInputStream.hpp> +#include <xercesc/util/BinFileInputStream.hpp> + +#include <xercesc/validators/common/Grammar.hpp> + +#include <xercesc/sax/InputSource.hpp> +#include <xercesc/framework/LocalFileInputSource.hpp> +#include <xercesc/framework/Wrapper4InputSource.hpp> + +#include <iostream> +#include <sstream> +#include <memory> // std::auto_ptr + +using std::wcout; +using std::wcerr; +using std::endl; + +using Cult::RTTI::TypeId; + +namespace XSDFrontend +{ + namespace Xerces = XML::Xerces; + using namespace SemanticGraph; + + //@@ Port to tracing facility. + // + Boolean trace_ = false; + + String const xsd = L"http://www.w3.org/2001/XMLSchema"; + String const xse = L"http://www.codesynthesis.com/xmlns/xml-schema-extension"; + + namespace + { + // + // Exceptions. + // + + struct NotNamespace + { + NotNamespace (String const& ns) + : ns_ (ns) + { + } + + String const& + ns () const + { + return ns_; + } + + private: + String ns_; + }; + + struct NotName + { + NotName (String const& ns, String const& name) + : ns_ (ns), name_ (name) + { + } + + String const& + ns () const + { + return ns_; + } + + String const& + name () const + { + return name_; + } + + private: + String ns_; + String name_; + }; + + + // Name cache. We only support maximum two nodes with the same + // name in the cache (e.g., element and type). For (rare) cases + // where there is three or more names, there will be a cache miss. + // + struct CacheNodes + { + CacheNodes () : first (0), second (0) {} + + Nameable* first; + Nameable* second; + }; + + typedef Cult::Containers::Map<String, CacheNodes> NodeMap; + typedef Cult::Containers::Map<String, NodeMap> NamespaceMap; + typedef Cult::Containers::Vector<SemanticGraph::Member*> DefaultValues; + + template <typename X> + X& + resolve (String const& ns_name, + String const& uq_name, + Schema& s_, + NamespaceMap& cache) + { + // First check the cache. + // + NamespaceMap::Iterator i (cache.find (ns_name)); + + if (i != cache.end ()) + { + NodeMap::Iterator j (i->second.find (uq_name)); + + if (j != i->second.end ()) + { + X* x; + + if ((x = dynamic_cast<X*> (j->second.first)) || + (x = dynamic_cast<X*> (j->second.second))) + return *x; + } + } + + Scope::NamesIteratorPair nss (s_.find (ns_name)); + + if (nss.first == nss.second) + throw NotNamespace (ns_name); + + for (; nss.first != nss.second; ++nss.first) + { + Namespace& ns (dynamic_cast<Namespace&> (nss.first->named ())); + + Scope::NamesIteratorPair types (ns.find (uq_name)); + + for (; types.first != types.second; ++types.first) + { + if (X* x = dynamic_cast<X*> (&types.first->named ())) + { + if (trace_) + wcout << "successfully resolved '" << ns_name << '#' << uq_name + << "'" << endl; + + // Add to the cache if there are free slots. + // + NodeMap& m (i != cache.end () ? i->second : cache[ns_name]); + CacheNodes& n (m[uq_name]); + + if (n.first == 0) + n.first = x; + else if (n.second == 0) + n.second = x; + + return *x; + } + } + } + + throw NotName (ns_name, uq_name); + } + + // + // + typedef Cult::Containers::Map<String, String> Facets; + + Void + copy_facets (Restricts& r, Facets const& f) + { + for (Facets::ConstIterator i (f.begin ()), e (f.end ()); i != e; ++i) + r.facet_insert (i->first, i->second); + } + + // + // + struct UnionMemberType + { + UnionMemberType (String const& ns, String const& uq) + : ns_name (ns), uq_name (uq) + { + } + + String ns_name; + String uq_name; + }; + + typedef Cult::Containers::Vector<UnionMemberType> UnionMemberTypes; + + // + // + struct ElementGroupRef + { + ElementGroupRef (String const& uq_name_, String const& ns_name_, + UnsignedLong min_, UnsignedLong max_, + Compositor& compositor, Scope& scope) + : uq_name (uq_name_), ns_name (ns_name_), + min (min_), max (max_) + { + contains_pos = compositor.contains_end (); + if (compositor.contains_begin () != contains_pos) + --contains_pos; + + names_pos = scope.names_end (); + if (scope.names_begin () != names_pos) + --names_pos; + } + + ElementGroupRef (String const& uq_name_, String const& ns_name_, + UnsignedLong min_, UnsignedLong max_, + Scope& scope) + : uq_name (uq_name_), ns_name (ns_name_), + min (min_), max (max_) + { + names_pos = scope.names_end (); + if (scope.names_begin () != names_pos) + --names_pos; + } + + String uq_name; + String ns_name; + UnsignedLong min, max; + Compositor::ContainsIterator contains_pos; + Scope::NamesIterator names_pos; + }; + + typedef Cult::Containers::Vector<ElementGroupRef> ElementGroupRefs; + + + // + // + struct AttributeGroupRef + { + AttributeGroupRef (String const& uq_name_, + String const& ns_name_, + Scope& scope) + : uq_name (uq_name_), ns_name (ns_name_) + { + names_pos = scope.names_end (); + if (scope.names_begin () != names_pos) + --names_pos; + } + + String uq_name; + String ns_name; + Scope::NamesIterator names_pos; + }; + + typedef Cult::Containers::Vector<AttributeGroupRef> AttributeGroupRefs; + + + // + // + template <typename N, typename A> + struct NodeArgs + { + NodeArgs (N& node, A arg) + : node_ (node), arg_ (arg) + { + } + + operator N& () const + { + return node_; + } + + template <typename E> + Void + add_edge_left (E& e) + { + node_.add_edge_left (e, arg_); + } + + template <typename E> + Void + add_edge_right (E& e) + { + node_.add_edge_right (e, arg_); + } + + private: + N& node_; + A arg_; + }; + + + // + // + struct Resolver : Traversal::Element, + Traversal::Attribute, + Traversal::Fundamental::IdRef, + Traversal::Fundamental::IdRefs, + Traversal::List, + Traversal::Union, + Traversal::Complex, + Traversal::Enumeration, + Traversal::ElementGroup, + Traversal::AttributeGroup, + Traversal::Compositor + { + Resolver (Schema& s, + Boolean& valid, + NamespaceMap& cache, + DefaultValues& default_values) + : s_ (s), + valid_ (valid), + cache_ (cache), + default_values_ (default_values) + { + *this >> contains_compositor >> *this; + } + + Void + traverse (SemanticGraph::Attribute& a) + { + // Avoid traversing attribute more than once. + // + if (!a.context ().count ("attribute-traversed")) + { + a.context ().set ("attribute-traversed", true); + SemanticGraph::Member& m (a); + resolve_member (m); + } + } + + Void + traverse (SemanticGraph::Element& e) + { + resolve_element (e); + } + + Void + resolve_element (SemanticGraph::Element& e) + { + // Avoid resolving element more than once. + // + if (e.context ().count ("element-resolved")) + return; + + e.context ().set ("element-resolved", true); + + { + SemanticGraph::Member& m (e); + resolve_member (m); + } + + if (e.context ().count ("substitution-ns-name")) + { + String ns_name (e.context ().get<String> ("substitution-ns-name")); + String uq_name (e.context ().get<String> ("substitution-uq-name")); + + e.context ().remove ("substitution-ns-name"); + e.context ().remove ("substitution-uq-name"); + + try + { + SemanticGraph::Element& root ( + resolve<SemanticGraph::Element> (ns_name, uq_name, s_, cache_)); + + s_.new_edge<Substitutes> (e, root); + } + catch (NotNamespace const& ex) + { + if (valid_) + { + wcerr << "ice: unable to resolve namespace '" << ex.ns () << "'" + << endl; + abort (); + } + } + catch (NotName const& ex) + { + if (valid_) + { + wcerr << "ice: unable to resolve name '" << ex.name () + << "' inside namespace '" << ex.ns () << "'" <<endl; + abort (); + } + } + } + } + + Void + resolve_member (SemanticGraph::Member& m) + { + using SemanticGraph::Member; + using SemanticGraph::Element; + using SemanticGraph::Attribute; + + try + { + String ns_name; + String uq_name; + + if (m.context ().count ("type-ns-name")) + { + ns_name = m.context ().get<String> ("type-ns-name"); + uq_name = m.context ().get<String> ("type-uq-name"); + + m.context ().remove ("type-ns-name"); + m.context ().remove ("type-uq-name"); + m.context ().remove ("edge-type-id"); + + s_.new_edge<Belongs> ( + m, resolve<SemanticGraph::Type> (ns_name, uq_name, s_, cache_)); + } + else if (m.context ().count ("instance-ns-name")) + { + ns_name = m.context ().get<String> ("instance-ns-name"); + uq_name = m.context ().get<String> ("instance-uq-name"); + + m.context ().remove ("instance-ns-name"); + m.context ().remove ("instance-uq-name"); + + + Member& ref (resolve<Member> (ns_name, uq_name, s_, cache_)); + + // Make sure the referenced member is fully resolved. + // @@ Substitutes edge won't be resolved. + // + resolve_member (ref); + + + // Substitution group info. We have to test for both resolved + // and unresolved cases since we don't know whether it was + // resolved or not. + // + if (ref.is_a<Element> ()) + { + Element& m_e (dynamic_cast<Element&> (m)); + Element& ref_e (dynamic_cast<Element&> (ref)); + + if (ref_e.substitutes_p ()) + { + s_.new_edge<Substitutes> (m_e, ref_e.substitutes ().root ()); + } + else if (ref_e.context ().count ("substitution-ns-name")) + { + m_e.context ().set ( + "substitution-ns-name", + ref_e.context ().get<String> ("substitution-ns-name")); + + m_e.context ().set ( + "substitution-uq-name", + ref_e.context ().get<String> ("substitution-uq-name")); + } + } + + // + // + s_.new_edge<BelongsToNamespace> (m, ref.namespace_ ()); + + // Transfer default and fixed values if we haven't already + // gotten them. + // + if (!m.default_p ()) + { + if (ref.fixed_p ()) + m.fixed (ref.value ()); + else if (ref.default_p ()) + { + // Default value applies only if the attribute is optional. + // + if (Attribute* a = dynamic_cast<Attribute*> (&m)) + { + if (a->optional_p ()) + m.default_ (ref.value ()); + } + else + m.default_ (ref.value ()); + } + + if (m.default_p ()) + { + m.context ().set ( + "dom-node", + ref.context ().get<Xerces::DOMElement*> ("dom-node")); + default_values_.push_back (&m); + } + } + + // Transfer annotation if we haven't already gotten it. + // + if (!m.annotated_p () && ref.annotated_p ()) + s_.new_edge<Annotates> (ref.annotation (), m); + + // Type info. + // + if (ref.typed_p ()) + s_.new_edge<Belongs> (m, ref.type ()); + else + { + if (valid_) + { + wcerr << "ice: referenced instance '" << ns_name << "#" + << uq_name << "' is not typed" << endl; + abort (); + } + } + } + } + catch (NotNamespace const& ex) + { + if (valid_) + { + wcerr << "ice: unable to resolve namespace '" << ex.ns () << "'" + << endl; + abort (); + } + } + catch (NotName const& ex) + { + if (valid_) + { + wcerr << "ice: unable to resolve name '" << ex.name () + << "' inside namespace '" << ex.ns () << "'" <<endl; + abort (); + } + } + } + + Void + traverse (SemanticGraph::Fundamental::IdRef& i) + { + ref_type (i); + } + + Void + traverse (SemanticGraph::Fundamental::IdRefs& i) + { + ref_type (i); + } + + Void + ref_type (SemanticGraph::Specialization& s) + { + if (s.context ().count ("type-ns-name")) + { + String ns_name (s.context ().get<String> ("type-ns-name")); + String uq_name (s.context ().get<String> ("type-uq-name")); + + s.context ().remove ("type-ns-name"); + s.context ().remove ("type-uq-name"); + s.context ().remove ("edge-type-id"); + + try + { + s_.new_edge<Arguments> ( + resolve<SemanticGraph::Type> (ns_name, uq_name, s_, cache_), s); + } + catch (NotName const& ex) + { + wcerr << s.file () << ":" << s.line () << ":" << s.column () << ": " + << "error: unable to resolve type '" << uq_name << "' " + << "in namespace '" << ns_name << "'" << endl; + + valid_ = false; + } + } + } + + Void + traverse (SemanticGraph::List& l) + { + if (l.context ().count ("type-ns-name")) + { + String ns_name (l.context ().get<String> ("type-ns-name")); + String uq_name (l.context ().get<String> ("type-uq-name")); + + l.context ().remove ("type-ns-name"); + l.context ().remove ("type-uq-name"); + l.context ().remove ("edge-type-id"); + + try + { + s_.new_edge<Arguments> ( + resolve<SemanticGraph::Type> (ns_name, uq_name, s_, cache_), l); + } + catch (NotName const& ex) + { + wcerr << l.file () << ":" << l.line () << ":" << l.column () << ": " + << "error: unable to resolve item type '" << uq_name << "' " + << "in namespace '" << ns_name << "'" << endl; + + valid_ = false; + } + } + + Traversal::List::traverse (l); + } + + Void + traverse (SemanticGraph::Union& u) + { + using SemanticGraph::Union; + + if (u.context ().count ("union-member-types")) + { + UnionMemberTypes const& m ( + u.context ().get<UnionMemberTypes> ("union-member-types")); + + // Process it backwards so that we can just insert each + // edge in the front. + // + for (UnionMemberTypes::ConstReverseIterator i (m.rbegin ()); + i != m.rend (); i++) + { + try + { + NodeArgs<Union, Union::ArgumentedIterator> na ( + u, u.argumented_begin ()); + + s_.new_edge<Arguments> ( + resolve<SemanticGraph::Type> ( + i->ns_name, i->uq_name, s_, cache_), na); + } + catch (NotName const& ex) + { + wcerr << u.file () << ":" << u.line () << ":" << u.column () << ": " + << "error: unable to resolve item type '" << i->uq_name << "' " + << "in namespace '" << i->ns_name << "'" << endl; + + valid_ = false; + } + } + + u.context ().remove ("union-member-types"); + } + + Traversal::Union::traverse (u); + } + + Void + traverse (SemanticGraph::Complex& c) + { + // Avoid traversing complex type more than once. + // + if (c.context ().count ("complex-type-resolved")) + return; + + c.context ().set ("complex-type-resolved", true); + + // Resolve base type if any. + // + if (c.context ().count ("type-ns-name")) + { + using Cult::RTTI::TypeId; + + String ns_name (c.context ().get<String> ("type-ns-name")); + String uq_name (c.context ().get<String> ("type-uq-name")); + TypeId edge_id (c.context ().get<TypeId> ("edge-type-id")); + + c.context ().remove ("type-ns-name"); + c.context ().remove ("type-uq-name"); + c.context ().remove ("edge-type-id"); + + try + { + if (edge_id == typeid (Extends)) + { + s_.new_edge<Extends> ( + c, resolve<SemanticGraph::Type> ( + ns_name, uq_name, s_, cache_)); + } + else if (edge_id == typeid (Restricts)) + { + Restricts& r ( + s_.new_edge<Restricts> ( + c, resolve<SemanticGraph::Type> ( + ns_name, uq_name, s_, cache_))); + + if (c.context ().count ("facets")) + { + Facets const& f (c.context ().get<Facets> ("facets")); + copy_facets (r, f); + c.context ().remove ("facets"); + } + } + else + assert (false); + } + catch (NotName const& ex) + { + wcerr << c.file () << ":" << c.line () << ":" << c.column () << ": " + << "error: unable to resolve base type '" << uq_name << "' " + << "in namespace '" << ns_name << "'" << endl; + + valid_ = false; + } + } + + // Resolve attribute-group-refs. Do it before element-group-refs + // so that if the scope was empty they end up at the end. + // + if (c.context ().count ("attribute-group-refs")) + { + AttributeGroupRefs& refs ( + c.context ().get<AttributeGroupRefs> ("attribute-group-refs")); + + // Handle refs from last to first so that multiple insertions + // to an empty list (always front) end up in proper order. + // + for (AttributeGroupRefs::ReverseIterator i (refs.rbegin ()); + i != refs.rend (); ++i) + { + clone_attribute_group_content (*i, c); + } + + c.context ().remove ("attribute-group-refs"); + } + + // Resolve element-group-ref if any. + // + if (c.context ().count ("element-group-ref")) + { + using SemanticGraph::Compositor; + + ElementGroupRef& ref ( + c.context ().get<ElementGroupRef> ("element-group-ref")); + + Compositor* comp (clone_element_group_content (c, ref)); + + // Create ContainsCompositor edge. + // + if (comp) + s_.new_edge<ContainsCompositor> (c, *comp, ref.min, ref.max); + + c.context ().remove ("element-group-ref"); + } + + Traversal::Complex::traverse (c); + } + + Void + traverse (SemanticGraph::Enumeration& e) + { + // Resolve base type if any. + // + if (e.context ().count ("type-ns-name")) + { + String ns_name (e.context ().get<String> ("type-ns-name")); + String uq_name (e.context ().get<String> ("type-uq-name")); + + e.context ().remove ("type-ns-name"); + e.context ().remove ("type-uq-name"); + e.context ().remove ("edge-type-id"); + + try + { + Restricts& r ( + s_.new_edge<Restricts> ( + e, resolve<SemanticGraph::Type> ( + ns_name, uq_name, s_, cache_))); + + if (e.context ().count ("facets")) + { + Facets const& f (e.context ().get<Facets> ("facets")); + copy_facets (r, f); + e.context ().remove ("facets"); + } + } + catch (NotName const& ex) + { + wcerr << e.file () << ":" << e.line () << ":" << e.column () << ": " + << "error: unable to resolve base type '" << uq_name << "' " + << "in namespace '" << ns_name << "'" << endl; + + valid_ = false; + } + } + + Traversal::Enumeration::traverse (e); + } + + Void + traverse (SemanticGraph::ElementGroup& g) + { + // Avoid traversing groups more than once. + // + if (!g.context ().count ("element-group-traversed")) + { + g.context ().set ("element-group-traversed", true); + Traversal::ElementGroup::traverse (g); + + // Note that setting element-group-resolved after traversing + // the group allows for a recursive shallow resolution using + // resolve_element_group. + // + g.context ().set ("element-group-resolved", true); + } + } + + // We need a "shallow" resolve to break possible recursing: + // group->element->complexType->group. + // + Void + resolve_element_group (SemanticGraph::ElementGroup& g) + { + using SemanticGraph::Scope; + using SemanticGraph::Element; + + // Avoid resolving groups more than once. + // + if (!g.context ().count ("element-group-resolved")) + { + g.context ().set ("element-group-resolved", true); + + for (Scope::NamesIterator i (g.names_begin ()); + i != g.names_end (); ++i) + { + if (Element* e = dynamic_cast<Element*> (&i->named ())) + resolve_element (*e); + } + + traverse (g.contains_compositor ().compositor ()); + } + } + + Void + traverse (SemanticGraph::AttributeGroup& g) + { + // Avoid traversing groups more than once. + // + if (g.context ().count ("attribute-group-resolved")) + return; + + g.context ().set ("attribute-group-resolved", true); + + // Resolve attribute-group-refs. + // + if (g.context ().count ("attribute-group-refs")) + { + AttributeGroupRefs& refs ( + g.context ().get<AttributeGroupRefs> ("attribute-group-refs")); + + // Handle refs from last to first so that multiple insertions + // to an empty list (always front) end up in proper order. + // + for (AttributeGroupRefs::ReverseIterator i (refs.rbegin ()); + i != refs.rend (); ++i) + { + clone_attribute_group_content (*i, g); + } + + g.context ().remove ("attribute-group-refs"); + } + + Traversal::AttributeGroup::traverse (g); + } + + Void + traverse (SemanticGraph::Compositor& c) + { + using SemanticGraph::Compositor; + + // Resolve element-group-refs if any. + // + if (c.context ().count ("element-group-refs")) + { + using SemanticGraph::Scope; + + ElementGroupRefs& refs ( + c.context ().get<ElementGroupRefs> ("element-group-refs")); + + // Handle refs from last to first so that multiple insertions + // to an empty list (always front) end up in proper order. + // + for (ElementGroupRefs::ReverseIterator i (refs.rbegin ()); + i != refs.rend (); ++i) + { + // Find our scope. + // + Compositor* j (&c); + + while(!j->contained_compositor_p ()) + j = &j->contained_particle ().compositor (); + + Compositor* comp ( + clone_element_group_content ( + dynamic_cast<Scope&> (j->contained_compositor ().container ()), + *i)); + + // Create ContainsParticle edge. + // + if (comp) + { + NodeArgs<Compositor, Compositor::ContainsIterator> na ( + c, i->contains_pos); + s_.new_edge<ContainsParticle> (na, *comp, i->min, i->max); + } + } + + c.context ().remove ("element-group-refs"); + } + + // Traverse recursively but only particles that are compositors. + // This way we won't trigger anonymous type traversal (via member) + // and therefore can call this functions from resolve_element_group + // to completely resolve a group. + // + for (Compositor::ContainsIterator i (c.contains_begin ()), + e (c.contains_end ()); i != e; ++i) + { + SemanticGraph::Particle& p (i->particle ()); + + if (p.is_a<Compositor> ()) + dispatch (p); + } + + // Traversal::Compositor::traverse (c); + } + + SemanticGraph::Compositor* + clone_element_group_content (SemanticGraph::Scope& s, + ElementGroupRef const& ref) + { + using SemanticGraph::Scope; + using SemanticGraph::Compositor; + using SemanticGraph::ElementGroup; + + try + { + ElementGroup& g ( + resolve<ElementGroup> (ref.ns_name, ref.uq_name, s_, cache_)); + + // Make sure the group and all its content are fully resolved. + // + resolve_element_group (g); + + Scope::NamesIterator pos (ref.names_pos); + Compositor& root (g.contains_compositor ().compositor ()); + Compositor& copy (clone_compositor (root, s, pos)); + + return © + } + catch (NotNamespace const& ex) + { + if (valid_) + { + wcerr << "ice: unable to resolve namespace '" << ex.ns () << "'" + << endl; + abort (); + } + } + catch (NotName const& ex) + { + if (valid_) + { + wcerr << "ice: unable to resolve name '" << ex.name () + << "' inside namespace '" << ex.ns () << "'" << endl; + abort (); + } + } + + return 0; + } + + SemanticGraph::Compositor& + clone_compositor (SemanticGraph::Compositor& c, + SemanticGraph::Scope& scope, + SemanticGraph::Scope::NamesIterator& pos) + { + using SemanticGraph::Any; + using SemanticGraph::Element; + using SemanticGraph::Particle; + using SemanticGraph::Compositor; + + Compositor* tmp (0); + + if (c.is_a<All> ()) + tmp = &s_.new_node<All> (c.file (), c.line (), c.column ()); + else if (c.is_a<Choice> ()) + tmp = &s_.new_node<Choice> (c.file (), c.line (), c.column ()); + else if (c.is_a<Sequence> ()) + tmp = &s_.new_node<Sequence> (c.file (), c.line (), c.column ()); + else + assert (false); + + Compositor& copy (*tmp); + + // Copy annotation. + // + if (c.annotated_p ()) + s_.new_edge<Annotates> (c.annotation (), copy); + + for (Compositor::ContainsIterator i (c.contains_begin ()); + i != c.contains_end (); ++i) + { + Particle& p (i->particle ()); + + if (p.is_a<Compositor> ()) + { + Compositor& c (dynamic_cast<Compositor&> (p)); + Compositor& cc (clone_compositor (c, scope, pos)); + + s_.new_edge<ContainsParticle> (copy, cc, i->min (), i->max ()); + } + else if (p.is_a<Element> ()) + { + Element& e (dynamic_cast<Element&> (p)); + Element& ec (clone_element (e)); + + s_.new_edge<ContainsParticle> (copy, ec, i->min (), i->max ()); + + NodeArgs<Scope, Scope::NamesIterator> na (scope, pos); + s_.new_edge<Names> (na, ec, e.name ()); + ++pos; + } + else if (p.is_a<Any> ()) + { + Any& a (dynamic_cast<Any&> (p)); + Any& ac ( + s_.new_node<Any> (a.file (), a.line (), a.column (), + a.namespace_begin (), a.namespace_end ())); + + ac.prototype (a); + + s_.new_edge<ContainsParticle> (copy, ac, i->min (), i->max ()); + + // Transfer annotation. + // + if (a.annotated_p ()) + s_.new_edge<Annotates> (a.annotation (), ac); + + // Any has no name so we have to come up with a fake one in + // order to put it into the scope. Note that we cannot reuse + // the name from the prototype. + + UnsignedLong count; + FrontendElements::Context& ctx (scope.context ()); + + if (!ctx.count ("any-name-count")) + { + count = 0; + ctx.set ("any-name-count", count); + } + else + count = ++(ctx.get<UnsignedLong> ("any-name-count")); + + std::basic_ostringstream<WideChar> os; + os << "any #" << count; + + NodeArgs<Scope, Scope::NamesIterator> na (scope, pos); + s_.new_edge<Names> (na, ac, os.str ()); + ++pos; + } + else + assert (false); + } + + return copy; + } + + // Clone a fully-resolved element. Note that it cannot be used as + // is to clone ref'ed element (default/fixed value, etc). + // + SemanticGraph::Element& + clone_element (SemanticGraph::Element& e) + { + using SemanticGraph::Element; + + Element& copy ( + s_.new_node<Element> ( + e.file (), e.line (), e.column (), e.global_p (), e.qualified_p ())); + + if (e.qualified_p ()) + s_.new_edge<BelongsToNamespace> (copy, e.namespace_ ()); + + // Transfer default and fixed values. + // + if (e.fixed_p ()) + copy.fixed (e.value ()); + else if (e.default_p ()) + copy.default_ (e.value ()); + + if (copy.default_p ()) + { + copy.context ().set ( + "dom-node", + e.context ().get<Xerces::DOMElement*> ("dom-node")); + default_values_.push_back (©); + } + + // Transfer annotation. + // + if (e.annotated_p ()) + s_.new_edge<Annotates> (e.annotation (), copy); + + // Belongs edge. + // + if (e.typed_p ()) + s_.new_edge<Belongs> (copy, e.type ()); + else + assert (!valid_); + + // Substitutes edge. + // + if (e.substitutes_p ()) + s_.new_edge<Substitutes> (copy, e.substitutes ().root ()); + + return copy; + } + + Void + clone_attribute_group_content (AttributeGroupRef& ref, + SemanticGraph::Scope& s) + { + using SemanticGraph::Scope; + using SemanticGraph::Attribute; + using SemanticGraph::AttributeGroup; + + try + { + AttributeGroup& g ( + resolve<AttributeGroup> (ref.ns_name, ref.uq_name, s_, cache_)); + + // Make sure the group and all its content are fully resolved. + // + traverse (g); + + Scope::NamesIterator pos (ref.names_pos); + + for (Scope::NamesIterator i (g.names_begin ()); + i != g.names_end (); ++i) + { + if (Attribute* p = dynamic_cast<Attribute*> (&i->named ())) + { + Attribute& a ( + s_.new_node<Attribute> (p->file (), + p->line (), + p->column (), + p->optional_p (), + p->global_p (), + p->qualified_p ())); + + NodeArgs<Scope, Scope::NamesIterator> na (s, pos); + s_.new_edge<Names> (na, a, p->name ()); + ++pos; + + if (p->qualified_p ()) + s_.new_edge<BelongsToNamespace> (a, p->namespace_ ()); + + // Transfer default and fixed values if any. + // + if (p->fixed_p ()) + a.fixed (p->value ()); + else if (p->default_p ()) + a.default_ (p->value ()); + + if (a.default_p ()) + { + a.context ().set ( + "dom-node", + p->context ().get<Xerces::DOMElement*> ("dom-node")); + default_values_.push_back (&a); + } + + // Transfer annotation. + // + if (p->annotated_p ()) + s_.new_edge<Annotates> (p->annotation (), a); + + // Belongs edge. + // + if (p->typed_p ()) + s_.new_edge<Belongs> (a, p->type ()); + else + assert (!valid_); + } + else if ( + AnyAttribute* p = dynamic_cast<AnyAttribute*> (&i->named ())) + { + AnyAttribute& any ( + s_.new_node<AnyAttribute> (p->file (), + p->line (), + p->column (), + p->namespace_begin (), + p->namespace_end ())); + + any.prototype (*p); + + // Transfer annotation. + // + if (p->annotated_p ()) + s_.new_edge<Annotates> (p->annotation (), any); + + // AnyAttribute has no name so we have to come up with a fake + // one in order to put it into the scope. Note that we cannot + // reuse the name from the attribute group. + + UnsignedLong count; + FrontendElements::Context& ctx (s.context ()); + + if (!ctx.count ("any-attribute-name-count")) + { + count = 0; + ctx.set ("any-attribute-name-count", count); + } + else + count = ++(ctx.get<UnsignedLong> ("any-attribute-name-count")); + + std::basic_ostringstream<WideChar> os; + os << "any-attribute #" << count; + + NodeArgs<Scope, Scope::NamesIterator> na (s, pos); + s_.new_edge<Names> (na, any, os.str ()); + ++pos; + } + } + } + catch (NotNamespace const& ex) + { + if (valid_) + { + wcerr << "ice: unable to resolve namespace '" << ex.ns () << "'" + << endl; + abort (); + } + } + catch (NotName const& ex) + { + if (valid_) + { + wcerr << "ice: unable to resolve attribute group name '" + << ex.name () << "' inside namespace '" << ex.ns () << "'" + << endl; + abort (); + } + } + } + + private: + Schema& s_; + Boolean& valid_; + NamespaceMap& cache_; + DefaultValues& default_values_; + + private: + //Traversal::ContainsParticle contains_particle; + Traversal::ContainsCompositor contains_compositor; + }; + } + + // + // + struct FilePathComparator + { + Boolean + operator () (SemanticGraph::Path const& x, + SemanticGraph::Path const& y) const + { +#if !defined(BOOST_FILESYSTEM_VERSION) || BOOST_FILESYSTEM_VERSION == 2 + return x.native_file_string () < y.native_file_string (); +#else + return x.string () < y.string (); +#endif + } + }; + + // Parser::Impl + // + + class Parser::Impl: public NonCopyable + { + public: + ~Impl (); + + Impl (Boolean proper_restriction, + Boolean multiple_imports, + Boolean full_schema_check, + LocationTranslator*, + const WarningSet*); + + Evptr<Schema> + parse (Path const&); + + Evptr<Schema> + parse (Paths const&); + + Evptr<Schema> + xml_schema (Path const&); + + private: + Void + fill_xml_schema (Schema&, Path const&); + + private: + XML::AutoPtr<Xerces::DOMDocument> + dom (SemanticGraph::Path const&, Boolean validate); + + Void + schema (XML::Element const&); + + SemanticGraph::Annotation* + annotation (Boolean process); + + Void + import (XML::Element const&); + + Void + include (XML::Element const&); + + Void + element_group (XML::Element const&, Boolean in_compositor); + + SemanticGraph::Type* + simple_type (XML::Element const&); + + SemanticGraph::Type* + list (XML::Element const& l, XML::Element const& type); + + SemanticGraph::Type* + union_ (XML::Element const& u, XML::Element const& type); + + SemanticGraph::Type* + restriction (XML::Element const& r, XML::Element const& type); + + Void + enumeration (XML::Element const&); + + SemanticGraph::Type* + complex_type (XML::Element const&); + + All* + all (XML::Element const&); + + Choice* + choice (XML::Element const&, Boolean in_compositor); + + Sequence* + sequence (XML::Element const&, Boolean in_compositor); + + Void + simple_content (XML::Element const&); + + Void + complex_content (XML::Element const&, Complex&); + + Void + simple_content_extension (XML::Element const&); + + Void + simple_content_restriction (XML::Element const&); + + Void + complex_content_extension (XML::Element const&, Complex&); + + Void + complex_content_restriction (XML::Element const&, Complex&); + + Void + element (XML::Element const&, Boolean global); + + Void + attribute (XML::Element const&, Boolean global); + + Void + attribute_group (XML::Element const&); + + Void + any (XML::Element const&); + + Void + any_attribute (XML::Element const&); + + private: + Boolean + is_disabled (Char const* warning) + { + return disabled_warnings_all_ || + (disabled_warnings_ && + disabled_warnings_->find (warning) != disabled_warnings_->end ()); + } + + private: + Boolean + more () const + { + Iterator const& it (iteration_state_.top ()); + + return it.l_->getLength () > it.i_; + } + + XML::Element + next () + { + Iterator& it (iteration_state_.top ()); + + return XML::Element ( + dynamic_cast<Xerces::DOMElement*> (it.l_->item (it.i_++))); + } + + Void + prev () + { + Iterator& it (iteration_state_.top ()); + + if (it.i_) + --it.i_; + } + + Void + push (XML::Element const& e) + { + iteration_state_.push (e.dom_element ()); + } + + Void + pop () + { + iteration_state_.pop (); + } + + private: + Void + push_scope (SemanticGraph::Scope& s) + { + scope_stack_.push (&s); + } + + Void + pop_scope () + { + scope_stack_.pop (); + } + + SemanticGraph::Scope& + scope () const + { + return *(scope_stack_.top ()); + } + + private: + Void + push_compositor (SemanticGraph::Compositor& c) + { + compositor_stack_.push (&c); + } + + Void + pop_compositor () + { + assert (!compositor_stack_.empty ()); + compositor_stack_.pop (); + } + + SemanticGraph::Compositor& + compositor () const + { + assert (!compositor_stack_.empty ()); + return *(compositor_stack_.top ()); + } + + private: + UnsignedLong + parse_min (String const& m) + { + if (m.empty ()) + return 1; + + UnsignedLong v; + std::basic_istringstream<WideChar> is (m); + + is >> v; + return v; + } + + UnsignedLong + parse_max (String const& m) + { + if (m.empty ()) + return 1; + + if (m == L"unbounded") + return 0; + + UnsignedLong v; + std::basic_istringstream<WideChar> is (m); + + is >> v; + return v; + } + + private: + SemanticGraph::Namespace& + cur_ns () const + { + // Here I am using the fact that each Schema Names only one + // Namespace. + // + return dynamic_cast<Namespace&> (cur_->names_begin ()->named ()); + } + + private: + String + unqualified_name (String const& n) + { + return XML::uq_name (n); + } + + String + namespace_name (XML::Element const& e, String const& n) + { + try + { + String p (XML::prefix (n)); + + // If we are currently handling a chameleon-included schema then + // the empty prefix is logically translated into acquired target + // namespace. + // + if (cur_chameleon_ && p.empty ()) + return cur_ns ().name (); + + // We have to try to resolve even the empty prefix since it can + // be assigned to a namespace (which takes precedence over names + // without a namespace). + // + return XML::ns_name (e.dom_element (), p); + } + catch (XML::NoMapping const& ex) + { + if (ex.prefix ().empty ()) + return String (); + else + throw; + } + } + + SemanticGraph::Type& + ultimate_base (SemanticGraph::Type& t) + { + using namespace SemanticGraph; + + Complex* c = dynamic_cast<Complex*> (&t); + + if (c != 0 && c->inherits_p ()) + { + Type* b (&c->inherits ().base ()); + + while (true) + { + Complex* cb (dynamic_cast<Complex*> (b)); + + if (cb != 0 && cb->inherits_p ()) + { + b = &cb->inherits ().base (); + continue; + } + + break; + } + + return *b; + } + else + return t; + } + + private: + template <typename Edge, typename Node> + Edge* + set_type (String const& type, XML::Element const& e, Node& node); + + private: + XML::PtrVector<Xerces::DOMDocument>* dom_docs_; + + struct Iterator + { + Iterator (Xerces::DOMElement* e) + : l_ (e->getChildNodes ()), i_ (0) + { + } + + Xerces::DOMNodeList* l_; + Size i_; + }; + + Cult::Containers::Stack<Iterator> iteration_state_; + SemanticGraph::Schema* s_; // root schema file + SemanticGraph::Schema* cur_; // current schema file + Boolean cur_chameleon_; // whethere cur_ is chameleon + + SemanticGraph::Schema* xml_schema_; // XML Schema file + SemanticGraph::Path xml_schema_path_; + + // + // + Cult::Containers::Stack<SemanticGraph::Scope*> scope_stack_; + + // + // + Cult::Containers::Stack<SemanticGraph::Compositor*> compositor_stack_; + + + // Map of absolute file path and namespace pair to a Schema node. + // + struct SchemaId + { + SchemaId (SemanticGraph::Path const& path, String const& ns) + : path_ (path), ns_ (ns) + { + } + + + friend Boolean + operator< (SchemaId const& x, SchemaId const& y) + { +#if !defined(BOOST_FILESYSTEM_VERSION) || BOOST_FILESYSTEM_VERSION == 2 + return x.path_.native_file_string () < y.path_.native_file_string () + || (x.path_.native_file_string () == y.path_.native_file_string () + && x.ns_ < y.ns_); +#else + return x.path_.string () < y.path_.string () + || (x.path_.string () == y.path_.string () + && x.ns_ < y.ns_); +#endif + } + + private: + SemanticGraph::Path path_; + String ns_; + }; + + + typedef + Cult::Containers::Map<SchemaId, SemanticGraph::Schema*> + SchemaMap; + + SchemaMap schema_map_; + + // Path stack for diagnostic. + // + Cult::Containers::Stack<SemanticGraph::Path> file_stack_; + + SemanticGraph::Path const& + file () + { + return file_stack_.top (); + } + + // Members with default/fixed values (needed for QName handling). + // + DefaultValues default_values_; + + private: + Boolean qualify_attribute_; + Boolean qualify_element_; + + Boolean valid_; + + Boolean proper_restriction_; + Boolean multiple_imports_; + Boolean full_schema_check_; + LocationTranslator* loc_translator_; + const WarningSet* disabled_warnings_; + Boolean disabled_warnings_all_; + + NamespaceMap* cache_; + }; + + + Parser::Impl:: + Impl (Boolean proper_restriction, + Boolean multiple_imports, + Boolean full_schema_check, + LocationTranslator* t, + const WarningSet* dw) + : s_ (0), + cur_ (0), + cur_chameleon_ (false), + xml_schema_path_ ("XMLSchema.xsd"), + qualify_attribute_ (false), + qualify_element_ (false), + proper_restriction_ (proper_restriction), + multiple_imports_ (multiple_imports), + full_schema_check_ (full_schema_check), + loc_translator_ (t), + disabled_warnings_ (dw), + disabled_warnings_all_ (false) + { + if (dw && dw->find ("all") != dw->end ()) + disabled_warnings_all_ = true; + + // Initialize the Xerces-C++ runtime. + // + Xerces::XMLPlatformUtils::Initialize (); + } + + Parser::Impl:: + ~Impl () + { + // Terminate the Xerces-C++ runtime. + // + Xerces::XMLPlatformUtils::Terminate (); + } + + template<typename T> T& + add_type (Schema& s, Namespace& ns, String name) + { + Path path ("XMLSchema.xsd"); + T& node (s.new_node<T> (path, 0, 0)); + s.new_edge<Names> (ns, node, name); + + return node; + } + + Void Parser::Impl:: + fill_xml_schema (Schema& s, Path const& path) + { + Namespace& ns (s.new_node<Namespace> (path, 1, 1)); + s.new_edge<Names> (s, ns, xsd); + + // anyType and & anySimpleType + // + AnyType& any_type ( + add_type<AnyType> (s, ns, L"anyType")); + add_type<AnySimpleType> (s, ns, L"anySimpleType"); + + // Integers. + // + add_type<Fundamental::Byte> (s, ns, L"byte"); + add_type<Fundamental::UnsignedByte> (s, ns, L"unsignedByte"); + add_type<Fundamental::Short> (s, ns, L"short"); + add_type<Fundamental::UnsignedShort> (s, ns, L"unsignedShort"); + add_type<Fundamental::Int> (s, ns, L"int"); + add_type<Fundamental::UnsignedInt> (s, ns, L"unsignedInt"); + add_type<Fundamental::Long> (s, ns, L"long"); + add_type<Fundamental::UnsignedLong> (s, ns, L"unsignedLong"); + add_type<Fundamental::Integer> (s, ns, L"integer"); + add_type<Fundamental::NonPositiveInteger> (s, ns, L"nonPositiveInteger"); + add_type<Fundamental::NonNegativeInteger> (s, ns, L"nonNegativeInteger"); + add_type<Fundamental::PositiveInteger> (s, ns, L"positiveInteger"); + add_type<Fundamental::NegativeInteger> (s, ns, L"negativeInteger"); + + // Boolean. + // + add_type<Fundamental::Boolean> (s, ns, L"boolean"); + + // Floats. + // + add_type<Fundamental::Float> (s, ns, L"float"); + add_type<Fundamental::Double> (s, ns, L"double"); + add_type<Fundamental::Decimal> (s, ns, L"decimal"); + + // Strings + // + add_type<Fundamental::String> (s, ns, L"string"); + add_type<Fundamental::NormalizedString> (s, ns, L"normalizedString"); + add_type<Fundamental::Token> (s, ns, L"token"); + add_type<Fundamental::Name> (s, ns, L"Name"); + add_type<Fundamental::NameToken> (s, ns, L"NMTOKEN"); + add_type<Fundamental::NameTokens> (s, ns, L"NMTOKENS"); + add_type<Fundamental::NCName> (s, ns, L"NCName"); + add_type<Fundamental::Language> (s, ns, L"language"); + + // ID/IDREF. + // + add_type<Fundamental::Id> (s, ns, L"ID"); + + Fundamental::IdRef& id_ref ( + s.new_node<Fundamental::IdRef> (path, 0, 0)); + s.new_edge<Names> (ns, id_ref, L"IDREF"); + s.new_edge<Arguments> (any_type, id_ref); + + Fundamental::IdRefs& id_refs ( + s.new_node<Fundamental::IdRefs> (path, 0, 0)); + s.new_edge<Names> (ns, id_refs, L"IDREFS"); + s.new_edge<Arguments> (any_type, id_refs); + + // URI. + // + add_type<Fundamental::AnyURI> (s, ns, L"anyURI"); + + // Qualified name. + // + add_type<Fundamental::QName> (s, ns, L"QName"); + + // Binary. + // + add_type<Fundamental::Base64Binary> (s, ns, L"base64Binary"); + add_type<Fundamental::HexBinary> (s, ns, L"hexBinary"); + + // Date/time. + // + add_type<Fundamental::Date> (s, ns, L"date"); + add_type<Fundamental::DateTime> (s, ns, L"dateTime"); + add_type<Fundamental::Duration> (s, ns, L"duration"); + add_type<Fundamental::Day> (s, ns, L"gDay"); + add_type<Fundamental::Month> (s, ns, L"gMonth"); + add_type<Fundamental::MonthDay> (s, ns, L"gMonthDay"); + add_type<Fundamental::Year> (s, ns, L"gYear"); + add_type<Fundamental::YearMonth> (s, ns, L"gYearMonth"); + add_type<Fundamental::Time> (s, ns, L"time"); + + // Entity. + // + add_type<Fundamental::Entity> (s, ns, L"ENTITY"); + add_type<Fundamental::Entities> (s, ns, L"ENTITIES"); + + // Notation. + // + add_type<Fundamental::Notation> (s, ns, L"NOTATION"); + } + + + Evptr<Schema> Parser::Impl:: + xml_schema (Path const& tu) + { + valid_ = true; + + Evptr<Schema> rs (new Schema (tu, 1, 1)); + fill_xml_schema (*rs, tu); + + if (!valid_) + throw InvalidSchema (); + + return rs; + } + Evptr<Schema> Parser::Impl:: + parse (Path const& tu) + { + valid_ = true; + schema_map_.clear (); + default_values_.clear (); + + XML::PtrVector<Xerces::DOMDocument> dom_docs; + dom_docs_ = &dom_docs; + + NamespaceMap cache; + cache_ = &cache; + + XML::AutoPtr<Xerces::DOMDocument> d (dom (tu, true)); + + if (!d) + throw InvalidSchema (); + + XML::Element root (d->getDocumentElement ()); + String ns (root["targetNamespace"]); + + if (trace_) + wcout << "target namespace: " << ns << endl; + + Evptr<Schema> rs (new Schema (tu, root.line (), root.column ())); + + // Implied schema with fundamental types. + // + xml_schema_ = &rs->new_node<Schema> (xml_schema_path_, 1, 1); + rs->new_edge<Implies> (*rs, *xml_schema_, xml_schema_path_); + + fill_xml_schema (*xml_schema_, xml_schema_path_); + + // Parse. + // + { + // Enter the file into schema_map_. + // + Path abs_path (system_complete (tu)); + abs_path.normalize (); + schema_map_[SchemaId (abs_path, ns)] = rs.get (); + rs->context ().set ("absolute-path", abs_path); + + s_ = cur_ = rs.get (); + { + file_stack_.push (tu); + + { + push_scope ( + s_->new_node<Namespace> ( + file (), root.line (), root.column ())); + s_->new_edge<Names> (*cur_, scope (), ns); + + { + schema (root); + } + + pop_scope (); + } + + file_stack_.pop (); + } + + s_ = cur_ = 0; + } + + dom_docs_->push_back (d); + + // Second pass to resolve forward references to types, elements, + // attributes and groups. + // + if (valid_) + { + Traversal::Schema schema; + + struct Uses: Traversal::Uses + { + virtual Void + traverse (Type& u) + { + Schema& s (u.schema ()); + + if (!s.context ().count ("schema-resolved")) + { + s.context ().set ("schema-resolved", true); + Traversal::Uses::traverse (u); + } + } + } uses; + + Traversal::Names schema_names; + Traversal::Namespace ns; + Traversal::Names ns_names; + + schema >> uses >> schema; + schema >> schema_names >> ns >> ns_names; + + Resolver resolver (*rs, valid_, *cache_, default_values_); + + struct AnonymousMember: Traversal::Attribute, + Traversal::Element, + Traversal::Member + { + AnonymousMember (Traversal::NodeDispatcherBase& d) + { + belongs_.node_traverser (d); + } + + virtual Void + traverse (SemanticGraph::Attribute& a) + { + traverse_member (a); + } + + virtual Void + traverse (SemanticGraph::Element& e) + { + traverse_member (e); + } + + Void + traverse_member (SemanticGraph::Member& m) + { + if (m.typed_p () && + !m.type ().named_p () && + !m.type ().context ().count ("seen")) + { + m.type().context ().set ("seen", true); + + Traversal::Member::belongs (m, belongs_); + + m.type ().context ().remove ("seen"); + } + } + + private: + Traversal::Belongs belongs_; + } anonymous_member (resolver); + + struct AnonymousBase: Traversal::Type + { + AnonymousBase (Traversal::NodeDispatcherBase& d) + : base_ (d) + { + } + + virtual Void + traverse (SemanticGraph::Type& t) + { + if (!t.named_p ()) + base_.dispatch (t); + } + + private: + Traversal::NodeDispatcherBase& base_; + } anonymous_base (resolver); + + ns_names >> resolver; + ns_names >> anonymous_member; + + Traversal::Names names; + Traversal::Inherits inherits; + Traversal::Argumented argumented; + resolver >> names >> resolver; + names >> anonymous_member; + resolver >> inherits >> anonymous_base; + resolver >> argumented >> anonymous_base; + + if (trace_) + wcout << "starting resolution pass" << endl; + + schema.dispatch (*rs); + } + + // Resolve default/fixed values of QName type. + // + if (valid_) + { + for (DefaultValues::ConstIterator i (default_values_.begin ()), + e (default_values_.end ()); i != e; ++i) + { + SemanticGraph::Member& m (**i); + SemanticGraph::Type& t (m.type ()); + SemanticGraph::Context& c (m.context ()); + + if (ultimate_base (t).is_a<SemanticGraph::Fundamental::QName> ()) + { + String v (m.value ()); + Xerces::DOMElement* e (c.get<Xerces::DOMElement*> ("dom-node")); + + try + { + // We have to try to resolve even the empty prefix since it can + // be assigned to a namespace (which takes precedence over names + // without a namespace). + // + String ns (XML::ns_name (e, XML::prefix (v))); + + if (m.fixed_p ()) + m.fixed (ns + L'#' + v); + else + m.default_ (ns + L'#' + v); + } + catch (XML::NoMapping const& ex) + { + if (!ex.prefix ().empty ()) + { + wcerr << m.file () << ":" << m.line () << ":" << m.column () + << ": error: unable to resolve namespace for prefix '" + << ex.prefix () << "'" << endl; + + valid_ = false; + } + } + } + + c.remove ("dom-node"); + } + } + + if (!valid_) + throw InvalidSchema (); + + return rs; + } + + Evptr<Schema> Parser::Impl:: + parse (Paths const& paths) + { + valid_ = true; + schema_map_.clear (); + default_values_.clear (); + + XML::PtrVector<Xerces::DOMDocument> dom_docs; + dom_docs_ = &dom_docs; + + NamespaceMap cache; + cache_ = &cache; + + Evptr<Schema> rs (new Schema ("", 0, 0)); + + // Implied schema with fundamental types. + // + xml_schema_ = &rs->new_node<Schema> (xml_schema_path_, 1, 1); + rs->new_edge<Implies> (*rs, *xml_schema_, xml_schema_path_); + + fill_xml_schema (*xml_schema_, xml_schema_path_); + + // Parse individual schemas. + // + s_ = rs.get (); + + for (Paths::ConstIterator i (paths.begin ()); i != paths.end (); ++i) + { + Path const& tu (*i); + XML::AutoPtr<Xerces::DOMDocument> d (dom (tu, true)); + + if (!d) + throw InvalidSchema (); + + XML::Element root (d->getDocumentElement ()); + String ns (root["targetNamespace"]); + + if (trace_) + wcout << "target namespace: " << ns << endl; + + // Check if we already have this schema. + // + Path abs_path (system_complete (tu)); + abs_path.normalize (); + SchemaId schema_id (abs_path, ns); + + if (schema_map_.find (schema_id) != schema_map_.end ()) + continue; + + Schema& s (s_->new_node<Schema> (tu, root.line (), root.column ())); + s_->new_edge<Implies> (s, *xml_schema_, xml_schema_path_); + s_->new_edge<Imports> (*s_, s, tu); + + // Enter the file into schema_map_. + // + schema_map_[schema_id] = &s; + s.context ().set ("absolute-path", abs_path); + + cur_ = &s; + + { + file_stack_.push (tu); + + { + push_scope ( + s_->new_node<Namespace> ( + file (), root.line (), root.column ())); + s_->new_edge<Names> (*cur_, scope (), ns); + + { + schema (root); + } + + pop_scope (); + } + + file_stack_.pop (); + } + + cur_ = 0; + + dom_docs_->push_back (d); + + if (!valid_) + break; + } + + s_ = 0; + + // Second pass to resolve forward references to types, elements, + // attributes and groups. + // + if (valid_) + { + Traversal::Schema schema; + + struct Uses: Traversal::Uses + { + virtual Void + traverse (Type& u) + { + Schema& s (u.schema ()); + + if (!s.context ().count ("schema-resolved")) + { + s.context ().set ("schema-resolved", true); + Traversal::Uses::traverse (u); + } + } + } uses; + + Traversal::Names schema_names; + Traversal::Namespace ns; + Traversal::Names ns_names; + + schema >> uses >> schema; + schema >> schema_names >> ns >> ns_names; + + Resolver resolver (*rs, valid_, *cache_, default_values_); + + struct AnonymousMember: Traversal::Attribute, + Traversal::Element, + Traversal::Member + { + AnonymousMember (Traversal::NodeDispatcherBase& d) + { + belongs_.node_traverser (d); + } + + virtual Void + traverse (SemanticGraph::Attribute& a) + { + traverse_member (a); + } + + virtual Void + traverse (SemanticGraph::Element& e) + { + traverse_member (e); + } + + virtual Void + traverse_member (SemanticGraph::Member& m) + { + if (m.typed_p () && + !m.type ().named_p () && + !m.type ().context ().count ("seen")) + { + m.type().context ().set ("seen", true); + + Traversal::Member::belongs (m, belongs_); + + m.type ().context ().remove ("seen"); + } + } + + private: + Traversal::Belongs belongs_; + } anonymous_member (resolver); + + struct AnonymousBase: Traversal::Type + { + AnonymousBase (Traversal::NodeDispatcherBase& d) + : base_ (d) + { + } + + virtual Void + traverse (SemanticGraph::Type& t) + { + if (!t.named_p ()) + base_.dispatch (t); + } + + private: + Traversal::NodeDispatcherBase& base_; + } anonymous_base (resolver); + + ns_names >> resolver; + ns_names >> anonymous_member; + + Traversal::Names names; + Traversal::Inherits inherits; + Traversal::Argumented argumented; + resolver >> names >> resolver; + names >> anonymous_member; + resolver >> inherits >> anonymous_base; + resolver >> argumented >> anonymous_base; + + if (trace_) + wcout << "starting resolution pass" << endl; + + schema.dispatch (*rs); + } + + // Resolve default/fixed values of QName type. + // + if (valid_) + { + for (DefaultValues::ConstIterator i (default_values_.begin ()), + e (default_values_.end ()); i != e; ++i) + { + SemanticGraph::Member& m (**i); + SemanticGraph::Type& t (m.type ()); + SemanticGraph::Context& c (m.context ()); + + if (ultimate_base (t).is_a<SemanticGraph::Fundamental::QName> ()) + { + String v (m.value ()); + Xerces::DOMElement* e (c.get<Xerces::DOMElement*> ("dom-node")); + + try + { + // We have to try to resolve even the empty prefix since it can + // be assigned to a namespace (which takes precedence over names + // without a namespace). + // + String ns (XML::ns_name (e, XML::prefix (v))); + + if (m.fixed_p ()) + m.fixed (ns + L'#' + v); + else + m.default_ (ns + L'#' + v); + } + catch (XML::NoMapping const& ex) + { + if (!ex.prefix ().empty ()) + { + wcerr << m.file () << ":" << m.line () << ":" << m.column () + << ": error: unable to resolve namespace for prefix '" + << ex.prefix () << "'" << endl; + + valid_ = false; + } + } + } + + c.remove ("dom-node"); + } + } + + if (!valid_) + throw InvalidSchema (); + + return rs; + } + + Void Parser::Impl:: + schema (XML::Element const& s) + { + Boolean old_qa (qualify_attribute_); + Boolean old_qe (qualify_element_); + + if (String af = s["attributeFormDefault"]) + qualify_attribute_ = af == L"qualified"; + + if (String ef = s["elementFormDefault"]) + qualify_element_ = ef == L"qualified"; + + push (s); + + // Parse leading annotation if any and add it as an annotation for + // this schema. + // + if (Annotation* a = annotation (true)) + s_->new_edge<Annotates> (*a, *cur_); + + while (more ()) + { + XML::Element e (next ()); + String name (e.name ()); + + if (trace_) + wcout << name << endl; + + if (name == L"import") import (e); else + if (name == L"include") include (e); else + if (name == L"element") element (e, true); else + if (name == L"attribute") attribute (e, true); else + if (name == L"simpleType") simple_type (e); else + if (name == L"annotation"); else + if (name == L"complexType") complex_type (e); else + if (name == L"group") element_group (e, false); else + if (name == L"attributeGroup") attribute_group (e); else + { + wcerr << file () << ":" << e.line () << ":" << e.column () << ": " + << "error: unexpected top-level element: '" << name << "'" + << endl; + + valid_ = false; + } + } + + pop (); + + qualify_attribute_ = old_qa; + qualify_element_ = old_qe; + } + + Void Parser::Impl:: + import (XML::Element const& i) + { + NarrowString loc ( + XML::transcode_to_narrow ( + i.dom_element ()->getAttribute ( + XML::XMLChString ("schemaLocation").c_str ()))); + + if (loc_translator_) + loc = loc_translator_->translate (loc); + + // Ignore empty <import>. + // + if (!loc && !i["namespace"]) + return; + + Path path, rel_path, abs_path; + try + { +#if !defined(BOOST_FILESYSTEM_VERSION) || BOOST_FILESYSTEM_VERSION == 2 + try + { + path = Path (loc); + } + catch (InvalidPath const&) + { + // Retry as a native path. + // + path = Path (loc, boost::filesystem::native); + } +#else + // The new ABI does not have a fallback native representation + path = Path (loc.c_str()); +#endif + + if (path.is_complete ()) + { + abs_path = rel_path = path; + } + else + { + rel_path = file ().branch_path () / path; + abs_path = system_complete (rel_path); + } + + abs_path.normalize (); + } + catch (InvalidPath const&) + { + wcerr << file () << ":" << i.line () << ":" << i.column () << ": " + << "error: '" << loc.c_str () << "' is not a valid " + << "filesystem path" << endl; + + valid_ = false; + return; + } + + SchemaId schema_id (abs_path, i["namespace"]); + + if (schema_map_.find (schema_id) != schema_map_.end ()) + { + s_->new_edge<Imports> (*cur_, *schema_map_[schema_id], path); + return; + } + + if (trace_) + wcout << "importing " << rel_path << endl; + + if (XML::AutoPtr<Xerces::DOMDocument> d = dom (abs_path, false)) + { + XML::Element r (d->getDocumentElement ()); + String ns (r["targetNamespace"]); + + if (trace_) + wcout << "target namespace: " << ns << endl; + + Schema& s (s_->new_node<Schema> (rel_path, r.line (), r.column ())); + s_->new_edge<Implies> (s, *xml_schema_, xml_schema_path_); + s_->new_edge<Imports> (*cur_, s, path); + + schema_map_[schema_id] = &s; + s.context ().set ("absolute-path", abs_path); + + Schema* old_cur (cur_); + Boolean old_cur_chameleon (cur_chameleon_); + cur_ = &s; + cur_chameleon_ = false; + + { + file_stack_.push (rel_path); + + { + push_scope ( + s_->new_node<Namespace> (file (), r.line (), r.column ())); + s_->new_edge<Names> (*cur_, scope (), ns); + + { + schema (r); + } + + pop_scope (); + } + + file_stack_.pop (); + } + + cur_chameleon_ = old_cur_chameleon; + cur_ = old_cur; + + dom_docs_->push_back (d); + } + } + + Void Parser::Impl:: + include (XML::Element const& i) + { + NarrowString loc ( + XML::transcode_to_narrow ( + i.dom_element ()->getAttribute ( + XML::XMLChString ("schemaLocation").c_str ()))); + + if (loc_translator_) + loc = loc_translator_->translate (loc); + + Path path, rel_path, abs_path; + try + { +#if !defined(BOOST_FILESYSTEM_VERSION) || BOOST_FILESYSTEM_VERSION == 2 + try + { + path = Path (loc); + } + catch (InvalidPath const&) + { + // Retry as a native path. + // + path = Path (loc, boost::filesystem::native); + } +#else + // The new API does not have a fallback native representation. + path = Path (loc.c_str()); +#endif + + if (path.is_complete ()) + { + abs_path = rel_path = path; + } + else + { + rel_path = file ().branch_path () / path; + abs_path = system_complete (rel_path); + } + + abs_path.normalize (); + } + catch (InvalidPath const&) + { + wcerr << file () << ":" << i.line () << ":" << i.column () << ": " + << "error: '" << loc.c_str () << "' is not a valid " + << "filesystem path" << endl; + + valid_ = false; + return; + } + + // Included schema should have the same namespace as ours. + // + SchemaId schema_id (abs_path, cur_ns ().name ()); + + if (schema_map_.find (schema_id) != schema_map_.end ()) + { + Schema& s (*schema_map_[schema_id]); + + // Chemeleon inclusion results in a new Schema node for every + // namespace. As a result, such a Schema node can only be + // Source'ed. I use this property to decide which edge to use. + // + + if (s.used_p () && s.used_begin ()->is_a<Sources> ()) + s_->new_edge<Sources> (*cur_, s, path); + else + s_->new_edge<Includes> (*cur_, s, path); + + return; + } + + if (trace_) + wcout << "including " << rel_path << endl; + + if (XML::AutoPtr<Xerces::DOMDocument> d = dom (abs_path, false)) + { + XML::Element r (d->getDocumentElement ()); + String ns (r["targetNamespace"]), cur_ns; + + Schema& s (s_->new_node<Schema> (rel_path, r.line (), r.column ())); + s_->new_edge<Implies> (s, *xml_schema_, xml_schema_path_); + + schema_map_[schema_id] = &s; + s.context ().set ("absolute-path", abs_path); + + Boolean chameleon (false); + + if (ns.empty () && !(cur_ns = (cur_->names_begin ())->name ()).empty ()) + { + // Chameleon. + // + ns = cur_ns; + s_->new_edge<Sources> (*cur_, s, path); + chameleon = true; + + if (trace_) + wcout << "handling chameleon schema" << endl; + } + else + s_->new_edge<Includes> (*cur_, s, path); + + if (trace_) + wcout << "target namespace: " << ns << endl; + + Schema* old_cur (cur_); + Boolean old_cur_chameleon (cur_chameleon_); + cur_ = &s; + cur_chameleon_ = chameleon; + + { + file_stack_.push (rel_path); + + { + push_scope ( + s_->new_node<Namespace> (file (), r.line (), r.column ())); + s_->new_edge<Names> (*cur_, scope (), ns); + + { + schema (r); + } + + pop_scope (); + } + + file_stack_.pop (); + } + + cur_chameleon_ = old_cur_chameleon; + cur_ = old_cur; + + dom_docs_->push_back (d); + } + } + + Void Parser::Impl:: + element_group (XML::Element const& g, Boolean in_compositor) + { + if (String name = g["name"]) + { + ElementGroup& group ( + s_->new_node<ElementGroup> (file (), g.line (), g.column ())); + + s_->new_edge<Names> (scope (), group, name); + + push_scope (group); + push (g); + + annotation (false); + + XML::Element e (next ()); + + name = e.name (); + + if (trace_) + wcout << name << endl; + + Compositor* c (0); + + if (name == L"all") c = all (e); else + if (name == L"choice") c = choice (e, false); else + if (name == L"sequence") c = sequence (e, false); else + { + wcerr << file () << ":" << e.line () << ":" << e.column () << ": " + << "error: expected 'all', 'choice' or 'sequence' " + << "instead of '" << name << "'" << endl; + + valid_ = false; + } + + // Group's immediate compositor always has cardinality 1,1. + // + if (c) + s_->new_edge<ContainsCompositor> (group, *c, 1, 1); + + pop (); + pop_scope (); + } + else if (String ref = g["ref"]) + { + if (trace_) + wcout << "element-group-ref " << ref << endl; + + try + { + String uq_name (unqualified_name (ref)); + String ns_name (namespace_name (g, ref)); + + // In order to avoid code duplication we are going to let the + // resolver handle this case. + // + if (trace_) + wcout << "deferring resolution of group name '" << uq_name + << "' inside namespace '" << ns_name << "'" + << " until later" << endl; + + if (in_compositor) + { + Compositor& c (compositor ()); + + ElementGroupRef ref ( + uq_name, ns_name, + parse_min (g["minOccurs"]), parse_max (g["maxOccurs"]), + c, scope ()); + + if (!c.context ().count ("element-group-refs")) + c.context ().set ("element-group-refs", ElementGroupRefs ()); + + c.context ().get<ElementGroupRefs> ( + "element-group-refs").push_back (ref); + } + else + { + // This is a group-ref directly in complexType. + // + + Scope& s (scope ()); + + ElementGroupRef ref ( + uq_name, ns_name, + parse_min (g["minOccurs"]), parse_max (g["maxOccurs"]), + s); + + s.context ().set ("element-group-ref", ref); + } + } + catch (NotNamespace const& ex) + { + if (valid_) + { + wcerr << file () << ":" << g.line () << ":" << g.column () << ": " + << "ice: unable to resolve namespace '" << ex.ns () << "'" + << endl; + + abort (); + } + } + catch (XML::NoMapping const& ex) + { + wcerr << file () << ":" << g.line () << ":" << g.column () << ": " + << "error: unable to resolve namespace prefix '" << ex.prefix () + << "' in '" << ref << "'" << endl; + + valid_ = false; + } + } + else + { + wcerr << file () << ":" << g.line () << ":" << g.column () << ": " + << "error: 'name' or 'ref' attribute is missing in group " + << "declaration" << endl; + + valid_ = false; + + return; + } + } + + //@@ Need RAII for push/pop. + // + + Type* Parser::Impl:: + simple_type (XML::Element const& t) + { + Type* r (0); + + push (t); + + Annotation* a (annotation (true)); + + XML::Element e (next ()); + + String name (e.name ()); + + if (name == L"list") r = list (e, t); else + if (name == L"union") r = union_ (e, t); else + if (name == L"restriction") r = restriction (e, t); else + { + wcerr << file () << ":" << e.line () << ":" << e.column () << ": " + << "error: expected 'list', 'union', or 'restriction' " + << "instead of '" << name << "'" << endl; + + valid_ = false; + } + + if (r != 0 && a != 0) + s_->new_edge<Annotates> (*a, *r); + + pop (); + + return r; + } + + SemanticGraph::Type* Parser::Impl:: + list (XML::Element const& l, XML::Element const& t) + { + if (trace_) + wcout << "list" << endl; + + List& node (s_->new_node<List> (file (), t.line (), t.column ())); + + if (String item_type = l["itemType"]) + { + if (trace_) + wcout << "item type: " << fq_name (l, item_type) << endl; + + set_type<Arguments> (item_type, l, node); + } + else + { + // Anonymous list item type. + // + push (l); + + annotation (false); + + if (more ()) + { + XML::Element e (next ()); + + String name (e.name ()); + + if (trace_) + wcout << name << endl; + + Type* t (0); + + if (name == L"simpleType") t = simple_type (e); else + { + wcerr << file () << ":" << e.line () << ":" << e.column () << ": " + << "error: expected 'simpleType' instead of " + << "'" << e.name () << "'" << endl; + + valid_ = false; + } + + if (t) + s_->new_edge<Arguments> (*t, node); + } + else + { + wcerr << file () << ":" << l.line () << ":" << l.column () << ": " + << "error: expected 'itemType' attribute or 'simpleType' " + << "nested element" << endl; + + valid_ = false; + } + + pop (); + } + + if (String name = t["name"]) + s_->new_edge<Names> (scope (), node, name); + + return &node; + } + + namespace + { + // + // List parsing utility functions. + // + + // Find first non-space character. + // + Size + find_ns (const WideChar* s, Size size, Size pos) + { + while (pos < size && + (s[pos] == 0x20 || // space + s[pos] == 0x0D || // carriage return + s[pos] == 0x09 || // tab + s[pos] == 0x0A)) + ++pos; + + return pos < size ? pos : String::npos; + } + + // Find first space character. + // + Size + find_s (const WideChar* s, Size size, Size pos) + { + while (pos < size && + s[pos] != 0x20 && // space + s[pos] != 0x0D && // carriage return + s[pos] != 0x09 && // tab + s[pos] != 0x0A) + ++pos; + + return pos < size ? pos : String::npos; + } + } + + SemanticGraph::Type* Parser::Impl:: + union_ (XML::Element const& u, XML::Element const& t) + { + if (trace_) + wcout << "union" << endl; + + Union& node (s_->new_node<Union> (file (), t.line (), t.column ())); + + Boolean has_members (false); + + if (String members = u["memberTypes"]) + { + // Don't bother trying to resolve member types at this point + // since the order is important so we would have to insert + // the late resolutions into specific places. It is simpler + // to just do the whole resolution later. + // + const WideChar* data (members.c_str ()); + Size size (members.size ()); + + UnionMemberTypes* m (0); + + // Traverse the type list while logically collapsing spaces. + // + for (Size i (find_ns (data, size, 0)); i != String::npos;) + { + String s; + Size j (find_s (data, size, i)); + + if (j != String::npos) + { + s = String (data + i, j - i); + i = find_ns (data, size, j); + } + else + { + // Last item. + // + s = String (data + i, size - i); + i = String::npos; + } + + if (trace_) + wcout << "member type: " << fq_name (u, s) << endl; + + if (m == 0) + { + node.context ().set ("union-member-types", UnionMemberTypes ()); + m = &node.context ().get<UnionMemberTypes> ("union-member-types"); + } + + try + { + m->push_back ( + UnionMemberType ( + namespace_name (u, s), unqualified_name (s))); + } + catch (XML::NoMapping const& ex) + { + wcerr << file () << ":" << u.line () << ":" << u.column () << ": " + << "error: unable to resolve namespace prefix " + << "'" << ex.prefix () << "' in '" << s << "'" << endl; + + valid_ = false; + } + } + + has_members = (m != 0); + } + + // Handle anonymous members. + // + push (u); + + annotation (false); + + while (more ()) + { + XML::Element e (next ()); + String name (e.name ()); + + if (trace_) + wcout << name << endl; + + Type* t (0); + + if (name == L"simpleType") t = simple_type (e); else + { + wcerr << file () << ":" << e.line () << ":" << e.column () << ": " + << "error: expected 'simpleType' instead of " + << "'" << e.name () << "'" << endl; + + valid_ = false; + } + + if (t) + s_->new_edge<Arguments> (*t, node); + } + + pop (); + + if (node.argumented_begin () == node.argumented_end () && !has_members) + { + wcerr << file () << ":" << u.line () << ":" << u.column () << ": " + << "error: expected 'memberTypes' attribute or 'simpleType' " + << "nested element" << endl; + + valid_ = false; + } + + if (String name = t["name"]) + s_->new_edge<Names> (scope (), node, name); + + return &node; + } + + Type* Parser::Impl:: + restriction (XML::Element const& r, XML::Element const& t) + { + String base (r["base"]); + Type* base_type (0); + + if (base) + { + if (trace_) + wcout << "restriction base: " << fq_name (r, base) << endl; + } + + Type* rv (0); + + push (r); + + annotation (false); + + Boolean enum_ (false); + + if (!base) + { + // Anonymous base type. + // + if (more ()) + { + XML::Element e (next ()); + + String name (e.name ()); + + if (trace_) + wcout << name << endl; + + if (name == L"simpleType") base_type = simple_type (e); else + { + wcerr << file () << ":" << e.line () << ":" << e.column () << ": " + << "error: expected 'simpleType' instead of " + << "'" << e.name () << "'" << endl; + + valid_ = false; + } + } + else + { + wcerr << file () << ":" << r.line () << ":" << r.column () << ": " + << "error: expected 'base' attribute or 'simpleType' " + << "nested element" << endl; + + valid_ = false; + } + + if (!valid_) + { + pop (); + return 0; + } + } + + Facets facets; + Restricts* restricts (0); + + while (more ()) + { + XML::Element e (next ()); + String name (e.name ()); + + if (name == L"enumeration") + { + // Enumeration + // + if (enum_) + enumeration (e); + else + { + // First + // + enum_ = true; + + Enumeration& node ( + s_->new_node<Enumeration> (file (), t.line (), t.column ())); + + if (base_type) + restricts = &s_->new_edge<Restricts> (node, *base_type); + else + restricts = set_type<Restricts> (base, r, node); + + if (String name = t["name"]) + s_->new_edge<Names> (scope (), static_cast<Nameable&> (node), name); + + rv = &node; + push_scope (node); + enumeration (e); + } + } + else if (name == L"minExclusive" || + name == L"minInclusive" || + name == L"maxExclusive" || + name == L"maxInclusive" || + name == L"totalDigits" || + name == L"fractionDigits" || + name == L"length" || + name == L"minLength" || + name == L"maxLength" || + name == L"whiteSpace" || + name == L"pattern") + { + facets[name] = e["value"]; + } + else + { + wcerr << file () << ":" << e.line () << ":" << e.column () << ": " + << "error: unexpected element '" << name << "' in " + << "simple type restriction" << endl; + + valid_ = false; + } + } + + if (enum_) + pop_scope (); + else + { + Complex& node (s_->new_node<Complex> (file (), t.line (), t.column ())); + + if (base_type) + restricts = &s_->new_edge<Restricts> (node, *base_type); + else + restricts = set_type<Restricts> (base, r, node); + + if (String name = t["name"]) + s_->new_edge<Names> (scope (), node, name); + + rv = &node; + } + + if (!facets.empty ()) + { + if (restricts) + copy_facets (*restricts, facets); + else + rv->context ().set ("facets", facets); + } + + pop (); + + return rv; + } + + Void Parser::Impl:: + enumeration (XML::Element const& e) + { + String value (e["value"]); + + if (trace_) + wcout << "enumeration value: " << value << endl; + + push (e); + Annotation* a (annotation (true)); + pop (); + + Enumerator& node ( + s_->new_node<Enumerator> (file (), e.line (), e.column ())); + + s_->new_edge<Names> (scope (), node, value); + s_->new_edge<Belongs> (node, dynamic_cast<Type&>(scope ())); + + if (a != 0) + s_->new_edge<Annotates> (*a, node); + + } + + Type* Parser::Impl:: + complex_type (XML::Element const& t) + { + Type* r (0); + + Complex& node (s_->new_node<Complex> (file (), t.line (), t.column ())); + + node.mixed_p (t["mixed"] == L"true" || t["mixed"] == L"1"); + + if (String name = t["name"]) + s_->new_edge<Names> (scope (), node, name); + + r = &node; + + push_scope (node); + push (t); + + if (Annotation* a = annotation (true)) + s_->new_edge<Annotates> (*a, node); + + if (more ()) + { + XML::Element e (next ()); + + String name (e.name ()); + + if (trace_) + wcout << name << endl; + + if (name == L"simpleContent") simple_content (e); else + if (name == L"complexContent") complex_content (e, node); else + { + Compositor* c (0); + + if (name == L"all") c = all (e); else + if (name == L"choice") c = choice (e, false); else + if (name == L"sequence") c = sequence (e, false); else + if (name == L"attribute") attribute (e, false); else + if (name == L"anyAttribute") any_attribute (e); else + if (name == L"group") element_group (e, false); else + if (name == L"attributeGroup") attribute_group (e); else + { + wcerr << file () << ":" << e.line () << ":" << e.column () << ": " + << "error: unexpected element '" << name << "'" << endl; + + valid_ = false; + } + + if (c) + s_->new_edge<ContainsCompositor> ( + node, *c, parse_min (e["minOccurs"]), parse_max (e["maxOccurs"])); + + while (more ()) + { + XML::Element e (next ()); + String name (e.name ()); + + if (name == L"attribute") attribute (e, false); else + if (name == L"anyAttribute") any_attribute (e); else + if (name == L"attributeGroup") attribute_group (e); else + { + wcerr << file () << ":" << e.line () << ":" << e.column () << ": " + << "error: expected 'attribute', 'anyAttribute', or " + << "'attributeGroup' instead of '" << name << "'" << endl; + + valid_ = false; + } + } + } + } + + pop (); + pop_scope (); + + return r; + } + + All* Parser::Impl:: + all (XML::Element const& a) + { + // 'all' cannot be nested inside 'choice' or 'sequence', nor + // can it contain any of those. The only valid cardinality + // values for 'all' are min=0,1 and max=1. + // + All& node (s_->new_node<All> (file (), a.line (), a.column ())); + + push_compositor (node); + push (a); + + if (Annotation* a = annotation (true)) + s_->new_edge<Annotates> (*a, node); + + while (more ()) + { + XML::Element e (next ()); + + String name (e.name ()); + + if (name == L"element") element (e, false); else + { + wcerr << file () << ":" << e.line () << ":" << e.column () << ": " + << "error: expected 'element' " + << "instead of '" << name << "'" << endl; + + valid_ = false; + } + } + + pop (); + pop_compositor (); + + return &node; + } + + Choice* Parser::Impl:: + choice (XML::Element const& c, Boolean in_compositor) + { + Choice& node (s_->new_node<Choice> (file (), c.line (), c.column ())); + + if (in_compositor) + { + s_->new_edge<ContainsParticle> ( + compositor (), node, + parse_min (c["minOccurs"]), parse_max (c["maxOccurs"])); + } + + push_compositor (node); + push (c); + + if (Annotation* a = annotation (true)) + s_->new_edge<Annotates> (*a, node); + + while (more ()) + { + XML::Element e (next ()); + + String name (e.name ()); + + if (name == L"any") any (e); else + if (name == L"choice") choice (e, true); else + if (name == L"element") element (e, false); else + if (name == L"sequence") sequence (e, true); else + if (name == L"group") element_group (e, true); else + { + wcerr << file () << ":" << e.line () << ":" << e.column () << ": " + << "error: expected 'any', 'group', 'choice', 'sequence', " + << "or 'element' instead of '" << name << "'" << endl; + + valid_ = false; + } + } + + pop (); + pop_compositor (); + + return &node; + } + + Sequence* Parser::Impl:: + sequence (XML::Element const& s, Boolean in_compositor) + { + Sequence& node (s_->new_node<Sequence> (file (), s.line (), s.column ())); + + if (in_compositor) + { + s_->new_edge<ContainsParticle> ( + compositor (), node, + parse_min (s["minOccurs"]), parse_max (s["maxOccurs"])); + } + + push_compositor (node); + push (s); + + if (Annotation* a = annotation (true)) + s_->new_edge<Annotates> (*a, node); + + while (more ()) + { + XML::Element e (next ()); + + String name (e.name ()); + + if (name == L"any") any (e); else + if (name == L"choice") choice (e, true); else + if (name == L"element") element (e, false); else + if (name == L"sequence") sequence (e, true); else + if (name == L"group") element_group (e, true); else + { + wcerr << file () << ":" << e.line () << ":" << e.column () << ": " + << "error: expected 'any', 'group', 'choice', 'sequence', " + << "or 'element' instead of '" << name << "'" << endl; + + valid_ = false; + } + } + + pop (); + pop_compositor (); + + return &node; + } + + Void Parser::Impl:: + simple_content (XML::Element const& c) + { + push (c); + + annotation (false); + + XML::Element e (next ()); + String name (e.name ()); + + if (name == L"extension") simple_content_extension (e); else + if (name == L"restriction") simple_content_restriction (e); else + { + wcerr << file () << ":" << e.line () << ":" << e.column () << ": " + << "error: expected 'extension' or 'restriction' instead of " + << "'" << name << "'" << endl; + + valid_ = false; + } + + pop (); + } + + Void Parser::Impl:: + complex_content (XML::Element const& c, Complex& type) + { + if (c.attribute_p ("mixed")) + { + type.mixed_p (c["mixed"] == L"true" || c["mixed"] == L"1"); + } + + push (c); + + annotation (false); + + XML::Element e (next ()); + String name (e.name ()); + + if (name == L"extension") complex_content_extension (e, type); else + if (name == L"restriction") complex_content_restriction (e, type); else + { + wcerr << file () << ":" << e.line () << ":" << e.column () << ": " + << "error: expected 'extension' or 'restriction' instead of " + << "'" << name << "'" << endl; + + valid_ = false; + } + + pop (); + } + + Void Parser::Impl:: + simple_content_extension (XML::Element const& e) + { + if (trace_) + wcout << "extension base: " << fq_name (e, e["base"]) << endl; + + set_type<Extends> (e["base"], e, dynamic_cast<Complex&> (scope ())); + + push (e); + + annotation (false); + + while (more ()) + { + XML::Element e (next ()); + String name (e.name ()); + + if (name == L"attribute") attribute (e, false); else + if (name == L"anyAttribute") any_attribute (e); else + if (name == L"attributeGroup") attribute_group (e); else + { + wcerr << file () << ":" << e.line () << ":" << e.column () << ": " + << "error: expected 'attribute', 'anyAttribute', or " + << "'attributeGroup' instead of '" << name << "'" << endl; + + valid_ = false; + } + } + + pop (); + } + + Void Parser::Impl:: + simple_content_restriction (XML::Element const& r) + { + String base (r["base"]); + Type* base_type (0); + + if (trace_ && base) + wcout << "restriction base: " << fq_name (r, base) << endl; + + push (r); + annotation (false); + + if (!base) + { + // Anonymous base type. + // + if (more ()) + { + XML::Element e (next ()); + String name (e.name ()); + + if (trace_) + wcout << name << endl; + + if (name == L"simpleType") base_type = simple_type (e); else + { + wcerr << file () << ":" << e.line () << ":" << e.column () << ": " + << "error: expected 'simpleType' instead of " + << "'" << e.name () << "'" << endl; + + valid_ = false; + } + } + else + { + wcerr << file () << ":" << r.line () << ":" << r.column () << ": " + << "error: expected 'base' attribute or 'simpleType' " + << "nested element" << endl; + + valid_ = false; + } + + if (!valid_) + { + pop (); + return; + } + } + + Facets facets; + + while (more ()) + { + XML::Element e (next ()); + String name (e.name ()); + + if (name == L"simpleType") + { + // This is a "superimposed" restriction where the base + // content is restricted by specifying another simple + // type. The attributes are restricted in the ussual + // way. So in effect we have kind of two base classes. + // I guess the way to handle this one day would be to + // copy all the facets from the base-to-this-type + // part of the hierarchy (will need to "know" facets + // for the built-in type restrictions as well). For + // now just ignore it. + // + } + else if (name == L"enumeration") + { + // Right now our sementic graph cannot represent enumerations + // with attributes so we are going to ignore enumerators for + // now. + // + } + else if (name == L"minExclusive" || + name == L"minInclusive" || + name == L"maxExclusive" || + name == L"maxInclusive" || + name == L"totalDigits" || + name == L"fractionDigits" || + name == L"length" || + name == L"minLength" || + name == L"maxLength" || + name == L"whiteSpace" || + name == L"pattern") + { + facets[name] = e["value"]; + } + else if (name == L"attribute") + { + if (proper_restriction_) + attribute (e, false); + } + else if (name == L"anyAttribute") + { + if (proper_restriction_) + any_attribute (e); + } + else if (name == L"attributeGroup") + { + if (proper_restriction_) + attribute_group (e); + } + else + { + wcerr << file () << ":" << e.line () << ":" << e.column () << ": " + << "error: unexpected element '" << name << "' in " + << "simple content restriction" << endl; + + valid_ = false; + } + } + + Complex& type (dynamic_cast<Complex&> (scope ())); + Restricts* restricts = set_type<Restricts> (base, r, type); + + if (!facets.empty ()) + { + if (restricts) + copy_facets (*restricts, facets); + else + type.context ().set ("facets", facets); + } + + pop (); + } + + Void Parser::Impl:: + complex_content_extension (XML::Element const& e, Complex& type) + { + if (trace_) + wcout << "extension base: " << fq_name (e, e["base"]) << endl; + + set_type<Extends> (e["base"], e, dynamic_cast<Complex&> (scope ())); + + push (e); + + annotation (false); + + if (more ()) + { + XML::Element e (next ()); + String name (e.name ()); + Compositor* c (0); + + if (name == L"all") c = all (e); else + if (name == L"choice") c = choice (e, false); else + if (name == L"sequence") c = sequence (e, false); else + if (name == L"attribute") attribute (e, false); else + if (name == L"anyAttribute") any_attribute (e); else + if (name == L"group") element_group (e, false); else + if (name == L"attributeGroup") attribute_group (e); else + { + wcerr << file () << ":" << e.line () << ":" << e.column () << ": " + << "error: unexpected element '" << name << "'" << endl; + + valid_ = false; + } + + if (c) + s_->new_edge<ContainsCompositor> ( + type, *c, parse_min (e["minOccurs"]), parse_max (e["maxOccurs"])); + + while (more ()) + { + XML::Element e (next ()); + String name (e.name ()); + + if (name == L"attribute") attribute (e, false); else + if (name == L"anyAttribute") any_attribute (e); else + if (name == L"attributeGroup") attribute_group (e); else + { + wcerr << file () << ":" << e.line () << ":" << e.column () << ": " + << "error: expected 'attribute', 'anyAttribute', or " + << "'attributeGroup' instead of '" << name << "'" << endl; + + valid_ = false; + } + } + } + + pop (); + } + + Void Parser::Impl:: + complex_content_restriction (XML::Element const& e, Complex& type) + { + if (trace_) + wcout << "restriction base: " << fq_name (e, e["base"]) << endl; + + set_type<Restricts> (e["base"], e, dynamic_cast<Complex&> (scope ())); + + // @@ + // For now we simply skip the contents unless the base is anyType + // (or a trivial alias thereof). Checking for the trivial alias + // is further complicated by the fact that it might not be defined + // at this stage (forward inheritnace) so we will ignore that case + // as well for now. + // + if (!proper_restriction_) + { + String base (e["base"]); + String uq_name (unqualified_name (base)); + String ns_name (namespace_name (e, base)); + + if (ns_name != xsd || uq_name != L"anyType") + return; + } + + push (e); + + annotation (false); + + if (more ()) + { + XML::Element e (next ()); + String name (e.name ()); + Compositor* c (0); + + if (name == L"all") c = all (e); else + if (name == L"choice") c = choice (e, false); else + if (name == L"sequence") c = sequence (e, false); else + if (name == L"attribute") attribute (e, false); else + if (name == L"anyAttribute") any_attribute (e); else + if (name == L"group") element_group (e, false); else + if (name == L"attributeGroup") attribute_group (e); else + { + wcerr << file () << ":" << e.line () << ":" << e.column () << ": " + << "error: unexpected element '" << name << "'" << endl; + + valid_ = false; + } + + if (c) + s_->new_edge<ContainsCompositor> ( + type, *c, parse_min (e["minOccurs"]), parse_max (e["maxOccurs"])); + + while (more ()) + { + XML::Element e (next ()); + String name (e.name ()); + + if (name == L"attribute") attribute (e, false); else + if (name == L"anyAttribute") any_attribute (e); else + if (name == L"attributeGroup") attribute_group (e); else + { + wcerr << file () << ":" << e.line () << ":" << e.column () << ": " + << "error: expected 'attribute', 'anyAttribute', or " + << "'attributeGroup' instead of '" << name << "'" << endl; + + valid_ = false; + } + } + } + + pop (); + } + + Void Parser::Impl:: + element (XML::Element const& e, Boolean global) + { + Boolean qualified (global ? true : qualify_element_); + + if (String form = e["form"]) + qualified = form == L"qualified"; + + if (trace_) + wcout << "element qualified: " << qualified << endl; + + if (String name = e["name"]) + { + if (trace_) + wcout << "element name '" << name << "'" << endl; + + Element& node ( + s_->new_node<Element> ( + file (), e.line (), e.column (), global, qualified)); + + s_->new_edge<Names> (scope (), node, name); + + if (qualified) + s_->new_edge<BelongsToNamespace> (node, cur_ns ()); + + if (!global) + { + s_->new_edge<ContainsParticle> ( + compositor (), node, + parse_min (e["minOccurs"]), parse_max (e["maxOccurs"])); + } + + // Default and fixed values are mutually exclusive. + // + if (e.attribute_p ("fixed")) + node.fixed (e.attribute ("fixed")); + else if (e.attribute_p ("default")) + node.default_ (e.attribute ("default")); + + if (node.default_p ()) + { + node.context ().set ("dom-node", e.dom_element ()); + default_values_.push_back (&node); + } + + if (global) + { + if (String sg = e["substitutionGroup"]) + { + if (trace_) + wcout << "substitutes " << sg << endl; + + try + { + String uq_name (unqualified_name (sg)); + String ns_name (namespace_name (e, sg)); + + node.context ().set ("substitution-ns-name", ns_name); + node.context ().set ("substitution-uq-name", uq_name); + } + catch (XML::NoMapping const& ex) + { + wcerr << file () << ":" << e.line () << ":" << e.column () << ": " + << "error: unable to resolve namespace prefix '" + << ex.prefix () << "' in '" << sg << "'" << endl; + + valid_ = false; + } + } + } + + if (String type = e["type"]) + { + if (trace_) + wcout << "element type " << fq_name (e, type) << endl; + + set_type<Belongs> (type, e, node); + + // Parse annotation. + // + push (e); + + if (Annotation* a = annotation (true)) + s_->new_edge<Annotates> (*a, node); + + pop (); + } + else + { + // Looks like an anonymous type. + // + push (e); + + if (Annotation* a = annotation (true)) + s_->new_edge<Annotates> (*a, node); + + if (more ()) + { + XML::Element e (next ()); + + String name (e.name ()); + + if (trace_) + wcout << name << endl; + + Type* t (0); + + if (name == L"simpleType") t = simple_type (e); else + if (name == L"complexType") t = complex_type (e); else + { + wcerr << file () << ":" << e.line () << ":" << e.column () << ": " + << "error: expected 'simpleType' or 'complexType' " + << "instead of '" << e.name () << "'" << endl; + + valid_ = false; + } + + if (t) + s_->new_edge<Belongs> (node, *t); + } + else + { + // anyType + // + if (!is_disabled ("F001")) + { + wcerr << file () << ":" << e.line () << ":" << e.column () << ": " + << "warning F001: element '" << name << "' is implicitly " + << "of anyType" << endl; + + wcerr << file () << ":" << e.line () << ":" << e.column () << ": " + << "info: did you forget to specify 'type' attribute?" + << endl; + } + + String prefix (ns_prefix (e, xsd)); + type = prefix + (prefix.empty () ? L"" : L":") + L"anyType"; + + set_type<Belongs> (type, e, node); + } + + pop (); + } + } + else if (String ref = e["ref"]) + { + Element& node ( + s_->new_node<Element> ( + file (), e.line (), e.column (), true, true)); + + // Ref can only be in compositor. + // + s_->new_edge<ContainsParticle> ( + compositor (), node, + parse_min (e["minOccurs"]), parse_max (e["maxOccurs"])); + + + // Default and fixed values are mutually exclusive. + // + if (e.attribute_p ("fixed")) + node.fixed (e.attribute ("fixed")); + else if (e.attribute_p ("default")) + node.default_ (e.attribute ("default")); + + if (node.default_p ()) + { + node.context ().set ("dom-node", e.dom_element ()); + default_values_.push_back (&node); + } + + // Parse annotation. + // + push (e); + + if (Annotation* a = annotation (true)) + s_->new_edge<Annotates> (*a, node); + + pop (); + + // Try to resolve the prototype. + // + try + { + String uq_name (unqualified_name (ref)); + String ns_name (namespace_name (e, ref)); + + s_->new_edge<Names> (scope (), node, uq_name); + + Element& prot (resolve<Element> (ns_name, uq_name, *s_, *cache_)); + s_->new_edge<BelongsToNamespace> (node, prot.namespace_ ()); + + // Copy substitution group information if any. + // + if (prot.context ().count ("substitution-ns-name")) + { + node.context ().set ( + "substitution-ns-name", + prot.context ().get<String> ("substitution-ns-name")); + + node.context ().set ( + "substitution-uq-name", + prot.context ().get<String> ("substitution-uq-name")); + } + + // Transfer default and fixed values if the ref declaration hasn't + // defined its own. + // + if (!node.default_p ()) + { + if (prot.fixed_p ()) + node.fixed (prot.value ()); + else if (prot.default_p ()) + node.default_ (prot.value ()); + + if (node.default_p ()) + { + node.context ().set ( + "dom-node", + prot.context ().get<Xerces::DOMElement*> ("dom-node")); + default_values_.push_back (&node); + } + } + + // Transfer annotation if the ref declaration hasn't defined its own. + // + if (!node.annotated_p () && prot.annotated_p ()) + s_->new_edge<Annotates> (prot.annotation (), node); + + // Set type information. + // + if (prot.typed_p ()) + { + s_->new_edge<Belongs> (node, prot.type ()); + } + else if (prot.context ().count ("type-ns-name")) + { + String ns_name (prot.context ().get<String> ("type-ns-name")); + String uq_name (prot.context ().get<String> ("type-uq-name")); + + node.context ().set ("type-ns-name", ns_name); + node.context ().set ("type-uq-name", uq_name); + node.context ().set ("edge-type-id", TypeId (typeid (Belongs))); + + if (trace_) + wcout << "element '" << ref << "' is not typed" << endl + << "deferring resolution until later" << endl; + } + else + { + // This could be a recursive reference to an element who's + // (anonymous) type is being defined. We are going to let + // resolver sort out this case. + // + node.context ().set ("instance-ns-name", ns_name); + node.context ().set ("instance-uq-name", uq_name); + + if (trace_) + wcout << "looks like a recursive reference to an element '" + << ns_name << "#" << uq_name << "' which is being " + << "defined" << endl + << "deferring resolution until later" << endl; + } + } + catch (NotNamespace const& ex) + { + if (valid_) + { + wcerr << file () << ":" << e.line () << ":" << e.column () << ": " + << "ice: unable to resolve namespace '" << ex.ns () << "'" + << endl; + + abort (); + } + } + catch (NotName const& ex) + { + node.context ().set ("instance-ns-name", ex.ns ()); + node.context ().set ("instance-uq-name", ex.name ()); + + if (trace_) + wcout << "unable to resolve name '" << ex.name () + << "' inside namespace '" << ex.ns () << "'" << endl + << "deferring resolution until later" << endl; + } + catch (XML::NoMapping const& ex) + { + wcerr << file () << ":" << e.line () << ":" << e.column () << ": " + << "error: unable to resolve namespace prefix '" + << ex.prefix () << "' in '" << ref << "'" << endl; + + valid_ = false; + } + } + else + { + if (valid_) + { + wcerr << file () << ":" << e.line () << ":" << e.column () << ": " + << "error: 'name' or 'ref' attribute is missing in element " + << "declaration" << endl; + } + } + } + + SemanticGraph::Annotation* Parser::Impl:: + annotation (Boolean process) + { + Annotation* r (0); + + if (more ()) + { + XML::Element e (next ()); + + if (e.name () == L"annotation") + { + if (process) + { + push (e); + + while (more ()) + { + XML::Element doc (next ()); + + if (doc.name () == L"documentation") + { + using Xerces::DOMNode; + using Xerces::DOMText; + using Xerces::DOMElement; + + // Use first non-structured (text only) documentation element. + // + String text; + Boolean struc (false); + DOMElement* de (doc.dom_element()); + + for (DOMNode* n (de->getFirstChild ()); + n != 0 && !struc; + n = n->getNextSibling ()) + { + switch (n->getNodeType ()) + { + case DOMNode::TEXT_NODE: + case DOMNode::CDATA_SECTION_NODE: + { + DOMText* t (static_cast<DOMText*> (n)); + text += XML::transcode (t->getData ()); + break; + } + case DOMNode::ELEMENT_NODE: + { + struc = true; + break; + } + default: + break; // ignore + } + } + + if (struc) + continue; + + r = &s_->new_node<Annotation> ( + file (), e.line (), e.column (), text); + break; + } + } + + pop (); + } + } + else + prev (); + } + + return r; + } + + + Void Parser::Impl:: + attribute (XML::Element const& a, Boolean global) + { + Boolean optional (true); + + String use (a["use"]); + + if (use == L"prohibited") + return; + else if (use == L"required") + optional = false; + + Boolean qualified (global ? true : qualify_attribute_); + + if (String form = a["form"]) + qualified = form == L"qualified"; + + if (String name = a["name"]) + { + if (trace_) + wcout << "attribute '" << name << "'" << endl; + + Attribute& node ( + s_->new_node<Attribute> ( + file (), a.line (), a.column (), optional, global, qualified)); + + s_->new_edge<Names> (scope (), node, name); + + if (qualified) + s_->new_edge<BelongsToNamespace> (node, cur_ns ()); + + + // Default and fixed values are mutually exclusive. + // + if (a.attribute_p ("fixed")) + node.fixed (a.attribute ("fixed")); + else if (a.attribute_p ("default")) + node.default_ (a.attribute ("default")); + + if (node.default_p ()) + { + node.context ().set ("dom-node", a.dom_element ()); + default_values_.push_back (&node); + } + + if (String type = a["type"]) + { + if (trace_) + wcout << "attribute type: '" << fq_name (a, type) << "'" << endl; + + set_type<Belongs> (type, a, node); + + // Parse annotation. + // + push (a); + + if (Annotation* ann = annotation (true)) + s_->new_edge<Annotates> (*ann, node); + + pop (); + } + else + { + // Looks like an anonymous type. + // + push (a); + + if (Annotation* ann = annotation (true)) + s_->new_edge<Annotates> (*ann, node); + + if (more ()) + { + XML::Element e (next ()); + + String name (e.name ()); + + if (trace_) + wcout << name << endl; + + Type* t (0); + + if (name == L"simpleType") t = simple_type (e); else + { + wcerr << file () << ":" << a.line () << ":" << a.column () << ": " + << "error: expected 'simpleType' instead of '" << e.name () + << "'" << endl; + + valid_ = false; + } + + if (t) + s_->new_edge<Belongs> (node, *t); + } + else + { + if (!is_disabled ("F002")) + { + wcerr << file () << ":" << a.line () << ":" << a.column () << ": " + << "warning F002: attribute '" << name << "' is implicitly " + << "of anySimpleType" << endl; + + wcerr << file () << ":" << a.line () << ":" << a.column () << ": " + << "info: did you forget to specify 'type' attribute?" + << endl; + } + + // anySimpleType + // + String prefix (ns_prefix (a, xsd)); + type = prefix + (prefix.empty () ? L"" : L":") + L"anySimpleType"; + + set_type<Belongs> (type, a, node); + } + + pop (); + } + } + else if (String ref = a["ref"]) + { + Attribute& node ( + s_->new_node<Attribute> ( + file (), a.line (), a.column (), optional, true, true)); + + + // Default and fixed values are mutually exclusive. + // + if (a.attribute_p ("fixed")) + node.fixed (a.attribute ("fixed")); + else if (a.attribute_p ("default")) + node.default_ (a.attribute ("default")); + + if (node.default_p ()) + { + node.context ().set ("dom-node", a.dom_element ()); + default_values_.push_back (&node); + } + + // Parse annotation. + // + push (a); + + if (Annotation* ann = annotation (true)) + s_->new_edge<Annotates> (*ann, node); + + pop (); + + try + { + String uq_name (unqualified_name (ref)); + String ns_name (namespace_name (a, ref)); + + s_->new_edge<Names> (scope (), node, uq_name); + + Attribute& prot (resolve<Attribute> (ns_name, uq_name, *s_, *cache_)); + s_->new_edge<BelongsToNamespace> (node, prot.namespace_ ()); + + // Transfer default and fixed values if the ref declaration hasn't + // defined its own. + // + if (!node.default_p ()) + { + // Default value applies only if this attribute is optional. + // + if (prot.fixed_p ()) + node.fixed (prot.value ()); + else if (optional && prot.default_p ()) + node.default_ (prot.value ()); + + if (node.default_p ()) + { + node.context ().set ( + "dom-node", + prot.context ().get<Xerces::DOMElement*> ("dom-node")); + default_values_.push_back (&node); + } + } + + // Transfer annotation if the ref declaration hasn't defined its own. + // + if (!node.annotated_p () && prot.annotated_p ()) + s_->new_edge<Annotates> (prot.annotation (), node); + + // Set type. + // + if (prot.typed_p ()) + { + s_->new_edge<Belongs> (node, prot.type ()); + } + else if (prot.context ().count ("type-ns-name")) + { + String ns_name (prot.context ().get<String> ("type-ns-name")); + String uq_name (prot.context ().get<String> ("type-uq-name")); + + node.context ().set ("type-ns-name", ns_name); + node.context ().set ("type-uq-name", uq_name); + node.context ().set ("edge-type-id", TypeId (typeid (Belongs))); + + if (trace_) + wcout << "attribute '" << ref << "' is not typed" << endl + << "deferring resolution until later" << endl; + } + else + { + // This could be a recursive reference to an attribute who's + // (anonymous) type is being defined. We are going to let + // resolver sort out this case. + // + node.context ().set ("instance-ns-name", ns_name); + node.context ().set ("instance-uq-name", uq_name); + + if (trace_) + wcout << "looks like a recursive reference to an attribute '" + << ns_name << "#" << uq_name << "' which is being " + << "defined" << endl + << "deferring resolution until later" << endl; + } + } + catch (NotNamespace const& ex) + { + if (valid_) + { + wcerr << file () << ":" << a.line () << ":" << a.column () << ": " + << "ice: unable to resolve namespace '" << ex.ns () << "'" + << endl; + abort (); + } + } + catch (NotName const& ex) + { + node.context ().set ("instance-ns-name", ex.ns ()); + node.context ().set ("instance-uq-name", ex.name ()); + + if (trace_) + wcout << "unable to resolve name '" << ex.name () + << "' inside namespace '" << ex.ns () << "'" << endl + << "deferring resolution until later" << endl; + } + catch (XML::NoMapping const& ex) + { + wcerr << file () << ":" << a.line () << ":" << a.column () << ": " + << "error: unable to resolve namespace prefix '" + << ex.prefix () << "' in '" << ref << "'" << endl; + + valid_ = false; + } + } + else + { + if (valid_) + { + wcerr << file () << ":" << a.line () << ":" << a.column () << ": " + << "error: 'name' or 'ref' attribute is missing in attribute " + << "declaration" << endl; + } + } + } + + Void Parser::Impl:: + attribute_group (XML::Element const& g) + { + if (String name = g["name"]) + { + // Global definition. + // + if (trace_) + wcout << "attributeGroup '" << name << "'" << endl; + + AttributeGroup& group ( + s_->new_node<AttributeGroup> (file (), g.line (), g.column ())); + s_->new_edge<Names> (scope (), group, name); + + push_scope (group); + push (g); + + annotation (false); + + while (more ()) + { + XML::Element e (next ()); + String name (e.name ()); + + if (trace_) + wcout << name << endl; + + if (name == L"attribute") attribute (e, false); else + if (name == L"anyAttribute") any_attribute (e); else + if (name == L"attributeGroup") attribute_group (e); else + { + wcerr << file () << ":" << e.line () << ":" << e.column () << ": " + << "error: expected 'attribute', 'anyAttribute', or " + << "'attributeGroup' instead of '" << name << "'" << endl; + + valid_ = false; + } + } + + pop (); + pop_scope (); + } + else if (String ref = g["ref"]) + { + if (trace_) + wcout << "attribute-group-ref " << ref << endl; + + try + { + String uq_name (unqualified_name (ref)); + String ns_name (namespace_name (g, ref)); + + // In order to avoid code duplication we are going to let the + // resolver handle this case. + // + if (trace_) + wcout << "deferring resolution of group name '" << uq_name + << "' inside namespace '" << ns_name << "'" + << " until later" << endl; + + Scope& s (scope ()); + AttributeGroupRef ref (uq_name, ns_name, s); + + if (!s.context ().count ("attribute-group-refs")) + s.context ().set ("attribute-group-refs", AttributeGroupRefs ()); + + s.context ().get<AttributeGroupRefs> ( + "attribute-group-refs").push_back (ref); + } + catch (NotNamespace const& ex) + { + if (valid_) + { + wcerr << file () << ":" << g.line () << ":" << g.column () << ": " + << "ice: unable to resolve namespace '" << ex.ns () << "'" + << endl; + abort (); + } + } + catch (XML::NoMapping const& ex) + { + wcerr << file () << ":" << g.line () << ":" << g.column () << ": " + << "error: unable to resolve namespace prefix '" + << ex.prefix () << "' in '" << ref << "'" << endl; + + valid_ = false; + } + } + else + { + wcerr << file () << ":" << g.line () << ":" << g.column () << ": " + << "error: 'name' or 'ref' attribute is missing in " + << "attributeGroup declaration" << endl; + + valid_ = false; + return; + } + } + + Void Parser::Impl:: + any (XML::Element const& a) + { + if (trace_) + wcout << "any" << endl; + + String namespaces (a["namespace"] ? a["namespace"] : L"##any"); + + Any& any ( + s_->new_node<Any> (file (), a.line (), a.column (), namespaces)); + + s_->new_edge<ContainsParticle> ( + compositor (), any, + parse_min (a["minOccurs"]), parse_max (a["maxOccurs"])); + + // Parse annotation. + // + push (a); + + if (Annotation* ann = annotation (true)) + s_->new_edge<Annotates> (*ann, any); + + pop (); + + // Any has no name so we have to come up with a fake one in order to + // put it into the scope. + // + UnsignedLong count; + FrontendElements::Context& ctx (scope ().context ()); + + if (!ctx.count ("any-name-count")) + { + count = 0; + ctx.set ("any-name-count", count); + } + else + count = ++(ctx.get<UnsignedLong> ("any-name-count")); + + std::basic_ostringstream<WideChar> os; + os << "any #" << count; + + s_->new_edge<Names> (scope (), any, os.str ()); + } + + Void Parser::Impl:: + any_attribute (XML::Element const& a) + { + if (trace_) + wcout << "anyAttribute" << endl; + + String namespaces (a["namespace"] ? a["namespace"] : L"##any"); + + AnyAttribute& any ( + s_->new_node<AnyAttribute> ( + file (), a.line (), a.column (), namespaces)); + + // Parse annotation. + // + push (a); + + if (Annotation* ann = annotation (true)) + s_->new_edge<Annotates> (*ann, any); + + pop (); + + // AnyAttribute has no name so we have to come up with a fake one + // in order to put it into the scope. + // + + UnsignedLong count; + FrontendElements::Context& ctx (scope ().context ()); + + if (!ctx.count ("any-attribute-name-count")) + { + count = 0; + ctx.set ("any-attribute-name-count", count); + } + else + count = ++(ctx.get<UnsignedLong> ("any-attribute-name-count")); + + std::basic_ostringstream<WideChar> os; + os << "any-attribute #" << count; + + s_->new_edge<Names> (scope (), any, os.str ()); + } + + // Some specializations to get edge orientations right. + // + + template <typename Edge, typename Node> + struct Orientation + { + static Edge& + set_edge (Schema& s, Node& node, Type& type) + { + // By default it is node->edge + // + return s.template new_edge<Edge> (node, type); + } + }; + + template <typename Node> + struct Orientation<Arguments, Node> + { + static Arguments& + set_edge (Schema& s, Node& node, Type& type) + { + // For Arguments it is type->node. + // + return s.template new_edge<Arguments> (type, node); + } + }; + + template <typename Edge, typename Node> + Edge* Parser::Impl:: + set_type (String const& type, XML::Element const& e, Node& node) + { + Edge* r (0); + + try + { + String uq_name (unqualified_name (type)); + String ns_name (namespace_name (e, type)); + + Type& t (resolve<Type> (ns_name, uq_name, *s_, *cache_)); + + // See if it is an IDREF specialization. + // + if (ns_name == xsd && (uq_name == L"IDREF" || uq_name == L"IDREFS")) + { + // See if we've got 'xse:refType' attribute. + // + if (String ref_type = e.attribute (xse, "refType")) + { + if (trace_) + wcout << "found refType attribute '" << ref_type << "'" << endl; + + //@@ It is a bit wasteful to create a new spcialization for + // each refType. Instead we could lookup the target type + // and then navigate through Arguments edges to see if this + // type already arguments specialization that we are intersted + // in. But for now I will simplify the logic by creating a new + // specialization every time. + // + + Specialization* spec (0); + + if (uq_name == L"IDREF") + spec = &s_->new_node<Fundamental::IdRef> ( + file (), e.line (), e.column ()); + else + spec = &s_->new_node<Fundamental::IdRefs> ( + file (), e.line (), e.column ()); + + r = &Orientation<Edge, Node>::set_edge (*s_, node, *spec); + + set_type<Arguments> (ref_type, e, *spec); + } + else + r = &Orientation<Edge, Node>::set_edge (*s_, node, t); + } + else + r = &Orientation<Edge, Node>::set_edge (*s_, node, t); + } + catch (NotNamespace const& ex) + { + wcerr << file () << ":" << e.line () << ":" << e.column () << ": " + << "error: unable to resolve namespace '" << ex.ns () << "'" + << endl; + + valid_ = false; + + } + catch (NotName const& ex) + { + node.context ().set ("type-ns-name", ex.ns ()); + node.context ().set ("type-uq-name", ex.name ()); + node.context ().set ("edge-type-id", TypeId (typeid (Edge))); + + if (trace_) + wcout << "unable to resolve name '" << ex.name () + << "' inside namespace '" << ex.ns () << "'" << endl + << "deferring resolution until later" << endl; + } + catch (XML::NoMapping const& ex) + { + wcerr << file () << ":" << e.line () << ":" << e.column () << ": " + << "error: unable to resolve namespace prefix " + << "'" << ex.prefix () << "' in '" << type << "'" << endl; + + valid_ = false; + } + + return r; + } + + // Xerces has a provision to associate a public id with input streams + // that can later be used in diagnostics. Unfortunately, it doesn't + // work. So we will have to keep our own track. + // + struct Context: public NonCopyable + { + // File map for diagnostic. + // + Path const& + file (Path const& abs) const + { + FileMap::ConstIterator i (file_map_.find (abs)); + + if (i != file_map_.end ()) + { + return i->second; + } + else + { + return abs; + } + } + + Void + map_file (Path const& abs, Path const& rel) + { + file_map_[abs] = rel; + } + + private: + typedef Cult::Containers::Map<Path, Path, FilePathComparator> FileMap; + FileMap file_map_; + }; + + // + // + class ErrorHandler : public Xerces::DOMErrorHandler + { + public: + ErrorHandler (Boolean& valid, XSDFrontend::Context const& ctx) + : valid_ (valid), + ctx_ (ctx) + { + } + + virtual Boolean + handleError (Xerces::DOMError const& e) + { + // Xerces likes to say "Fatal error encountered during schema scan". + // We don't need this junk. + // + if (!valid_ + && e.getLocation ()->getLineNumber () == 0 + && e.getLocation ()->getColumnNumber () == 0) + return true; + + +#if !defined(BOOST_FILESYSTEM_VERSION) || BOOST_FILESYSTEM_VERSION == 2 + XSDFrontend::SemanticGraph::Path abs_path ( + XML::transcode_to_narrow (e.getLocation ()->getURI ()), + boost::filesystem::native); +#else + XSDFrontend::SemanticGraph::Path abs_path ( + XML::transcode_to_narrow (e.getLocation ()->getURI ()).c_str()); +#endif + + XSDFrontend::SemanticGraph::Path rel_path (ctx_.file (abs_path)); + + wcerr << rel_path << ':' + << e.getLocation ()->getLineNumber () << ':' + << e.getLocation ()->getColumnNumber () << ": "; + + switch (e.getSeverity ()) + { + case Xerces::DOMError::DOM_SEVERITY_WARNING: + { + wcerr << "warning: "; + break; + } + default: + { + wcerr << "error: "; + valid_ = false; + break; + } + } + + wcerr << e.getMessage () << endl; + + return true; + } + + private: + Boolean& valid_; + XSDFrontend::Context const& ctx_; + }; + + + // Failed to open resource. + // + struct Open {}; + + class InputSource: public Xerces::InputSource + { + public: + InputSource ( + Path const& abs, + Path const& rel, + Path const& base, + XSDFrontend::Context const& ctx, + Xerces::MemoryManager* mm = Xerces::XMLPlatformUtils::fgMemoryManager) + : Xerces::InputSource (mm), + abs_ (abs), + rel_ (rel), + base_ (base), + ctx_ (ctx) + { +#if !defined(BOOST_FILESYSTEM_VERSION) || BOOST_FILESYSTEM_VERSION == 2 + setSystemId (XML::XMLChString ( + String (abs_.native_file_string ())).c_str ()); +#else + setSystemId (XML::XMLChString (String (abs_.string ())).c_str ()); +#endif + } + + virtual Xerces::BinInputStream* + makeStream () const + { + using namespace Xerces; + + BinFileInputStream* is ( + new (getMemoryManager ()) + BinFileInputStream (getSystemId (), getMemoryManager ())); + + if (!is->getIsOpen ()) + { + delete is; + + wcerr << ctx_.file (base_) << ": error: " + << "'" << rel_ << "': unable to open in read mode" + << endl; + + throw Open (); + } + + return is; + } + + private: + Path abs_; + Path rel_; + Path base_; + XSDFrontend::Context const& ctx_; + }; + + + class EntityResolver: public Xerces::XMemory, +#if _XERCES_VERSION >= 30000 + public Xerces::DOMLSResourceResolver +#else + public Xerces::DOMEntityResolver +#endif + { + public: + EntityResolver (XSDFrontend::Context& ctx, LocationTranslator* t) + : ctx_ (ctx), loc_translator_ (t) + { + } + +#if _XERCES_VERSION >= 30000 + virtual Xerces::DOMLSInput* + resolveResource(XMLCh const* const, + XMLCh const* const, + XMLCh const* const /*pub_id*/, + XMLCh const* const prv_id, + XMLCh const* const base_uri) +#else + virtual Xerces::DOMInputSource* + resolveEntity (XMLCh const* const /*pub_id*/, + XMLCh const* const prv_id, + XMLCh const* const base_uri) +#endif + { + /* + XMLCh empty[1]; + empty[0] = 0; + + wcerr << "resolve entity:" << endl + << " pub_id " << (pub_id ? pub_id : empty) << endl + << " prv_id " << (prv_id ? prv_id : empty) << endl + << " uri " << (base_uri ? base_uri : empty) << endl; + */ + + // base_uri should be a valid path by now. + // +#if !defined(BOOST_FILESYSTEM_VERSION) || BOOST_FILESYSTEM_VERSION == 2 + Path base (XML::transcode_to_narrow (base_uri), + boost::filesystem::native); +#else + Path base (XML::transcode_to_narrow (base_uri).c_str()); +#endif + + if (prv_id == 0) + { + //@@ How can I get the line/column numbers for this? + // + wcerr << ctx_.file (base) << ": error: " + << "unable to guess which schema to open" + << endl; + + wcerr << ctx_.file (base) << ": info: " + << "did you forget to specify schemaLocation for import/include?" + << endl; + + throw Open (); + } + + NarrowString path_str (XML::transcode_to_narrow (prv_id)); + + if (loc_translator_) + path_str = loc_translator_->translate (path_str); + + try + { + Path path; + +#if !defined(BOOST_FILESYSTEM_VERSION) || BOOST_FILESYSTEM_VERSION == 2 + try + { + path = Path (path_str); + } + catch (InvalidPath const&) + { + // Retry as a native path. + // + path = Path (path_str, boost::filesystem::native); + } +#else + // The new ABI does not have a fallback native representation + path = Path (path_str.c_str()); +#endif + + Path base_dir (base.branch_path ()); + + Path abs_path, rel_path; + + if (path.is_complete ()) + { + abs_path = rel_path = path; + } + else + { + abs_path = base_dir / path; + rel_path = ctx_.file (base).branch_path () / path; + } + + abs_path.normalize (); + + ctx_.map_file (abs_path, rel_path); + + using namespace Xerces; + + InputSource* is ( + new (XMLPlatformUtils::fgMemoryManager) + InputSource (abs_path, rel_path, base, ctx_)); + + // Note that I can't use XMLPlatformUtils::fgMemoryManager here + // since Wrapper4InputSource is-not-an XMemory. + // + return new Wrapper4InputSource (is); + } + catch (InvalidPath const&) + { + wcerr << ctx_.file (base) << ": error: " + << "'" << path_str.c_str () << "' is not a valid filesystem path" + << endl; + throw; + } + + // Will never reach. + // + return 0; + } + + private: + XSDFrontend::Context& ctx_; + LocationTranslator* loc_translator_; + }; + + + XML::AutoPtr<Xerces::DOMDocument> Parser::Impl:: + dom (Path const& tu, Boolean validate) + { + using namespace Xerces; + + try + { + XSDFrontend::Context ctx; + + Path abs_path (system_complete (tu)); + abs_path.normalize (); + ctx.map_file (abs_path, tu); + + InputSource input_source (abs_path, tu, abs_path, ctx); + + // First validate the schema with Xerces. + // + if (validate) + { + // Instantiate the DOM parser. + // + XMLCh const gLS[] = {chLatin_L, chLatin_S, chNull }; + + // Get an implementation of the Load-Store (LS) interface. + // + DOMImplementationLS* impl ( + static_cast<DOMImplementationLS*> ( + DOMImplementationRegistry::getDOMImplementation (gLS))); + + // Create a DOMBuilder. + // +#if _XERCES_VERSION >= 30000 + XML::AutoPtr<DOMLSParser> parser ( + impl->createLSParser (DOMImplementationLS::MODE_SYNCHRONOUS, 0)); + + DOMConfiguration* conf (parser->getDomConfig ()); + + conf->setParameter (XMLUni::fgDOMComments, false); + conf->setParameter (XMLUni::fgDOMDatatypeNormalization, true); + conf->setParameter (XMLUni::fgDOMEntities, false); + conf->setParameter (XMLUni::fgDOMNamespaces, true); + conf->setParameter (XMLUni::fgDOMValidate, true); + conf->setParameter (XMLUni::fgDOMElementContentWhitespace, false); + conf->setParameter (XMLUni::fgXercesSchema, true); + + // Xerces-C++ 3.1.0 is the first version with working multi import + // support. + // +#if _XERCES_VERSION >= 30100 + conf->setParameter (XMLUni::fgXercesHandleMultipleImports, multiple_imports_); +#endif + + conf->setParameter (XMLUni::fgXercesSchemaFullChecking, full_schema_check_); + conf->setParameter (XMLUni::fgXercesValidationErrorAsFatal, true); + + ErrorHandler eh (valid_, ctx); + conf->setParameter (XMLUni::fgDOMErrorHandler, &eh); + + EntityResolver er (ctx, loc_translator_); + conf->setParameter (XMLUni::fgDOMResourceResolver, &er); + + Wrapper4InputSource wrap (&input_source, false); + parser->loadGrammar (&wrap, Grammar::SchemaGrammarType); +#else + XML::AutoPtr<DOMBuilder> parser ( + impl->createDOMBuilder (DOMImplementationLS::MODE_SYNCHRONOUS, 0)); + + parser->setFeature (XMLUni::fgDOMComments, false); + parser->setFeature (XMLUni::fgDOMDatatypeNormalization, true); + parser->setFeature (XMLUni::fgDOMEntities, false); + parser->setFeature (XMLUni::fgDOMNamespaces, true); + parser->setFeature (XMLUni::fgDOMValidation, true); + parser->setFeature (XMLUni::fgDOMWhitespaceInElementContent, false); + parser->setFeature (XMLUni::fgXercesSchema, true); + parser->setFeature (XMLUni::fgXercesSchemaFullChecking, full_schema_check_); + parser->setFeature (XMLUni::fgXercesValidationErrorAsFatal, true); + + ErrorHandler eh (valid_, ctx); + parser->setErrorHandler (&eh); + + EntityResolver er (ctx, loc_translator_); + parser->setEntityResolver (&er); + + Wrapper4InputSource wrap (&input_source, false); + parser->loadGrammar (wrap, Grammar::SchemaGrammarType); +#endif + } + + if (!valid_) + return XML::AutoPtr<DOMDocument> (0); + + // Now do our own parsing. + // + std::auto_ptr<XML::SchemaDOMParser> xsd_parser ( + new (XMLPlatformUtils::fgMemoryManager) XML::SchemaDOMParser ()); + + xsd_parser->parse (input_source); + + XML::AutoPtr<DOMDocument> doc (xsd_parser->adoptDocument()); + + return doc; + } + catch (Xerces::XMLException const& e) + { + wcerr << tu << ": ice: Xerces::XMLException: " << e.getMessage () + << endl; + + abort (); + } + catch (Xerces::DOMException const& e) + { + Size const size = 2047; + XMLCh text[size + 1]; + + wcerr << tu << ": ice: Xerces::DOMException: "; + + if (DOMImplementation::loadDOMExceptionMsg (e.code, text, size)) + wcerr << text << endl; + else + wcerr << "no message available, error code: " << e.code << endl; + + abort (); + } + catch (InvalidPath const&) + { + // Diagnostics has already been issued. + // + valid_ = false; + } + catch (Open const&) + { + // Diagnostics has already been issued. + // + valid_ = false; + } + + return XML::AutoPtr<DOMDocument> (0); + } + + // LocationTranslator + // + LocationTranslator:: + ~LocationTranslator () + { + } + + // Parser + // + Parser:: + ~Parser () + { + } + + Parser:: + Parser (Boolean proper_restriction, + Boolean multiple_imports, + Boolean full_schema_check) + : impl_ (new Impl (proper_restriction, + multiple_imports, + full_schema_check, + 0, + 0)) + { + } + + Parser:: + Parser (Boolean proper_restriction, + Boolean multiple_imports, + Boolean full_schema_check, + LocationTranslator& t, + const WarningSet& d) + : impl_ (new Impl (proper_restriction, + multiple_imports, + full_schema_check, + &t, + &d)) + { + } + + Evptr<SemanticGraph::Schema> Parser:: + parse (SemanticGraph::Path const& path) + { + return impl_->parse (path); + } + + Evptr<SemanticGraph::Schema> Parser:: + parse (SemanticGraph::Paths const& paths) + { + return impl_->parse (paths); + } + + Evptr<SemanticGraph::Schema> Parser:: + xml_schema (SemanticGraph::Path const& path) + { + return impl_->xml_schema (path); + } +} diff --git a/libxsd-frontend/xsd-frontend/parser.hxx b/libxsd-frontend/xsd-frontend/parser.hxx new file mode 100644 index 0000000..ac0ff4d --- /dev/null +++ b/libxsd-frontend/xsd-frontend/parser.hxx @@ -0,0 +1,76 @@ +// file : xsd-frontend/parser.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_FRONTEND_PARSER_HXX +#define XSD_FRONTEND_PARSER_HXX + +#include <cult/types.hxx> +#include <cult/containers/set.hxx> + +#include <xsd-frontend/semantic-graph/schema.hxx> + +namespace XSDFrontend +{ + using namespace Cult::Types; + + struct InvalidSchema {}; + + class LocationTranslator + { + public: + virtual + ~LocationTranslator (); + + virtual NarrowString + translate (NarrowString const& location) = 0; + }; + + // Set of disabled warning IDs. Special ID "all" disables all + // warnings. + // + typedef Cult::Containers::Set<NarrowString> WarningSet; + + class Parser: public NonCopyable + { + public: + ~Parser (); + + Parser (Boolean proper_restriction, + Boolean multiple_imports, + Boolean full_schema_check); + + Parser (Boolean proper_restriction, + Boolean multiple_imports, + Boolean full_schema_check, + LocationTranslator&, + const WarningSet& disabled); + + public: + // Parse a schema file. Throws InvalidSchema in case of a failure. + // + Evptr<SemanticGraph::Schema> + parse (SemanticGraph::Path const&); + + // Parse a number of schema files all into one semantic graph. + // Each schema file is imported from an unnamed root translation + // unit. Throws InvalidSchema in case of a failure. + // + Evptr<SemanticGraph::Schema> + parse (SemanticGraph::Paths const&); + + // Returns a schema graph that corresponds to the XML Schema + // namespace with built-in type definitions. The path is fake + // and is only used as a lable. + // + Evptr<SemanticGraph::Schema> + xml_schema (SemanticGraph::Path const&); + + private: + class Impl; + Evptr<Impl> impl_; + }; +} + +#endif // XSD_FRONTEND_PARSER_HXX diff --git a/libxsd-frontend/xsd-frontend/schema-dom-parser.cxx b/libxsd-frontend/xsd-frontend/schema-dom-parser.cxx new file mode 100644 index 0000000..452980c --- /dev/null +++ b/libxsd-frontend/xsd-frontend/schema-dom-parser.cxx @@ -0,0 +1,196 @@ +// file : xsd-frontend/schema-dom-parser.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <xsd-frontend/schema-dom-parser.hxx> + +#include <xercesc/dom/DOMDocument.hpp> +#include <xercesc/dom/DOMElement.hpp> +#include <xercesc/dom/DOMAttr.hpp> +#include <xercesc/dom/DOMText.hpp> + +#include <xercesc/framework/XMLValidityCodes.hpp> +#include <xercesc/validators/schema/SchemaSymbols.hpp> + +#include <xercesc/util/XMLString.hpp> + +#include <xercesc/internal/XMLScanner.hpp> +#include <xercesc/internal/ElemStack.hpp> + +namespace XSDFrontend +{ + namespace XML + { + using namespace Xerces; + + const XMLCh line_key[2] = {chLatin_l, chNull}; + const XMLCh column_key[2] = {chLatin_c, chNull}; + + SchemaDOMParser:: + SchemaDOMParser (MemoryManager* mgr) + : XercesDOMParser(0, mgr, 0), + depth_ (-1), + ann_depth_ (-1), + inner_ann_depth_ (-1) + { + error_reporter_.setErrorReporter (this); + setValidationScheme (XercesDOMParser::Val_Never); + setDoNamespaces (true); + } + + void SchemaDOMParser:: + startElement (const XMLElementDecl& decl, + const unsigned int url_id, + const XMLCh* const prefix, + const RefVectorOf<XMLAttr>& attributes, +#if _XERCES_VERSION >= 30000 + const XMLSize_t attr_count, +#else + const unsigned int attr_count, +#endif + const bool empty, + const bool root) + { + depth_++; + + if (ann_depth_ == -1) + { + if (XMLString::equals(decl.getBaseName(), + SchemaSymbols::fgELT_ANNOTATION) && + XMLString::equals(getURIText(url_id), + SchemaSymbols::fgURI_SCHEMAFORSCHEMA)) + { + ann_depth_ = depth_; + } + } + else if (depth_ == ann_depth_ + 1) + { + inner_ann_depth_ = depth_; + } + + XercesDOMParser::startElement ( + decl, url_id, prefix, attributes, attr_count, false, root); + + // Set the line/column info. + // + ReaderMgr::LastExtEntityInfo info; + ((ReaderMgr*) fScanner->getLocator())->getLastExtEntityInfo(info); + +#if _XERCES_VERSION >= 30000 + unsigned long l (static_cast<unsigned long> (info.lineNumber)); + unsigned long c (static_cast<unsigned long> (info.colNumber)); +#else + unsigned long l (info.lineNumber == -1 + ? 0UL + : static_cast<unsigned long> (info.lineNumber)); + + unsigned long c (info.colNumber == -1 + ? 0UL + : static_cast<unsigned long> (info.colNumber)); +#endif + + fCurrentNode->setUserData (line_key, reinterpret_cast<void*> (l), 0); + fCurrentNode->setUserData (column_key, reinterpret_cast<void*> (c), 0); + + // If an empty element, call the endElement() now. + // + if (empty) + endElement (decl, url_id, root, prefix); + } + + void SchemaDOMParser:: + endElement (const XMLElementDecl& decl, + const unsigned int url_id, + const bool root, + const XMLCh* const prefix) + { + if(ann_depth_ > -1) + { + if (inner_ann_depth_ == depth_) + { + inner_ann_depth_ = -1; + } + else if (ann_depth_ == depth_) + { + ann_depth_ = -1; + } + } + + depth_--; + + XercesDOMParser::endElement (decl, url_id, root, prefix); + } + + void SchemaDOMParser:: + docCharacters (const XMLCh* const s, +#if _XERCES_VERSION >= 30000 + const XMLSize_t length, +#else + const unsigned int length, +#endif + const bool cdata) + { + // Ignore chars outside of content. + // + if (!fWithinElement) + return; + + if (inner_ann_depth_ == -1) + { + if (!((ReaderMgr*) fScanner->getReaderMgr())->getCurrentReader()-> + isAllSpaces(s, length)) + { + ReaderMgr::LastExtEntityInfo lastInfo; + fScanner->getReaderMgr()->getLastExtEntityInfo(lastInfo); + locator_.setValues(lastInfo.systemId, lastInfo.publicId, + lastInfo.lineNumber, lastInfo.colNumber); + error_reporter_.emitError(XMLValid::NonWSContent, + XMLUni::fgValidityDomain, + &locator_); + } + } + else + { + // When it's within either of the 2 annotation sub-elements, + // characters are allowed and we need to store them. + // + XercesDOMParser::docCharacters (s, length, cdata); + } + } + + void SchemaDOMParser:: + docComment (const XMLCh* const) + { + // We don't want any comments. + } + + void SchemaDOMParser:: + startEntityReference (const XMLEntityDecl&) + { + } + + void SchemaDOMParser:: + endEntityReference (const XMLEntityDecl&) + { + } + + void SchemaDOMParser:: + ignorableWhitespace (const XMLCh* const s, +#if _XERCES_VERSION >= 30000 + const XMLSize_t length, +#else + const unsigned int length, +#endif + const bool cdata) + { + // Ignore chars before the root element. + // + if (!fWithinElement || !fIncludeIgnorableWhitespace) + return; + + if (ann_depth_ > -1) + XercesDOMParser::ignorableWhitespace (s, length, cdata); + } + } +} diff --git a/libxsd-frontend/xsd-frontend/schema-dom-parser.hxx b/libxsd-frontend/xsd-frontend/schema-dom-parser.hxx new file mode 100644 index 0000000..7571677 --- /dev/null +++ b/libxsd-frontend/xsd-frontend/schema-dom-parser.hxx @@ -0,0 +1,93 @@ +// file : xsd-frontend/schema-dom-parser.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_FRONTEND_SCHEMA_DOM_PARSER_HXX +#define XSD_FRONTEND_SCHEMA_DOM_PARSER_HXX + +#include <xercesc/parsers/XercesDOMParser.hpp> + +#include <xercesc/dom/DOMElement.hpp> + +#include <xercesc/validators/schema/XSDLocator.hpp> +#include <xercesc/validators/schema/XSDErrorReporter.hpp> + +namespace XSDFrontend +{ + namespace XML + { + namespace Xerces = xercesc; + + extern const XMLCh line_key[2]; + extern const XMLCh column_key[2]; + + class SchemaDOMParser: public Xerces::XercesDOMParser + { + public : + SchemaDOMParser ( + Xerces::MemoryManager* = Xerces::XMLPlatformUtils::fgMemoryManager); + + // Callbacks. + // + virtual void + startElement (const Xerces::XMLElementDecl&, + const unsigned int url_id, + const XMLCh* const prefix, + const Xerces::RefVectorOf<Xerces::XMLAttr>& attributes, +#if _XERCES_VERSION >= 30000 + const XMLSize_t attribute_count, +#else + const unsigned int attribute_count, +#endif + const bool empty, + const bool root); + + virtual void + endElement (const Xerces::XMLElementDecl&, + const unsigned int url_id, + const bool root, + const XMLCh* const prefix); + + virtual void + docCharacters (const XMLCh* const, +#if _XERCES_VERSION >= 30000 + const XMLSize_t length, +#else + const unsigned int length, +#endif + const bool cdata); + + virtual void + docComment (const XMLCh* const); + + virtual void + startEntityReference (const Xerces::XMLEntityDecl&); + + virtual void + endEntityReference (const Xerces::XMLEntityDecl&); + + virtual void + ignorableWhitespace (const XMLCh* const, +#if _XERCES_VERSION >= 30000 + const XMLSize_t length, +#else + const unsigned int length, +#endif + const bool cdata); + private: + SchemaDOMParser (SchemaDOMParser const&); + SchemaDOMParser& + operator=(SchemaDOMParser const&); + + private: + int depth_; + int ann_depth_; + int inner_ann_depth_; + Xerces::XSDLocator locator_; + Xerces::XSDErrorReporter error_reporter_; + }; + } +} + +#endif // XSD_FRONTEND_SCHEMA_DOM_PARSER_HXX diff --git a/libxsd-frontend/xsd-frontend/semantic-graph.hxx b/libxsd-frontend/xsd-frontend/semantic-graph.hxx new file mode 100644 index 0000000..bee17fc --- /dev/null +++ b/libxsd-frontend/xsd-frontend/semantic-graph.hxx @@ -0,0 +1,27 @@ +// file : xsd-frontend/semantic-graph.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_FRONTEND_SEMANTIC_GRAPH_HXX +#define XSD_FRONTEND_SEMANTIC_GRAPH_HXX + +#include <xsd-frontend/semantic-graph/annotation.hxx> +#include <xsd-frontend/semantic-graph/any.hxx> +#include <xsd-frontend/semantic-graph/any-attribute.hxx> +#include <xsd-frontend/semantic-graph/attribute.hxx> +#include <xsd-frontend/semantic-graph/attribute-group.hxx> +#include <xsd-frontend/semantic-graph/complex.hxx> +#include <xsd-frontend/semantic-graph/compositors.hxx> +#include <xsd-frontend/semantic-graph/element.hxx> +#include <xsd-frontend/semantic-graph/element-group.hxx> +#include <xsd-frontend/semantic-graph/elements.hxx> +#include <xsd-frontend/semantic-graph/enumeration.hxx> +#include <xsd-frontend/semantic-graph/fundamental.hxx> +#include <xsd-frontend/semantic-graph/list.hxx> +#include <xsd-frontend/semantic-graph/namespace.hxx> +#include <xsd-frontend/semantic-graph/particle.hxx> +#include <xsd-frontend/semantic-graph/schema.hxx> +#include <xsd-frontend/semantic-graph/union.hxx> + +#endif // XSD_FRONTEND_SEMANTIC_GRAPH_HXX diff --git a/libxsd-frontend/xsd-frontend/semantic-graph/annotation.cxx b/libxsd-frontend/xsd-frontend/semantic-graph/annotation.cxx new file mode 100644 index 0000000..22793f7 --- /dev/null +++ b/libxsd-frontend/xsd-frontend/semantic-graph/annotation.cxx @@ -0,0 +1,50 @@ +// file : xsd-frontend/semantic-graph/annotation.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <xsd-frontend/semantic-graph/annotation.hxx> + +namespace XSDFrontend +{ + namespace SemanticGraph + { + namespace RTTI = Cult::RTTI; + + using RTTI::Access; + using RTTI::TypeInfo; + + + // Annotates + // + namespace + { + struct AnnotatesInit + { + AnnotatesInit () + { + TypeInfo ti (typeid (Annotates)); + ti.add_base (Access::public_, true, typeid (Edge)); + RTTI::insert (ti); + } + + } annotates_init_; + } + + // Annotation + // + namespace + { + struct AnnotationInit + { + AnnotationInit () + { + TypeInfo ti (typeid (Annotation)); + ti.add_base (Access::public_, true, typeid (Node)); + RTTI::insert (ti); + } + + } annotation_init_; + } + } +} diff --git a/libxsd-frontend/xsd-frontend/semantic-graph/annotation.hxx b/libxsd-frontend/xsd-frontend/semantic-graph/annotation.hxx new file mode 100644 index 0000000..661ac72 --- /dev/null +++ b/libxsd-frontend/xsd-frontend/semantic-graph/annotation.hxx @@ -0,0 +1,89 @@ +// file : xsd-frontend/semantic-graph/annotation.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_FRONTEND_SEMANTIC_GRAPH_ANNOTATION_HXX +#define XSD_FRONTEND_SEMANTIC_GRAPH_ANNOTATION_HXX + +#include <xsd-frontend/semantic-graph/elements.hxx> + +namespace XSDFrontend +{ + namespace SemanticGraph + { + // + // + class Annotation; + + class Annotates: public virtual Edge + { + public: + Annotation& + annotation () + { + return *annotation_; + } + + protected: + friend class Bits::Graph<Node, Edge>; + + Annotates () + : annotation_ (0) + { + } + + Void + set_left_node (Annotation& a) + { + annotation_ = &a; + } + + Void + set_right_node (Node&) + { + } + + Void + set_right_node (Edge&) + { + } + + private: + Annotation* annotation_; + }; + + // + // + class Annotation: public virtual Node + { + public: + WideString const& + documentation () const + { + return documentation_; + } + + protected: + friend class Bits::Graph<Node, Edge>; + + Annotation (Path const& file, + UnsignedLong line, + UnsignedLong column, + WideString const& documentation) + : Node (file, line, column), documentation_ (documentation) + { + } + + Void + add_edge_left (Annotates&) + { + } + + private: + WideString documentation_; + }; + } +} + +#endif // XSD_FRONTEND_SEMANTIC_GRAPH_ANNOTATION_HXX diff --git a/libxsd-frontend/xsd-frontend/semantic-graph/any-attribute.cxx b/libxsd-frontend/xsd-frontend/semantic-graph/any-attribute.cxx new file mode 100644 index 0000000..e25e742 --- /dev/null +++ b/libxsd-frontend/xsd-frontend/semantic-graph/any-attribute.cxx @@ -0,0 +1,114 @@ +// file : xsd-frontend/semantic-graph/any-attribute.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <xsd-frontend/semantic-graph/any-attribute.hxx> +#include <xsd-frontend/semantic-graph/compositors.hxx> + +namespace XSDFrontend +{ + namespace SemanticGraph + { + namespace RTTI = Cult::RTTI; + + using RTTI::Access; + using RTTI::TypeInfo; + + namespace + { + struct AnyAttributeInit + { + AnyAttributeInit () + { + TypeInfo ti (typeid (AnyAttribute)); + ti.add_base (Access::public_, true, typeid (Nameable)); + RTTI::insert (ti); + } + + } any_attribute_init_; + } + + AnyAttribute:: + AnyAttribute (Path const& file, + UnsignedLong line, + UnsignedLong column, + WideString const& namespaces) + : Node (file, line, column), + prototype_ (0) + { + // Not sure if the separator is just space or any white-space + // chararcter. + // + + for (Size i (0), j (namespaces.find (L' '));;) + { + if (j != WideString::npos) + { + namespaces_.push_back (WideString (namespaces, i, j - i)); + + i = j + 1; + j = namespaces.find (L' ', i); + } + else + { + // Last element. + // + namespaces_.push_back (WideString (namespaces, i)); + break; + } + } + } + + AnyAttribute:: + AnyAttribute (Path const& file, + UnsignedLong line, + UnsignedLong column, + NamespaceIterator begin, + NamespaceIterator end) + : Node (file, line, column), + prototype_ (0) + { + for (; begin != end; ++begin) + namespaces_.push_back (*begin); + } + + namespace + { + Namespace& + namespace_ (Nameable& n) + { + // The basic idea goes like this: go up Names edges until you + // reach Namespace. There are, however, anonymous types which + // need special handling. In the case of an anonymous type we + // will go up the first Belongs edge (because the first edge + // is where the type was defined. + // + + if (n.named_p ()) + { + Scope& s (n.scope ()); + Namespace* ns (dynamic_cast<Namespace*> (&n)); + + return ns ? *ns : namespace_ (s); + } + else + { + Type& t (dynamic_cast<Type&> (n)); + Belongs& b (*t.classifies_begin ()); + + return namespace_ (b.instance ()); + } + } + } + + Namespace& AnyAttribute:: + definition_namespace () + { + if (prototype_p ()) + return prototype ().definition_namespace (); + + return namespace_ (scope ()); + } + } +} diff --git a/libxsd-frontend/xsd-frontend/semantic-graph/any-attribute.hxx b/libxsd-frontend/xsd-frontend/semantic-graph/any-attribute.hxx new file mode 100644 index 0000000..bc8c512 --- /dev/null +++ b/libxsd-frontend/xsd-frontend/semantic-graph/any-attribute.hxx @@ -0,0 +1,85 @@ +// file : xsd-frontend/semantic-graph/any-attribute.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_FRONTEND_SEMANTIC_GRAPH_ANY_ATTRIBUTE_HXX +#define XSD_FRONTEND_SEMANTIC_GRAPH_ANY_ATTRIBUTE_HXX + +#include <cult/containers/vector.hxx> + +#include <xsd-frontend/semantic-graph/elements.hxx> +#include <xsd-frontend/semantic-graph/namespace.hxx> + +namespace XSDFrontend +{ + namespace SemanticGraph + { + class AnyAttribute: public virtual Nameable + { + typedef + Cult::Containers::Vector<WideString> + Namespaces; + + public: + typedef Namespaces::ConstIterator NamespaceIterator; + + NamespaceIterator + namespace_begin () const + { + return namespaces_.begin (); + } + + NamespaceIterator + namespace_end () const + { + return namespaces_.end (); + } + + public: + Boolean + prototype_p () + { + return prototype_ != 0; + } + + AnyAttribute& + prototype () + { + assert (prototype_ != 0); + return *prototype_; + } + + Void + prototype (AnyAttribute& a) + { + assert (prototype_ == 0); + prototype_ = &a; + } + + public: + Namespace& + definition_namespace (); + + protected: + friend class Bits::Graph<Node, Edge>; + + AnyAttribute (Path const& file, + UnsignedLong line, + UnsignedLong column, + WideString const& namespaces); + + AnyAttribute (Path const& file, + UnsignedLong line, + UnsignedLong column, + NamespaceIterator begin, + NamespaceIterator end); + + private: + AnyAttribute* prototype_; + Namespaces namespaces_; + }; + } +} + +#endif // XSD_FRONTEND_SEMANTIC_GRAPH_ANY_ATTRIBUTE_HXX diff --git a/libxsd-frontend/xsd-frontend/semantic-graph/any.cxx b/libxsd-frontend/xsd-frontend/semantic-graph/any.cxx new file mode 100644 index 0000000..a6c9e72 --- /dev/null +++ b/libxsd-frontend/xsd-frontend/semantic-graph/any.cxx @@ -0,0 +1,125 @@ +// file : xsd-frontend/semantic-graph/any.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <xsd-frontend/semantic-graph/any.hxx> +#include <xsd-frontend/semantic-graph/compositors.hxx> + +namespace XSDFrontend +{ + namespace SemanticGraph + { + namespace RTTI = Cult::RTTI; + + using RTTI::Access; + using RTTI::TypeInfo; + + namespace + { + struct AnyInit + { + AnyInit () + { + TypeInfo ti (typeid (Any)); + ti.add_base (Access::public_, true, typeid (Nameable)); + ti.add_base (Access::public_, true, typeid (Particle)); + RTTI::insert (ti); + } + + } any_init_; + } + + Any:: + Any (Path const& file, + UnsignedLong line, + UnsignedLong column, + WideString const& namespaces) + : Node (file, line, column), + prototype_ (0) + { + // Not sure if the separator is just space or any white-space + // chararcter. + // + + for (Size i (0), j (namespaces.find (L' '));;) + { + if (j != WideString::npos) + { + namespaces_.push_back (WideString (namespaces, i, j - i)); + + i = j + 1; + j = namespaces.find (L' ', i); + } + else + { + // Last element. + // + namespaces_.push_back (WideString (namespaces, i)); + break; + } + } + } + + Any:: + Any (Path const& file, + UnsignedLong line, + UnsignedLong column, + NamespaceIterator begin, + NamespaceIterator end) + : Node (file, line, column), + prototype_ (0) + { + for (; begin != end; ++begin) + namespaces_.push_back (*begin); + } + + namespace + { + Namespace& + namespace_ (Nameable& n) + { + // The basic idea goes like this: go up Names edges until you + // reach Namespace. There are, however, anonymous types which + // need special handling. In the case of an anonymous type we + // will go up the first Belongs edge (because the first edge + // is where the type was defined. + // + + if (n.named_p ()) + { + Scope& s (n.scope ()); + Namespace* ns (dynamic_cast<Namespace*> (&n)); + + return ns ? *ns : namespace_ (s); + } + else + { + Type& t (dynamic_cast<Type&> (n)); + Belongs& b (*t.classifies_begin ()); + + return namespace_ (b.instance ()); + } + } + } + + Namespace& Any:: + definition_namespace () + { + if (prototype_p ()) + return prototype ().definition_namespace (); + + // Get to our scope. + // + Compositor* c (&contained_particle ().compositor ()); + + while(!c->contained_compositor_p ()) + c = &c->contained_particle ().compositor (); + + Scope& scope ( + dynamic_cast<Scope&> (c->contained_compositor ().container ())); + + return namespace_ (scope); + } + } +} diff --git a/libxsd-frontend/xsd-frontend/semantic-graph/any.hxx b/libxsd-frontend/xsd-frontend/semantic-graph/any.hxx new file mode 100644 index 0000000..ded9bd8 --- /dev/null +++ b/libxsd-frontend/xsd-frontend/semantic-graph/any.hxx @@ -0,0 +1,90 @@ +// file : xsd-frontend/semantic-graph/any.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_FRONTEND_SEMANTIC_GRAPH_ANY_HXX +#define XSD_FRONTEND_SEMANTIC_GRAPH_ANY_HXX + +#include <cult/containers/vector.hxx> + +#include <xsd-frontend/semantic-graph/elements.hxx> +#include <xsd-frontend/semantic-graph/particle.hxx> +#include <xsd-frontend/semantic-graph/namespace.hxx> + +namespace XSDFrontend +{ + namespace SemanticGraph + { + class Any: public virtual Nameable, + public virtual Particle + { + typedef + Cult::Containers::Vector<WideString> + Namespaces; + + public: + typedef Namespaces::ConstIterator NamespaceIterator; + + NamespaceIterator + namespace_begin () const + { + return namespaces_.begin (); + } + + NamespaceIterator + namespace_end () const + { + return namespaces_.end (); + } + + public: + Boolean + prototype_p () + { + return prototype_ != 0; + } + + Any& + prototype () + { + assert (prototype_ != 0); + return *prototype_; + } + + Void + prototype (Any& a) + { + assert (prototype_ == 0); + prototype_ = &a; + } + + public: + Namespace& + definition_namespace (); + + protected: + friend class Bits::Graph<Node, Edge>; + + Any (Path const& file, + UnsignedLong line, + UnsignedLong column, + WideString const& namespaces); + + Any (Path const& file, + UnsignedLong line, + UnsignedLong column, + NamespaceIterator begin, + NamespaceIterator end); + + using Nameable::add_edge_right; + using Particle::add_edge_right; + + private: + Any* prototype_; + Namespaces namespaces_; + }; + } +} + +#endif // XSD_FRONTEND_SEMANTIC_GRAPH_ANY_HXX diff --git a/libxsd-frontend/xsd-frontend/semantic-graph/attribute-group.cxx b/libxsd-frontend/xsd-frontend/semantic-graph/attribute-group.cxx new file mode 100644 index 0000000..54bb5df --- /dev/null +++ b/libxsd-frontend/xsd-frontend/semantic-graph/attribute-group.cxx @@ -0,0 +1,39 @@ +// file : xsd-frontend/semantic-graph/attribute-group.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <xsd-frontend/semantic-graph/attribute-group.hxx> + +namespace XSDFrontend +{ + namespace SemanticGraph + { + namespace RTTI = Cult::RTTI; + + using RTTI::Access; + using RTTI::TypeInfo; + + + namespace + { + struct AttributeGroupInit + { + AttributeGroupInit () + { + TypeInfo ti (typeid (AttributeGroup)); + ti.add_base (Access::public_, true, typeid (Scope)); + RTTI::insert (ti); + } + + } attribute_group_init_; + } + + AttributeGroup:: + AttributeGroup (Path const& file, UnsignedLong line, UnsignedLong column) + : Node (file, line, column) + { + } + + } +} diff --git a/libxsd-frontend/xsd-frontend/semantic-graph/attribute-group.hxx b/libxsd-frontend/xsd-frontend/semantic-graph/attribute-group.hxx new file mode 100644 index 0000000..44739f2 --- /dev/null +++ b/libxsd-frontend/xsd-frontend/semantic-graph/attribute-group.hxx @@ -0,0 +1,27 @@ +// file : xsd-frontend/semantic-graph/attribute-group.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_FRONTEND_SEMANTIC_GRAPH_ATTRIBUTE_GROUP_HXX +#define XSD_FRONTEND_SEMANTIC_GRAPH_ATTRIBUTE_GROUP_HXX + +#include <xsd-frontend/semantic-graph/elements.hxx> + +namespace XSDFrontend +{ + namespace SemanticGraph + { + class AttributeGroup: public virtual Scope + { + protected: + friend class Bits::Graph<Node, Edge>; + + AttributeGroup (Path const& file, + UnsignedLong line, + UnsignedLong column); + }; + } +} + +#endif // XSD_FRONTEND_SEMANTIC_GRAPH_ATTRIBUTE_GROUP_HXX diff --git a/libxsd-frontend/xsd-frontend/semantic-graph/attribute.cxx b/libxsd-frontend/xsd-frontend/semantic-graph/attribute.cxx new file mode 100644 index 0000000..2e30d4e --- /dev/null +++ b/libxsd-frontend/xsd-frontend/semantic-graph/attribute.cxx @@ -0,0 +1,44 @@ +// file : xsd-frontend/semantic-graph/attribute.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <xsd-frontend/semantic-graph/attribute.hxx> + +namespace XSDFrontend +{ + namespace SemanticGraph + { + namespace RTTI = Cult::RTTI; + + using RTTI::Access; + using RTTI::TypeInfo; + + namespace + { + struct AttributeInit + { + AttributeInit () + { + TypeInfo ti (typeid (Attribute)); + ti.add_base (Access::public_, true, typeid (Member)); + RTTI::insert (ti); + } + + } attribute_init_; + } + + Attribute:: + Attribute (Path const& file, + UnsignedLong line, + UnsignedLong column, + Boolean optional, + Boolean global, + Boolean qualified) + : Node (file, line, column), + Member (global, qualified), + optional_ (optional) + { + } + } +} diff --git a/libxsd-frontend/xsd-frontend/semantic-graph/attribute.hxx b/libxsd-frontend/xsd-frontend/semantic-graph/attribute.hxx new file mode 100644 index 0000000..f7a516d --- /dev/null +++ b/libxsd-frontend/xsd-frontend/semantic-graph/attribute.hxx @@ -0,0 +1,39 @@ +// file : xsd-frontend/semantic-graph/attribute.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_FRONTEND_SEMANTIC_GRAPH_ATTRIBUTE_HXX +#define XSD_FRONTEND_SEMANTIC_GRAPH_ATTRIBUTE_HXX + +#include <xsd-frontend/semantic-graph/elements.hxx> + +namespace XSDFrontend +{ + namespace SemanticGraph + { + class Attribute: public virtual Member + { + public: + Boolean + optional_p () const + { + return optional_; + } + + protected: + friend class Bits::Graph<Node, Edge>; + + Attribute (Path const& file, + UnsignedLong line, + UnsignedLong column, + Boolean optional, + Boolean global, + Boolean qualified); + private: + Boolean optional_; + }; + } +} + +#endif // XSD_FRONTEND_SEMANTIC_GRAPH_ATTRIBUTE_HXX diff --git a/libxsd-frontend/xsd-frontend/semantic-graph/complex.cxx b/libxsd-frontend/xsd-frontend/semantic-graph/complex.cxx new file mode 100644 index 0000000..0cc265f --- /dev/null +++ b/libxsd-frontend/xsd-frontend/semantic-graph/complex.cxx @@ -0,0 +1,45 @@ +// file : xsd-frontend/semantic-graph/complex.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <xsd-frontend/semantic-graph/complex.hxx> + +namespace XSDFrontend +{ + namespace SemanticGraph + { + namespace RTTI = Cult::RTTI; + + using RTTI::Access; + using RTTI::TypeInfo; + + namespace + { + struct ComplexInit + { + ComplexInit () + { + TypeInfo ti (typeid (Complex)); + ti.add_base (Access::public_, true, typeid (Type)); + ti.add_base (Access::public_, true, typeid (Scope)); + RTTI::insert (ti); + } + + } complex_init_; + } + + Complex:: + Complex () + : mixed_ (false), contains_compositor_ (0) + { + } + + Complex:: + Complex (Path const& file, UnsignedLong line, UnsignedLong column) + : Node (file, line, column), + mixed_ (false), contains_compositor_ (0) + { + } + } +} diff --git a/libxsd-frontend/xsd-frontend/semantic-graph/complex.hxx b/libxsd-frontend/xsd-frontend/semantic-graph/complex.hxx new file mode 100644 index 0000000..40327bc --- /dev/null +++ b/libxsd-frontend/xsd-frontend/semantic-graph/complex.hxx @@ -0,0 +1,78 @@ +// file : xsd-frontend/semantic-graph/complex.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_FRONTEND_SEMANTIC_GRAPH_COMPLEX_HXX +#define XSD_FRONTEND_SEMANTIC_GRAPH_COMPLEX_HXX + +#include <xsd-frontend/semantic-graph/elements.hxx> +#include <xsd-frontend/semantic-graph/compositors.hxx> + +#include <cult/containers/vector.hxx> + +namespace XSDFrontend +{ + namespace SemanticGraph + { + class Complex: public virtual Type, public virtual Scope + { + public: + Boolean + mixed_p () const + { + return mixed_; + } + + public: + Boolean + contains_compositor_p () + { + return contains_compositor_ != 0; + } + + ContainsCompositor& + contains_compositor () + { + assert (contains_compositor_ != 0); + return *contains_compositor_; + } + + public: + Void + mixed_p (Boolean m) + { + mixed_ = m; + } + + protected: + friend class Bits::Graph<Node, Edge>; + + Complex (); // Virtual inheritance (Enumeration). + Complex (Path const& file, UnsignedLong line, UnsignedLong column); + + using Type::add_edge_right; + using Type::add_edge_left; + using Scope::add_edge_left; + + Void + add_edge_left (ContainsCompositor& e) + { + contains_compositor_ = &e; + } + + Void + remove_edge_left (ContainsCompositor& e) + { + assert (contains_compositor_ == &e); + contains_compositor_ = 0; + } + + private: + Boolean mixed_; + ContainsCompositor* contains_compositor_; + }; + } +} + +#endif // XSD_FRONTEND_SEMANTIC_GRAPH_COMPLEX_HXX diff --git a/libxsd-frontend/xsd-frontend/semantic-graph/compositors.cxx b/libxsd-frontend/xsd-frontend/semantic-graph/compositors.cxx new file mode 100644 index 0000000..08953bc --- /dev/null +++ b/libxsd-frontend/xsd-frontend/semantic-graph/compositors.cxx @@ -0,0 +1,124 @@ +// file : xsd-frontend/semantic-graph/compositor.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <xsd-frontend/semantic-graph/compositors.hxx> + +namespace XSDFrontend +{ + namespace SemanticGraph + { + namespace RTTI = Cult::RTTI; + + using RTTI::Access; + using RTTI::TypeInfo; + + + // ContainsCompositor + // + namespace + { + struct ContainsCompositorInit + { + ContainsCompositorInit () + { + TypeInfo ti (typeid (ContainsCompositor)); + ti.add_base (Access::public_, true, typeid (Edge)); + RTTI::insert (ti); + } + + } contains_compositor_init_; + } + + ContainsCompositor:: + ContainsCompositor (UnsignedLong min, UnsignedLong max) + : compositor_ (0), container_ (0), min_ (min), max_ (max) + { + } + + // Compositor + // + namespace + { + struct CompositorInit + { + CompositorInit () + { + TypeInfo ti (typeid (Compositor)); + ti.add_base (Access::public_, true, typeid (Particle)); + RTTI::insert (ti); + } + + } compositor_init_; + } + + + // All + // + namespace + { + struct AllInit + { + AllInit () + { + TypeInfo ti (typeid (All)); + ti.add_base (Access::public_, true, typeid (Compositor)); + RTTI::insert (ti); + } + + } all_init_; + } + + All:: + All (Path const& file, UnsignedLong line, UnsignedLong column) + : Node (file, line, column) + { + } + + + // Choice + // + namespace + { + struct ChoiceInit + { + ChoiceInit () + { + TypeInfo ti (typeid (Choice)); + ti.add_base (Access::public_, true, typeid (Compositor)); + RTTI::insert (ti); + } + + } choice_init_; + } + + Choice:: + Choice (Path const& file, UnsignedLong line, UnsignedLong column) + : Node (file, line, column) + { + } + + // Sequence + // + namespace + { + struct SequenceInit + { + SequenceInit () + { + TypeInfo ti (typeid (Sequence)); + ti.add_base (Access::public_, true, typeid (Compositor)); + RTTI::insert (ti); + } + + } sequence_init_; + } + + Sequence:: + Sequence (Path const& file, UnsignedLong line, UnsignedLong column) + : Node (file, line, column) + { + } + } +} diff --git a/libxsd-frontend/xsd-frontend/semantic-graph/compositors.hxx b/libxsd-frontend/xsd-frontend/semantic-graph/compositors.hxx new file mode 100644 index 0000000..c82d8a4 --- /dev/null +++ b/libxsd-frontend/xsd-frontend/semantic-graph/compositors.hxx @@ -0,0 +1,263 @@ +// file : xsd-frontend/semantic-graph/compositors.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_FRONTEND_SEMANTIC_GRAPH_COMPOSITORS_HXX +#define XSD_FRONTEND_SEMANTIC_GRAPH_COMPOSITORS_HXX + +#include <cult/containers/list.hxx> + +#include <xsd-frontend/semantic-graph/elements.hxx> +#include <xsd-frontend/semantic-graph/particle.hxx> + +namespace XSDFrontend +{ + namespace SemanticGraph + { + // + // + class ContainsCompositor: public virtual Edge + { + public: + Compositor& + compositor () const + { + return *compositor_; + } + + Node& + container () const + { + return *container_; + } + + public: + UnsignedLong + min () const + { + return min_; + } + + UnsignedLong + max () const + { + return max_; + } + + protected: + friend class Bits::Graph<Node, Edge>; + + ContainsCompositor (UnsignedLong min, UnsignedLong max); + + Void + set_left_node (Node& n) + { + container_ = &n; + } + + Void + set_right_node (Compositor& n) + { + compositor_ = &n; + } + + Void + clear_left_node (Node& n) + { + assert (container_ == &n); + container_ = 0; + } + + Void + clear_right_node (Compositor& n) + { + assert (compositor_ == &n); + compositor_ = 0; + } + + private: + Compositor* compositor_; + Node* container_; + UnsignedLong min_, max_; + }; + + + // + // + class Compositor: public virtual Particle + { + typedef + Cult::Containers::List<ContainsParticle*> + ContainsList; + + public: + typedef + Bits::PointerIterator<ContainsList::Iterator> + ContainsIterator; + + typedef + Bits::PointerIterator<ContainsList::ConstIterator> + ContainsConstIterator; + + ContainsIterator + contains_begin () + { + return contains_.begin (); + } + + ContainsIterator + contains_end () + { + return contains_.end (); + } + + ContainsConstIterator + contains_begin () const + { + return contains_.begin (); + } + + ContainsConstIterator + contains_end () const + { + return contains_.end (); + } + + public: + Boolean + contained_compositor_p () + { + return contained_compositor_ != 0; + } + + ContainsCompositor& + contained_compositor () + { + assert (contained_compositor_ != 0); + return *contained_compositor_; + } + + public: + UnsignedLong + min () const + { + if (contained_compositor_ != 0) + return contained_compositor_->min (); + else + return Particle::min (); + } + + UnsignedLong + max () const + { + if (contained_compositor_ != 0) + return contained_compositor_->max (); + else + return Particle::max (); + } + + protected: + friend class Bits::Graph<Node, Edge>; + + Compositor () + : contained_compositor_ (0) + { + } + + Void + add_edge_left (ContainsParticle& e) + { + contains_.push_back (&e); + } + + Void + remove_edge_left (ContainsParticle& e) + { + for (ContainsList::Iterator i (contains_.begin ()); + i != contains_.end (); ++i) + { + if (*i == &e) + { + contains_.erase (i); + break; + } + } + } + + //@@ Ideally should be protected but then NodeArg has no way to + // access it. Maybe when (if) I move NodeArg into Grpah I can + // resolve this. + // + public: + Void + add_edge_left (ContainsParticle& e, ContainsIterator const& after) + { + if (after.base () == contains_.end ()) + contains_.push_front (&e); + else + { + ContainsList::Iterator i (after.base ()); + contains_.insert (++i, &e); + } + } + + protected: + using Node::add_edge_right; + using Particle::add_edge_right; + using Particle::remove_edge_right; + + Void + add_edge_right (ContainsCompositor& e) + { + contained_compositor_ = &e; + } + + Void + remove_edge_right (ContainsCompositor& e) + { + assert (contained_compositor_ == &e); + contained_compositor_ = 0; + } + + private: + ContainsList contains_; + ContainsCompositor* contained_compositor_; + }; + + + // + // + class All: public virtual Compositor + { + protected: + friend class Bits::Graph<Node, Edge>; + + All (Path const& file, UnsignedLong line, UnsignedLong column); + }; + + + // + // + class Choice: public virtual Compositor + { + protected: + friend class Bits::Graph<Node, Edge>; + + Choice (Path const& file, UnsignedLong line, UnsignedLong column); + }; + + + // + // + class Sequence: public virtual Compositor + { + protected: + friend class Bits::Graph<Node, Edge>; + + Sequence (Path const& file, UnsignedLong line, UnsignedLong column); + }; + } +} + +#endif // XSD_FRONTEND_SEMANTIC_GRAPH_COMPOSITORS_HXX diff --git a/libxsd-frontend/xsd-frontend/semantic-graph/element-group.cxx b/libxsd-frontend/xsd-frontend/semantic-graph/element-group.cxx new file mode 100644 index 0000000..0e71aa6 --- /dev/null +++ b/libxsd-frontend/xsd-frontend/semantic-graph/element-group.cxx @@ -0,0 +1,38 @@ +// file : xsd-frontend/semantic-graph/element-group.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <xsd-frontend/semantic-graph/element-group.hxx> + +namespace XSDFrontend +{ + namespace SemanticGraph + { + namespace RTTI = Cult::RTTI; + + using RTTI::Access; + using RTTI::TypeInfo; + + + namespace + { + struct ElementGroupInit + { + ElementGroupInit () + { + TypeInfo ti (typeid (ElementGroup)); + ti.add_base (Access::public_, true, typeid (Scope)); + RTTI::insert (ti); + } + + } element_group_init_; + } + + ElementGroup:: + ElementGroup (Path const& file, UnsignedLong line, UnsignedLong column) + : Node (file, line, column), contains_compositor_ (0) + { + } + } +} diff --git a/libxsd-frontend/xsd-frontend/semantic-graph/element-group.hxx b/libxsd-frontend/xsd-frontend/semantic-graph/element-group.hxx new file mode 100644 index 0000000..23514b5 --- /dev/null +++ b/libxsd-frontend/xsd-frontend/semantic-graph/element-group.hxx @@ -0,0 +1,45 @@ +// file : xsd-frontend/semantic-graph/element-group.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_FRONTEND_SEMANTIC_GRAPH_ELEMENT_GROUP_HXX +#define XSD_FRONTEND_SEMANTIC_GRAPH_ELEMENT_GROUP_HXX + +#include <xsd-frontend/semantic-graph/elements.hxx> +#include <xsd-frontend/semantic-graph/compositors.hxx> + +namespace XSDFrontend +{ + namespace SemanticGraph + { + class ElementGroup: public virtual Scope + { + public: + ContainsCompositor& + contains_compositor () + { + assert (contains_compositor_ != 0); + return *contains_compositor_; + } + + protected: + friend class Bits::Graph<Node, Edge>; + + ElementGroup (Path const& file, UnsignedLong line, UnsignedLong column); + + using Scope::add_edge_left; + + Void + add_edge_left (ContainsCompositor& e) + { + contains_compositor_ = &e; + } + + private: + ContainsCompositor* contains_compositor_; + }; + } +} + +#endif // XSD_FRONTEND_SEMANTIC_GRAPH_ELEMENT_GROUP_HXX diff --git a/libxsd-frontend/xsd-frontend/semantic-graph/element.cxx b/libxsd-frontend/xsd-frontend/semantic-graph/element.cxx new file mode 100644 index 0000000..1d8cda5 --- /dev/null +++ b/libxsd-frontend/xsd-frontend/semantic-graph/element.cxx @@ -0,0 +1,63 @@ +// file : xsd-frontend/semantic-graph/element.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <xsd-frontend/semantic-graph/element.hxx> + +namespace XSDFrontend +{ + namespace SemanticGraph + { + namespace RTTI = Cult::RTTI; + + using RTTI::Access; + using RTTI::TypeInfo; + + + // Substitutes + // + namespace + { + struct SubstitutesInit + { + SubstitutesInit () + { + TypeInfo ti (typeid (Substitutes)); + ti.add_base (Access::public_, true, typeid (Edge)); + RTTI::insert (ti); + } + + } substitutes_init_; + } + + // Element + // + namespace + { + struct ElementInit + { + ElementInit () + { + TypeInfo ti (typeid (Element)); + ti.add_base (Access::public_, true, typeid (Member)); + ti.add_base (Access::public_, true, typeid (Particle)); + RTTI::insert (ti); + } + + } element_init_; + } + + Element:: + Element (Path const& file, + UnsignedLong line, + UnsignedLong column, + Boolean global, + Boolean qualified) + : Node (file, line, column), + Member (global, qualified), + substitutes_ (0) + { + } + } +} diff --git a/libxsd-frontend/xsd-frontend/semantic-graph/element.hxx b/libxsd-frontend/xsd-frontend/semantic-graph/element.hxx new file mode 100644 index 0000000..e7046e4 --- /dev/null +++ b/libxsd-frontend/xsd-frontend/semantic-graph/element.hxx @@ -0,0 +1,105 @@ +// file : xsd-frontend/semantic-graph/element.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_FRONTEND_SEMANTIC_GRAPH_ELEMENT_HXX +#define XSD_FRONTEND_SEMANTIC_GRAPH_ELEMENT_HXX + +#include <xsd-frontend/semantic-graph/elements.hxx> +#include <xsd-frontend/semantic-graph/particle.hxx> + +namespace XSDFrontend +{ + namespace SemanticGraph + { + class Element; + + class Substitutes: public virtual Edge + { + public: + Element& + substitution () const + { + return *substitution_; + } + + Element& + root () const + { + return *root_; + } + + protected: + friend class Bits::Graph<Node, Edge>; + + Substitutes () + { + } + + Void + set_left_node (Element& n) + { + substitution_ = &n; + } + + Void + set_right_node (Element& n) + { + root_ = &n; + } + + private: + Element* root_; + Element* substitution_; + }; + + + class Element: public virtual Member, + public virtual Particle + { + public: + Boolean + substitutes_p () const + { + return substitutes_ != 0; + } + + Substitutes& + substitutes () const + { + assert (substitutes_ != 0); + return *substitutes_; + } + + protected: + friend class Bits::Graph<Node, Edge>; + + Element (Path const& file, + UnsignedLong line, + UnsignedLong column, + Boolean global, + Boolean qualified); + + Void + add_edge_left (Substitutes& e) + { + substitutes_ = &e; + } + + Void + add_edge_right (Substitutes&) + { + } + + using Member::add_edge_left; + using Member::add_edge_right; + using Particle::add_edge_right; + + private: + Substitutes* substitutes_; + }; + } +} + +#endif // XSD_FRONTEND_SEMANTIC_GRAPH_ELEMENT_HXX diff --git a/libxsd-frontend/xsd-frontend/semantic-graph/elements.cxx b/libxsd-frontend/xsd-frontend/semantic-graph/elements.cxx new file mode 100644 index 0000000..6a2addf --- /dev/null +++ b/libxsd-frontend/xsd-frontend/semantic-graph/elements.cxx @@ -0,0 +1,350 @@ +// file : xsd-frontend/semantic-graph/elements.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <algorithm> + +#include <xsd-frontend/semantic-graph/elements.hxx> +#include <xsd-frontend/semantic-graph/annotation.hxx> + +using namespace std; + +namespace XSDFrontend +{ + namespace SemanticGraph + { + // Node + // + Annotation& Node:: + annotation () + { + return annotates_->annotation (); + } + + // Type + // + Void Type:: + remove_edge_left (Arguments& a) + { + ArgumentsSet::Iterator i (arguments_.find (&a)); + assert (i != arguments_.end ()); + arguments_.erase (i); + } + + // Specialization + // + Void Specialization:: + remove_edge_right (Arguments& a) + { + // The number of entries should be small so linear search will do. + // + Argumented::Iterator i ( + std::find (argumented_.begin (), argumented_.end (), &a)); + + assert (i != argumented_.end ()); + argumented_.erase (i); + } + + namespace RTTI = Cult::RTTI; + + using RTTI::Access; + using RTTI::TypeInfo; + + namespace + { + // Edge + // + struct EdgeInit + { + EdgeInit () + { + TypeInfo ti (typeid (Edge)); + RTTI::insert (ti); + } + + } edge_init_; + + + // Node + // + struct NodeInit + { + NodeInit () + { + TypeInfo ti (typeid (Node)); + RTTI::insert (ti); + } + + } node_init_; + + + // Names + // + struct NamesInit + { + NamesInit () + { + TypeInfo ti (typeid (Names)); + ti.add_base (Access::public_, true, typeid (Edge)); + RTTI::insert (ti); + } + + } names_init_; + + + // Nameable + // + struct NameableInit + { + NameableInit () + { + TypeInfo ti (typeid (Nameable)); + ti.add_base (Access::public_, true, typeid (Node)); + RTTI::insert (ti); + } + + } nameable_init_; + + + // Scope + // + struct ScopeInit + { + ScopeInit () + { + TypeInfo ti (typeid (Scope)); + ti.add_base (Access::public_, true, typeid (Nameable)); + RTTI::insert (ti); + } + + } scope_init_; + + + // Type + // + struct TypeInit + { + TypeInit () + { + TypeInfo ti (typeid (Type)); + ti.add_base (Access::public_, true, typeid (Nameable)); + RTTI::insert (ti); + } + + } type_init_; + + + // Instance + // + struct InstanceInit + { + InstanceInit () + { + TypeInfo ti (typeid (Instance)); + ti.add_base (Access::public_, true, typeid (Nameable)); + RTTI::insert (ti); + } + + } instance_init_; + + + // Belongs + // + struct BelongsInit + { + BelongsInit () + { + TypeInfo ti (typeid (Belongs)); + ti.add_base (Access::public_, true, typeid (Edge)); + RTTI::insert (ti); + } + + } belongs_init_; + + + + // Inherits + // + struct InheritsInit + { + InheritsInit () + { + TypeInfo ti (typeid (Inherits)); + ti.add_base (Access::public_, true, typeid (Edge)); + RTTI::insert (ti); + } + + } inherits_init_; + + + // Extends + // + struct ExtendsInit + { + ExtendsInit () + { + TypeInfo ti (typeid (Extends)); + ti.add_base (Access::public_, true, typeid (Inherits)); + RTTI::insert (ti); + } + + } extends_init_; + + + // Restricts + // + struct RestrictsInit + { + RestrictsInit () + { + TypeInfo ti (typeid (Restricts)); + ti.add_base (Access::public_, true, typeid (Inherits)); + RTTI::insert (ti); + } + + } restricts_init_; + + + // BelongsToNamespace + // + struct BelongsToNamespaceInit + { + BelongsToNamespaceInit () + { + TypeInfo ti (typeid (BelongsToNamespace)); + ti.add_base (Access::public_, true, typeid (Edge)); + RTTI::insert (ti); + } + + } belongs_to_namespace_init_; + + + // Member + // + struct MemberInit + { + MemberInit () + { + TypeInfo ti (typeid (Member)); + ti.add_base (Access::public_, true, typeid (Instance)); + RTTI::insert (ti); + } + + } member_init_; + + + // Specialization + // + struct SpecializationInit + { + SpecializationInit () + { + TypeInfo ti (typeid (Specialization)); + ti.add_base (Access::public_, true, typeid (Type)); + RTTI::insert (ti); + } + + } specialization_init_; + + + // Arguments + // + struct ArgumentsInit + { + ArgumentsInit () + { + TypeInfo ti (typeid (Arguments)); + ti.add_base (Access::public_, true, typeid (Edge)); + RTTI::insert (ti); + } + + } arguments_init_; + + + /* + // Contains + // + struct ContainsInit + { + ContainsInit () + { + TypeInfo ti (typeid (Contains)); + ti.add_base (Access::public_, true, typeid (Edge)); + RTTI::insert (ti); + } + + } contains_init_; + + + // Container + // + struct ContainerInit + { + ContainerInit () + { + TypeInfo ti (typeid (Container)); + ti.add_base (Access::public_, true, typeid (Node)); + RTTI::insert (ti); + } + + } container_init_; + */ + + + // AnyType + // + namespace + { + struct AnyTypeInit + { + AnyTypeInit () + { + TypeInfo ti (typeid (AnyType)); + ti.add_base (Access::public_, true, typeid (SemanticGraph::Type)); + RTTI::insert (ti); + } + + } any_type_init_; + } + + + // AnySimpleType + // + namespace + { + struct AnySimpleTypeInit + { + AnySimpleTypeInit () + { + TypeInfo ti (typeid (AnySimpleType)); + ti.add_base (Access::public_, true, typeid (Type)); + RTTI::insert (ti); + } + + } any_simple_type_init_; + } + } + + + // Instance + // + Type& Instance:: + type () const + { + return belongs ().type (); + } + } +} + +// Path +// +std::wostream& +operator<< (std::wostream& os, XSDFrontend::SemanticGraph::Path const& path) +{ +#if !defined(BOOST_FILESYSTEM_VERSION) || BOOST_FILESYSTEM_VERSION == 2 + return os << path.native_file_string ().c_str (); +#else + return os << path.string ().c_str (); +#endif +} diff --git a/libxsd-frontend/xsd-frontend/semantic-graph/elements.hxx b/libxsd-frontend/xsd-frontend/semantic-graph/elements.hxx new file mode 100644 index 0000000..78b6615 --- /dev/null +++ b/libxsd-frontend/xsd-frontend/semantic-graph/elements.hxx @@ -0,0 +1,1247 @@ +// file : xsd-frontend/semantic-graph/elements.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_FRONTEND_SEMANTIC_GRAPH_ELEMENTS_HXX +#define XSD_FRONTEND_SEMANTIC_GRAPH_ELEMENTS_HXX + +#include <iosfwd> + +#include <boost/filesystem/path.hpp> +#include <boost/filesystem/operations.hpp> +#include <boost/filesystem/exception.hpp> + +#include <cult/types.hxx> + +#include <cult/rtti/type-info.hxx> + +#include <cult/containers/set.hxx> +#include <cult/containers/map.hxx> +#include <cult/containers/list.hxx> +#include <cult/containers/pair.hxx> +#include <cult/containers/graph.hxx> +#include <cult/containers/vector.hxx> + +#include <frontend-elements/context.hxx> + +namespace XSDFrontend +{ + namespace SemanticGraph + { + using namespace Cult::Types; + + namespace Bits + { + using Cult::Containers::Graph; + + //@@ Should end up in Cult::Meta + // + template <typename X> + struct strip_pointer + { + typedef X Type; + }; + + template <typename X> + struct strip_pointer<X*> + { + typedef X Type; + }; + + template <typename I> + struct PointerIterator + { + typedef + typename strip_pointer<typename I::Value>::Type + Value; + + typedef I BaseIterator; + typedef Value& Reference; + typedef Value* Pointer; + + PointerIterator () + : i_ () // i_ can be of a pointer type. + { + } + + PointerIterator (I const& i) + : i_ (i) + { + } + + public: + Reference + operator* () const + { + return **i_; + } + + Pointer + operator-> () const + { + return *i_; + } + + I const& + base () const + { + return i_; + } + + public: + PointerIterator& + operator++ () + { + ++i_; + return *this; + } + + PointerIterator + operator++ (Int) + { + PointerIterator r (*this); + ++i_; + return r; + } + + PointerIterator& + operator-- () + { + --i_; + return *this; + } + + PointerIterator + operator-- (Int) + { + PointerIterator r (*this); + --i_; + return r; + } + + private: + I i_; + }; + + template <typename I> + inline + Boolean + operator== (PointerIterator<I> const& a, PointerIterator<I> const& b) + { + return a.base () == b.base (); + } + + template <typename I> + inline + Boolean + operator!= (PointerIterator<I> const& a, PointerIterator<I> const& b) + { + return a.base () != b.base (); + } + + template <typename I> + inline + typename PointerIterator<I>::BaseIterator::difference_type + operator- (PointerIterator<I> const& a, PointerIterator<I> const& b) + { + return a.base () - b.base (); + } + } + + // + // + typedef + boost::filesystem::filesystem_error + InvalidPath; + + typedef + boost::filesystem::path + Path; + + typedef + Cult::Containers::Vector<Path> + Paths; + + typedef + FrontendElements::Context + Context; + + // + // + class Node; + class Edge; + + // + // + class Annotates; + class Annotation; + + // + // + class Edge + { + public: + Context& + context () const + { + return context_; + } + + virtual + ~Edge () + { + } + + public: + template <typename X> + Boolean + is_a () const + { + return dynamic_cast<X const*> (this) != 0; + } + + protected: + friend class Bits::Graph<Node, Edge>; + + Edge () + { + } + + private: + mutable Context context_; + }; + + inline Boolean + operator== (Edge const& x, Edge const& y) + { + return &x == &y; + } + + + // + // + class Node + { + public: + Context& + context () const + { + return context_; + } + + public: + Path const& + file () const + { + return file_; + } + + UnsignedLong + line () const + { + return line_; + } + + UnsignedLong + column () const + { + return column_; + } + + public: + Boolean + annotated_p () const + { + return annotates_ != 0; + } + + Annotates& + annotated () const + { + return *annotates_; + } + + Annotation& + annotation (); + + public: + template <typename X> + Boolean + is_a () const + { + return dynamic_cast<X const*> (this) != 0; + } + + public: + + virtual + ~Node () + { + } + + protected: + friend class Bits::Graph<Node, Edge>; + + Node (Path const& file, UnsignedLong line, UnsignedLong column) + : annotates_ (0), file_ (file), line_ (line), column_ (column) + { + } + + Node () // For virtual inheritance. + { + abort (); // Told you so! + } + + Void + add_edge_right (Annotates& a) + { + annotates_ = &a; + } + + private: + mutable Context context_; + Annotates* annotates_; + Path file_; + UnsignedLong line_; + UnsignedLong column_; + }; + + inline Boolean + operator== (Node const& x, Node const& y) + { + return &x == &y; + } + + + // + // + typedef WideString Name; + + + // + // + class Scope; + class Nameable; + + + // + // + class Names: public virtual Edge + { + public: + Name + name () const + { + return name_; + } + + Scope& + scope () const + { + return *scope_; + } + + Nameable& + named () const + { + return *named_; + } + + protected: + friend class Bits::Graph<Node, Edge>; + + Names (Name const& name) + : name_ (name) + { + } + + Void + set_left_node (Scope& n) + { + scope_ = &n; + } + + Void + set_right_node (Nameable& n) + { + named_ = &n; + } + + Void + clear_left_node (Scope& n) + { + assert (scope_ == &n); + scope_ = 0; + } + + Void + clear_right_node (Nameable& n) + { + assert (named_ == &n); + named_ = 0; + } + + private: + Scope* scope_; + Nameable* named_; + Name name_; + }; + + + class Nameable: public virtual Node + { + public: + Boolean + named_p () const + { + return named_ != 0; + } + + Name + name () const + { + assert (named_p ()); + return named_->name (); + } + + Scope& + scope () + { + assert (named_p ()); + return named_->scope (); + } + + Names& + named () + { + assert (named_p ()); + return *named_; + } + + protected: + friend class Bits::Graph<Node, Edge>; + + Nameable () + : named_ (0) + { + } + + Void + add_edge_right (Names& e) + { + named_ = &e; + } + + Void + remove_edge_right (Names& e) + { + assert (named_ == &e); + named_ = 0; + } + + using Node::add_edge_right; + + private: + Names* named_; + }; + + + // + // + typedef + Cult::Containers::Set<Nameable*> + Nameables; + + + // + // + class Scope: public virtual Nameable + { + protected: + typedef + Cult::Containers::List<Names*> + NamesList; + + typedef + Cult::Containers::Map<Names*, NamesList::Iterator> + ListIteratorMap; + + typedef + Cult::Containers::Map<Name, NamesList> + NamesMap; + + public: + typedef + Bits::PointerIterator<NamesList::Iterator> + NamesIterator; + + typedef + Bits::PointerIterator<NamesList::ConstIterator> + NamesConstIterator; + + typedef + Cult::Containers::Pair <NamesConstIterator, NamesConstIterator> + NamesIteratorPair; + + NamesIterator + names_begin () + { + return names_.begin (); + } + + NamesIterator + names_end () + { + return names_.end (); + } + + NamesConstIterator + names_begin () const + { + return names_.begin (); + } + + NamesConstIterator + names_end () const + { + return names_.end (); + } + + virtual NamesIteratorPair + find (Name const& name) const + { + NamesMap::ConstIterator i (names_map_.find (name)); + + if (i == names_map_.end ()) + return NamesIteratorPair (names_.end (), names_.end ()); + else + return NamesIteratorPair (i->second.begin (), i->second.end ()); + } + + NamesIterator + find (Names& e) + { + ListIteratorMap::Iterator i (iterator_map_.find (&e)); + return i != iterator_map_.end () ? i->second : names_.end (); + } + + protected: + friend class Bits::Graph<Node, Edge>; + + Scope (Path const& file, UnsignedLong line, UnsignedLong column) + : Node (file, line, column) + { + } + + Scope () + { + } + + Void + add_edge_left (Names& e) + { + NamesList::Iterator i (names_.insert (names_.end (), &e)); + iterator_map_[&e] = i; + names_map_[e.name ()].push_back (&e); + } + + Void + remove_edge_left (Names& e) + { + ListIteratorMap::Iterator i (iterator_map_.find (&e)); + assert (i != iterator_map_.end ()); + + names_.erase (i->second); + iterator_map_.erase (i); + + NamesMap::Iterator j (names_map_.find (e.name ())); + + for (NamesList::Iterator i (j->second.begin ()); + i != j->second.end (); ++i) + { + if (*i == &e) + i = j->second.erase (i); + } + } + + //@@ Ideally should be protected but then NodeArg has no way to + // access it. Maybe when (if) I move NodeArg into Grpah I can + // resolve this. + // + public: + Void + add_edge_left (Names& e, NamesIterator const& after) + { + NamesList::Iterator i; + + if (after.base () == names_.end ()) + i = names_.insert (names_.begin (), &e); + else + { + NamesList::Iterator j (after.base ()); + i = names_.insert (++j, &e); + } + + iterator_map_[&e] = i; + names_map_[e.name ()].push_back (&e); + } + + protected: + using Nameable::add_edge_right; + + private: + NamesList names_; + ListIteratorMap iterator_map_; + NamesMap names_map_; + }; + + + // + // + class Belongs; + class Inherits; + class Arguments; + + class Type: public virtual Nameable + { + protected: + typedef + Cult::Containers::Vector<Belongs*> + Classifies; + + typedef + Cult::Containers::Vector<Inherits*> + Begets; + + typedef + Cult::Containers::Set<Arguments*> + ArgumentsSet; + + public: + typedef + Bits::PointerIterator<Classifies::ConstIterator> + ClassifiesIterator; + + ClassifiesIterator + classifies_begin () const + { + return classifies_.begin (); + } + + ClassifiesIterator + classifies_end () const + { + return classifies_.end (); + } + + // + // + Boolean + inherits_p () const + { + return inherits_ != 0; + } + + Inherits& + inherits () const + { + assert (inherits_ != 0); + return *inherits_; + } + + // + // + typedef + Bits::PointerIterator<Begets::ConstIterator> + BegetsIterator; + + BegetsIterator + begets_begin () const + { + return begets_.begin (); + } + + BegetsIterator + begets_end () const + { + return begets_.end (); + } + + // + // + typedef + Bits::PointerIterator<ArgumentsSet::ConstIterator> + ArgumentsIterator; + + ArgumentsIterator + arguments_begin () const + { + return arguments_.begin (); + } + + ArgumentsIterator + arguments_end () const + { + return arguments_.end (); + } + + protected: + friend class Bits::Graph<Node, Edge>; + + Type () + : inherits_ (0) + { + } + + Void + add_edge_right (Belongs& e) + { + classifies_.push_back (&e); + } + + Void + add_edge_right (Inherits& e) + { + begets_.push_back (&e); + } + + using Nameable::add_edge_right; + + Void + add_edge_left (Arguments& a) + { + arguments_.insert (&a); + } + + Void + remove_edge_left (Arguments&); + + Void + add_edge_left (Inherits& e) + { + inherits_ = &e; + } + + private: + Inherits* inherits_; + Begets begets_; + Classifies classifies_; + ArgumentsSet arguments_; + }; + + + class Instance: public virtual Nameable + { + public: + Belongs& + belongs () const + { + return *belongs_; + } + + Type& + type () const; + + Boolean + typed_p () const + { + return belongs_ != 0; + } + + protected: + friend class Bits::Graph<Node, Edge>; + + Instance () + : belongs_ (0) + { + } + + Void + add_edge_left (Belongs& e) + { + belongs_ = &e; + } + + private: + Belongs* belongs_; + }; + + + class Belongs: public virtual Edge + { + public: + Instance& + instance () const + { + return *instance_; + } + + Type& + type () const + { + return *type_; + } + + protected: + friend class Bits::Graph<Node, Edge>; + + Belongs () + { + } + + Void + set_left_node (Instance& n) + { + instance_ = &n; + } + + Void + set_right_node (Type& n) + { + type_ = &n; + } + + private: + Instance* instance_; + Type* type_; + }; + + + // + // + class Inherits: public virtual Edge + { + public: + Type& + base () const + { + return *base_; + } + + Type& + derived () const + { + return *derived_; + } + + protected: + friend class Bits::Graph<Node, Edge>; + + Inherits () + { + } + + Void + set_left_node (Type& n) + { + derived_ = &n; + } + + Void + set_right_node (Type& n) + { + base_ = &n; + } + + private: + Type* base_; + Type* derived_; + }; + + + class Extends: public virtual Inherits + { + protected: + friend class Bits::Graph<Node, Edge>; + + Extends () + { + } + }; + + class Restricts: public virtual Inherits + { + protected: + typedef + Cult::Containers::Map<WideString, WideString> + Facets; + + public: + typedef + Facets::Iterator + FacetIterator; + + Boolean + facet_empty () + { + return facets_.empty (); + } + + FacetIterator + facet_begin () + { + return facets_.begin (); + } + + FacetIterator + facet_end () + { + return facets_.end (); + } + + FacetIterator + facet_find (WideString const& name) + { + return facets_.find (name); + } + + Void + facet_insert (String const& name, String const& value) + { + facets_[name] = value; + } + + protected: + friend class Bits::Graph<Node, Edge>; + + Restricts () + { + } + + protected: + Facets facets_; + }; + + + // + // + class Member; + class Namespace; + + class BelongsToNamespace: public virtual Edge + { + public: + Member& + member () const + { + assert (member_ != 0); + return *member_; + } + + Namespace& + namespace_ () const + { + assert (namespace__ != 0); + return *namespace__; + } + + protected: + friend class Bits::Graph<Node, Edge>; + + BelongsToNamespace () + : member_ (0), namespace__ (0) + { + } + + Void + set_left_node (Member& n) + { + member_ = &n; + } + + Void + set_right_node (Namespace& n) + { + namespace__ = &n; + } + + private: + Member* member_; + Namespace* namespace__; + }; + + // + // + class Member: public virtual Instance + { + public: + // Member is global either if it is defined outside any type + // or it is a ref="" of a global member. + // + Boolean + global_p () const + { + return global_; + } + + Boolean + qualified_p () const + { + return qualified_; + } + + // Note that only qualified members belong to a namespace. + // + Namespace& + namespace_ () const + { + assert (belongs_to_namespace_ != 0); + return belongs_to_namespace_->namespace_ (); + } + + + // Default and fixed value API. Note that the fixed value semantics + // is a superset of the default value semantics. As such setting the + // fixed value appears as if the default value was also set. + // + Boolean + default_p () const + { + return value_type_ != ValueType::none; + } + + Boolean + fixed_p () const + { + return value_type_ == ValueType::fixed; + } + + struct NoValue {}; + + WideString + value () const + { + if (value_type_ != ValueType::none) + return value_; + else + throw NoValue (); + } + + // + // + Void + default_ (WideString const& v) + { + value_ = v; + value_type_ = ValueType::default_; + } + + Void + fixed (WideString const& v) + { + value_ = v; + value_type_ = ValueType::fixed; + } + + protected: + friend class Bits::Graph<Node, Edge>; + + Member (Boolean global, Boolean qualified) + : global_ (global), + qualified_ (qualified), + belongs_to_namespace_ (0), + value_type_ (ValueType::none) + { + } + + Void + add_edge_left (BelongsToNamespace& e) + { + // In the parser we sometimes re-add the same adge. + // + belongs_to_namespace_ = &e; + } + + using Instance::add_edge_left; + + private: + Boolean global_; + Boolean qualified_; + BelongsToNamespace* belongs_to_namespace_; + + struct ValueType + { + enum Value + { + none, + default_, + fixed + }; + }; + + WideString value_; + ValueType::Value value_type_; + }; + + + // Parametric types. + // + + class Specialization: public virtual Type + { + typedef + Cult::Containers::Vector<Arguments*> + Argumented; + + public: + typedef + Bits::PointerIterator<Argumented::Iterator> + ArgumentedIterator; + + typedef + Bits::PointerIterator<Argumented::ConstIterator> + ArgumentedConstIterator; + + ArgumentedIterator + argumented_begin () + { + return argumented_.begin (); + } + + ArgumentedConstIterator + argumented_begin () const + { + return argumented_.begin (); + } + + ArgumentedIterator + argumented_end () + { + return argumented_.end (); + } + + ArgumentedConstIterator + argumented_end () const + { + return argumented_.end (); + } + + // Shortcut for one-argument specializations. + // + Arguments& + argumented () const + { + return *argumented_[0]; + } + + protected: + friend class Bits::Graph<Node, Edge>; + + using Type::add_edge_right; + + Void + add_edge_right (Arguments& a) + { + argumented_.push_back (&a); + } + + Void + remove_edge_right (Arguments&); + + public: + Void + add_edge_right (Arguments& a, ArgumentedIterator const& pos) + { + argumented_.insert (pos.base (), &a); + } + + private: + Argumented argumented_; + }; + + + class Arguments: public virtual Edge + { + public: + Type& + type () const + { + return *type_; + } + + Specialization& + specialization () const + { + return *specialization_; + } + + protected: + friend class Bits::Graph<Node, Edge>; + + void + set_left_node (Type& n) + { + type_ = &n; + } + + void + clear_left_node (Type& n) + { + assert (type_ == &n); + type_ = 0; + } + + void + set_right_node (Specialization& s) + { + specialization_ = &s; + } + + void + clear_right_node (Specialization& s) + { + assert (specialization_ == &s); + specialization_ = 0; + } + + private: + Type* type_; + Specialization* specialization_; + }; + + + // + // + class AnyType: public virtual Type + { + protected: + friend class Bits::Graph<Node, Edge>; + + AnyType (Path const& file, UnsignedLong line, UnsignedLong column) + : Node (file, line, column) + { + } + + AnyType () // For virtual inheritance. + { + } + }; + + + // + // + class AnySimpleType: public virtual Type + { + protected: + friend class Bits::Graph<Node, Edge>; + + AnySimpleType (Path const& file, UnsignedLong line, UnsignedLong column) + : Node (file, line, column) + { + } + + AnySimpleType () // For virtual inheritance. + { + } + }; + } +} + +// ADL won't find it because Path is a typedef. Note that this +// function prints in native format. +// +std::wostream& +operator<< (std::wostream& os, XSDFrontend::SemanticGraph::Path const& path); + +#endif // XSD_FRONTEND_SEMANTIC_GRAPH_ELEMENTS_HXX diff --git a/libxsd-frontend/xsd-frontend/semantic-graph/enumeration.cxx b/libxsd-frontend/xsd-frontend/semantic-graph/enumeration.cxx new file mode 100644 index 0000000..adcf71e --- /dev/null +++ b/libxsd-frontend/xsd-frontend/semantic-graph/enumeration.cxx @@ -0,0 +1,67 @@ +// file : xsd-frontend/semantic-graph/enumeration.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <xsd-frontend/semantic-graph/enumeration.hxx> + +namespace XSDFrontend +{ + namespace SemanticGraph + { + namespace RTTI = Cult::RTTI; + + using RTTI::Access; + using RTTI::TypeInfo; + + namespace + { + // Enumeration + // + struct EnumerationInit + { + EnumerationInit () + { + TypeInfo ti (typeid (Enumeration)); + ti.add_base (Access::public_, true, typeid (Complex)); + RTTI::insert (ti); + } + + } enumeration_init_; + + + // Enumerator + // + struct EnumeratorInit + { + EnumeratorInit () + { + TypeInfo ti (typeid (Enumerator)); + ti.add_base (Access::public_, true, typeid (Instance)); + RTTI::insert (ti); + } + + } enumerator_init_; + } + + + // Enumeration + // + + Enumeration:: + Enumeration (Path const& file, UnsignedLong line, UnsignedLong column) + : Node (file, line, column) + { + } + + + // Enumerator + // + + Enumerator:: + Enumerator (Path const& file, UnsignedLong line, UnsignedLong column) + : Node (file, line, column) + { + } + } +} diff --git a/libxsd-frontend/xsd-frontend/semantic-graph/enumeration.hxx b/libxsd-frontend/xsd-frontend/semantic-graph/enumeration.hxx new file mode 100644 index 0000000..a21e8f3 --- /dev/null +++ b/libxsd-frontend/xsd-frontend/semantic-graph/enumeration.hxx @@ -0,0 +1,35 @@ +// file : xsd-frontend/semantic-graph/enumeration.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_FRONTEND_SEMANTIC_GRAPH_ENUMERATION_HXX +#define XSD_FRONTEND_SEMANTIC_GRAPH_ENUMERATION_HXX + +#include <xsd-frontend/semantic-graph/elements.hxx> +#include <xsd-frontend/semantic-graph/complex.hxx> + +namespace XSDFrontend +{ + namespace SemanticGraph + { + class Enumeration: public virtual Complex + { + protected: + friend class Bits::Graph<Node, Edge>; + + Enumeration (Path const& file, UnsignedLong line, UnsignedLong column); + }; + + + class Enumerator: public virtual Instance + { + protected: + friend class Bits::Graph<Node, Edge>; + + Enumerator (Path const& file, UnsignedLong line, UnsignedLong column); + }; + } +} + +#endif // XSD_FRONTEND_SEMANTIC_GRAPH_ENUMERATION_HXX diff --git a/libxsd-frontend/xsd-frontend/semantic-graph/fundamental.cxx.m4 b/libxsd-frontend/xsd-frontend/semantic-graph/fundamental.cxx.m4 new file mode 100644 index 0000000..cc1316c --- /dev/null +++ b/libxsd-frontend/xsd-frontend/semantic-graph/fundamental.cxx.m4 @@ -0,0 +1,216 @@ +divert(-1) + +# file : xsd-frontend/semantic-graph/fundamental.cxx.m4 +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include(`fundamental.m4') + +define(`fundamental_type', + `fundamental_type_impl(`make_class_name(`$1')', `make_var_name(`$1')')') + + +define(`fundamental_type_impl', ` + + // $1 + // + namespace + { + struct $1Init + { + $1Init () + { + TypeInfo ti (typeid ($1)); + ti.add_base (Access::public_, true, typeid (Type)); + RTTI::insert (ti); + } + + } $2_init_; + } + + $1:: + $1 (Path const& file, + SemanticGraph::UnsignedLong line, + SemanticGraph::UnsignedLong column) + : Node (file, line, column) + { + }') + +divert(0)dnl +dnl +dnl +dnl +// file : xsd-frontend/semantic-graph/fundamental.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +// Note, that this file is automatically generated! +// + +#include <xsd-frontend/semantic-graph/fundamental.hxx> + +namespace XSDFrontend +{ + namespace SemanticGraph + { + namespace Fundamental + { + namespace RTTI = Cult::RTTI; + + using RTTI::Access; + using RTTI::TypeInfo; + + + // Type + // + namespace + { + struct TypeInit + { + TypeInit () + { + TypeInfo ti (typeid (Type)); + ti.add_base (Access::public_, true, typeid (SemanticGraph::Type)); + RTTI::insert (ti); + } + + } any_type_init_; + } + + Type:: + Type () + { + } +dnl +dnl Integers. +dnl +fundamental_type(`byte') +fundamental_type(`unsigned byte') +fundamental_type(`short') +fundamental_type(`unsigned short') +fundamental_type(`int') +fundamental_type(`unsigned int') +fundamental_type(`long') +fundamental_type(`unsigned long') +fundamental_type(`integer') +fundamental_type(`non positive integer') +fundamental_type(`non negative integer') +fundamental_type(`positive integer') +fundamental_type(`negative integer') +dnl +dnl Boolean. +dnl +fundamental_type(`boolean') +dnl +dnl Floats. +dnl +fundamental_type(`float') +fundamental_type(`double') +fundamental_type(`decimal') +dnl +dnl Strings. +dnl +fundamental_type(`string') +fundamental_type(`normalized string') +fundamental_type(`token') +fundamental_type(`name') +fundamental_type(`name token') +fundamental_type(`name tokens') +fundamental_type(`NC name') +fundamental_type(`language') +dnl +dnl Qualified name. +dnl +fundamental_type(`q name') +dnl +dnl ID/IDREF. +dnl +fundamental_type(`id') + + + // IdRef + // + namespace + { + struct IdRefInit + { + IdRefInit () + { + TypeInfo ti (typeid (IdRef)); + ti.add_base (Access::public_, true, typeid (Type)); + ti.add_base (Access::public_, true, typeid (Specialization)); + RTTI::insert (ti); + } + + } id_ref_init_; + } + + IdRef:: + IdRef (Path const& file, + SemanticGraph::UnsignedLong line, + SemanticGraph::UnsignedLong column) + : Node (file, line, column) + { + } + + + // IdRefs + // + namespace + { + struct IdRefsInit + { + IdRefsInit () + { + TypeInfo ti (typeid (IdRefs)); + ti.add_base (Access::public_, true, typeid (Type)); + ti.add_base (Access::public_, true, typeid (Specialization)); + RTTI::insert (ti); + } + + } id_refs_init_; + } + + IdRefs:: + IdRefs (Path const& file, + SemanticGraph::UnsignedLong line, + SemanticGraph::UnsignedLong column) + : Node (file, line, column) + { + } +dnl +dnl URI. +dnl +fundamental_type(`any URI') +dnl +dnl Binary. +dnl +fundamental_type(`base 64 binary') +fundamental_type(`hex binary') +dnl +dnl Date/time. +dnl +fundamental_type(`date') +fundamental_type(`date time') +fundamental_type(`duration') +fundamental_type(`day') +fundamental_type(`month') +fundamental_type(`month day') +fundamental_type(`year') +fundamental_type(`year month') +fundamental_type(`time') +dnl +dnl Entity. +dnl +fundamental_type(`entity') +fundamental_type(`entities') +dnl +dnl Notation. +dnl +fundamental_type(`notation') +dnl + } + } +} diff --git a/libxsd-frontend/xsd-frontend/semantic-graph/fundamental.hxx.m4 b/libxsd-frontend/xsd-frontend/semantic-graph/fundamental.hxx.m4 new file mode 100644 index 0000000..f5a88a9 --- /dev/null +++ b/libxsd-frontend/xsd-frontend/semantic-graph/fundamental.hxx.m4 @@ -0,0 +1,165 @@ +divert(-1) + +# file : xsd-frontend/semantic-graph/fundamental.hxx.m4 +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include(`fundamental.m4') + +define(`fundamental_type', `fundamental_type_impl(`make_class_name(`$1')', `$1')') + +define(`fundamental_type_impl', ` + + // + // + class $1: public virtual Type + { + protected: + friend class Bits::Graph<Node, Edge>; + + $1 (Path const& file, + SemanticGraph::UnsignedLong line, + SemanticGraph::UnsignedLong column); + };') +divert(0)dnl +dnl +dnl +dnl +// file : xsd-frontend/semantic-graph/fundamental.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +// Note, that this file is automatically generated! +// + +#ifndef XSD_FRONTEND_SEMANTIC_GRAPH_FUNDAMENTAL_HXX +#define XSD_FRONTEND_SEMANTIC_GRAPH_FUNDAMENTAL_HXX + +#include <xsd-frontend/semantic-graph/elements.hxx> + +namespace XSDFrontend +{ + namespace SemanticGraph + { + namespace Fundamental + { + // + // + class Type: public virtual SemanticGraph::Type + { + protected: + friend class Bits::Graph<Node, Edge>; + + Type (); + }; +dnl +dnl Integers. +dnl +fundamental_type(`byte') +fundamental_type(`unsigned byte') +fundamental_type(`short') +fundamental_type(`unsigned short') +fundamental_type(`int') +fundamental_type(`unsigned int') +fundamental_type(`long') +fundamental_type(`unsigned long') +fundamental_type(`integer') +fundamental_type(`non positive integer') +fundamental_type(`non negative integer') +fundamental_type(`positive integer') +fundamental_type(`negative integer') +dnl +dnl Boolean. +dnl +fundamental_type(`boolean') +dnl +dnl Floats. +dnl +fundamental_type(`float') +fundamental_type(`double') +fundamental_type(`decimal') +dnl +dnl Strings. +dnl +fundamental_type(`string') +fundamental_type(`normalized string') +fundamental_type(`token') +fundamental_type(`name') +fundamental_type(`name token') +fundamental_type(`name tokens') +fundamental_type(`NC name') +fundamental_type(`language') +dnl +dnl Qualified name. +dnl +fundamental_type(`q name') +dnl +dnl ID/IDREF. +dnl +fundamental_type(`id') + + + // + // + class IdRef: public virtual Type, + public virtual Specialization + { + protected: + friend class Bits::Graph<Node, Edge>; + + IdRef (Path const& file, + SemanticGraph::UnsignedLong line, + SemanticGraph::UnsignedLong column); + }; + + + // + // + class IdRefs: public virtual Type, + public virtual Specialization + { + protected: + friend class Bits::Graph<Node, Edge>; + + IdRefs (Path const& file, + SemanticGraph::UnsignedLong line, + SemanticGraph::UnsignedLong column); + }; +dnl +dnl URI. +dnl +fundamental_type(`any URI') +dnl +dnl Binary. +dnl +fundamental_type(`base 64 binary') +fundamental_type(`hex binary') +dnl +dnl Date/time. +dnl +fundamental_type(`date') +fundamental_type(`date time') +fundamental_type(`duration') +fundamental_type(`day') +fundamental_type(`month') +fundamental_type(`month day') +fundamental_type(`year') +fundamental_type(`year month') +fundamental_type(`time') +dnl +dnl Entity. +dnl +fundamental_type(`entity') +fundamental_type(`entities') +dnl +dnl Notation. +dnl +fundamental_type(`notation') +dnl + } + } +} + +#endif // XSD_FRONTEND_SEMANTIC_GRAPH_FUNDAMENTAL_HXX diff --git a/libxsd-frontend/xsd-frontend/semantic-graph/fundamental.m4 b/libxsd-frontend/xsd-frontend/semantic-graph/fundamental.m4 new file mode 100644 index 0000000..735b35d --- /dev/null +++ b/libxsd-frontend/xsd-frontend/semantic-graph/fundamental.m4 @@ -0,0 +1,18 @@ +# file : xsd-frontend/semantic-graph/fundamental.m4 +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +define(`upcase', `translit(`$*', `a-z', `A-Z')') + + +define(`capitalize_word', + `regexp(`$1', `^\(.\)\(.*\)', `upcase(`\1')`\2'')') + + +define(`capitalize', + `patsubst(`$1', `\w+', `capitalize_word(`\&')')') + +define(`make_class_name', `patsubst(capitalize(`$1'), ` ')') + +define(`make_var_name', `patsubst(`$1', ` ', `_')') diff --git a/libxsd-frontend/xsd-frontend/semantic-graph/list.cxx b/libxsd-frontend/xsd-frontend/semantic-graph/list.cxx new file mode 100644 index 0000000..3184041 --- /dev/null +++ b/libxsd-frontend/xsd-frontend/semantic-graph/list.cxx @@ -0,0 +1,37 @@ +// file : xsd-frontend/semantic-graph/list.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <xsd-frontend/semantic-graph/list.hxx> + +namespace XSDFrontend +{ + namespace SemanticGraph + { + namespace RTTI = Cult::RTTI; + + using RTTI::Access; + using RTTI::TypeInfo; + + namespace + { + struct ListInit + { + ListInit () + { + TypeInfo ti (typeid (List)); + ti.add_base (Access::public_, true, typeid (Specialization)); + RTTI::insert (ti); + } + + } list_init_; + } + + List:: + List (Path const& file, UnsignedLong line, UnsignedLong column) + : Node (file, line, column) + { + } + } +} diff --git a/libxsd-frontend/xsd-frontend/semantic-graph/list.hxx b/libxsd-frontend/xsd-frontend/semantic-graph/list.hxx new file mode 100644 index 0000000..3ba0c02 --- /dev/null +++ b/libxsd-frontend/xsd-frontend/semantic-graph/list.hxx @@ -0,0 +1,25 @@ +// file : xsd-frontend/semantic-graph/list.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_FRONTEND_SEMANTIC_GRAPH_LIST_HXX +#define XSD_FRONTEND_SEMANTIC_GRAPH_LIST_HXX + +#include <xsd-frontend/semantic-graph/elements.hxx> + +namespace XSDFrontend +{ + namespace SemanticGraph + { + class List: public virtual Specialization + { + protected: + friend class Bits::Graph<Node, Edge>; + + List (Path const& file, UnsignedLong line, UnsignedLong column); + }; + } +} + +#endif // XSD_FRONTEND_SEMANTIC_GRAPH_LIST_HXX diff --git a/libxsd-frontend/xsd-frontend/semantic-graph/namespace.cxx b/libxsd-frontend/xsd-frontend/semantic-graph/namespace.cxx new file mode 100644 index 0000000..789b5d8 --- /dev/null +++ b/libxsd-frontend/xsd-frontend/semantic-graph/namespace.cxx @@ -0,0 +1,37 @@ +// file : xsd-frontend/semantic-graph/namespace.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <xsd-frontend/semantic-graph/namespace.hxx> + +namespace XSDFrontend +{ + namespace SemanticGraph + { + namespace RTTI = Cult::RTTI; + + using RTTI::Access; + using RTTI::TypeInfo; + + namespace + { + struct NamespaceInit + { + NamespaceInit () + { + TypeInfo ti (typeid (Namespace)); + ti.add_base (Access::public_, true, typeid (Scope)); + RTTI::insert (ti); + } + + } namespace_init_; + } + + Namespace:: + Namespace (Path const& file, UnsignedLong line, UnsignedLong column) + : Node (file, line, column) + { + } + } +} diff --git a/libxsd-frontend/xsd-frontend/semantic-graph/namespace.hxx b/libxsd-frontend/xsd-frontend/semantic-graph/namespace.hxx new file mode 100644 index 0000000..25bd1c0 --- /dev/null +++ b/libxsd-frontend/xsd-frontend/semantic-graph/namespace.hxx @@ -0,0 +1,32 @@ +// file : xsd-frontend/semantic-graph/namespace.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_FRONTEND_SEMANTIC_GRAPH_NAMESPACE_HXX +#define XSD_FRONTEND_SEMANTIC_GRAPH_NAMESPACE_HXX + +#include <xsd-frontend/semantic-graph/elements.hxx> + +namespace XSDFrontend +{ + namespace SemanticGraph + { + class Namespace : public virtual Scope + { + protected: + friend class Bits::Graph<Node, Edge>; + + Namespace (Path const& file, UnsignedLong line, UnsignedLong column); + + Void + add_edge_right (BelongsToNamespace&) + { + } + + using Scope::add_edge_right; + }; + } +} + +#endif // XSD_FRONTEND_SEMANTIC_GRAPH_NAMESPACE_HXX diff --git a/libxsd-frontend/xsd-frontend/semantic-graph/particle.cxx b/libxsd-frontend/xsd-frontend/semantic-graph/particle.cxx new file mode 100644 index 0000000..f8c93de --- /dev/null +++ b/libxsd-frontend/xsd-frontend/semantic-graph/particle.cxx @@ -0,0 +1,61 @@ +// file : xsd-frontend/semantic-graph/particle.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <xsd-frontend/semantic-graph/particle.hxx> + +namespace XSDFrontend +{ + namespace SemanticGraph + { + namespace RTTI = Cult::RTTI; + + using RTTI::Access; + using RTTI::TypeInfo; + + // ContainsParticle + // + namespace + { + struct ContainsParticleInit + { + ContainsParticleInit () + { + TypeInfo ti (typeid (ContainsParticle)); + ti.add_base (Access::public_, true, typeid (Edge)); + RTTI::insert (ti); + } + + } contains_particle_init_; + } + + ContainsParticle:: + ContainsParticle (UnsignedLong min, UnsignedLong max) + : particle_ (0), compositor_ (0), min_ (min), max_ (max) + { + } + + // Particle + // + namespace + { + struct ParticleInit + { + ParticleInit () + { + TypeInfo ti (typeid (Particle)); + ti.add_base (Access::public_, true, typeid (Node)); + RTTI::insert (ti); + } + + } particle_init_; + } + + Particle:: + Particle () + : contained_particle_ (0) + { + } + } +} diff --git a/libxsd-frontend/xsd-frontend/semantic-graph/particle.hxx b/libxsd-frontend/xsd-frontend/semantic-graph/particle.hxx new file mode 100644 index 0000000..df48de4 --- /dev/null +++ b/libxsd-frontend/xsd-frontend/semantic-graph/particle.hxx @@ -0,0 +1,145 @@ +// file : xsd-frontend/semantic-graph/particle.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_FRONTEND_SEMANTIC_GRAPH_PARTICLE_HXX +#define XSD_FRONTEND_SEMANTIC_GRAPH_PARTICLE_HXX + +#include <xsd-frontend/semantic-graph/elements.hxx> + +namespace XSDFrontend +{ + namespace SemanticGraph + { + // + // + class Particle; + class Compositor; + + + // + // + class ContainsParticle: public virtual Edge + { + public: + Particle& + particle () const + { + return *particle_; + } + + Compositor& + compositor () const + { + return *compositor_; + } + + public: + UnsignedLong + min () const + { + return min_; + } + + UnsignedLong + max () const + { + return max_; + } + + protected: + friend class Bits::Graph<Node, Edge>; + + ContainsParticle (UnsignedLong min, UnsignedLong max); + + Void + set_left_node (Compositor& n) + { + compositor_ = &n; + } + + Void + set_right_node (Particle& n) + { + particle_ = &n; + } + + Void + clear_left_node (Compositor& n) + { + assert (compositor_ == &n); + compositor_ = 0; + } + + Void + clear_right_node (Particle& n) + { + assert (particle_ == &n); + particle_ = 0; + } + + private: + Particle* particle_; + Compositor* compositor_; + UnsignedLong min_, max_; + }; + + // + // + class Particle: public virtual Node + { + public: + Boolean + contained_particle_p () + { + return contained_particle_ != 0; + } + + ContainsParticle& + contained_particle () + { + assert (contained_particle_ != 0); + return *contained_particle_; + } + + public: + UnsignedLong + min () const + { + assert (contained_particle_ != 0); + return contained_particle_->min (); + } + + UnsignedLong + max () const + { + assert (contained_particle_ != 0); + return contained_particle_->max (); + } + + protected: + friend class Bits::Graph<Node, Edge>; + + Particle (); + + Void + add_edge_right (ContainsParticle& e) + { + contained_particle_ = &e; + } + + Void + remove_edge_right (ContainsParticle& e) + { + assert (contained_particle_ == &e); + contained_particle_ = 0; + } + + private: + ContainsParticle* contained_particle_; + }; + } +} + +#endif // XSD_FRONTEND_SEMANTIC_GRAPH_PARTICLE_HXX diff --git a/libxsd-frontend/xsd-frontend/semantic-graph/schema.cxx b/libxsd-frontend/xsd-frontend/semantic-graph/schema.cxx new file mode 100644 index 0000000..f812797 --- /dev/null +++ b/libxsd-frontend/xsd-frontend/semantic-graph/schema.cxx @@ -0,0 +1,139 @@ +// file : xsd-frontend/semantic-graph/schema.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <xsd-frontend/semantic-graph/schema.hxx> + +namespace XSDFrontend +{ + namespace SemanticGraph + { + namespace RTTI = Cult::RTTI; + + using RTTI::Access; + using RTTI::TypeInfo; + + namespace + { + // Uses + // + struct UsesInit + { + UsesInit () + { + TypeInfo ti (typeid (Uses)); + ti.add_base (Access::public_, true, typeid (Edge)); + RTTI::insert (ti); + } + + } uses_init_; + + + // Implies + // + struct ImpliesInit + { + ImpliesInit () + { + TypeInfo ti (typeid (Implies)); + ti.add_base (Access::public_, true, typeid (Uses)); + RTTI::insert (ti); + } + + } implies_init_; + + + // Sources + // + struct SourcesInit + { + SourcesInit () + { + TypeInfo ti (typeid (Sources)); + ti.add_base (Access::public_, true, typeid (Uses)); + RTTI::insert (ti); + } + + } sources_init_; + + + // Includes + // + struct IncludesInit + { + IncludesInit () + { + TypeInfo ti (typeid (Includes)); + ti.add_base (Access::public_, true, typeid (Uses)); + RTTI::insert (ti); + } + + } includes_init_; + + + // Imports + // + struct ImportsInit + { + ImportsInit () + { + TypeInfo ti (typeid (Imports)); + ti.add_base (Access::public_, true, typeid (Uses)); + RTTI::insert (ti); + } + + } imports_init_; + + + // Schema + // + struct SchemaInit + { + SchemaInit () + { + TypeInfo ti (typeid (Schema)); + ti.add_base (Access::public_, true, typeid (Scope)); + RTTI::insert (ti); + } + + } schema_init_; + } + + + // Schema + // + Schema::NamesIteratorPair Schema:: + find (Name const& name) const + { + // Here we are going to create an illusion that the namespace + // hierarchy is flat. + names_.clear (); + schemas_.clear (); + + find_ (name, names_, schemas_); + + return NamesIteratorPair (NamesConstIterator (names_.begin ()), + NamesConstIterator (names_.end ())); + } + + Void Schema:: + find_ (Name const& name, NamesList& names, SchemaSet& set) const + { + set.insert (this); + + // Check our own namespace first so it will end up first in the list. + // + NamesIteratorPair pair (Scope::find (name)); + names.insert (names.end (), pair.first.base (), pair.second.base ()); + + for (UsesIterator i (uses_begin ()), end (uses_end ()); i != end; ++i) + { + Schema& s (i->schema ()); + + if (set.find (&s) == set.end ()) + s.find_ (name, names, set); + } + } + } +} diff --git a/libxsd-frontend/xsd-frontend/semantic-graph/schema.hxx b/libxsd-frontend/xsd-frontend/semantic-graph/schema.hxx new file mode 100644 index 0000000..10d2f75 --- /dev/null +++ b/libxsd-frontend/xsd-frontend/semantic-graph/schema.hxx @@ -0,0 +1,281 @@ +// file : xsd-frontend/semantic-graph/schema.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_FRONTEND_SEMANTIC_GRAPH_SCHEMA_HXX +#define XSD_FRONTEND_SEMANTIC_GRAPH_SCHEMA_HXX + +#include <cult/containers/set.hxx> + +#include <xsd-frontend/semantic-graph/elements.hxx> +#include <xsd-frontend/semantic-graph/namespace.hxx> + +namespace XSDFrontend +{ + namespace SemanticGraph + { + // + // + class Schema; + + + class Uses: public virtual Edge + { + public: + Schema& + user () const + { + return *user_; + } + + Schema& + schema () const + { + return *schema_; + } + + Path + path () const + { + return path_; + } + + protected: + friend class Bits::Graph<Node, Edge>; + + Uses (Path const& path) + : path_ (path) + { + } + + Void + set_left_node (Schema& s) + { + user_ = &s; + } + + Void + set_right_node (Schema& s) + { + schema_ = &s; + } + + private: + Path path_; + Schema* user_; + Schema* schema_; + }; + + + // + // + class Implies: public virtual Uses + { + protected: + friend class Bits::Graph<Node, Edge>; + + Implies (Path const& path) + : Uses (path) + { + } + }; + + + // + // + class Sources: public virtual Uses + { + protected: + friend class Bits::Graph<Node, Edge>; + + Sources (Path const& path) + : Uses (path) + { + } + }; + + + // + // + class Includes: public virtual Uses + { + protected: + friend class Bits::Graph<Node, Edge>; + + Includes (Path const& path) + : Uses (path) + { + } + }; + + + // + // + class Imports: public virtual Uses + { + protected: + friend class Bits::Graph<Node, Edge>; + + Imports (Path const& path) + : Uses (path) + { + } + }; + + + // + // + class Schema: public virtual Scope, + private Bits::Graph<Node, Edge>, + public NonCopyable + { + typedef + Cult::Containers::Vector<Uses*> + UsesList; + + typedef + Cult::Containers::Vector<Uses*> + UsedList; + + public: + Schema (Path const& file, UnsignedLong line, UnsignedLong column) + : SemanticGraph::Node (file, line, column) + { + } + + public: + typedef + Bits::PointerIterator<UsesList::ConstIterator> + UsesIterator; + + UsesIterator + uses_begin () const + { + return uses_.begin (); + } + + UsesIterator + uses_end () const + { + return uses_.end (); + } + + typedef + Bits::PointerIterator<UsedList::ConstIterator> + UsedIterator; + + UsedIterator + used_begin () const + { + return used_.begin (); + } + + UsedIterator + used_end () const + { + return used_.end (); + } + + Boolean + used_p () const + { + return used_begin () != used_end (); + } + + virtual NamesIteratorPair + find (Name const& name) const; + + public: + using Bits::Graph<SemanticGraph::Node, Edge>::new_edge; + using Bits::Graph<SemanticGraph::Node, Edge>::reset_left_node; + using Bits::Graph<SemanticGraph::Node, Edge>::reset_right_node; + using Bits::Graph<SemanticGraph::Node, Edge>::add_edge_left; + using Bits::Graph<SemanticGraph::Node, Edge>::add_edge_right; + using Bits::Graph<SemanticGraph::Node, Edge>::delete_node; + using Bits::Graph<SemanticGraph::Node, Edge>::delete_edge; + + template <typename T> + T& + new_node (Path const& file, UnsignedLong line, UnsignedLong column) + { + return graph ().new_node<T> (file, line, column); + } + + template <typename T, typename A0> + T& + new_node (Path const& file, UnsignedLong line, UnsignedLong column, + A0 const& a0) + { + return graph ().new_node<T> (file, line, column, a0); + } + + template <typename T, typename A0, typename A1> + T& + new_node (Path const& file, UnsignedLong line, UnsignedLong column, + A0 const& a0, A1 const& a1) + { + return graph ().new_node<T> (file, line, column, a0, a1); + } + + template <typename T, typename A0, typename A1, typename A2> + T& + new_node (Path const& file, UnsignedLong line, UnsignedLong column, + A0 const& a0, A1 const& a1, A2 const& a2) + { + return graph ().new_node<T> (file, line, column, a0, a1, a2); + } + + template <typename T, typename A0, typename A1, typename A2, + typename A3> + T& + new_node (Path const& file, UnsignedLong line, UnsignedLong column, + A0 const& a0, A1 const& a1, A2 const& a2, A3 const& a3) + { + return graph ().new_node<T> (file, line, column, a0, a1, a2, a3); + } + + protected: + //@@ gcc bug #21146 + // + friend class Bits::Graph<SemanticGraph::Node, Edge>; + + using Scope::add_edge_left; + using Node::add_edge_right; + + Void + add_edge_left (Uses& e) + { + uses_.push_back (&e); + } + + Void + add_edge_right (Uses& e) + { + used_.push_back (&e); + } + + private: + Bits::Graph<SemanticGraph::Node, Edge>& + graph () + { + return *this; + } + + private: + UsesList uses_; + UsedList used_; + + private: + typedef Cult::Containers::Set<Schema const*> SchemaSet; + + Void + find_ (Name const& name, NamesList&, SchemaSet&) const; + + mutable NamesList names_; + mutable SchemaSet schemas_; + }; + } +} + +#endif // XSD_FRONTEND_SEMANTIC_GRAPH_SCHEMA_HXX diff --git a/libxsd-frontend/xsd-frontend/semantic-graph/union.cxx b/libxsd-frontend/xsd-frontend/semantic-graph/union.cxx new file mode 100644 index 0000000..b4b4cf0 --- /dev/null +++ b/libxsd-frontend/xsd-frontend/semantic-graph/union.cxx @@ -0,0 +1,37 @@ +// file : xsd-frontend/semantic-graph/union.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <xsd-frontend/semantic-graph/union.hxx> + +namespace XSDFrontend +{ + namespace SemanticGraph + { + namespace RTTI = Cult::RTTI; + + using RTTI::Access; + using RTTI::TypeInfo; + + namespace + { + struct UnionInit + { + UnionInit () + { + TypeInfo ti (typeid (Union)); + ti.add_base (Access::public_, true, typeid (Specialization)); + RTTI::insert (ti); + } + + } union_init_; + } + + Union:: + Union (Path const& file, UnsignedLong line, UnsignedLong column) + : Node (file, line, column) + { + } + } +} diff --git a/libxsd-frontend/xsd-frontend/semantic-graph/union.hxx b/libxsd-frontend/xsd-frontend/semantic-graph/union.hxx new file mode 100644 index 0000000..62df730 --- /dev/null +++ b/libxsd-frontend/xsd-frontend/semantic-graph/union.hxx @@ -0,0 +1,25 @@ +// file : xsd-frontend/semantic-graph/union.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_FRONTEND_SEMANTIC_GRAPH_UNION_HXX +#define XSD_FRONTEND_SEMANTIC_GRAPH_UNION_HXX + +#include <xsd-frontend/semantic-graph/elements.hxx> + +namespace XSDFrontend +{ + namespace SemanticGraph + { + class Union: public virtual Specialization + { + protected: + friend class Bits::Graph<Node, Edge>; + + Union (Path const& file, UnsignedLong line, UnsignedLong column); + }; + } +} + +#endif // XSD_FRONTEND_SEMANTIC_GRAPH_UNION_HXX diff --git a/libxsd-frontend/xsd-frontend/transformations/anonymous.cxx b/libxsd-frontend/xsd-frontend/transformations/anonymous.cxx new file mode 100644 index 0000000..118fd5d --- /dev/null +++ b/libxsd-frontend/xsd-frontend/transformations/anonymous.cxx @@ -0,0 +1,739 @@ +// file : xsd-frontend/transformations/anonymous.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <xsd-frontend/transformations/anonymous.hxx> + +#include <xsd-frontend/semantic-graph.hxx> +#include <xsd-frontend/traversal.hxx> + +#include <iostream> +#include <sstream> + +using std::wcerr; +using std::endl; + +namespace XSDFrontend +{ + using namespace Cult; + + typedef WideString String; + + namespace + { + using Transformations::AnonymousNameTranslator; + + class Context + { + public: + Context (SemanticGraph::Schema& schema_, + SemanticGraph::Path const& file, + AnonymousNameTranslator& trans_, + Boolean du) + : schema_path_ (file), + ns_ (0), + failed_ (false), + trans (trans_), + detect_unstable (du), + schema (schema_), + schema_path (schema_path_), + ns (ns_), + failed (failed_) + { + + } + + protected: + Context (Context& c) + : trans (c.trans), + detect_unstable (c.detect_unstable), + schema (c.schema), + schema_path (c.schema_path), + ns (c.ns), + failed (c.failed) + { + } + + public: + struct UnstableConflict + { + UnstableConflict (SemanticGraph::Type& type) + : type_ (type) + { + } + + SemanticGraph::Type& + type () const + { + return type_; + } + + private: + SemanticGraph::Type& type_; + }; + + Boolean + conflict (String const& name) + { + using SemanticGraph::Type; + using SemanticGraph::Schema; + + if (Type* t1 = find (schema, name)) + { + // Check if this is a stable conflict. A conflict is unstable + // if a conflicting type is visible from the root schema but + // is not visible from the schema where the conflicting + // element is defined. + // + if (detect_unstable) + { + Schema& s (dynamic_cast<Schema&> (ns->scope ())); + + Type* t2 (find (s, name)); + + if (t1 != t2) + throw UnstableConflict (*t1); + } + + return true; + } + + return false; + } + + SemanticGraph::Type* + find (SemanticGraph::Schema& schema, String const& name) + { + using SemanticGraph::Type; + using SemanticGraph::Scope; + using SemanticGraph::Namespace; + + String ns_name (ns->name ()); + + // Get all namespaces across include/import hierarchy with + // our namespace name. + // + Scope::NamesIteratorPair nip (schema.find (ns_name)); + + for (; nip.first != nip.second; ++nip.first) + { + Namespace& ns (dynamic_cast<Namespace&> (nip.first->named ())); + + Scope::NamesIteratorPair types (ns.find (name)); + + for (; types.first != types.second; ++types.first) + { + if (Type* t = dynamic_cast<Type*> (&types.first->named ())) + { + return t; + } + } + } + + return 0; + } + + public: + SemanticGraph::Path + path (SemanticGraph::Nameable& n) + { + using SemanticGraph::Scope; + using SemanticGraph::Schema; + using SemanticGraph::Uses; + + Schema* schema (0); + + for (Scope* s (dynamic_cast<Scope*> (&n) + ? dynamic_cast<Scope*> (&n) : &n.scope ());; + s = &s->scope ()) + { + if ((schema = dynamic_cast<Schema*> (s))) + break; + } + + if (!schema->used_p ()) + return schema_path; + + Uses& u (*schema->used_begin ()); + return u.path (); + } + + public: + String + xpath (SemanticGraph::Nameable& n) + { + if (dynamic_cast<SemanticGraph::Namespace*> (&n) != 0) + return L"<namespace-level>"; // There is a bug if you see this. + + assert (n.named_p ()); + + SemanticGraph::Scope& scope (n.scope ()); + + if (dynamic_cast<SemanticGraph::Namespace*> (&scope) != 0) + return n.name (); + + return xpath (scope) + L"/" + n.name (); + } + + private: + SemanticGraph::Path const schema_path_; + SemanticGraph::Namespace* ns_; + Boolean failed_; + + public: + AnonymousNameTranslator& trans; + Boolean detect_unstable; + + public: + SemanticGraph::Schema& schema; + SemanticGraph::Path const& schema_path; + SemanticGraph::Namespace*& ns; + Boolean& failed; + }; + + + // Go into implied/included/imported schemas while making sure + // we don't process the same stuff more than once. + // + struct Uses: Traversal::Uses + { + virtual Void + traverse (Type& u) + { + SemanticGraph::Schema& s (u.schema ()); + + if (!s.context ().count ("xsd-frontend-anonymous-seen")) + { + s.context ().set ("xsd-frontend-anonymous-seen", true); + Traversal::Uses::traverse (u); + } + } + }; + + // Keep track which namespace we are in. + // + struct Namespace: Traversal::Namespace + { + Namespace (SemanticGraph::Namespace*& ns) + : ns_ (ns) + { + } + + Void + pre (SemanticGraph::Namespace& ns) + { + ns_ = &ns; + } + + Void + post (SemanticGraph::Namespace&) + { + ns_ = 0; + } + + private: + SemanticGraph::Namespace*& ns_; + }; + + // + // + struct Type: Traversal::List, + Traversal::Union, + Traversal::Complex, + protected virtual Context + { + Type (Context& c) + : Context (c) + { + } + + virtual Void + traverse (SemanticGraph::List& l) + { + SemanticGraph::Type& t (l.argumented ().type ()); + + //@@ This IDREF stuff is really ugly! + // + if (!t.named_p () && + !t.is_a<SemanticGraph::Fundamental::IdRef> () && + !t.is_a<SemanticGraph::Fundamental::IdRefs> ()) + { + try + { + // Run the name through the translation service. + // + SemanticGraph::Path file (path (l)); + String file_str; + + // Try to use the portable representation of the path. If that + // fails, fall back to the native representation. + // + try + { + file_str = file.string (); + } + catch (SemanticGraph::InvalidPath const&) + { +#if !defined(BOOST_FILESYSTEM_VERSION) || BOOST_FILESYSTEM_VERSION == 2 + file_str = file.native_file_string (); +#else + file_str = file.string (); +#endif + } + + String name ( + trans.translate ( + file_str, ns->name (), l.name () + L"_item", xpath (l))); + + // Make sure the name is unique. + // + UnsignedLong n (1); + String escaped (name); + + while (conflict (escaped)) + { + std::wostringstream os; + os << n++; + escaped = name + os.str (); + } + + t.context ().set ("anonymous", true); + schema.new_edge<SemanticGraph::Names> (*ns, t, escaped); + } + catch (UnstableConflict const& ex) + { + SemanticGraph::Type& t (ex.type ()); + + wcerr << l.file () << ":" << l.line () << ":" << l.column () + << ": error: list type name '" << xpath (l) << "' " + << "creates an unstable conflict when used as a base " + << "for the item type name" + << endl; + + wcerr << t.file () << ":" << t.line () << ":" << t.column () + << ": info: conflicting type is defined here" << endl; + + wcerr << l.file () << ":" << l.line () << ":" << l.column () + << ": info: " + << "use --anonymous-regex to resolve this conflict" + << endl; + + wcerr << l.file () << ":" << l.line () << ":" << l.column () + << ": info: " + << "and don't forget to pass the same option when " + << "translating '" << l.file ().leaf () << "' and all " + << "the schemas that refer to it" << endl; + + failed = true; + } + } + } + + virtual Void + traverse (SemanticGraph::Union& u) + { + String file_str; + + for (SemanticGraph::Union::ArgumentedIterator i ( + u.argumented_begin ()); i != u.argumented_end (); ++i) + { + SemanticGraph::Type& t (i->type ()); + + if (!t.named_p () && + !t.is_a<SemanticGraph::Fundamental::IdRef> () && + !t.is_a<SemanticGraph::Fundamental::IdRefs> ()) + { + try + { + // Run the name through the translation service. + // + + if (!file_str) + { + SemanticGraph::Path file (path (u)); + + // Try to use the portable representation of the path. If + // that fails, fall back to the native representation. + // + try + { + file_str = file.string (); + } + catch (SemanticGraph::InvalidPath const&) + { +#if !defined(BOOST_FILESYSTEM_VERSION) || BOOST_FILESYSTEM_VERSION == 2 + file_str = file.native_file_string (); +#else + file_str = file.string (); +#endif + } + } + + String name ( + trans.translate ( + file_str, ns->name (), u.name () + L"_member", xpath (u))); + + // Make sure the name is unique. + // + UnsignedLong n (1); + String escaped (name); + + while (conflict (escaped)) + { + std::wostringstream os; + os << n++; + escaped = name + os.str (); + } + + t.context ().set ("anonymous", true); + schema.new_edge<SemanticGraph::Names> (*ns, t, escaped); + } + catch (UnstableConflict const& ex) + { + SemanticGraph::Type& t (ex.type ()); + + wcerr << u.file () << ":" << u.line () << ":" << u.column () + << ": error: union type name '" << xpath (u) << "' " + << "creates an unstable conflict when used as a base " + << "for the member type name" + << endl; + + wcerr << t.file () << ":" << t.line () << ":" << t.column () + << ": info: conflicting type is defined here" << endl; + + wcerr << u.file () << ":" << u.line () << ":" << u.column () + << ": info: " + << "use --anonymous-regex to resolve this conflict" + << endl; + + wcerr << u.file () << ":" << u.line () << ":" << u.column () + << ": info: " + << "and don't forget to pass the same option when " + << "translating '" << u.file ().leaf () << "' and all " + << "the schemas that refer to it" << endl; + + failed = true; + } + } + } + } + + virtual Void + traverse (SemanticGraph::Complex& c) + { + if (!c.inherits_p ()) + return; + + SemanticGraph::Type& t (c.inherits ().base ()); + + //@@ This IDREF stuff is really ugly! + // + if (!t.named_p () && + !t.is_a<SemanticGraph::Fundamental::IdRef> () && + !t.is_a<SemanticGraph::Fundamental::IdRefs> ()) + { + try + { + // Run the name through the translation service. + // + SemanticGraph::Path file (path (c)); + String file_str; + + // Try to use the portable representation of the path. If that + // fails, fall back to the native representation. + // + try + { + file_str = file.string (); + } + catch (SemanticGraph::InvalidPath const&) + { +#if !defined(BOOST_FILESYSTEM_VERSION) || BOOST_FILESYSTEM_VERSION == 2 + file_str = file.native_file_string (); +#else + file_str = file.string (); +#endif + } + + String name ( + trans.translate ( + file_str, ns->name (), c.name () + L"_base", xpath (c))); + + // Make sure the name is unique. + // + UnsignedLong n (1); + String escaped (name); + + while (conflict (escaped)) + { + std::wostringstream os; + os << n++; + escaped = name + os.str (); + } + + t.context ().set ("anonymous", true); + schema.new_edge<SemanticGraph::Names> (*ns, t, escaped); + } + catch (UnstableConflict const& ex) + { + SemanticGraph::Type& t (ex.type ()); + + wcerr << c.file () << ":" << c.line () << ":" << c.column () + << ": error: simple type name '" << xpath (c) << "' " + << "creates an unstable conflict when used as a base " + << "for the base type name" + << endl; + + wcerr << t.file () << ":" << t.line () << ":" << t.column () + << ": info: conflicting type is defined here" << endl; + + wcerr << c.file () << ":" << c.line () << ":" << c.column () + << ": info: " + << "use --anonymous-regex to resolve this conflict" + << endl; + + wcerr << c.file () << ":" << c.line () << ":" << c.column () + << ": info: " + << "and don't forget to pass the same option when " + << "translating '" << c.file ().leaf () << "' and all " + << "the schemas that refer to it" << endl; + + failed = true; + } + } + } + }; + + + // + // + struct Member: Traversal::Element, + Traversal::Attribute, + protected virtual Context + { + Member (Context& c) + : Context (c) + { + } + + virtual Void + traverse (SemanticGraph::Element& e) + { + SemanticGraph::Type& t (e.type ()); + + //@@ This IDREF stuff is really ugly! + // + if (!t.named_p () && + !t.is_a<SemanticGraph::Fundamental::IdRef> () && + !t.is_a<SemanticGraph::Fundamental::IdRefs> ()) + { + try + { + traverse_ (e); + } + catch (UnstableConflict const& ex) + { + SemanticGraph::Type& t (ex.type ()); + + wcerr << e.file () << ":" << e.line () << ":" << e.column () + << ": error: element name '" << xpath (e) << "' " + << "creates an unstable conflict when used as a type name" + << endl; + + wcerr << t.file () << ":" << t.line () << ":" << t.column () + << ": info: conflicting type is defined here" << endl; + + wcerr << e.file () << ":" << e.line () << ":" << e.column () + << ": info: " + << "use --anonymous-regex to resolve this conflict" + << endl; + + wcerr << e.file () << ":" << e.line () << ":" << e.column () + << ": info: " + << "and don't forget to pass the same option when " + << "translating '" << e.file ().leaf () << "' and all " + << "the schemas that refer to it" << endl; + + failed = true; + } + } + } + + virtual Void + traverse (SemanticGraph::Attribute& a) + { + SemanticGraph::Type& t (a.type ()); + + //@@ This IDREF stuff us really ugly! + // + if (!t.named_p () && + !t.is_a<SemanticGraph::Fundamental::IdRef> () && + !t.is_a<SemanticGraph::Fundamental::IdRefs> ()) + { + try + { + traverse_ (a); + } + catch (UnstableConflict const& ex) + { + SemanticGraph::Type& t (ex.type ()); + + wcerr << a.file () << ":" << a.line () << ":" << a.column () + << ": error: attribute name '" << xpath (a) << "' " + << "creates an unstable conflict when used as a type name" + << endl; + + wcerr << t.file () << ":" << t.line () << ":" << t.column () + << ": info: conflicting type is defined here" << endl; + + wcerr << a.file () << ":" << a.line () << ":" << a.column () + << ": info: " + << "use --anonymous-regex to resolve this conflict" + << endl; + + wcerr << a.file () << ":" << a.line () << ":" << a.column () + << ": info: " + << "and don't forget to pass the same option when " + << "translating '" << a.file ().leaf () << "' and all " + << "the schemas that refer to it" << endl; + + failed = true; + } + } + } + + Void + traverse_ (SemanticGraph::Member& m) + { + using SemanticGraph::Type; + + Type& t (m.type ()); + + // Normally this will be the member which also "defined" the type. + // However, in some cases of cyclic schema inclusion, this does + // not happen. As a result we need an extra check that will make + // sure we create the Names edge in the same Schema node as the + // one which contains the member which initially defined this + // type. See the cyclic-inclusion test for an example. + // + + // Find the first member that this type classifies. + // + for (Type::ClassifiesIterator i (t.classifies_begin ()); + i != t.classifies_end (); ++i) + { + SemanticGraph::Instance& inst (i->instance ()); + + if (inst.is_a<SemanticGraph::Member> ()) + { + // If it is the same member as the one we are traversing, + // then continue. + // + if (&inst == &m) + break; + else + return; + } + } + + // Run the name through the translation service. + // + SemanticGraph::Path file (path (m)); + String file_str; + + // Try to use the portable representation of the path. If that + // fails, fall back to the native representation. + // + try + { + file_str = file.string (); + } + catch (SemanticGraph::InvalidPath const&) + { +#if !defined(BOOST_FILESYSTEM_VERSION) || BOOST_FILESYSTEM_VERSION == 2 + file_str = file.native_file_string (); +#else + file_str = file.string (); +#endif + } + + String name ( + trans.translate (file_str, ns->name (), m.name (), xpath (m))); + + // Make sure the name is unique. + // + UnsignedLong n (1); + String escaped (name); + + while (conflict (escaped)) + { + std::wostringstream os; + os << n++; + escaped = name + os.str (); + } + + t.context ().set ("anonymous", true); + schema.new_edge<SemanticGraph::Names> (*ns, t, escaped); + } + }; + } + + namespace Transformations + { + Anonymous:: + Anonymous (AnonymousNameTranslator& trans) + : trans_ (trans) + { + } + + Void Anonymous:: + transform (SemanticGraph::Schema& s, + SemanticGraph::Path const& f, + Boolean duc) + { + Context ctx (s, f, trans_, duc); + + Traversal::Schema schema; + Uses uses; + + schema >> uses >> schema; + + Traversal::Names schema_names; + Namespace ns (ctx.ns); + Traversal::Names ns_names_member; + Traversal::Names ns_names_type; + + schema >> schema_names >> ns; + ns >> ns_names_member; + ns >> ns_names_type; + + Type type (ctx); + ns_names_type >> type; + + Traversal::Scope scope; // Goes to both types and groups. + Member member (ctx); + + ns_names_member >> scope; + ns_names_member >> member; + + Traversal::Names names; + + scope >> names >> member; + + // Some twisted schemas do recusive inclusions. + // + s.context ().set ("xsd-frontend-anonymous-seen", true); + + schema.dispatch (s); + + if (ctx.failed) + throw Failed (); + } + + AnonymousNameTranslator:: + ~AnonymousNameTranslator () + { + } + } +} diff --git a/libxsd-frontend/xsd-frontend/transformations/anonymous.hxx b/libxsd-frontend/xsd-frontend/transformations/anonymous.hxx new file mode 100644 index 0000000..2409822 --- /dev/null +++ b/libxsd-frontend/xsd-frontend/transformations/anonymous.hxx @@ -0,0 +1,60 @@ +// file : xsd-frontend/transformations/anonymous.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_FRONTEND_TRANSFORMATIONS_ANONYMOUS_HXX +#define XSD_FRONTEND_TRANSFORMATIONS_ANONYMOUS_HXX + +#include <cult/types.hxx> + +#include <xsd-frontend/semantic-graph/elements.hxx> // Path +#include <xsd-frontend/semantic-graph/schema.hxx> + +namespace XSDFrontend +{ + namespace Transformations + { + using namespace Cult::Types; + + class AnonymousNameTranslator + { + public: + virtual + ~AnonymousNameTranslator (); + + // The file argument is empty for the currect translation + // unit. + // + virtual WideString + translate (WideString const& file, + WideString const& ns, + WideString const& name, + WideString const& xpath) = 0; + }; + + // This transformation morphs anonymous types into named ones + // with the names derived from the enclosing attributes and + // elements. If the detect_unstable_conflicts argument is true + // then the transformation detects and reports unstable conflicts + // in name assignment. + // + class Anonymous + { + public: + struct Failed {}; + + Anonymous (AnonymousNameTranslator&); + + Void + transform (SemanticGraph::Schema&, + SemanticGraph::Path const&, + Boolean detect_unstable_conflicts); + + private: + AnonymousNameTranslator& trans_; + }; + } +} + +#endif // XSD_FRONTEND_TRANSFORMATIONS_ANONYMOUS_HXX diff --git a/libxsd-frontend/xsd-frontend/transformations/enum-synthesis.cxx b/libxsd-frontend/xsd-frontend/transformations/enum-synthesis.cxx new file mode 100644 index 0000000..e10b9d3 --- /dev/null +++ b/libxsd-frontend/xsd-frontend/transformations/enum-synthesis.cxx @@ -0,0 +1,249 @@ +// file : xsd-frontend/transformations/enum-synthesis.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <xsd-frontend/transformations/enum-synthesis.hxx> + +#include <xsd-frontend/semantic-graph.hxx> +#include <xsd-frontend/traversal.hxx> + +#include <cult/containers/set.hxx> + +namespace XSDFrontend +{ + using namespace Cult; + typedef WideString String; + + namespace + { + typedef Cult::Containers::Set<String> Enumerators; + + struct Enumerator: Traversal::Enumerator + { + Enumerator (SemanticGraph::Schema& s, + SemanticGraph::Enumeration& e, + Enumerators& enumerators) + : schema_ (s), enum_ (e), enumerators_ (enumerators) + { + } + + virtual Void + traverse (Type& e) + { + String const& name (e.name ()); + + if (enumerators_.find (name) == enumerators_.end ()) + { + enumerators_.insert (name); + + // Clone the enumerator and add it to enum_. + // + Type& c (schema_.new_node<Type> (e.file (), e.line (), e.column ())); + + schema_.new_edge<SemanticGraph::Names> (enum_, c, name); + schema_.new_edge<SemanticGraph::Belongs> (c, enum_); + + if (e.annotated_p ()) + schema_.new_edge<SemanticGraph::Annotates> (e.annotation (), c); + } + } + + private: + SemanticGraph::Schema& schema_; + SemanticGraph::Enumeration& enum_; + Enumerators& enumerators_; + }; + + // + // + struct Union: Traversal::Union + { + Union (SemanticGraph::Schema& schema) + : schema_ (schema) + { + } + + virtual Void + traverse (Type& u) + { + using SemanticGraph::Enumeration; + + SemanticGraph::Context& uc (u.context ()); + + if (uc.count ("xsd-frontend-enum-synthesis-processed")) + return; + + uc.set ("xsd-frontend-enum-synthesis-processed", true); + + // First see if this union is suitable for synthesis. + // + SemanticGraph::Type* base (0); + + for (Type::ArgumentedIterator i (u.argumented_begin ()); + i != u.argumented_end (); ++i) + { + if (i->type ().is_a<SemanticGraph::Union> ()) + { + // See if we can synthesize an enum for this union. This + // call can change the value i->type() returns. + // + dispatch (i->type ()); + } + + SemanticGraph::Type& t (i->type ()); + + if (!t.is_a<Enumeration> ()) + return; + + // Make sure all the enums have a common base. + // + if (base == 0) + base = &t; + else + { + // Traverse the inheritance hierarchy until we fine a + // common base. + // + while (base != 0) + { + SemanticGraph::Type* b (&t); + + for (; b != base && b->inherits_p (); + b = &b->inherits ().base ()) ; + + if (base == b) + break; + + // Could not find any match on this level. Go one step + // lower and try again. + // + base = base->inherits_p () ? &base->inherits ().base () : 0; + } + + if (base == 0) + return; // No common base. + } + } + + if (base == 0) + return; // Empty union. + + // So this union is suitable for synthesis. Base variable points + // to the "most-derived" common base type. + // + Enumeration& e (schema_.new_node<Enumeration> ( + u.file (), u.line (), u.column ())); + + schema_.new_edge<SemanticGraph::Restricts> (e, *base); + + // Copy enumerators from the member enums. + // + { + Enumerators set; + Traversal::Enumeration en; + Traversal::Names names; + Enumerator er (schema_, e, set); + en >> names >> er; + + for (Type::ArgumentedIterator i (u.argumented_begin ()); + i != u.argumented_end (); ++i) + { + en.dispatch (i->type ()); + } + } + + // Reset edges pointing to union to point to enum. + // + if (u.annotated_p ()) + { + schema_.reset_right_node (u.annotated (), e); + schema_.add_edge_right (e, u.annotated ()); + } + + schema_.reset_right_node (u.named (), e); + schema_.add_edge_right (e, u.named ()); + + for (Type::ClassifiesIterator i (u.classifies_begin ()), + end (u.classifies_end ()); i != end; ++i) + { + schema_.reset_right_node (*i, e); + schema_.add_edge_right (e, *i); + } + + for (Type::BegetsIterator i (u.begets_begin ()), + end (u.begets_end ()); i != end; ++i) + { + schema_.reset_right_node (*i, e); + schema_.add_edge_right (e, *i); + } + + for (Type::ArgumentsIterator i (u.arguments_begin ()), + end (u.arguments_end ()); i != end; ++i) + { + schema_.reset_left_node (*i, e); + schema_.add_edge_left (e, *i); + } + + // Remove Arguments edges pointing to the union. + // + while (u.argumented_begin () != u.argumented_end ()) + { + SemanticGraph::Arguments& a (*u.argumented_begin ()); + schema_.delete_edge (a.type (), a.specialization (), a); + } + + // Copy context and delete the union node. + // + e.context ().swap (uc); + schema_.delete_node (u); + } + + private: + SemanticGraph::Schema& schema_; + }; + + // Go into implied/included/imported schemas while making sure + // we don't process the same stuff more than once. + // + struct Uses: Traversal::Uses + { + virtual Void + traverse (Type& u) + { + SemanticGraph::Schema& s (u.schema ()); + + if (!s.context ().count ("xsd-frontend-enum-synthesis-seen")) + { + s.context ().set ("xsd-frontend-enum-synthesis-seen", true); + Traversal::Uses::traverse (u); + } + } + }; + } + + namespace Transformations + { + Void EnumSynthesis:: + transform (SemanticGraph::Schema& s, SemanticGraph::Path const&) + { + Traversal::Schema schema; + Uses uses; + + schema >> uses >> schema; + + Traversal::Names schema_names; + Traversal::Namespace ns; + Traversal::Names ns_names; + Union u (s); + + schema >> schema_names >> ns >> ns_names >> u; + + // Some twisted schemas do recusive inclusions. + // + s.context ().set ("xsd-frontend-enum-synthesis-seen", true); + + schema.dispatch (s); + } + } +} diff --git a/libxsd-frontend/xsd-frontend/transformations/enum-synthesis.hxx b/libxsd-frontend/xsd-frontend/transformations/enum-synthesis.hxx new file mode 100644 index 0000000..e3c38c7 --- /dev/null +++ b/libxsd-frontend/xsd-frontend/transformations/enum-synthesis.hxx @@ -0,0 +1,33 @@ +// file : xsd-frontend/transformations/enum-synthesis.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_FRONTEND_TRANSFORMATIONS_ENUM_SYNTHESIS_HXX +#define XSD_FRONTEND_TRANSFORMATIONS_ENUM_SYNTHESIS_HXX + +#include <cult/types.hxx> + +#include <xsd-frontend/semantic-graph/elements.hxx> // Path +#include <xsd-frontend/semantic-graph/schema.hxx> + +namespace XSDFrontend +{ + namespace Transformations + { + using namespace Cult::Types; + + // This transformation replaces unions of one or more enumerations + // with the same base with an equivalent synthesized enumeration. + // This transformation assumes that there are no anonymous types. + // + class EnumSynthesis + { + public: + Void + transform (SemanticGraph::Schema&, SemanticGraph::Path const&); + }; + } +} + +#endif // XSD_FRONTEND_TRANSFORMATIONS_ENUM_SYNTHESIS_HXX diff --git a/libxsd-frontend/xsd-frontend/transformations/restriction.cxx b/libxsd-frontend/xsd-frontend/transformations/restriction.cxx new file mode 100644 index 0000000..c58d98f --- /dev/null +++ b/libxsd-frontend/xsd-frontend/transformations/restriction.cxx @@ -0,0 +1,582 @@ +// file : xsd-frontend/transformations/restriction.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <xsd-frontend/transformations/restriction.hxx> + +#include <xsd-frontend/semantic-graph.hxx> +#include <xsd-frontend/traversal.hxx> + +#include <cult/containers/vector.hxx> + +#include <iostream> + +using std::wcerr; +using std::endl; + +namespace XSDFrontend +{ + using namespace Cult; + + typedef WideString String; + typedef Transformations::Restriction::Failed Failed; + typedef Containers::Vector<SemanticGraph::Complex*> BaseList; + + namespace + { + // + // + struct Complex: Traversal::Complex + { + Complex (SemanticGraph::Schema& schema) + : schema_ (schema) + { + } + + virtual Void + traverse (Type& c) + { + using namespace SemanticGraph; + using SemanticGraph::Complex; + + if (c.context ().count ("xsd-frontend-restriction-seen")) + return; + + c.context ().set ("xsd-frontend-restriction-seen", true); + + // The base content model can be spread over several types + // in the inheritance-by-extension hierarchy. + // + BaseList base_model; + + // Since attribute wildcards don't have names, we will have + // to rely on their relative position to find association. + // + BaseList base_list; + + // Current implementation of semantic graph uses the same Restricts + // edge for both simple type/content restriction and complex content + // restriction. Here we are interested in the complex content only. + // + // + if (c.inherits_p () && + c.inherits ().is_a<Restricts> () && + !c.inherits ().base ().is_a<AnyType> ()) + { + // Go down our inheritance hierarchy until the end or the previous + // restriction. + // + Complex* base (&c); + + while ((base = dynamic_cast<Complex*> (&base->inherits ().base ()))) + { + traverse (*base); // Make sure our base is processed. + + // Handle attributes. + // + merge_attributes (c, *base); + + base_list.push_back (base); + + // Collect types that have complex content. + // + if (base->contains_compositor_p ()) + base_model.push_back (base); + + if (!base->inherits_p () || base->inherits ().is_a<Restricts> ()) + break; + } + + // Handle attribute wildcards. + // + handle_any_attributes (c, base_list); + + // Handle complex content (not for the faint of heart). + // + if (c.contains_compositor_p ()) + { + // Traverse both restricted content model and base content + // model (in base_model) while looking for matches. + // + Compositor& root (c.contains_compositor ().compositor ()); + + if (base_model.size () == 1) + handle (root, + base_model[0]->contains_compositor ().compositor ()); + else + { + Compositor::ContainsIterator i (root.contains_begin ()); + BaseList::ReverseIterator j (base_model.rbegin ()); + + for (; i != root.contains_end (); ++i, ++j) + { + Particle& p (i->particle ()); + + if (!p.is_a<Compositor> ()) + { + wcerr << p.file () << ":" << p.line () << ":" << p.column () + << ": error: expected compositor instead of particle" + << endl; + throw Failed (); + } + + for (; j != base_model.rend (); ++j) + { + if (match (p, (*j)->contains_compositor ().compositor ())) + { + handle (p, (*j)->contains_compositor ().compositor ()); + break; + } + } + + if (j == base_model.rend ()) + break; + } + + if (i != root.contains_end ()) + { + Particle& p (i->particle ()); + + wcerr << p.file () << ":" << p.line () << ":" << p.column () + << ": error: unable to match restricted compositor" + << endl; + throw Failed (); + } + } + } + } + + // Traverse anonymous types (via elements & attributes). + // + Traversal::Complex::names (c); + } + + private: + Void + handle (SemanticGraph::Particle& r, SemanticGraph::Particle& b) + { + using namespace SemanticGraph; + + if (r.is_a<Compositor> ()) + { + Compositor& rc (dynamic_cast<Compositor&> (r)); + Compositor& bc (dynamic_cast<Compositor&> (b)); + + Compositor::ContainsIterator i (rc.contains_begin ()); + Compositor::ContainsIterator j (bc.contains_begin ()); + + for (; i != rc.contains_end (); ++i, ++j) + { + for (; j != bc.contains_end (); ++j) + { + Particle& rp (i->particle ()); + Particle& bp (j->particle ()); + + if (typeid (rp) != typeid (bp)) + continue; + + if (match (rp, bp)) + { + handle (rp, bp); + break; + } + } + + if (j == bc.contains_end ()) + break; + } + + if (i != rc.contains_end ()) + { + Particle& p (i->particle ()); + + wcerr << p.file () << ":" << p.line () << ":" << p.column () + << ": error: unable to match restricted particle" + << endl; + throw Failed (); + } + + rc.context ().set ("xsd-frontend-restriction-correspondence", &bc); + } + else if (r.is_a<Element> ()) + { + // Element + // + r.context ().set ("xsd-frontend-restriction-correspondence", + dynamic_cast<Element*> (&b)); + } + else + { + // Wildcard + // + r.context ().set ("xsd-frontend-restriction-correspondence", + dynamic_cast<Any*> (&b)); + } + } + + Boolean + match (SemanticGraph::Particle& r, SemanticGraph::Particle& b) + { + using namespace SemanticGraph; + + if (typeid (r) != typeid (b)) + return false; + + if (r.is_a<Compositor> ()) + { + Compositor& rc (dynamic_cast<Compositor&> (r)); + Compositor& bc (dynamic_cast<Compositor&> (b)); + + Compositor::ContainsIterator i (rc.contains_begin ()); + + if (i == rc.contains_end ()) + return true; + + Particle& rp (i->particle ()); + + for (Compositor::ContainsIterator j (bc.contains_begin ()); + j != bc.contains_end (); ++j) + { + Particle& bp (j->particle ()); + + if (typeid (rp) != typeid (bp)) + continue; + + if (match (rp, bp)) + return true; + } + } + else if (r.is_a<Element> ()) + { + Element& re (dynamic_cast<Element&> (r)); + Element& be (dynamic_cast<Element&> (b)); + + if (re.qualified_p ()) + { + if (be.qualified_p () && + re.name () == be.name () && + re.namespace_ ().name () == be.namespace_ ().name ()) + return true; + } + else + { + if (!be.qualified_p () && re.name () == be.name ()) + return true; + } + + // @@ Need to take into account substitution groups. + // + } + else + { + // Wildcard. + // + + // @@ To handle this properly we will need to analyze + // namespaces. + // + return true; + } + + return false; + } + + Void + merge_attributes (SemanticGraph::Complex& c, + SemanticGraph::Complex& base) + { + using namespace SemanticGraph; + + for (Scope::NamesIterator i (base.names_begin ()), + e (base.names_end ()); i != e; ++i) + { + Attribute* prot (dynamic_cast<Attribute*> (&i->named ())); + + if (prot == 0) + continue; + + Name name (prot->name ()); + Scope::NamesIteratorPair r (c.find (name)); + + Attribute* a (0); + + for (; r.first != r.second; ++r.first) + { + a = dynamic_cast<Attribute*> (&r.first->named ()); + + if (a == 0) + continue; + + if (prot->qualified_p ()) + { + if (a->qualified_p () && + prot->namespace_ ().name () == a->namespace_ ().name ()) + { + break; + } + } + else + { + if (!a->qualified_p ()) + break; + } + + a = 0; + } + + if (a == 0) + { + a = &schema_.new_node<Attribute> (prot->file (), + prot->line (), + prot->column (), + prot->optional_p (), + prot->global_p (), + prot->qualified_p ()); + + schema_.new_edge<Names> (c, *a, name); + + // Transfer namespace. + // + if (prot->qualified_p ()) + { + schema_.new_edge<BelongsToNamespace> (*a, prot->namespace_ ()); + } + + // Default and fixed values if any. + // + if (prot->fixed_p ()) + a->fixed (prot->value ()); + else if (prot->default_p ()) + a->default_ (prot->value ()); + + // Belongs edge. + // + schema_.new_edge<Belongs> (*a, prot->type ()); + + // Transfer annotation. + // + if (prot->annotated_p ()) + schema_.new_edge<Annotates> (prot->annotation (), *a); + } + + a->context ().set ("xsd-frontend-restriction-correspondence", prot); + } + } + + Void + handle_any_attributes (SemanticGraph::Complex& c, BaseList& bl) + { + using namespace SemanticGraph; + + BaseList::ReverseIterator bi (bl.rbegin ()), be (bl.rend ()); + Scope::NamesIterator si; + + if (bi != be) + si = (*bi)->names_begin (); + + for (Scope::NamesIterator i (c.names_begin ()), + e (c.names_end ()); i != e; ++i) + { + AnyAttribute* a (dynamic_cast<AnyAttribute*> (&i->named ())); + + if (a == 0) + continue; + + AnyAttribute* p (0); + + while (bi != be) + { + for (; si != (*bi)->names_end (); ++si) + { + p = dynamic_cast<AnyAttribute*> (&si->named ()); + + if (p != 0) + { + ++si; + break; + } + } + + if (p != 0) + break; + + // Didn't find anything in this base. Move on to the next. + // + ++bi; + + if (bi != be) + si = (*bi)->names_begin (); + } + + if (p != 0) + { + a->context ().set ("xsd-frontend-restriction-correspondence", p); + } + else + { + wcerr << a->file () << ":" << a->line () << ":" << a->column () + << ": error: unable to find matching wildcard in base type" + << endl; + throw Failed (); + } + } + } + + private: + SemanticGraph::Schema& schema_; + }; + + // + // + struct Anonymous : Traversal::Element, + Traversal::Attribute + { + Anonymous (Traversal::NodeDispatcherBase& d1) + : complex_ (&d1, 0) + { + *this >> belongs_ >> complex_; + } + + Anonymous (Traversal::NodeDispatcherBase& d1, + Traversal::NodeDispatcherBase& d2) + : complex_ (&d1, &d2) + { + *this >> belongs_ >> complex_; + } + + // Hooks. + // + public: + virtual void + member_pre (SemanticGraph::Member&) + { + } + + virtual void + member_post (SemanticGraph::Member&) + { + } + + public: + + virtual Void + traverse (SemanticGraph::Element& e) + { + SemanticGraph::Type& t (e.type ()); + + if (!t.named_p () && !t.context ().count ("seen")) + { + t.context ().set ("seen", true); + + member_pre (e); + + Element::belongs (e, belongs_); + + member_post (e); + + t.context ().remove ("seen"); + } + } + + virtual Void + traverse (SemanticGraph::Attribute& a) + { + SemanticGraph::Type& t (a.type ()); + + if (!t.named_p () && !t.context ().count ("seen")) + { + t.context ().set ("seen", true); + + member_pre (a); + + Attribute::belongs (a, belongs_); + + member_post (a); + + t.context ().remove ("seen"); + } + } + + private: + struct Complex : Traversal::Complex + { + Complex (Traversal::NodeDispatcherBase* d1, + Traversal::NodeDispatcherBase* d2) + : d1_ (d1), d2_ (d2) + { + } + + virtual Void + traverse (SemanticGraph::Complex& c) + { + if (d1_) + d1_->dispatch (c); + + if (d2_) + d2_->dispatch (c); + } + + private: + Traversal::NodeDispatcherBase* d1_; + Traversal::NodeDispatcherBase* d2_; + + } complex_; + + Traversal::Belongs belongs_; + }; + + + // Go into implied/included/imported schemas while making sure + // we don't process the same stuff more than once. + // + struct Uses: Traversal::Uses + { + virtual Void + traverse (Type& u) + { + SemanticGraph::Schema& s (u.schema ()); + + if (!s.context ().count ("xsd-frontend-restriction-seen")) + { + s.context ().set ("xsd-frontend-restriction-seen", true); + Traversal::Uses::traverse (u); + } + } + }; + } + + namespace Transformations + { + Void Restriction:: + transform (SemanticGraph::Schema& s, SemanticGraph::Path const&) + { + Traversal::Schema schema; + Uses uses; + + schema >> uses >> schema; + + Traversal::Names schema_names; + Traversal::Namespace ns; + Traversal::Names ns_names; + + schema >> schema_names >> ns >> ns_names; + + Complex complex_type (s); + Anonymous anonymous (complex_type); + + ns_names >> complex_type; + ns_names >> anonymous; + + Traversal::Names names; + + complex_type >> names >> anonymous; + + // Some twisted schemas do recusive inclusions. + // + s.context ().set ("xsd-frontend-restriction-seen", true); + + schema.dispatch (s); + } + } +} diff --git a/libxsd-frontend/xsd-frontend/transformations/restriction.hxx b/libxsd-frontend/xsd-frontend/transformations/restriction.hxx new file mode 100644 index 0000000..7c3282e --- /dev/null +++ b/libxsd-frontend/xsd-frontend/transformations/restriction.hxx @@ -0,0 +1,39 @@ +// file : xsd-frontend/transformations/restriction.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_FRONTEND_TRANSFORMATIONS_RESTRICTION_HXX +#define XSD_FRONTEND_TRANSFORMATIONS_RESTRICTION_HXX + +#include <cult/types.hxx> + +#include <xsd-frontend/semantic-graph/elements.hxx> // Path +#include <xsd-frontend/semantic-graph/schema.hxx> + +namespace XSDFrontend +{ + namespace Transformations + { + using namespace Cult::Types; + + // This transformation performs two major tasks. It transfers omitted + // attribute declarations from the base to derived-by-restriction type + // and establishes correspondence between particles and compositors by + // adding the "xsd-frontend-restriction-correspondence" key-value pair + // in the context that contains a pointer to the corresponding particle + // or compositor in the base. Note that restriction of anyType is + // a special case and is not handled by this transformation. + // + class Restriction + { + public: + struct Failed {}; + + Void + transform (SemanticGraph::Schema&, SemanticGraph::Path const&); + }; + } +} + +#endif // XSD_FRONTEND_TRANSFORMATIONS_RESTRICTION_HXX diff --git a/libxsd-frontend/xsd-frontend/transformations/schema-per-type.cxx b/libxsd-frontend/xsd-frontend/transformations/schema-per-type.cxx new file mode 100644 index 0000000..9ac8445 --- /dev/null +++ b/libxsd-frontend/xsd-frontend/transformations/schema-per-type.cxx @@ -0,0 +1,453 @@ +// file : xsd-frontend/transformations/schema-per-type.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <xsd-frontend/transformations/schema-per-type.hxx> + +#include <xsd-frontend/semantic-graph.hxx> +#include <xsd-frontend/traversal.hxx> + +#include <cult/containers/map.hxx> +#include <cult/containers/set.hxx> +#include <cult/containers/vector.hxx> + +#include <sstream> +#include <iostream> + +#include <strings.h> // strcasecmp + +using std::wcerr; +using std::endl; + +namespace XSDFrontend +{ + using namespace Cult; + + typedef WideString String; + typedef Transformations::SchemaPerType::Failed Failed; + + typedef Containers::Vector<SemanticGraph::Schema*> Schemas; + typedef Containers::Map<SemanticGraph::Type*, + SemanticGraph::Schema*> TypeSchemaMap; + + // Compare file paths case-insensitively. + // + struct FileComparator + { + Boolean + operator() (NarrowString const& x, NarrowString const& y) const + { + return strcasecmp (x.c_str (), y.c_str ()) < 0; + } + }; + + typedef Containers::Set<NarrowString, FileComparator> FileSet; + + namespace + { + // Go into included and imported schemas while making sure + // we don't process the same stuff more than once. + // + struct Uses: Traversal::Includes, + Traversal::Imports, + Traversal::Implies + { + Uses (Schemas& schemas, SemanticGraph::Schema*& xsd) + : schemas_ (schemas), xsd_ (xsd) + { + xsd_ = 0; + } + + virtual Void + traverse (SemanticGraph::Includes& i) + { + SemanticGraph::Schema& s (i.schema ()); + + if (!s.context ().count ("xsd-frontend-schema-per-type-seen")) + { + schemas_.push_back (&s); + s.context ().set ("xsd-frontend-schema-per-type-seen", true); + Traversal::Includes::traverse (i); + } + } + + virtual Void + traverse (SemanticGraph::Imports& i) + { + SemanticGraph::Schema& s (i.schema ()); + + if (!s.context ().count ("xsd-frontend-schema-per-type-seen")) + { + schemas_.push_back (&s); + s.context ().set ("xsd-frontend-schema-per-type-seen", true); + Traversal::Imports::traverse (i); + } + } + + virtual Void + traverse (SemanticGraph::Implies& i) + { + if (xsd_ == 0) + xsd_ = &i.schema (); + } + + private: + Schemas& schemas_; + SemanticGraph::Schema*& xsd_; + }; + + Void + process_schema (SemanticGraph::Schema& s, + SemanticGraph::Schema& root, + SemanticGraph::Schema& xsd, + TypeSchemaMap& tsm, + FileSet& file_set, + Transformations::SchemaPerTypeTranslator& trans) + { + using namespace SemanticGraph; + + Path xsd_path ("XMLSchema.xsd"); + Namespace& ns (dynamic_cast<Namespace&> (s.names_begin ()->named ())); + + // We should be careful with iterator caching since we are going to + // remove some of the nodes. + // + for (Scope::NamesIterator i (ns.names_begin ()); i != ns.names_end ();) + { + Nameable& n (i->named ()); + + if (n.is_a<Type> ()) + { + String name (n.name ()); + + // Remove from the namespace. + // + Scope::NamesIterator tmp (i++); + root.delete_edge (ns, n, *tmp); + + // Add a new schema node. + // + Path path; + String tn (trans.translate_type (ns.name (), name)); + String wbase (tn ? tn : name); + + try + { + NarrowString base (wbase.to_narrow ()); + + // Escape directory separators unless they came from the + // translator. + // + if (!tn) + { + for (NarrowString::Iterator i (base.begin ()), e (base.end ()); + i != e; ++i) + { + if (*i == '/' || *i == '\\') + *i = '_'; + } + } + + // Make sure it is unique. + // + NarrowString file_name (base); + + for (UnsignedLong i (1); + file_set.find (file_name) != file_set.end (); + ++i) + { + std::ostringstream os; + os << i; + file_name = base + os.str (); + } + + file_set.insert (file_name); + file_name += ".xsd"; + + try + { +#if !defined(BOOST_FILESYSTEM_VERSION) || BOOST_FILESYSTEM_VERSION == 2 + path = Path (file_name); +#else + path = Path (file_name.c_str()); +#endif + } + catch (InvalidPath const&) + { + wcerr << "error: '" << file_name.c_str () << "' is not a valid " + << "filesystem path" << endl; + + wcerr << "info: use type to file name translation mechanism " + << "to resolve this" << endl; + + throw Failed (); + } + } + catch (String::NonRepresentable const&) + { + wcerr << "error: '" << wbase << "' cannot be represented as a " + << "narrow string" << endl; + + wcerr << "info: use type to file name translation mechanism " + << "to resolve this" << endl; + + throw Failed (); + } + + Schema& ts (root.new_node<Schema> (path, 1, 1)); + root.new_edge<Implies> (ts, xsd, xsd_path); + + Namespace& tns (root.new_node<Namespace> (path, 1, 1)); + root.new_edge<Names> (ts, tns, ns.name ()); + root.new_edge<Names> (tns, n, name); + + // Add include to the original schema and enter into the + // type-schema map. + // + root.new_edge<Includes> (s, ts, path); + tsm[&dynamic_cast<Type&> (n)] = &ts; + } + else + ++i; + } + } + + struct Type: Traversal::List, + Traversal::Complex, + Traversal::Member + { + Type (SemanticGraph::Schema& schema, + SemanticGraph::Schema& root, + Char const* by_value_key, + TypeSchemaMap& tsm) + : schema_ (schema), + root_ (root), + by_value_key_ (by_value_key), + tsm_ (tsm) + { + *this >> names_ >> *this; + } + + virtual Void + traverse (SemanticGraph::List& l) + { + // Treat item type as base type since it is impossible + // to create recursive constructs using list. + // + SemanticGraph::Type& t (l.argumented ().type ()); + set_dep (t, false); + } + + virtual Void + traverse (SemanticGraph::Complex& c) + { + if (c.inherits_p ()) + set_dep (c.inherits ().base (), false); + + Traversal::Complex::names (c); + } + + virtual Void + traverse (SemanticGraph::Member& m) + { + SemanticGraph::Type& t (m.type ()); + + Boolean weak ( + by_value_key_ == 0 || + !t.context ().count (by_value_key_) || + !t.context ().get<Boolean> (by_value_key_)); + + set_dep (t, weak); + } + + private: + Void + set_dep (SemanticGraph::Type& t, Boolean weak) + { + using namespace SemanticGraph; + + TypeSchemaMap::Iterator i (tsm_.find (&t)); + + // If a type is not present in the map then it must be + // a built-in type. + // + if (i == tsm_.end ()) + return; + + // Check if we already saw this type. Theoretically, it could + // be that we need to upgrade the type of include from weak to + // strong. But because inheritance is handled first, the type + // in the set will already be with the right type. + // + if (type_set_.find (&t) != type_set_.end ()) + return; + + type_set_.insert (&t); + + Schema& s (*i->second); + Path path (s.used_begin ()->path ()); + SemanticGraph::Uses* u; + + if (s.names_begin ()->name () == schema_.names_begin ()->name ()) + u = &root_.new_edge<Includes> (schema_, s, path); + else + u = &root_.new_edge<Imports> (schema_, s, path); + + if (weak) + u->context().set ("weak", true); + } + + private: + SemanticGraph::Schema& schema_; + SemanticGraph::Schema& root_; + Char const* by_value_key_; + TypeSchemaMap& tsm_; + Containers::Set<SemanticGraph::Type*> type_set_; + + Traversal::Names names_; + }; + } + + namespace Transformations + { + SchemaPerType:: + SchemaPerType (SchemaPerTypeTranslator& trans, Char const* by_value_key) + : by_value_key_ (by_value_key), trans_ (trans) + { + } + + Schemas SchemaPerType:: + transform (SemanticGraph::Schema& root) + { + // Collect initial schema nodes. + // + Schemas schemas; + SemanticGraph::Schema* xsd; + + { + Traversal::Schema schema; + Uses uses (schemas, xsd); + + schema >> uses >> schema; + + // Some twisted schemas do recusive inclusions. + // + root.context ().set ("xsd-frontend-schema-per-type-seen", true); + + schema.dispatch (root); + } + + // wcerr << schemas.size () << " initial schema nodes" << endl; + + // Add the schema file names to the file set. + // + FileSet file_set; + + for (Schemas::Iterator i (schemas.begin ()); i != schemas.end (); ++i) + { + SemanticGraph::Path const& path ( + (*i)->context ().get<SemanticGraph::Path> ("absolute-path")); + + // Translate the schema file name. + // + NarrowString abs_path; + +#if !defined(BOOST_FILESYSTEM_VERSION) || BOOST_FILESYSTEM_VERSION == 2 + // Try to use the portable representation of the path. If that + // fails, fall back to the native representation. + // + try + { + abs_path = path.string (); + } + catch (SemanticGraph::InvalidPath const&) + { + abs_path = path.native_file_string (); + } +#else + // The new ABI does not have a fallback native representation + abs_path = path.string (); +#endif + + NarrowString tf (trans_.translate_schema (abs_path)); +#if !defined(BOOST_FILESYSTEM_VERSION) || BOOST_FILESYSTEM_VERSION == 2 + NarrowString file (tf ? tf : path.leaf ()); +#else + NarrowString file (tf ? tf : path.filename ().string()); +#endif + + Size p (file.rfind ('.')); + NarrowString ext ( + p != NarrowString::npos ? NarrowString (file, p) : ""); + + NarrowString base ( + p != NarrowString::npos ? NarrowString (file, 0, p) : file); + + // Make sure it is unique. + // + NarrowString new_name (base); + + for (UnsignedLong n (1); + file_set.find (new_name) != file_set.end (); + ++n) + { + std::ostringstream os; + os << n; + new_name = base + os.str (); + } + + file_set.insert (new_name); + new_name += ext; + + try + { +#if !defined(BOOST_FILESYSTEM_VERSION) || BOOST_FILESYSTEM_VERSION == 2 + (*i)->context ().set ("renamed", SemanticGraph::Path (new_name)); +#else + (*i)->context ().set ("renamed", SemanticGraph::Path (new_name.c_str())); +#endif + } + catch (SemanticGraph::InvalidPath const&) + { + wcerr << "error: '" << new_name.c_str () << "' is not a valid " + << "filesystem path" << endl; + + wcerr << "info: use schema file name translation mechanism " + << "to resolve this" << endl; + + throw Failed (); + } + } + + // Process each schema node. + // + TypeSchemaMap tsm; + + for (Schemas::Iterator i (schemas.begin ()); i != schemas.end (); ++i) + { + process_schema (**i, root, *xsd, tsm, file_set, trans_); + } + + // wcerr << tsm.size () << " type schema nodes" << endl; + + // Establish include/import dependencies. While at it add the + // new schemas to the list which we will return. + // + for (TypeSchemaMap::Iterator i (tsm.begin ()); i != tsm.end (); ++i) + { + SemanticGraph::Schema& s (*i->second); + Type t (s, root, by_value_key_, tsm); + t.dispatch (*i->first); + schemas.push_back (&s); + } + + return schemas; + } + + SchemaPerTypeTranslator:: + ~SchemaPerTypeTranslator () + { + } + } +} diff --git a/libxsd-frontend/xsd-frontend/transformations/schema-per-type.hxx b/libxsd-frontend/xsd-frontend/transformations/schema-per-type.hxx new file mode 100644 index 0000000..89b6d83 --- /dev/null +++ b/libxsd-frontend/xsd-frontend/transformations/schema-per-type.hxx @@ -0,0 +1,61 @@ +// file : xsd-frontend/transformations/schema-per-type.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_FRONTEND_TRANSFORMATIONS_SCHEMA_PER_TYPE_HXX +#define XSD_FRONTEND_TRANSFORMATIONS_SCHEMA_PER_TYPE_HXX + +#include <cult/types.hxx> +#include <cult/containers/vector.hxx> + +#include <xsd-frontend/semantic-graph/elements.hxx> // Path +#include <xsd-frontend/semantic-graph/schema.hxx> + +namespace XSDFrontend +{ + namespace Transformations + { + using namespace Cult::Types; + + class SchemaPerTypeTranslator + { + public: + virtual + ~SchemaPerTypeTranslator (); + + // The following two functions should return empty string if + // there is no match. + // + virtual WideString + translate_type (WideString const& ns, WideString const& name) = 0; + + virtual NarrowString + translate_schema (NarrowString const& abs_path) = 0; + }; + + // This transformation restructures the semantic graph to have + // each type definition in a seperate schema file. + // + class SchemaPerType + { + public: + struct Failed {}; + + // If a type of an element or attribute has a context entry + // with the by_value_key key and it is true, then the schema + // for this type is included "strongly". + // + SchemaPerType (SchemaPerTypeTranslator&, Char const* by_value_key = 0); + + Cult::Containers::Vector<SemanticGraph::Schema*> + transform (SemanticGraph::Schema&); + + private: + Char const* by_value_key_; + SchemaPerTypeTranslator& trans_; + }; + } +} + +#endif // XSD_FRONTEND_TRANSFORMATIONS_SCHEMA_PER_TYPE_HXX diff --git a/libxsd-frontend/xsd-frontend/transformations/simplifier.cxx b/libxsd-frontend/xsd-frontend/transformations/simplifier.cxx new file mode 100644 index 0000000..2ccaed2 --- /dev/null +++ b/libxsd-frontend/xsd-frontend/transformations/simplifier.cxx @@ -0,0 +1,167 @@ +// file : xsd-frontend/transformations/simplifier.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <xsd-frontend/transformations/simplifier.hxx> + +#include <xsd-frontend/semantic-graph.hxx> +#include <xsd-frontend/traversal.hxx> + +#include <cult/containers/vector.hxx> + +namespace XSDFrontend +{ + using namespace Cult; + + namespace + { + struct Compositor: Traversal::All, + Traversal::Choice, + Traversal::Sequence + { + Compositor (SemanticGraph::Schema& root) + : root_ (root) + { + } + + virtual Void + traverse (SemanticGraph::All& a) + { + // The all compositor cannot contain compositors. + // + if (a.contains_begin () == a.contains_end ()) + remove (a); + } + + virtual Void + traverse (SemanticGraph::Choice& c) + { + // Do the depth-first traversal so that we take into account + // the potential removal of nested compositors. + // + using SemanticGraph::Compositor; + + for (Compositor::ContainsIterator i (c.contains_begin ()); + i != c.contains_end ();) + { + edge_traverser ().dispatch (*i++); + } + + Choice::contains (c); + + if (c.contains_begin () == c.contains_end ()) + remove (c); + } + + virtual Void + traverse (SemanticGraph::Sequence& s) + { + // Do the depth-first traversal so that we take into account + // the potential removal of nested compositors. + // + using SemanticGraph::Compositor; + + for (Compositor::ContainsIterator i (s.contains_begin ()); + i != s.contains_end ();) + { + edge_traverser ().dispatch (*i++); + } + + if (s.contains_begin () == s.contains_end ()) + remove (s); + } + + private: + virtual Void + remove (SemanticGraph::Compositor& c) + { + using SemanticGraph::Node; + using SemanticGraph::Choice; + using SemanticGraph::Complex; + using SemanticGraph::Compositor; + + if (c.contained_particle_p ()) + { + Compositor& com (c.contained_particle ().compositor ()); + + // Empty compositors in choice are important. + // + if (!com.is_a<Choice> ()) + root_.delete_edge (com, c, c.contained_particle ()); + } + else + { + Complex& con ( + dynamic_cast<Complex&> (c.contained_compositor ().container ())); + root_.delete_edge (con, c, c.contained_compositor ()); + } + } + + private: + SemanticGraph::Schema& root_; + }; + + // + // + struct Type: Traversal::Complex + { + virtual Void + traverse (SemanticGraph::Complex& c) + { + if (c.contains_compositor_p ()) + Complex::contains_compositor (c); + } + }; + + // Go into implied/included/imported schemas while making sure + // we don't process the same stuff more than once. + // + struct Uses: Traversal::Uses + { + virtual Void + traverse (Type& u) + { + SemanticGraph::Schema& s (u.schema ()); + + if (!s.context ().count ("xsd-frontend-simplifier-seen")) + { + s.context ().set ("xsd-frontend-simplifier-seen", true); + Traversal::Uses::traverse (u); + } + } + }; + } + + namespace Transformations + { + Void Simplifier:: + transform (SemanticGraph::Schema& s, SemanticGraph::Path const&) + { + Traversal::Schema schema; + Uses uses; + + schema >> uses >> schema; + + Traversal::Names schema_names; + Traversal::Namespace ns; + Traversal::Names ns_names; + Type type; + + schema >> schema_names >> ns >> ns_names >> type; + + Compositor compositor (s); + Traversal::ContainsCompositor contains_compositor; + Traversal::ContainsParticle contains_particle; + + type >> contains_compositor >> compositor; + compositor >> contains_particle >> compositor; + + // Some twisted schemas do recusive inclusions. + // + s.context ().set ("xsd-frontend-simplifier-seen", true); + + schema.dispatch (s); + } + } +} diff --git a/libxsd-frontend/xsd-frontend/transformations/simplifier.hxx b/libxsd-frontend/xsd-frontend/transformations/simplifier.hxx new file mode 100644 index 0000000..676c166 --- /dev/null +++ b/libxsd-frontend/xsd-frontend/transformations/simplifier.hxx @@ -0,0 +1,33 @@ +// file : xsd-frontend/transformations/simplifier.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_FRONTEND_TRANSFORMATIONS_SIMPLIFIER_HXX +#define XSD_FRONTEND_TRANSFORMATIONS_SIMPLIFIER_HXX + +#include <cult/types.hxx> + +#include <xsd-frontend/semantic-graph/elements.hxx> // Path +#include <xsd-frontend/semantic-graph/schema.hxx> + +namespace XSDFrontend +{ + namespace Transformations + { + using namespace Cult::Types; + + // This transformation performs various schema simplifications + // (e.g., removing empty compositors, etc). This transformation + // assumes that there are no anonymous types. + // + class Simplifier + { + public: + Void + transform (SemanticGraph::Schema&, SemanticGraph::Path const&); + }; + } +} + +#endif // XSD_FRONTEND_TRANSFORMATIONS_SIMPLIFIER_HXX diff --git a/libxsd-frontend/xsd-frontend/traversal.hxx b/libxsd-frontend/xsd-frontend/traversal.hxx new file mode 100644 index 0000000..9b1c359 --- /dev/null +++ b/libxsd-frontend/xsd-frontend/traversal.hxx @@ -0,0 +1,26 @@ +// file : xsd-frontend/traversal.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_FRONTEND_TRAVERSAL_HXX +#define XSD_FRONTEND_TRAVERSAL_HXX + +#include <xsd-frontend/traversal/any.hxx> +#include <xsd-frontend/traversal/any-attribute.hxx> +#include <xsd-frontend/traversal/attribute.hxx> +#include <xsd-frontend/traversal/attribute-group.hxx> +#include <xsd-frontend/traversal/complex.hxx> +#include <xsd-frontend/traversal/compositors.hxx> +#include <xsd-frontend/traversal/element.hxx> +#include <xsd-frontend/traversal/element-group.hxx> +#include <xsd-frontend/traversal/elements.hxx> +#include <xsd-frontend/traversal/enumeration.hxx> +#include <xsd-frontend/traversal/fundamental.hxx> +#include <xsd-frontend/traversal/list.hxx> +#include <xsd-frontend/traversal/namespace.hxx> +#include <xsd-frontend/traversal/particle.hxx> +#include <xsd-frontend/traversal/schema.hxx> +#include <xsd-frontend/traversal/union.hxx> + +#endif // XSD_FRONTEND_TRAVERSAL_HXX diff --git a/libxsd-frontend/xsd-frontend/traversal/any-attribute.hxx b/libxsd-frontend/xsd-frontend/traversal/any-attribute.hxx new file mode 100644 index 0000000..55ed999 --- /dev/null +++ b/libxsd-frontend/xsd-frontend/traversal/any-attribute.hxx @@ -0,0 +1,22 @@ +// file : xsd-frontend/traversal/any-attribute.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_FRONTEND_TRAVERSAL_ANY_ATTRIBUTE_HXX +#define XSD_FRONTEND_TRAVERSAL_ANY_ATTRIBUTE_HXX + +#include <xsd-frontend/traversal/elements.hxx> +#include <xsd-frontend/semantic-graph/any-attribute.hxx> + +namespace XSDFrontend +{ + namespace Traversal + { + typedef + Node<SemanticGraph::AnyAttribute> + AnyAttribute; + } +} + +#endif // XSD_FRONTEND_TRAVERSAL_ANY_ATTRIBUTE_HXX diff --git a/libxsd-frontend/xsd-frontend/traversal/any.hxx b/libxsd-frontend/xsd-frontend/traversal/any.hxx new file mode 100644 index 0000000..505d336 --- /dev/null +++ b/libxsd-frontend/xsd-frontend/traversal/any.hxx @@ -0,0 +1,22 @@ +// file : xsd-frontend/traversal/any.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_FRONTEND_TRAVERSAL_ANY_HXX +#define XSD_FRONTEND_TRAVERSAL_ANY_HXX + +#include <xsd-frontend/traversal/elements.hxx> +#include <xsd-frontend/semantic-graph/any.hxx> + +namespace XSDFrontend +{ + namespace Traversal + { + typedef + Node<SemanticGraph::Any> + Any; + } +} + +#endif // XSD_FRONTEND_TRAVERSAL_ANY_HXX diff --git a/libxsd-frontend/xsd-frontend/traversal/attribute-group.cxx b/libxsd-frontend/xsd-frontend/traversal/attribute-group.cxx new file mode 100644 index 0000000..e5c2237 --- /dev/null +++ b/libxsd-frontend/xsd-frontend/traversal/attribute-group.cxx @@ -0,0 +1,30 @@ +// file : xsd-frontend/traversal/attribute-group.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <xsd-frontend/traversal/attribute-group.hxx> + +namespace XSDFrontend +{ + namespace Traversal + { + Void AttributeGroup:: + traverse (Type& g) + { + pre (g); + names (g); + post (g); + } + + Void AttributeGroup:: + pre (Type&) + { + } + + Void AttributeGroup:: + post (Type&) + { + } + } +} diff --git a/libxsd-frontend/xsd-frontend/traversal/attribute-group.hxx b/libxsd-frontend/xsd-frontend/traversal/attribute-group.hxx new file mode 100644 index 0000000..cd01a97 --- /dev/null +++ b/libxsd-frontend/xsd-frontend/traversal/attribute-group.hxx @@ -0,0 +1,30 @@ +// file : xsd-frontend/traversal/attribute-group.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_FRONTEND_TRAVERSAL_ATTRIBUTE_GROUP_HXX +#define XSD_FRONTEND_TRAVERSAL_ATTRIBUTE_GROUP_HXX + +#include <xsd-frontend/traversal/elements.hxx> +#include <xsd-frontend/semantic-graph/attribute-group.hxx> + +namespace XSDFrontend +{ + namespace Traversal + { + struct AttributeGroup: ScopeTemplate<SemanticGraph::AttributeGroup> + { + virtual Void + traverse (Type&); + + virtual Void + pre (Type&); + + virtual Void + post (Type&); + }; + } +} + +#endif // XSD_FRONTEND_TRAVERSAL_ATTRIBUTE_GROUP_HXX diff --git a/libxsd-frontend/xsd-frontend/traversal/attribute.cxx b/libxsd-frontend/xsd-frontend/traversal/attribute.cxx new file mode 100644 index 0000000..c051667 --- /dev/null +++ b/libxsd-frontend/xsd-frontend/traversal/attribute.cxx @@ -0,0 +1,48 @@ +// file : xsd-frontend/traversal/attribute.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <xsd-frontend/traversal/attribute.hxx> + +namespace XSDFrontend +{ + namespace Traversal + { + Void Attribute:: + traverse (Type& a) + { + pre (a); + belongs (a); + name (a); + post (a); + } + + Void Attribute:: + pre (Type&) + { + } + + Void Attribute:: + belongs (Type& a, EdgeDispatcherBase& d) + { + d.dispatch (a.belongs ()); + } + + Void Attribute:: + belongs (Type& a) + { + belongs (a, *this); + } + + Void Attribute:: + name (Type&) + { + } + + Void Attribute:: + post (Type&) + { + } + } +} diff --git a/libxsd-frontend/xsd-frontend/traversal/attribute.hxx b/libxsd-frontend/xsd-frontend/traversal/attribute.hxx new file mode 100644 index 0000000..feb6b31 --- /dev/null +++ b/libxsd-frontend/xsd-frontend/traversal/attribute.hxx @@ -0,0 +1,41 @@ +// file : xsd-frontend/traversal/attribute.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_FRONTEND_TRAVERSAL_ATTRIBUTE_HXX +#define XSD_FRONTEND_TRAVERSAL_ATTRIBUTE_HXX + +#include <xsd-frontend/traversal/elements.hxx> + +#include <xsd-frontend/semantic-graph/attribute.hxx> + + +namespace XSDFrontend +{ + namespace Traversal + { + struct Attribute : Node<SemanticGraph::Attribute> + { + virtual Void + traverse (Type&); + + virtual Void + pre (Type&); + + virtual Void + belongs (Type&, EdgeDispatcherBase&); + + virtual Void + belongs (Type&); + + virtual Void + name (Type&); + + virtual Void + post (Type&); + }; + } +} + +#endif // XSD_FRONTEND_TRAVERSAL_ATTRIBUTE_HXX diff --git a/libxsd-frontend/xsd-frontend/traversal/complex.cxx b/libxsd-frontend/xsd-frontend/traversal/complex.cxx new file mode 100644 index 0000000..d6cfc41 --- /dev/null +++ b/libxsd-frontend/xsd-frontend/traversal/complex.cxx @@ -0,0 +1,64 @@ +// file : xsd-frontend/traversal/complex.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <xsd-frontend/traversal/complex.hxx> + +namespace XSDFrontend +{ + namespace Traversal + { + Void Complex:: + traverse (Type& c) + { + pre (c); + name (c); + inherits (c); + names (c); + contains_compositor (c); + post (c); + } + + Void Complex:: + pre (Type&) + { + } + + Void Complex:: + name (Type&) + { + } + + Void Complex:: + inherits (Type& c) + { + inherits (c, *this); + } + + Void Complex:: + inherits (Type& c, EdgeDispatcherBase& d) + { + if (c.inherits_p ()) + d.dispatch (c.inherits ()); + } + + Void Complex:: + contains_compositor (Type& c) + { + contains_compositor (c, *this); + } + + Void Complex:: + contains_compositor (Type& c, EdgeDispatcherBase& d) + { + if (c.contains_compositor_p ()) + d.dispatch (c.contains_compositor ()); + } + + Void Complex:: + post (Type&) + { + } + } +} diff --git a/libxsd-frontend/xsd-frontend/traversal/complex.hxx b/libxsd-frontend/xsd-frontend/traversal/complex.hxx new file mode 100644 index 0000000..3dd7e7b --- /dev/null +++ b/libxsd-frontend/xsd-frontend/traversal/complex.hxx @@ -0,0 +1,45 @@ +// file : xsd-frontend/traversal/complex.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_FRONTEND_TRAVERSAL_COMPLEX_HXX +#define XSD_FRONTEND_TRAVERSAL_COMPLEX_HXX + +#include <xsd-frontend/traversal/elements.hxx> +#include <xsd-frontend/semantic-graph/complex.hxx> + +namespace XSDFrontend +{ + namespace Traversal + { + struct Complex : ScopeTemplate<SemanticGraph::Complex> + { + virtual Void + traverse (Type&); + + virtual Void + pre (Type&); + + virtual Void + name (Type&); + + virtual Void + inherits (Type&); + + Void + inherits (Type&, EdgeDispatcherBase&); + + virtual Void + contains_compositor (Type&); + + Void + contains_compositor (Type&, EdgeDispatcherBase&); + + virtual Void + post (Type&); + }; + } +} + +#endif // XSD_FRONTEND_TRAVERSAL_COMPLEX_HXX diff --git a/libxsd-frontend/xsd-frontend/traversal/compositors.cxx b/libxsd-frontend/xsd-frontend/traversal/compositors.cxx new file mode 100644 index 0000000..d3089fc --- /dev/null +++ b/libxsd-frontend/xsd-frontend/traversal/compositors.cxx @@ -0,0 +1,165 @@ +// file : xsd-frontend/traversal/compositors.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <xsd-frontend/traversal/compositors.hxx> + +namespace XSDFrontend +{ + namespace Traversal + { + // ContainsParticle + // + Void ContainsParticle:: + traverse (Type& c) + { + dispatch (c.particle ()); + } + + + // ContainsCompositor + // + Void ContainsCompositor:: + traverse (Type& c) + { + dispatch (c.compositor ()); + } + + + // Compositor + // + Void Compositor:: + traverse (Type& c) + { + pre (c); + contains (c); + post (c); + } + + Void Compositor:: + pre (Type&) + { + } + + Void Compositor:: + contains (Type& c) + { + iterate_and_dispatch ( + c.contains_begin (), c.contains_end (), edge_traverser ()); + } + + Void Compositor:: + contains (Type& c, EdgeDispatcherBase& d) + { + iterate_and_dispatch (c.contains_begin (), c.contains_end (), d); + } + + Void Compositor:: + post (Type&) + { + } + + + // All + // + Void All:: + traverse (Type& c) + { + pre (c); + contains (c); + post (c); + } + + Void All:: + pre (Type&) + { + } + + Void All:: + contains (Type& c) + { + iterate_and_dispatch ( + c.contains_begin (), c.contains_end (), edge_traverser ()); + } + + Void All:: + contains (Type& c, EdgeDispatcherBase& d) + { + iterate_and_dispatch (c.contains_begin (), c.contains_end (), d); + } + + Void All:: + post (Type&) + { + } + + + // Choice + // + Void Choice:: + traverse (Type& c) + { + pre (c); + contains (c); + post (c); + } + + Void Choice:: + pre (Type&) + { + } + + Void Choice:: + contains (Type& c) + { + iterate_and_dispatch ( + c.contains_begin (), c.contains_end (), edge_traverser ()); + } + + Void Choice:: + contains (Type& c, EdgeDispatcherBase& d) + { + iterate_and_dispatch (c.contains_begin (), c.contains_end (), d); + } + + Void Choice:: + post (Type&) + { + } + + + // Sequence + // + Void Sequence:: + traverse (Type& c) + { + pre (c); + contains (c); + post (c); + } + + Void Sequence:: + pre (Type&) + { + } + + Void Sequence:: + contains (Type& c) + { + iterate_and_dispatch ( + c.contains_begin (), c.contains_end (), edge_traverser ()); + } + + Void Sequence:: + contains (Type& c, EdgeDispatcherBase& d) + { + iterate_and_dispatch (c.contains_begin (), c.contains_end (), d); + } + + Void Sequence:: + post (Type&) + { + } + } +} diff --git a/libxsd-frontend/xsd-frontend/traversal/compositors.hxx b/libxsd-frontend/xsd-frontend/traversal/compositors.hxx new file mode 100644 index 0000000..e81460b --- /dev/null +++ b/libxsd-frontend/xsd-frontend/traversal/compositors.hxx @@ -0,0 +1,136 @@ +// file : xsd-frontend/traversal/compositors.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_FRONTEND_TRAVERSAL_COMPOSITORS_HXX +#define XSD_FRONTEND_TRAVERSAL_COMPOSITORS_HXX + +#include <xsd-frontend/traversal/elements.hxx> +#include <xsd-frontend/semantic-graph/compositors.hxx> + +namespace XSDFrontend +{ + namespace Traversal + { + // + // + struct ContainsParticle: Edge<SemanticGraph::ContainsParticle> + { + ContainsParticle () + { + } + + ContainsParticle (NodeBase& n) + { + node_traverser (n); + } + + virtual Void + traverse (Type&); + }; + + + // + // + struct ContainsCompositor: Edge<SemanticGraph::ContainsCompositor> + { + ContainsCompositor () + { + } + + ContainsCompositor (NodeBase& n) + { + node_traverser (n); + } + + virtual Void + traverse (Type&); + }; + + // + // + struct Compositor : Node<SemanticGraph::Compositor> + { + virtual Void + traverse (Type&); + + virtual Void + pre (Type&); + + virtual Void + contains (Type&); + + virtual Void + contains (Type&, EdgeDispatcherBase&); + + virtual Void + post (Type&); + }; + + + // + // + struct All : Node<SemanticGraph::All> + { + virtual Void + traverse (Type&); + + virtual Void + pre (Type&); + + virtual Void + contains (Type&); + + virtual Void + contains (Type&, EdgeDispatcherBase&); + + virtual Void + post (Type&); + }; + + + // + // + struct Choice : Node<SemanticGraph::Choice> + { + virtual Void + traverse (Type&); + + virtual Void + pre (Type&); + + virtual Void + contains (Type&); + + virtual Void + contains (Type&, EdgeDispatcherBase&); + + virtual Void + post (Type&); + }; + + + // + // + struct Sequence : Node<SemanticGraph::Sequence> + { + virtual Void + traverse (Type&); + + virtual Void + pre (Type&); + + virtual Void + contains (Type&); + + virtual Void + contains (Type&, EdgeDispatcherBase&); + + virtual Void + post (Type&); + }; + } +} + +#endif // XSD_FRONTEND_TRAVERSAL_COMPOSITORS_HXX diff --git a/libxsd-frontend/xsd-frontend/traversal/element-group.cxx b/libxsd-frontend/xsd-frontend/traversal/element-group.cxx new file mode 100644 index 0000000..cb7a51a --- /dev/null +++ b/libxsd-frontend/xsd-frontend/traversal/element-group.cxx @@ -0,0 +1,43 @@ +// file : xsd-frontend/traversal/element-group.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <xsd-frontend/traversal/element-group.hxx> + +namespace XSDFrontend +{ + namespace Traversal + { + Void ElementGroup:: + traverse (Type& g) + { + pre (g); + names (g); + contains_compositor (g); + post (g); + } + + Void ElementGroup:: + pre (Type&) + { + } + + Void ElementGroup:: + contains_compositor (Type& g, EdgeDispatcherBase& d) + { + d.dispatch (g.contains_compositor ()); + } + + Void ElementGroup:: + contains_compositor (Type& g) + { + contains_compositor (g, *this); + } + + Void ElementGroup:: + post (Type&) + { + } + } +} diff --git a/libxsd-frontend/xsd-frontend/traversal/element-group.hxx b/libxsd-frontend/xsd-frontend/traversal/element-group.hxx new file mode 100644 index 0000000..8ebe0bd --- /dev/null +++ b/libxsd-frontend/xsd-frontend/traversal/element-group.hxx @@ -0,0 +1,36 @@ +// file : xsd-frontend/traversal/element-group.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_FRONTEND_TRAVERSAL_ELEMENT_GROUP_HXX +#define XSD_FRONTEND_TRAVERSAL_ELEMENT_GROUP_HXX + +#include <xsd-frontend/traversal/elements.hxx> +#include <xsd-frontend/semantic-graph/element-group.hxx> + +namespace XSDFrontend +{ + namespace Traversal + { + struct ElementGroup: ScopeTemplate<SemanticGraph::ElementGroup> + { + virtual Void + traverse (Type&); + + virtual Void + pre (Type&); + + virtual Void + contains_compositor (Type&); + + virtual Void + contains_compositor (Type&, EdgeDispatcherBase&); + + virtual Void + post (Type&); + }; + } +} + +#endif // XSD_FRONTEND_TRAVERSAL_ELEMENT_GROUP_HXX diff --git a/libxsd-frontend/xsd-frontend/traversal/element.cxx b/libxsd-frontend/xsd-frontend/traversal/element.cxx new file mode 100644 index 0000000..7f296ee --- /dev/null +++ b/libxsd-frontend/xsd-frontend/traversal/element.cxx @@ -0,0 +1,48 @@ +// file : xsd-frontend/traversal/element.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <xsd-frontend/traversal/element.hxx> + +namespace XSDFrontend +{ + namespace Traversal + { + Void Element:: + traverse (Type& m) + { + pre (m); + belongs (m); + name (m); + post (m); + } + + Void Element:: + pre (Type&) + { + } + + Void Element:: + belongs (Type& m, EdgeDispatcherBase& d) + { + d.dispatch (m.belongs ()); + } + + Void Element:: + belongs (Type& m) + { + belongs (m, edge_traverser ()); + } + + Void Element:: + name (Type&) + { + } + + Void Element:: + post (Type&) + { + } + } +} diff --git a/libxsd-frontend/xsd-frontend/traversal/element.hxx b/libxsd-frontend/xsd-frontend/traversal/element.hxx new file mode 100644 index 0000000..d5187ad --- /dev/null +++ b/libxsd-frontend/xsd-frontend/traversal/element.hxx @@ -0,0 +1,39 @@ +// file : xsd-frontend/traversal/element.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_FRONTEND_TRAVERSAL_ELEMENT_HXX +#define XSD_FRONTEND_TRAVERSAL_ELEMENT_HXX + +#include <xsd-frontend/traversal/elements.hxx> +#include <xsd-frontend/semantic-graph/element.hxx> + +namespace XSDFrontend +{ + namespace Traversal + { + struct Element : Node<SemanticGraph::Element> + { + virtual Void + traverse (Type&); + + virtual Void + pre (Type&); + + virtual Void + belongs (Type&, EdgeDispatcherBase&); + + virtual Void + belongs (Type&); + + virtual Void + name (Type&); + + virtual Void + post (Type&); + }; + } +} + +#endif // XSD_FRONTEND_TRAVERSAL_ELEMENT_HXX diff --git a/libxsd-frontend/xsd-frontend/traversal/elements.cxx b/libxsd-frontend/xsd-frontend/traversal/elements.cxx new file mode 100644 index 0000000..b1c47a0 --- /dev/null +++ b/libxsd-frontend/xsd-frontend/traversal/elements.cxx @@ -0,0 +1,77 @@ +// file : xsd-frontend/traversal/elements.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <xsd-frontend/traversal/elements.hxx> + +namespace XSDFrontend +{ + namespace Traversal + { + // Instance + // + Void Instance:: + traverse (Type& a) + { + pre (a); + belongs (a); + post (a); + } + + Void Instance:: + pre (Type&) + { + } + + Void Instance:: + belongs (Type& a, EdgeDispatcherBase& d) + { + d.dispatch (a.belongs ()); + } + + Void Instance:: + belongs (Type& a) + { + belongs (a, edge_traverser ()); + } + + Void Instance:: + post (Type&) + { + } + + + // Member + // + Void Member:: + traverse (Type& a) + { + pre (a); + belongs (a); + post (a); + } + + Void Member:: + pre (Type&) + { + } + + Void Member:: + belongs (Type& a, EdgeDispatcherBase& d) + { + d.dispatch (a.belongs ()); + } + + Void Member:: + belongs (Type& a) + { + belongs (a, edge_traverser ()); + } + + Void Member:: + post (Type&) + { + } + } +} diff --git a/libxsd-frontend/xsd-frontend/traversal/elements.hxx b/libxsd-frontend/xsd-frontend/traversal/elements.hxx new file mode 100644 index 0000000..c405a1b --- /dev/null +++ b/libxsd-frontend/xsd-frontend/traversal/elements.hxx @@ -0,0 +1,480 @@ +// file : xsd-frontend/traversal/elements.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_FRONTEND_TRAVERSAL_ELEMENTS_HXX +#define XSD_FRONTEND_TRAVERSAL_ELEMENTS_HXX + +#include <cult/types.hxx> + +#include <frontend-elements/traversal.hxx> + +#include <xsd-frontend/semantic-graph/elements.hxx> + +namespace XSDFrontend +{ + namespace Traversal + { + using namespace Cult::Types; + + namespace Bits + { + using FrontendElements::Traversal::TraverserBase; + using FrontendElements::Traversal::Traverser; + + using FrontendElements::Traversal::DispatcherBase; + using FrontendElements::Traversal::Dispatcher; + + } + + typedef Bits::DispatcherBase<SemanticGraph::Node> NodeDispatcherBase; + typedef Bits::DispatcherBase<SemanticGraph::Edge> EdgeDispatcherBase; + + + // + // + struct NodeBase : virtual Bits::Dispatcher<SemanticGraph::Node>, + virtual Bits::Dispatcher<SemanticGraph::Edge> + { + Void + edge_traverser (EdgeDispatcherBase& d) + { + Bits::Dispatcher<SemanticGraph::Edge>::traverser (d); + } + + EdgeDispatcherBase& + edge_traverser () + { + return *this; + } + + public: + using Bits::Dispatcher<SemanticGraph::Node>::dispatch; + using Bits::Dispatcher<SemanticGraph::Edge>::dispatch; + + using Bits::Dispatcher<SemanticGraph::Node>::map; + + using Bits::Dispatcher<SemanticGraph::Edge>::iterate_and_dispatch; + }; + + + // + // + template <typename T> + struct Node : Bits::TraverserBase<SemanticGraph::Node>, virtual NodeBase + { + typedef + T + Type; + + Node () + { + map (typeid (Type), *this); + } + + virtual Void + traverse (Type&) = 0; + + virtual Void + trampoline (SemanticGraph::Node& i) + { + traverse (dynamic_cast<Type&> (i)); + } + + virtual Void + trampoline (SemanticGraph::Node const&) + { + abort (); + } + }; + + + // + // + struct EdgeBase : virtual Bits::Dispatcher<SemanticGraph::Edge>, + virtual Bits::Dispatcher<SemanticGraph::Node> + { + Void + node_traverser (NodeDispatcherBase& d) + { + Bits::Dispatcher<SemanticGraph::Node>::traverser (d); + } + + NodeDispatcherBase& + node_traverser () + { + return *this; + } + + public: + using Bits::Dispatcher<SemanticGraph::Edge>::dispatch; + using Bits::Dispatcher<SemanticGraph::Node>::dispatch; + + using Bits::Dispatcher<SemanticGraph::Edge>::map; + + using Bits::Dispatcher<SemanticGraph::Node>::iterate_and_dispatch; + }; + + template <typename T> + struct Edge : Bits::TraverserBase<SemanticGraph::Edge>, virtual EdgeBase + { + typedef + T + Type; + + Edge () + { + map (typeid (Type), *this); + } + + virtual Void + traverse (Type&) = 0; + + virtual Void + trampoline (SemanticGraph::Edge& i) + { + traverse (dynamic_cast<Type&> (i)); + } + + virtual Void + trampoline (SemanticGraph::Edge const&) + { + abort (); + } + }; + + inline + EdgeBase& + operator>> (NodeBase& n, EdgeBase& e) + { + n.edge_traverser (e); + return e; + } + + inline + NodeBase& + operator>> (EdgeBase& e, NodeBase& n) + { + e.node_traverser (n); + return n; + } + + // Edges + // + + // + // + struct Names : Edge<SemanticGraph::Names> + { + Names () + { + } + + Names (NodeBase& n) + { + node_traverser (n); + } + + virtual Void + traverse (Type& e) + { + dispatch (e.named ()); + } + }; + + + // + // + struct Belongs : Edge<SemanticGraph::Belongs> + { + Belongs () + { + } + + Belongs (NodeBase& n) + { + node_traverser (n); + } + + virtual Void + traverse (Type& e) + { + dispatch (e.type ()); + } + }; + + + // Nodes + // + + + // + // + struct Nameable : Node<SemanticGraph::Nameable> + { + }; + + + // + // + template <typename T> + struct ScopeTemplate : Node<T> + { + public: + virtual Void + traverse (T& s) + { + names (s); + } + + template<typename X> + Void + names (T& s, + EdgeDispatcherBase& d, + Void (X::*pre_) (T&) = (Void (ScopeTemplate<T>::*)(T&)) (0), + Void (X::*post_) (T&) = (Void (ScopeTemplate<T>::*)(T&)) (0), + Void (X::*none_) (T&) = (Void (ScopeTemplate<T>::*)(T&)) (0), + Void (X::*next_) (T&) = (Void (ScopeTemplate<T>::*)(T&)) (0)) + { + X* this_ (dynamic_cast<X*> (this)); + + typename T::NamesIterator b (s.names_begin ()), e (s.names_end ()); + + if (b != e) + { + if (pre_) + (this_->*pre_) (s); + + //iterate_and_dispatch (b, e, d, *this_, next_, s); + + for (; b != s.names_end ();) + { + d.dispatch (*b); + + if (++b != s.names_end () && next_ != 0) + (this_->*next_) (s); + } + + if (post_) + (this_->*post_) (s); + } + else + { + if (none_) + (this_->*none_) (s); + } + } + + virtual Void + names (T& s, EdgeDispatcherBase& d) + { + names<ScopeTemplate<T> > (s, d); + } + + virtual Void + names (T& s) + { + names (s, + *this, + &ScopeTemplate<T>::names_pre, + &ScopeTemplate<T>::names_post, + &ScopeTemplate<T>::names_none, + &ScopeTemplate<T>::names_next); + } + + virtual Void + names_pre (T&) + { + } + + virtual Void + names_next (T&) + { + } + + virtual Void + names_post (T&) + { + } + + virtual Void + names_none (T&) + { + } + }; + + + // + // + typedef + ScopeTemplate<SemanticGraph::Scope> + Scope; + + + // + // + struct Type : Node<SemanticGraph::Type> + { + virtual Void + traverse (SemanticGraph::Type&) = 0; + }; + + + // + // + struct Instance : Node<SemanticGraph::Instance> + { + virtual Void + traverse (Type&); + + virtual Void + pre (Type&); + + virtual Void + belongs (Type&, EdgeDispatcherBase&); + + virtual Void + belongs (Type&); + + virtual Void + post (Type&); + }; + + + // + // + struct Member : Node<SemanticGraph::Member> + { + virtual Void + traverse (Type&); + + virtual Void + pre (Type&); + + virtual Void + belongs (Type&, EdgeDispatcherBase&); + + virtual Void + belongs (Type&); + + virtual Void + post (Type&); + }; + + + // + // + struct Inherits : Edge<SemanticGraph::Inherits> + { + Inherits () + { + } + + Inherits (NodeBase& n) + { + node_traverser (n); + } + + virtual Void + traverse (Type& e) + { + dispatch (e.base ()); + } + }; + + + // + // + struct Extends : Edge<SemanticGraph::Extends> + { + Extends () + { + } + + Extends (NodeBase& n) + { + node_traverser (n); + } + + virtual Void + traverse (Type& e) + { + dispatch (e.base ()); + } + }; + + + // + // + struct Restricts : Edge<SemanticGraph::Restricts> + { + Restricts () + { + } + + Restricts (NodeBase& n) + { + node_traverser (n); + } + + virtual Void + traverse (Type& e) + { + dispatch (e.base ()); + } + }; + + + // + // + struct Argumented : Edge<SemanticGraph::Arguments> + { + Argumented () + { + } + + Argumented (NodeBase& n) + { + node_traverser (n); + } + + virtual Void + traverse (Type& a) + { + dispatch (a.type ()); + } + }; + + + /* + // + // + struct Contains : Edge<SemanticGraph::Contains> + { + virtual Void + traverse (Type& e) + { + dispatch (e.element ()); + } + }; + */ + + // + // + typedef + Node<SemanticGraph::AnyType> + AnyType; + + + // + // + typedef + Node<SemanticGraph::AnySimpleType> + AnySimpleType; + } +} + +#include <xsd-frontend/traversal/elements.txx> + +#endif // XSD_FRONTEND_TRAVERSAL_ELEMENTS_HXX diff --git a/libxsd-frontend/xsd-frontend/traversal/elements.txx b/libxsd-frontend/xsd-frontend/traversal/elements.txx new file mode 100644 index 0000000..b673a8d --- /dev/null +++ b/libxsd-frontend/xsd-frontend/traversal/elements.txx @@ -0,0 +1,11 @@ +// file : xsd-frontend/traversal/elements.txx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +namespace XSDFrontend +{ + namespace Traversal + { + } +} diff --git a/libxsd-frontend/xsd-frontend/traversal/enumeration.cxx b/libxsd-frontend/xsd-frontend/traversal/enumeration.cxx new file mode 100644 index 0000000..a8a49a5 --- /dev/null +++ b/libxsd-frontend/xsd-frontend/traversal/enumeration.cxx @@ -0,0 +1,91 @@ +// file : xsd-frontend/traversal/enumeration.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <xsd-frontend/traversal/enumeration.hxx> + +namespace XSDFrontend +{ + namespace Traversal + { + // Enumeration + // + Void Enumeration:: + traverse (Type& e) + { + pre (e); + name (e); + inherits (e); + names (e); + post (e); + } + + Void Enumeration:: + pre (Type&) + { + } + + Void Enumeration:: + name (Type&) + { + } + + Void Enumeration:: + inherits (Type& e) + { + inherits (e, *this); + } + + Void Enumeration:: + inherits (Type& e, EdgeDispatcherBase& d) + { + if (e.inherits_p ()) + d.dispatch (e.inherits ()); + } + + Void Enumeration:: + post (Type&) + { + } + + + // Enumerator + // + Void Enumerator:: + traverse (Type& e) + { + pre (e); + belongs (e); + name (e); + post (e); + } + + Void Enumerator:: + pre (Type&) + { + } + + Void Enumerator:: + belongs (Type& e, EdgeDispatcherBase& d) + { + d.dispatch (e.belongs ()); + } + + Void Enumerator:: + belongs (Type& e) + { + belongs (e, edge_traverser ()); + } + + Void Enumerator:: + name (Type&) + { + } + + Void Enumerator:: + post (Type&) + { + } + } +} diff --git a/libxsd-frontend/xsd-frontend/traversal/enumeration.hxx b/libxsd-frontend/xsd-frontend/traversal/enumeration.hxx new file mode 100644 index 0000000..c6d7f04 --- /dev/null +++ b/libxsd-frontend/xsd-frontend/traversal/enumeration.hxx @@ -0,0 +1,60 @@ +// file : xsd-frontend/traversal/enumeration.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_FRONTEND_TRAVERSAL_ENUMERATION_HXX +#define XSD_FRONTEND_TRAVERSAL_ENUMERATION_HXX + +#include <xsd-frontend/traversal/elements.hxx> +#include <xsd-frontend/semantic-graph/enumeration.hxx> + +namespace XSDFrontend +{ + namespace Traversal + { + struct Enumeration : ScopeTemplate<SemanticGraph::Enumeration> + { + virtual Void + traverse (Type&); + + virtual Void + pre (Type&); + + virtual Void + name (Type&); + + virtual Void + inherits (Type&); + + Void + inherits (Type&, EdgeDispatcherBase&); + + virtual Void + post (Type&); + }; + + struct Enumerator : Node<SemanticGraph::Enumerator> + { + virtual Void + traverse (Type&); + + virtual Void + pre (Type&); + + virtual Void + belongs (Type&, EdgeDispatcherBase&); + + virtual Void + belongs (Type&); + + virtual Void + name (Type&); + + virtual Void + post (Type&); + }; + } +} + +#endif // XSD_FRONTEND_TRAVERSAL_ENUMERATION_HXX diff --git a/libxsd-frontend/xsd-frontend/traversal/fundamental.cxx b/libxsd-frontend/xsd-frontend/traversal/fundamental.cxx new file mode 100644 index 0000000..b9cadec --- /dev/null +++ b/libxsd-frontend/xsd-frontend/traversal/fundamental.cxx @@ -0,0 +1,13 @@ +// file : xsd-frontend/traversal/fundamental.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <xsd-frontend/traversal/fundamental.hxx> + +namespace XSDFrontend +{ + namespace Traversal + { + } +} diff --git a/libxsd-frontend/xsd-frontend/traversal/fundamental.hxx b/libxsd-frontend/xsd-frontend/traversal/fundamental.hxx new file mode 100644 index 0000000..5c20d9c --- /dev/null +++ b/libxsd-frontend/xsd-frontend/traversal/fundamental.hxx @@ -0,0 +1,234 @@ +// file : xsd-frontend/traversal/fundamental.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_FRONTEND_TRAVERSAL_FUNDAMENTAL_HXX +#define XSD_FRONTEND_TRAVERSAL_FUNDAMENTAL_HXX + +#include <xsd-frontend/traversal/elements.hxx> +#include <xsd-frontend/semantic-graph/fundamental.hxx> + +namespace XSDFrontend +{ + namespace Traversal + { + namespace Fundamental + { + typedef + Node<SemanticGraph::Fundamental::Type> + Type; + + // Integers. + // + typedef + Node<SemanticGraph::Fundamental::Byte> + Byte; + + typedef + Node<SemanticGraph::Fundamental::UnsignedByte> + UnsignedByte; + + typedef + Node<SemanticGraph::Fundamental::Short> + Short; + + typedef + Node<SemanticGraph::Fundamental::UnsignedShort> + UnsignedShort; + + typedef + Node<SemanticGraph::Fundamental::Int> + Int; + + typedef + Node<SemanticGraph::Fundamental::UnsignedInt> + UnsignedInt; + + typedef + Node<SemanticGraph::Fundamental::Long> + Long; + + typedef + Node<SemanticGraph::Fundamental::UnsignedLong> + UnsignedLong; + + typedef + Node<SemanticGraph::Fundamental::Integer> + Integer; + + typedef + Node<SemanticGraph::Fundamental::NonPositiveInteger> + NonPositiveInteger; + + typedef + Node<SemanticGraph::Fundamental::NonNegativeInteger> + NonNegativeInteger; + + typedef + Node<SemanticGraph::Fundamental::PositiveInteger> + PositiveInteger; + + typedef + Node<SemanticGraph::Fundamental::NegativeInteger> + NegativeInteger; + + + // Boolean. + // + typedef + Node<SemanticGraph::Fundamental::Boolean> + Boolean; + + + // Floats. + // + typedef + Node<SemanticGraph::Fundamental::Float> + Float; + + typedef + Node<SemanticGraph::Fundamental::Double> + Double; + + typedef + Node<SemanticGraph::Fundamental::Decimal> + Decimal; + + + // Strings. + // + typedef + Node<SemanticGraph::Fundamental::String> + String; + + typedef + Node<SemanticGraph::Fundamental::NormalizedString> + NormalizedString; + + typedef + Node<SemanticGraph::Fundamental::Token> + Token; + + typedef + Node<SemanticGraph::Fundamental::Name> + Name; + + typedef + Node<SemanticGraph::Fundamental::NameToken> + NameToken; + + typedef + Node<SemanticGraph::Fundamental::NameTokens> + NameTokens; + + typedef + Node<SemanticGraph::Fundamental::NCName> + NCName; + + typedef + Node<SemanticGraph::Fundamental::Language> + Language; + + + // Qualified name. + // + typedef + Node<SemanticGraph::Fundamental::QName> + QName; + + + // ID/IDREF. + // + typedef + Node<SemanticGraph::Fundamental::Id> + Id; + + typedef + Node<SemanticGraph::Fundamental::IdRef> + IdRef; + + typedef + Node<SemanticGraph::Fundamental::IdRefs> + IdRefs; + + + // URI. + // + typedef + Node<SemanticGraph::Fundamental::AnyURI> + AnyURI; + + + // Binary. + // + typedef + Node<SemanticGraph::Fundamental::Base64Binary> + Base64Binary; + + typedef + Node<SemanticGraph::Fundamental::HexBinary> + HexBinary; + + + // Date/time. + // + typedef + Node<SemanticGraph::Fundamental::Date> + Date; + + typedef + Node<SemanticGraph::Fundamental::DateTime> + DateTime; + + typedef + Node<SemanticGraph::Fundamental::Duration> + Duration; + + typedef + Node<SemanticGraph::Fundamental::Day> + Day; + + typedef + Node<SemanticGraph::Fundamental::Month> + Month; + + typedef + Node<SemanticGraph::Fundamental::MonthDay> + MonthDay; + + typedef + Node<SemanticGraph::Fundamental::Year> + Year; + + typedef + Node<SemanticGraph::Fundamental::YearMonth> + YearMonth; + + typedef + Node<SemanticGraph::Fundamental::Time> + Time; + + + // Entity. + // + typedef + Node<SemanticGraph::Fundamental::Entity> + Entity; + + typedef + Node<SemanticGraph::Fundamental::Entities> + Entities; + + + // Notation. + // + typedef + Node<SemanticGraph::Fundamental::Notation> + Notation; + } + } +} + + +#endif // XSD_FRONTEND_TRAVERSAL_FUNDAMENTAL_HXX diff --git a/libxsd-frontend/xsd-frontend/traversal/list.cxx b/libxsd-frontend/xsd-frontend/traversal/list.cxx new file mode 100644 index 0000000..ec434ba --- /dev/null +++ b/libxsd-frontend/xsd-frontend/traversal/list.cxx @@ -0,0 +1,48 @@ +// file : xsd-frontend/traversal/list.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <xsd-frontend/traversal/list.hxx> + +namespace XSDFrontend +{ + namespace Traversal + { + Void List:: + traverse (Type& l) + { + pre (l); + argumented (l); + name (l); + post (l); + } + + Void List:: + pre (Type&) + { + } + + Void List:: + argumented (Type& l) + { + argumented (l, *this); + } + + Void List:: + argumented (Type& l, EdgeDispatcherBase& d) + { + d.dispatch (l.argumented ()); + } + + Void List:: + name (Type&) + { + } + + Void List:: + post (Type&) + { + } + } +} diff --git a/libxsd-frontend/xsd-frontend/traversal/list.hxx b/libxsd-frontend/xsd-frontend/traversal/list.hxx new file mode 100644 index 0000000..2bbc136 --- /dev/null +++ b/libxsd-frontend/xsd-frontend/traversal/list.hxx @@ -0,0 +1,39 @@ +// file : xsd-frontend/traversal/list.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_FRONTEND_TRAVERSAL_LIST_HXX +#define XSD_FRONTEND_TRAVERSAL_LIST_HXX + +#include <xsd-frontend/traversal/elements.hxx> +#include <xsd-frontend/semantic-graph/list.hxx> + +namespace XSDFrontend +{ + namespace Traversal + { + struct List: Node<SemanticGraph::List> + { + virtual Void + traverse (Type&); + + virtual Void + pre (Type&); + + virtual Void + argumented (Type&); + + virtual Void + argumented (Type&, EdgeDispatcherBase& d); + + virtual Void + name (Type&); + + virtual Void + post (Type&); + }; + } +} + +#endif // XSD_FRONTEND_TRAVERSAL_LIST_HXX diff --git a/libxsd-frontend/xsd-frontend/traversal/namespace.cxx b/libxsd-frontend/xsd-frontend/traversal/namespace.cxx new file mode 100644 index 0000000..cbc6ef2 --- /dev/null +++ b/libxsd-frontend/xsd-frontend/traversal/namespace.cxx @@ -0,0 +1,13 @@ +// file : xsd-frontend/traversal/namespace.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <xsd-frontend/traversal/namespace.hxx> + +namespace XSDFrontend +{ + namespace Traversal + { + } +} diff --git a/libxsd-frontend/xsd-frontend/traversal/namespace.hxx b/libxsd-frontend/xsd-frontend/traversal/namespace.hxx new file mode 100644 index 0000000..22305e1 --- /dev/null +++ b/libxsd-frontend/xsd-frontend/traversal/namespace.hxx @@ -0,0 +1,45 @@ +// file : xsd-frontend/traversal/namespace.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_FRONTEND_TRAVERSAL_NAMESPACE_HXX +#define XSD_FRONTEND_TRAVERSAL_NAMESPACE_HXX + +#include <xsd-frontend/traversal/elements.hxx> +#include <xsd-frontend/semantic-graph/namespace.hxx> + +namespace XSDFrontend +{ + namespace Traversal + { + struct Namespace: ScopeTemplate<SemanticGraph::Namespace> + { + virtual Void + traverse (Type& m) + { + pre (m); + name (m); + names (m); + post (m); + } + + virtual Void + pre (Type&) + { + } + + virtual Void + name (Type&) + { + } + + virtual Void + post (Type&) + { + } + }; + } +} + +#endif // XSD_FRONTEND_TRAVERSAL_NAMESPACE_HXX diff --git a/libxsd-frontend/xsd-frontend/traversal/particle.cxx b/libxsd-frontend/xsd-frontend/traversal/particle.cxx new file mode 100644 index 0000000..e3d3a97 --- /dev/null +++ b/libxsd-frontend/xsd-frontend/traversal/particle.cxx @@ -0,0 +1,31 @@ +// file : xsd-frontend/traversal/particle.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <xsd-frontend/traversal/particle.hxx> + +namespace XSDFrontend +{ + namespace Traversal + { + // Particle + // + Void Particle:: + traverse (Type& c) + { + pre (c); + post (c); + } + + Void Particle:: + pre (Type&) + { + } + + Void Particle:: + post (Type&) + { + } + } +} diff --git a/libxsd-frontend/xsd-frontend/traversal/particle.hxx b/libxsd-frontend/xsd-frontend/traversal/particle.hxx new file mode 100644 index 0000000..3584c12 --- /dev/null +++ b/libxsd-frontend/xsd-frontend/traversal/particle.hxx @@ -0,0 +1,30 @@ +// file : xsd-frontend/traversal/particle.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_FRONTEND_TRAVERSAL_PARTICLE_HXX +#define XSD_FRONTEND_TRAVERSAL_PARTICLE_HXX + +#include <xsd-frontend/traversal/elements.hxx> +#include <xsd-frontend/semantic-graph/particle.hxx> + +namespace XSDFrontend +{ + namespace Traversal + { + struct Particle : Node<SemanticGraph::Particle> + { + virtual Void + traverse (Type&); + + virtual Void + pre (Type&); + + virtual Void + post (Type&); + }; + } +} + +#endif // XSD_FRONTEND_TRAVERSAL_PARTICLE_HXX diff --git a/libxsd-frontend/xsd-frontend/traversal/schema.cxx b/libxsd-frontend/xsd-frontend/traversal/schema.cxx new file mode 100644 index 0000000..acfca26 --- /dev/null +++ b/libxsd-frontend/xsd-frontend/traversal/schema.cxx @@ -0,0 +1,13 @@ +// file : xsd-frontend/traversal/schema.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <xsd-frontend/traversal/schema.hxx> + +namespace XSDFrontend +{ + namespace Traversal + { + } +} diff --git a/libxsd-frontend/xsd-frontend/traversal/schema.hxx b/libxsd-frontend/xsd-frontend/traversal/schema.hxx new file mode 100644 index 0000000..a975475 --- /dev/null +++ b/libxsd-frontend/xsd-frontend/traversal/schema.hxx @@ -0,0 +1,150 @@ +// file : xsd-frontend/traversal/schema.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_FRONTEND_TRAVERSAL_SCHEMA_HXX +#define XSD_FRONTEND_TRAVERSAL_SCHEMA_HXX + +#include <xsd-frontend/traversal/elements.hxx> +#include <xsd-frontend/semantic-graph/schema.hxx> + +namespace XSDFrontend +{ + namespace Traversal + { + // + // + struct Uses: Edge<SemanticGraph::Uses> + { + Uses () + { + } + + Uses (NodeBase& n) + { + node_traverser (n); + } + + virtual Void + traverse (Type& e) + { + dispatch (e.schema ()); + } + }; + + // + // + struct Implies: Edge<SemanticGraph::Implies> + { + Implies () + { + } + + Implies (NodeBase& n) + { + node_traverser (n); + } + + virtual Void + traverse (Type& e) + { + dispatch (e.schema ()); + } + }; + + + // + // + struct Sources: Edge<SemanticGraph::Sources> + { + Sources () + { + } + + Sources (NodeBase& n) + { + node_traverser (n); + } + + virtual Void + traverse (Type& e) + { + dispatch (e.schema ()); + } + }; + + + // + // + struct Includes: Edge<SemanticGraph::Includes> + { + Includes () + { + } + + Includes (NodeBase& n) + { + node_traverser (n); + } + + virtual Void + traverse (Type& e) + { + dispatch (e.schema ()); + } + }; + + + // + // + struct Imports: Edge<SemanticGraph::Imports> + { + Imports () + { + } + + Imports (NodeBase& n) + { + node_traverser (n); + } + + virtual Void + traverse (Type& e) + { + dispatch (e.schema ()); + } + }; + + + // + // + struct Schema: ScopeTemplate<SemanticGraph::Schema> + { + virtual Void + traverse (Type& s) + { + pre (s); + + iterate_and_dispatch ( + s.uses_begin (), s.uses_end (), edge_traverser ()); + + names (s); + + post (s); + } + + virtual Void + pre (Type&) + { + } + + virtual Void + post (Type&) + { + } + }; + } +} + +#endif // XSD_FRONTEND_TRAVERSAL_SCHEMA_HXX diff --git a/libxsd-frontend/xsd-frontend/traversal/union.cxx b/libxsd-frontend/xsd-frontend/traversal/union.cxx new file mode 100644 index 0000000..acf419a --- /dev/null +++ b/libxsd-frontend/xsd-frontend/traversal/union.cxx @@ -0,0 +1,48 @@ +// file : xsd-frontend/traversal/union.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <xsd-frontend/traversal/union.hxx> + +namespace XSDFrontend +{ + namespace Traversal + { + Void Union:: + traverse (Type& u) + { + pre (u); + argumented (u); + name (u); + post (u); + } + + Void Union:: + pre (Type&) + { + } + + Void Union:: + argumented (Type& u) + { + argumented (u, *this); + } + + Void Union:: + argumented (Type& u, EdgeDispatcherBase& d) + { + iterate_and_dispatch (u.argumented_begin (), u.argumented_end (), d); + } + + Void Union:: + name (Type&) + { + } + + Void Union:: + post (Type&) + { + } + } +} diff --git a/libxsd-frontend/xsd-frontend/traversal/union.hxx b/libxsd-frontend/xsd-frontend/traversal/union.hxx new file mode 100644 index 0000000..e3d31bd --- /dev/null +++ b/libxsd-frontend/xsd-frontend/traversal/union.hxx @@ -0,0 +1,39 @@ +// file : xsd-frontend/traversal/union.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_FRONTEND_TRAVERSAL_UNION_HXX +#define XSD_FRONTEND_TRAVERSAL_UNION_HXX + +#include <xsd-frontend/traversal/elements.hxx> +#include <xsd-frontend/semantic-graph/union.hxx> + +namespace XSDFrontend +{ + namespace Traversal + { + struct Union: Node<SemanticGraph::Union> + { + virtual Void + traverse (Type&); + + virtual Void + pre (Type&); + + virtual Void + argumented (Type&); + + virtual Void + argumented (Type&, EdgeDispatcherBase& d); + + virtual Void + name (Type&); + + virtual Void + post (Type&); + }; + } +} + +#endif // XSD_FRONTEND_TRAVERSAL_UNION_HXX diff --git a/libxsd-frontend/xsd-frontend/types.hxx b/libxsd-frontend/xsd-frontend/types.hxx new file mode 100644 index 0000000..b3059fd --- /dev/null +++ b/libxsd-frontend/xsd-frontend/types.hxx @@ -0,0 +1,18 @@ +// file : xsd-frontend/types.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_FRONTEND_TYPES_HXX +#define XSD_FRONTEND_TYPES_HXX + +#include <cult/types.hxx> + +namespace XSDFrontend +{ + using namespace Cult::Types; + + typedef Cult::WideString String; +} + +#endif // XSD_FRONTEND_TYPES_HXX diff --git a/libxsd-frontend/xsd-frontend/xml.hxx b/libxsd-frontend/xsd-frontend/xml.hxx new file mode 100644 index 0000000..8c9b01c --- /dev/null +++ b/libxsd-frontend/xsd-frontend/xml.hxx @@ -0,0 +1,567 @@ +// file : xsd-frontend/xml.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_FRONTEND_XML_HXX +#define XSD_FRONTEND_XML_HXX + +#include <ostream> + +#include <xercesc/dom/DOM.hpp> +#include <xercesc/util/XMLString.hpp> + +#include <cult/containers/vector.hxx> + +#include <xsd-frontend/types.hxx> +#include <xsd-frontend/schema-dom-parser.hxx> + +namespace XSDFrontend +{ + namespace XML + { + namespace Xerces = xercesc; + + inline + String + transcode (XMLCh const* s, Size length) + { + if (sizeof (WideChar) == 4) + { + // UTF-32 + // + XMLCh const* end (s + length); + + // Find what the resulting buffer size will be. + // + Size rl (0); + Boolean valid (true); + + for (XMLCh const* p (s); p < end; ++p) + { + rl++; + + if ((*p >= 0xD800) && (*p <= 0xDBFF)) + { + // Make sure we have one more char and it has a valid + // value for the second char in a surrogate pair. + // + if (++p == end || !((*p >= 0xDC00) && (*p <= 0xDFFF))) + { + valid = false; + break; + } + } + } + + if (!valid) + return String (); + + String r; + r.reserve (rl + 1); + r.resize (rl); + WideChar* rs (const_cast<WideChar*> (r.c_str ())); + + Size i (0); + + for (XMLCh const* p (s); p < end; ++p) + { + XMLCh x (*p); + + if (x < 0xD800 || x > 0xDBFF) + rs[i++] = WideChar (x); + else + rs[i++] = ((x - 0xD800) << 10) + (*++p - 0xDC00) + 0x10000; + } + + return r; + } + else if (sizeof (WideChar) == 2) + { + // UTF-16 + // + return String (reinterpret_cast<const WideChar*> (s), length); + } + else + return String (); + } + + inline + String + transcode (XMLCh const* s) + { + return transcode (s, Xerces::XMLString::stringLen (s)); + } + + inline + NarrowString + transcode_to_narrow (XMLCh const* xs) + { + Char* s (Xerces::XMLString::transcode (xs)); + NarrowString r (s); + Xerces::XMLString::release (&s); + return r; + } + + inline + XMLCh* + transcode (String const& str) + { + Size l (str.size ()); + WideChar const* s (str.c_str ()); + + if (sizeof (WideChar) == 4) + { + // Find what the resulting buffer size will be. + // + Size rl (0); + + for (WideChar const* p (s); p < s + l; ++p) + { + rl += (*p & 0xFFFF0000) ? 2 : 1; + } + + XMLCh* r (new XMLCh[rl + 1]); + XMLCh* ir (r); + + for (WideChar const* p (s); p < s + l; ++p) + { + WideChar w (*p); + + if (w & 0xFFFF0000) + { + // Surrogate pair. + // + *ir++ = static_cast<XMLCh> (((w - 0x10000) >> 10) + 0xD800); + *ir++ = static_cast<XMLCh> ((w & 0x3FF) + 0xDC00); + } + else + *ir++ = static_cast<XMLCh> (w); + } + + *ir = XMLCh (0); + + return r; + } + else if (sizeof (WideChar) == 2) + { + XMLCh* r (new XMLCh[l + 1]); + XMLCh* ir (r); + + for (Size i (0); i < l; ++ir, ++i) + *ir = static_cast<XMLCh> (s[i]); + + *ir = XMLCh (0); + + return r; + } + else + return 0; + } + + class XMLChString + { + public : + XMLChString (String const& s) + : s_ (transcode (s)) + { + } + + XMLChString (WideChar const* s) + : s_ (transcode (String (s))) + { + } + + ~XMLChString () + { + delete[] s_; + } + + XMLCh const* + c_str () const + { + return s_; + } + + private: + XMLChString (XMLChString const&); + + XMLChString& + operator= (XMLChString const&); + + private: + XMLCh* s_; + }; + + + class Element + { + public: + Element (Xerces::DOMElement* e) + : e_ (e), + name_ (transcode (e->getLocalName ())), + namespace__ (transcode (e->getNamespaceURI ())) + { + } + + String + name () const + { + return name_; + } + + String + namespace_ () const + { + return namespace__; + } + + public: + UnsignedLong + line () const + { + //@@ cache + // + return reinterpret_cast<UnsignedLong> (e_->getUserData (line_key)); + } + + UnsignedLong + column () const + { + //@@ cache + // + return reinterpret_cast<UnsignedLong> (e_->getUserData (column_key)); + } + + public: + Element + parent () const + { + return dynamic_cast<Xerces::DOMElement*>(e_->getParentNode ()); + } + + public: + // Attribute identified by a name. + // + Boolean + attribute_p (String const& name) const + { + return attribute_p ("", name); + } + + String + attribute (String const& name) const + { + return attribute ("", name); + } + + String + operator[] (String const& name) const + { + return attribute (name); + } + + // Attribute identified by namespace and name. + // + + Boolean + attribute_p (String const& namespace_, String const& name) const + { + Xerces::DOMAttr* a ( + e_->getAttributeNodeNS ( + XMLChString (namespace_).c_str (), + XMLChString (name).c_str ())); + + return a != 0; + } + + String + attribute (String const& namespace_, String const& name) const + { + XMLCh const* value ( + e_->getAttributeNS ( + XMLChString (namespace_).c_str (), + XMLChString (name).c_str ())); + + return transcode (value); + } + + public: + Xerces::DOMElement* + dom_element () const + { + return e_; + } + + private: + Xerces::DOMElement* e_; + + String name_; + String namespace__; + }; + + inline String + prefix (String const& n) + { + Size i (0); + while (i < n.length () && n[i] != L':') ++i; + + //std::wcerr << "prefix " << n << " " + // << String (n, i == n.length () ? i : 0, i) << std::endl; + + return String (n, i == n.length () ? i : 0, i); + } + + inline String + uq_name (String const& n) + { + Size i (0); + while (i < n.length () && n[i] != L':') ++i; + + return String (n.c_str () + (i == n.length () ? 0 : i + 1)); + } + + struct NoMapping + { + NoMapping (String const& prefix) + : prefix_ (prefix) + { + } + + String const& + prefix () const + { + return prefix_; + } + + private: + String prefix_; + }; + + // Throws NoMapping if there is no prefix-namespace association. + // + inline String + ns_name (Xerces::DOMElement const* e, String const& prefix) + { + // 'xml' prefix requires special handling and Xerces folks refuse + // to handle this in DOM so I have to do it myself. + // + if (prefix == L"xml") + return L"http://www.w3.org/XML/1998/namespace"; + + // 0 means "no prefix" to Xerces. + // + XMLCh const* xns ( + e->lookupNamespaceURI ( + prefix.empty () ? 0 : XMLChString (prefix).c_str ())); + + if (xns == 0) + throw NoMapping (prefix); + + return transcode (xns); + } + + class NoPrefix {}; + + inline String + ns_prefix (Element const& e, String const& wns) + { + XMLChString ns (wns); + +#if _XERCES_VERSION >= 30000 + XMLCh const* p ( + e.dom_element ()->lookupPrefix (ns.c_str ())); +#else + XMLCh const* p ( + e.dom_element ()->lookupNamespacePrefix (ns.c_str (), false)); +#endif + + if (p == 0) + { + Boolean r (e.dom_element ()->isDefaultNamespace (ns.c_str ())); + + if (r) + return L""; + else + { + // 'xml' prefix requires special handling and Xerces folks refuse + // to handle this in DOM so I have to do it myself. + // + if (wns == L"http://www.w3.org/XML/1998/namespace") + return L"xml"; + + throw NoPrefix (); + } + } + + return transcode (p); + } + + inline String + fq_name (Element const& e, String const& n) + { + String un (uq_name (n)); + + try + { + String ns (ns_name (e.dom_element (), prefix (n))); + return ns + L'#' + un; + } + catch (XML::NoMapping const&) + { + return un; + } + } + + + // Simple auto_ptr version that calls release() instead of delete. + // + + template <typename X> + struct AutoPtrRef + { + X* x_; + + explicit + AutoPtrRef (X* x) + : x_ (x) + { + } + }; + + template <typename X> + struct AutoPtr + { + ~AutoPtr () + { + reset (); + } + + explicit + AutoPtr (X* x = 0) + : x_ (x) + { + } + + AutoPtr (AutoPtr& y) + : x_ (y.release ()) + { + } + + AutoPtr (AutoPtrRef<X> r) + : x_ (r.x_) + { + } + + AutoPtr& + operator= (AutoPtr& y) + { + if (this != &y) + { + reset (y.release ()); + } + + return *this; + } + + AutoPtr& + operator= (AutoPtrRef<X> r) + { + if (r.x_ != x_) + { + reset (r.x_); + } + + return *this; + } + + operator AutoPtrRef<X> () + { + return AutoPtrRef<X> (release ()); + } + + public: + X& + operator* () const + { + return *x_; + } + + X* + operator-> () const + { + return x_; + } + + X* + get () const + { + return x_; + } + + X* + release () + { + X* x (x_); + x_ = 0; + return x; + } + + void + reset (X* x = 0) + { + if (x_) + x_->release (); + + x_ = x; + } + + // Conversion to bool. + // + typedef X* (AutoPtr::*BooleanConvertible)() const; + + operator BooleanConvertible () const throw () + { + return x_ ? &AutoPtr<X>::operator-> : 0; + } + + private: + X* x_; + }; + + template <typename X> + struct PtrVector: Cult::Containers::Vector<X*> + { + typedef Cult::Containers::Vector<X*> Base; + + ~PtrVector () + { + for (typename Base::Iterator i (this->begin ()), e (this->end ()); + i != e; ++i) + { + if (*i) + (*i)->release (); + } + } + + Void + push_back (AutoPtr<X>& x) + { + Base::push_back (0); + this->back () = x.release (); + } + }; + } +} + +// Xerces DOoM. +// +// +inline +std::wostream& +operator<< (std::wostream& o, XMLCh const* s) +{ + return o << XSDFrontend::XML::transcode (s); +} + +#endif // XSD_FRONTEND_XML_HXX diff --git a/makefile b/makefile new file mode 100644 index 0000000..f9d9dc7 --- /dev/null +++ b/makefile @@ -0,0 +1,77 @@ +# file : makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2009-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))/build-0.3/bootstrap.make + +default := $(out_base)/ + +.PHONY: $(default) test install dist dist-win clean + +# Build. +# +$(default): $(out_base)/xsd/xsd/ + +# Test. +# +test: $(out_base)/xsd/.test + +# Install. +# +install: $(out_base)/xsd/.install + +# Dist. +# +dist: $(out_base)/xsd/.dist +dist-win: $(out_base)/xsd/.dist-win + +# Clean. +# +clean: $(out_base)/libcult/.clean \ + $(out_base)/libfrontend-elements/.clean \ + $(out_base)/libbackend-elements/.clean \ + $(out_base)/libxsd-frontend/.clean \ + $(out_base)/xsd/.clean + +# Reset pattern-specific variables because GNU make will use the +# first match instead of the most specific match. Here out_root +# and out_base are the same. +# +$(out_root)/%: out_root := +$(out_root)/%: out_base := +$(out_root)/%: src_root := +$(out_root)/%: src_base := +$(out_root)/%: scf_root := +$(out_root)/%: dcf_root := +$(out_root)/%: project_name := + +src_root := $(src_base)/libcult +scf_root := $(src_root)/build +out_root := $(src_root) +$(call import,$(src_base)/libcult/makefile) + +src_root := $(src_base)/libfrontend-elements +scf_root := $(src_root)/build +out_root := $(src_root) +$(call import,$(src_base)/libfrontend-elements/makefile) + +src_root := $(src_base)/libbackend-elements +scf_root := $(src_root)/build +out_root := $(src_root) +$(call import,$(src_base)/libbackend-elements/makefile) + +src_root := $(src_base)/libxsd-frontend +scf_root := $(src_root)/build +out_root := $(src_root) +$(call import,$(src_base)/libxsd-frontend/makefile) + +src_root := $(src_base)/xsd +scf_root := $(src_root)/build +out_root := $(src_root) + +ifneq ($(filter $(MAKECMDGOALS),clean test install dist dist-win),) +$(call import,$(src_base)/xsd/makefile) +else +$(call import,$(src_base)/xsd/xsd/makefile) +endif diff --git a/xsd/FLOSSE b/xsd/FLOSSE new file mode 100644 index 0000000..cbf8b2c --- /dev/null +++ b/xsd/FLOSSE @@ -0,0 +1,89 @@ +1. Intent + +We want specified Free/Libre and Open Source Software ("FLOSS") to be +able to use the specified GPL-licensed XSD runtime library (libxsd) and +XSD generated code (collectively called the "Program") despite the fact +that not all FLOSS licenses are compatible with version 2 of the GNU +General Public License (the "GPL"). + +It is our intent to allow distribution of the entire Derivative Work +(including the Program) under one or more of the FLOSS licenses listed +in section 3 (section 2.a). It is also our intent to disallow simple +relicensing of the Program for the sole purpose of using it in +proprietary applications (section 2.b and 2.c). As an example, consider +two hypothetical scenarios: + + a) You created a program that uses the XSD generated code and the XSD + runtime library to access information in XML instance documents. + Your program performs useful computations based on this information + (sections 2.b and 2.c are satisfied). You distribute your program, + including the XSD generated code and the XSD runtime library under + the BSD license and make it available at no charge to all third + parties (section 2.a is satisfied). Later you (or someone else) may + choose to base their proprietary application on your code since the + BSD license does not prohibit it. + + This scenario falls under this FLOSS Exception. + + + b) You created a library that uses the XSD generated code and the XSD + runtime library to access information in XML instance documents. You + did not add to the library any other useful code that uses the XSD + generated code or the XSD runtime library (neither section 2.b nor + 2.c is satisfied). You distribute your library, including the XSD + generated code and the XSD runtime library under the BSD license and + make it available at no charge to all third parties (section 2.a + is satisfied). Later you base your proprietary application on this + library since the BSD license does not prohibit it. + + This scenario does not fall under this FLOSS Exception (neither + section 2.b nor 2.c is satisfied). You created the library for the + sole purpose of making the XSD generated code and the XSD runtime + library available to your proprietary application. + + +2. Legal Terms and Conditions + +As a special exception to the terms and conditions of version 2 of +the GPL you are free to distribute a verbatim copy of the Program +as part of the Derivative Work that is formed from the Program or +any part thereof and one or more works (each, a "FLOSS Work") as +long as you also meet all of these conditions: + + a) You must cause the Derivative Work that in whole or in part + contains or is derived from the Program or any part thereof, + to be licensed as a whole at no charge to all third parties + under the terms of one or more of the licenses listed in + section 3. + + b) The Derivative Work should contain one or more FLOSS Work that + can be reasonably considered as derived from the Program or some + part thereof. + + c) The Derivative Work should not contain any part of the Program + that cannot be reasonably considered as a base of one or more + FLOSS Work. + + +3. FLOSS License List + + a) Any license listed in the "GPL-Compatible Free Software Licenses" + and the "GPL-Incompatible Free Software Licenses" sections of the + License List as published by the Free Software Foundation (FSF): + + http://www.gnu.org/licenses/license-list.html + + +4. Definitions + +Terms used, but not defined, herein shall have the meaning provided in +the GPL. + +Derivative Work means a derivative work under copyright law. + + +5. Applicability + +You may choose to redistribute a copy of the Program exclusively under +the terms of the GPL by removing the FLOSS Exception notice from that +copy of the Program. diff --git a/xsd/GPLv2 b/xsd/GPLv2 new file mode 100644 index 0000000..3912109 --- /dev/null +++ b/xsd/GPLv2 @@ -0,0 +1,340 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (C) <year> <name of author> + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + <signature of Ty Coon>, 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. diff --git a/xsd/INSTALL b/xsd/INSTALL new file mode 100644 index 0000000..366cda1 --- /dev/null +++ b/xsd/INSTALL @@ -0,0 +1,66 @@ +Compiler Prerequisites + + build-time: + + - build >= 0.3.7 http://www.codesynthesis.com/projects/build/ + - g++ >= 3.4.3 http://gcc.gnu.org + + run-time: + + - libxsd-frontend >= 1.17.0 http://www.codesynthesis.com/projects/libxsd-frontend/ + - libbackend-elements >= 1.7.2 http://kolpackov.net/projects/libbackend-elements/ + - libcult >= 1.4.6 http://kolpackov.net/projects/libcult/ + - libxerces-c >= 2.6.0 http://xerces.apache.org/xerces-c/ + - libboost_filesystem >= 1.33.1 http://boost.org + - libboost_regex >= 1.33.1 http://boost.org + +Generated Code Prerequisites + + build-time: + + - libxsd (header-only XSD runtime library, part of the XSD distribution) + + run-time: + + - libxerces-c >= 2.5.0 (C++/Tree and C++/Parser mappings) + http://xerces.apache.org/xerces-c/ + + - libexpat >= 1.95.8 (C++/Parser mapping, alternative to libxerces-c) + http://www.libexpat.org + + +Building XSD + + To build in the source directory simply run 'make'. You can also + build in a separate directory, e.g., + + $ mkdir xsd-i686-pc-linux-gnu + $ cd xsd-i686-pc-linux-gnu + $ make -f ../xsd-x.y.z/makefile + + +Installing XSD + + To install XSD, run 'make install'. Use the install_prefix command + line variable to specify installation location (default is /usr/local), + e.g., + + $ make install_prefix=/usr install + + You can fine-tune the installation locations with the following make + variables: + + install_prefix default is /usr/local + install_data_prefix default is install_prefix + install_exec_prefix default is install_prefix + + install_bin_dir default is install_exec_prefix/bin + install_sbin_dir default is install_exec_prefix/sbin + install_lib_dir default is install_exec_prefix/lib + + install_data_dir default is install_data_prefix/share + install_inc_dir default is install_data_prefix/include + + install_doc_dir default is install_data_dir/doc + install_man_dir default is install_data_dir/man + install_info_dir default is install_data_dir/info diff --git a/xsd/LICENSE b/xsd/LICENSE new file mode 100644 index 0000000..42346bf --- /dev/null +++ b/xsd/LICENSE @@ -0,0 +1,26 @@ +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License version 2 as +published by the Free Software Foundation. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +In addition, as a special exception, Code Synthesis Tools CC gives +permission to link this program with the Xerces-C++ library (or with +modified versions of Xerces-C++ that use the same license as Xerces-C++), +and distribute linked combinations including the two. You must obey +the GNU General Public License version 2 in all respects for all of +the code used other than Xerces-C++. If you modify this copy of the +program, you may extend this exception to your version of the program, +but you are not obligated to do so. If you do not wish to do so, delete +this exception statement from your version. + +In addition, Code Synthesis Tools CC makes a special exception for +the Free/Libre and Open Source Software (FLOSS) which is described +in the accompanying FLOSSE file. diff --git a/xsd/NEWS b/xsd/NEWS new file mode 100644 index 0000000..b999efb --- /dev/null +++ b/xsd/NEWS @@ -0,0 +1,1131 @@ +Version 3.3.0 + + * New option, --char-encoding, allows you to specify the character encoding + that should be used in the generated code. Valid values for the 'char' + character type are 'utf8' (default), 'iso8859-1' (new), 'lcp' (Xerces-C++ + local code page), and 'custom' (provides support for custom encodings). + Note that if you use a non-default character encoding and include some + libxsd headers (e.g., xsd/cxx/xml/string.hxx) directly, then you will + need to first include the correct xsd/cxx/xml/char-<enc>.hxx header, + where <enc> is iso8859-1, lcp, etc. This mechanism replaces the + XSD_USE_LCP macro. + + For the wchar_t character type the only valid value for this option is + 'auto' and the encoding is automatically selected between UTF-16 and + UTF-32, depending on the wchar_t type size. + + * When the XSD compiler is built with Xerces-C++ 3.1.0 or later, the + handling of multiple imports for the same namespace is enabled. Before, + all subsequent imports for a namespace were ignored which caused errors + in some schemas. Note that if your application has XML Schema validation + enabled, then you will also need to build it with Xerces-C++ 3.1.0 or + later to take advantage of this feature. + + * Automatic mapping for the urn-style XML namespaces. The last component + in the urn name is used to derive the C++ namespace name. + + * New option, --schema-file-regex, in combination with the existing + --type-file-regex, can be used to place the generated files into + subdirectories or to resolve file name conflicts in the file-per- + type mode (--file-per-type). + + * Warning id's have changed to start with a letter identifying the + component issuing the warning. F - compiler frontend, D - compiler + driver, P - C++/Parser mapping, T - C++/Tree mapping. + + * Strings used to match regular expressions supplied with the + --namespace-regex and --anonymous-regex options now include the file + component for the schema being compiled. + + * The XSD_NO_EXPORT macro can be used to omit code generated with the + --export/import-maps and, for C++/Tree, --generate-xml-schema options + during C++ compilation. This may be useful if you would like to use + the same generated code across multiple platforms. + + C++/Tree + + * New option, --generate-element-type, triggers the generation of types + instead of parsing/serialization functions for root elements. This + is primarily useful to distinguish object models with the same root + type but with different root elements. For more information, refer + to the messaging example and Section 2.9.1, "Element Types" in the + C++/Tree Mapping User Manual. To support the customization of the + element type naming the --element-type-regex option has been added. + See the NAMING CONVENTION section in the compiler command line manual + (man pages) for details. + + * New option, --generate-element-map, triggers the generation of a root + element map. The element map allows uniform parsing and serialization + of multiple root elements. This option can only be used together with + --generate-element-type. For more information, refer to the messaging + example and Section 2.9.2, "Element Map" in the C++/Tree Mapping + User Manual. + + * Prior to this version, if the --generate-polymorphic option is + specified, the compiler treats all types as potentially polymorphic. + Now by default only type hierarchies used in substitution groups and + those explicitly declared polymorphic with the new --polymorphic-type + option are treated as polymorphic. This results in smaller and faster + generated code. If you would like to continue using the old behavior, + you will need to specify --polymorphic-type-all. For more information, + on this change see Section 2.11, "Mapping for xsi:type and Substitution + Groups" in the C++/Tree Mapping User Manual. + + * New option, --generate-detach, triggers the generation of detach + functions for required elements and attributes. For optional and + sequence cardinalities the detach functions are now provided by the + respective containers even without this option. These functions, for + example, allow one to move sub-trees in the object model either within + the same tree or between different trees without copying. For more + information, refer to Section 2.8 "Mapping for Local Elements and + Attributes" in the C++/Tree Mapping User Manual. + + * New option, --export-xml-schema, causes the compiler to export/import + types in the XML Schema namespace using the export symbol provided + with the --export-symbol option. + + * New example, embedded, shows how to embed the binary representation of + the schema grammar into an application and then use it to parse and + validate XML documents. + + * New example, compression, shows how to compress an XML document during + serialization and decompress it during parsing using the zlib library. + + * New example, custom/mixed, shows how to use type customization to parse + and serialize mixed content. + + * The streaming example has been extended to show how to perform stream- + oriented, partially in-memory XML processing using the C++/Tree mapping. + With the partially in-memory parsing and serialization only a part of + the object model is in memory at any given time. With this approach one + can process parts of the document as they become available as well as + handle documents that are too large to fit into memory. + + * New default/fixed value initialization code. Now the default/fixed values + are parsed by the XSD compiler at compile time instead of the standard + parsing code at runtime. This will allow the compilation of schemas that + use the default/fixed values without support for XML parsing + (--suppress-parsing option). + + * Empty XML Schema enumeration values are now mapped to the 'empty' C++ + enumerator name instead of 'cxx'. + + * XML Schema union types with members that are enumeration types are + automatically converted to equivalent enumeration types with a union + of all the members' enumerators. + +Version 3.2.0 + + * New option, --disable-warning, disables printing of a warning with + the specified id. Specifying 'all' for the warning id disables all + warnings. + + * New options, --export-maps and --import-maps, provide support for + splitting a polymorphic type hierarchy across several Win32 DLLs. + See the compiler command line manual (man pages) for details. + + C++/Tree + + * During serialization the generated code automatically assigns + generic prefixes (p1, p2, etc) to XML namespaces used in the + vocabulary and for which no custom prefix-namespace mapping + was provided via the xml_schema::namespace_infomap argument. + The xml_schema::namespace_infomap argument in the serialization + functions is now default-initialized to an empty map. The + xml_schema::no_namespace_mapping and xml_schema::xsi_already_in_use + exceptions have been removed. + + * New example, performance, measures the performance of parsing and + serialization. This example also shows how to structure your code + to achieve the maximum performance for these two operations. + + * New example, xpath, shows how to use the C++/Tree mapping together + with XPath. + + * New options, --one-accessor-regex, --opt-accessor-regex, + --seq-accessor-regex, --one-modifier-regex, --opt-modifier-regex, + and --seq-modifier-regex, allow specification of transformations + for accessor and modifier function names for elements and attributes + with specific cardinalities. For more information see the NAMING + CONVENTION section in the compiler command line manual (man pages). + + * Support for comparison (--generate-comparison) and printing + (--generate-ostream) of polymorphic object models. + + * New serialization flag, xml_schema::flags::dont_pretty_print, + disables extra spaces and new lines that make the resulting XML + slightly bigger but easier to read. + + * New example, custom/double, shows how to customize parsing and + serialization code for the xsd:double XML Schema built-in type. + It can be used as a guide on how to customize built-in XML Schema + types that are mapped to fundamental C++ types. + + * Support for fractionDigits and totalDigits facets in serialization + of types derived from xsd:decimal. + + * New set of compile-time macros that control how the xsd:float, + xsd:double, and xsd:decimal types are serialized. The following + macros control the format: + + XSD_CXX_TREE_FLOAT_FIXED + XSD_CXX_TREE_FLOAT_SCIENTIFIC + XSD_CXX_TREE_DOUBLE_FIXED + XSD_CXX_TREE_DOUBLE_SCIENTIFIC + + The following macros control the precision: + + XSD_CXX_TREE_FLOAT_PRECISION_MAX + XSD_CXX_TREE_FLOAT_PRECISION + XSD_CXX_TREE_DOUBLE_PRECISION_MAX + XSD_CXX_TREE_DOUBLE_PRECISION + XSD_CXX_TREE_DECIMAL_PRECISION_MAX + XSD_CXX_TREE_DECIMAL_PRECISION + + If the *_PRECISION_MAX macro is defined then the maximum number of + potentially significant decimal digits that the type can represent + is used. Otherwise, if the *_PRECISION macro is defined then its + value is used. By default the precision is set to the number of + decimal digits that the type can represent without change. For + more information on these options, refer to the following paper: + + http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2005/n1822.pdf + + The old macro, XSD_FP_ALL_DIGITS, that was equivalent to defining + all three *_PRECISION_MAX macros has been removed. + + An alternative to using these macros is to customize the floating + point type as shown in the custom/double example. + + * An additional constructor is generated in situations where a type + contains one or more required element of complex type (that is, + it itself contains elements or attributes). In this constructor, + initializers for such elements are passed as std::auto_ptr and the + newly created instance is directly initialized with and assumes + ownership of the pointed to objects. This constructor is a logical + addition to the non-copying modifiers that were introduced in the + previous version. + + * Extra conversion operators in the fundamental_base class template + which is used to emulate inheritance from fundamental types are now + disabled by default since they cause problems on several compilers. + To enable them compile your code with the XSD_TREE_EXTRA_FUND_CONV + macro defined. + + C++/Parser + + * New options, --generate-xml-schema and --extern-xml-schema, trigger + generation of the mapping for the XML Schema namespace to a separate + header file and inclusion of that header into other generated header + files instead of generating the necessary declarations inline, + respectively. See the compiler command line manual (man pages) for + details. + + * New example, performance, measures the performance of XML parsing. + This example also shows how to structure your code to achieve the + maximum performance for this operation. + + * Type map files can now include comments. A comment starts with # + and ends with a new line or end of file. To specify a name that + contains # enclose it in "". + + * In type map files the optional argument type now defaults to the + return type if the return type ends with * or & (that is, it is + a pointer or a reference) and 'const return type&' otherwise. + + * The interface for polymorphic parsing has been simplified. Calling the + *_parser() functions multiple times to specify several parsers is no + longer supported. Instead you need to pass the xml_schema::parser_map + object which contains the parsers. For more information refer to + Section 5.4, "Support for Polymorphism" in the C++/Parser Mapping + Getting Started Guide. + + * The use of virtual inheritance has been reduced which results in a + much smaller object code size (more than factor of 2 on some tests) + and faster C++ compilation with less RAM used. + + * The low-level Expat-specific parsing API (parse_begin() and parse_end()) + has been extended to provide XML and XML Schema error translation to + exceptions or error handler calls. See Section 7.2, "Expat Document + Parser" in the C++/Parser Mapping Getting Started Guide for more + information. + +Version 3.1.0 + + * New option, --file-per-type, triggers generation of a separate set + of C++ files for each type defined in XML Schema. This compilation + mode is primarily useful when some of your schemas cannot be compiled + separately or have cyclic dependencies which involve inheritance. + Other new options that are useful in this compilation mode are + --type-file-regex, --type-file-regex-trace, and --file-list. See the + compiler command line manual (man pages) for more information. + + * New option, --options-file, allows additional command line options + to be provided in files, with one option per line. + + * New option, --reserved-name, allows insertion of additional names + with optional replacements to the list of names that should not be + used as identifiers. See the compiler command line manual (man pages) + for details. + + * New options, --location-map, --location-regex, and + --location-regex-trace, allow re-mapping of schema locations + specified in the include and import elements without modifying the + schema files. See the compiler command line manual (man pages) for + more information. + + * New option, --guard-prefix, allows specification of a prefix that + should be added to generated header inclusion guards. + + * New option, --file-list, triggers creation of a file with a list of + generated C++ files. This option is primarily useful in the file-per- + type compilation mode (--file-per-type) to create a list of generated + C++ files, for example, as a makefile fragment. Other new options + that are useful with --file-list are --file-list-prologue, + --file-list-epilogue, and --file-list-delim. See the compiler command + line manual (man pages) for more information. + + * Support for the upcoming Xerces-C++ 3.0.0 release. + + C++/Tree + + * New option, --generate-intellisense, triggers generation of workarounds + for IntelliSense bugs in Visual Studio 2005 (8.0). When this option is + used, the resulting code is slightly more verbose. IntelliSense in + Visual Studio 2008 (9.0) does not require these workarounds. Support + for IntelliSense in Visual Studio 2003 (7.1) is improved with this + option but is still incomplete. + + * New options, --type-naming and --function-naming, allow specification + of the type and function naming conventions that should be used in the + generated code. Supported values for --type-naming are: knr (K&R), ucc + (upper-camel-case), and java. Supported values for --function-naming + are: knr (K&R), lcc (lower-camel-case), and java. For more information + see the NAMING CONVENTION section in the compiler command line manual + (man pages). + + * New options, --type-regex, --accessor-regex, --modifier-regex, + --parser-regex, --serializer-regex, and --enumerator-regex, allow + specification of transformations for type, accessor function, + modifier function, parsing function, serialization function, and + enumerator names in order to produce the generated code using a + custom naming convention. For more information see the NAMING + CONVENTION section in the compiler command line manual (man pages). + + * Generated list classes now provide a complete set of constructors and + conform to the standard C++ sequence interface. + + * String-based types now provide two extra constructors that expect a + C string and std::string as their arguments. This allows direct + initialization of string-based types from string literals. + + * New implementations of the XML Schema date/time types (date, dateTime, + duration, gDay, gMonth, gMonthDay, gYear, gYearMonth, and time) that + represent the information in the numerical form. + + * New binary serialization examples: binary/boost, which shows how to + save/load the object model to/from a custom format using the Boost + serialization library as an example, and binary/xdr, which shows how to + save/load the object model to/from XDR (eXternal Data Representation) + binary format using the XDR API provided as part of Sun RPC. + + * The non-copying modifier functions can now be used to assemble object + models from scratch. For more information see Section 4.4, "Creating + the Object Model from Scratch" in the C++/Tree Mapping Getting Started + Guide as well as Section 2.8, "Mapping for Local Elements and Attributes" + in the C++/Tree Mapping User Manual. + + * Doxygen documentation was added to the XSD runtime for the built-in XML + Schema types, exceptions, etc. This allows linking of the generated + documentation to the XSD runtime documentation using the Doxygen tags + mechanism. The Doxygen configuration file for the XSD runtime is + provided in the documentation/cxx/tree/reference/ directory. + + * Support for customization of anyType. Because anyType is a base type + for every generated type, customizing it allows one to implement custom + functionality that spans the entire type system. See the comments + example in the examples/cxx/tree/custom/ directory. + + * New option, --omit-default-attributes, triggers generation of extra + checks that exclude attributes with default and fixed values from the + serialized XML documents. + + * The parsing functions that used to read from DOMInputSource were changed + to use InputSource to ease support of Xerces-C++ 3 and 2 series in the + same code base. + + * The parsing function that used to parse DOMDocument* was changed to + parse xml_schema::dom::auto_ptr<DOMDocument>& instead. If the keep_dom + and own_dom flags are specified then this parsing function resets the + passed automatic pointer and the returned object model assumes + ownership of the DOM document. xml_schema::dom::auto_ptr is a simple + automatic pointer for Xerces-C++ DOM with the same interface as + std::auto_ptr. + + * The xml_schema::tree_node_key DOM user data key was moved to + xml_schema::dom::tree_node_key. + + C++/Parser + + * New option, --generate-polymorphic, triggers generation of polymorphism- + aware code. This option should be used on XML vocabularies which use + xsi:type and/or substitution groups. For more information see Section + 5.4, "Support for Polymorphism" in the C++/Parser Mapping Getting + Started Guide we well as the polymorphism and polyroot examples in the + examples/cxx/parser/ directory. + + * The date/time types (date, dateTime, gDay, gMonth, gMonthDay, gYear, + gYearMonth, and time) now represent time zone in the numerical form. + + * In order to support parsing of polymorphic XML documents, the signatures + of the start_* functions (_start_element, _start_any_element, and + start_root_element) have changed to include a third argument of type + const ro_string<C>*. This argument contains the resolved type name and + namespace in case the xsi:type attribute was specified. + +Version 3.0.0 + + * Anonymous type morphing (automatic type naming) is now performed by + default in both mappings. The --morph-anonymous option does not have + any effect but is preserved for backwards compatibility. A new option, + --preserve-anonymous, disables anonymous type morphing. This option is + useful together with --show-anonymous if you want to make sure your + schemas do not have any anonymous types. + + * A number of bugs fixed in both C++/Tree and C++/Parser mappings. + + C++/Tree + + * The new C++/Tree Mapping Getting Started Guide is available in the + documentation/cxx/tree/guide/ directory. + + * The type definitions for local elements and attributes in the form + name::type have been changed to name_type. For example, an element + bar in type foo with maxOccurs="unbounded" used to have its iterator + type defined as foo::bar::iterator. With this change it becomes + foo::bar_iterator. Furthermore, the container type name for sequence + elements has changed from foo::bar::container to foo::bar_sequence + and for optional elements and attributes from foo::bar::container + to foo::bar_optional. This is a backwards incompatible change and + may require application code adjustments (the C++ compiler will + pinpoint the affected places). + + * New option, --generate-doxygen, triggers generation of documentation + comments suitable for extraction by the Doxygen documentation system. + Documentation from annotations is added to the comments if present in + the schema. + + * New option, --generate-wildcard, triggers generation of the new + wildcard (any and anyAttribute) mapping. This mapping represents the + content matched by wildcards as DOM fragments. For more information on + the new mapping see Section 2.12, "Mapping for any and anyAttribute" + in the C++/Tree Mapping User Manual as well as the wildcard example in + the examples/cxx/tree/ directory. + + * New option, --generate-comparison, triggers generation of comparison + operators (== and !=) for complex types. Comparison is performed + memberwise. + + * Support for the RPC XDR binary stream in addition to ACE CDR. + + * New constructor is generated for complex types with ultimate bases + that are simple types and can be default-initialized. This constructor + includes initializers for all required members but omits the initializer + for the base type. See Section 2.7, "Mapping for Complex Types" in the + C++/Tree Mapping User Manual for more information. + + * Support for polymorphic binary serialization and extraction. Note that + the semantics of the --generate-insertion and --generate-extraction + options has changed. See the the compiler command line manual (man + pages) for details. + + * New parsing function with the DOMDocument* argument and the own_dom + flag allow the tree to assume the ownership of the DOM document + being parsed when DOM association is requested (keep_dom flag). + See the C++/Tree Mapping User Manual for more information. + + * New example, multiroot, shows how to handle XML vocabularies with + multiple root elements. + + * New example, caching, shows how to parse several XML documents while + reusing the underlying XML parser and caching the schemas used for + validation. + + * The mapping of built-in XML Schema type decimal has changed from + long double to double. The old mapping can be obtained by providing + a custom mapping for this type. + + * The xml_schema::errors type which is used in the xml_schema::parsing + and xml_schema::serialization exceptions has been renamed to + xml_schema::diagnostics and extended to include warnings in addition + to errors. + + * Serialization operators now clear the element being serialized to from + existing child nodes and attributes (except for special attributes such + as prefix-namespace mappings, etc.). + + * Improved built-in type parsing, including support for normalization and + whitespace collapsing. + + * Optimizations for the generated code size and compilation time, + including space optimizations for polymorphic parsing and + serialization. Optimizations for XML parsing speed. + + C++/Parser + + * The C++/Parser mapping have been significantly redesigned. See the new + Getting Started Guide in documentation/cxx/parser/guide/ for details. + + * The new C++/Parser Mapping Getting Started Guide is available in the + documentation/cxx/parser/guide/ directory. + + * The mapping now provides parser implementations for all built-in XML + Schema types. See Chapter 6, "Built-In XML Schema Type Parsers" in + the C++/Parser Mapping Getting Started Guide for more information. + + * The mapping now supports automatic generation of sample parser + implementations and a test driver. The --generate-noop-impl option + triggers generation of a sample implementation with empty function + bodies. The --generate-print-impl option triggers generation of a + sample implementation that prints the data stored in XML to STDOUT. + The --generate-test-driver option trigger generation of a test driver. + For more information on this feature see the compiler command line + manual (man pages) and the generated example in the examples/cxx/parser/ + directory. Other relevant options include: --force-overwrite, + --root-element-first, --root-element-last, and --root-element. + + * New example, wildcard, shows how to parse the XML data matched by + XML Schema wildcards (any and anyAttribute). + + * The xml_schema::document parser has been extended with overridable + virtual functions start_root_element and end_root_element to support + parsing of XML vocabularies with multiple document roots. See the + multiroot example in the examples/cxx/parser/ directory for more + information. + + * The xml_schema::errors type which is used in the xml_schema::parsing + exception has been renamed to xml_schema::diagnostics and extended to + include warnings in addition to errors. + +Version 2.3.1 + + * The compiler is now capable of translating multiple schemas with + one invocation. + + * New option, --sloc-limit, allows one to limit the amount of the + generated code. + + * New option, --proprietary-license, instructs the compiler not to + include the GPL banner in each generated file. Instead a short + notice about a required proprietary license is generated. You + should not use this option unless you have obtained a proprietary + license from Code Synthesis Tools CC. + + * The default encoding for the 'char' character type is now UTF-8. + To get the previous behavior (local code page via the Xerces-C++ + transcode functions) define the XSD_USE_LCP preprocessor macro + when compiling your source code. + + C++/Tree + + * The --parts option has been improved to split generated code more + evenly by analyzing the complexity of the generated schema constructs. + + * Ability to customize serialization, std::ostream, and binary + insertion/extraction operators. See examples/cxx/tree/custom/wildcard + for an example on how to handle XML Schema wildcards (xsd:any and + xsd:anyAttribute) by customizing the parsing constructor and + serialization operators. + + * Optimizations for the run-time memory consumption. + + * Optimizations for space in the generated code. + + * Number of bug fixes. + + C++/Parser + + * Proper handling of an xsd:any nested content. Nested elements, + attributes, and text are reported via _any_* hooks of the current + parser. + + * Number of bug fixes, mostly in the generated validation code. + + +Version 2.3.0 + + * Name conflicts across type inheritance hierarchies are now detected + and resolved via name escaping. + + C++/Tree + + * New option, --suppress-parsing, suppresses generation of the parsing + constructors and functions. This can be used to minimize the generated + code footprint when parsing from XML is not used. + + * New option, --generate-forward, triggers generation of a forward + declaration header file for types defined in the schema. A set of + --fwd-* options that control the resulting file name as well as + prologue and epilogue code are available. + + * New option, --generate-xml-schema, triggers generation of the mapping + for the XML Schema namespace to a separate header file. See the man + pages for details and examples/cxx/tree/custom/calendar for an example. + + * New option, --extern-xml-schema, triggers inclusion of a header + file for the XML Schema namespace instead of generating the + necessary declarations inline. See the man pages for details and + examples/cxx/tree/custom/calendar for an example. + + * New options, --custom-type and --custom-type-regex, instruct the + compiler to use custom C++ type for a type defined in the schema. + The standard mapping can still be generated (with a different name) + usually to be used as a base. Built-in XML Schema types can be + customized using this mechanism. See the man pages for details and + examples/cxx/tree/custom/* for examples. + + * The generated parsing constructors and serialization operators have + been changed to use the Xerces-C++ DOM elements and attributes + instead of the internal wrapper types. This should provide easier + integration with other code and libraries that use the Xerces-C++ + DOM types such as Berkeley DB XML. + + * New example, examples/cxx/tree/dbxml, shows how to use the C++/Tree + mapping on top of the Berkeley DB XML database. + + C++/Parser + + * Validation of the attribute structure in the generated code. + + * Validation of the character content models including mixed content in + the generated code. + + * Validation of the built-in XML Schema types. + + * Optimizations for space and time in the generated code. In particular + data coping during parsing and validation was significantly reduced. + + +Version 2.2.0 + + * Detection of a version mismatch between the generated code and + the runtime. + + C++/Tree + + * Escaping of a global element name that conflicts with a global type + name. This is a backwards-incompatible change. Previous versions + map them to the same name. + + * New options, --generate--insertion and --generate-extraction, + trigger generation of (binary) data representation stream + insertion and extraction operators, respectively. This allows + one to serialize/deserialize in-memory representation to/from + data representation streams such as XSD, CDR, etc. ACE CDR + streams are supported out of the box (see the binary example). + User-supplied streams can be used via an adaptation layer. + + * New serialization flag, no_xml_declaration, instructs the XML + serialization functions to omit an XML declaration. This is useful + for streaming serialization (see the streaming example). + + * Optimizations to reduce generated code size. + + + C++/Parser + + * New options, --generate-validation and --suppress-validation, + trigger and suppress generation of the validation code, + respectively. The validation code is the implementation of the + XML Schema validation in the generated code (also known as + "perfect" parser). In this version validation of the element + structure has been implemented. + + * New architecture for underlying XML parsers. This is a backwards- + incompatible change. Existing applications will have to be + modified. See examples for details. + + +Version 2.1.1 + + C++/Tree + + * New option, --namespace-map, allows direct mapping of XML Schema + namespaces to C++ namespaces without the use of regular expressions. + + * Further optimizations in the container code and enum mapping to + reduce generated code size. + + * Number of bug fixes in the generated code. + + + C++/Parser + + * New option, --namespace-map, allows direct mapping of XML Schema + namespaces to C++ namespaces without the use of regular expressions. + + +Version 2.1.0 + + * Automatic handling of forward inheritance. XML Schema allows + inheritance from yet undefined types while it is illegal to do + so in C++. Now the translator automatically handles forward + inheritance by re-arranging the schema during compilation. + + + C++/Tree + + * New enum mapping with support for inheritance. Enumerators are + now parsed using binary search instead of linear search. + + * Associated DOM nodes now retain "back" pointers to tree nodes. + + * Optimizations to reduce generated code size. + + + C++/Parser + + * Specialization for void. You can now use void as a hook argument + type if you don't want to pass any data between parsers. + + * Support for re-use of implementations of base parsers in derived + parsers using the mixin C++ idiom. See the examples/cxx/parser/mixin + for more information. + + * Support for uninitialized parser. If you don't provide a parser + for element/attribute, that element/attribute will be ignored + during parsing. + + +Version 2.0.0 + + * New cardinality calculator. This improves support for schemas that + use complex structures with repeated elements, e.g., + + <complexType name="Type"> + <choice> + <sequence> + <element name="a" type="string"/> + <element name="c" type="string"/> + </sequence> + <sequence> + <element name="b" type="string"/> + <element name="c" type="string"/> + </sequence> + </choice> + </complexType> + + + * New identifier escaping code. With this feature xsd generates proper + code for schemas that use the same name for an element and an attribute + in the same type or use several elements/attributes with different + qualified names but with the same local name, e.g., + + <!-- base.xsd --> + <schema xmlns="http://codesynthesis.com/xmlns/test/foo" + targetNamespace="http://codesynthesis.com/xmlns/test/foo"> + + <element name="foo" type="int"/> + </schema> + + <schema xmlns="http://codesynthesis.com/xmlns/test/bar" + xmlns:f="http://codesynthesis.com/xmlns/test/foo" + targetNamespace="http://codesynthesis.com/xmlns/test/bar"> + + <import namespace="http://codesynthesis.com/xmlns/test/foo" + schemaLocation="base.xsd"/> + + <element name="foo" type="string"/> + + <complexType name="Foo"> + <sequence> + <element ref="foo"/> + <element name="foo" type="long"/> + <element ref="f:foo"/> + <element ref="f:foo"/> + </sequence> + <attribute name="foo" type="string"/> + </complexType> + </schema> + + + C++/Tree + + * New option, --generate-polymorphic, triggers generation of + polymorphism-aware code. Before this release xsd used to always + generate polymorphism-aware code. However, it appears to be quite + wasteful in terms of the generated code size (up to 40%). You will + now need to explicitly specify this option if you use substitution + groups or xsi:type. A warning is issued if this option is not + specified but the schema makes use of substitution groups. + + * New options, --root-element-first, --root-element-last, + --root-element-all, --root-element-none, and --root-element, control + generation of parsing and serialization functions. With these options + you can avoid generating extra code for global elements that are not + document roots. See the man pages for details. + + * New options, --parts and -parts-suffix, allows you to split generated + source code into a number of parts. This is useful when translating + large, monolithic schemas and a C++ compiler is not able to compile + the resulting source code at once (usually due to insufficient memory). + + * New option, --generate-default-ctor, triggers generation of default + constructors even for types that have required members. Required + members of an instance constructed using such a constructor are not + initialized and accessing them results in undefined behavior. Thanks + to Jean-Francois Dube <jf at magnu.polymtl.ca> for suggesting this + feature. + + * New option, --generate-from-base-ctor, triggers generation of + constructors that expect an instance of a base type followed by all + required members. Thanks to Jean-Francois Dube <jf at magnu.polymtl.ca> + for suggesting this feature. + + * Information scopes for attributes and elements with default/fixed values + now define the public static default_value function which allows one to + obtain the default/fixed value for the element/attribute. Thanks to + Dave Moss <david.r.moss at selex-comm.com> for suggesting this feature. + + * MSVC 7.1 has a limit on the length of the "if else if" chain. This + results in ICE when compiling generated code for enumerations with + a large number of values. This version addresses this issue. Thanks + to Cyrille Chépélov <cyrille at chepelov.org> for reporting this and + suggesting a fix. + + + C++/Parser + + * The parser construction API has changed. Now, for element 'foo', + the name of the parser modifier function is 'foo_parser'. Likewise, + operator() for setting all parsers at once has been changed to the + 'parsers' function. + + +Version 1.9.0 + + C++/Tree + + * The size modifier function in the base64_binary and hex_binary + built-in types automatically adjusts capacity if needed. + + * More internal names (names that start with _xsd_) were made + private or protected. + + C++/Parser + + * Typedef for the parser base in the xml_schema namespace. + + C++/Parser-E + + * C++/Parser mapping optimized for embedded systems. For now it + is equivalent to 'cxx-parser --xml-parser expat'. + + +Version 1.8.0 + + * Moved to the build 0.2 series. + + C++/Tree + + * Support for default and fixed values in attributes. An optional + attribute with a default or fixed value is mapped to the One + cardinality class instead of the Optional cardinality class. + + * Mapping for base64Binary and hexBinary has improved. Now these + types support a basic buffer abstraction and perform automatic + encoding and decoding. + + * Internal names are protected. We've noticed (via bug reports) a + wide use of internal names (names that start with _xsd_) in user + code. This is not portable and instead you should use public + names. To prevent this from happening in the future we've made + all internal names protected. + + C++/Parser + + * Support for Expat as the underlying XML parser in addition to + Xerces-C++. This allows one to use the C++/Parser mapping in + memory-constrained environments such as embedded systems. To + select Expat instead of Xerces-C++ (default) add + '--xml-parser expat' to the command line. At the moment only + 'char' (UTF-8) is supported as the base character type when + Expat is selected. + + * The invalid_instance exception has been renamed to parsing. + + * Generic error_handler interface has been added in addition + to Xerces-C++-specific DOMErrorHandler. It allows you to + handle parsing errors and warnings without having to deal + with Xerces-C++ specifics. + + * The default error handling behavior has changed in parsing + functions. Instead of printing errors and warnings to STDERR, + the errors are now collected and thrown as part of the parsing + exception. + + * In parsing functions, the name, namespace arguments order has + been reversed to be consistent with the one used in parsing + hooks. + +Version 1.7.0 + + * Number of bug fixes in libxsd and the generated code. + + C++/Tree + + * Comprehensive XML Schema C++/Tree Mapping User Manual. + + * Basic support for union. A simple type that is defined using + derivation by union is mapped to a C++ class that derives from + string. + + * The _clone function has its arguments default-initialized. + + * The invalid_instance exception has been renamed to parsing. + + * Generic error_handler interface has been added in addition + to Xerces-C++-specific DOMErrorHandler. It allows you to + handle parsing/serialization errors and warnings without + having to deal with Xerces-C++ specifics. See the user + manual for more information. + + * The default error handling behavior has changed in parsing + and serialization functions. Instead of printing errors and + warnings to STDERR, the errors are now collected and thrown + as part of the parsing/serialization exception. See the user + manual for more information. + + * The optional and sequence containers now support operators ==, + !=, <, >, <=, and >=. + + * Flags argument has been added to serialization functions. The + only flag that is currently supported is dont_initialize. + + * Generated code cleanups. + + C++/Parser + + * Basic support for union. A simple type that is defined using + derivation by union is mapped to a C++ class template that + is just an alias for the generic parser. You are expected to + override the _characters function in your implementation. + + * Properties argument to parsing functions which allows to + programmatically specify schemas for instance document + validation. + + * Flags argument to parsing functions. The following flags + are supported: + + dont_validate - do not validate instance documents + dont_initialize - do not initialize the Xerces-C++ runtime + +Version 1.6.0 + + * Number of bug fixes in libxsd and the generated code. + + C++/Tree + + * Support for xsi:type and substitution groups in parsing and + serialization. See examples/cxx/tree/polymorphism for a code + sample. + + * Properties argument to parsing functions which allows to + programmatically specify schemas for instance document + validation. + + * Extra checks in parsing code which prevents construction + of inconsistent in-memory representation from invalid + instance documents. Should be useful when validation is + disabled. + + * Accessors and modifier were made normal member functions. + Before they were implemented via functors. + + * Workaround for g++-3.3 bug# 16650: + + http://gcc.gnu.org/bugzilla/show_bug.cgi?id=16650 + + C++/Parser + + * All "service" functions were renamed to start with '_'. + This should prevent hiding of service functions by + elements/attributes with the same names. + +Version 1.5.0 + + * Number of bug fixes in libxsd and the generated code. + + C++/Tree + + * Basic support for inheritance-by-restriction in complex types. + + * The following parsing flags have been introduced: + + keep_dom - keep association with underlying DOM nodes + dont_validate - do not validate instance documents + dont_initialize - do not initialize the Xerces-C++ runtime + + * "Type-less content" such as mixed content models, xsd:anyType/ + xsd:anySimpleType, and xsd:any/xsd:anyAttribute is supported by + exposing corresponding DOM nodes (see the keep_dom parsing flag). + Note that only a subset of XML Schema xsd:any functionality is + supported. The compiler will issue diagnostics for unsupported + cases. See examples/cxx/tree/mixed for a code sample. + + C++/Parser + + * Support for inheritance-by-restriction in complex types. + + * "Type-less content" such as mixed content models, xsd:anyType/ + xsd:anySimpleType, and xsd:any/xsd:anyAttribute is supported + by forwarding parsing events to a set of "unexpected" hooks. + Note that only a subset of XML Schema xsd:any functionality is + supported. The compiler will issue diagnostics for unsupported + cases. See examples/cxx/parser/mixed for a code sample. + +Version 1.4.0 + + * Number of improvements and bug fixes in the diagnostics code. + + * libxsd has been reorganized to provide a clean split of code with + regards to char/wchar_t use. It should be possible to use libxsd + and the xsd-generated code on platforms that lack wchar_t support, + such as mingw. + + C++/Tree + + * Work around for g++ bug# 23206. + + * Support for xsd:list. + + * Type/member name conflicts are auto-resolved. Such conflicts + occur when a type and an element or attribute withing this type + share the same name. + + * XML Schema extension, the 'refType' attribute, allows one to + specify referenced type for xsd:IDREF and xsd:IDREFS data types. + See examples/cxx/tree/library for details. + + * New option, --morph-anonymous, allows automatic morphing + of anonymous types to named ones. See the man pages for + details. + + * New option, --namespace-regex-trace, allows one to trace the + namespace mapping process. See the man pages for details. + + * Mapping for optional elements/attributes (cardinality 0..1) + has changed in a backwards-incompatible way. In the previous + version you would write: + + Bar& bar = ... + + if (bar.foo.present ()) // test + { + Foo& foo (bar.foo ()); // get + + bar.foo (Foo (...)); // set + + bar.foo.reset (); // reset + } + + Now you would write it like this: + + if (bar.foo ().present ()) // test + { + Foo& foo (bar.foo ().get ()); // get + + bar.foo (Foo (...)); // set + + bar.foo ().reset (); // reset + } + + Or using the pointer notation: + + if (bar.foo ()) // test + { + Foo& foo (*bar.foo ()); // get + + bar.foo (Foo (...)); // set + + bar.foo ().reset (); // reset + } + + C++/Parser + + * Support for xsd:list. + + * Type/member name conflicts are auto-resolved. Such conflicts + occur when a type and an element or attribute withing this type + share the same name. + + * New option, --namespace-regex-trace, allows one to trace the + namespace mapping process. See the man pages for details. + +Version 1.3.0 + + * Numerous bug fixes. + + * The XML subsystem of libxsd has been reorganized to provide + a clean split of DOM and SAX functionalities. + + C++/Parser + + * New option, --morph-anonymous, allows automatic morphing + of anonymous types to named ones. See the man pages for + details. + + C++/Tree + + * Additional parser functions provide support for reading + from std::istream. + +Version 1.2.0 + + C++/Parser + + * New backend that generates the C++/Parser mapping. + +Version 1.1.1 + + all backends + + * Bug fixes in the filesystem path handling logic. + +Version 1.1.0 + + C++/Tree + + * New option, --generate-serialization, triggers generation of + serialization functions. Serialization functions convert an in-memory + representation back to XML. + + * xsd::cxx::tree::vector has been extended to closely follow std::vector + API. This allows you to access and modify element sequences as if they + were of type std::vector. + + * Generated constructors from xml::attribute and xml::element are made + explicit. + + * The library example was extended to showcase modification and + serialization of the in-memory representation. + + * New "XML Schema C++/Tree Mapping Serialization Guide" has an in-depth + treatment of the serialization mechanisms provided by xsd. + +Version 1.0.1 + + all backends + + * Improved diagnostics. + + * Bug fixes in the schema inclusion/importing logic. + + C++/Tree + + * Two new options: --include-with-brackets and --include-prefix + +Version 1.0.0 + + * First public release. diff --git a/xsd/README b/xsd/README new file mode 100644 index 0000000..b7d30d7 --- /dev/null +++ b/xsd/README @@ -0,0 +1,27 @@ +CodeSynthesis XSD is a W3C XML Schema to C++ data binding compiler. +It generates vocabulary-specific, statically-typed C++ mappings (also +called bindings) from XML Schema definitions. XSD supports two C++ +mappings: in-memory C++/Tree and event-driven C++/Parser. + +The C++/Tree mapping consists of types that represent the given +vocabulary, a set of parsing functions that convert XML instance +documents to a tree-like in-memory object model, and a set of +serialization functions that convert the object model back to XML. + +The C++/Parser mapping provides parser templates for data types +defined in XML Schema. Using these parser templates you can build +your own in-memory representations or perform immediate processing +of XML instance documents. + +See the NEWS file for the user-visible changes from the previous release. + +See the LICENSE file for distribution conditions. + +See the INSTALL file for prerequisites and installation instructions. + +See the documentation/ directory for documentation. + +The project page is at http://codesynthesis.com/projects/xsd/. + +Send bug reports or any other feedback to the xsd-users@codesynthesis.com +mailing list. diff --git a/xsd/build/bootstrap.make b/xsd/build/bootstrap.make new file mode 100644 index 0000000..7b4fdb9 --- /dev/null +++ b/xsd/build/bootstrap.make @@ -0,0 +1,86 @@ +# file : build/bootstrap.make +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +project_name := XSD + +# First try to include the bundled bootstrap.make if it exist. If that +# fails, let make search for the external bootstrap.make. +# +build := build-0.3 + +-include $(dir $(lastword $(MAKEFILE_LIST)))../../$(build)/bootstrap.make + +ifeq ($(patsubst %build/bootstrap.make,,$(lastword $(MAKEFILE_LIST))),) +include $(build)/bootstrap.make +endif + +# Configuration +# +$(call include,$(scf_root)/configuration.make) + + +# Aliases +# +.PHONY: $(out_base)/ \ + $(out_base)/.test \ + $(out_base)/.install \ + $(out_base)/.dist \ + $(out_base)/.dist-win \ + $(out_base)/.dist-common \ + $(out_base)/.clean \ + $(out_base)/.cleandoc + +ifdef %interactive% + +.PHONY: test install dist dist-win clean cleandoc + +test: $(out_base)/.test +install: $(out_base)/.install +dist: $(out_base)/.dist +dist-win: $(out_base)/.dist-win +clean: $(out_base)/.clean +cleandoc: $(out_base)/.cleandoc + +ifneq ($(filter $(.DEFAULT_GOAL),test install dist dist-win clean cleandoc),) +.DEFAULT_GOAL := +endif + +endif + + +# Make sure the distribution prefix is set if the goal is dist or dist-win. +# +ifneq ($(filter $(MAKECMDGOALS),dist dist-win),) +ifeq ($(dist_prefix),) +$(error dist_prefix is not set) +endif +endif + + +# Don't include dependency info for certain targets. +# +define include-dep +$(call -include,$1) +endef + +ifneq ($(filter $(MAKECMDGOALS),clean cleandoc disfigure),) +include-dep = +endif + + +# For dist, install don't include dependencies in examples, and tests +# since we might be cross-compiling. +# +ifneq ($(filter $(MAKECMDGOALS),dist dist-win install),) + +ifneq ($(subst $(src_root)/tests/,,$(src_base)),$(src_base)) +include-dep = +endif + +ifneq ($(subst $(src_root)/examples/,,$(src_base)),$(src_base)) +include-dep = +endif + +endif diff --git a/xsd/build/configuration-dynamic.make b/xsd/build/configuration-dynamic.make new file mode 100644 index 0000000..d8f9cf3 --- /dev/null +++ b/xsd/build/configuration-dynamic.make @@ -0,0 +1,7 @@ +xsd_with_zlib := n +xsd_with_ace := n +xsd_with_xdr := n +xsd_with_dbxml := n +xsd_with_xqilla := n +xsd_with_boost_date_time := n +xsd_with_boost_serialization := n diff --git a/xsd/build/configuration-rules.make b/xsd/build/configuration-rules.make new file mode 100644 index 0000000..6fb0155 --- /dev/null +++ b/xsd/build/configuration-rules.make @@ -0,0 +1,18 @@ +# file : build/configuration-rules.make +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +$(dcf_root)/configuration-dynamic.make: | $(dcf_root)/. + $(call message,,$(scf_root)/configure $@) + +ifndef %foreign% + +disfigure:: + $(call message,rm $$1,rm -f $$1,$(dcf_root)/configuration-dynamic.make) + +endif + +ifeq ($(.DEFAULT_GOAL),$(dcf_root)/configuration-dynamic.make) +.DEFAULT_GOAL := +endif diff --git a/xsd/build/configuration.make b/xsd/build/configuration.make new file mode 100644 index 0000000..b1f5e60 --- /dev/null +++ b/xsd/build/configuration.make @@ -0,0 +1,34 @@ +# file : build/configuration.make +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +$(call include-once,$(scf_root)/configuration-rules.make,$(dcf_root)) + +# Dynamic configuration. +# +xsd_with_zlib := +xsd_with_ace := +xsd_with_xdr := +xsd_with_dbxml := +xsd_with_xqilla := +xsd_with_boost_date_time := +xsd_with_boost_serialization := + +$(call -include,$(dcf_root)/configuration-dynamic.make) + +ifdef xsd_with_zlib + +$(out_root)/%: xsd_with_zlib := $(xsd_with_zlib) +$(out_root)/%: xsd_with_ace := $(xsd_with_ace) +$(out_root)/%: xsd_with_xdr := $(xsd_with_xdr) +$(out_root)/%: xsd_with_dbxml := $(xsd_with_dbxml) +$(out_root)/%: xsd_with_xqilla := $(xsd_with_xqilla) +$(out_root)/%: xsd_with_boost_date_time := $(xsd_with_boost_date_time) +$(out_root)/%: xsd_with_boost_serialization := $(xsd_with_boost_serialization) + +else + +.NOTPARALLEL: + +endif diff --git a/xsd/build/configure b/xsd/build/configure new file mode 100755 index 0000000..44cbc27 --- /dev/null +++ b/xsd/build/configure @@ -0,0 +1,80 @@ +#! /usr/bin/env bash + +# file : build/configure +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +# $1 out file +# +# bld_root - build root +# project_name - project name +# + +source $bld_root/dialog.bash + + +$echo +$echo +$echo "configuring '$project_name'" +$echo +$echo + +$echo +$echo "Would you like to build optional parts of '$project_name' that require" +$echo "the 'zlib' library?" +$echo + +with_zlib=`read_y_n n` + +$echo +$echo "Would you like to build optional parts of '$project_name' that require" +$echo "the 'ACE' library?" +$echo + +with_ace=`read_y_n n` + +$echo +$echo "Would you like to build optional parts of '$project_name' that require" +$echo "the 'XDR' library (part of the system in most GNU/Linux and" +$echo "UNIX distributions)?" +$echo + +with_xdr=`read_y_n n` + +$echo +$echo "Would you like to build optional parts of '$project_name' that require" +$echo "the boost 'serialization' library?" +$echo + +with_boost_serialization=`read_y_n n` + + +$echo +$echo "Would you like to build optional parts of '$project_name' that require" +$echo "the boost 'date_time' library?" +$echo + +with_boost_date_time=`read_y_n n` + +$echo +$echo "Would you like to build optional parts of '$project_name' that require" +$echo "the 'Berkeley DB XML' library?" +$echo + +with_dbxml=`read_y_n n` + +$echo +$echo "Would you like to build optional parts of '$project_name' that require" +$echo "the XQilla library?" +$echo + +with_xqilla=`read_y_n n` + +echo "xsd_with_zlib := $with_zlib" >$1 +echo "xsd_with_ace := $with_ace" >>$1 +echo "xsd_with_xdr := $with_xdr" >>$1 +echo "xsd_with_dbxml := $with_dbxml" >>$1 +echo "xsd_with_xqilla := $with_xqilla" >>$1 +echo "xsd_with_boost_date_time := $with_boost_date_time" >>$1 +echo "xsd_with_boost_serialization := $with_boost_serialization" >>$1 diff --git a/xsd/build/cxx/configuration-dynamic.make b/xsd/build/cxx/configuration-dynamic.make new file mode 100644 index 0000000..568ab40 --- /dev/null +++ b/xsd/build/cxx/configuration-dynamic.make @@ -0,0 +1,14 @@ +cxx_id := gnu +cxx_optimize := n +cxx_debug := n +cxx_rpath := n +cxx_pp_extra_options := $(CPPFLAGS) +cxx_extra_options := $(CXXFLAGS) +cxx_ld_extra_options := $(LDFLAGS) +cxx_extra_libs := $(LIBS) + +r := $(shell echo $(LDFLAGS) | sed -e 's/-L *\([^ ]*\)/-L\1/g') +r := $(patsubst -L%,%,$(filter -L%,$(r))) +r := $(shell echo $(r) | sed -e 's/ /:/g') + +cxx_extra_lib_paths := $(r) diff --git a/xsd/build/cxx/gnu/configuration-dynamic.make b/xsd/build/cxx/gnu/configuration-dynamic.make new file mode 100644 index 0000000..f3fe64d --- /dev/null +++ b/xsd/build/cxx/gnu/configuration-dynamic.make @@ -0,0 +1,8 @@ +ifneq ($(CXX),) +cxx_gnu := $(CXX) +else +cxx_gnu := g++ +endif + +cxx_gnu_libraries := +cxx_gnu_optimization_options := diff --git a/xsd/build/import/libace/LICENSE b/xsd/build/import/libace/LICENSE new file mode 100644 index 0000000..3912109 --- /dev/null +++ b/xsd/build/import/libace/LICENSE @@ -0,0 +1,340 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (C) <year> <name of author> + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + <signature of Ty Coon>, 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. diff --git a/xsd/build/import/libace/configuration-rules.make b/xsd/build/import/libace/configuration-rules.make new file mode 100644 index 0000000..8d1230c --- /dev/null +++ b/xsd/build/import/libace/configuration-rules.make @@ -0,0 +1,15 @@ +# file : build/import/libace/configuration-rules.make +# author : Boris Kolpackov <boris@kolpackov.net> +# copyright : Copyright (c) 2005-2009 Boris Kolpackov +# license : GNU GPL v2; see accompanying LICENSE file + +$(dcf_root)/import/libace/configuration-dynamic.make: | $(dcf_root)/import/libace/. + $(call message,,$(scf_root)/import/libace/configure $@) + +ifndef %foreign% + +disfigure:: + $(call message,rm $(dcf_root)/import/libace/configuration-dynamic.make,\ +rm -f $(dcf_root)/import/libace/configuration-dynamic.make) + +endif diff --git a/xsd/build/import/libace/configure b/xsd/build/import/libace/configure new file mode 100755 index 0000000..eb7bd56 --- /dev/null +++ b/xsd/build/import/libace/configure @@ -0,0 +1,58 @@ +#! /usr/bin/env bash + +# file : build/import/libace/configure +# author : Boris Kolpackov <boris@kolpackov.net> +# copyright : Copyright (c) 2005-2009 Boris Kolpackov +# license : GNU GPL v2; see accompanying LICENSE file + + +# $1 - out config file +# +# bld_root - build root +# project_name - project name +# + +source $bld_root/dialog.bash + + +$echo +$echo "Configuring external dependency on 'ACE' for '$project_name'." +$echo + +$echo +$echo "Would you like to configure dependency on the installed version" +$echo "of 'ACE' as opposed to the development build?" +$echo + +installed=`read_y_n y` + +path= +type= + +if [ "$installed" = "n" ]; then + + $echo + $echo "Please enter the 'ACE' root directory (ACE_ROOT)." + $echo + + root=`read_path --directory --exist` + + $echo + $echo "Please select the library type you would like to use:" + $echo + $echo "(1) archive" + $echo "(2) shared object" + $echo + + type=`read_option "archive shared" "shared"` + +fi + +echo libace_installed := $installed >$1 + +if [ "$installed" = "n" ]; then + + echo libace_root := $root >>$1 + echo libace_type := $type >>$1 + +fi diff --git a/xsd/build/import/libace/rules.make b/xsd/build/import/libace/rules.make new file mode 100644 index 0000000..9535085 --- /dev/null +++ b/xsd/build/import/libace/rules.make @@ -0,0 +1,29 @@ +# file : build/import/libace/rules.make +# author : Boris Kolpackov <boris@kolpackov.net> +# copyright : Copyright (c) 2005-2009 Boris Kolpackov +# license : GNU GPL v2; see accompanying LICENSE file + +$(dcf_root)/import/libace/%: root := $(libace_root) + +ifeq ($(libace_type),archive) + +$(dcf_root)/import/libace/ace.l: $(libace_root)/lib/libACE.a + @echo $< >$@ +else + +$(dcf_root)/import/libace/ace.l: $(libace_root)/lib/libACE.so + @echo $< >$@ + @echo rpath:$(root)/lib >>$@ +endif + +$(dcf_root)/import/libace/ace.l.cpp-options: + @echo include: -I$(root) >$@ + +ifndef %foreign% + +disfigure:: + $(call message,rm $(dcf_root)/import/libace/ace.l,\ +rm -f $(dcf_root)/import/libace/ace.l) + $(call message,,rm -f $(dcf_root)/import/libace/ace.l.cpp-options) + +endif diff --git a/xsd/build/import/libace/stub.make b/xsd/build/import/libace/stub.make new file mode 100644 index 0000000..9482396 --- /dev/null +++ b/xsd/build/import/libace/stub.make @@ -0,0 +1,32 @@ +# file : build/import/libace/stub.make +# author : Boris Kolpackov <boris@kolpackov.net> +# copyright : Copyright (c) 2005-2009 Boris Kolpackov +# license : GNU GPL v2; see accompanying LICENSE file + +$(call include-once,$(scf_root)/import/libace/configuration-rules.make,$(dcf_root)) + +libace_installed := + +$(call -include,$(dcf_root)/import/libace/configuration-dynamic.make) + +ifdef libace_installed + +ifeq ($(libace_installed),y) + +$(call export,l: -lACE,cpp-options: ) + +else + +$(call include-once,$(scf_root)/import/libace/rules.make,$(dcf_root)) + +$(call export,\ + l: $(dcf_root)/import/libace/ace.l,\ + cpp-options: $(dcf_root)/import/libace/ace.l.cpp-options) + +endif + +else + +.NOTPARALLEL: + +endif diff --git a/xsd/build/import/libace/version b/xsd/build/import/libace/version new file mode 100644 index 0000000..0d91a54 --- /dev/null +++ b/xsd/build/import/libace/version @@ -0,0 +1 @@ +0.3.0 diff --git a/xsd/build/import/libbackend-elements/LICENSE b/xsd/build/import/libbackend-elements/LICENSE new file mode 100644 index 0000000..3912109 --- /dev/null +++ b/xsd/build/import/libbackend-elements/LICENSE @@ -0,0 +1,340 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (C) <year> <name of author> + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + <signature of Ty Coon>, 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. diff --git a/xsd/build/import/libbackend-elements/configuration-dynamic.make b/xsd/build/import/libbackend-elements/configuration-dynamic.make new file mode 100644 index 0000000..8a6f091 --- /dev/null +++ b/xsd/build/import/libbackend-elements/configuration-dynamic.make @@ -0,0 +1,4 @@ +libbackend_elements_installed := n +src_root := $(abspath $(src_root)/../libbackend-elements) +scf_root := $(src_root)/build +out_root := $(src_root) diff --git a/xsd/build/import/libbackend-elements/configuration-rules.make b/xsd/build/import/libbackend-elements/configuration-rules.make new file mode 100644 index 0000000..1766f03 --- /dev/null +++ b/xsd/build/import/libbackend-elements/configuration-rules.make @@ -0,0 +1,15 @@ +# file : build/import/libbackend-elements/configuration-rules.make +# author : Boris Kolpackov <boris@kolpackov.net> +# copyright : Copyright (c) 2005-2009 Boris Kolpackov +# license : GNU GPL v2; see accompanying LICENSE file + +$(dcf_root)/import/libbackend-elements/configuration-dynamic.make: | $(dcf_root)/import/libbackend-elements/. + $(call message,,$(scf_root)/import/libbackend-elements/configure $@) + +ifndef %foreign% + +disfigure:: + $(call message,rm $(dcf_root)/import/libbackend-elements/configuration-dynamic.make,\ +rm -f $(dcf_root)/import/libbackend-elements/configuration-dynamic.make) + +endif diff --git a/xsd/build/import/libbackend-elements/configure b/xsd/build/import/libbackend-elements/configure new file mode 100755 index 0000000..db3e44d --- /dev/null +++ b/xsd/build/import/libbackend-elements/configure @@ -0,0 +1,55 @@ +#! /usr/bin/env bash + +# file : build/import/libbackend-elements/configure +# author : Boris Kolpackov <boris@kolpackov.net> +# copyright : Copyright (c) 2005-2009 Boris Kolpackov +# license : GNU GPL v2; see accompanying LICENSE file + + +# $1 - out file +# +# bld_root - build root +# project_name - project name +# + +source $bld_root/dialog.bash + + +$echo +$echo "Configuring external dependency on 'libbackend-elements' for '$project_name'." +$echo + +$echo +$echo "Would you like to configure dependency on the installed version" +$echo "of 'libbackend-elements' as opposed to the development build?" +$echo + +installed=`read_y_n y` + +path= + +if [ "$installed" = "n" ]; then + +$echo +$echo "Please enter the src_root for 'libbackend-elements'." +$echo + +src_root=`read_path --directory --exist` + +$echo +$echo "Please enter the out_root for 'libbackend-elements'." +$echo + +out_root=`read_path --directory $src_root` + +fi + +echo libbackend_elements_installed := $installed >$1 + +if [ "$installed" = "n" ]; then + +echo src_root := $src_root >>$1 +echo scf_root := \$\(src_root\)/build >>$1 +echo out_root := $out_root >>$1 + +fi diff --git a/xsd/build/import/libbackend-elements/stub.make b/xsd/build/import/libbackend-elements/stub.make new file mode 100644 index 0000000..b171c30 --- /dev/null +++ b/xsd/build/import/libbackend-elements/stub.make @@ -0,0 +1,32 @@ +# file : build/import/libbackend-elements/stub.make +# author : Boris Kolpackov <boris@kolpackov.net> +# copyright : Copyright (c) 2005-2009 Boris Kolpackov +# license : GNU GPL v2; see accompanying LICENSE file + +$(call include-once,$(scf_root)/import/libbackend-elements/configuration-rules.make,$(dcf_root)) + +libbackend_elements_installed := + +$(call -include,$(dcf_root)/import/libbackend-elements/configuration-dynamic.make) + +ifdef libbackend_elements_installed + +ifeq ($(libbackend_elements_installed),y) + +#-lbackend-elements + +$(call export,l: -lcult -lboost_regex,cpp_options: ) + +else + +# Include export stub. +# +$(call include,$(scf_root)/export/libbackend-elements/stub.make) + +endif + +else + +.NOTPARALLEL: + +endif diff --git a/xsd/build/import/libboost/LICENSE b/xsd/build/import/libboost/LICENSE new file mode 100644 index 0000000..3912109 --- /dev/null +++ b/xsd/build/import/libboost/LICENSE @@ -0,0 +1,340 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (C) <year> <name of author> + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + <signature of Ty Coon>, 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. diff --git a/xsd/build/import/libboost/configuration-dynamic.make b/xsd/build/import/libboost/configuration-dynamic.make new file mode 100644 index 0000000..ab55882 --- /dev/null +++ b/xsd/build/import/libboost/configuration-dynamic.make @@ -0,0 +1,8 @@ +libboost_installed := y +libboost_suffix := $(BOOST_LIB_SUFFIX) + +ifeq ($(BOOST_LINK_SYSTEM),n) +libboost_system := n +else +libboost_system := y +endif diff --git a/xsd/build/import/libboost/configuration-rules.make b/xsd/build/import/libboost/configuration-rules.make new file mode 100644 index 0000000..40fff9f --- /dev/null +++ b/xsd/build/import/libboost/configuration-rules.make @@ -0,0 +1,15 @@ +# file : build/import/libboost/configuration-rules.make +# author : Boris Kolpackov <boris@kolpackov.net> +# copyright : Copyright (c) 2005-2010 Boris Kolpackov +# license : GNU GPL v2; see accompanying LICENSE file + +$(dcf_root)/import/libboost/configuration-dynamic.make: | $(dcf_root)/import/libboost/. + $(call message,,$(scf_root)/import/libboost/configure $@) + +ifndef %foreign% + +disfigure:: + $(call message,rm $(dcf_root)/import/libboost/configuration-dynamic.make,\ +rm -f $(dcf_root)/import/libboost/configuration-dynamic.make) + +endif diff --git a/xsd/build/import/libboost/configure b/xsd/build/import/libboost/configure new file mode 100755 index 0000000..c924a30 --- /dev/null +++ b/xsd/build/import/libboost/configure @@ -0,0 +1,74 @@ +#! /usr/bin/env bash + +# file : build/import/libboost/configure +# author : Boris Kolpackov <boris@kolpackov.net> +# copyright : Copyright (c) 2005-2010 Boris Kolpackov +# license : GNU GPL v2; see accompanying LICENSE file + + +# $1 - out config file +# +# bld_root - build root +# project_name - project name +# + +source $bld_root/dialog.bash + + +$echo +$echo "Configuring external dependency on 'boost libraries' for '$project_name'." +$echo + +$echo +$echo "Would you like to configure dependency on the installed version" +$echo "of 'boost libraries' as opposed to the development build?" +$echo + +installed=`read_y_n y` + +if [ "$installed" = "n" ]; then + + $echo + $echo "Please enter the 'boost' root directory." + $echo + + root=`read_path --directory --exist` + + $echo + $echo "Please select the library type you would like to use:" + $echo + $echo "(1) archive" + $echo "(2) shared object" + $echo + + type=`read_option "archive shared" "shared"` +fi + +$echo +$echo "Link explicitly to the boost system library? This library" +$echo "is available since boost 1.35.0 and linking to it explicitly" +$echo "may be required by newer linkers." +$echo + +link_system=`read_y_n y` + +$echo +$echo "Please enter optional suffix that may be embedded into the" +$echo "boost library names. For example, if your library names are in" +$echo "the libboost_regex-gcc41-mt-d.so form, then enter -gcc41-mt-d" +$echo "Otherwise leave this field blank." +$echo + +suffix= +read -e -p "[]: " suffix + +echo libboost_installed := $installed >$1 +echo libboost_suffix := $suffix >>$1 +echo libboost_system := $link_system >>$1 + +if [ "$installed" = "n" ]; then + + echo libboost_root := $root >>$1 + echo libboost_type := $type >>$1 + +fi diff --git a/xsd/build/import/libboost/date-time/rules.make b/xsd/build/import/libboost/date-time/rules.make new file mode 100644 index 0000000..5de56fc --- /dev/null +++ b/xsd/build/import/libboost/date-time/rules.make @@ -0,0 +1,51 @@ +# file : build/import/libboost/date-time/rules.make +# author : Boris Kolpackov <boris@kolpackov.net> +# copyright : Copyright (c) 2005-2010 Boris Kolpackov +# license : GNU GPL v2; see accompanying LICENSE file + +$(dcf_root)/import/libboost/%: root := $(libboost_root) + +$(dcf_root)/import/libboost/date-time/date-time.l: \ + | $(dcf_root)/import/libboost/date-time/. + +ifeq ($(libboost_type),archive) + +ifeq ($(libboost_system),y) +$(dcf_root)/import/libboost/date-time/date-time.l: \ + $(libboost_root)/stage/lib/libboost_date_time$(libboost_suffix).a \ + $(libboost_root)/stage/lib/libboost_system$(libboost_suffix).a +else +$(dcf_root)/import/libboost/date-time/date-time.l: \ + $(libboost_root)/stage/lib/libboost_date_time$(libboost_suffix).a +endif + @echo $^ >$@ + +else + +ifeq ($(libboost_system),y) +$(dcf_root)/import/libboost/date-time/date-time.l: \ + $(libboost_root)/stage/lib/libboost_date_time$(libboost_suffix).so \ + $(libboost_root)/stage/lib/libboost_system$(libboost_suffix).so +else +$(dcf_root)/import/libboost/date-time/date-time.l: \ + $(libboost_root)/stage/lib/libboost_date_time$(libboost_suffix).so +endif + @echo $^ >$@ + @echo rpath:$(root)/stage/lib >>$@ + +endif + + +$(dcf_root)/import/libboost/date-time/date-time.l.cpp-options: \ + | $(dcf_root)/import/libboost/date-time/. + @echo include: -I$(root) >$@ + +ifndef %foreign% + +disfigure:: + $(call message,rm $(dcf_root)/import/libboost/date-time/date-time.l,\ +rm -f $(dcf_root)/import/libboost/date-time/date-time.l) + $(call message,,\ +rm -f $(dcf_root)/import/libboost/date-time/date-time.l.cpp-options) + +endif diff --git a/xsd/build/import/libboost/date-time/stub.make b/xsd/build/import/libboost/date-time/stub.make new file mode 100644 index 0000000..cb10dd9 --- /dev/null +++ b/xsd/build/import/libboost/date-time/stub.make @@ -0,0 +1,36 @@ +# file : build/import/libboost/date-time/stub.make +# author : Boris Kolpackov <boris@kolpackov.net> +# copyright : Copyright (c) 2005-2010 Boris Kolpackov +# license : GNU GPL v2; see accompanying LICENSE file + +$(call include-once,$(scf_root)/import/libboost/configuration-rules.make,$(dcf_root)) + +libboost_installed := + +$(call -include,$(dcf_root)/import/libboost/configuration-dynamic.make) + +ifdef libboost_installed + +ifeq ($(libboost_installed),y) + +ifeq ($(libboost_system),y) +$(call export,l: -lboost_date_time$(libboost_suffix) -lboost_system$(libboost_suffix),cpp_options: ) +else +$(call export,l: -lboost_date_time$(libboost_suffix),cpp_options: ) +endif + +else + +$(call include-once,$(scf_root)/import/libboost/date-time/rules.make,$(dcf_root)) + +$(call export,\ + l: $(dcf_root)/import/libboost/date-time/date-time.l,\ + cpp-options: $(dcf_root)/import/libboost/date-time/date-time.l.cpp-options) + +endif + +else + +.NOTPARALLEL: + +endif diff --git a/xsd/build/import/libboost/filesystem/rules.make b/xsd/build/import/libboost/filesystem/rules.make new file mode 100644 index 0000000..b5febd3 --- /dev/null +++ b/xsd/build/import/libboost/filesystem/rules.make @@ -0,0 +1,53 @@ +# file : build/import/libboost/filesystem/rules.make +# author : Boris Kolpackov <boris@kolpackov.net> +# copyright : Copyright (c) 2005-2010 Boris Kolpackov +# license : GNU GPL v2; see accompanying LICENSE file + +#@@ Should use message everywhere. +# + +$(dcf_root)/import/libboost/%: root := $(libboost_root) + +$(dcf_root)/import/libboost/filesystem/filesystem.l: \ + | $(dcf_root)/import/libboost/filesystem/. + +ifeq ($(libboost_type),archive) + +ifeq ($(libboost_system),y) +$(dcf_root)/import/libboost/filesystem/filesystem.l: \ + $(libboost_root)/stage/lib/libboost_filesystem$(libboost_suffix).a \ + $(libboost_root)/stage/lib/libboost_system$(libboost_suffix).a +else +$(dcf_root)/import/libboost/filesystem/filesystem.l: \ + $(libboost_root)/stage/lib/libboost_filesystem$(libboost_suffix).a +endif + @echo $^ >$@ + +else + +ifeq ($(libboost_system),y) +$(dcf_root)/import/libboost/filesystem/filesystem.l: \ + $(libboost_root)/stage/lib/libboost_filesystem$(libboost_suffix).so \ + $(libboost_root)/stage/lib/libboost_system$(libboost_suffix).so +else +$(dcf_root)/import/libboost/filesystem/filesystem.l: \ + $(libboost_root)/stage/lib/libboost_filesystem$(libboost_suffix).so +endif + @echo $^ >$@ + @echo rpath:$(root)/stage/lib >>$@ + +endif + + +$(dcf_root)/import/libboost/filesystem/filesystem.l.cpp-options: \ + | $(dcf_root)/import/libboost/filesystem/. + @echo include: -I$(root) >$@ + +ifndef %foreign% + +disfigure:: + $(call message,rm $(dcf_root)/import/libboost/filesystem/filesystem.l,\ +rm -f $(dcf_root)/import/libboost/filesystem/filesystem.l) + $(call message,,rm -f $(dcf_root)/import/libboost/filesystem/filesystem.l.cpp-options) + +endif diff --git a/xsd/build/import/libboost/filesystem/stub.make b/xsd/build/import/libboost/filesystem/stub.make new file mode 100644 index 0000000..fb7398d --- /dev/null +++ b/xsd/build/import/libboost/filesystem/stub.make @@ -0,0 +1,36 @@ +# file : build/import/libboost/filesystem/stub.make +# author : Boris Kolpackov <boris@kolpackov.net> +# copyright : Copyright (c) 2005-2010 Boris Kolpackov +# license : GNU GPL v2; see accompanying LICENSE file + +$(call include-once,$(scf_root)/import/libboost/configuration-rules.make,$(dcf_root)) + +libboost_installed := + +$(call -include,$(dcf_root)/import/libboost/configuration-dynamic.make) + +ifdef libboost_installed + +ifeq ($(libboost_installed),y) + +ifeq ($(libboost_system),y) +$(call export,l: -lboost_filesystem$(libboost_suffix) -lboost_system$(libboost_suffix),cpp_options: ) +else +$(call export,l: -lboost_filesystem$(libboost_suffix),cpp_options: ) +endif + +else + +$(call include-once,$(scf_root)/import/libboost/filesystem/rules.make,$(dcf_root)) + +$(call export,\ + l: $(dcf_root)/import/libboost/filesystem/filesystem.l,\ + cpp-options: $(dcf_root)/import/libboost/filesystem/filesystem.l.cpp-options) + +endif + +else + +.NOTPARALLEL: + +endif diff --git a/xsd/build/import/libboost/regex/rules.make b/xsd/build/import/libboost/regex/rules.make new file mode 100644 index 0000000..2f6b8f7 --- /dev/null +++ b/xsd/build/import/libboost/regex/rules.make @@ -0,0 +1,50 @@ +# file : build/import/libboost/regex/rules.make +# author : Boris Kolpackov <boris@kolpackov.net> +# copyright : Copyright (c) 2005-2010 Boris Kolpackov +# license : GNU GPL v2; see accompanying LICENSE file + +$(dcf_root)/import/libboost/%: root := $(libboost_root) + +$(dcf_root)/import/libboost/regex/regex.l: \ + | $(dcf_root)/import/libboost/regex/. + +ifeq ($(libboost_type),archive) + +ifeq ($(libboost_system),y) +$(dcf_root)/import/libboost/regex/regex.l: \ + $(libboost_root)/stage/lib/libboost_regex$(libboost_suffix).a \ + $(libboost_root)/stage/lib/libboost_system$(libboost_suffix).a +else +$(dcf_root)/import/libboost/regex/regex.l: \ + $(libboost_root)/stage/lib/libboost_regex$(libboost_suffix).a +endif + @echo $^ >$@ + +else + +ifeq ($(libboost_system),y) +$(dcf_root)/import/libboost/regex/regex.l: \ + $(libboost_root)/stage/lib/libboost_regex$(libboost_suffix).so \ + $(libboost_root)/stage/lib/libboost_system$(libboost_suffix).so +else +$(dcf_root)/import/libboost/regex/regex.l: \ + $(libboost_root)/stage/lib/libboost_regex$(libboost_suffix).so +endif + @echo $^ >$@ + @echo rpath:$(root)/stage/lib >>$@ + +endif + + +$(dcf_root)/import/libboost/regex/regex.l.cpp-options: \ + | $(dcf_root)/import/libboost/regex/. + @echo include: -I$(root) >$@ + +ifndef %foreign% + +disfigure:: + $(call message,rm $(dcf_root)/import/libboost/regex/regex.l,\ +rm -f $(dcf_root)/import/libboost/regex/regex.l) + $(call message,,rm -f $(dcf_root)/import/libboost/regex/regex.l.cpp-options) + +endif diff --git a/xsd/build/import/libboost/regex/stub.make b/xsd/build/import/libboost/regex/stub.make new file mode 100644 index 0000000..eabc515 --- /dev/null +++ b/xsd/build/import/libboost/regex/stub.make @@ -0,0 +1,36 @@ +# file : build/import/libboost/regex/stub.make +# author : Boris Kolpackov <boris@kolpackov.net> +# copyright : Copyright (c) 2005-2010 Boris Kolpackov +# license : GNU GPL v2; see accompanying LICENSE file + +$(call include-once,$(scf_root)/import/libboost/configuration-rules.make,$(dcf_root)) + +libboost_installed := + +$(call -include,$(dcf_root)/import/libboost/configuration-dynamic.make) + +ifdef libboost_installed + +ifeq ($(libboost_installed),y) + +ifeq ($(libboost_system),y) +$(call export,l: -lboost_regex$(libboost_suffix) -lboost_system$(libboost_suffix),cpp_options: ) +else +$(call export,l: -lboost_regex$(libboost_suffix),cpp_options: ) +endif + +else + +$(call include-once,$(scf_root)/import/libboost/regex/rules.make,$(dcf_root)) + +$(call export,\ + l: $(dcf_root)/import/libboost/regex/regex.l,\ + cpp-options: $(dcf_root)/import/libboost/regex/regex.l.cpp-options) + +endif + +else + +.NOTPARALLEL: + +endif diff --git a/xsd/build/import/libboost/serialization/rules.make b/xsd/build/import/libboost/serialization/rules.make new file mode 100644 index 0000000..eab97ff --- /dev/null +++ b/xsd/build/import/libboost/serialization/rules.make @@ -0,0 +1,50 @@ +# file : build/import/libboost/serialization/rules.make +# author : Boris Kolpackov <boris@kolpackov.net> +# copyright : Copyright (c) 2005-2010 Boris Kolpackov +# license : GNU GPL v2; see accompanying LICENSE file + +$(dcf_root)/import/libboost/%: root := $(libboost_root) + +$(dcf_root)/import/libboost/serialization/serialization.l: \ + | $(dcf_root)/import/libboost/serialization/. + +ifeq ($(libboost_type),archive) + +ifeq ($(libboost_system),y) +$(dcf_root)/import/libboost/serialization/serialization.l: \ + $(libboost_root)/stage/lib/libboost_serialization$(libboost_suffix).a \ + $(libboost_root)/stage/lib/libboost_system$(libboost_suffix).a +else +$(dcf_root)/import/libboost/serialization/serialization.l: \ + $(libboost_root)/stage/lib/libboost_serialization$(libboost_suffix).a +endif + @echo $^ >$@ + +else + +ifeq ($(libboost_system),y) +$(dcf_root)/import/libboost/serialization/serialization.l: \ + $(libboost_root)/stage/lib/libboost_serialization$(libboost_suffix).so \ + $(libboost_root)/stage/lib/libboost_system$(libboost_suffix).so +else +$(dcf_root)/import/libboost/serialization/serialization.l: \ + $(libboost_root)/stage/lib/libboost_serialization$(libboost_suffix).so +endif + @echo $^ >$@ + @echo rpath:$(root)/stage/lib >>$@ + +endif + + +$(dcf_root)/import/libboost/serialization/serialization.l.cpp-options: \ + | $(dcf_root)/import/libboost/serialization/. + @echo include: -I$(root) >$@ + +ifndef %foreign% + +disfigure:: + $(call message,rm $(dcf_root)/import/libboost/serialization/serialization.l,\ +rm -f $(dcf_root)/import/libboost/serialization/serialization.l) + $(call message,,rm -f $(dcf_root)/import/libboost/serialization/serialization.l.cpp-options) + +endif diff --git a/xsd/build/import/libboost/serialization/stub.make b/xsd/build/import/libboost/serialization/stub.make new file mode 100644 index 0000000..09d0858 --- /dev/null +++ b/xsd/build/import/libboost/serialization/stub.make @@ -0,0 +1,36 @@ +# file : build/import/libboost/serialization/stub.make +# author : Boris Kolpackov <boris@kolpackov.net> +# copyright : Copyright (c) 2005-2010 Boris Kolpackov +# license : GNU GPL v2; see accompanying LICENSE file + +$(call include-once,$(scf_root)/import/libboost/configuration-rules.make,$(dcf_root)) + +libboost_installed := + +$(call -include,$(dcf_root)/import/libboost/configuration-dynamic.make) + +ifdef libboost_installed + +ifeq ($(libboost_installed),y) + +ifeq ($(libboost_system),y) +$(call export,l: -lboost_serialization$(libboost_suffix) -lboost_system$(libboost_suffix),cpp_options: ) +else +$(call export,l: -lboost_serialization$(libboost_suffix),cpp_options: ) +endif + +else + +$(call include-once,$(scf_root)/import/libboost/serialization/rules.make,$(dcf_root)) + +$(call export,\ + l: $(dcf_root)/import/libboost/serialization/serialization.l,\ + cpp-options: $(dcf_root)/import/libboost/serialization/serialization.l.cpp-options) + +endif + +else + +.NOTPARALLEL: + +endif diff --git a/xsd/build/import/libboost/version b/xsd/build/import/libboost/version new file mode 100644 index 0000000..faef31a --- /dev/null +++ b/xsd/build/import/libboost/version @@ -0,0 +1 @@ +0.7.0 diff --git a/xsd/build/import/libcult/LICENSE b/xsd/build/import/libcult/LICENSE new file mode 100644 index 0000000..3912109 --- /dev/null +++ b/xsd/build/import/libcult/LICENSE @@ -0,0 +1,340 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (C) <year> <name of author> + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + <signature of Ty Coon>, 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. diff --git a/xsd/build/import/libcult/configuration-dynamic.make b/xsd/build/import/libcult/configuration-dynamic.make new file mode 100644 index 0000000..73c92bb --- /dev/null +++ b/xsd/build/import/libcult/configuration-dynamic.make @@ -0,0 +1,4 @@ +libcult_installed := n +src_root := $(abspath $(src_root)/../libcult) +scf_root := $(src_root)/build +out_root := $(src_root) diff --git a/xsd/build/import/libcult/configuration-rules.make b/xsd/build/import/libcult/configuration-rules.make new file mode 100644 index 0000000..dc19df4 --- /dev/null +++ b/xsd/build/import/libcult/configuration-rules.make @@ -0,0 +1,15 @@ +# file : build/import/libcult/configuration-rules.make +# author : Boris Kolpackov <boris@kolpackov.net> +# copyright : Copyright (c) 2005-2009 Boris Kolpackov +# license : GNU GPL v2; see accompanying LICENSE file + +$(dcf_root)/import/libcult/configuration-dynamic.make: | $(dcf_root)/import/libcult/. + $(call message,,$(scf_root)/import/libcult/configure $@) + +ifndef %foreign% + +disfigure:: + $(call message,rm $(dcf_root)/import/libcult/configuration-dynamic.make,\ +rm -f $(dcf_root)/import/libcult/configuration-dynamic.make) + +endif diff --git a/xsd/build/import/libcult/configure b/xsd/build/import/libcult/configure new file mode 100755 index 0000000..afa4c9c --- /dev/null +++ b/xsd/build/import/libcult/configure @@ -0,0 +1,55 @@ +#! /usr/bin/env bash + +# file : build/import/libcult/configure +# author : Boris Kolpackov <boris@kolpackov.net> +# copyright : Copyright (c) 2005-2009 Boris Kolpackov +# license : GNU GPL v2; see accompanying LICENSE file + + +# $1 - out file +# +# bld_root - build root +# project_name - project name +# + +source $bld_root/dialog.bash + + +$echo +$echo "Configuring external dependency on 'libcult' for '$project_name'." +$echo + +$echo +$echo "Would you like to configure dependency on the installed " +$echo "version of 'libcult' as opposed to the development build?" +$echo + +installed=`read_y_n y` + +path= + +if [ "$installed" = "n" ]; then + +$echo +$echo "Please enter the src_root for 'libcult'." +$echo + +src_root=`read_path --directory --exist` + +$echo +$echo "Please enter the out_root for 'libcult'." +$echo + +out_root=`read_path --directory $src_root` + +fi + +echo libcult_installed := $installed >$1 + +if [ "$installed" = "n" ]; then + +echo src_root := $src_root >>$1 +echo scf_root := \$\(src_root\)/build >>$1 +echo out_root := $out_root >>$1 + +fi diff --git a/xsd/build/import/libcult/stub.make b/xsd/build/import/libcult/stub.make new file mode 100644 index 0000000..f5f7691 --- /dev/null +++ b/xsd/build/import/libcult/stub.make @@ -0,0 +1,30 @@ +# file : build/import/libcult/stub.make +# author : Boris Kolpackov <boris@kolpackov.net> +# copyright : Copyright (c) 2005-2009 Boris Kolpackov +# license : GNU GPL v2; see accompanying LICENSE file + +$(call include-once,$(scf_root)/import/libcult/configuration-rules.make,$(dcf_root)) + +libcult_installed := + +$(call -include,$(dcf_root)/import/libcult/configuration-dynamic.make) + +ifdef libcult_installed + +ifeq ($(libcult_installed),y) + +$(call export,l: -lcult,cpp-options: ) + +else + +# Include export stub. +# +$(call include,$(scf_root)/export/libcult/stub.make) + +endif + +else + +.NOTPARALLEL: + +endif diff --git a/xsd/build/import/libdbxml/LICENSE b/xsd/build/import/libdbxml/LICENSE new file mode 100644 index 0000000..3912109 --- /dev/null +++ b/xsd/build/import/libdbxml/LICENSE @@ -0,0 +1,340 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (C) <year> <name of author> + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + <signature of Ty Coon>, 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. diff --git a/xsd/build/import/libdbxml/configuration-rules.make b/xsd/build/import/libdbxml/configuration-rules.make new file mode 100644 index 0000000..823186c --- /dev/null +++ b/xsd/build/import/libdbxml/configuration-rules.make @@ -0,0 +1,15 @@ +# file : build/import/libdbxml/configuration-rules.make +# author : Boris Kolpackov <boris@kolpackov.net> +# copyright : Copyright (c) 2005-2009 Boris Kolpackov +# license : GNU GPL v2; see accompanying LICENSE file + +$(dcf_root)/import/libdbxml/configuration-dynamic.make: | $(dcf_root)/import/libdbxml/. + $(call message,,$(scf_root)/import/libdbxml/configure $@) + +ifndef %foreign% + +disfigure:: + $(call message,rm $(dcf_root)/import/libdbxml/configuration-dynamic.make,\ +rm -f $(dcf_root)/import/libdbxml/configuration-dynamic.make) + +endif diff --git a/xsd/build/import/libdbxml/configure b/xsd/build/import/libdbxml/configure new file mode 100755 index 0000000..73ce78c --- /dev/null +++ b/xsd/build/import/libdbxml/configure @@ -0,0 +1,58 @@ +#! /usr/bin/env bash + +# file : build/import/libdbxml/configure +# author : Boris Kolpackov <boris@kolpackov.net> +# copyright : Copyright (c) 2005-2009 Boris Kolpackov +# license : GNU GPL v2; see accompanying LICENSE file + + +# $1 - out config file +# +# bld_root - build root +# project_name - project name +# + +source $bld_root/dialog.bash + + +$echo +$echo "Configuring external dependency on 'Berkeley DB XML' for '$project_name'." +$echo + +$echo +$echo "Would you like to configure dependency on the installed version" +$echo "of 'Berkeley DB XML' as opposed to the development build?" +$echo + +installed=`read_y_n y` + +path= +type= + +if [ "$installed" = "n" ]; then + + $echo + $echo "Please enter the 'Berkeley DB XML' root directory." + $echo + + root=`read_path --directory --exist` + + $echo + $echo "Please select the library type you would like to use:" + $echo + $echo "(1) archive" + $echo "(2) shared object" + $echo + + type=`read_option "archive shared" "shared"` + +fi + +echo libdbxml_installed := $installed >$1 + +if [ "$installed" = "n" ]; then + + echo libdbxml_root := $root >>$1 + echo libdbxml_type := $type >>$1 + +fi diff --git a/xsd/build/import/libdbxml/rules.make b/xsd/build/import/libdbxml/rules.make new file mode 100644 index 0000000..ac8118c --- /dev/null +++ b/xsd/build/import/libdbxml/rules.make @@ -0,0 +1,42 @@ +# file : build/import/libdbxml/rules.make +# author : Boris Kolpackov <boris@kolpackov.net> +# copyright : Copyright (c) 2005-2009 Boris Kolpackov +# license : GNU GPL v2; see accompanying LICENSE file + +#@@ .l construction is compiler-specific +# + +$(dcf_root)/import/libdbxml/%: root := $(libdbxml_root) + +ifeq ($(libdbxml_type),archive) + +$(dcf_root)/import/libdbxml/dbxml.l: \ +$(libdbxml_root)/install/lib/libdbxml.a \ +$(libdbxml_root)/install/lib/libxqilla.a \ +$(libdbxml_root)/install/lib/libxerces-c.a \ +$(libdbxml_root)/install/lib/libdb_cxx.a \ +$(libdbxml_root)/install/lib/libdb.a + +else + +$(dcf_root)/import/libdbxml/dbxml.l: \ +$(libdbxml_root)/install/lib/libdbxml.so \ +$(libdbxml_root)/install/lib/libxqilla.so \ +$(libdbxml_root)/install/lib/libxerces-c.so \ +$(libdbxml_root)/install/lib/libdb_cxx.so \ +$(libdbxml_root)/install/lib/libdb.so + @echo $^ | xargs -n 1 echo >$@ + @echo rpath:$(root)/install/lib >>$@ +endif + +$(dcf_root)/import/libdbxml/dbxml.l.cpp-options: + @echo include: -I$(root)/install/include >$@ + +ifndef %foreign% + +disfigure:: + $(call message,rm $(dcf_root)/import/libdbxml/dbxml.l,\ +rm -f $(dcf_root)/import/libdbxml/dbxml.l) + $(call message,,rm -f $(dcf_root)/import/libdbxml/dbxml.l.cpp-options) + +endif diff --git a/xsd/build/import/libdbxml/stub.make b/xsd/build/import/libdbxml/stub.make new file mode 100644 index 0000000..f8eb9a3 --- /dev/null +++ b/xsd/build/import/libdbxml/stub.make @@ -0,0 +1,32 @@ +# file : build/import/libdbxml/stub.make +# author : Boris Kolpackov <boris@kolpackov.net> +# copyright : Copyright (c) 2005-2009 Boris Kolpackov +# license : GNU GPL v2; see accompanying LICENSE file + +$(call include-once,$(scf_root)/import/libdbxml/configuration-rules.make,$(dcf_root)) + +libdbxml_installed := + +$(call -include,$(dcf_root)/import/libdbxml/configuration-dynamic.make) + +ifdef libdbxml_installed + +ifeq ($(libdbxml_installed),y) + +$(call export,l: -ldbxml -lxqilla -lxerces-c -ldb_cxx -ldb,cpp-options: ) + +else + +$(call include-once,$(scf_root)/import/libdbxml/rules.make,$(dcf_root)) + +$(call export,\ + l: $(dcf_root)/import/libdbxml/dbxml.l,\ + cpp-options: $(dcf_root)/import/libdbxml/dbxml.l.cpp-options) + +endif + +else + +.NOTPARALLEL: + +endif diff --git a/xsd/build/import/libdbxml/version b/xsd/build/import/libdbxml/version new file mode 100644 index 0000000..9e11b32 --- /dev/null +++ b/xsd/build/import/libdbxml/version @@ -0,0 +1 @@ +0.3.1 diff --git a/xsd/build/import/libxerces-c/LICENSE b/xsd/build/import/libxerces-c/LICENSE new file mode 100644 index 0000000..3912109 --- /dev/null +++ b/xsd/build/import/libxerces-c/LICENSE @@ -0,0 +1,340 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (C) <year> <name of author> + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + <signature of Ty Coon>, 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. diff --git a/xsd/build/import/libxerces-c/configuration-dynamic.make b/xsd/build/import/libxerces-c/configuration-dynamic.make new file mode 100644 index 0000000..91f61b2 --- /dev/null +++ b/xsd/build/import/libxerces-c/configuration-dynamic.make @@ -0,0 +1 @@ +libxerces_c_installed := y diff --git a/xsd/build/import/libxerces-c/configuration-rules.make b/xsd/build/import/libxerces-c/configuration-rules.make new file mode 100644 index 0000000..fdb2263 --- /dev/null +++ b/xsd/build/import/libxerces-c/configuration-rules.make @@ -0,0 +1,15 @@ +# file : build/import/libxerces-c/configuration-rules.make +# author : Boris Kolpackov <boris@kolpackov.net> +# copyright : Copyright (c) 2005-2009 Boris Kolpackov +# license : GNU GPL v2; see accompanying LICENSE file + +$(dcf_root)/import/libxerces-c/configuration-dynamic.make: | $(dcf_root)/import/libxerces-c/. + $(call message,,$(scf_root)/import/libxerces-c/configure $@) + +ifndef %foreign% + +disfigure:: + $(call message,rm $(dcf_root)/import/libxerces-c/configuration-dynamic.make,\ +rm -f $(dcf_root)/import/libxerces-c/configuration-dynamic.make) + +endif diff --git a/xsd/build/import/libxerces-c/configure b/xsd/build/import/libxerces-c/configure new file mode 100755 index 0000000..26e56a7 --- /dev/null +++ b/xsd/build/import/libxerces-c/configure @@ -0,0 +1,73 @@ +#! /usr/bin/env bash + +# file : build/import/libxerces-c/configure +# author : Boris Kolpackov <boris@kolpackov.net> +# copyright : Copyright (c) 2005-2009 Boris Kolpackov +# license : GNU GPL v2; see accompanying LICENSE file + + +# $1 - out config file +# +# bld_root - build root +# project_name - project name +# + +source $bld_root/dialog.bash + + +$echo +$echo "Configuring external dependency on 'libxerces-c' for '$project_name'." +$echo + +$echo +$echo "Would you like to configure dependency on the installed version" +$echo "of 'libxerces-c' as opposed to the development build?" +$echo + +installed=`read_y_n y` + +path= +type= + +if [ "$installed" = "n" ]; then + + version= + + while [ -z "$version" ]; do + + $echo + $echo "Please enter the 'libxerces-c' root directory." + $echo + + root=`read_path --directory --exist` + + version=`sed -e 's/^VER=\([^_]*\)_\([^_]*\)_\([^_]*\)[ ]*$/\1.\2.\3/' \ +-e t -e d $root/version.incl 2>/dev/null` + + if [ $? != 0 -o -z "$version" ]; then + + version= + echo "Unable to read version information from $root/version.incl" + fi + done + + $echo + $echo "Please select the library type you would like to use:" + $echo + $echo "(1) archive" + $echo "(2) shared object" + $echo + + type=`read_option "archive shared" "shared"` + +fi + +echo libxerces_c_installed := $installed >$1 + +if [ "$installed" = "n" ]; then + + echo libxerces_c_root := $root >>$1 + echo libxerces_c_type := $type >>$1 + echo libxerces_c_version := $version >>$1 + +fi diff --git a/xsd/build/import/libxerces-c/rules.make b/xsd/build/import/libxerces-c/rules.make new file mode 100644 index 0000000..7cdca8c --- /dev/null +++ b/xsd/build/import/libxerces-c/rules.make @@ -0,0 +1,52 @@ +# file : build/import/libxerces-c/rules.make +# author : Boris Kolpackov <boris@kolpackov.net> +# copyright : Copyright (c) 2005-2009 Boris Kolpackov +# license : GNU GPL v2; see accompanying LICENSE file + +$(dcf_root)/import/libxerces-c/%: root := $(libxerces_c_root) + +ifneq ($(filter 3.%,$(libxerces_c_version)),) + +# 3.x.y +# +ifeq ($(libxerces_c_type),archive) + +$(dcf_root)/import/libxerces-c/xerces-c.l: $(libxerces_c_root)/src/.libs/libxerces-c.a + @echo $< >$@ +else + +$(dcf_root)/import/libxerces-c/xerces-c.l: $(libxerces_c_root)/src/.libs/libxerces-c.so + @echo $< >$@ + @echo rpath:$(root)/src/.libs >>$@ +endif + +$(dcf_root)/import/libxerces-c/xerces-c.l.cpp-options: + @echo include: -I$(root)/src >$@ +else + +# 2.x.y +# +ifeq ($(libxerces_c_type),archive) + +$(dcf_root)/import/libxerces-c/xerces-c.l: $(libxerces_c_root)/lib/libxerces-c.a + @echo $< >$@ +else + +$(dcf_root)/import/libxerces-c/xerces-c.l: $(libxerces_c_root)/lib/libxerces-c.so + @echo $< >$@ + @echo rpath:$(root)/lib >>$@ +endif + +$(dcf_root)/import/libxerces-c/xerces-c.l.cpp-options: + @echo include: -I$(root)/include >$@ +endif + + +ifndef %foreign% + +disfigure:: + $(call message,rm $(dcf_root)/import/libxerces-c/xerces-c.l,\ +rm -f $(dcf_root)/import/libxerces-c/xerces-c.l) + $(call message,,rm -f $(dcf_root)/import/libxerces-c/xerces-c.l.cpp-options) + +endif diff --git a/xsd/build/import/libxerces-c/stub.make b/xsd/build/import/libxerces-c/stub.make new file mode 100644 index 0000000..d4de5ec --- /dev/null +++ b/xsd/build/import/libxerces-c/stub.make @@ -0,0 +1,32 @@ +# file : build/import/libxerces-c/stub.make +# author : Boris Kolpackov <boris@kolpackov.net> +# copyright : Copyright (c) 2005-2009 Boris Kolpackov +# license : GNU GPL v2; see accompanying LICENSE file + +$(call include-once,$(scf_root)/import/libxerces-c/configuration-rules.make,$(dcf_root)) + +libxerces_c_installed := + +$(call -include,$(dcf_root)/import/libxerces-c/configuration-dynamic.make) + +ifdef libxerces_c_installed + +ifeq ($(libxerces_c_installed),y) + +$(call export,l: -lxerces-c,cpp-options: ) + +else + +$(call include-once,$(scf_root)/import/libxerces-c/rules.make,$(dcf_root)) + +$(call export,\ + l: $(dcf_root)/import/libxerces-c/xerces-c.l,\ + cpp-options: $(dcf_root)/import/libxerces-c/xerces-c.l.cpp-options) + +endif + +else + +.NOTPARALLEL: + +endif diff --git a/xsd/build/import/libxerces-c/version b/xsd/build/import/libxerces-c/version new file mode 100644 index 0000000..a918a2a --- /dev/null +++ b/xsd/build/import/libxerces-c/version @@ -0,0 +1 @@ +0.6.0 diff --git a/xsd/build/import/libxqilla/LICENSE b/xsd/build/import/libxqilla/LICENSE new file mode 100644 index 0000000..3912109 --- /dev/null +++ b/xsd/build/import/libxqilla/LICENSE @@ -0,0 +1,340 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (C) <year> <name of author> + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + <signature of Ty Coon>, 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. diff --git a/xsd/build/import/libxqilla/configuration-rules.make b/xsd/build/import/libxqilla/configuration-rules.make new file mode 100644 index 0000000..c567c76 --- /dev/null +++ b/xsd/build/import/libxqilla/configuration-rules.make @@ -0,0 +1,15 @@ +# file : build/import/libxqilla/configuration-rules.make +# author : Boris Kolpackov <boris@kolpackov.net> +# copyright : Copyright (c) 2005-2009 Boris Kolpackov +# license : GNU GPL v2; see accompanying LICENSE file + +$(dcf_root)/import/libxqilla/configuration-dynamic.make: | $(dcf_root)/import/libxqilla/. + $(call message,,$(scf_root)/import/libxqilla/configure $@) + +ifndef %foreign% + +disfigure:: + $(call message,rm $(dcf_root)/import/libxqilla/configuration-dynamic.make,\ +rm -f $(dcf_root)/import/libxqilla/configuration-dynamic.make) + +endif diff --git a/xsd/build/import/libxqilla/configure b/xsd/build/import/libxqilla/configure new file mode 100755 index 0000000..71cd954 --- /dev/null +++ b/xsd/build/import/libxqilla/configure @@ -0,0 +1,57 @@ +#! /usr/bin/env bash + +# file : build/import/libxqilla/configure +# author : Boris Kolpackov <boris@kolpackov.net> +# copyright : Copyright (c) 2005-2009 Boris Kolpackov +# license : GNU GPL v2; see accompanying LICENSE file + + +# $1 - out config file +# +# bld_root - build root +# project_name - project name +# + +source $bld_root/dialog.bash + + +$echo +$echo "Configuring external dependency on 'libxqilla' for '$project_name'." +$echo + +$echo +$echo "Would you like to configure dependency on the installed version" +$echo "of 'libxqilla' as opposed to the development build?" +$echo + +installed=`read_y_n y` + +path= +type= + +if [ "$installed" = "n" ]; then + + $echo + $echo "Please enter the 'libxqilla' root directory." + $echo + + root=`read_path --directory --exist` + + $echo + $echo "Please select the library type you would like to use:" + $echo + $echo "(1) archive" + $echo "(2) shared object" + $echo + + type=`read_option "archive shared" "shared"` +fi + +echo libxqilla_installed := $installed >$1 + +if [ "$installed" = "n" ]; then + + echo libxqilla_root := $root >>$1 + echo libxqilla_type := $type >>$1 + +fi diff --git a/xsd/build/import/libxqilla/rules.make b/xsd/build/import/libxqilla/rules.make new file mode 100644 index 0000000..780ac50 --- /dev/null +++ b/xsd/build/import/libxqilla/rules.make @@ -0,0 +1,30 @@ +# file : build/import/libxqilla/rules.make +# author : Boris Kolpackov <boris@kolpackov.net> +# copyright : Copyright (c) 2005-2009 Boris Kolpackov +# license : GNU GPL v2; see accompanying LICENSE file + +$(dcf_root)/import/libxqilla/%: root := $(libxqilla_root) + +ifeq ($(libxqilla_type),archive) + +$(dcf_root)/import/libxqilla/xqilla.l: $(libxqilla_root)/.libs/libxqilla.a + @echo $< >$@ +else + +$(dcf_root)/import/libxqilla/xqilla.l: $(libxqilla_root)/.libs/libxqilla.so + @echo $< >$@ + @echo rpath:$(root)/.libs >>$@ +endif + +$(dcf_root)/import/libxqilla/xqilla.l.cpp-options: + @echo include: -I$(root)/include >$@ + + +ifndef %foreign% + +disfigure:: + $(call message,rm $(dcf_root)/import/libxqilla/xqilla.l,\ +rm -f $(dcf_root)/import/libxqilla/xqilla.l) + $(call message,,rm -f $(dcf_root)/import/libxqilla/xqilla.l.cpp-options) + +endif diff --git a/xsd/build/import/libxqilla/stub.make b/xsd/build/import/libxqilla/stub.make new file mode 100644 index 0000000..d24f962 --- /dev/null +++ b/xsd/build/import/libxqilla/stub.make @@ -0,0 +1,32 @@ +# file : build/import/libxqilla/stub.make +# author : Boris Kolpackov <boris@kolpackov.net> +# copyright : Copyright (c) 2005-2009 Boris Kolpackov +# license : GNU GPL v2; see accompanying LICENSE file + +$(call include-once,$(scf_root)/import/libxqilla/configuration-rules.make,$(dcf_root)) + +libxqilla_installed := + +$(call -include,$(dcf_root)/import/libxqilla/configuration-dynamic.make) + +ifdef libxqilla_installed + +ifeq ($(libxqilla_installed),y) + +$(call export,l: -lxqilla,cpp-options: ) + +else + +$(call include-once,$(scf_root)/import/libxqilla/rules.make,$(dcf_root)) + +$(call export,\ + l: $(dcf_root)/import/libxqilla/xqilla.l,\ + cpp-options: $(dcf_root)/import/libxqilla/xqilla.l.cpp-options) + +endif + +else + +.NOTPARALLEL: + +endif diff --git a/xsd/build/import/libxqilla/version b/xsd/build/import/libxqilla/version new file mode 100644 index 0000000..6e8bf73 --- /dev/null +++ b/xsd/build/import/libxqilla/version @@ -0,0 +1 @@ +0.1.0 diff --git a/xsd/build/import/libxsd-frontend/LICENSE b/xsd/build/import/libxsd-frontend/LICENSE new file mode 100644 index 0000000..33b4cbc --- /dev/null +++ b/xsd/build/import/libxsd-frontend/LICENSE @@ -0,0 +1,22 @@ +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License version 2 as +published by the Free Software Foundation. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +In addition, as a special exception, Code Synthesis Tools CC gives +permission to link this program with the Xerces-C++ library (or with +modified versions of Xerces-C++ that use the same license as Xerces-C++), +and distribute linked combinations including the two. You must obey +the GNU General Public License version 2 in all respects for all of +the code used other than Xerces-C++. If you modify this copy of the +program, you may extend this exception to your version of the program, +but you are not obligated to do so. If you do not wish to do so, delete +this exception statement from your version. diff --git a/xsd/build/import/libxsd-frontend/configuration-dynamic.make b/xsd/build/import/libxsd-frontend/configuration-dynamic.make new file mode 100644 index 0000000..5033ade --- /dev/null +++ b/xsd/build/import/libxsd-frontend/configuration-dynamic.make @@ -0,0 +1,4 @@ +libxsd_frontend_installed := n +src_root := $(abspath $(src_root)/../libxsd-frontend) +scf_root := $(src_root)/build +out_root := $(src_root) diff --git a/xsd/build/import/libxsd-frontend/configuration-rules.make b/xsd/build/import/libxsd-frontend/configuration-rules.make new file mode 100644 index 0000000..eda6378 --- /dev/null +++ b/xsd/build/import/libxsd-frontend/configuration-rules.make @@ -0,0 +1,15 @@ +# file : build/import/libxsd-frontend/configuration-rules.make +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2005-2009 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +$(dcf_root)/import/libxsd-frontend/configuration-dynamic.make: | $(dcf_root)/import/libxsd-frontend/. + $(call message,,$(scf_root)/import/libxsd-frontend/configure $@) + +ifndef %foreign% + +disfigure:: + $(call message,rm $(dcf_root)/import/libxsd-frontend/configuration-dynamic.make,\ +rm -f $(dcf_root)/import/libxsd-frontend/configuration-dynamic.make) + +endif diff --git a/xsd/build/import/libxsd-frontend/configure b/xsd/build/import/libxsd-frontend/configure new file mode 100755 index 0000000..1571a27 --- /dev/null +++ b/xsd/build/import/libxsd-frontend/configure @@ -0,0 +1,55 @@ +#! /usr/bin/env bash + +# file : build/import/libxsd-frontend/configure +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2005-2009 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + + +# $1 - out file +# +# bld_root - build root +# project_name - project name +# + +source $bld_root/dialog.bash + + +$echo +$echo "Configuring external dependency on 'libxsd-frontend' for '$project_name'." +$echo + +$echo +$echo "Would you like to configure dependency on the installed " +$echo "version of 'libxsd-frontend' as opposed to the development build?" +$echo + +installed=`read_y_n y` + +path= + +if [ "$installed" = "n" ]; then + +$echo +$echo "Please enter the src_root for 'libxsd-frontend'." +$echo + +src_root=`read_path --directory --exist` + +$echo +$echo "Please enter the out_root for 'libxsd-frontend'." +$echo + +out_root=`read_path --directory $src_root` + +fi + +echo libxsd_frontend_installed := $installed >$1 + +if [ "$installed" = "n" ]; then + +echo src_root := $src_root >>$1 +echo scf_root := \$\(src_root\)/build >>$1 +echo out_root := $out_root >>$1 + +fi diff --git a/xsd/build/import/libxsd-frontend/stub.make b/xsd/build/import/libxsd-frontend/stub.make new file mode 100644 index 0000000..f861eb6 --- /dev/null +++ b/xsd/build/import/libxsd-frontend/stub.make @@ -0,0 +1,30 @@ +# file : build/import/libxsd-frontend/stub.make +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2005-2009 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +$(call include-once,$(scf_root)/import/libxsd-frontend/configuration-rules.make,$(dcf_root)) + +libxsd_frontend_installed := + +$(call -include,$(dcf_root)/import/libxsd-frontend/configuration-dynamic.make) + +ifdef libxsd_frontend_installed + +ifeq ($(libxsd_frontend_installed),y) + +$(call export,l: -lxsd-frontend -lfrontend-elements -lcult -lboost_filesystem -lxerces-c,cpp_options: ) + +else + +# Include export stub. +# +$(call include,$(scf_root)/export/libxsd-frontend/stub.make) + +endif + +else + +.NOTPARALLEL: + +endif diff --git a/xsd/build/import/libz/LICENSE b/xsd/build/import/libz/LICENSE new file mode 100644 index 0000000..3912109 --- /dev/null +++ b/xsd/build/import/libz/LICENSE @@ -0,0 +1,340 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (C) <year> <name of author> + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + <signature of Ty Coon>, 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. diff --git a/xsd/build/import/libz/configuration-rules.make b/xsd/build/import/libz/configuration-rules.make new file mode 100644 index 0000000..c393b8b --- /dev/null +++ b/xsd/build/import/libz/configuration-rules.make @@ -0,0 +1,15 @@ +# file : build/import/libz/configuration-rules.make +# author : Boris Kolpackov <boris@kolpackov.net> +# copyright : Copyright (c) 2009 Boris Kolpackov +# license : GNU GPL v2; see accompanying LICENSE file + +$(dcf_root)/import/libz/configuration-dynamic.make: | $(dcf_root)/import/libz/. + $(call message,,$(scf_root)/import/libz/configure $@) + +ifndef %foreign% + +disfigure:: + $(call message,rm $(dcf_root)/import/libz/configuration-dynamic.make,\ +rm -f $(dcf_root)/import/libz/configuration-dynamic.make) + +endif diff --git a/xsd/build/import/libz/configure b/xsd/build/import/libz/configure new file mode 100755 index 0000000..c572910 --- /dev/null +++ b/xsd/build/import/libz/configure @@ -0,0 +1,58 @@ +#! /usr/bin/env bash + +# file : build/import/libz/configure +# author : Boris Kolpackov <boris@kolpackov.net> +# copyright : Copyright (c) 2009 Boris Kolpackov +# license : GNU GPL v2; see accompanying LICENSE file + + +# $1 - out config file +# +# bld_root - build root +# project_name - project name +# + +source $bld_root/dialog.bash + + +$echo +$echo "Configuring external dependency on 'zlib' for '$project_name'." +$echo + +$echo +$echo "Would you like to configure dependency on the installed version" +$echo "of 'zlib' as opposed to the development build?" +$echo + +installed=`read_y_n y` + +path= +type= + +if [ "$installed" = "n" ]; then + + $echo + $echo "Please enter the 'zlib' root directory." + $echo + + root=`read_path --directory --exist` + + $echo + $echo "Please select the library type you would like to use:" + $echo + $echo "(1) archive" + $echo "(2) shared object" + $echo + + type=`read_option "archive shared" "shared"` + +fi + +echo libz_installed := $installed >$1 + +if [ "$installed" = "n" ]; then + + echo libz_root := $root >>$1 + echo libz_type := $type >>$1 + +fi diff --git a/xsd/build/import/libz/rules.make b/xsd/build/import/libz/rules.make new file mode 100644 index 0000000..d16089b --- /dev/null +++ b/xsd/build/import/libz/rules.make @@ -0,0 +1,29 @@ +# file : build/import/libz/rules.make +# author : Boris Kolpackov <boris@kolpackov.net> +# copyright : Copyright (c) 2009 Boris Kolpackov +# license : GNU GPL v2; see accompanying LICENSE file + +$(dcf_root)/import/libz/%: root := $(libz_root) + +ifeq ($(libz_type),archive) + +$(dcf_root)/import/libz/z.l: $(libz_root)/libz.a + @echo $< >$@ +else + +$(dcf_root)/import/libz/z.l: $(libz_root)/libz.so + @echo $< >$@ + @echo rpath:$(root) >>$@ +endif + +$(dcf_root)/import/libz/z.l.cpp-options: + @echo include: -I$(root) >$@ + +ifndef %foreign% + +disfigure:: + $(call message,rm $(dcf_root)/import/libz/z.l,\ +rm -f $(dcf_root)/import/libz/z.l) + $(call message,,rm -f $(dcf_root)/import/libz/z.l.cpp-options) + +endif diff --git a/xsd/build/import/libz/stub.make b/xsd/build/import/libz/stub.make new file mode 100644 index 0000000..582fc41 --- /dev/null +++ b/xsd/build/import/libz/stub.make @@ -0,0 +1,32 @@ +# file : build/import/libz/stub.make +# author : Boris Kolpackov <boris@kolpackov.net> +# copyright : Copyright (c) 2009 Boris Kolpackov +# license : GNU GPL v2; see accompanying LICENSE file + +$(call include-once,$(scf_root)/import/libz/configuration-rules.make,$(dcf_root)) + +libz_installed := + +$(call -include,$(dcf_root)/import/libz/configuration-dynamic.make) + +ifdef libz_installed + +ifeq ($(libz_installed),y) + +$(call export,l: -lz,cpp-options: ) + +else + +$(call include-once,$(scf_root)/import/libz/rules.make,$(dcf_root)) + +$(call export,\ + l: $(dcf_root)/import/libz/z.l,\ + cpp-options: $(dcf_root)/import/libz/z.l.cpp-options) + +endif + +else + +.NOTPARALLEL: + +endif diff --git a/xsd/build/import/libz/version b/xsd/build/import/libz/version new file mode 100644 index 0000000..6e8bf73 --- /dev/null +++ b/xsd/build/import/libz/version @@ -0,0 +1 @@ +0.1.0 diff --git a/xsd/build/xsd/parser/xsd-cxx.make b/xsd/build/xsd/parser/xsd-cxx.make new file mode 100644 index 0000000..e96c29f --- /dev/null +++ b/xsd/build/xsd/parser/xsd-cxx.make @@ -0,0 +1,77 @@ +# file : build/xsd/parser/xsd-cxx.make +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#@@ Need to use extensions from cxx config. +# + +# C++/Parser mapping. +# +ifeq ($(xsd_parser_skel_suffix),) +xsd_parser_skel_suffix := -pskel +endif + +xsd_parser_pattern := \ +$(out_base)/%$(xsd_parser_skel_suffix).cxx \ +$(out_base)/%$(xsd_parser_skel_suffix).hxx \ +$(out_base)/%$(xsd_parser_skel_suffix).ixx + +ifneq ($(xsd_parser_impl_suffix),) +xsd_parser_pattern += \ +$(out_base)/%$(xsd_parser_impl_suffix).cxx \ +$(out_base)/%$(xsd_parser_impl_suffix).hxx \ +$(out_base)/%-driver.cxx +endif + + +$(xsd_parser_pattern): xsd := xsd +$(xsd_parser_pattern): xsd_command := cxx-parser + +ops := --skel-file-suffix $(xsd_parser_skel_suffix) + +ifneq ($(xsd_pimpl_suffix),) +ops += --impl-file-suffix $(xsd_parser_impl_suffix) +endif + +$(xsd_parser_pattern): xsd_options := $(ops) + + +.PRECIOUS: $(xsd_parser_pattern) + +ifeq ($(out_base),$(src_base)) + +$(xsd_parser_pattern): $(src_base)/%.xsd + $(call message,xsd $<,$(xsd) $(xsd_command) $(xsd_options) --output-dir $(dir $@) $<) + +else + +$(xsd_parser_pattern): $(src_base)/%.xsd | $$(dir $$@). + $(call message,xsd $<,$(xsd) $(xsd_command) $(xsd_options) --output-dir $(dir $@) $<) + +$(xsd_parser_pattern): $(out_base)/%.xsd | $$(dir $$@). + $(call message,xsd $<,$(xsd) $(xsd_command) $(xsd_options) --output-dir $(dir $@) $<) + +endif + + +.PHONY: $(out_base)/%$(xsd_parser_skel_suffix).cxx.xsd.clean + +$(out_base)/%$(xsd_parser_skel_suffix).cxx.xsd.clean: + $(call message,rm $$1,rm -f $$1,$(@:.cxx.xsd.clean=.cxx)) + $(call message,rm $$1,rm -f $$1,$(@:.cxx.xsd.clean=.hxx)) + $(call message,rm $$1,rm -f $$1,$(@:.cxx.xsd.clean=.ixx)) + +ifneq ($(xsd_parser_impl_suffix),) +.PHONY: $(out_base)/%$(xsd_parser_impl_suffix).cxx.xsd.clean + +$(out_base)/%$(xsd_parser_impl_suffix).cxx.xsd.clean: + $(call message,rm $$1,rm -f $$1,$(@:.cxx.xsd.clean=.cxx)) + $(call message,rm $$1,rm -f $$1,$(@:.cxx.xsd.clean=.hxx)) + $(call message,rm $$1,rm -f $$1,$(out_base)/$*-driver.cxx) +endif + +# Reset the config variables so they won't take effect in other places. +# +xsd_parser_skel_suffix := +xsd_parser_impl_suffix := diff --git a/xsd/build/xsd/tree/xsd-cxx.make b/xsd/build/xsd/tree/xsd-cxx.make new file mode 100644 index 0000000..d63c651 --- /dev/null +++ b/xsd/build/xsd/tree/xsd-cxx.make @@ -0,0 +1,48 @@ +# file : build/xsd/tree/xsd-cxx.make +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#@@ Need to use extensions from cxx config. +# + +# C++/Tree mapping. +# +xsd_tree_pattern := \ +$(out_base)/%$(xsd_tree_suffix).cxx \ +$(out_base)/%$(xsd_tree_suffix).hxx \ +$(out_base)/%$(xsd_tree_suffix).ixx \ +$(out_base)/%$(xsd_tree_suffix)-fwd.hxx + +$(xsd_tree_pattern): xsd := xsd +$(xsd_tree_pattern): xsd_command := cxx-tree +$(xsd_tree_pattern): xsd_options := + +.PRECIOUS: $(xsd_tree_pattern) + +ifeq ($(out_base),$(src_base)) + +$(xsd_tree_pattern): $(src_base)/%.xsd + $(call message,xsd $<,$(xsd) $(xsd_command) $(xsd_options) --output-dir $(dir $@) $<) + +else + +$(xsd_tree_pattern): $(src_base)/%.xsd | $$(dir $$@). + $(call message,xsd $<,$(xsd) $(xsd_command) $(xsd_options) --output-dir $(dir $@) $<) + +$(xsd_tree_pattern): $(out_base)/%.xsd | $$(dir $$@). + $(call message,xsd $<,$(xsd) $(xsd_command) $(xsd_options) --output-dir $(dir $@) $<) + +endif + +.PHONY: $(out_base)/%$(xsd_tree_suffix).cxx.xsd.clean + +$(out_base)/%$(xsd_tree_suffix).cxx.xsd.clean: + $(call message,rm $(@:.cxx.xsd.clean=.cxx),rm -f $(@:.cxx.xsd.clean=.cxx)) + $(call message,rm $(@:.cxx.xsd.clean=.hxx),rm -f $(@:.cxx.xsd.clean=.hxx)) + $(call message,rm $(@:.cxx.xsd.clean=.ixx),rm -f $(@:.cxx.xsd.clean=.ixx)) + $(call message,rm $(@:.cxx.xsd.clean=-fwd.hxx),rm -f $(@:.cxx.xsd.clean=-fwd.hxx)) + +# Reset the config variables so they won't take effect in other places. +# +xsd_tree_suffix := diff --git a/xsd/dist/README-UNIX b/xsd/dist/README-UNIX new file mode 100644 index 0000000..15513de --- /dev/null +++ b/xsd/dist/README-UNIX @@ -0,0 +1,85 @@ +This package contains precompiled binaries of CodeSynthesis XSD, a +W3C XML Schema to C++ Data Binding compiler. For more information +about XSD visit + +http://www.codesynthesis.com/products/xsd/ + +This README file describes how to start using XSD in UNIX or +UNIX-like (for example, Cygwin/Mingw) environments. + + +Prerequisites +------------- + +The XSD runtime library and the generated code depend on the underlying +XML parser which can be Xerces-C++ for the C++/Tree mapping and Xerces-C++ +or Expat for the C++/Parser mapping. + +Xerces-C++ can be obtained from http://xerces.apache.org/xerces-c/. Most +GNU/Linux distributions provide precompiled binary packages for Xerces-C++. +You can also download precompiled Xerces-C++ libraries for a wide range of +platforms and compilers from http://xerces.apache.org/xerces-c/download.cgi + +Expat can be obtained from http://www.libexpat.org/. Most GNU/Linux +distributions provide precompiled binary packages for Expat. + + +Building Examples +----------------- + +To build examples you will need GNU make. All examples in the examples/ +directory come with simple makefiles. For instance, to build a hello +example in examples/cxx/tree you could execute the following commands: + +$ cd examples/cxx/tree/hello +$ make + +The following make variables affect the compilation process and can +be overridden from the command line: + +CXX - C++ compiler, by default 'g++' +CXXFLAGS - C++ options +CPPFLAGS - C/C++ Preprocessor options + +LIBS - Libraries to link with, by default '-lxerces-c' for the + C++/Tree examples and either '-lxerces-c' or '-lexpat' for + the C++/Parser examples, depending on XML_PARSER +LDFLAGS - Linker options + +XSD - XSD compiler, by default path to the XSD binary +XSDFLAGS - XSD options + +WITH_ZLIB - Set this variable to 1 if you would like to build examples + that depend on the zlib library + +WITH_ACE - Set this variable to 1 if you would like to build examples + that depend on the ACE library + +WITH_XDR - Set this variable to 1 if you would like to build examples + that depend on the XDR API (available out of the box on + most GNU/Linux and UNIX systems) + +WITH_BOOST - Set this variable to 1 if you would like to build examples + that depend on the Boost date_time and serialization + libraries + +WITH_XQILLA - Set this variable to 1 if you would like to build examples + that depend on the XQilla library (XPath 2) + +WITH_DBXML - Set this variable to 1 if you would like to build examples + that depend on the Berkeley DB XML library + +Additionally, makefiles for the C++/Parser examples (examples/cxx/parser/) +allow you to choose the underlying XML parser: + +XML_PARSER - Underlying XML parser, can be 'xerces' (default) or 'expat' + + +For instance, if you would like to build an example using g++-4.0 instead +of the default g++ and would like to use Xerces-C++ from ~/xerces-c instead +of the default, system-wide installation, you could execute the following +command: + +$ make CXX=g++-4.0 \ + CPPFLAGS="-I ~/xerces-c/include" \ + LDFLAGS="-L ~/xerces-c/lib" diff --git a/xsd/dist/README-WINDOWS b/xsd/dist/README-WINDOWS new file mode 100644 index 0000000..d2e3925 --- /dev/null +++ b/xsd/dist/README-WINDOWS @@ -0,0 +1,212 @@ +This package contains precompiled binaries of CodeSynthesis XSD, a +W3C XML Schema to C++ Data Binding compiler, built for Microsoft +Windows. For more information about XSD visit + +http://www.codesynthesis.com/products/xsd/ + +This README file describes how to start using XSD in the Microsoft +Windows environment with Visual Studio .NET 2003 (7.1), Visual Studio +2005 (8.0), Visual Studio 2008 (9.0), and Visual Studio 2010 (10.0). + + +Prerequisites +------------- + +The XSD runtime library and the generated code depend on the Xerces-C++ +XML parser which you can obtain from http://xerces.apache.org/xerces-c/. +You can also download precompiled Xerces-C++ libraries for Windows from +http://xerces.apache.org/xerces-c/download.cgi + + +Environment +----------- + +Before you can start building examples or your applications that use XSD +you need to set include, library and executable search paths in the Visual +Studio IDE and the System Environment. + +1. Setting up Xerces-C++ + + First you need to set up Xerces-C++ include and library search paths. + If you already have Xerces-C++ set up in your development environment, + you can skip to the next step. Here we assume that your Xerces-C++ path + is C:\projects\xerces-c-x.y.z. If you have Xerces-C++ in a different + place, you will need to adjust the paths below accordingly. + + + a) For Visual Studio .NET 2003 (7.1): + + In the Visual Studio IDE, select "Tools"/"Options"/"Projects"/"VC++ + Directories". + + Then, in the "Show directories for" field, select "Include files" and + create a new entry with the value "C:\projects\xerces-c-x.y.z\include". + + After that, in the "Show directories for" field, select "Library files" + and create a new entry with the value "C:\projects\xerces-c-x.y.z\lib". + + After that, in the "Show directories for" field, select "Executable files" + and create a new entry with the value "C:\projects\xerces-c-x.y.z\bin". + + For Visual Studio 2005 (8.0) and Visual Studio 2008 (9.0): + + In the Visual Studio IDE, select "Tools"/"Options"/"Projects and + Solution"/"VC++ Directories". + + Then, in the "Show directories for" field, select "Include files" and + create a new entry with the value "C:\projects\xerces-c-x.y.z\include". + + After that, in the "Show directories for" field, select "Library files" + and create a new entry with the value "C:\projects\xerces-c-x.y.z\lib". + + After that, in the "Show directories for" field, select "Executable files" + and create a new entry with the value "C:\projects\xerces-c-x.y.z\bin". + + If you are building the 64-bit version of your application, repeat the + above steps for the 64-bit version of Xerces-C++ while selecting x64 + in the "Platform" drop-down list in the VC++ Directories dialog (Visual + Studio keeps a separate set of paths for each platform). + + For Visual Studio 2010 (10.0): + + 1. Open an existing or create a new C++ project (you can open one of + the example solutions) + + 2. Open the Property Manager view by selecting "View"->"Property + Manager" (or "View"->"Other Windows"->"Property Manager") menu + action + + 3. Expand the property hierarchy for the project and find the + Microsoft.Cpp.Win32.user property sheet + + 4. Right click on Microsoft.Cpp.Win32.user and select the "Properties" + menu action + + 5. Select the VC++ Directories tab + + 6. Add the "C:\projects\xerces-c-x.y.z\include" path to the "Include + Directories" field (the paths are separated by a semicolon) + + 7. Add the "C:\projects\xerces-c-x.y.z\lib" path to the "Library + Directories" field + + 8. Add the "C:\projects\xerces-c-x.y.z\bin" path to the "Executable + Directories" field + + 9. Click Ok to close the dialog and then click the Save button at the + top of the Property Manager view to save Microsoft.Cpp.Win32.user + + If you are building the 64-bit version of your application, repeat + the above steps for the 64-bit version of Xerces-C++ but using the + Microsoft.Cpp.x64.user property sheet (Visual Studio keeps a separate + set of paths for each platform). + + + b) In the Control Panel, choose "System" and select the "Advanced" tab. + Click on the "Environment Variables" button. In the "System Variables" + list, select "Path" and add (via "Edit" button) the + ";C:\projects\xerces-c-x.y.z\bin" path at the end. + + +2. Setting up XSD + + Now you need to set up XSD executable and include search paths. Here we + assume that your XSD path is C:\projects\xsd-x.y.z. If you have XSD in + a different place, you will need to adjust the paths below accordingly. + + For Visual Studio .NET 2003 (7.1): + + In the Visual Studio IDE, select "Tools"/"Options"/"Projects"/"VC++ + Directories". + + Then, in the "Show directories for" field, select "Include files" and + create a new entry with the value "C:\projects\xsd-x.y.z\libxsd". + + After that, in the "Show directories for" field, select "Executable + files" and create a new entry with the value "C:\projects\xsd-x.y.z\bin". + Make sure it is the first line in the list of directories (use the + "Up" button to move the new entry up, if necessary). + + For Visual Studio 2005 (8.0) and Visual Studio 2008 (9.0): + + In the Visual Studio IDE, select "Tools"/"Options"/"Projects and + Solution"/"VC++ Directories". + + Then, in the "Show directories for" field, select "Include files" and + create a new entry with the value "C:\projects\xsd-x.y.z\libxsd". + + After that, in the "Show directories for" field, select "Executable + files" and create a new entry with the value "C:\projects\xsd-x.y.z\bin". + Make sure it is the first line in the list of directories (use the + "Up" button to move the new entry up, if necessary). + + If you are building the 64-bit version of your application, repeat the + above steps using the same paths while selecting x64 in the "Platform" + drop-down list in the VC++ Directories dialog (Visual Studio keeps a + separate set of paths for each platform). + + For Visual Studio 2010 (10.0): + + 1. Open an existing or create a new C++ project (you can open one of + the example solutions) + + 2. Open the Property Manager view by selecting "View"->"Property + Manager" (or "View"->"Other Windows"->"Property Manager") menu + action + + 3. Expand the property hierarchy for the project and find the + Microsoft.Cpp.Win32.user property sheet + + 4. Right click on Microsoft.Cpp.Win32.user and select the "Properties" + menu action + + 5. Select the VC++ Directories tab + + 6. Add the "C:\projects\xsd-x.y.z\libxsd" path to the "Include + Directories" field (the paths are separated by a semicolon) + + 7. Add the "C:\projects\xsd-x.y.z\bin" path to the "Executable + Directories" field and make sure it is the first path in the + the list of directories + + 8. Click Ok to close the dialog and then click the Save button at the + top of the Property Manager view to save Microsoft.Cpp.Win32.user + + If you are building the 64-bit version of your application, repeat the + above steps using the same paths but using the Microsoft.Cpp.x64.user + property sheet (Visual Studio keeps a separate set of paths for each + platform). + + +3. Restart the Visual Studio IDE. + + +Building Examples +----------------- + +Now you are ready to build examples. Simply open the solution file +found in the examples\cxx\tree and examples\cxx\parser directories. + +Some of the examples depend on additional third-party libraries or +show a specific feature of XSD and are not included in the solutions +above. They come with their individual solution files: + +examples/cxx/tree/embedded - example of schema embedding +examples/cxx/tree/custom - examples of type customization +examples/cxx/tree/custom/calendar - depends on the Boost date_time library +examples/cxx/tree/compression - depends on the zlib library +examples/cxx/tree/binary/boost - depends on the Boost serialization library +examples/cxx/tree/binary/cdr - depends on the ACE library +examples/cxx/tree/binary/xdr - requires a third-party XDR library +examples/cxx/tree/xpath - depends on the XQilla library (XPath 2) +examples/cxx/tree/dbxml - depends on the Berkeley DB XML library + + +Using XSD in Your Projects +-------------------------- + +For various ways to integrate the XSD compiler with the Visual Studio IDE +as well as other Visual Studio-specific topics, refer to the Using XSD with +Microsoft Visual Studio Wiki page: + +http://wiki.codesynthesis.com/Using_XSD_with_Microsoft_Visual_Studio diff --git a/xsd/dist/etc/vc-10.0/xsd-cxx-parser.props b/xsd/dist/etc/vc-10.0/xsd-cxx-parser.props new file mode 100644 index 0000000..b167a38 --- /dev/null +++ b/xsd/dist/etc/vc-10.0/xsd-cxx-parser.props @@ -0,0 +1,33 @@ +<?xml version="1.0" encoding="utf-8"?>
+<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <PropertyGroup
+ Condition="'$(CXX_Parser_Mapping_RuleBeforeTargets)' == '' and '$(CXX_Parser_Mapping_RuleAfterTargets)' == '' and '$(ConfigurationType)' != 'Makefile'">
+ <CXX_Parser_Mapping_RuleBeforeTargets>Midl</CXX_Parser_Mapping_RuleBeforeTargets>
+ <CXX_Parser_Mapping_RuleAfterTargets>CustomBuild</CXX_Parser_Mapping_RuleAfterTargets>
+ </PropertyGroup>
+ <PropertyGroup>
+ <CXX_Parser_Mapping_RuleDependsOn
+ Condition="'$(ConfigurationType)' != 'Makefile'">_SelectedFiles;$(CXX_Parser_Mapping_RuleDependsOn)</CXX_Parser_Mapping_RuleDependsOn>
+ </PropertyGroup>
+ <ItemDefinitionGroup>
+ <CXX_Parser_Mapping_Rule>
+ <ProprietaryLicense>False</ProprietaryLicense>
+ <GenInline>False</GenInline>
+ <GenValidation>False</GenValidation>
+ <SupValidation>False</SupValidation>
+ <GenPolymorphic>False</GenPolymorphic>
+ <OutDir>.</OutDir>
+ <HeaderSuffix>.hxx</HeaderSuffix>
+ <SourceSuffix>.cxx</SourceSuffix>
+ <InlineSuffix>.ixx</InlineSuffix>
+ <SkelFileSuffix>-pskel</SkelFileSuffix>
+ <SkelTypeSuffix>_pskel</SkelTypeSuffix>
+ <CharType>0</CharType>
+ <CharEncoding>0</CharEncoding>
+ <XMLParser>0</XMLParser>
+ <CommandLineTemplate>xsd.exe cxx-parser [AllOptions] [AdditionalOptions] [Inputs]</CommandLineTemplate>
+ <ExecutionDescription>xsd cxx-parser %(Identity)</ExecutionDescription>
+ <ShowOnlyRuleProperties>false</ShowOnlyRuleProperties>
+ </CXX_Parser_Mapping_Rule>
+ </ItemDefinitionGroup>
+</Project>
diff --git a/xsd/dist/etc/vc-10.0/xsd-cxx-parser.targets b/xsd/dist/etc/vc-10.0/xsd-cxx-parser.targets new file mode 100644 index 0000000..62ad2b2 --- /dev/null +++ b/xsd/dist/etc/vc-10.0/xsd-cxx-parser.targets @@ -0,0 +1,92 @@ +<?xml version="1.0" encoding="utf-8"?>
+<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <PropertyPageSchema
+ Include="$(MSBuildThisFileDirectory)$(MSBuildThisFileName).xml" />
+ <AvailableItemName
+ Include="CXX_Parser_Mapping_Rule">
+ <Targets>XsdCompile</Targets>
+ </AvailableItemName>
+ </ItemGroup>
+ <UsingTask
+ TaskName="CXX_Parser_Mapping_Rule"
+ TaskFactory="XamlTaskFactory"
+ AssemblyName="Microsoft.Build.Tasks.v4.0">
+ <Task>$(MSBuildThisFileDirectory)$(MSBuildThisFileName).xml</Task>
+ </UsingTask>
+ <Target
+ Name="XsdCompile"
+ BeforeTargets="$(CXX_Parser_Mapping_RuleBeforeTargets)"
+ AfterTargets="$(CXX_Parser_Mapping_RuleAfterTargets)"
+ Condition="'@(CXX_Parser_Mapping_Rule)' != ''"
+ DependsOnTargets="$(CXX_Parser_Mapping_RuleDependsOn);XsdOutputDir"
+ Outputs="%(CXX_Parser_Mapping_Rule.OutDir)\%(CXX_Parser_Mapping_Rule.Filename)%(CXX_Parser_Mapping_Rule.SkelFileSuffix)%(CXX_Parser_Mapping_Rule.HeaderSuffix);%(CXX_Parser_Mapping_Rule.OutDir)\%(CXX_Parser_Mapping_Rule.Filename)%(CXX_Parser_Mapping_Rule.SkelFileSuffix)%(CXX_Parser_Mapping_Rule.SourceSuffix)"
+ Inputs="%(CXX_Parser_Mapping_Rule.Identity);%(CXX_Parser_Mapping_Rule.AdditionalDependencies);$(MSBuildProjectFile)">
+ <ItemGroup
+ Condition="'@(SelectedFiles)' != ''">
+ <CXX_Parser_Mapping_Rule
+ Remove="@(CXX_Parser_Mapping_Rule)"
+ Condition="'%(Identity)' != '@(SelectedFiles)'" />
+ </ItemGroup>
+ <ItemGroup>
+ <CXX_Parser_Mapping_Rule_tlog
+ Include="%(CXX_Parser_Mapping_Rule.OutDir)\%(CXX_Parser_Mapping_Rule.Filename)%(CXX_Parser_Mapping_Rule.SkelFileSuffix)%(CXX_Parser_Mapping_Rule.HeaderSuffix);%(CXX_Parser_Mapping_Rule.OutDir)\%(CXX_Parser_Mapping_Rule.Filename)%(CXX_Parser_Mapping_Rule.SkelFileSuffix)%(CXX_Parser_Mapping_Rule.SourceSuffix)"
+ Condition="'%(CXX_Parser_Mapping_Rule.OutDir)\%(CXX_Parser_Mapping_Rule.Filename)%(CXX_Parser_Mapping_Rule.SkelFileSuffix)%(CXX_Parser_Mapping_Rule.HeaderSuffix);%(CXX_Parser_Mapping_Rule.OutDir)\%(CXX_Parser_Mapping_Rule.Filename)%(CXX_Parser_Mapping_Rule.SkelFileSuffix)%(CXX_Parser_Mapping_Rule.SourceSuffix)' != '' and '%(CXX_Parser_Mapping_Rule.ExcludedFromBuild)' != 'true'">
+ <Source>@(CXX_Parser_Mapping_Rule, '|')</Source>
+ </CXX_Parser_Mapping_Rule_tlog>
+ </ItemGroup>
+ <Message
+ Importance="High"
+ Text="%(CXX_Parser_Mapping_Rule.ExecutionDescription)" />
+ <WriteLinesToFile
+ Condition="'@(CXX_Parser_Mapping_Rule_tlog)' != '' and '%(CXX_Parser_Mapping_Rule_tlog.ExcludedFromBuild)' != 'true'"
+ File="$(IntDir)$(ProjectName).write.1.tlog"
+ Lines="^%(CXX_Parser_Mapping_Rule_tlog.Source);@(CXX_Parser_Mapping_Rule_tlog->'%(Fullpath)')" />
+ <CXX_Parser_Mapping_Rule
+ Condition="'@(CXX_Parser_Mapping_Rule)' != '' and '%(CXX_Parser_Mapping_Rule.ExcludedFromBuild)' != 'true'"
+ CommandLineTemplate="%(CXX_Parser_Mapping_Rule.CommandLineTemplate)"
+ ProprietaryLicense="%(CXX_Parser_Mapping_Rule.ProprietaryLicense)"
+ GenInline="%(CXX_Parser_Mapping_Rule.GenInline)"
+ GenValidation="%(CXX_Parser_Mapping_Rule.GenValidation)"
+ SupValidation="%(CXX_Parser_Mapping_Rule.SupValidation)"
+ GenPolymorphic="%(CXX_Parser_Mapping_Rule.GenPolymorphic)"
+ OutDir="%(CXX_Parser_Mapping_Rule.OutDir)"
+ HeaderSuffix="%(CXX_Parser_Mapping_Rule.HeaderSuffix)"
+ SourceSuffix="%(CXX_Parser_Mapping_Rule.SourceSuffix)"
+ InlineSuffix="%(CXX_Parser_Mapping_Rule.InlineSuffix)"
+ SkelFileSuffix="%(CXX_Parser_Mapping_Rule.SkelFileSuffix)"
+ NamespaceMap="%(CXX_Parser_Mapping_Rule.NamespaceMap)"
+ TypeMap="%(CXX_Parser_Mapping_Rule.TypeMap)"
+ SkelTypeSuffix="%(CXX_Parser_Mapping_Rule.SkelTypeSuffix)"
+ ExportSymbol="%(CXX_Parser_Mapping_Rule.ExportSymbol)"
+ HxxPrologue="%(CXX_Parser_Mapping_Rule.HxxPrologue)"
+ HxxEpilogue="%(CXX_Parser_Mapping_Rule.HxxEpilogue)"
+ CharType="%(CXX_Parser_Mapping_Rule.CharType)"
+ CharEncoding="%(CXX_Parser_Mapping_Rule.CharEncoding)"
+ XMLParser="%(CXX_Parser_Mapping_Rule.XMLParser)"
+ AdditionalOptions="%(CXX_Parser_Mapping_Rule.AdditionalOptions)"
+ Inputs="%(CXX_Parser_Mapping_Rule.Identity)" />
+ </Target>
+ <Target
+ Name="XsdClean"
+ BeforeTargets="CoreCppClean"
+ AfterTargets="_PrepareForClean"
+ Condition="'@(CXX_Parser_Mapping_Rule)' != ''">
+ <PropertyGroup>
+ <XsdCleanFilePatternsToDelete>@(CXX_Parser_Mapping_Rule->Metadata('OutDir')->Distinct())\@(CXX_Parser_Mapping_Rule->Metadata('Filename')->Distinct())@(CXX_Parser_Mapping_Rule->Metadata('SkelFileSuffix')->Distinct())@(CXX_Parser_Mapping_Rule->Metadata('HeaderSuffix')->Distinct());@(CXX_Parser_Mapping_Rule->Metadata('OutDir')->Distinct())\@(CXX_Parser_Mapping_Rule->Metadata('Filename')->Distinct())@(CXX_Parser_Mapping_Rule->Metadata('SkelFileSuffix')->Distinct())@(CXX_Parser_Mapping_Rule->Metadata('SourceSuffix')->Distinct());@(CXX_Parser_Mapping_Rule->Metadata('OutDir')->Distinct())\@(CXX_Parser_Mapping_Rule->Metadata('Filename')->Distinct())@(CXX_Parser_Mapping_Rule->Metadata('SkelFileSuffix')->Distinct())@(CXX_Parser_Mapping_Rule->Metadata('InlineSuffix')->Distinct());</XsdCleanFilePatternsToDelete>
+ </PropertyGroup>
+ <ItemGroup>
+ <CoreCppClean>
+ <FilePatternsToDelete
+ Condition="'%(CoreCppClean.FilePatternsToDelete)' != ''">%(CoreCppClean.FilePatternsToDelete);$(XsdCleanFilePatternsToDelete)</FilePatternsToDelete>
+ <FilePatternsToDelete
+ Condition="'%(CoreCppClean.FilePatternsToDelete)' == ''">$(XsdCleanFilePatternsToDelete)</FilePatternsToDelete>
+ </CoreCppClean>
+ </ItemGroup>
+ </Target>
+ <Target
+ Name="XsdOutputDir"
+ Condition="'@(CXX_Parser_Mapping_Rule)' != ''">
+ <MakeDir Directories="@(CXX_Parser_Mapping_Rule->Metadata('OutDir')->Distinct()->ClearMetadata())" />
+ </Target>
+</Project>
diff --git a/xsd/dist/etc/vc-10.0/xsd-cxx-parser.xml b/xsd/dist/etc/vc-10.0/xsd-cxx-parser.xml new file mode 100644 index 0000000..37202c6 --- /dev/null +++ b/xsd/dist/etc/vc-10.0/xsd-cxx-parser.xml @@ -0,0 +1,284 @@ +<?xml version="1.0" encoding="utf-8"?>
+<ProjectSchemaDefinitions xmlns="clr-namespace:Microsoft.Build.Framework.XamlTypes;assembly=Microsoft.Build.Framework" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:sys="clr-namespace:System;assembly=mscorlib" xmlns:transformCallback="Microsoft.Cpp.Dev10.ConvertPropertyCallback">
+ <Rule
+ Name="CXX_Parser_Mapping_Rule"
+ PageTemplate="tool"
+ DisplayName="C++/Parser Mapping"
+ Order="200">
+ <Rule.DataSource>
+ <DataSource
+ Persistence="ProjectFile"
+ ItemType="CXX_Parser_Mapping_Rule" />
+ </Rule.DataSource>
+ <Rule.Categories>
+ <Category
+ Name="General">
+ <Category.DisplayName>
+ <sys:String>General</sys:String>
+ </Category.DisplayName>
+ </Category>
+ <Category
+ Name="Command Line"
+ Subtype="CommandLine">
+ <Category.DisplayName>
+ <sys:String>Command Line</sys:String>
+ </Category.DisplayName>
+ </Category>
+ </Rule.Categories>
+ <StringListProperty
+ Name="Inputs"
+ Category="Command Line"
+ IsRequired="true"
+ Switch=" ">
+ <StringListProperty.DataSource>
+ <DataSource
+ Persistence="ProjectFile"
+ ItemType="CXX_Parser_Mapping_Rule"
+ SourceType="Item" />
+ </StringListProperty.DataSource>
+ </StringListProperty>
+ <BoolProperty
+ Name="ProprietaryLicense"
+ Subcategory="Licensing"
+ HelpContext="0"
+ DisplayName="Proprietary License"
+ Description="Indicate that the generated code is licensed under a proprietary license instead of the GPL."
+ Switch="--proprietary-license" />
+ <BoolProperty
+ Name="GenInline"
+ Category="Code Generation"
+ HelpContext="0"
+ DisplayName="Generate Inline"
+ Description="Generate simple functions inline. This option triggers creation of the inline file."
+ Switch="--generate-inline" />
+ <BoolProperty
+ Name="GenValidation"
+ Category="Code Generation"
+ HelpContext="0"
+ DisplayName="Generate Validation Code"
+ Description="Generate validation code which ensures that instance documents conform to the schema. This is the default for the Expat XML parser."
+ Switch="--generate-validation" />
+ <BoolProperty
+ Name="SupValidation"
+ Category="Code Generation"
+ HelpContext="0"
+ DisplayName="Suppress Validation Code"
+ Description="Suppress generation of validation code. This is the default for the Xerces-C++ XML parser."
+ Switch="--suppress-validation" />
+ <BoolProperty
+ Name="GenPolymorphic"
+ Category="Code Generation"
+ HelpContext="0"
+ DisplayName="Generate Polymorphic"
+ Description="Generate polymorphism-aware code. Specify this option if you use substitution groups or xsi:type."
+ Switch="--generate-polymorphic" />
+ <StringProperty
+ Name="OutDir"
+ Subcategory="Output"
+ HelpContext="0"
+ DisplayName="Output Directory"
+ Description="Output directory for the generated files"
+ Switch="--output-dir "[value]"" />
+ <StringProperty
+ Name="HeaderSuffix"
+ Subcategory="Output"
+ HelpContext="0"
+ DisplayName="C++ Header Suffix "
+ Description="Generated C++ header file suffix"
+ Switch="--hxx-suffix "[value]"" />
+ <StringProperty
+ Name="SourceSuffix"
+ Subcategory="Output"
+ HelpContext="0"
+ DisplayName="C++ Source Suffix"
+ Description="Generated C++ source file suffix"
+ Switch="--cxx-suffix "[value]"" />
+ <StringProperty
+ Name="InlineSuffix"
+ Subcategory="Output"
+ HelpContext="0"
+ DisplayName="C++ Inline Suffix"
+ Description="Generated C++ inline file suffix"
+ Switch="--ixx-suffix "[value]"" />
+ <StringProperty
+ Name="SkelFileSuffix"
+ Subcategory="Output"
+ HelpContext="0"
+ DisplayName="Parser Skeleton File Suffix"
+ Description="Use the provided suffix to construct the names of generated parser skeleton file."
+ Switch="--skel-file-suffix "[value]"" />
+ <StringListProperty
+ Name="NamespaceMap"
+ Category="Code Generation"
+ HelpContext="0"
+ DisplayName="Namespace Map"
+ Description="Map XML Schema namespaces to C++ namespaces by specifying a semicolon-separated list of mapping rules in the form <xml-ns>=<cxx-ns> where <xml-ns> stands for an XML Schema namespace and <cxx-ns> - for a C++ namespace."
+ Switch="--namespace-map "[value]"" />
+ <StringListProperty
+ Name="TypeMap"
+ Category="Code Generation"
+ HelpContext="0"
+ DisplayName="Type Map"
+ Description="Specify type map files as a semicolon-separated list."
+ Switch="--type-map "[value]"" />
+ <StringProperty
+ Name="SkelTypeSuffix"
+ Category="Code Generation"
+ HelpContext="0"
+ DisplayName="Parser Skeleton Type Suffix"
+ Description="Use the provided suffix to construct the names of generated parser skeletons."
+ Switch="--skel-type-suffix "[value]"" />
+ <StringListProperty
+ Name="ExportSymbol"
+ Category="Code Generation"
+ HelpContext="0"
+ DisplayName="Export Symbol"
+ Description="Insert the specified symbol in places where DLL export/import control statements (__declspec(dllexport/dllimport)) are necessary."
+ Switch="--export-symbol "[value]"" />
+ <StringListProperty
+ Name="HxxPrologue"
+ Category="Code Generation"
+ HelpContext="0"
+ DisplayName="Header Prologue File"
+ Description="Insert the contents of the file specified at the beginning of the header file."
+ Switch="--hxx-prologue-file "[value]"" />
+ <StringListProperty
+ Name="HxxEpilogue"
+ Category="Code Generation"
+ HelpContext="0"
+ DisplayName="Header Epilogue File"
+ Description="Insert the contents of the file specified at the end of the header file."
+ Switch="--hxx-epilogue-file "[value]"" />
+ <EnumProperty
+ Name="CharType"
+ Category="Code Generation"
+ HelpContext="0"
+ DisplayName="Char Type"
+ Description="Character type to be used in the generated code.">
+ <EnumValue
+ Name="0"
+ DisplayName="char" />
+ <EnumValue
+ Name="1"
+ DisplayName="wchar_t"
+ Switch="--char-type wchar_t" />
+ </EnumProperty>
+ <EnumProperty
+ Name="CharEncoding"
+ Category="Code Generation"
+ HelpContext="0"
+ DisplayName="Char Encoding"
+ Description="Character encoding to be used bu the generated code.">
+ <EnumValue
+ Name="0"
+ DisplayName="UTF-8 (char)/UTF-16 (wchar_t)" />
+ <EnumValue
+ Name="1"
+ DisplayName="ISO-8859-1"
+ Switch="--char-encoding iso8859-1" />
+ <EnumValue
+ Name="2"
+ DisplayName="Xerces-C++ local code page"
+ Switch="--char-encoding lcp" />
+ <EnumValue
+ Name="3"
+ DisplayName="Custom encoding"
+ Switch="--char-encoding custom" />
+ </EnumProperty>
+ <EnumProperty
+ Name="XMLParser"
+ Category="Code Generation"
+ HelpContext="0"
+ DisplayName="Underlying XML Parser"
+ Description="Use the specified parser as the underlying XML parser.">
+ <EnumValue
+ Name="0"
+ DisplayName="xerces" />
+ <EnumValue
+ Name="1"
+ DisplayName="expat"
+ Switch="--xml-parser expat" />
+ </EnumProperty>
+ <StringProperty
+ Name="CommandLineTemplate"
+ DisplayName="Command Line"
+ Visible="False"
+ IncludeInCommandLine="False" />
+ <DynamicEnumProperty
+ Name="CXX_Parser_Mapping_RuleBeforeTargets"
+ Category="General"
+ EnumProvider="Targets"
+ IncludeInCommandLine="False">
+ <DynamicEnumProperty.DisplayName>
+ <sys:String>Execute Before</sys:String>
+ </DynamicEnumProperty.DisplayName>
+ <DynamicEnumProperty.Description>
+ <sys:String>Specifies the targets for the build customization to run before.</sys:String>
+ </DynamicEnumProperty.Description>
+ <DynamicEnumProperty.ProviderSettings>
+ <NameValuePair
+ Name="Exclude"
+ Value="^CXX_Parser_Mapping_RuleBeforeTargets|^Compute" />
+ </DynamicEnumProperty.ProviderSettings>
+ <DynamicEnumProperty.DataSource>
+ <DataSource
+ Persistence="ProjectFile"
+ HasConfigurationCondition="true" />
+ </DynamicEnumProperty.DataSource>
+ </DynamicEnumProperty>
+ <DynamicEnumProperty
+ Name="CXX_Parser_Mapping_RuleAfterTargets"
+ Category="General"
+ EnumProvider="Targets"
+ IncludeInCommandLine="False">
+ <DynamicEnumProperty.DisplayName>
+ <sys:String>Execute After</sys:String>
+ </DynamicEnumProperty.DisplayName>
+ <DynamicEnumProperty.Description>
+ <sys:String>Specifies the targets for the build customization to run after.</sys:String>
+ </DynamicEnumProperty.Description>
+ <DynamicEnumProperty.ProviderSettings>
+ <NameValuePair
+ Name="Exclude"
+ Value="^CXX_Parser_Mapping_RuleAfterTargets|^Compute" />
+ </DynamicEnumProperty.ProviderSettings>
+ <DynamicEnumProperty.DataSource>
+ <DataSource
+ Persistence="ProjectFile"
+ ItemType=""
+ HasConfigurationCondition="true" />
+ </DynamicEnumProperty.DataSource>
+ </DynamicEnumProperty>
+ <StringProperty
+ Name="ExecutionDescription"
+ DisplayName="Execution Description"
+ Visible="False"
+ IncludeInCommandLine="False" />
+ <StringListProperty
+ Name="AdditionalDependencies"
+ DisplayName="Additional Dependencies"
+ IncludeInCommandLine="False"
+ Visible="true" />
+ <StringProperty
+ Subtype="AdditionalOptions"
+ Name="AdditionalOptions"
+ Category="Command Line">
+ <StringProperty.DisplayName>
+ <sys:String>Additional Options</sys:String>
+ </StringProperty.DisplayName>
+ <StringProperty.Description>
+ <sys:String>Additional Options</sys:String>
+ </StringProperty.Description>
+ </StringProperty>
+ </Rule>
+ <ItemType
+ Name="CXX_Parser_Mapping_Rule"
+ DisplayName="C++/Parser Mapping" />
+ <FileExtension
+ Name="*.xsd"
+ ContentType="CXX_Parser_Mapping_Rule" />
+ <ContentType
+ Name="CXX_Parser_Mapping_Rule"
+ DisplayName="C++/Parser Mapping"
+ ItemType="CXX_Parser_Mapping_Rule" />
+</ProjectSchemaDefinitions>
diff --git a/xsd/dist/etc/vc-10.0/xsd-cxx-tree.props b/xsd/dist/etc/vc-10.0/xsd-cxx-tree.props new file mode 100644 index 0000000..3d66166 --- /dev/null +++ b/xsd/dist/etc/vc-10.0/xsd-cxx-tree.props @@ -0,0 +1,45 @@ +<?xml version="1.0" encoding="utf-8"?>
+<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <PropertyGroup
+ Condition="'$(CXX_Tree_Mapping_RuleBeforeTargets)' == '' and '$(CXX_Tree_Mapping_RuleAfterTargets)' == '' and '$(ConfigurationType)' != 'Makefile'">
+ <CXX_Tree_Mapping_RuleBeforeTargets>Midl</CXX_Tree_Mapping_RuleBeforeTargets>
+ <CXX_Tree_Mapping_RuleAfterTargets>CustomBuild</CXX_Tree_Mapping_RuleAfterTargets>
+ </PropertyGroup>
+ <PropertyGroup>
+ <CXX_Tree_Mapping_RuleDependsOn
+ Condition="'$(ConfigurationType)' != 'Makefile'">_SelectedFiles;$(CXX_Tree_Mapping_RuleDependsOn)</CXX_Tree_Mapping_RuleDependsOn>
+ </PropertyGroup>
+ <ItemDefinitionGroup>
+ <CXX_Tree_Mapping_Rule>
+ <ProprietaryLicense>False</ProprietaryLicense>
+ <GenInline>False</GenInline>
+ <GenForward>False</GenForward>
+ <GenSerialization>False</GenSerialization>
+ <SupParsing>False</SupParsing>
+ <GenPolymorphic>False</GenPolymorphic>
+ <PolymorphicTypeAll>False</PolymorphicTypeAll>
+ <GenOstream>False</GenOstream>
+ <GenDoxygen>False</GenDoxygen>
+ <GenComparison>False</GenComparison>
+ <GenDefaultCtor>False</GenDefaultCtor>
+ <GenFromBaseCtor>False</GenFromBaseCtor>
+ <GenDetach>False</GenDetach>
+ <GenWildcard>False</GenWildcard>
+ <GenElementType>False</GenElementType>
+ <GenElementMap>False</GenElementMap>
+ <GenIntellisense>False</GenIntellisense>
+ <OutDir>.</OutDir>
+ <HeaderSuffix>.hxx</HeaderSuffix>
+ <SourceSuffix>.cxx</SourceSuffix>
+ <InlineSuffix>.ixx</InlineSuffix>
+ <ForwardSuffix>-fwd.hxx</ForwardSuffix>
+ <CharType>0</CharType>
+ <CharEncoding>0</CharEncoding>
+ <TypeNaming>0</TypeNaming>
+ <FunctionNaming>0</FunctionNaming>
+ <CommandLineTemplate>xsd.exe cxx-tree [AllOptions] [AdditionalOptions] [Inputs]</CommandLineTemplate>
+ <ExecutionDescription>xsd cxx-tree %(Identity)</ExecutionDescription>
+ <ShowOnlyRuleProperties>false</ShowOnlyRuleProperties>
+ </CXX_Tree_Mapping_Rule>
+ </ItemDefinitionGroup>
+</Project>
diff --git a/xsd/dist/etc/vc-10.0/xsd-cxx-tree.targets b/xsd/dist/etc/vc-10.0/xsd-cxx-tree.targets new file mode 100644 index 0000000..a65b559 --- /dev/null +++ b/xsd/dist/etc/vc-10.0/xsd-cxx-tree.targets @@ -0,0 +1,105 @@ +<?xml version="1.0" encoding="utf-8"?>
+<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <PropertyPageSchema
+ Include="$(MSBuildThisFileDirectory)$(MSBuildThisFileName).xml" />
+ <AvailableItemName
+ Include="CXX_Tree_Mapping_Rule">
+ <Targets>XsdCompile</Targets>
+ </AvailableItemName>
+ </ItemGroup>
+ <UsingTask
+ TaskName="CXX_Tree_Mapping_Rule"
+ TaskFactory="XamlTaskFactory"
+ AssemblyName="Microsoft.Build.Tasks.v4.0">
+ <Task>$(MSBuildThisFileDirectory)$(MSBuildThisFileName).xml</Task>
+ </UsingTask>
+ <Target
+ Name="XsdCompile"
+ BeforeTargets="$(CXX_Tree_Mapping_RuleBeforeTargets)"
+ AfterTargets="$(CXX_Tree_Mapping_RuleAfterTargets)"
+ Condition="'@(CXX_Tree_Mapping_Rule)' != ''"
+ DependsOnTargets="$(CXX_Tree_Mapping_RuleDependsOn);XsdOutputDir"
+ Outputs="%(CXX_Tree_Mapping_Rule.OutDir)\%(CXX_Tree_Mapping_Rule.Filename)%(CXX_Tree_Mapping_Rule.HeaderSuffix);%(CXX_Tree_Mapping_Rule.OutDir)\%(CXX_Tree_Mapping_Rule.Filename)%(CXX_Tree_Mapping_Rule.SourceSuffix)"
+ Inputs="%(CXX_Tree_Mapping_Rule.Identity);%(CXX_Tree_Mapping_Rule.AdditionalDependencies);$(MSBuildProjectFile)">
+ <ItemGroup
+ Condition="'@(SelectedFiles)' != ''">
+ <CXX_Tree_Mapping_Rule
+ Remove="@(CXX_Tree_Mapping_Rule)"
+ Condition="'%(Identity)' != '@(SelectedFiles)'" />
+ </ItemGroup>
+ <ItemGroup>
+ <CXX_Tree_Mapping_Rule_tlog
+ Include="%(CXX_Tree_Mapping_Rule.OutDir)\%(CXX_Tree_Mapping_Rule.Filename)%(CXX_Tree_Mapping_Rule.HeaderSuffix);%(CXX_Tree_Mapping_Rule.OutDir)\%(CXX_Tree_Mapping_Rule.Filename)%(CXX_Tree_Mapping_Rule.SourceSuffix)"
+ Condition="'%(CXX_Tree_Mapping_Rule.OutDir)\%(CXX_Tree_Mapping_Rule.Filename)%(CXX_Tree_Mapping_Rule.HeaderSuffix);%(CXX_Tree_Mapping_Rule.OutDir)\%(CXX_Tree_Mapping_Rule.Filename)%(CXX_Tree_Mapping_Rule.SourceSuffix)' != '' and '%(CXX_Tree_Mapping_Rule.ExcludedFromBuild)' != 'true'">
+ <Source>@(CXX_Tree_Mapping_Rule, '|')</Source>
+ </CXX_Tree_Mapping_Rule_tlog>
+ </ItemGroup>
+ <Message
+ Importance="High"
+ Text="%(CXX_Tree_Mapping_Rule.ExecutionDescription)" />
+ <WriteLinesToFile
+ Condition="'@(CXX_Tree_Mapping_Rule_tlog)' != '' and '%(CXX_Tree_Mapping_Rule_tlog.ExcludedFromBuild)' != 'true'"
+ File="$(IntDir)$(ProjectName).write.1.tlog"
+ Lines="^%(CXX_Tree_Mapping_Rule_tlog.Source);@(CXX_Tree_Mapping_Rule_tlog->'%(Fullpath)')" />
+ <CXX_Tree_Mapping_Rule
+ Condition="'@(CXX_Tree_Mapping_Rule)' != '' and '%(CXX_Tree_Mapping_Rule.ExcludedFromBuild)' != 'true'"
+ CommandLineTemplate="%(CXX_Tree_Mapping_Rule.CommandLineTemplate)"
+ ProprietaryLicense="%(CXX_Tree_Mapping_Rule.ProprietaryLicense)"
+ GenInline="%(CXX_Tree_Mapping_Rule.GenInline)"
+ GenForward="%(CXX_Tree_Mapping_Rule.GenForward)"
+ GenSerialization="%(CXX_Tree_Mapping_Rule.GenSerialization)"
+ SupParsing="%(CXX_Tree_Mapping_Rule.SupParsing)"
+ GenPolymorphic="%(CXX_Tree_Mapping_Rule.GenPolymorphic)"
+ PolymorphicTypeAll="%(CXX_Tree_Mapping_Rule.PolymorphicTypeAll)"
+ GenOstream="%(CXX_Tree_Mapping_Rule.GenOstream)"
+ GenDoxygen="%(CXX_Tree_Mapping_Rule.GenDoxygen)"
+ GenComparison="%(CXX_Tree_Mapping_Rule.GenComparison)"
+ GenDefaultCtor="%(CXX_Tree_Mapping_Rule.GenDefaultCtor)"
+ GenFromBaseCtor="%(CXX_Tree_Mapping_Rule.GenFromBaseCtor)"
+ GenDetach="%(CXX_Tree_Mapping_Rule.GenDetach)"
+ GenWildcard="%(CXX_Tree_Mapping_Rule.GenWildcard)"
+ GenElementType="%(CXX_Tree_Mapping_Rule.GenElementType)"
+ GenElementMap="%(CXX_Tree_Mapping_Rule.GenElementMap)"
+ GenIntellisense="%(CXX_Tree_Mapping_Rule.GenIntellisense)"
+ OutDir="%(CXX_Tree_Mapping_Rule.OutDir)"
+ HeaderSuffix="%(CXX_Tree_Mapping_Rule.HeaderSuffix)"
+ SourceSuffix="%(CXX_Tree_Mapping_Rule.SourceSuffix)"
+ InlineSuffix="%(CXX_Tree_Mapping_Rule.InlineSuffix)"
+ ForwardSuffix="%(CXX_Tree_Mapping_Rule.ForwardSuffix)"
+ NamespaceMap="%(CXX_Tree_Mapping_Rule.NamespaceMap)"
+ PolymorphicType="%(CXX_Tree_Mapping_Rule.PolymorphicType)"
+ RootElement="%(CXX_Tree_Mapping_Rule.RootElement)"
+ ExportSymbol="%(CXX_Tree_Mapping_Rule.ExportSymbol)"
+ HxxPrologue="%(CXX_Tree_Mapping_Rule.HxxPrologue)"
+ HxxEpilogue="%(CXX_Tree_Mapping_Rule.HxxEpilogue)"
+ CharType="%(CXX_Tree_Mapping_Rule.CharType)"
+ CharEncoding="%(CXX_Tree_Mapping_Rule.CharEncoding)"
+ TypeNaming="%(CXX_Tree_Mapping_Rule.TypeNaming)"
+ FunctionNaming="%(CXX_Tree_Mapping_Rule.FunctionNaming)"
+ AdditionalOptions="%(CXX_Tree_Mapping_Rule.AdditionalOptions)"
+ Inputs="%(CXX_Tree_Mapping_Rule.Identity)" />
+ </Target>
+ <Target
+ Name="XsdClean"
+ BeforeTargets="CoreCppClean"
+ AfterTargets="_PrepareForClean"
+ Condition="'@(CXX_Tree_Mapping_Rule)' != ''">
+ <PropertyGroup>
+ <XsdCleanFilePatternsToDelete>@(CXX_Tree_Mapping_Rule->Metadata('OutDir')->Distinct())\@(CXX_Tree_Mapping_Rule->Metadata('Filename')->Distinct())@(CXX_Tree_Mapping_Rule->Metadata('HeaderSuffix')->Distinct());@(CXX_Tree_Mapping_Rule->Metadata('OutDir')->Distinct())\@(CXX_Tree_Mapping_Rule->Metadata('Filename')->Distinct())@(CXX_Tree_Mapping_Rule->Metadata('SourceSuffix')->Distinct());@(CXX_Tree_Mapping_Rule->Metadata('OutDir')->Distinct())\@(CXX_Tree_Mapping_Rule->Metadata('Filename')->Distinct())@(CXX_Tree_Mapping_Rule->Metadata('InlineSuffix')->Distinct());@(CXX_Tree_Mapping_Rule->Metadata('OutDir')->Distinct())\@(CXX_Tree_Mapping_Rule->Metadata('Filename')->Distinct())@(CXX_Tree_Mapping_Rule->Metadata('ForwardSuffix')->Distinct())</XsdCleanFilePatternsToDelete>
+ </PropertyGroup>
+ <ItemGroup>
+ <CoreCppClean>
+ <FilePatternsToDelete
+ Condition="'%(CoreCppClean.FilePatternsToDelete)' != ''">%(CoreCppClean.FilePatternsToDelete);$(XsdCleanFilePatternsToDelete)</FilePatternsToDelete>
+ <FilePatternsToDelete
+ Condition="'%(CoreCppClean.FilePatternsToDelete)' == ''">$(XsdCleanFilePatternsToDelete)</FilePatternsToDelete>
+ </CoreCppClean>
+ </ItemGroup>
+ </Target>
+ <Target
+ Name="XsdOutputDir"
+ Condition="'@(CXX_Tree_Mapping_Rule)' != ''">
+ <MakeDir Directories="@(CXX_Tree_Mapping_Rule->Metadata('OutDir')->Distinct()->ClearMetadata())" />
+ </Target>
+</Project>
diff --git a/xsd/dist/etc/vc-10.0/xsd-cxx-tree.xml b/xsd/dist/etc/vc-10.0/xsd-cxx-tree.xml new file mode 100644 index 0000000..12393ee --- /dev/null +++ b/xsd/dist/etc/vc-10.0/xsd-cxx-tree.xml @@ -0,0 +1,390 @@ +<?xml version="1.0" encoding="utf-8"?>
+<ProjectSchemaDefinitions xmlns="clr-namespace:Microsoft.Build.Framework.XamlTypes;assembly=Microsoft.Build.Framework" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:sys="clr-namespace:System;assembly=mscorlib" xmlns:transformCallback="Microsoft.Cpp.Dev10.ConvertPropertyCallback">
+ <Rule
+ Name="CXX_Tree_Mapping_Rule"
+ PageTemplate="tool"
+ DisplayName="C++/Tree Mapping"
+ Order="200">
+ <Rule.DataSource>
+ <DataSource
+ Persistence="ProjectFile"
+ ItemType="CXX_Tree_Mapping_Rule" />
+ </Rule.DataSource>
+ <Rule.Categories>
+ <Category
+ Name="General">
+ <Category.DisplayName>
+ <sys:String>General</sys:String>
+ </Category.DisplayName>
+ </Category>
+ <Category
+ Name="Command Line"
+ Subtype="CommandLine">
+ <Category.DisplayName>
+ <sys:String>Command Line</sys:String>
+ </Category.DisplayName>
+ </Category>
+ </Rule.Categories>
+ <StringListProperty
+ Name="Inputs"
+ Category="Command Line"
+ IsRequired="true"
+ Switch=" ">
+ <StringListProperty.DataSource>
+ <DataSource
+ Persistence="ProjectFile"
+ ItemType="CXX_Tree_Mapping_Rule"
+ SourceType="Item" />
+ </StringListProperty.DataSource>
+ </StringListProperty>
+ <BoolProperty
+ Name="ProprietaryLicense"
+ Subcategory="Licensing"
+ HelpContext="0"
+ DisplayName="Proprietary License"
+ Description="Indicate that the generated code is licensed under a proprietary license instead of the GPL."
+ Switch="--proprietary-license" />
+ <BoolProperty
+ Name="GenInline"
+ Category="Code Generation"
+ HelpContext="0"
+ DisplayName="Generate Inline"
+ Description="Generate simple functions inline. This option triggers creation of the inline file."
+ Switch="--generate-inline" />
+ <BoolProperty
+ Name="GenForward"
+ Category="Code Generation"
+ HelpContext="0"
+ DisplayName="Generate Forward"
+ Description="Generate a separate header file with forward declarations for the types being generated."
+ Switch="--generate-forward" />
+ <BoolProperty
+ Name="GenSerialization"
+ Category="Code Generation"
+ HelpContext="0"
+ DisplayName="Generate Serialization"
+ Description="Generate serialization functions. Serialization functions convert the object model back to XML."
+ Switch="--generate-serialization" />
+ <BoolProperty
+ Name="SupParsing"
+ Category="Code Generation"
+ HelpContext="0"
+ DisplayName="Suppress Parsing"
+ Description="Suppress generation of the parsing functions and constructors."
+ Switch="--suppress-parsing" />
+ <BoolProperty
+ Name="GenPolymorphic"
+ Category="Code Generation"
+ HelpContext="0"
+ DisplayName="Generate Polymorphic"
+ Description="Generate polymorphism-aware code. Specify this option if you use substitution groups or xsi:type."
+ Switch="--generate-polymorphic" />
+ <BoolProperty
+ Name="PolymorphicTypeAll"
+ Category="Code Generation"
+ HelpContext="0"
+ DisplayName="All Types Polymorphic"
+ Description="Indicate that all types should be treated as polymorphic."
+ Switch="--polymorphic-type-all" />
+ <BoolProperty
+ Name="GenOstream"
+ Category="Code Generation"
+ HelpContext="0"
+ DisplayName="Generate Ostream"
+ Description="Generate ostream insertion operators for generated types. This allows to easily print a fragment or the whole object model for debugging or logging."
+ Switch="--generate-ostream" />
+ <BoolProperty
+ Name="GenDoxygen"
+ Category="Code Generation"
+ HelpContext="0"
+ DisplayName="Generate Doxygen"
+ Description="Generate documentation comments suitable for extraction by the Doxygen documentation system."
+ Switch="--generate-doxygen" />
+ <BoolProperty
+ Name="GenComparison"
+ Category="Code Generation"
+ HelpContext="0"
+ DisplayName="Generate Comparison"
+ Description="Generate comparison operators for complex types."
+ Switch="--generate-comparison" />
+ <BoolProperty
+ Name="GenDefaultCtor"
+ Category="Code Generation"
+ HelpContext="0"
+ DisplayName="Generate Default Constructors"
+ Description="Generate default constructors even for types that have required members."
+ Switch="--generate-default-ctor" />
+ <BoolProperty
+ Name="GenFromBaseCtor"
+ Category="Code Generation"
+ HelpContext="0"
+ DisplayName="Generate From-Base Constructors"
+ Description="Generate constructors that expect an instance of a base type followed by all required members."
+ Switch="--generate-from-base-ctor" />
+ <BoolProperty
+ Name="GenDetach"
+ Category="Code Generation"
+ HelpContext="0"
+ DisplayName="Generate Detach"
+ Description="Generate detach functions for required elements and attributes."
+ Switch="--generate-detach" />
+ <BoolProperty
+ Name="GenWildcard"
+ Category="Code Generation"
+ HelpContext="0"
+ DisplayName="Generate Wildcard"
+ Description="Generate accessors and modifiers as well as parsing and serialization code for XML Schema wildcards (any and anyAttribute)."
+ Switch="--generate-wildcard" />
+ <BoolProperty
+ Name="GenElementType"
+ Category="Code Generation"
+ HelpContext="0"
+ DisplayName="Generate Element Types"
+ Description="Generate types instead of parsing and serialization functions for root elements."
+ Switch="--generate-element-type" />
+ <BoolProperty
+ Name="GenElementMap"
+ Category="Code Generation"
+ HelpContext="0"
+ DisplayName="Generate Element Map"
+ Description="Generate a root element map that allows uniform parsing and serialization of multiple root elements."
+ Switch="--generate-element-map" />
+ <BoolProperty
+ Name="GenIntellisense"
+ Category="Code Generation"
+ HelpContext="0"
+ DisplayName="Generate IntelliSense"
+ Description="Generate workarounds for IntelliSense bugs in Visual Studio 2005 (8.0)."
+ Switch="--generate-intellisense" />
+ <StringProperty
+ Name="OutDir"
+ Subcategory="Output"
+ HelpContext="0"
+ DisplayName="Output Directory"
+ Description="Output directory for the generated files"
+ Switch="--output-dir "[value]"" />
+ <StringProperty
+ Name="HeaderSuffix"
+ Subcategory="Output"
+ HelpContext="0"
+ DisplayName="C++ Header Suffix "
+ Description="Generated C++ header file suffix"
+ Switch="--hxx-suffix "[value]"" />
+ <StringProperty
+ Name="SourceSuffix"
+ Subcategory="Output"
+ HelpContext="0"
+ DisplayName="C++ Source Suffix"
+ Description="Generated C++ source file suffix"
+ Switch="--cxx-suffix "[value]"" />
+ <StringProperty
+ Name="InlineSuffix"
+ Subcategory="Output"
+ HelpContext="0"
+ DisplayName="C++ Inline Suffix"
+ Description="Generated C++ inline file suffix"
+ Switch="--ixx-suffix "[value]"" />
+ <StringProperty
+ Name="ForwardSuffix"
+ Subcategory="Output"
+ HelpContext="0"
+ DisplayName="C++ Forward Declaration Suffix"
+ Description="Generated C++ forward declaration file suffix"
+ Switch="--fwd-suffix "[value]"" />
+ <StringListProperty
+ Name="NamespaceMap"
+ Category="Code Generation"
+ HelpContext="0"
+ DisplayName="Namespace Map"
+ Description="Map XML Schema namespaces to C++ namespaces by specifying a semicolon-separated list of mapping rules in the form <xml-ns>=<cxx-ns> where <xml-ns> stands for an XML Schema namespace and <cxx-ns> - for a C++ namespace."
+ Switch="--namespace-map "[value]"" />
+ <StringListProperty
+ Name="PolymorphicType"
+ Category="Code Generation"
+ HelpContext="0"
+ DisplayName="Polymorphic Types"
+ Description="Treat specified semicolon-separated list of types as roots of polymorphic type hierarchies."
+ Switch="--polymorphic-type "[value]"" />
+ <StringListProperty
+ Name="RootElement"
+ Category="Code Generation"
+ HelpContext="0"
+ DisplayName="Root Element"
+ Description="Treat only specified semicolon-separated list of elements as document roots."
+ Switch="--root-element "[value]"" />
+ <StringListProperty
+ Name="ExportSymbol"
+ Category="Code Generation"
+ HelpContext="0"
+ DisplayName="Export Symbol"
+ Description="Insert the specified symbol in places where DLL export/import control statements (__declspec(dllexport/dllimport)) are necessary."
+ Switch="--export-symbol "[value]"" />
+ <StringListProperty
+ Name="HxxPrologue"
+ Category="Code Generation"
+ HelpContext="0"
+ DisplayName="Header Prologue File"
+ Description="Insert the contents of the file specified at the beginning of the header file."
+ Switch="--hxx-prologue-file "[value]"" />
+ <StringListProperty
+ Name="HxxEpilogue"
+ Category="Code Generation"
+ HelpContext="0"
+ DisplayName="Header Epilogue File"
+ Description="Insert the contents of the file specified at the end of the header file."
+ Switch="--hxx-epilogue-file "[value]"" />
+ <EnumProperty
+ Name="CharType"
+ Category="Code Generation"
+ HelpContext="0"
+ DisplayName="Char Type"
+ Description="Character type to be used in the generated code.">
+ <EnumValue
+ Name="0"
+ DisplayName="char" />
+ <EnumValue
+ Name="1"
+ DisplayName="wchar_t"
+ Switch="--char-type wchar_t" />
+ </EnumProperty>
+ <EnumProperty
+ Name="CharEncoding"
+ Category="Code Generation"
+ HelpContext="0"
+ DisplayName="Char Encoding"
+ Description="Character encoding to be used bu the generated code.">
+ <EnumValue
+ Name="0"
+ DisplayName="UTF-8 (char)/UTF-16 (wchar_t)" />
+ <EnumValue
+ Name="1"
+ DisplayName="ISO-8859-1"
+ Switch="--char-encoding iso8859-1" />
+ <EnumValue
+ Name="2"
+ DisplayName="Xerces-C++ local code page"
+ Switch="--char-encoding lcp" />
+ <EnumValue
+ Name="3"
+ DisplayName="Custom encoding"
+ Switch="--char-encoding custom" />
+ </EnumProperty>
+ <EnumProperty
+ Name="TypeNaming"
+ Category="Code Generation"
+ HelpContext="0"
+ DisplayName="Type Naming"
+ Description="Specify the type naming convention that should be used in the generated code.">
+ <EnumValue
+ Name="0"
+ DisplayName="K&R" />
+ <EnumValue
+ Name="1"
+ DisplayName="Java"
+ Switch="--type-naming java" />
+ <EnumValue
+ Name="2"
+ DisplayName="Upper Camel Case"
+ Switch="--type-naming ucc" />
+ </EnumProperty>
+ <EnumProperty
+ Name="FunctionNaming"
+ Category="Code Generation"
+ HelpContext="0"
+ DisplayName="Function Naming"
+ Description="Specify the function naming convention that should be used in the generated code.">
+ <EnumValue
+ Name="0"
+ DisplayName="K&R" />
+ <EnumValue
+ Name="1"
+ DisplayName="Java"
+ Switch="--function-naming java" />
+ <EnumValue
+ Name="2"
+ DisplayName="Lower Camel Case"
+ Switch="--function-naming lcc" />
+ </EnumProperty>
+ <StringProperty
+ Name="CommandLineTemplate"
+ DisplayName="Command Line"
+ Visible="False"
+ IncludeInCommandLine="False" />
+ <DynamicEnumProperty
+ Name="CXX_Tree_Mapping_RuleBeforeTargets"
+ Category="General"
+ EnumProvider="Targets"
+ IncludeInCommandLine="False">
+ <DynamicEnumProperty.DisplayName>
+ <sys:String>Execute Before</sys:String>
+ </DynamicEnumProperty.DisplayName>
+ <DynamicEnumProperty.Description>
+ <sys:String>Specifies the targets for the build customization to run before.</sys:String>
+ </DynamicEnumProperty.Description>
+ <DynamicEnumProperty.ProviderSettings>
+ <NameValuePair
+ Name="Exclude"
+ Value="^CXX_Tree_Mapping_RuleBeforeTargets|^Compute" />
+ </DynamicEnumProperty.ProviderSettings>
+ <DynamicEnumProperty.DataSource>
+ <DataSource
+ Persistence="ProjectFile"
+ HasConfigurationCondition="true" />
+ </DynamicEnumProperty.DataSource>
+ </DynamicEnumProperty>
+ <DynamicEnumProperty
+ Name="CXX_Tree_Mapping_RuleAfterTargets"
+ Category="General"
+ EnumProvider="Targets"
+ IncludeInCommandLine="False">
+ <DynamicEnumProperty.DisplayName>
+ <sys:String>Execute After</sys:String>
+ </DynamicEnumProperty.DisplayName>
+ <DynamicEnumProperty.Description>
+ <sys:String>Specifies the targets for the build customization to run after.</sys:String>
+ </DynamicEnumProperty.Description>
+ <DynamicEnumProperty.ProviderSettings>
+ <NameValuePair
+ Name="Exclude"
+ Value="^CXX_Tree_Mapping_RuleAfterTargets|^Compute" />
+ </DynamicEnumProperty.ProviderSettings>
+ <DynamicEnumProperty.DataSource>
+ <DataSource
+ Persistence="ProjectFile"
+ ItemType=""
+ HasConfigurationCondition="true" />
+ </DynamicEnumProperty.DataSource>
+ </DynamicEnumProperty>
+ <StringProperty
+ Name="ExecutionDescription"
+ DisplayName="Execution Description"
+ Visible="False"
+ IncludeInCommandLine="False" />
+ <StringListProperty
+ Name="AdditionalDependencies"
+ DisplayName="Additional Dependencies"
+ IncludeInCommandLine="False"
+ Visible="true" />
+ <StringProperty
+ Subtype="AdditionalOptions"
+ Name="AdditionalOptions"
+ Category="Command Line">
+ <StringProperty.DisplayName>
+ <sys:String>Additional Options</sys:String>
+ </StringProperty.DisplayName>
+ <StringProperty.Description>
+ <sys:String>Additional Options</sys:String>
+ </StringProperty.Description>
+ </StringProperty>
+ </Rule>
+ <ItemType
+ Name="CXX_Tree_Mapping_Rule"
+ DisplayName="C++/Tree Mapping" />
+ <FileExtension
+ Name="*.xsd"
+ ContentType="CXX_Tree_Mapping_Rule" />
+ <ContentType
+ Name="CXX_Tree_Mapping_Rule"
+ DisplayName="C++/Tree Mapping"
+ ItemType="CXX_Tree_Mapping_Rule" />
+</ProjectSchemaDefinitions>
diff --git a/xsd/dist/etc/vc-8.0/xsd-cxx-parser.rules b/xsd/dist/etc/vc-8.0/xsd-cxx-parser.rules new file mode 100644 index 0000000..a94a3ea --- /dev/null +++ b/xsd/dist/etc/vc-8.0/xsd-cxx-parser.rules @@ -0,0 +1,206 @@ +<?xml version="1.0" encoding="utf-8"?>
+<VisualStudioToolFile
+ Name="CodeSynthesis XSD Compiler C++/Parser Mapping Rules"
+ Version="8.00"
+ >
+ <Rules>
+ <CustomBuildRule
+ Name="C++/Parser Mapping Rule"
+ DisplayName="C++/Parser Mapping Rule"
+ CommandLine="xsd.exe cxx-parser [AllOptions] [AdditionalOptions] [Inputs]"
+ Outputs="[$OutDir]\$(InputName)[$SkelFileSuffix][$HeaderSuffix];[$OutDir]\$(InputName)[$SkelFileSuffix][$SourceSuffix]"
+ FileExtensions="*.xsd"
+ ExecutionDescription="xsd cxx-parser [Inputs]"
+ ShowOnlyRuleProperties="false"
+ >
+ <Properties>
+ <StringProperty
+ Name="OutDir"
+ DisplayName="Output Directory"
+ Category="Output"
+ Description="Output directory for the generated files"
+ Switch="--output-dir [value]"
+ DefaultValue="."
+ />
+ <BooleanProperty
+ Name="ProprietaryLicense"
+ DisplayName="Proprietary License"
+ Category="Licensing"
+ Description="Indicate that the generated code is licensed under a proprietary license instead of the GPL."
+ Switch="--proprietary-license"
+ />
+ <StringProperty
+ Name="HeaderSuffix"
+ DisplayName="C++ Header Suffix "
+ Category="Output"
+ Description="Generated C++ header file suffix"
+ Switch="--hxx-suffix [value]"
+ DefaultValue=".hxx"
+ />
+ <StringProperty
+ Name="SourceSuffix"
+ DisplayName="C++ Source Suffix"
+ Category="Output"
+ Description="Generated C++ source file suffix"
+ Switch="--cxx-suffix [value]"
+ DefaultValue=".cxx"
+ />
+ <StringProperty
+ Name="InlineSuffix"
+ DisplayName="C++ Inline Suffix"
+ Category="Output"
+ Description="Generated C++ inline file suffix"
+ Switch="--ixx-suffix [value]"
+ DefaultValue=".ixx"
+ />
+ <StringProperty
+ Name="SkelFileSuffix"
+ DisplayName="Parser Skeleton File Suffix"
+ PropertyPageName="Output"
+ Description="Use the provided suffix to construct the names of generated parser skeleton file."
+ Switch="--skel-file-suffix [value]"
+ DefaultValue="-pskel"
+ />
+ <EnumProperty
+ Name="CharType"
+ DisplayName="Char Type"
+ PropertyPageName="Code Generation"
+ Description="Character type to be used in the generated code."
+ >
+ <Values>
+ <EnumValue
+ Value="0"
+ DisplayName="char"
+ />
+ <EnumValue
+ Value="1"
+ Switch="--char-type wchar_t"
+ DisplayName="wchar_t"
+ />
+ </Values>
+ </EnumProperty>
+ <EnumProperty
+ Name="CharEncoding"
+ DisplayName="Char Encoding"
+ PropertyPageName="Code Generation"
+ Description="Character encoding to be used bu the generated code."
+ >
+ <Values>
+ <EnumValue
+ Value="0"
+ DisplayName="UTF-8 (char)/UTF-16 (wchar_t)"
+ />
+ <EnumValue
+ Value="1"
+ Switch="--char-encoding iso8859-1"
+ DisplayName="ISO-8859-1"
+ />
+ <EnumValue
+ Value="2"
+ Switch="--char-encoding lcp"
+ DisplayName="Xerces-C++ local code page"
+ />
+ <EnumValue
+ Value="3"
+ Switch="--char-encoding custom"
+ DisplayName="Custom encoding"
+ />
+ </Values>
+ </EnumProperty>
+ <EnumProperty
+ Name="XMLParser"
+ DisplayName="Underlying XML Parser"
+ PropertyPageName="Code Generation"
+ Description="Use the specified parser as the underlying XML parser."
+ >
+ <Values>
+ <EnumValue
+ Value="0"
+ DisplayName="xerces"
+ />
+ <EnumValue
+ Value="1"
+ Switch="--xml-parser expat"
+ DisplayName="expat"
+ />
+ </Values>
+ </EnumProperty>
+ <StringProperty
+ Name="NamespaceMap"
+ DisplayName="Namespace Map"
+ PropertyPageName="Code Generation"
+ Description="Map XML Schema namespaces to C++ namespaces by specifying a comma-separated list of mapping rules in the form <xml-ns>=<cxx-ns> where <xml-ns> stands for an XML Schema namespace and <cxx-ns> - for a C++ namespace."
+ Switch="--namespace-map [value]"
+ Delimited="true"
+ Delimiters=","
+ />
+ <StringProperty
+ Name="TypeMap"
+ DisplayName="Type Map"
+ PropertyPageName="Code Generation"
+ Description="Specify type map files as a comma-separated list."
+ Switch="--type-map [value]"
+ Delimited="true"
+ Delimiters=","
+ />
+ <BooleanProperty
+ Name="GenInline"
+ DisplayName="Generate Inline"
+ PropertyPageName="Code Generation"
+ Description="Generate simple functions inline. This option triggers creation of the inline file."
+ Switch="--generate-inline"
+ />
+ <BooleanProperty
+ Name="GenValidation"
+ DisplayName="Generate Validation Code"
+ PropertyPageName="Code Generation"
+ Description="Generate validation code which ensures that instance documents conform to the schema. This is the default for the Expat XML parser."
+ Switch="--generate-validation"
+ />
+ <BooleanProperty
+ Name="SupValidation"
+ DisplayName="Suppress Validation Code"
+ PropertyPageName="Code Generation"
+ Description="Suppress generation of validation code. This is the default for the Xerces-C++ XML parser."
+ Switch="--suppress-validation"
+ />
+ <BooleanProperty
+ Name="GenPolymorphic"
+ DisplayName="Generate Polymorphic"
+ PropertyPageName="Code Generation"
+ Description="Generate polymorphism-aware code. Specify this option if you use substitution groups or xsi:type."
+ Switch="--generate-polymorphic"
+ />
+ <StringProperty
+ Name="SkelTypeSuffix"
+ DisplayName="Parser Skeleton Type Suffix"
+ PropertyPageName="Code Generation"
+ Description="Use the provided suffix to construct the names of generated parser skeletons."
+ Switch="--skel-type-suffix [value]"
+ DefaultValue="_pskel"
+ />
+ <StringProperty
+ Name="ExportSymbol"
+ DisplayName="Export Symbol"
+ PropertyPageName="Code Generation"
+ Description="Insert the specified symbol in places where DLL export/import control statements (__declspec(dllexport/dllimport)) are necessary."
+ Switch="--export-symbol [value]"
+ />
+ <StringProperty
+ Name="HxxPrologue"
+ DisplayName="Header Prologue File"
+ PropertyPageName="Code Generation"
+ Description="Insert the contents of the file specified at the beginning of the header file."
+ Switch="--hxx-prologue-file [value]"
+ />
+ <StringProperty
+ Name="HxxEpilogue"
+ DisplayName="Header Epilogue File"
+ PropertyPageName="Code Generation"
+ Description="Insert the contents of the file specified at the end of the header file."
+ Switch="--hxx-epilogue-file [value]"
+ />
+ </Properties>
+ </CustomBuildRule>
+ </Rules>
+</VisualStudioToolFile>
diff --git a/xsd/dist/etc/vc-8.0/xsd-cxx-tree.rules b/xsd/dist/etc/vc-8.0/xsd-cxx-tree.rules new file mode 100644 index 0000000..b3e921a --- /dev/null +++ b/xsd/dist/etc/vc-8.0/xsd-cxx-tree.rules @@ -0,0 +1,320 @@ +<?xml version="1.0" encoding="utf-8"?>
+<VisualStudioToolFile
+ Name="CodeSynthesis XSD Compiler C++/Tree Mapping Rules"
+ Version="8.00"
+ >
+ <Rules>
+ <CustomBuildRule
+ Name="C++/Tree Mapping Rule"
+ DisplayName="C++/Tree Mapping Rule"
+ CommandLine="xsd.exe cxx-tree [AllOptions] [AdditionalOptions] [Inputs]"
+ Outputs="[$OutDir]\$(InputName)[$HeaderSuffix];[$OutDir]\$(InputName)[$SourceSuffix]"
+ FileExtensions="*.xsd"
+ ExecutionDescription="xsd cxx-tree [Inputs]"
+ ShowOnlyRuleProperties="false"
+ >
+ <Properties>
+ <StringProperty
+ Name="OutDir"
+ DisplayName="Output Directory"
+ Category="Output"
+ Description="Output directory for the generated files"
+ Switch="--output-dir [value]"
+ DefaultValue="."
+ />
+ <BooleanProperty
+ Name="ProprietaryLicense"
+ DisplayName="Proprietary License"
+ Category="Licensing"
+ Description="Indicate that the generated code is licensed under a proprietary license instead of the GPL."
+ Switch="--proprietary-license"
+ />
+ <StringProperty
+ Name="HeaderSuffix"
+ DisplayName="C++ Header Suffix "
+ Category="Output"
+ Description="Generated C++ header file suffix"
+ Switch="--hxx-suffix [value]"
+ DefaultValue=".hxx"
+ />
+ <StringProperty
+ Name="SourceSuffix"
+ DisplayName="C++ Source Suffix"
+ Category="Output"
+ Description="Generated C++ source file suffix"
+ Switch="--cxx-suffix [value]"
+ DefaultValue=".cxx"
+ />
+ <StringProperty
+ Name="InlineSuffix"
+ DisplayName="C++ Inline Suffix"
+ Category="Output"
+ Description="Generated C++ inline file suffix"
+ Switch="--ixx-suffix [value]"
+ DefaultValue=".ixx"
+ />
+ <StringProperty
+ Name="ForwardSuffix"
+ DisplayName="C++ Forward Declaration Suffix"
+ Category="Output"
+ Description="Generated C++ forward declaration file suffix"
+ Switch="--fwd-suffix [value]"
+ DefaultValue="-fwd.hxx"
+ />
+ <EnumProperty
+ Name="CharType"
+ DisplayName="Char Type"
+ PropertyPageName="Code Generation"
+ Description="Character type to be used in the generated code."
+ >
+ <Values>
+ <EnumValue
+ Value="0"
+ DisplayName="char"
+ />
+ <EnumValue
+ Value="1"
+ Switch="--char-type wchar_t"
+ DisplayName="wchar_t"
+ />
+ </Values>
+ </EnumProperty>
+ <EnumProperty
+ Name="CharEncoding"
+ DisplayName="Char Encoding"
+ PropertyPageName="Code Generation"
+ Description="Character encoding to be used bu the generated code."
+ >
+ <Values>
+ <EnumValue
+ Value="0"
+ DisplayName="UTF-8 (char)/UTF-16 (wchar_t)"
+ />
+ <EnumValue
+ Value="1"
+ Switch="--char-encoding iso8859-1"
+ DisplayName="ISO-8859-1"
+ />
+ <EnumValue
+ Value="2"
+ Switch="--char-encoding lcp"
+ DisplayName="Xerces-C++ local code page"
+ />
+ <EnumValue
+ Value="3"
+ Switch="--char-encoding custom"
+ DisplayName="Custom encoding"
+ />
+ </Values>
+ </EnumProperty>
+ <StringProperty
+ Name="NamespaceMap"
+ DisplayName="Namespace Map"
+ PropertyPageName="Code Generation"
+ Description="Map XML Schema namespaces to C++ namespaces by specifying a comma-separated list of mapping rules in the form <xml-ns>=<cxx-ns> where <xml-ns> stands for an XML Schema namespace and <cxx-ns> - for a C++ namespace."
+ Switch="--namespace-map [value]"
+ Delimited="true"
+ Delimiters=","
+ />
+ <BooleanProperty
+ Name="GenInline"
+ DisplayName="Generate Inline"
+ PropertyPageName="Code Generation"
+ Description="Generate simple functions inline. This option triggers creation of the inline file."
+ Switch="--generate-inline"
+ />
+ <BooleanProperty
+ Name="GenForward"
+ DisplayName="Generate Forward"
+ PropertyPageName="Code Generation"
+ Description="Generate a separate header file with forward declarations for the types being generated."
+ Switch="--generate-forward"
+ />
+ <BooleanProperty
+ Name="GenSerialization"
+ DisplayName="Generate Serialization"
+ PropertyPageName="Code Generation"
+ Description="Generate serialization functions. Serialization functions convert the object model back to XML."
+ Switch="--generate-serialization"
+ />
+ <BooleanProperty
+ Name="SupParsing"
+ DisplayName="Suppress Parsing"
+ PropertyPageName="Code Generation"
+ Description="Suppress generation of the parsing functions and constructors."
+ Switch="--suppress-parsing"
+ />
+ <BooleanProperty
+ Name="GenPolymorphic"
+ DisplayName="Generate Polymorphic"
+ PropertyPageName="Code Generation"
+ Description="Generate polymorphism-aware code. Specify this option if you use substitution groups or xsi:type."
+ Switch="--generate-polymorphic"
+ />
+ <StringProperty
+ Name="PolymorphicType"
+ DisplayName="Polymorphic Types"
+ PropertyPageName="Code Generation"
+ Description="Treat specified comma-separated list of types as roots of polymorphic type hierarchies."
+ Switch="--polymorphic-type [value]"
+ Delimited="true"
+ Delimiters=","
+ />
+ <BooleanProperty
+ Name="PolymorphicTypeAll"
+ DisplayName="All Types Polymorphic"
+ PropertyPageName="Code Generation"
+ Description="Indicate that all types should be treated as polymorphic."
+ Switch="--polymorphic-type-all"
+ />
+ <BooleanProperty
+ Name="GenOstream"
+ DisplayName="Generate Ostream"
+ PropertyPageName="Code Generation"
+ Description="Generate ostream insertion operators for generated types. This allows to easily print a fragment or the whole object model for debugging or logging."
+ Switch="--generate-ostream"
+ />
+ <BooleanProperty
+ Name="GenDoxygen"
+ DisplayName="Generate Doxygen"
+ PropertyPageName="Code Generation"
+ Description="Generate documentation comments suitable for extraction by the Doxygen documentation system."
+ Switch="--generate-doxygen"
+ />
+ <BooleanProperty
+ Name="GenComparison"
+ DisplayName="Generate Comparison"
+ PropertyPageName="Code Generation"
+ Description="Generate comparison operators for complex types."
+ Switch="--generate-comparison"
+ />
+ <BooleanProperty
+ Name="GenDefaultCtor"
+ DisplayName="Generate Default Constructors"
+ PropertyPageName="Code Generation"
+ Description="Generate default constructors even for types that have required members."
+ Switch="--generate-default-ctor"
+ />
+ <BooleanProperty
+ Name="GenFromBaseCtor"
+ DisplayName="Generate From-Base Constructors"
+ PropertyPageName="Code Generation"
+ Description="Generate constructors that expect an instance of a base type followed by all required members."
+ Switch="--generate-from-base-ctor"
+ />
+ <BooleanProperty
+ Name="GenDetach"
+ DisplayName="Generate Detach"
+ PropertyPageName="Code Generation"
+ Description="Generate detach functions for required elements and attributes."
+ Switch="--generate-detach"
+ />
+ <BooleanProperty
+ Name="GenWildcard"
+ DisplayName="Generate Wildcard"
+ PropertyPageName="Code Generation"
+ Description="Generate accessors and modifiers as well as parsing and serialization code for XML Schema wildcards (any and anyAttribute)."
+ Switch="--generate-wildcard"
+ />
+ <BooleanProperty
+ Name="GenElementType"
+ DisplayName="Generate Element Types"
+ PropertyPageName="Code Generation"
+ Description="Generate types instead of parsing and serialization functions for root elements."
+ Switch="--generate-element-type"
+ />
+ <BooleanProperty
+ Name="GenElementMap"
+ DisplayName="Generate Element Map"
+ PropertyPageName="Code Generation"
+ Description="Generate a root element map that allows uniform parsing and serialization of multiple root elements."
+ Switch="--generate-element-map"
+ />
+ <BooleanProperty
+ Name="GenIntellisense"
+ DisplayName="Generate IntelliSense"
+ PropertyPageName="Code Generation"
+ Description="Generate workarounds for IntelliSense bugs in Visual Studio 2005 (8.0)."
+ Switch="--generate-intellisense"
+ DefaultValue="true"
+ />
+ <EnumProperty
+ Name="TypeNaming"
+ DisplayName="Type Naming"
+ PropertyPageName="Code Generation"
+ Description="Specify the type naming convention that should be used in the generated code."
+ >
+ <Values>
+ <EnumValue
+ Value="0"
+ DisplayName="K&R"
+ />
+ <EnumValue
+ Value="1"
+ Switch="--type-naming java"
+ DisplayName="Java"
+ />
+ <EnumValue
+ Value="2"
+ Switch="--type-naming ucc"
+ DisplayName="Upper Camel Case"
+ />
+ </Values>
+ </EnumProperty>
+ <EnumProperty
+ Name="FunctionNaming"
+ DisplayName="Function Naming"
+ PropertyPageName="Code Generation"
+ Description="Specify the function naming convention that should be used in the generated code."
+ >
+ <Values>
+ <EnumValue
+ Value="0"
+ DisplayName="K&R"
+ />
+ <EnumValue
+ Value="1"
+ Switch="--function-naming java"
+ DisplayName="Java"
+ />
+ <EnumValue
+ Value="2"
+ Switch="--function-naming lcc"
+ DisplayName="Lower Camel Case"
+ />
+ </Values>
+ </EnumProperty>
+ <StringProperty
+ Name="RootElement"
+ DisplayName="Root Element"
+ PropertyPageName="Code Generation"
+ Description="Treat only specified comma-separated list of elements as document roots."
+ Switch="--root-element [value]"
+ Delimited="true"
+ Delimiters=","
+ />
+ <StringProperty
+ Name="ExportSymbol"
+ DisplayName="Export Symbol"
+ PropertyPageName="Code Generation"
+ Description="Insert the specified symbol in places where DLL export/import control statements (__declspec(dllexport/dllimport)) are necessary."
+ Switch="--export-symbol [value]"
+ />
+ <StringProperty
+ Name="HxxPrologue"
+ DisplayName="Header Prologue File"
+ PropertyPageName="Code Generation"
+ Description="Insert the contents of the file specified at the beginning of the header file."
+ Switch="--hxx-prologue-file [value]"
+ />
+ <StringProperty
+ Name="HxxEpilogue"
+ DisplayName="Header Epilogue File"
+ PropertyPageName="Code Generation"
+ Description="Insert the contents of the file specified at the end of the header file."
+ Switch="--hxx-epilogue-file [value]"
+ />
+ </Properties>
+ </CustomBuildRule>
+ </Rules>
+</VisualStudioToolFile>
diff --git a/xsd/dist/etc/vc-9.0/xsd-cxx-parser.rules b/xsd/dist/etc/vc-9.0/xsd-cxx-parser.rules new file mode 100644 index 0000000..a94a3ea --- /dev/null +++ b/xsd/dist/etc/vc-9.0/xsd-cxx-parser.rules @@ -0,0 +1,206 @@ +<?xml version="1.0" encoding="utf-8"?>
+<VisualStudioToolFile
+ Name="CodeSynthesis XSD Compiler C++/Parser Mapping Rules"
+ Version="8.00"
+ >
+ <Rules>
+ <CustomBuildRule
+ Name="C++/Parser Mapping Rule"
+ DisplayName="C++/Parser Mapping Rule"
+ CommandLine="xsd.exe cxx-parser [AllOptions] [AdditionalOptions] [Inputs]"
+ Outputs="[$OutDir]\$(InputName)[$SkelFileSuffix][$HeaderSuffix];[$OutDir]\$(InputName)[$SkelFileSuffix][$SourceSuffix]"
+ FileExtensions="*.xsd"
+ ExecutionDescription="xsd cxx-parser [Inputs]"
+ ShowOnlyRuleProperties="false"
+ >
+ <Properties>
+ <StringProperty
+ Name="OutDir"
+ DisplayName="Output Directory"
+ Category="Output"
+ Description="Output directory for the generated files"
+ Switch="--output-dir [value]"
+ DefaultValue="."
+ />
+ <BooleanProperty
+ Name="ProprietaryLicense"
+ DisplayName="Proprietary License"
+ Category="Licensing"
+ Description="Indicate that the generated code is licensed under a proprietary license instead of the GPL."
+ Switch="--proprietary-license"
+ />
+ <StringProperty
+ Name="HeaderSuffix"
+ DisplayName="C++ Header Suffix "
+ Category="Output"
+ Description="Generated C++ header file suffix"
+ Switch="--hxx-suffix [value]"
+ DefaultValue=".hxx"
+ />
+ <StringProperty
+ Name="SourceSuffix"
+ DisplayName="C++ Source Suffix"
+ Category="Output"
+ Description="Generated C++ source file suffix"
+ Switch="--cxx-suffix [value]"
+ DefaultValue=".cxx"
+ />
+ <StringProperty
+ Name="InlineSuffix"
+ DisplayName="C++ Inline Suffix"
+ Category="Output"
+ Description="Generated C++ inline file suffix"
+ Switch="--ixx-suffix [value]"
+ DefaultValue=".ixx"
+ />
+ <StringProperty
+ Name="SkelFileSuffix"
+ DisplayName="Parser Skeleton File Suffix"
+ PropertyPageName="Output"
+ Description="Use the provided suffix to construct the names of generated parser skeleton file."
+ Switch="--skel-file-suffix [value]"
+ DefaultValue="-pskel"
+ />
+ <EnumProperty
+ Name="CharType"
+ DisplayName="Char Type"
+ PropertyPageName="Code Generation"
+ Description="Character type to be used in the generated code."
+ >
+ <Values>
+ <EnumValue
+ Value="0"
+ DisplayName="char"
+ />
+ <EnumValue
+ Value="1"
+ Switch="--char-type wchar_t"
+ DisplayName="wchar_t"
+ />
+ </Values>
+ </EnumProperty>
+ <EnumProperty
+ Name="CharEncoding"
+ DisplayName="Char Encoding"
+ PropertyPageName="Code Generation"
+ Description="Character encoding to be used bu the generated code."
+ >
+ <Values>
+ <EnumValue
+ Value="0"
+ DisplayName="UTF-8 (char)/UTF-16 (wchar_t)"
+ />
+ <EnumValue
+ Value="1"
+ Switch="--char-encoding iso8859-1"
+ DisplayName="ISO-8859-1"
+ />
+ <EnumValue
+ Value="2"
+ Switch="--char-encoding lcp"
+ DisplayName="Xerces-C++ local code page"
+ />
+ <EnumValue
+ Value="3"
+ Switch="--char-encoding custom"
+ DisplayName="Custom encoding"
+ />
+ </Values>
+ </EnumProperty>
+ <EnumProperty
+ Name="XMLParser"
+ DisplayName="Underlying XML Parser"
+ PropertyPageName="Code Generation"
+ Description="Use the specified parser as the underlying XML parser."
+ >
+ <Values>
+ <EnumValue
+ Value="0"
+ DisplayName="xerces"
+ />
+ <EnumValue
+ Value="1"
+ Switch="--xml-parser expat"
+ DisplayName="expat"
+ />
+ </Values>
+ </EnumProperty>
+ <StringProperty
+ Name="NamespaceMap"
+ DisplayName="Namespace Map"
+ PropertyPageName="Code Generation"
+ Description="Map XML Schema namespaces to C++ namespaces by specifying a comma-separated list of mapping rules in the form <xml-ns>=<cxx-ns> where <xml-ns> stands for an XML Schema namespace and <cxx-ns> - for a C++ namespace."
+ Switch="--namespace-map [value]"
+ Delimited="true"
+ Delimiters=","
+ />
+ <StringProperty
+ Name="TypeMap"
+ DisplayName="Type Map"
+ PropertyPageName="Code Generation"
+ Description="Specify type map files as a comma-separated list."
+ Switch="--type-map [value]"
+ Delimited="true"
+ Delimiters=","
+ />
+ <BooleanProperty
+ Name="GenInline"
+ DisplayName="Generate Inline"
+ PropertyPageName="Code Generation"
+ Description="Generate simple functions inline. This option triggers creation of the inline file."
+ Switch="--generate-inline"
+ />
+ <BooleanProperty
+ Name="GenValidation"
+ DisplayName="Generate Validation Code"
+ PropertyPageName="Code Generation"
+ Description="Generate validation code which ensures that instance documents conform to the schema. This is the default for the Expat XML parser."
+ Switch="--generate-validation"
+ />
+ <BooleanProperty
+ Name="SupValidation"
+ DisplayName="Suppress Validation Code"
+ PropertyPageName="Code Generation"
+ Description="Suppress generation of validation code. This is the default for the Xerces-C++ XML parser."
+ Switch="--suppress-validation"
+ />
+ <BooleanProperty
+ Name="GenPolymorphic"
+ DisplayName="Generate Polymorphic"
+ PropertyPageName="Code Generation"
+ Description="Generate polymorphism-aware code. Specify this option if you use substitution groups or xsi:type."
+ Switch="--generate-polymorphic"
+ />
+ <StringProperty
+ Name="SkelTypeSuffix"
+ DisplayName="Parser Skeleton Type Suffix"
+ PropertyPageName="Code Generation"
+ Description="Use the provided suffix to construct the names of generated parser skeletons."
+ Switch="--skel-type-suffix [value]"
+ DefaultValue="_pskel"
+ />
+ <StringProperty
+ Name="ExportSymbol"
+ DisplayName="Export Symbol"
+ PropertyPageName="Code Generation"
+ Description="Insert the specified symbol in places where DLL export/import control statements (__declspec(dllexport/dllimport)) are necessary."
+ Switch="--export-symbol [value]"
+ />
+ <StringProperty
+ Name="HxxPrologue"
+ DisplayName="Header Prologue File"
+ PropertyPageName="Code Generation"
+ Description="Insert the contents of the file specified at the beginning of the header file."
+ Switch="--hxx-prologue-file [value]"
+ />
+ <StringProperty
+ Name="HxxEpilogue"
+ DisplayName="Header Epilogue File"
+ PropertyPageName="Code Generation"
+ Description="Insert the contents of the file specified at the end of the header file."
+ Switch="--hxx-epilogue-file [value]"
+ />
+ </Properties>
+ </CustomBuildRule>
+ </Rules>
+</VisualStudioToolFile>
diff --git a/xsd/dist/etc/vc-9.0/xsd-cxx-tree.rules b/xsd/dist/etc/vc-9.0/xsd-cxx-tree.rules new file mode 100644 index 0000000..d82d618 --- /dev/null +++ b/xsd/dist/etc/vc-9.0/xsd-cxx-tree.rules @@ -0,0 +1,319 @@ +<?xml version="1.0" encoding="utf-8"?>
+<VisualStudioToolFile
+ Name="CodeSynthesis XSD Compiler C++/Tree Mapping Rules"
+ Version="8.00"
+ >
+ <Rules>
+ <CustomBuildRule
+ Name="C++/Tree Mapping Rule"
+ DisplayName="C++/Tree Mapping Rule"
+ CommandLine="xsd.exe cxx-tree [AllOptions] [AdditionalOptions] [Inputs]"
+ Outputs="[$OutDir]\$(InputName)[$HeaderSuffix];[$OutDir]\$(InputName)[$SourceSuffix]"
+ FileExtensions="*.xsd"
+ ExecutionDescription="xsd cxx-tree [Inputs]"
+ ShowOnlyRuleProperties="false"
+ >
+ <Properties>
+ <StringProperty
+ Name="OutDir"
+ DisplayName="Output Directory"
+ Category="Output"
+ Description="Output directory for the generated files"
+ Switch="--output-dir [value]"
+ DefaultValue="."
+ />
+ <BooleanProperty
+ Name="ProprietaryLicense"
+ DisplayName="Proprietary License"
+ Category="Licensing"
+ Description="Indicate that the generated code is licensed under a proprietary license instead of the GPL."
+ Switch="--proprietary-license"
+ />
+ <StringProperty
+ Name="HeaderSuffix"
+ DisplayName="C++ Header Suffix "
+ Category="Output"
+ Description="Generated C++ header file suffix"
+ Switch="--hxx-suffix [value]"
+ DefaultValue=".hxx"
+ />
+ <StringProperty
+ Name="SourceSuffix"
+ DisplayName="C++ Source Suffix"
+ Category="Output"
+ Description="Generated C++ source file suffix"
+ Switch="--cxx-suffix [value]"
+ DefaultValue=".cxx"
+ />
+ <StringProperty
+ Name="InlineSuffix"
+ DisplayName="C++ Inline Suffix"
+ Category="Output"
+ Description="Generated C++ inline file suffix"
+ Switch="--ixx-suffix [value]"
+ DefaultValue=".ixx"
+ />
+ <StringProperty
+ Name="ForwardSuffix"
+ DisplayName="C++ Forward Declaration Suffix"
+ Category="Output"
+ Description="Generated C++ forward declaration file suffix"
+ Switch="--fwd-suffix [value]"
+ DefaultValue="-fwd.hxx"
+ />
+ <EnumProperty
+ Name="CharType"
+ DisplayName="Char Type"
+ PropertyPageName="Code Generation"
+ Description="Character type to be used in the generated code."
+ >
+ <Values>
+ <EnumValue
+ Value="0"
+ DisplayName="char"
+ />
+ <EnumValue
+ Value="1"
+ Switch="--char-type wchar_t"
+ DisplayName="wchar_t"
+ />
+ </Values>
+ </EnumProperty>
+ <EnumProperty
+ Name="CharEncoding"
+ DisplayName="Char Encoding"
+ PropertyPageName="Code Generation"
+ Description="Character encoding to be used bu the generated code."
+ >
+ <Values>
+ <EnumValue
+ Value="0"
+ DisplayName="UTF-8 (char)/UTF-16 (wchar_t)"
+ />
+ <EnumValue
+ Value="1"
+ Switch="--char-encoding iso8859-1"
+ DisplayName="ISO-8859-1"
+ />
+ <EnumValue
+ Value="2"
+ Switch="--char-encoding lcp"
+ DisplayName="Xerces-C++ local code page"
+ />
+ <EnumValue
+ Value="3"
+ Switch="--char-encoding custom"
+ DisplayName="Custom encoding"
+ />
+ </Values>
+ </EnumProperty>
+ <StringProperty
+ Name="NamespaceMap"
+ DisplayName="Namespace Map"
+ PropertyPageName="Code Generation"
+ Description="Map XML Schema namespaces to C++ namespaces by specifying a comma-separated list of mapping rules in the form <xml-ns>=<cxx-ns> where <xml-ns> stands for an XML Schema namespace and <cxx-ns> - for a C++ namespace."
+ Switch="--namespace-map [value]"
+ Delimited="true"
+ Delimiters=","
+ />
+ <BooleanProperty
+ Name="GenInline"
+ DisplayName="Generate Inline"
+ PropertyPageName="Code Generation"
+ Description="Generate simple functions inline. This option triggers creation of the inline file."
+ Switch="--generate-inline"
+ />
+ <BooleanProperty
+ Name="GenForward"
+ DisplayName="Generate Forward"
+ PropertyPageName="Code Generation"
+ Description="Generate a separate header file with forward declarations for the types being generated."
+ Switch="--generate-forward"
+ />
+ <BooleanProperty
+ Name="GenSerialization"
+ DisplayName="Generate Serialization"
+ PropertyPageName="Code Generation"
+ Description="Generate serialization functions. Serialization functions convert the object model back to XML."
+ Switch="--generate-serialization"
+ />
+ <BooleanProperty
+ Name="SupParsing"
+ DisplayName="Suppress Parsing"
+ PropertyPageName="Code Generation"
+ Description="Suppress generation of the parsing functions and constructors."
+ Switch="--suppress-parsing"
+ />
+ <BooleanProperty
+ Name="GenPolymorphic"
+ DisplayName="Generate Polymorphic"
+ PropertyPageName="Code Generation"
+ Description="Generate polymorphism-aware code. Specify this option if you use substitution groups or xsi:type."
+ Switch="--generate-polymorphic"
+ />
+ <StringProperty
+ Name="PolymorphicType"
+ DisplayName="Polymorphic Types"
+ PropertyPageName="Code Generation"
+ Description="Treat specified comma-separated list of types as roots of polymorphic type hierarchies."
+ Switch="--polymorphic-type [value]"
+ Delimited="true"
+ Delimiters=","
+ />
+ <BooleanProperty
+ Name="PolymorphicTypeAll"
+ DisplayName="All Types Polymorphic"
+ PropertyPageName="Code Generation"
+ Description="Indicate that all types should be treated as polymorphic."
+ Switch="--polymorphic-type-all"
+ />
+ <BooleanProperty
+ Name="GenOstream"
+ DisplayName="Generate Ostream"
+ PropertyPageName="Code Generation"
+ Description="Generate ostream insertion operators for generated types. This allows to easily print a fragment or the whole object model for debugging or logging."
+ Switch="--generate-ostream"
+ />
+ <BooleanProperty
+ Name="GenDoxygen"
+ DisplayName="Generate Doxygen"
+ PropertyPageName="Code Generation"
+ Description="Generate documentation comments suitable for extraction by the Doxygen documentation system."
+ Switch="--generate-doxygen"
+ />
+ <BooleanProperty
+ Name="GenComparison"
+ DisplayName="Generate Comparison"
+ PropertyPageName="Code Generation"
+ Description="Generate comparison operators for complex types."
+ Switch="--generate-comparison"
+ />
+ <BooleanProperty
+ Name="GenDefaultCtor"
+ DisplayName="Generate Default Constructors"
+ PropertyPageName="Code Generation"
+ Description="Generate default constructors even for types that have required members."
+ Switch="--generate-default-ctor"
+ />
+ <BooleanProperty
+ Name="GenFromBaseCtor"
+ DisplayName="Generate From-Base Constructors"
+ PropertyPageName="Code Generation"
+ Description="Generate constructors that expect an instance of a base type followed by all required members."
+ Switch="--generate-from-base-ctor"
+ />
+ <BooleanProperty
+ Name="GenDetach"
+ DisplayName="Generate Detach"
+ PropertyPageName="Code Generation"
+ Description="Generate detach functions for required elements and attributes."
+ Switch="--generate-detach"
+ />
+ <BooleanProperty
+ Name="GenWildcard"
+ DisplayName="Generate Wildcard"
+ PropertyPageName="Code Generation"
+ Description="Generate accessors and modifiers as well as parsing and serialization code for XML Schema wildcards (any and anyAttribute)."
+ Switch="--generate-wildcard"
+ />
+ <BooleanProperty
+ Name="GenElementType"
+ DisplayName="Generate Element Types"
+ PropertyPageName="Code Generation"
+ Description="Generate types instead of parsing and serialization functions for root elements."
+ Switch="--generate-element-type"
+ />
+ <BooleanProperty
+ Name="GenElementMap"
+ DisplayName="Generate Element Map"
+ PropertyPageName="Code Generation"
+ Description="Generate a root element map that allows uniform parsing and serialization of multiple root elements."
+ Switch="--generate-element-map"
+ />
+ <BooleanProperty
+ Name="GenIntellisense"
+ DisplayName="Generate IntelliSense"
+ PropertyPageName="Code Generation"
+ Description="Generate workarounds for IntelliSense bugs in Visual Studio 2005 (8.0)."
+ Switch="--generate-intellisense"
+ />
+ <EnumProperty
+ Name="TypeNaming"
+ DisplayName="Type Naming"
+ PropertyPageName="Code Generation"
+ Description="Specify the type naming convention that should be used in the generated code."
+ >
+ <Values>
+ <EnumValue
+ Value="0"
+ DisplayName="K&R"
+ />
+ <EnumValue
+ Value="1"
+ Switch="--type-naming java"
+ DisplayName="Java"
+ />
+ <EnumValue
+ Value="2"
+ Switch="--type-naming ucc"
+ DisplayName="Upper Camel Case"
+ />
+ </Values>
+ </EnumProperty>
+ <EnumProperty
+ Name="FunctionNaming"
+ DisplayName="Function Naming"
+ PropertyPageName="Code Generation"
+ Description="Specify the function naming convention that should be used in the generated code."
+ >
+ <Values>
+ <EnumValue
+ Value="0"
+ DisplayName="K&R"
+ />
+ <EnumValue
+ Value="1"
+ Switch="--function-naming java"
+ DisplayName="Java"
+ />
+ <EnumValue
+ Value="2"
+ Switch="--function-naming lcc"
+ DisplayName="Lower Camel Case"
+ />
+ </Values>
+ </EnumProperty>
+ <StringProperty
+ Name="RootElement"
+ DisplayName="Root Element"
+ PropertyPageName="Code Generation"
+ Description="Treat only specified comma-separated list of elements as document roots."
+ Switch="--root-element [value]"
+ Delimited="true"
+ Delimiters=","
+ />
+ <StringProperty
+ Name="ExportSymbol"
+ DisplayName="Export Symbol"
+ PropertyPageName="Code Generation"
+ Description="Insert the specified symbol in places where DLL export/import control statements (__declspec(dllexport/dllimport)) are necessary."
+ Switch="--export-symbol [value]"
+ />
+ <StringProperty
+ Name="HxxPrologue"
+ DisplayName="Header Prologue File"
+ PropertyPageName="Code Generation"
+ Description="Insert the contents of the file specified at the beginning of the header file."
+ Switch="--hxx-prologue-file [value]"
+ />
+ <StringProperty
+ Name="HxxEpilogue"
+ DisplayName="Header Epilogue File"
+ PropertyPageName="Code Generation"
+ Description="Insert the contents of the file specified at the end of the header file."
+ Switch="--hxx-epilogue-file [value]"
+ />
+ </Properties>
+ </CustomBuildRule>
+ </Rules>
+</VisualStudioToolFile>
diff --git a/xsd/dist/examples/build/cxx/compilers.make b/xsd/dist/examples/build/cxx/compilers.make new file mode 100644 index 0000000..b8d5538 --- /dev/null +++ b/xsd/dist/examples/build/cxx/compilers.make @@ -0,0 +1,131 @@ +# file : examples/build/cxx/compilers.make +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +CXX := g++ + +cxx_sign := $(shell t=`$(CXX) -V 2>&1`; if test $$? -eq 0; then echo $$t; fi) + +ifeq ($(cxx_sign),) +cxx_sign := $(shell t=`$(CXX) --version 2>&1`; if test $$? -eq 0; then echo $$t; fi) +endif + +# IBM XL C++ V7.0 returns error code when called with the -qversion option. This +# complicates our life quite a bit. +# +ifeq ($(cxx_sign),) +cxx_sign := $(shell t=`$(CXX) -qversion 2>/dev/null`; echo $$t) +ifneq ($(shell echo '$(cxx_sign)' | sed -e 's/^.*IBM XL C\/C.. .*$$//'),) +cxx_sign := +endif +endif + +cxx_id := + +ifneq ($(cxx_sign),) + +# GNU g++ (g++) +# +ifeq ($(cxx_id),) +ifeq ($(shell echo '$(cxx_sign)' | sed -e 's/^[^ ]* (GCC) .*$$//'),) +cxx_id := gnu +endif +endif + +# g++ 4.3 removed GCC for some reason so check for g++ also. +ifeq ($(cxx_id),) +ifeq ($(shell echo '$(cxx_sign)' | sed -e 's/^g++.*$$//'),) +cxx_id := gnu +endif +endif + +# Clang +# +ifeq ($(cxx_id),) +ifeq ($(shell echo '$(cxx_sign)' | sed -e 's/^.* clang .*$$//'),) +cxx_id := clang +endif +endif + +ifeq ($(cxx_id),) +ifeq ($(shell echo '$(cxx_sign)' | sed -e 's/^.* Clang .*$$//'),) +cxx_id := clang +endif +endif + +# Sun C++ (CC) +# +ifeq ($(cxx_id),) +ifeq ($(shell echo '$(cxx_sign)' | sed -e 's/^[^ ]* Sun C.. .*$$//'),) +cxx_id := sun +endif +endif + + +# HP C++ (aCC) +# +# aCC3 and aCC6 are two very different compilers so we will call them +# hp3 and hp6. +# + +# 3 +ifeq ($(cxx_id),) +ifeq ($(shell echo '$(cxx_sign)' | sed -e 's/^[^ ]* HP ANSI C.. .* A\.03\..*$$//'),) +cxx_id := hp3 +endif +endif + +# 6 +ifeq ($(cxx_id),) +ifeq ($(shell echo '$(cxx_sign)' | sed -e 's/^[^ ]* HP aC..\/ANSI C .* A\.06\..*$$//'),) +cxx_id := hp6 +endif +endif + +ifeq ($(cxx_id),) +ifeq ($(shell echo '$(cxx_sign)' | sed -e 's/^[^ ]* HP C\/aC.. .* A\.06\..*$$//'),) +cxx_id := hp6 +endif +endif + +# Intel C++ (icpc) +# + +# 9.x +ifeq ($(cxx_id),) +ifeq ($(shell echo '$(cxx_sign)' | sed -e 's/^Intel(R) C.. .*$$//'),) +cxx_id := intel +endif +endif + +# 8.x +ifeq ($(cxx_id),) +ifeq ($(shell echo '$(cxx_sign)' | sed -e 's/^8\..$$//'),) +cxx_id := intel +endif +endif + + +# IBM XL C++ +# +ifeq ($(cxx_id),) +ifeq ($(shell echo '$(cxx_sign)' | sed -e 's/^.*IBM XL C\/C.. .*$$//'),) +cxx_id := ibm +endif +endif + + +# Unknown +# +ifeq ($(cxx_id),) +$(warning unknown C++ compiler signature '$(cxx_sign)', continuing anyway) +endif + + +else +$(warning unable to obtain compiler signature for '$(CXX)', continuing anyway) +endif + +#$(warning $(cxx_sign)) +#$(warning $(cxx_id)) diff --git a/xsd/dist/examples/build/cxx/rules.make b/xsd/dist/examples/build/cxx/rules.make new file mode 100644 index 0000000..3e74764 --- /dev/null +++ b/xsd/dist/examples/build/cxx/rules.make @@ -0,0 +1,71 @@ +# file : examples/build/cxx/rules.make +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(root)/build/cxx/compilers.make + + +# GNU g++ +# +ifeq ($(cxx_id),gnu) + CXXFLAGS := -W -Wall -O3 +endif + +# Clang +# +ifeq ($(cxx_id),clang) + CXXFLAGS := -W -O3 +endif + +# Intel C++ +# +ifeq ($(cxx_id),intel) + CXXFLAGS := -w1 -O2 +endif + + +# Sun C++ +# +ifeq ($(cxx_id),sun) + CXXFLAGS := -O +endif + + +# HP aCC3 +# +ifeq ($(cxx_id),hp3) + + # By default Xerces-C++ is built with -mt for aCC3. + # 849 : symbol to long, truncated to 4000 + # 1039: incompatible vtable layout + # + CXXFLAGS := -AA -O -mt +W849 +W1039 +endif + + +# HP aCC6 +# +ifeq ($(cxx_id),hp6) + + # By default Xerces-C++ is built with -mt for aCC6. + # 2334 no suitable copy constructor (e.g., for std::auto_ptr) + # + CXXFLAGS := -Aa -O -mt +W2334 +endif + + +# IBM XL C++ +# +ifeq ($(cxx_id),ibm) + CXXFLAGS := -qrtti -O +endif + + +# Rules. +# +%.o: %.cxx + $(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $< -o $@ + +%: %.o + $(CXX) $(CXXFLAGS) $(LDFLAGS) -o $@ $^ $(LIBS) diff --git a/xsd/dist/examples/build/xsd/common.make b/xsd/dist/examples/build/xsd/common.make new file mode 100644 index 0000000..d82cbfb --- /dev/null +++ b/xsd/dist/examples/build/xsd/common.make @@ -0,0 +1,11 @@ +# file : examples/build/xsd/common.make +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +XSD := $(shell if test -x $(root)/../bin/xsd; \ + then echo $(root)/../bin/xsd; \ + else echo xsd; fi) + +override CPPFLAGS += $(shell if test -d $(root)/../libxsd; \ + then echo -I$(root)/../libxsd; fi) diff --git a/xsd/dist/examples/build/xsd/parser-rules.make b/xsd/dist/examples/build/xsd/parser-rules.make new file mode 100644 index 0000000..8da4fc6 --- /dev/null +++ b/xsd/dist/examples/build/xsd/parser-rules.make @@ -0,0 +1,23 @@ +# file : examples/build/xsd/parser-rules.make +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(root)/build/xsd/common.make + +XML_PARSER := xerces + +ifeq ($(XML_PARSER),xerces) +override LIBS := -lxerces-c $(LIBS) +else +override LIBS := -lexpat $(LIBS) +endif + +override XSDFLAGS += --xml-parser $(XML_PARSER) + +# Rules. +# +.PRECIOUS: %-pskel.hxx %-pskel.ixx %-pskel.cxx + +%-pskel.hxx %-pskel.ixx %-pskel.cxx: %.xsd + $(XSD) cxx-parser $(XSDFLAGS) $< diff --git a/xsd/dist/examples/build/xsd/tree-rules.make b/xsd/dist/examples/build/xsd/tree-rules.make new file mode 100644 index 0000000..0ea6990 --- /dev/null +++ b/xsd/dist/examples/build/xsd/tree-rules.make @@ -0,0 +1,15 @@ +# file : examples/build/xsd/tree-rules.make +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(root)/build/xsd/common.make + +override LIBS := -lxerces-c $(LIBS) + +# Rules. +# +.PRECIOUS: %.cxx %.hxx %.ixx + +%.cxx %.hxx %.ixx: %.xsd + $(XSD) cxx-tree $(XSDFLAGS) $< diff --git a/xsd/dist/examples/cxx/makefile b/xsd/dist/examples/cxx/makefile new file mode 100644 index 0000000..4882e9a --- /dev/null +++ b/xsd/dist/examples/cxx/makefile @@ -0,0 +1,11 @@ +dirs := parser tree + +.PHONY: all $(dirs) + +all: $(dirs) + +$(dirs): + @$(MAKE) -C $@ $(MAKECMDGOALS) + +makefile: ; +% :: $(dirs) ; diff --git a/xsd/dist/examples/cxx/parser/generated/generated-10.0.vcxproj b/xsd/dist/examples/cxx/parser/generated/generated-10.0.vcxproj new file mode 100644 index 0000000..f5bdf86 --- /dev/null +++ b/xsd/dist/examples/cxx/parser/generated/generated-10.0.vcxproj @@ -0,0 +1,207 @@ +<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectName>generated</ProjectName>
+ <ProjectGuid>{4277B39A-C9FB-4F10-8223-8DD38053EDA0}</ProjectGuid>
+ <RootNamespace>generated</RootNamespace>
+ <Keyword>Win32Proj</Keyword>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">library-driver</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">library-driver</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">library-driver</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">library-driver</TargetName>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Debug\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Debug\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)\$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)\$(Configuration)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Release\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Release\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)\$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)\$(Configuration)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>xerces-c_3D.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)library-driver.pdb</ProgramDatabaseFile>
+ <SubSystem>Console</SubSystem>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>xerces-c_3D.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)library-driver.pdb</ProgramDatabaseFile>
+ <SubSystem>Console</SubSystem>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>xerces-c_3.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>xerces-c_3.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="library-driver.cxx" />
+ <ClCompile Include="library-pimpl.cxx" />
+ <ClCompile Include="library-pskel.cxx" />
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="library-pimpl.hxx" />
+ <ClInclude Include="library-pskel.hxx" />
+ </ItemGroup>
+ <ItemGroup>
+ <CustomBuild Include="library.xsd">
+ <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">xsd library.xsd</Message>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">xsd cxx-parser --generate-print-impl --generate-test-driver --force-overwrite library.xsd</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">library-pskel.hxx;library-pskel.cxx;library-pimpl.hxx;library-pimpl.cxx;library-driver.cxx;%(Outputs)</Outputs>
+ <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">xsd library.xsd</Message>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">xsd cxx-parser --generate-print-impl --generate-test-driver --force-overwrite library.xsd</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">library-pskel.hxx;library-pskel.cxx;library-pimpl.hxx;library-pimpl.cxx;library-driver.cxx;%(Outputs)</Outputs>
+ <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">xsd library.xsd</Message>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">xsd cxx-parser --generate-print-impl --generate-test-driver --force-overwrite library.xsd</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">library-pskel.hxx;library-pskel.cxx;library-pimpl.hxx;library-pimpl.cxx;library-driver.cxx;%(Outputs)</Outputs>
+ <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">xsd library.xsd</Message>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">xsd cxx-parser --generate-print-impl --generate-test-driver --force-overwrite library.xsd</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">library-pskel.hxx;library-pskel.cxx;library-pimpl.hxx;library-pimpl.cxx;library-driver.cxx;%(Outputs)</Outputs>
+ </CustomBuild>
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="Readme.txt" />
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project>
\ No newline at end of file diff --git a/xsd/dist/examples/cxx/parser/generated/generated-10.0.vcxproj.filters b/xsd/dist/examples/cxx/parser/generated/generated-10.0.vcxproj.filters new file mode 100644 index 0000000..b2cc277 --- /dev/null +++ b/xsd/dist/examples/cxx/parser/generated/generated-10.0.vcxproj.filters @@ -0,0 +1,44 @@ +<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="Source Files">
+ <UniqueIdentifier>{6241A332-00FB-43D7-8E2D-4277B261F512}</UniqueIdentifier>
+ <Extensions>cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+ </Filter>
+ <Filter Include="Header Files">
+ <UniqueIdentifier>{5F7B4073-4744-4C7E-9B74-B5B7D8628B23}</UniqueIdentifier>
+ <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
+ </Filter>
+ <Filter Include="Schema Files">
+ <UniqueIdentifier>{64b9ddc3-e796-405a-84e3-6e33b610b7ba}</UniqueIdentifier>
+ <Extensions>xsd</Extensions>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="library-driver.cxx">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="library-pimpl.cxx">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="library-pskel.cxx">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="library-pimpl.hxx">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="library-pskel.hxx">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="Readme.txt" />
+ </ItemGroup>
+ <ItemGroup>
+ <CustomBuild Include="library.xsd">
+ <Filter>Schema Files</Filter>
+ </CustomBuild>
+ </ItemGroup>
+</Project>
\ No newline at end of file diff --git a/xsd/dist/examples/cxx/parser/generated/generated-7.1.vcproj b/xsd/dist/examples/cxx/parser/generated/generated-7.1.vcproj new file mode 100644 index 0000000..0932856 --- /dev/null +++ b/xsd/dist/examples/cxx/parser/generated/generated-7.1.vcproj @@ -0,0 +1,168 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="generated"
+ ProjectGUID="{4277B39A-C9FB-4F10-8223-8DD38053EDA0}"
+ RootNamespace="generated"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="TRUE"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="5"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="4"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/library-driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="TRUE"
+ ProgramDatabaseFile="$(OutDir)/library-driver.pdb"
+ SubSystem="1"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="4"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="3"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/library-driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{6241A332-00FB-43D7-8E2D-4277B261F512}">
+ <File
+ RelativePath=".\library-driver.cxx">
+ </File>
+ <File
+ RelativePath=".\library-pskel.cxx">
+ </File>
+ <File
+ RelativePath=".\library-pimpl.cxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{5F7B4073-4744-4C7E-9B74-B5B7D8628B23}">
+ <File
+ RelativePath=".\library-pskel.hxx">
+ </File>
+ <File
+ RelativePath=".\library-pimpl.hxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd">
+ <File
+ RelativePath=".\library.xsd">
+ <FileConfiguration
+ Name="Debug|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-parser --generate-print-impl --generate-test-driver --force-overwrite library.xsd"
+ Outputs="library-pskel.hxx;library-pskel.cxx;library-pimpl.hxx;library-pimpl.cxx;library-driver.cxx"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-parser --generate-print-impl --generate-test-driver --force-overwrite library.xsd"
+ Outputs="library-pskel.hxx;library-pskel.cxx;library-pimpl.hxx;library-pimpl.cxx;library-driver.cxx"/>
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/parser/generated/generated-8.0.vcproj b/xsd/dist/examples/cxx/parser/generated/generated-8.0.vcproj new file mode 100644 index 0000000..e1c668c --- /dev/null +++ b/xsd/dist/examples/cxx/parser/generated/generated-8.0.vcproj @@ -0,0 +1,427 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="generated"
+ ProjectGUID="{4277B39A-C9FB-4F10-8223-8DD38053EDA0}"
+ RootNamespace="generated"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/library-driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/library-driver.pdb"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/library-driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/library-driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/library-driver.pdb"
+ SubSystem="1"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/library-driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{6241A332-00FB-43D7-8E2D-4277B261F512}"
+ >
+ <File
+ RelativePath=".\library-driver.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\library-pimpl.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\library-pskel.cxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{5F7B4073-4744-4C7E-9B74-B5B7D8628B23}"
+ >
+ <File
+ RelativePath=".\library-pimpl.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\library-pskel.hxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd"
+ >
+ <File
+ RelativePath=".\library.xsd"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-parser --generate-print-impl --generate-test-driver --force-overwrite library.xsd"
+ Outputs="library-pskel.hxx;library-pskel.cxx;library-pimpl.hxx;library-pimpl.cxx;library-driver.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-parser --generate-print-impl --generate-test-driver --force-overwrite library.xsd"
+ Outputs="library-pskel.hxx;library-pskel.cxx;library-pimpl.hxx;library-pimpl.cxx;library-driver.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-parser --generate-print-impl --generate-test-driver --force-overwrite library.xsd"
+ Outputs="library-pskel.hxx;library-pskel.cxx;library-pimpl.hxx;library-pimpl.cxx;library-driver.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-parser --generate-print-impl --generate-test-driver --force-overwrite library.xsd"
+ Outputs="library-pskel.hxx;library-pskel.cxx;library-pimpl.hxx;library-pimpl.cxx;library-driver.cxx"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/parser/generated/generated-9.0.vcproj b/xsd/dist/examples/cxx/parser/generated/generated-9.0.vcproj new file mode 100644 index 0000000..3025912 --- /dev/null +++ b/xsd/dist/examples/cxx/parser/generated/generated-9.0.vcproj @@ -0,0 +1,424 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="generated"
+ ProjectGUID="{4277B39A-C9FB-4F10-8223-8DD38053EDA0}"
+ RootNamespace="generated"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/library-driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/library-driver.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/library-driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/library-driver.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/library-driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/library-driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{6241A332-00FB-43D7-8E2D-4277B261F512}"
+ >
+ <File
+ RelativePath=".\library-driver.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\library-pimpl.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\library-pskel.cxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{5F7B4073-4744-4C7E-9B74-B5B7D8628B23}"
+ >
+ <File
+ RelativePath=".\library-pimpl.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\library-pskel.hxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd"
+ >
+ <File
+ RelativePath=".\library.xsd"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-parser --generate-print-impl --generate-test-driver --force-overwrite library.xsd"
+ Outputs="library-pskel.hxx;library-pskel.cxx;library-pimpl.hxx;library-pimpl.cxx;library-driver.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-parser --generate-print-impl --generate-test-driver --force-overwrite library.xsd"
+ Outputs="library-pskel.hxx;library-pskel.cxx;library-pimpl.hxx;library-pimpl.cxx;library-driver.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-parser --generate-print-impl --generate-test-driver --force-overwrite library.xsd"
+ Outputs="library-pskel.hxx;library-pskel.cxx;library-pimpl.hxx;library-pimpl.cxx;library-driver.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-parser --generate-print-impl --generate-test-driver --force-overwrite library.xsd"
+ Outputs="library-pskel.hxx;library-pskel.cxx;library-pimpl.hxx;library-pimpl.cxx;library-driver.cxx"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/parser/generated/generated-xerces2-7.1.vcproj b/xsd/dist/examples/cxx/parser/generated/generated-xerces2-7.1.vcproj new file mode 100644 index 0000000..caf31bb --- /dev/null +++ b/xsd/dist/examples/cxx/parser/generated/generated-xerces2-7.1.vcproj @@ -0,0 +1,168 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="generated"
+ ProjectGUID="{4277B39A-C9FB-4F10-8223-8DD38053EDA0}"
+ RootNamespace="generated"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="TRUE"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="5"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="4"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/library-driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="TRUE"
+ ProgramDatabaseFile="$(OutDir)/library-driver.pdb"
+ SubSystem="1"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="4"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="3"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/library-driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{6241A332-00FB-43D7-8E2D-4277B261F512}">
+ <File
+ RelativePath=".\library-driver.cxx">
+ </File>
+ <File
+ RelativePath=".\library-pskel.cxx">
+ </File>
+ <File
+ RelativePath=".\library-pimpl.cxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{5F7B4073-4744-4C7E-9B74-B5B7D8628B23}">
+ <File
+ RelativePath=".\library-pskel.hxx">
+ </File>
+ <File
+ RelativePath=".\library-pimpl.hxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd">
+ <File
+ RelativePath=".\library.xsd">
+ <FileConfiguration
+ Name="Debug|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-parser --generate-print-impl --generate-test-driver --force-overwrite library.xsd"
+ Outputs="library-pskel.hxx;library-pskel.cxx;library-pimpl.hxx;library-pimpl.cxx;library-driver.cxx"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-parser --generate-print-impl --generate-test-driver --force-overwrite library.xsd"
+ Outputs="library-pskel.hxx;library-pskel.cxx;library-pimpl.hxx;library-pimpl.cxx;library-driver.cxx"/>
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/parser/generated/generated-xerces2-8.0.vcproj b/xsd/dist/examples/cxx/parser/generated/generated-xerces2-8.0.vcproj new file mode 100644 index 0000000..14867aa --- /dev/null +++ b/xsd/dist/examples/cxx/parser/generated/generated-xerces2-8.0.vcproj @@ -0,0 +1,427 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="generated"
+ ProjectGUID="{4277B39A-C9FB-4F10-8223-8DD38053EDA0}"
+ RootNamespace="generated"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/library-driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/library-driver.pdb"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/library-driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/library-driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/library-driver.pdb"
+ SubSystem="1"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/library-driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{6241A332-00FB-43D7-8E2D-4277B261F512}"
+ >
+ <File
+ RelativePath=".\library-driver.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\library-pimpl.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\library-pskel.cxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{5F7B4073-4744-4C7E-9B74-B5B7D8628B23}"
+ >
+ <File
+ RelativePath=".\library-pimpl.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\library-pskel.hxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd"
+ >
+ <File
+ RelativePath=".\library.xsd"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-parser --generate-print-impl --generate-test-driver --force-overwrite library.xsd"
+ Outputs="library-pskel.hxx;library-pskel.cxx;library-pimpl.hxx;library-pimpl.cxx;library-driver.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-parser --generate-print-impl --generate-test-driver --force-overwrite library.xsd"
+ Outputs="library-pskel.hxx;library-pskel.cxx;library-pimpl.hxx;library-pimpl.cxx;library-driver.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-parser --generate-print-impl --generate-test-driver --force-overwrite library.xsd"
+ Outputs="library-pskel.hxx;library-pskel.cxx;library-pimpl.hxx;library-pimpl.cxx;library-driver.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-parser --generate-print-impl --generate-test-driver --force-overwrite library.xsd"
+ Outputs="library-pskel.hxx;library-pskel.cxx;library-pimpl.hxx;library-pimpl.cxx;library-driver.cxx"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/parser/generated/generated-xerces2-9.0.vcproj b/xsd/dist/examples/cxx/parser/generated/generated-xerces2-9.0.vcproj new file mode 100644 index 0000000..3cefb45 --- /dev/null +++ b/xsd/dist/examples/cxx/parser/generated/generated-xerces2-9.0.vcproj @@ -0,0 +1,424 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="generated"
+ ProjectGUID="{4277B39A-C9FB-4F10-8223-8DD38053EDA0}"
+ RootNamespace="generated"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/library-driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/library-driver.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/library-driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/library-driver.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/library-driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/library-driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{6241A332-00FB-43D7-8E2D-4277B261F512}"
+ >
+ <File
+ RelativePath=".\library-driver.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\library-pimpl.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\library-pskel.cxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{5F7B4073-4744-4C7E-9B74-B5B7D8628B23}"
+ >
+ <File
+ RelativePath=".\library-pimpl.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\library-pskel.hxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd"
+ >
+ <File
+ RelativePath=".\library.xsd"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-parser --generate-print-impl --generate-test-driver --force-overwrite library.xsd"
+ Outputs="library-pskel.hxx;library-pskel.cxx;library-pimpl.hxx;library-pimpl.cxx;library-driver.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-parser --generate-print-impl --generate-test-driver --force-overwrite library.xsd"
+ Outputs="library-pskel.hxx;library-pskel.cxx;library-pimpl.hxx;library-pimpl.cxx;library-driver.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-parser --generate-print-impl --generate-test-driver --force-overwrite library.xsd"
+ Outputs="library-pskel.hxx;library-pskel.cxx;library-pimpl.hxx;library-pimpl.cxx;library-driver.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-parser --generate-print-impl --generate-test-driver --force-overwrite library.xsd"
+ Outputs="library-pskel.hxx;library-pskel.cxx;library-pimpl.hxx;library-pimpl.cxx;library-driver.cxx"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/parser/generated/makefile b/xsd/dist/examples/cxx/parser/generated/makefile new file mode 100644 index 0000000..b7bb4b8 --- /dev/null +++ b/xsd/dist/examples/cxx/parser/generated/makefile @@ -0,0 +1,49 @@ +root := ../../.. + +include $(root)/build/cxx/rules.make +include $(root)/build/xsd/parser-rules.make + +override XSDFLAGS += --generate-print-impl --generate-test-driver + +# If you are basing your own code on this example and make changes +# to the sample implementation and/or test driver, make sure you +# remove this option or your changes will be lost forever. +# +override XSDFLAGS += --force-overwrite + +# Build +# +library-driver: library-driver.o library-pskel.o library-pimpl.o + +library-driver.o: library-driver.cxx library-pimpl.hxx library-pskel.hxx +library-pimpl.o: library-pimpl.cxx library-pimpl.hxx library-pskel.hxx +library-pskel.o: library-pskel.cxx library-pskel.hxx + +library-pskel.hxx \ +library-pskel.cxx \ +library-pimpl.hxx \ +library-pimpl.cxx \ +library-driver.cxx : library.xsd + +# Change the pattern rule from parser-rules.make to include the sample +# implementation and test driver. +# +.PRECIOUS: %-pskel.hxx %-pskel.cxx %-pimpl.hxx %-pimpl.cxx %-driver.cxx + +%-pskel.hxx %-pskel.cxx %-pimpl.hxx %-pimpl.cxx %-driver.cxx: %.xsd + $(XSD) cxx-parser $(XSDFLAGS) $< + + +# Test. +# +.PHONY: test +test: library-driver library.xml + ./library-driver library.xml + + +# Clean. +# +.PHONY: clean +clean: + rm -f library-driver.?xx library-pimpl.?xx library-pskel.?xx + rm -f library-driver.o library-pimpl.o library-pskel.o library-driver diff --git a/xsd/dist/examples/cxx/parser/hello/hello-10.0.vcxproj b/xsd/dist/examples/cxx/parser/hello/hello-10.0.vcxproj new file mode 100644 index 0000000..cedf9e0 --- /dev/null +++ b/xsd/dist/examples/cxx/parser/hello/hello-10.0.vcxproj @@ -0,0 +1,205 @@ +<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectName>hello</ProjectName>
+ <ProjectGuid>{683E9D46-FCC7-4163-984B-9F399169CF7F}</ProjectGuid>
+ <RootNamespace>hello</RootNamespace>
+ <Keyword>Win32Proj</Keyword>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">driver</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">driver</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">driver</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">driver</TargetName>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Debug\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Debug\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)\$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)\$(Configuration)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Release\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Release\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)\$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)\$(Configuration)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>xerces-c_3D.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)driver.pdb</ProgramDatabaseFile>
+ <SubSystem>Console</SubSystem>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>xerces-c_3D.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)driver.pdb</ProgramDatabaseFile>
+ <SubSystem>Console</SubSystem>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>xerces-c_3.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>xerces-c_3.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="driver.cxx" />
+ <ClCompile Include="hello-pskel.cxx" />
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="hello-pskel.hxx" />
+ </ItemGroup>
+ <ItemGroup>
+ <CustomBuild Include="hello.xsd">
+ <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">xsd hello.xsd</Message>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">xsd cxx-parser hello.xsd</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">hello-pskel.hxx;hello-pskel.cxx;%(Outputs)</Outputs>
+ <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">xsd hello.xsd</Message>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">xsd cxx-parser hello.xsd</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">hello-pskel.hxx;hello-pskel.cxx;%(Outputs)</Outputs>
+ <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">xsd hello.xsd</Message>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">xsd cxx-parser hello.xsd</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">hello-pskel.hxx;hello-pskel.cxx;%(Outputs)</Outputs>
+ <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">xsd hello.xsd</Message>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">xsd cxx-parser hello.xsd</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">hello-pskel.hxx;hello-pskel.cxx;%(Outputs)</Outputs>
+ </CustomBuild>
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="Readme.txt" />
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project>
\ No newline at end of file diff --git a/xsd/dist/examples/cxx/parser/hello/hello-10.0.vcxproj.filters b/xsd/dist/examples/cxx/parser/hello/hello-10.0.vcxproj.filters new file mode 100644 index 0000000..26513bb --- /dev/null +++ b/xsd/dist/examples/cxx/parser/hello/hello-10.0.vcxproj.filters @@ -0,0 +1,38 @@ +<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="Source Files">
+ <UniqueIdentifier>{E9BF8C86-0B39-4E45-81D2-35AD75F02C5C}</UniqueIdentifier>
+ <Extensions>cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+ </Filter>
+ <Filter Include="Header Files">
+ <UniqueIdentifier>{3490E63E-27F8-4E29-996F-79F99714DDB3}</UniqueIdentifier>
+ <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
+ </Filter>
+ <Filter Include="Schema Files">
+ <UniqueIdentifier>{338ac052-a215-4fe4-a66b-f6be21b5ffa4}</UniqueIdentifier>
+ <Extensions>xsd</Extensions>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="driver.cxx">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="hello-pskel.cxx">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="hello-pskel.hxx">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="Readme.txt" />
+ </ItemGroup>
+ <ItemGroup>
+ <CustomBuild Include="hello.xsd">
+ <Filter>Schema Files</Filter>
+ </CustomBuild>
+ </ItemGroup>
+</Project>
\ No newline at end of file diff --git a/xsd/dist/examples/cxx/parser/hello/hello-7.1.vcproj b/xsd/dist/examples/cxx/parser/hello/hello-7.1.vcproj new file mode 100644 index 0000000..d0f5ca5 --- /dev/null +++ b/xsd/dist/examples/cxx/parser/hello/hello-7.1.vcproj @@ -0,0 +1,162 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="hello"
+ ProjectGUID="{683E9D46-FCC7-4163-984B-9F399169CF7F}"
+ RootNamespace="hello"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="TRUE"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="5"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="4"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="TRUE"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="4"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="3"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{E9BF8C86-0B39-4E45-81D2-35AD75F02C5C}">
+ <File
+ RelativePath=".\driver.cxx">
+ </File>
+ <File
+ RelativePath=".\hello-pskel.cxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{3490E63E-27F8-4E29-996F-79F99714DDB3}">
+ <File
+ RelativePath=".\hello-pskel.hxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd">
+ <File
+ RelativePath=".\hello.xsd">
+ <FileConfiguration
+ Name="Debug|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd hello.xsd"
+ CommandLine="xsd cxx-parser hello.xsd"
+ Outputs="hello-pskel.hxx;hello-pskel.cxx"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd hello.xsd"
+ CommandLine="xsd cxx-parser hello.xsd"
+ Outputs="hello-pskel.hxx;hello-pskel.cxx"/>
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/parser/hello/hello-8.0.vcproj b/xsd/dist/examples/cxx/parser/hello/hello-8.0.vcproj new file mode 100644 index 0000000..841e602 --- /dev/null +++ b/xsd/dist/examples/cxx/parser/hello/hello-8.0.vcproj @@ -0,0 +1,419 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="hello"
+ ProjectGUID="{683E9D46-FCC7-4163-984B-9F399169CF7F}"
+ RootNamespace="hello"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{E9BF8C86-0B39-4E45-81D2-35AD75F02C5C}"
+ >
+ <File
+ RelativePath=".\driver.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\hello-pskel.cxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{3490E63E-27F8-4E29-996F-79F99714DDB3}"
+ >
+ <File
+ RelativePath=".\hello-pskel.hxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd"
+ >
+ <File
+ RelativePath=".\hello.xsd"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd hello.xsd"
+ CommandLine="xsd cxx-parser hello.xsd"
+ Outputs="hello-pskel.hxx;hello-pskel.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd hello.xsd"
+ CommandLine="xsd cxx-parser hello.xsd"
+ Outputs="hello-pskel.hxx;hello-pskel.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd hello.xsd"
+ CommandLine="xsd cxx-parser hello.xsd"
+ Outputs="hello-pskel.hxx;hello-pskel.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd hello.xsd"
+ CommandLine="xsd cxx-parser hello.xsd"
+ Outputs="hello-pskel.hxx;hello-pskel.cxx"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/parser/hello/hello-9.0.vcproj b/xsd/dist/examples/cxx/parser/hello/hello-9.0.vcproj new file mode 100644 index 0000000..6223e65 --- /dev/null +++ b/xsd/dist/examples/cxx/parser/hello/hello-9.0.vcproj @@ -0,0 +1,416 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="hello"
+ ProjectGUID="{683E9D46-FCC7-4163-984B-9F399169CF7F}"
+ RootNamespace="hello"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{E9BF8C86-0B39-4E45-81D2-35AD75F02C5C}"
+ >
+ <File
+ RelativePath=".\driver.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\hello-pskel.cxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{3490E63E-27F8-4E29-996F-79F99714DDB3}"
+ >
+ <File
+ RelativePath=".\hello-pskel.hxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd"
+ >
+ <File
+ RelativePath=".\hello.xsd"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd hello.xsd"
+ CommandLine="xsd cxx-parser hello.xsd"
+ Outputs="hello-pskel.hxx;hello-pskel.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd hello.xsd"
+ CommandLine="xsd cxx-parser hello.xsd"
+ Outputs="hello-pskel.hxx;hello-pskel.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd hello.xsd"
+ CommandLine="xsd cxx-parser hello.xsd"
+ Outputs="hello-pskel.hxx;hello-pskel.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd hello.xsd"
+ CommandLine="xsd cxx-parser hello.xsd"
+ Outputs="hello-pskel.hxx;hello-pskel.cxx"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/parser/hello/hello-xerces2-7.1.vcproj b/xsd/dist/examples/cxx/parser/hello/hello-xerces2-7.1.vcproj new file mode 100644 index 0000000..51b3bdf --- /dev/null +++ b/xsd/dist/examples/cxx/parser/hello/hello-xerces2-7.1.vcproj @@ -0,0 +1,162 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="hello"
+ ProjectGUID="{683E9D46-FCC7-4163-984B-9F399169CF7F}"
+ RootNamespace="hello"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="TRUE"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="5"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="4"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="TRUE"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="4"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="3"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{E9BF8C86-0B39-4E45-81D2-35AD75F02C5C}">
+ <File
+ RelativePath=".\driver.cxx">
+ </File>
+ <File
+ RelativePath=".\hello-pskel.cxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{3490E63E-27F8-4E29-996F-79F99714DDB3}">
+ <File
+ RelativePath=".\hello-pskel.hxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd">
+ <File
+ RelativePath=".\hello.xsd">
+ <FileConfiguration
+ Name="Debug|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd hello.xsd"
+ CommandLine="xsd cxx-parser hello.xsd"
+ Outputs="hello-pskel.hxx;hello-pskel.cxx"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd hello.xsd"
+ CommandLine="xsd cxx-parser hello.xsd"
+ Outputs="hello-pskel.hxx;hello-pskel.cxx"/>
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/parser/hello/hello-xerces2-8.0.vcproj b/xsd/dist/examples/cxx/parser/hello/hello-xerces2-8.0.vcproj new file mode 100644 index 0000000..ae0a8a9 --- /dev/null +++ b/xsd/dist/examples/cxx/parser/hello/hello-xerces2-8.0.vcproj @@ -0,0 +1,419 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="hello"
+ ProjectGUID="{683E9D46-FCC7-4163-984B-9F399169CF7F}"
+ RootNamespace="hello"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{E9BF8C86-0B39-4E45-81D2-35AD75F02C5C}"
+ >
+ <File
+ RelativePath=".\driver.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\hello-pskel.cxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{3490E63E-27F8-4E29-996F-79F99714DDB3}"
+ >
+ <File
+ RelativePath=".\hello-pskel.hxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd"
+ >
+ <File
+ RelativePath=".\hello.xsd"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd hello.xsd"
+ CommandLine="xsd cxx-parser hello.xsd"
+ Outputs="hello-pskel.hxx;hello-pskel.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd hello.xsd"
+ CommandLine="xsd cxx-parser hello.xsd"
+ Outputs="hello-pskel.hxx;hello-pskel.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd hello.xsd"
+ CommandLine="xsd cxx-parser hello.xsd"
+ Outputs="hello-pskel.hxx;hello-pskel.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd hello.xsd"
+ CommandLine="xsd cxx-parser hello.xsd"
+ Outputs="hello-pskel.hxx;hello-pskel.cxx"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/parser/hello/hello-xerces2-9.0.vcproj b/xsd/dist/examples/cxx/parser/hello/hello-xerces2-9.0.vcproj new file mode 100644 index 0000000..fb407b9 --- /dev/null +++ b/xsd/dist/examples/cxx/parser/hello/hello-xerces2-9.0.vcproj @@ -0,0 +1,416 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="hello"
+ ProjectGUID="{683E9D46-FCC7-4163-984B-9F399169CF7F}"
+ RootNamespace="hello"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{E9BF8C86-0B39-4E45-81D2-35AD75F02C5C}"
+ >
+ <File
+ RelativePath=".\driver.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\hello-pskel.cxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{3490E63E-27F8-4E29-996F-79F99714DDB3}"
+ >
+ <File
+ RelativePath=".\hello-pskel.hxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd"
+ >
+ <File
+ RelativePath=".\hello.xsd"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd hello.xsd"
+ CommandLine="xsd cxx-parser hello.xsd"
+ Outputs="hello-pskel.hxx;hello-pskel.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd hello.xsd"
+ CommandLine="xsd cxx-parser hello.xsd"
+ Outputs="hello-pskel.hxx;hello-pskel.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd hello.xsd"
+ CommandLine="xsd cxx-parser hello.xsd"
+ Outputs="hello-pskel.hxx;hello-pskel.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd hello.xsd"
+ CommandLine="xsd cxx-parser hello.xsd"
+ Outputs="hello-pskel.hxx;hello-pskel.cxx"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/parser/hello/makefile b/xsd/dist/examples/cxx/parser/hello/makefile new file mode 100644 index 0000000..5746c6f --- /dev/null +++ b/xsd/dist/examples/cxx/parser/hello/makefile @@ -0,0 +1,28 @@ +root := ../../.. + +include $(root)/build/cxx/rules.make +include $(root)/build/xsd/parser-rules.make + + +# Build. +# +driver: driver.o hello-pskel.o + +driver.o: driver.cxx hello-pskel.hxx +hello-pskel.o: hello-pskel.cxx hello-pskel.hxx + +hello-pskel.hxx hello-pskel.cxx: hello.xsd + + +# Test. +# +.PHONY: test +test: driver hello.xml + ./driver hello.xml + + +# Clean. +# +.PHONY: clean +clean: + rm -f hello-pskel.?xx hello-pskel.o driver.o driver diff --git a/xsd/dist/examples/cxx/parser/library/library-10.0.vcxproj b/xsd/dist/examples/cxx/parser/library/library-10.0.vcxproj new file mode 100644 index 0000000..2366880 --- /dev/null +++ b/xsd/dist/examples/cxx/parser/library/library-10.0.vcxproj @@ -0,0 +1,209 @@ +<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectName>library</ProjectName>
+ <ProjectGuid>{D66DAC4D-133C-4DB5-923F-C88A961C3C51}</ProjectGuid>
+ <RootNamespace>library</RootNamespace>
+ <Keyword>Win32Proj</Keyword>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">driver</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">driver</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">driver</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">driver</TargetName>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Debug\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Debug\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)\$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)\$(Configuration)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Release\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Release\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)\$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)\$(Configuration)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>xerces-c_3D.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)driver.pdb</ProgramDatabaseFile>
+ <SubSystem>Console</SubSystem>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>xerces-c_3D.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)driver.pdb</ProgramDatabaseFile>
+ <SubSystem>Console</SubSystem>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>xerces-c_3.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>xerces-c_3.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="driver.cxx" />
+ <ClCompile Include="library-pimpl.cxx" />
+ <ClCompile Include="library-pskel.cxx" />
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="library-pimpl.hxx" />
+ <ClInclude Include="library-pskel.hxx" />
+ <ClInclude Include="library.hxx" />
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="library-pskel.ixx" />
+ <None Include="Readme.txt" />
+ </ItemGroup>
+ <ItemGroup>
+ <CustomBuild Include="library.xsd">
+ <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">xsd library.xsd</Message>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">xsd cxx-parser --generate-inline --type-map library.map library.xsd</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">library-pskel.hxx;library-pskel.ixx;library-pskel.cxx;%(Outputs)</Outputs>
+ <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">xsd library.xsd</Message>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">xsd cxx-parser --generate-inline --type-map library.map library.xsd</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">library-pskel.hxx;library-pskel.ixx;library-pskel.cxx;%(Outputs)</Outputs>
+ <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">xsd library.xsd</Message>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">xsd cxx-parser --generate-inline --type-map library.map library.xsd</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">library-pskel.hxx;library-pskel.ixx;library-pskel.cxx;%(Outputs)</Outputs>
+ <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">xsd library.xsd</Message>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">xsd cxx-parser --generate-inline --type-map library.map library.xsd</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">library-pskel.hxx;library-pskel.ixx;library-pskel.cxx;%(Outputs)</Outputs>
+ </CustomBuild>
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project>
\ No newline at end of file diff --git a/xsd/dist/examples/cxx/parser/library/library-10.0.vcxproj.filters b/xsd/dist/examples/cxx/parser/library/library-10.0.vcxproj.filters new file mode 100644 index 0000000..30f473b --- /dev/null +++ b/xsd/dist/examples/cxx/parser/library/library-10.0.vcxproj.filters @@ -0,0 +1,54 @@ +<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="Source Files">
+ <UniqueIdentifier>{4044D311-878E-4632-B816-7810045EF3F1}</UniqueIdentifier>
+ <Extensions>cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+ </Filter>
+ <Filter Include="Header Files">
+ <UniqueIdentifier>{4F90DEB0-060B-4976-949A-66FFB902F598}</UniqueIdentifier>
+ <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
+ </Filter>
+ <Filter Include="Inline Files">
+ <UniqueIdentifier>{a31fd2f2-4ce6-4ee0-962d-68d213bc7b1b}</UniqueIdentifier>
+ <Extensions>ixx</Extensions>
+ </Filter>
+ <Filter Include="Schema Files">
+ <UniqueIdentifier>{8e9fd809-af45-49e4-95b8-d2becff77db5}</UniqueIdentifier>
+ <Extensions>xsd</Extensions>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="driver.cxx">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="library-pimpl.cxx">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="library-pskel.cxx">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="library-pimpl.hxx">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="library-pskel.hxx">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="library.hxx">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="library-pskel.ixx">
+ <Filter>Inline Files</Filter>
+ </None>
+ <None Include="Readme.txt" />
+ </ItemGroup>
+ <ItemGroup>
+ <CustomBuild Include="library.xsd">
+ <Filter>Schema Files</Filter>
+ </CustomBuild>
+ </ItemGroup>
+</Project>
\ No newline at end of file diff --git a/xsd/dist/examples/cxx/parser/library/library-7.1.vcproj b/xsd/dist/examples/cxx/parser/library/library-7.1.vcproj new file mode 100644 index 0000000..98dce27 --- /dev/null +++ b/xsd/dist/examples/cxx/parser/library/library-7.1.vcproj @@ -0,0 +1,178 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="library"
+ ProjectGUID="{D66DAC4D-133C-4DB5-923F-C88A961C3C51}"
+ RootNamespace="library"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="TRUE"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="5"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="4"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="TRUE"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="4"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="3"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{4044D311-878E-4632-B816-7810045EF3F1}">
+ <File
+ RelativePath=".\driver.cxx">
+ </File>
+ <File
+ RelativePath=".\library-pskel.cxx">
+ </File>
+ <File
+ RelativePath=".\library-pimpl.cxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{4F90DEB0-060B-4976-949A-66FFB902F598}">
+ <File
+ RelativePath=".\library-pskel.hxx">
+ </File>
+ <File
+ RelativePath=".\library-pimpl.hxx">
+ </File>
+ <File
+ RelativePath=".\library.hxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Inline Files"
+ Filter="ixx">
+ <File
+ RelativePath=".\library-pskel.ixx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd">
+ <File
+ RelativePath=".\library.xsd">
+ <FileConfiguration
+ Name="Debug|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-parser --generate-inline --type-map library.map library.xsd"
+ Outputs="library-pskel.hxx;library-pskel.ixx;library-pskel.cxx"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-parser --generate-inline --type-map library.map library.xsd"
+ Outputs="library-pskel.hxx;library-pskel.ixx;library-pskel.cxx"/>
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/parser/library/library-8.0.vcproj b/xsd/dist/examples/cxx/parser/library/library-8.0.vcproj new file mode 100644 index 0000000..bb45f42 --- /dev/null +++ b/xsd/dist/examples/cxx/parser/library/library-8.0.vcproj @@ -0,0 +1,440 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="library"
+ ProjectGUID="{D66DAC4D-133C-4DB5-923F-C88A961C3C51}"
+ RootNamespace="library"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{4044D311-878E-4632-B816-7810045EF3F1}"
+ >
+ <File
+ RelativePath=".\driver.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\library-pimpl.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\library-pskel.cxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{4F90DEB0-060B-4976-949A-66FFB902F598}"
+ >
+ <File
+ RelativePath=".\library-pimpl.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\library-pskel.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\library.hxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Inline Files"
+ Filter="ixx"
+ >
+ <File
+ RelativePath=".\library-pskel.ixx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd"
+ >
+ <File
+ RelativePath=".\library.xsd"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-parser --generate-inline --type-map library.map library.xsd"
+ Outputs="library-pskel.hxx;library-pskel.ixx;library-pskel.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-parser --generate-inline --type-map library.map library.xsd"
+ Outputs="library-pskel.hxx;library-pskel.ixx;library-pskel.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-parser --generate-inline --type-map library.map library.xsd"
+ Outputs="library-pskel.hxx;library-pskel.ixx;library-pskel.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-parser --generate-inline --type-map library.map library.xsd"
+ Outputs="library-pskel.hxx;library-pskel.ixx;library-pskel.cxx"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/parser/library/library-9.0.vcproj b/xsd/dist/examples/cxx/parser/library/library-9.0.vcproj new file mode 100644 index 0000000..93c9f6c --- /dev/null +++ b/xsd/dist/examples/cxx/parser/library/library-9.0.vcproj @@ -0,0 +1,437 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="library"
+ ProjectGUID="{D66DAC4D-133C-4DB5-923F-C88A961C3C51}"
+ RootNamespace="library"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{4044D311-878E-4632-B816-7810045EF3F1}"
+ >
+ <File
+ RelativePath=".\driver.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\library-pimpl.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\library-pskel.cxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{4F90DEB0-060B-4976-949A-66FFB902F598}"
+ >
+ <File
+ RelativePath=".\library-pimpl.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\library-pskel.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\library.hxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Inline Files"
+ Filter="ixx"
+ >
+ <File
+ RelativePath=".\library-pskel.ixx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd"
+ >
+ <File
+ RelativePath=".\library.xsd"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-parser --generate-inline --type-map library.map library.xsd"
+ Outputs="library-pskel.hxx;library-pskel.ixx;library-pskel.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-parser --generate-inline --type-map library.map library.xsd"
+ Outputs="library-pskel.hxx;library-pskel.ixx;library-pskel.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-parser --generate-inline --type-map library.map library.xsd"
+ Outputs="library-pskel.hxx;library-pskel.ixx;library-pskel.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-parser --generate-inline --type-map library.map library.xsd"
+ Outputs="library-pskel.hxx;library-pskel.ixx;library-pskel.cxx"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/parser/library/library-xerces2-7.1.vcproj b/xsd/dist/examples/cxx/parser/library/library-xerces2-7.1.vcproj new file mode 100644 index 0000000..7585fea --- /dev/null +++ b/xsd/dist/examples/cxx/parser/library/library-xerces2-7.1.vcproj @@ -0,0 +1,178 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="library"
+ ProjectGUID="{D66DAC4D-133C-4DB5-923F-C88A961C3C51}"
+ RootNamespace="library"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="TRUE"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="5"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="4"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="TRUE"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="4"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="3"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{4044D311-878E-4632-B816-7810045EF3F1}">
+ <File
+ RelativePath=".\driver.cxx">
+ </File>
+ <File
+ RelativePath=".\library-pskel.cxx">
+ </File>
+ <File
+ RelativePath=".\library-pimpl.cxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{4F90DEB0-060B-4976-949A-66FFB902F598}">
+ <File
+ RelativePath=".\library-pskel.hxx">
+ </File>
+ <File
+ RelativePath=".\library-pimpl.hxx">
+ </File>
+ <File
+ RelativePath=".\library.hxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Inline Files"
+ Filter="ixx">
+ <File
+ RelativePath=".\library-pskel.ixx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd">
+ <File
+ RelativePath=".\library.xsd">
+ <FileConfiguration
+ Name="Debug|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-parser --generate-inline --type-map library.map library.xsd"
+ Outputs="library-pskel.hxx;library-pskel.ixx;library-pskel.cxx"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-parser --generate-inline --type-map library.map library.xsd"
+ Outputs="library-pskel.hxx;library-pskel.ixx;library-pskel.cxx"/>
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/parser/library/library-xerces2-8.0.vcproj b/xsd/dist/examples/cxx/parser/library/library-xerces2-8.0.vcproj new file mode 100644 index 0000000..6bd700b --- /dev/null +++ b/xsd/dist/examples/cxx/parser/library/library-xerces2-8.0.vcproj @@ -0,0 +1,440 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="library"
+ ProjectGUID="{D66DAC4D-133C-4DB5-923F-C88A961C3C51}"
+ RootNamespace="library"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{4044D311-878E-4632-B816-7810045EF3F1}"
+ >
+ <File
+ RelativePath=".\driver.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\library-pimpl.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\library-pskel.cxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{4F90DEB0-060B-4976-949A-66FFB902F598}"
+ >
+ <File
+ RelativePath=".\library-pimpl.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\library-pskel.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\library.hxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Inline Files"
+ Filter="ixx"
+ >
+ <File
+ RelativePath=".\library-pskel.ixx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd"
+ >
+ <File
+ RelativePath=".\library.xsd"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-parser --generate-inline --type-map library.map library.xsd"
+ Outputs="library-pskel.hxx;library-pskel.ixx;library-pskel.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-parser --generate-inline --type-map library.map library.xsd"
+ Outputs="library-pskel.hxx;library-pskel.ixx;library-pskel.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-parser --generate-inline --type-map library.map library.xsd"
+ Outputs="library-pskel.hxx;library-pskel.ixx;library-pskel.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-parser --generate-inline --type-map library.map library.xsd"
+ Outputs="library-pskel.hxx;library-pskel.ixx;library-pskel.cxx"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/parser/library/library-xerces2-9.0.vcproj b/xsd/dist/examples/cxx/parser/library/library-xerces2-9.0.vcproj new file mode 100644 index 0000000..0364547 --- /dev/null +++ b/xsd/dist/examples/cxx/parser/library/library-xerces2-9.0.vcproj @@ -0,0 +1,437 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="library"
+ ProjectGUID="{D66DAC4D-133C-4DB5-923F-C88A961C3C51}"
+ RootNamespace="library"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{4044D311-878E-4632-B816-7810045EF3F1}"
+ >
+ <File
+ RelativePath=".\driver.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\library-pimpl.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\library-pskel.cxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{4F90DEB0-060B-4976-949A-66FFB902F598}"
+ >
+ <File
+ RelativePath=".\library-pimpl.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\library-pskel.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\library.hxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Inline Files"
+ Filter="ixx"
+ >
+ <File
+ RelativePath=".\library-pskel.ixx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd"
+ >
+ <File
+ RelativePath=".\library.xsd"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-parser --generate-inline --type-map library.map library.xsd"
+ Outputs="library-pskel.hxx;library-pskel.ixx;library-pskel.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-parser --generate-inline --type-map library.map library.xsd"
+ Outputs="library-pskel.hxx;library-pskel.ixx;library-pskel.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-parser --generate-inline --type-map library.map library.xsd"
+ Outputs="library-pskel.hxx;library-pskel.ixx;library-pskel.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-parser --generate-inline --type-map library.map library.xsd"
+ Outputs="library-pskel.hxx;library-pskel.ixx;library-pskel.cxx"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/parser/library/makefile b/xsd/dist/examples/cxx/parser/library/makefile new file mode 100644 index 0000000..f96353b --- /dev/null +++ b/xsd/dist/examples/cxx/parser/library/makefile @@ -0,0 +1,30 @@ +root := ../../.. + +include $(root)/build/cxx/rules.make +include $(root)/build/xsd/parser-rules.make + +override XSDFLAGS += --generate-inline --type-map library.map + +# Build +# +driver: driver.o library-pskel.o library-pimpl.o + +driver.o: driver.cxx library-pimpl.hxx library-pskel.hxx library.hxx +library-pimpl.o: library-pimpl.cxx library-pimpl.hxx library-pskel.hxx library.hxx +library-pskel.o: library-pskel.cxx library-pskel.hxx library.hxx + +library-pskel.hxx library-pskel.ixx library-pskel.cxx: library.xsd library.map + + +# Test. +# +.PHONY: test +test: driver library.xml + ./driver library.xml + + +# Clean. +# +.PHONY: clean +clean: + rm -f library-pskel.?xx library-pimpl.o library-pskel.o driver.o driver diff --git a/xsd/dist/examples/cxx/parser/makefile b/xsd/dist/examples/cxx/parser/makefile new file mode 100644 index 0000000..b778cbd --- /dev/null +++ b/xsd/dist/examples/cxx/parser/makefile @@ -0,0 +1,12 @@ +dirs := generated hello library mixin mixed multiroot performance \ +polymorphism polyroot wildcard + +.PHONY: all $(dirs) + +all: $(dirs) + +$(dirs): + @$(MAKE) -C $@ $(MAKECMDGOALS) + +makefile: ; +% :: $(dirs) ; diff --git a/xsd/dist/examples/cxx/parser/mixed/makefile b/xsd/dist/examples/cxx/parser/mixed/makefile new file mode 100644 index 0000000..edd28b2 --- /dev/null +++ b/xsd/dist/examples/cxx/parser/mixed/makefile @@ -0,0 +1,30 @@ +root := ../../.. + +include $(root)/build/cxx/rules.make +include $(root)/build/xsd/parser-rules.make + +override XSDFLAGS += --type-map text.map + +# Build. +# +driver: driver.o text-pskel.o + +driver.o: driver.cxx text-pskel.hxx anchor.hxx +text-pskel.o: text-pskel.cxx text-pskel.hxx anchor.hxx + +text-pskel.hxx text-pskel.cxx: text.xsd text.map + + +# Test. +# +.PHONY: test +test: driver text.xml + ./driver text.xml + + +# Clean. +# +.PHONY: clean +clean: + rm -f text-pskel.?xx text-pskel.o driver.o driver + diff --git a/xsd/dist/examples/cxx/parser/mixed/mixed-10.0.vcxproj b/xsd/dist/examples/cxx/parser/mixed/mixed-10.0.vcxproj new file mode 100644 index 0000000..8342e03 --- /dev/null +++ b/xsd/dist/examples/cxx/parser/mixed/mixed-10.0.vcxproj @@ -0,0 +1,206 @@ +<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectName>mixed</ProjectName>
+ <ProjectGuid>{304FD6A7-6C73-41C3-B489-97FD5E635CCB}</ProjectGuid>
+ <RootNamespace>mixed</RootNamespace>
+ <Keyword>Win32Proj</Keyword>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">driver</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">driver</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">driver</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">driver</TargetName>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Debug\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Debug\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)\$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)\$(Configuration)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Release\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Release\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)\$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)\$(Configuration)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>xerces-c_3D.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)driver.pdb</ProgramDatabaseFile>
+ <SubSystem>Console</SubSystem>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>xerces-c_3D.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)driver.pdb</ProgramDatabaseFile>
+ <SubSystem>Console</SubSystem>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>xerces-c_3.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>xerces-c_3.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="driver.cxx" />
+ <ClCompile Include="text-pskel.cxx" />
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="anchor.hxx" />
+ <ClInclude Include="text-pskel.hxx" />
+ </ItemGroup>
+ <ItemGroup>
+ <CustomBuild Include="text.xsd">
+ <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">xsd text.xsd</Message>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">xsd cxx-parser --type-map text.map text.xsd</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">text-pskel.hxx;text-pskel.cxx;%(Outputs)</Outputs>
+ <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">xsd text.xsd</Message>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">xsd cxx-parser --type-map text.map text.xsd</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">text-pskel.hxx;text-pskel.cxx;%(Outputs)</Outputs>
+ <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">xsd text.xsd</Message>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">xsd cxx-parser --type-map text.map text.xsd</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">text-pskel.hxx;text-pskel.cxx;%(Outputs)</Outputs>
+ <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">xsd text.xsd</Message>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">xsd cxx-parser --type-map text.map text.xsd</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">text-pskel.hxx;text-pskel.cxx;%(Outputs)</Outputs>
+ </CustomBuild>
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="Readme.txt" />
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project>
\ No newline at end of file diff --git a/xsd/dist/examples/cxx/parser/mixed/mixed-10.0.vcxproj.filters b/xsd/dist/examples/cxx/parser/mixed/mixed-10.0.vcxproj.filters new file mode 100644 index 0000000..9d5bb36 --- /dev/null +++ b/xsd/dist/examples/cxx/parser/mixed/mixed-10.0.vcxproj.filters @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="Source Files">
+ <UniqueIdentifier>{8E9A9B27-1882-4B49-9451-345FEED45AEE}</UniqueIdentifier>
+ <Extensions>cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+ </Filter>
+ <Filter Include="Header Files">
+ <UniqueIdentifier>{0BDCEBD5-F78D-437D-BED5-4507831FA9E8}</UniqueIdentifier>
+ <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
+ </Filter>
+ <Filter Include="Schema Files">
+ <UniqueIdentifier>{748ddcb3-bd88-48b4-b396-d1d3fef8a4e6}</UniqueIdentifier>
+ <Extensions>xsd</Extensions>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="driver.cxx">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="text-pskel.cxx">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="anchor.hxx">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="text-pskel.hxx">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="Readme.txt" />
+ </ItemGroup>
+ <ItemGroup>
+ <CustomBuild Include="text.xsd">
+ <Filter>Schema Files</Filter>
+ </CustomBuild>
+ </ItemGroup>
+</Project>
\ No newline at end of file diff --git a/xsd/dist/examples/cxx/parser/mixed/mixed-7.1.vcproj b/xsd/dist/examples/cxx/parser/mixed/mixed-7.1.vcproj new file mode 100644 index 0000000..09f05f1 --- /dev/null +++ b/xsd/dist/examples/cxx/parser/mixed/mixed-7.1.vcproj @@ -0,0 +1,165 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="mixed"
+ ProjectGUID="{304FD6A7-6C73-41C3-B489-97FD5E635CCB}"
+ RootNamespace="mixed"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="TRUE"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="5"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="4"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="TRUE"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="4"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="3"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{8E9A9B27-1882-4B49-9451-345FEED45AEE}">
+ <File
+ RelativePath=".\driver.cxx">
+ </File>
+ <File
+ RelativePath=".\text-pskel.cxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{0BDCEBD5-F78D-437D-BED5-4507831FA9E8}">
+ <File
+ RelativePath=".\anchor.hxx">
+ </File>
+ <File
+ RelativePath=".\text-pskel.hxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd">
+ <File
+ RelativePath=".\text.xsd">
+ <FileConfiguration
+ Name="Debug|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd text.xsd"
+ CommandLine="xsd cxx-parser --type-map text.map text.xsd"
+ Outputs="text-pskel.hxx;text-pskel.cxx"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd text.xsd"
+ CommandLine="xsd cxx-parser --type-map text.map text.xsd"
+ Outputs="text-pskel.hxx;text-pskel.cxx"/>
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/parser/mixed/mixed-8.0.vcproj b/xsd/dist/examples/cxx/parser/mixed/mixed-8.0.vcproj new file mode 100644 index 0000000..7a3a9fc --- /dev/null +++ b/xsd/dist/examples/cxx/parser/mixed/mixed-8.0.vcproj @@ -0,0 +1,423 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="mixed"
+ ProjectGUID="{304FD6A7-6C73-41C3-B489-97FD5E635CCB}"
+ RootNamespace="mixed"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{8E9A9B27-1882-4B49-9451-345FEED45AEE}"
+ >
+ <File
+ RelativePath=".\driver.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\text-pskel.cxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{0BDCEBD5-F78D-437D-BED5-4507831FA9E8}"
+ >
+ <File
+ RelativePath=".\anchor.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\text-pskel.hxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd"
+ >
+ <File
+ RelativePath=".\text.xsd"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd text.xsd"
+ CommandLine="xsd cxx-parser --type-map text.map text.xsd"
+ Outputs="text-pskel.hxx;text-pskel.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd text.xsd"
+ CommandLine="xsd cxx-parser --type-map text.map text.xsd"
+ Outputs="text-pskel.hxx;text-pskel.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd text.xsd"
+ CommandLine="xsd cxx-parser --type-map text.map text.xsd"
+ Outputs="text-pskel.hxx;text-pskel.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd text.xsd"
+ CommandLine="xsd cxx-parser --type-map text.map text.xsd"
+ Outputs="text-pskel.hxx;text-pskel.cxx"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/parser/mixed/mixed-9.0.vcproj b/xsd/dist/examples/cxx/parser/mixed/mixed-9.0.vcproj new file mode 100644 index 0000000..a283dad --- /dev/null +++ b/xsd/dist/examples/cxx/parser/mixed/mixed-9.0.vcproj @@ -0,0 +1,420 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="mixed"
+ ProjectGUID="{304FD6A7-6C73-41C3-B489-97FD5E635CCB}"
+ RootNamespace="mixed"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{8E9A9B27-1882-4B49-9451-345FEED45AEE}"
+ >
+ <File
+ RelativePath=".\driver.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\text-pskel.cxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{0BDCEBD5-F78D-437D-BED5-4507831FA9E8}"
+ >
+ <File
+ RelativePath=".\anchor.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\text-pskel.hxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd"
+ >
+ <File
+ RelativePath=".\text.xsd"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd text.xsd"
+ CommandLine="xsd cxx-parser --type-map text.map text.xsd"
+ Outputs="text-pskel.hxx;text-pskel.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd text.xsd"
+ CommandLine="xsd cxx-parser --type-map text.map text.xsd"
+ Outputs="text-pskel.hxx;text-pskel.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd text.xsd"
+ CommandLine="xsd cxx-parser --type-map text.map text.xsd"
+ Outputs="text-pskel.hxx;text-pskel.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd text.xsd"
+ CommandLine="xsd cxx-parser --type-map text.map text.xsd"
+ Outputs="text-pskel.hxx;text-pskel.cxx"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/parser/mixed/mixed-xerces2-7.1.vcproj b/xsd/dist/examples/cxx/parser/mixed/mixed-xerces2-7.1.vcproj new file mode 100644 index 0000000..1aa766f --- /dev/null +++ b/xsd/dist/examples/cxx/parser/mixed/mixed-xerces2-7.1.vcproj @@ -0,0 +1,165 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="mixed"
+ ProjectGUID="{304FD6A7-6C73-41C3-B489-97FD5E635CCB}"
+ RootNamespace="mixed"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="TRUE"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="5"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="4"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="TRUE"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="4"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="3"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{8E9A9B27-1882-4B49-9451-345FEED45AEE}">
+ <File
+ RelativePath=".\driver.cxx">
+ </File>
+ <File
+ RelativePath=".\text-pskel.cxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{0BDCEBD5-F78D-437D-BED5-4507831FA9E8}">
+ <File
+ RelativePath=".\anchor.hxx">
+ </File>
+ <File
+ RelativePath=".\text-pskel.hxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd">
+ <File
+ RelativePath=".\text.xsd">
+ <FileConfiguration
+ Name="Debug|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd text.xsd"
+ CommandLine="xsd cxx-parser --type-map text.map text.xsd"
+ Outputs="text-pskel.hxx;text-pskel.cxx"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd text.xsd"
+ CommandLine="xsd cxx-parser --type-map text.map text.xsd"
+ Outputs="text-pskel.hxx;text-pskel.cxx"/>
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/parser/mixed/mixed-xerces2-8.0.vcproj b/xsd/dist/examples/cxx/parser/mixed/mixed-xerces2-8.0.vcproj new file mode 100644 index 0000000..49476a1 --- /dev/null +++ b/xsd/dist/examples/cxx/parser/mixed/mixed-xerces2-8.0.vcproj @@ -0,0 +1,423 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="mixed"
+ ProjectGUID="{304FD6A7-6C73-41C3-B489-97FD5E635CCB}"
+ RootNamespace="mixed"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{8E9A9B27-1882-4B49-9451-345FEED45AEE}"
+ >
+ <File
+ RelativePath=".\driver.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\text-pskel.cxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{0BDCEBD5-F78D-437D-BED5-4507831FA9E8}"
+ >
+ <File
+ RelativePath=".\anchor.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\text-pskel.hxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd"
+ >
+ <File
+ RelativePath=".\text.xsd"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd text.xsd"
+ CommandLine="xsd cxx-parser --type-map text.map text.xsd"
+ Outputs="text-pskel.hxx;text-pskel.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd text.xsd"
+ CommandLine="xsd cxx-parser --type-map text.map text.xsd"
+ Outputs="text-pskel.hxx;text-pskel.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd text.xsd"
+ CommandLine="xsd cxx-parser --type-map text.map text.xsd"
+ Outputs="text-pskel.hxx;text-pskel.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd text.xsd"
+ CommandLine="xsd cxx-parser --type-map text.map text.xsd"
+ Outputs="text-pskel.hxx;text-pskel.cxx"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/parser/mixed/mixed-xerces2-9.0.vcproj b/xsd/dist/examples/cxx/parser/mixed/mixed-xerces2-9.0.vcproj new file mode 100644 index 0000000..de84d74 --- /dev/null +++ b/xsd/dist/examples/cxx/parser/mixed/mixed-xerces2-9.0.vcproj @@ -0,0 +1,420 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="mixed"
+ ProjectGUID="{304FD6A7-6C73-41C3-B489-97FD5E635CCB}"
+ RootNamespace="mixed"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{8E9A9B27-1882-4B49-9451-345FEED45AEE}"
+ >
+ <File
+ RelativePath=".\driver.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\text-pskel.cxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{0BDCEBD5-F78D-437D-BED5-4507831FA9E8}"
+ >
+ <File
+ RelativePath=".\anchor.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\text-pskel.hxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd"
+ >
+ <File
+ RelativePath=".\text.xsd"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd text.xsd"
+ CommandLine="xsd cxx-parser --type-map text.map text.xsd"
+ Outputs="text-pskel.hxx;text-pskel.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd text.xsd"
+ CommandLine="xsd cxx-parser --type-map text.map text.xsd"
+ Outputs="text-pskel.hxx;text-pskel.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd text.xsd"
+ CommandLine="xsd cxx-parser --type-map text.map text.xsd"
+ Outputs="text-pskel.hxx;text-pskel.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd text.xsd"
+ CommandLine="xsd cxx-parser --type-map text.map text.xsd"
+ Outputs="text-pskel.hxx;text-pskel.cxx"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/parser/mixin/makefile b/xsd/dist/examples/cxx/parser/mixin/makefile new file mode 100644 index 0000000..551519d --- /dev/null +++ b/xsd/dist/examples/cxx/parser/mixin/makefile @@ -0,0 +1,30 @@ +root := ../../.. + +include $(root)/build/cxx/rules.make +include $(root)/build/xsd/parser-rules.make + +override XSDFLAGS += --type-map schema.map + + +# Build. +# +driver: driver.o schema-pskel.o + +driver.o: driver.cxx schema-pskel.hxx types.hxx +schema-pskel.o: schema-pskel.cxx schema-pskel.hxx types.hxx + +schema-pskel.hxx schema-pskel.cxx: schema.xsd schema.map + +# Test. +# +.PHONY: test +test: driver instance.xml + ./driver instance.xml + + +# Clean. +# +.PHONY: clean +clean: + rm -f schema-pskel.?xx schema-pskel.o driver.o driver + diff --git a/xsd/dist/examples/cxx/parser/mixin/mixin-10.0.vcxproj b/xsd/dist/examples/cxx/parser/mixin/mixin-10.0.vcxproj new file mode 100644 index 0000000..1b2f0f9 --- /dev/null +++ b/xsd/dist/examples/cxx/parser/mixin/mixin-10.0.vcxproj @@ -0,0 +1,206 @@ +<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectName>mixin</ProjectName>
+ <ProjectGuid>{8CCA6181-F2CE-4E5E-A20E-4E1E53A35125}</ProjectGuid>
+ <RootNamespace>mixin</RootNamespace>
+ <Keyword>Win32Proj</Keyword>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">driver</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">driver</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">driver</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">driver</TargetName>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Debug\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Debug\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)\$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)\$(Configuration)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Release\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Release\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)\$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)\$(Configuration)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>xerces-c_3D.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)driver.pdb</ProgramDatabaseFile>
+ <SubSystem>Console</SubSystem>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>xerces-c_3D.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)driver.pdb</ProgramDatabaseFile>
+ <SubSystem>Console</SubSystem>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>xerces-c_3.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>xerces-c_3.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="driver.cxx" />
+ <ClCompile Include="schema-pskel.cxx" />
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="schema-pskel.hxx" />
+ <ClInclude Include="types.hxx" />
+ </ItemGroup>
+ <ItemGroup>
+ <CustomBuild Include="schema.xsd">
+ <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">xsd schema.xsd</Message>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">xsd cxx-parser --type-map schema.map schema.xsd</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">schema-pskel.hxx;schema-pskel.cxx;%(Outputs)</Outputs>
+ <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">xsd schema.xsd</Message>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">xsd cxx-parser --type-map schema.map schema.xsd</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">schema-pskel.hxx;schema-pskel.cxx;%(Outputs)</Outputs>
+ <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">xsd schema.xsd</Message>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">xsd cxx-parser --type-map schema.map schema.xsd</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">schema-pskel.hxx;schema-pskel.cxx;%(Outputs)</Outputs>
+ <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">xsd schema.xsd</Message>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">xsd cxx-parser --type-map schema.map schema.xsd</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">schema-pskel.hxx;schema-pskel.cxx;%(Outputs)</Outputs>
+ </CustomBuild>
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="Readme.txt" />
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project>
\ No newline at end of file diff --git a/xsd/dist/examples/cxx/parser/mixin/mixin-10.0.vcxproj.filters b/xsd/dist/examples/cxx/parser/mixin/mixin-10.0.vcxproj.filters new file mode 100644 index 0000000..4fd62ea --- /dev/null +++ b/xsd/dist/examples/cxx/parser/mixin/mixin-10.0.vcxproj.filters @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="Source Files">
+ <UniqueIdentifier>{4BF1C3D0-33B1-4924-9F8C-4DD7B7765D82}</UniqueIdentifier>
+ <Extensions>cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+ </Filter>
+ <Filter Include="Header Files">
+ <UniqueIdentifier>{A4012AA7-A8FE-4CE8-9BB0-1DBA14C2CEAD}</UniqueIdentifier>
+ <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
+ </Filter>
+ <Filter Include="Schema Files">
+ <UniqueIdentifier>{1772a873-01ce-415d-a4e7-b107ecfb3d0f}</UniqueIdentifier>
+ <Extensions>xsd</Extensions>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="driver.cxx">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="schema-pskel.cxx">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="schema-pskel.hxx">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="types.hxx">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="Readme.txt" />
+ </ItemGroup>
+ <ItemGroup>
+ <CustomBuild Include="schema.xsd">
+ <Filter>Schema Files</Filter>
+ </CustomBuild>
+ </ItemGroup>
+</Project>
\ No newline at end of file diff --git a/xsd/dist/examples/cxx/parser/mixin/mixin-7.1.vcproj b/xsd/dist/examples/cxx/parser/mixin/mixin-7.1.vcproj new file mode 100644 index 0000000..0dda903 --- /dev/null +++ b/xsd/dist/examples/cxx/parser/mixin/mixin-7.1.vcproj @@ -0,0 +1,165 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="mixin"
+ ProjectGUID="{8CCA6181-F2CE-4E5E-A20E-4E1E53A35125}"
+ RootNamespace="mixin"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="TRUE"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="5"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="4"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="TRUE"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="4"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="3"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{4BF1C3D0-33B1-4924-9F8C-4DD7B7765D82}">
+ <File
+ RelativePath=".\driver.cxx">
+ </File>
+ <File
+ RelativePath=".\schema-pskel.cxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{A4012AA7-A8FE-4CE8-9BB0-1DBA14C2CEAD}">
+ <File
+ RelativePath=".\types.hxx">
+ </File>
+ <File
+ RelativePath=".\schema-pskel.hxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd">
+ <File
+ RelativePath=".\schema.xsd">
+ <FileConfiguration
+ Name="Debug|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd schema.xsd"
+ CommandLine="xsd cxx-parser --type-map schema.map schema.xsd"
+ Outputs="schema-pskel.hxx;schema-pskel.cxx"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd schema.xsd"
+ CommandLine="xsd cxx-parser --type-map schema.map schema.xsd"
+ Outputs="schema-pskel.hxx;schema-pskel.cxx"/>
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/parser/mixin/mixin-8.0.vcproj b/xsd/dist/examples/cxx/parser/mixin/mixin-8.0.vcproj new file mode 100644 index 0000000..558f449 --- /dev/null +++ b/xsd/dist/examples/cxx/parser/mixin/mixin-8.0.vcproj @@ -0,0 +1,423 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="mixin"
+ ProjectGUID="{8CCA6181-F2CE-4E5E-A20E-4E1E53A35125}"
+ RootNamespace="mixin"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{4BF1C3D0-33B1-4924-9F8C-4DD7B7765D82}"
+ >
+ <File
+ RelativePath=".\driver.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\schema-pskel.cxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{A4012AA7-A8FE-4CE8-9BB0-1DBA14C2CEAD}"
+ >
+ <File
+ RelativePath=".\schema-pskel.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\types.hxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd"
+ >
+ <File
+ RelativePath=".\schema.xsd"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd schema.xsd"
+ CommandLine="xsd cxx-parser --type-map schema.map schema.xsd"
+ Outputs="schema-pskel.hxx;schema-pskel.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd schema.xsd"
+ CommandLine="xsd cxx-parser --type-map schema.map schema.xsd"
+ Outputs="schema-pskel.hxx;schema-pskel.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd schema.xsd"
+ CommandLine="xsd cxx-parser --type-map schema.map schema.xsd"
+ Outputs="schema-pskel.hxx;schema-pskel.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd schema.xsd"
+ CommandLine="xsd cxx-parser --type-map schema.map schema.xsd"
+ Outputs="schema-pskel.hxx;schema-pskel.cxx"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/parser/mixin/mixin-9.0.vcproj b/xsd/dist/examples/cxx/parser/mixin/mixin-9.0.vcproj new file mode 100644 index 0000000..2457d2f --- /dev/null +++ b/xsd/dist/examples/cxx/parser/mixin/mixin-9.0.vcproj @@ -0,0 +1,420 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="mixin"
+ ProjectGUID="{8CCA6181-F2CE-4E5E-A20E-4E1E53A35125}"
+ RootNamespace="mixin"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{4BF1C3D0-33B1-4924-9F8C-4DD7B7765D82}"
+ >
+ <File
+ RelativePath=".\driver.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\schema-pskel.cxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{A4012AA7-A8FE-4CE8-9BB0-1DBA14C2CEAD}"
+ >
+ <File
+ RelativePath=".\schema-pskel.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\types.hxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd"
+ >
+ <File
+ RelativePath=".\schema.xsd"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd schema.xsd"
+ CommandLine="xsd cxx-parser --type-map schema.map schema.xsd"
+ Outputs="schema-pskel.hxx;schema-pskel.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd schema.xsd"
+ CommandLine="xsd cxx-parser --type-map schema.map schema.xsd"
+ Outputs="schema-pskel.hxx;schema-pskel.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd schema.xsd"
+ CommandLine="xsd cxx-parser --type-map schema.map schema.xsd"
+ Outputs="schema-pskel.hxx;schema-pskel.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd schema.xsd"
+ CommandLine="xsd cxx-parser --type-map schema.map schema.xsd"
+ Outputs="schema-pskel.hxx;schema-pskel.cxx"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/parser/mixin/mixin-xerces2-7.1.vcproj b/xsd/dist/examples/cxx/parser/mixin/mixin-xerces2-7.1.vcproj new file mode 100644 index 0000000..39e6cdc --- /dev/null +++ b/xsd/dist/examples/cxx/parser/mixin/mixin-xerces2-7.1.vcproj @@ -0,0 +1,165 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="mixin"
+ ProjectGUID="{8CCA6181-F2CE-4E5E-A20E-4E1E53A35125}"
+ RootNamespace="mixin"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="TRUE"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="5"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="4"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="TRUE"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="4"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="3"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{4BF1C3D0-33B1-4924-9F8C-4DD7B7765D82}">
+ <File
+ RelativePath=".\driver.cxx">
+ </File>
+ <File
+ RelativePath=".\schema-pskel.cxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{A4012AA7-A8FE-4CE8-9BB0-1DBA14C2CEAD}">
+ <File
+ RelativePath=".\types.hxx">
+ </File>
+ <File
+ RelativePath=".\schema-pskel.hxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd">
+ <File
+ RelativePath=".\schema.xsd">
+ <FileConfiguration
+ Name="Debug|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd schema.xsd"
+ CommandLine="xsd cxx-parser --type-map schema.map schema.xsd"
+ Outputs="schema-pskel.hxx;schema-pskel.cxx"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd schema.xsd"
+ CommandLine="xsd cxx-parser --type-map schema.map schema.xsd"
+ Outputs="schema-pskel.hxx;schema-pskel.cxx"/>
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/parser/mixin/mixin-xerces2-8.0.vcproj b/xsd/dist/examples/cxx/parser/mixin/mixin-xerces2-8.0.vcproj new file mode 100644 index 0000000..5e4e495 --- /dev/null +++ b/xsd/dist/examples/cxx/parser/mixin/mixin-xerces2-8.0.vcproj @@ -0,0 +1,423 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="mixin"
+ ProjectGUID="{8CCA6181-F2CE-4E5E-A20E-4E1E53A35125}"
+ RootNamespace="mixin"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{4BF1C3D0-33B1-4924-9F8C-4DD7B7765D82}"
+ >
+ <File
+ RelativePath=".\driver.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\schema-pskel.cxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{A4012AA7-A8FE-4CE8-9BB0-1DBA14C2CEAD}"
+ >
+ <File
+ RelativePath=".\schema-pskel.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\types.hxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd"
+ >
+ <File
+ RelativePath=".\schema.xsd"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd schema.xsd"
+ CommandLine="xsd cxx-parser --type-map schema.map schema.xsd"
+ Outputs="schema-pskel.hxx;schema-pskel.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd schema.xsd"
+ CommandLine="xsd cxx-parser --type-map schema.map schema.xsd"
+ Outputs="schema-pskel.hxx;schema-pskel.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd schema.xsd"
+ CommandLine="xsd cxx-parser --type-map schema.map schema.xsd"
+ Outputs="schema-pskel.hxx;schema-pskel.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd schema.xsd"
+ CommandLine="xsd cxx-parser --type-map schema.map schema.xsd"
+ Outputs="schema-pskel.hxx;schema-pskel.cxx"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/parser/mixin/mixin-xerces2-9.0.vcproj b/xsd/dist/examples/cxx/parser/mixin/mixin-xerces2-9.0.vcproj new file mode 100644 index 0000000..e519aef --- /dev/null +++ b/xsd/dist/examples/cxx/parser/mixin/mixin-xerces2-9.0.vcproj @@ -0,0 +1,420 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="mixin"
+ ProjectGUID="{8CCA6181-F2CE-4E5E-A20E-4E1E53A35125}"
+ RootNamespace="mixin"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{4BF1C3D0-33B1-4924-9F8C-4DD7B7765D82}"
+ >
+ <File
+ RelativePath=".\driver.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\schema-pskel.cxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{A4012AA7-A8FE-4CE8-9BB0-1DBA14C2CEAD}"
+ >
+ <File
+ RelativePath=".\schema-pskel.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\types.hxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd"
+ >
+ <File
+ RelativePath=".\schema.xsd"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd schema.xsd"
+ CommandLine="xsd cxx-parser --type-map schema.map schema.xsd"
+ Outputs="schema-pskel.hxx;schema-pskel.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd schema.xsd"
+ CommandLine="xsd cxx-parser --type-map schema.map schema.xsd"
+ Outputs="schema-pskel.hxx;schema-pskel.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd schema.xsd"
+ CommandLine="xsd cxx-parser --type-map schema.map schema.xsd"
+ Outputs="schema-pskel.hxx;schema-pskel.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd schema.xsd"
+ CommandLine="xsd cxx-parser --type-map schema.map schema.xsd"
+ Outputs="schema-pskel.hxx;schema-pskel.cxx"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/parser/multiroot/makefile b/xsd/dist/examples/cxx/parser/multiroot/makefile new file mode 100644 index 0000000..c45e3f3 --- /dev/null +++ b/xsd/dist/examples/cxx/parser/multiroot/makefile @@ -0,0 +1,32 @@ +root := ../../.. + +include $(root)/build/cxx/rules.make +include $(root)/build/xsd/parser-rules.make + +override XSDFLAGS += --type-map protocol.map + +# Build +# +driver: driver.o protocol-pskel.o protocol-pimpl.o + +driver.o: driver.cxx protocol-pimpl.hxx protocol-pskel.hxx protocol.hxx +protocol-pimpl.o: protocol-pimpl.cxx protocol-pimpl.hxx protocol-pskel.hxx protocol.hxx +protocol-pskel.o: protocol-pskel.cxx protocol-pskel.hxx protocol.hxx + +protocol-pskel.hxx protocol-pskel.cxx: protocol.xsd protocol.map + + +# Test. +# +.PHONY: test +test: driver balance.xml withdraw.xml deposit.xml + ./driver balance.xml + ./driver withdraw.xml + ./driver deposit.xml + + +# Clean. +# +.PHONY: clean +clean: + rm -f protocol-pskel.?xx protocol-pimpl.o protocol-pskel.o driver.o driver diff --git a/xsd/dist/examples/cxx/parser/multiroot/multiroot-10.0.vcxproj b/xsd/dist/examples/cxx/parser/multiroot/multiroot-10.0.vcxproj new file mode 100644 index 0000000..bba8fd2 --- /dev/null +++ b/xsd/dist/examples/cxx/parser/multiroot/multiroot-10.0.vcxproj @@ -0,0 +1,212 @@ +<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectName>multiroot</ProjectName>
+ <ProjectGuid>{3AC187DF-4FDF-40B7-9E12-002DC0A15EDB}</ProjectGuid>
+ <RootNamespace>multiroot</RootNamespace>
+ <Keyword>Win32Proj</Keyword>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">driver</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">driver</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">driver</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">driver</TargetName>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Debug\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Debug\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)\$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)\$(Configuration)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Release\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Release\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)\$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)\$(Configuration)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ <RuntimeTypeInfo>true</RuntimeTypeInfo>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>xerces-c_3D.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)driver.pdb</ProgramDatabaseFile>
+ <SubSystem>Console</SubSystem>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ <RuntimeTypeInfo>true</RuntimeTypeInfo>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>xerces-c_3D.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)driver.pdb</ProgramDatabaseFile>
+ <SubSystem>Console</SubSystem>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <RuntimeTypeInfo>true</RuntimeTypeInfo>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>xerces-c_3.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <RuntimeTypeInfo>true</RuntimeTypeInfo>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>xerces-c_3.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="driver.cxx" />
+ <ClCompile Include="protocol-pimpl.cxx" />
+ <ClCompile Include="protocol-pskel.cxx" />
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="protocol-pimpl.hxx" />
+ <ClInclude Include="protocol-pskel.hxx" />
+ <ClInclude Include="protocol.hxx" />
+ </ItemGroup>
+ <ItemGroup>
+ <CustomBuild Include="protocol.xsd">
+ <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">xsd protocol.xsd</Message>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">xsd cxx-parser --type-map protocol.map protocol.xsd</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">protocol-pskel.hxx;protocol-pskel.cxx;%(Outputs)</Outputs>
+ <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">xsd protocol.xsd</Message>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">xsd cxx-parser --type-map protocol.map protocol.xsd</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">protocol-pskel.hxx;protocol-pskel.cxx;%(Outputs)</Outputs>
+ <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">xsd protocol.xsd</Message>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">xsd cxx-parser --type-map protocol.map protocol.xsd</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">protocol-pskel.hxx;protocol-pskel.cxx;%(Outputs)</Outputs>
+ <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">xsd protocol.xsd</Message>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">xsd cxx-parser --type-map protocol.map protocol.xsd</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">protocol-pskel.hxx;protocol-pskel.cxx;%(Outputs)</Outputs>
+ </CustomBuild>
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="Readme.txt" />
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project>
\ No newline at end of file diff --git a/xsd/dist/examples/cxx/parser/multiroot/multiroot-10.0.vcxproj.filters b/xsd/dist/examples/cxx/parser/multiroot/multiroot-10.0.vcxproj.filters new file mode 100644 index 0000000..2b80057 --- /dev/null +++ b/xsd/dist/examples/cxx/parser/multiroot/multiroot-10.0.vcxproj.filters @@ -0,0 +1,47 @@ +<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="Source Files">
+ <UniqueIdentifier>{5CA12033-B9C7-4B8D-95C9-BC1D88DFB211}</UniqueIdentifier>
+ <Extensions>cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+ </Filter>
+ <Filter Include="Header Files">
+ <UniqueIdentifier>{5F7258C7-69F9-44AC-8651-7ABC08C70815}</UniqueIdentifier>
+ <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
+ </Filter>
+ <Filter Include="Schema Files">
+ <UniqueIdentifier>{8a01b14f-5199-4686-a4e8-419ab31b3ea3}</UniqueIdentifier>
+ <Extensions>xsd</Extensions>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="driver.cxx">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="protocol-pimpl.cxx">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="protocol-pskel.cxx">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="protocol-pimpl.hxx">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="protocol-pskel.hxx">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="protocol.hxx">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="Readme.txt" />
+ </ItemGroup>
+ <ItemGroup>
+ <CustomBuild Include="protocol.xsd">
+ <Filter>Schema Files</Filter>
+ </CustomBuild>
+ </ItemGroup>
+</Project>
\ No newline at end of file diff --git a/xsd/dist/examples/cxx/parser/multiroot/multiroot-7.1.vcproj b/xsd/dist/examples/cxx/parser/multiroot/multiroot-7.1.vcproj new file mode 100644 index 0000000..7855b8c --- /dev/null +++ b/xsd/dist/examples/cxx/parser/multiroot/multiroot-7.1.vcproj @@ -0,0 +1,173 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="multiroot"
+ ProjectGUID="{3AC187DF-4FDF-40B7-9E12-002DC0A15EDB}"
+ RootNamespace="multiroot"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="TRUE"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="5"
+ RuntimeTypeInfo="TRUE"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="4"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="TRUE"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="4"
+ RuntimeTypeInfo="TRUE"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="3"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{5CA12033-B9C7-4B8D-95C9-BC1D88DFB211}">
+ <File
+ RelativePath=".\driver.cxx">
+ </File>
+ <File
+ RelativePath=".\protocol-pskel.cxx">
+ </File>
+ <File
+ RelativePath=".\protocol-pimpl.cxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{5F7258C7-69F9-44AC-8651-7ABC08C70815}">
+ <File
+ RelativePath=".\protocol-pskel.hxx">
+ </File>
+ <File
+ RelativePath=".\protocol-pimpl.hxx">
+ </File>
+ <File
+ RelativePath=".\protocol.hxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd">
+ <File
+ RelativePath=".\protocol.xsd">
+ <FileConfiguration
+ Name="Debug|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd protocol.xsd"
+ CommandLine="xsd cxx-parser --type-map protocol.map protocol.xsd"
+ Outputs="protocol-pskel.hxx;protocol-pskel.cxx"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd protocol.xsd"
+ CommandLine="xsd cxx-parser --type-map protocol.map protocol.xsd"
+ Outputs="protocol-pskel.hxx;protocol-pskel.cxx"/>
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/parser/multiroot/multiroot-8.0.vcproj b/xsd/dist/examples/cxx/parser/multiroot/multiroot-8.0.vcproj new file mode 100644 index 0000000..be8f5ef --- /dev/null +++ b/xsd/dist/examples/cxx/parser/multiroot/multiroot-8.0.vcproj @@ -0,0 +1,435 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="multiroot"
+ ProjectGUID="{3AC187DF-4FDF-40B7-9E12-002DC0A15EDB}"
+ RootNamespace="multiroot"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{5CA12033-B9C7-4B8D-95C9-BC1D88DFB211}"
+ >
+ <File
+ RelativePath=".\driver.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\protocol-pimpl.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\protocol-pskel.cxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{5F7258C7-69F9-44AC-8651-7ABC08C70815}"
+ >
+ <File
+ RelativePath=".\protocol-pimpl.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\protocol-pskel.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\protocol.hxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd"
+ >
+ <File
+ RelativePath=".\protocol.xsd"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd protocol.xsd"
+ CommandLine="xsd cxx-parser --type-map protocol.map protocol.xsd"
+ Outputs="protocol-pskel.hxx;protocol-pskel.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd protocol.xsd"
+ CommandLine="xsd cxx-parser --type-map protocol.map protocol.xsd"
+ Outputs="protocol-pskel.hxx;protocol-pskel.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd protocol.xsd"
+ CommandLine="xsd cxx-parser --type-map protocol.map protocol.xsd"
+ Outputs="protocol-pskel.hxx;protocol-pskel.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd protocol.xsd"
+ CommandLine="xsd cxx-parser --type-map protocol.map protocol.xsd"
+ Outputs="protocol-pskel.hxx;protocol-pskel.cxx"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/parser/multiroot/multiroot-9.0.vcproj b/xsd/dist/examples/cxx/parser/multiroot/multiroot-9.0.vcproj new file mode 100644 index 0000000..e77e1f7 --- /dev/null +++ b/xsd/dist/examples/cxx/parser/multiroot/multiroot-9.0.vcproj @@ -0,0 +1,432 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="multiroot"
+ ProjectGUID="{3AC187DF-4FDF-40B7-9E12-002DC0A15EDB}"
+ RootNamespace="multiroot"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{5CA12033-B9C7-4B8D-95C9-BC1D88DFB211}"
+ >
+ <File
+ RelativePath=".\driver.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\protocol-pimpl.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\protocol-pskel.cxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{5F7258C7-69F9-44AC-8651-7ABC08C70815}"
+ >
+ <File
+ RelativePath=".\protocol-pimpl.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\protocol-pskel.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\protocol.hxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd"
+ >
+ <File
+ RelativePath=".\protocol.xsd"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd protocol.xsd"
+ CommandLine="xsd cxx-parser --type-map protocol.map protocol.xsd"
+ Outputs="protocol-pskel.hxx;protocol-pskel.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd protocol.xsd"
+ CommandLine="xsd cxx-parser --type-map protocol.map protocol.xsd"
+ Outputs="protocol-pskel.hxx;protocol-pskel.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd protocol.xsd"
+ CommandLine="xsd cxx-parser --type-map protocol.map protocol.xsd"
+ Outputs="protocol-pskel.hxx;protocol-pskel.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd protocol.xsd"
+ CommandLine="xsd cxx-parser --type-map protocol.map protocol.xsd"
+ Outputs="protocol-pskel.hxx;protocol-pskel.cxx"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/parser/multiroot/multiroot-xerces2-7.1.vcproj b/xsd/dist/examples/cxx/parser/multiroot/multiroot-xerces2-7.1.vcproj new file mode 100644 index 0000000..8510fbb --- /dev/null +++ b/xsd/dist/examples/cxx/parser/multiroot/multiroot-xerces2-7.1.vcproj @@ -0,0 +1,173 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="multiroot"
+ ProjectGUID="{3AC187DF-4FDF-40B7-9E12-002DC0A15EDB}"
+ RootNamespace="multiroot"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="TRUE"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="5"
+ RuntimeTypeInfo="TRUE"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="4"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="TRUE"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="4"
+ RuntimeTypeInfo="TRUE"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="3"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{5CA12033-B9C7-4B8D-95C9-BC1D88DFB211}">
+ <File
+ RelativePath=".\driver.cxx">
+ </File>
+ <File
+ RelativePath=".\protocol-pskel.cxx">
+ </File>
+ <File
+ RelativePath=".\protocol-pimpl.cxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{5F7258C7-69F9-44AC-8651-7ABC08C70815}">
+ <File
+ RelativePath=".\protocol-pskel.hxx">
+ </File>
+ <File
+ RelativePath=".\protocol-pimpl.hxx">
+ </File>
+ <File
+ RelativePath=".\protocol.hxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd">
+ <File
+ RelativePath=".\protocol.xsd">
+ <FileConfiguration
+ Name="Debug|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd protocol.xsd"
+ CommandLine="xsd cxx-parser --type-map protocol.map protocol.xsd"
+ Outputs="protocol-pskel.hxx;protocol-pskel.cxx"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd protocol.xsd"
+ CommandLine="xsd cxx-parser --type-map protocol.map protocol.xsd"
+ Outputs="protocol-pskel.hxx;protocol-pskel.cxx"/>
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/parser/multiroot/multiroot-xerces2-8.0.vcproj b/xsd/dist/examples/cxx/parser/multiroot/multiroot-xerces2-8.0.vcproj new file mode 100644 index 0000000..6deabc8 --- /dev/null +++ b/xsd/dist/examples/cxx/parser/multiroot/multiroot-xerces2-8.0.vcproj @@ -0,0 +1,435 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="multiroot"
+ ProjectGUID="{3AC187DF-4FDF-40B7-9E12-002DC0A15EDB}"
+ RootNamespace="multiroot"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{5CA12033-B9C7-4B8D-95C9-BC1D88DFB211}"
+ >
+ <File
+ RelativePath=".\driver.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\protocol-pimpl.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\protocol-pskel.cxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{5F7258C7-69F9-44AC-8651-7ABC08C70815}"
+ >
+ <File
+ RelativePath=".\protocol-pimpl.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\protocol-pskel.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\protocol.hxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd"
+ >
+ <File
+ RelativePath=".\protocol.xsd"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd protocol.xsd"
+ CommandLine="xsd cxx-parser --type-map protocol.map protocol.xsd"
+ Outputs="protocol-pskel.hxx;protocol-pskel.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd protocol.xsd"
+ CommandLine="xsd cxx-parser --type-map protocol.map protocol.xsd"
+ Outputs="protocol-pskel.hxx;protocol-pskel.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd protocol.xsd"
+ CommandLine="xsd cxx-parser --type-map protocol.map protocol.xsd"
+ Outputs="protocol-pskel.hxx;protocol-pskel.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd protocol.xsd"
+ CommandLine="xsd cxx-parser --type-map protocol.map protocol.xsd"
+ Outputs="protocol-pskel.hxx;protocol-pskel.cxx"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/parser/multiroot/multiroot-xerces2-9.0.vcproj b/xsd/dist/examples/cxx/parser/multiroot/multiroot-xerces2-9.0.vcproj new file mode 100644 index 0000000..c2a7264 --- /dev/null +++ b/xsd/dist/examples/cxx/parser/multiroot/multiroot-xerces2-9.0.vcproj @@ -0,0 +1,432 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="multiroot"
+ ProjectGUID="{3AC187DF-4FDF-40B7-9E12-002DC0A15EDB}"
+ RootNamespace="multiroot"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{5CA12033-B9C7-4B8D-95C9-BC1D88DFB211}"
+ >
+ <File
+ RelativePath=".\driver.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\protocol-pimpl.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\protocol-pskel.cxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{5F7258C7-69F9-44AC-8651-7ABC08C70815}"
+ >
+ <File
+ RelativePath=".\protocol-pimpl.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\protocol-pskel.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\protocol.hxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd"
+ >
+ <File
+ RelativePath=".\protocol.xsd"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd protocol.xsd"
+ CommandLine="xsd cxx-parser --type-map protocol.map protocol.xsd"
+ Outputs="protocol-pskel.hxx;protocol-pskel.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd protocol.xsd"
+ CommandLine="xsd cxx-parser --type-map protocol.map protocol.xsd"
+ Outputs="protocol-pskel.hxx;protocol-pskel.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd protocol.xsd"
+ CommandLine="xsd cxx-parser --type-map protocol.map protocol.xsd"
+ Outputs="protocol-pskel.hxx;protocol-pskel.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd protocol.xsd"
+ CommandLine="xsd cxx-parser --type-map protocol.map protocol.xsd"
+ Outputs="protocol-pskel.hxx;protocol-pskel.cxx"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/parser/parser-10.0.sln b/xsd/dist/examples/cxx/parser/parser-10.0.sln new file mode 100644 index 0000000..a3a35e6 --- /dev/null +++ b/xsd/dist/examples/cxx/parser/parser-10.0.sln @@ -0,0 +1,115 @@ +Microsoft Visual Studio Solution File, Format Version 11.00
+# Visual Studio 2010
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "hello", "hello\hello-10.0.vcxproj", "{683E9D46-FCC7-4163-984B-9F399169CF7F}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "library", "library\library-10.0.vcxproj", "{D66DAC4D-133C-4DB5-923F-C88A961C3C51}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mixin", "mixin\mixin-10.0.vcxproj", "{8CCA6181-F2CE-4E5E-A20E-4E1E53A35125}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mixed", "mixed\mixed-10.0.vcxproj", "{304FD6A7-6C73-41C3-B489-97FD5E635CCB}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "generated", "generated\generated-10.0.vcxproj", "{4277B39A-C9FB-4F10-8223-8DD38053EDA0}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "multiroot", "multiroot\multiroot-10.0.vcxproj", "{3AC187DF-4FDF-40B7-9E12-002DC0A15EDB}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "polymorphism", "polymorphism\polymorphism-10.0.vcxproj", "{E05F914A-490B-4780-9BAB-1ED225B3DBEE}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "polyroot", "polyroot\polyroot-10.0.vcxproj", "{FB2098FC-CE8C-4A6B-A064-E2705324A16A}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wildcard", "wildcard\wildcard-10.0.vcxproj", "{9832425B-38D5-44EC-AED6-3ED4353B24EA}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "performance", "performance\performance-10.0.vcxproj", "{676CB1A8-1060-4B7F-86FA-5F8F01AB80BD}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Debug|x64 = Debug|x64
+ Release|Win32 = Release|Win32
+ Release|x64 = Release|x64
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {683E9D46-FCC7-4163-984B-9F399169CF7F}.Debug|Win32.ActiveCfg = Debug|Win32
+ {683E9D46-FCC7-4163-984B-9F399169CF7F}.Debug|Win32.Build.0 = Debug|Win32
+ {683E9D46-FCC7-4163-984B-9F399169CF7F}.Debug|x64.ActiveCfg = Debug|x64
+ {683E9D46-FCC7-4163-984B-9F399169CF7F}.Debug|x64.Build.0 = Debug|x64
+ {683E9D46-FCC7-4163-984B-9F399169CF7F}.Release|Win32.ActiveCfg = Release|Win32
+ {683E9D46-FCC7-4163-984B-9F399169CF7F}.Release|Win32.Build.0 = Release|Win32
+ {683E9D46-FCC7-4163-984B-9F399169CF7F}.Release|x64.ActiveCfg = Release|x64
+ {683E9D46-FCC7-4163-984B-9F399169CF7F}.Release|x64.Build.0 = Release|x64
+ {D66DAC4D-133C-4DB5-923F-C88A961C3C51}.Debug|Win32.ActiveCfg = Debug|Win32
+ {D66DAC4D-133C-4DB5-923F-C88A961C3C51}.Debug|Win32.Build.0 = Debug|Win32
+ {D66DAC4D-133C-4DB5-923F-C88A961C3C51}.Debug|x64.ActiveCfg = Debug|x64
+ {D66DAC4D-133C-4DB5-923F-C88A961C3C51}.Debug|x64.Build.0 = Debug|x64
+ {D66DAC4D-133C-4DB5-923F-C88A961C3C51}.Release|Win32.ActiveCfg = Release|Win32
+ {D66DAC4D-133C-4DB5-923F-C88A961C3C51}.Release|Win32.Build.0 = Release|Win32
+ {D66DAC4D-133C-4DB5-923F-C88A961C3C51}.Release|x64.ActiveCfg = Release|x64
+ {D66DAC4D-133C-4DB5-923F-C88A961C3C51}.Release|x64.Build.0 = Release|x64
+ {8CCA6181-F2CE-4E5E-A20E-4E1E53A35125}.Debug|Win32.ActiveCfg = Debug|Win32
+ {8CCA6181-F2CE-4E5E-A20E-4E1E53A35125}.Debug|Win32.Build.0 = Debug|Win32
+ {8CCA6181-F2CE-4E5E-A20E-4E1E53A35125}.Debug|x64.ActiveCfg = Debug|x64
+ {8CCA6181-F2CE-4E5E-A20E-4E1E53A35125}.Debug|x64.Build.0 = Debug|x64
+ {8CCA6181-F2CE-4E5E-A20E-4E1E53A35125}.Release|Win32.ActiveCfg = Release|Win32
+ {8CCA6181-F2CE-4E5E-A20E-4E1E53A35125}.Release|Win32.Build.0 = Release|Win32
+ {8CCA6181-F2CE-4E5E-A20E-4E1E53A35125}.Release|x64.ActiveCfg = Release|x64
+ {8CCA6181-F2CE-4E5E-A20E-4E1E53A35125}.Release|x64.Build.0 = Release|x64
+ {304FD6A7-6C73-41C3-B489-97FD5E635CCB}.Debug|Win32.ActiveCfg = Debug|Win32
+ {304FD6A7-6C73-41C3-B489-97FD5E635CCB}.Debug|Win32.Build.0 = Debug|Win32
+ {304FD6A7-6C73-41C3-B489-97FD5E635CCB}.Debug|x64.ActiveCfg = Debug|x64
+ {304FD6A7-6C73-41C3-B489-97FD5E635CCB}.Debug|x64.Build.0 = Debug|x64
+ {304FD6A7-6C73-41C3-B489-97FD5E635CCB}.Release|Win32.ActiveCfg = Release|Win32
+ {304FD6A7-6C73-41C3-B489-97FD5E635CCB}.Release|Win32.Build.0 = Release|Win32
+ {304FD6A7-6C73-41C3-B489-97FD5E635CCB}.Release|x64.ActiveCfg = Release|x64
+ {304FD6A7-6C73-41C3-B489-97FD5E635CCB}.Release|x64.Build.0 = Release|x64
+ {4277B39A-C9FB-4F10-8223-8DD38053EDA0}.Debug|Win32.ActiveCfg = Debug|Win32
+ {4277B39A-C9FB-4F10-8223-8DD38053EDA0}.Debug|Win32.Build.0 = Debug|Win32
+ {4277B39A-C9FB-4F10-8223-8DD38053EDA0}.Debug|x64.ActiveCfg = Debug|x64
+ {4277B39A-C9FB-4F10-8223-8DD38053EDA0}.Debug|x64.Build.0 = Debug|x64
+ {4277B39A-C9FB-4F10-8223-8DD38053EDA0}.Release|Win32.ActiveCfg = Release|Win32
+ {4277B39A-C9FB-4F10-8223-8DD38053EDA0}.Release|Win32.Build.0 = Release|Win32
+ {4277B39A-C9FB-4F10-8223-8DD38053EDA0}.Release|x64.ActiveCfg = Release|x64
+ {4277B39A-C9FB-4F10-8223-8DD38053EDA0}.Release|x64.Build.0 = Release|x64
+ {3AC187DF-4FDF-40B7-9E12-002DC0A15EDB}.Debug|Win32.ActiveCfg = Debug|Win32
+ {3AC187DF-4FDF-40B7-9E12-002DC0A15EDB}.Debug|Win32.Build.0 = Debug|Win32
+ {3AC187DF-4FDF-40B7-9E12-002DC0A15EDB}.Debug|x64.ActiveCfg = Debug|x64
+ {3AC187DF-4FDF-40B7-9E12-002DC0A15EDB}.Debug|x64.Build.0 = Debug|x64
+ {3AC187DF-4FDF-40B7-9E12-002DC0A15EDB}.Release|Win32.ActiveCfg = Release|Win32
+ {3AC187DF-4FDF-40B7-9E12-002DC0A15EDB}.Release|Win32.Build.0 = Release|Win32
+ {3AC187DF-4FDF-40B7-9E12-002DC0A15EDB}.Release|x64.ActiveCfg = Release|x64
+ {3AC187DF-4FDF-40B7-9E12-002DC0A15EDB}.Release|x64.Build.0 = Release|x64
+ {E05F914A-490B-4780-9BAB-1ED225B3DBEE}.Debug|Win32.ActiveCfg = Debug|Win32
+ {E05F914A-490B-4780-9BAB-1ED225B3DBEE}.Debug|Win32.Build.0 = Debug|Win32
+ {E05F914A-490B-4780-9BAB-1ED225B3DBEE}.Debug|x64.ActiveCfg = Debug|x64
+ {E05F914A-490B-4780-9BAB-1ED225B3DBEE}.Debug|x64.Build.0 = Debug|x64
+ {E05F914A-490B-4780-9BAB-1ED225B3DBEE}.Release|Win32.ActiveCfg = Release|Win32
+ {E05F914A-490B-4780-9BAB-1ED225B3DBEE}.Release|Win32.Build.0 = Release|Win32
+ {E05F914A-490B-4780-9BAB-1ED225B3DBEE}.Release|x64.ActiveCfg = Release|x64
+ {E05F914A-490B-4780-9BAB-1ED225B3DBEE}.Release|x64.Build.0 = Release|x64
+ {FB2098FC-CE8C-4A6B-A064-E2705324A16A}.Debug|Win32.ActiveCfg = Debug|Win32
+ {FB2098FC-CE8C-4A6B-A064-E2705324A16A}.Debug|Win32.Build.0 = Debug|Win32
+ {FB2098FC-CE8C-4A6B-A064-E2705324A16A}.Debug|x64.ActiveCfg = Debug|x64
+ {FB2098FC-CE8C-4A6B-A064-E2705324A16A}.Debug|x64.Build.0 = Debug|x64
+ {FB2098FC-CE8C-4A6B-A064-E2705324A16A}.Release|Win32.ActiveCfg = Release|Win32
+ {FB2098FC-CE8C-4A6B-A064-E2705324A16A}.Release|Win32.Build.0 = Release|Win32
+ {FB2098FC-CE8C-4A6B-A064-E2705324A16A}.Release|x64.ActiveCfg = Release|x64
+ {FB2098FC-CE8C-4A6B-A064-E2705324A16A}.Release|x64.Build.0 = Release|x64
+ {9832425B-38D5-44EC-AED6-3ED4353B24EA}.Debug|Win32.ActiveCfg = Debug|Win32
+ {9832425B-38D5-44EC-AED6-3ED4353B24EA}.Debug|Win32.Build.0 = Debug|Win32
+ {9832425B-38D5-44EC-AED6-3ED4353B24EA}.Debug|x64.ActiveCfg = Debug|x64
+ {9832425B-38D5-44EC-AED6-3ED4353B24EA}.Debug|x64.Build.0 = Debug|x64
+ {9832425B-38D5-44EC-AED6-3ED4353B24EA}.Release|Win32.ActiveCfg = Release|Win32
+ {9832425B-38D5-44EC-AED6-3ED4353B24EA}.Release|Win32.Build.0 = Release|Win32
+ {9832425B-38D5-44EC-AED6-3ED4353B24EA}.Release|x64.ActiveCfg = Release|x64
+ {9832425B-38D5-44EC-AED6-3ED4353B24EA}.Release|x64.Build.0 = Release|x64
+ {676CB1A8-1060-4B7F-86FA-5F8F01AB80BD}.Debug|Win32.ActiveCfg = Debug|Win32
+ {676CB1A8-1060-4B7F-86FA-5F8F01AB80BD}.Debug|Win32.Build.0 = Debug|Win32
+ {676CB1A8-1060-4B7F-86FA-5F8F01AB80BD}.Debug|x64.ActiveCfg = Debug|x64
+ {676CB1A8-1060-4B7F-86FA-5F8F01AB80BD}.Debug|x64.Build.0 = Debug|x64
+ {676CB1A8-1060-4B7F-86FA-5F8F01AB80BD}.Release|Win32.ActiveCfg = Release|Win32
+ {676CB1A8-1060-4B7F-86FA-5F8F01AB80BD}.Release|Win32.Build.0 = Release|Win32
+ {676CB1A8-1060-4B7F-86FA-5F8F01AB80BD}.Release|x64.ActiveCfg = Release|x64
+ {676CB1A8-1060-4B7F-86FA-5F8F01AB80BD}.Release|x64.Build.0 = Release|x64
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/xsd/dist/examples/cxx/parser/parser-7.1.sln b/xsd/dist/examples/cxx/parser/parser-7.1.sln new file mode 100644 index 0000000..f274b0b --- /dev/null +++ b/xsd/dist/examples/cxx/parser/parser-7.1.sln @@ -0,0 +1,93 @@ +Microsoft Visual Studio Solution File, Format Version 8.00
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "hello", "hello\hello-7.1.vcproj", "{683E9D46-FCC7-4163-984B-9F399169CF7F}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "library", "library\library-7.1.vcproj", "{D66DAC4D-133C-4DB5-923F-C88A961C3C51}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mixin", "mixin\mixin-7.1.vcproj", "{8CCA6181-F2CE-4E5E-A20E-4E1E53A35125}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mixed", "mixed\mixed-7.1.vcproj", "{304FD6A7-6C73-41C3-B489-97FD5E635CCB}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "generated", "generated\generated-7.1.vcproj", "{4277B39A-C9FB-4F10-8223-8DD38053EDA0}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "multiroot", "multiroot\multiroot-7.1.vcproj", "{3AC187DF-4FDF-40B7-9E12-002DC0A15EDB}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "polymorphism", "polymorphism\polymorphism-7.1.vcproj", "{E05F914A-490B-4780-9BAB-1ED225B3DBEE}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "polyroot", "polyroot\polyroot-7.1.vcproj", "{FB2098FC-CE8C-4A6B-A064-E2705324A16A}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wildcard", "wildcard\wildcard-7.1.vcproj", "{9832425B-38D5-44EC-AED6-3ED4353B24EA}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "performance", "performance\performance-7.1.vcproj", "{676CB1A8-1060-4B7F-86FA-5F8F01AB80BD}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Global
+ GlobalSection(SolutionConfiguration) = preSolution
+ Debug = Debug
+ Release = Release
+ EndGlobalSection
+ GlobalSection(ProjectConfiguration) = postSolution
+ {683E9D46-FCC7-4163-984B-9F399169CF7F}.Debug.ActiveCfg = Debug|Win32
+ {683E9D46-FCC7-4163-984B-9F399169CF7F}.Debug.Build.0 = Debug|Win32
+ {683E9D46-FCC7-4163-984B-9F399169CF7F}.Release.ActiveCfg = Release|Win32
+ {683E9D46-FCC7-4163-984B-9F399169CF7F}.Release.Build.0 = Release|Win32
+ {D66DAC4D-133C-4DB5-923F-C88A961C3C51}.Debug.ActiveCfg = Debug|Win32
+ {D66DAC4D-133C-4DB5-923F-C88A961C3C51}.Debug.Build.0 = Debug|Win32
+ {D66DAC4D-133C-4DB5-923F-C88A961C3C51}.Release.ActiveCfg = Release|Win32
+ {D66DAC4D-133C-4DB5-923F-C88A961C3C51}.Release.Build.0 = Release|Win32
+ {8CCA6181-F2CE-4E5E-A20E-4E1E53A35125}.Debug.ActiveCfg = Debug|Win32
+ {8CCA6181-F2CE-4E5E-A20E-4E1E53A35125}.Debug.Build.0 = Debug|Win32
+ {8CCA6181-F2CE-4E5E-A20E-4E1E53A35125}.Release.ActiveCfg = Release|Win32
+ {8CCA6181-F2CE-4E5E-A20E-4E1E53A35125}.Release.Build.0 = Release|Win32
+ {304FD6A7-6C73-41C3-B489-97FD5E635CCB}.Debug.ActiveCfg = Debug|Win32
+ {304FD6A7-6C73-41C3-B489-97FD5E635CCB}.Debug.Build.0 = Debug|Win32
+ {304FD6A7-6C73-41C3-B489-97FD5E635CCB}.Release.ActiveCfg = Release|Win32
+ {304FD6A7-6C73-41C3-B489-97FD5E635CCB}.Release.Build.0 = Release|Win32
+ {4277B39A-C9FB-4F10-8223-8DD38053EDA0}.Debug.ActiveCfg = Debug|Win32
+ {4277B39A-C9FB-4F10-8223-8DD38053EDA0}.Debug.Build.0 = Debug|Win32
+ {4277B39A-C9FB-4F10-8223-8DD38053EDA0}.Release.ActiveCfg = Release|Win32
+ {4277B39A-C9FB-4F10-8223-8DD38053EDA0}.Release.Build.0 = Release|Win32
+ {3AC187DF-4FDF-40B7-9E12-002DC0A15EDB}.Debug.ActiveCfg = Debug|Win32
+ {3AC187DF-4FDF-40B7-9E12-002DC0A15EDB}.Debug.Build.0 = Debug|Win32
+ {3AC187DF-4FDF-40B7-9E12-002DC0A15EDB}.Release.ActiveCfg = Release|Win32
+ {3AC187DF-4FDF-40B7-9E12-002DC0A15EDB}.Release.Build.0 = Release|Win32
+ {9832425B-38D5-44EC-AED6-3ED4353B24EA}.Debug.ActiveCfg = Debug|Win32
+ {9832425B-38D5-44EC-AED6-3ED4353B24EA}.Debug.Build.0 = Debug|Win32
+ {9832425B-38D5-44EC-AED6-3ED4353B24EA}.Release.ActiveCfg = Release|Win32
+ {9832425B-38D5-44EC-AED6-3ED4353B24EA}.Release.Build.0 = Release|Win32
+ {E05F914A-490B-4780-9BAB-1ED225B3DBEE}.Debug.ActiveCfg = Debug|Win32
+ {E05F914A-490B-4780-9BAB-1ED225B3DBEE}.Debug.Build.0 = Debug|Win32
+ {E05F914A-490B-4780-9BAB-1ED225B3DBEE}.Release.ActiveCfg = Release|Win32
+ {E05F914A-490B-4780-9BAB-1ED225B3DBEE}.Release.Build.0 = Release|Win32
+ {FB2098FC-CE8C-4A6B-A064-E2705324A16A}.Debug.ActiveCfg = Debug|Win32
+ {FB2098FC-CE8C-4A6B-A064-E2705324A16A}.Debug.Build.0 = Debug|Win32
+ {FB2098FC-CE8C-4A6B-A064-E2705324A16A}.Release.ActiveCfg = Release|Win32
+ {FB2098FC-CE8C-4A6B-A064-E2705324A16A}.Release.Build.0 = Release|Win32
+ {676CB1A8-1060-4B7F-86FA-5F8F01AB80BD}.Debug.ActiveCfg = Debug|Win32
+ {676CB1A8-1060-4B7F-86FA-5F8F01AB80BD}.Debug.Build.0 = Debug|Win32
+ {676CB1A8-1060-4B7F-86FA-5F8F01AB80BD}.Release.ActiveCfg = Release|Win32
+ {676CB1A8-1060-4B7F-86FA-5F8F01AB80BD}.Release.Build.0 = Release|Win32
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ EndGlobalSection
+ GlobalSection(ExtensibilityAddIns) = postSolution
+ EndGlobalSection
+EndGlobal
diff --git a/xsd/dist/examples/cxx/parser/parser-8.0.sln b/xsd/dist/examples/cxx/parser/parser-8.0.sln new file mode 100644 index 0000000..bbb3691 --- /dev/null +++ b/xsd/dist/examples/cxx/parser/parser-8.0.sln @@ -0,0 +1,115 @@ +Microsoft Visual Studio Solution File, Format Version 9.00
+# Visual Studio 2005
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "hello", "hello\hello-8.0.vcproj", "{683E9D46-FCC7-4163-984B-9F399169CF7F}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "library", "library\library-8.0.vcproj", "{D66DAC4D-133C-4DB5-923F-C88A961C3C51}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mixin", "mixin\mixin-8.0.vcproj", "{8CCA6181-F2CE-4E5E-A20E-4E1E53A35125}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mixed", "mixed\mixed-8.0.vcproj", "{304FD6A7-6C73-41C3-B489-97FD5E635CCB}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "generated", "generated\generated-8.0.vcproj", "{4277B39A-C9FB-4F10-8223-8DD38053EDA0}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "multiroot", "multiroot\multiroot-8.0.vcproj", "{3AC187DF-4FDF-40B7-9E12-002DC0A15EDB}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "polymorphism", "polymorphism\polymorphism-8.0.vcproj", "{E05F914A-490B-4780-9BAB-1ED225B3DBEE}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "polyroot", "polyroot\polyroot-8.0.vcproj", "{FB2098FC-CE8C-4A6B-A064-E2705324A16A}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wildcard", "wildcard\wildcard-8.0.vcproj", "{9832425B-38D5-44EC-AED6-3ED4353B24EA}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "performance", "performance\performance-8.0.vcproj", "{676CB1A8-1060-4B7F-86FA-5F8F01AB80BD}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Debug|x64 = Debug|x64
+ Release|Win32 = Release|Win32
+ Release|x64 = Release|x64
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {683E9D46-FCC7-4163-984B-9F399169CF7F}.Debug|Win32.ActiveCfg = Debug|Win32
+ {683E9D46-FCC7-4163-984B-9F399169CF7F}.Debug|Win32.Build.0 = Debug|Win32
+ {683E9D46-FCC7-4163-984B-9F399169CF7F}.Debug|x64.ActiveCfg = Debug|x64
+ {683E9D46-FCC7-4163-984B-9F399169CF7F}.Debug|x64.Build.0 = Debug|x64
+ {683E9D46-FCC7-4163-984B-9F399169CF7F}.Release|Win32.ActiveCfg = Release|Win32
+ {683E9D46-FCC7-4163-984B-9F399169CF7F}.Release|Win32.Build.0 = Release|Win32
+ {683E9D46-FCC7-4163-984B-9F399169CF7F}.Release|x64.ActiveCfg = Release|x64
+ {683E9D46-FCC7-4163-984B-9F399169CF7F}.Release|x64.Build.0 = Release|x64
+ {D66DAC4D-133C-4DB5-923F-C88A961C3C51}.Debug|Win32.ActiveCfg = Debug|Win32
+ {D66DAC4D-133C-4DB5-923F-C88A961C3C51}.Debug|Win32.Build.0 = Debug|Win32
+ {D66DAC4D-133C-4DB5-923F-C88A961C3C51}.Debug|x64.ActiveCfg = Debug|x64
+ {D66DAC4D-133C-4DB5-923F-C88A961C3C51}.Debug|x64.Build.0 = Debug|x64
+ {D66DAC4D-133C-4DB5-923F-C88A961C3C51}.Release|Win32.ActiveCfg = Release|Win32
+ {D66DAC4D-133C-4DB5-923F-C88A961C3C51}.Release|Win32.Build.0 = Release|Win32
+ {D66DAC4D-133C-4DB5-923F-C88A961C3C51}.Release|x64.ActiveCfg = Release|x64
+ {D66DAC4D-133C-4DB5-923F-C88A961C3C51}.Release|x64.Build.0 = Release|x64
+ {8CCA6181-F2CE-4E5E-A20E-4E1E53A35125}.Debug|Win32.ActiveCfg = Debug|Win32
+ {8CCA6181-F2CE-4E5E-A20E-4E1E53A35125}.Debug|Win32.Build.0 = Debug|Win32
+ {8CCA6181-F2CE-4E5E-A20E-4E1E53A35125}.Debug|x64.ActiveCfg = Debug|x64
+ {8CCA6181-F2CE-4E5E-A20E-4E1E53A35125}.Debug|x64.Build.0 = Debug|x64
+ {8CCA6181-F2CE-4E5E-A20E-4E1E53A35125}.Release|Win32.ActiveCfg = Release|Win32
+ {8CCA6181-F2CE-4E5E-A20E-4E1E53A35125}.Release|Win32.Build.0 = Release|Win32
+ {8CCA6181-F2CE-4E5E-A20E-4E1E53A35125}.Release|x64.ActiveCfg = Release|x64
+ {8CCA6181-F2CE-4E5E-A20E-4E1E53A35125}.Release|x64.Build.0 = Release|x64
+ {304FD6A7-6C73-41C3-B489-97FD5E635CCB}.Debug|Win32.ActiveCfg = Debug|Win32
+ {304FD6A7-6C73-41C3-B489-97FD5E635CCB}.Debug|Win32.Build.0 = Debug|Win32
+ {304FD6A7-6C73-41C3-B489-97FD5E635CCB}.Debug|x64.ActiveCfg = Debug|x64
+ {304FD6A7-6C73-41C3-B489-97FD5E635CCB}.Debug|x64.Build.0 = Debug|x64
+ {304FD6A7-6C73-41C3-B489-97FD5E635CCB}.Release|Win32.ActiveCfg = Release|Win32
+ {304FD6A7-6C73-41C3-B489-97FD5E635CCB}.Release|Win32.Build.0 = Release|Win32
+ {304FD6A7-6C73-41C3-B489-97FD5E635CCB}.Release|x64.ActiveCfg = Release|x64
+ {304FD6A7-6C73-41C3-B489-97FD5E635CCB}.Release|x64.Build.0 = Release|x64
+ {4277B39A-C9FB-4F10-8223-8DD38053EDA0}.Debug|Win32.ActiveCfg = Debug|Win32
+ {4277B39A-C9FB-4F10-8223-8DD38053EDA0}.Debug|Win32.Build.0 = Debug|Win32
+ {4277B39A-C9FB-4F10-8223-8DD38053EDA0}.Debug|x64.ActiveCfg = Debug|x64
+ {4277B39A-C9FB-4F10-8223-8DD38053EDA0}.Debug|x64.Build.0 = Debug|x64
+ {4277B39A-C9FB-4F10-8223-8DD38053EDA0}.Release|Win32.ActiveCfg = Release|Win32
+ {4277B39A-C9FB-4F10-8223-8DD38053EDA0}.Release|Win32.Build.0 = Release|Win32
+ {4277B39A-C9FB-4F10-8223-8DD38053EDA0}.Release|x64.ActiveCfg = Release|x64
+ {4277B39A-C9FB-4F10-8223-8DD38053EDA0}.Release|x64.Build.0 = Release|x64
+ {3AC187DF-4FDF-40B7-9E12-002DC0A15EDB}.Debug|Win32.ActiveCfg = Debug|Win32
+ {3AC187DF-4FDF-40B7-9E12-002DC0A15EDB}.Debug|Win32.Build.0 = Debug|Win32
+ {3AC187DF-4FDF-40B7-9E12-002DC0A15EDB}.Debug|x64.ActiveCfg = Debug|x64
+ {3AC187DF-4FDF-40B7-9E12-002DC0A15EDB}.Debug|x64.Build.0 = Debug|x64
+ {3AC187DF-4FDF-40B7-9E12-002DC0A15EDB}.Release|Win32.ActiveCfg = Release|Win32
+ {3AC187DF-4FDF-40B7-9E12-002DC0A15EDB}.Release|Win32.Build.0 = Release|Win32
+ {3AC187DF-4FDF-40B7-9E12-002DC0A15EDB}.Release|x64.ActiveCfg = Release|x64
+ {3AC187DF-4FDF-40B7-9E12-002DC0A15EDB}.Release|x64.Build.0 = Release|x64
+ {E05F914A-490B-4780-9BAB-1ED225B3DBEE}.Debug|Win32.ActiveCfg = Debug|Win32
+ {E05F914A-490B-4780-9BAB-1ED225B3DBEE}.Debug|Win32.Build.0 = Debug|Win32
+ {E05F914A-490B-4780-9BAB-1ED225B3DBEE}.Debug|x64.ActiveCfg = Debug|x64
+ {E05F914A-490B-4780-9BAB-1ED225B3DBEE}.Debug|x64.Build.0 = Debug|x64
+ {E05F914A-490B-4780-9BAB-1ED225B3DBEE}.Release|Win32.ActiveCfg = Release|Win32
+ {E05F914A-490B-4780-9BAB-1ED225B3DBEE}.Release|Win32.Build.0 = Release|Win32
+ {E05F914A-490B-4780-9BAB-1ED225B3DBEE}.Release|x64.ActiveCfg = Release|x64
+ {E05F914A-490B-4780-9BAB-1ED225B3DBEE}.Release|x64.Build.0 = Release|x64
+ {FB2098FC-CE8C-4A6B-A064-E2705324A16A}.Debug|Win32.ActiveCfg = Debug|Win32
+ {FB2098FC-CE8C-4A6B-A064-E2705324A16A}.Debug|Win32.Build.0 = Debug|Win32
+ {FB2098FC-CE8C-4A6B-A064-E2705324A16A}.Debug|x64.ActiveCfg = Debug|x64
+ {FB2098FC-CE8C-4A6B-A064-E2705324A16A}.Debug|x64.Build.0 = Debug|x64
+ {FB2098FC-CE8C-4A6B-A064-E2705324A16A}.Release|Win32.ActiveCfg = Release|Win32
+ {FB2098FC-CE8C-4A6B-A064-E2705324A16A}.Release|Win32.Build.0 = Release|Win32
+ {FB2098FC-CE8C-4A6B-A064-E2705324A16A}.Release|x64.ActiveCfg = Release|x64
+ {FB2098FC-CE8C-4A6B-A064-E2705324A16A}.Release|x64.Build.0 = Release|x64
+ {9832425B-38D5-44EC-AED6-3ED4353B24EA}.Debug|Win32.ActiveCfg = Debug|Win32
+ {9832425B-38D5-44EC-AED6-3ED4353B24EA}.Debug|Win32.Build.0 = Debug|Win32
+ {9832425B-38D5-44EC-AED6-3ED4353B24EA}.Debug|x64.ActiveCfg = Debug|x64
+ {9832425B-38D5-44EC-AED6-3ED4353B24EA}.Debug|x64.Build.0 = Debug|x64
+ {9832425B-38D5-44EC-AED6-3ED4353B24EA}.Release|Win32.ActiveCfg = Release|Win32
+ {9832425B-38D5-44EC-AED6-3ED4353B24EA}.Release|Win32.Build.0 = Release|Win32
+ {9832425B-38D5-44EC-AED6-3ED4353B24EA}.Release|x64.ActiveCfg = Release|x64
+ {9832425B-38D5-44EC-AED6-3ED4353B24EA}.Release|x64.Build.0 = Release|x64
+ {676CB1A8-1060-4B7F-86FA-5F8F01AB80BD}.Debug|Win32.ActiveCfg = Debug|Win32
+ {676CB1A8-1060-4B7F-86FA-5F8F01AB80BD}.Debug|Win32.Build.0 = Debug|Win32
+ {676CB1A8-1060-4B7F-86FA-5F8F01AB80BD}.Debug|x64.ActiveCfg = Debug|x64
+ {676CB1A8-1060-4B7F-86FA-5F8F01AB80BD}.Debug|x64.Build.0 = Debug|x64
+ {676CB1A8-1060-4B7F-86FA-5F8F01AB80BD}.Release|Win32.ActiveCfg = Release|Win32
+ {676CB1A8-1060-4B7F-86FA-5F8F01AB80BD}.Release|Win32.Build.0 = Release|Win32
+ {676CB1A8-1060-4B7F-86FA-5F8F01AB80BD}.Release|x64.ActiveCfg = Release|x64
+ {676CB1A8-1060-4B7F-86FA-5F8F01AB80BD}.Release|x64.Build.0 = Release|x64
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/xsd/dist/examples/cxx/parser/parser-9.0.sln b/xsd/dist/examples/cxx/parser/parser-9.0.sln new file mode 100644 index 0000000..aa5f95d --- /dev/null +++ b/xsd/dist/examples/cxx/parser/parser-9.0.sln @@ -0,0 +1,115 @@ +Microsoft Visual Studio Solution File, Format Version 10.00
+# Visual Studio 2008
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "hello", "hello\hello-9.0.vcproj", "{683E9D46-FCC7-4163-984B-9F399169CF7F}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "library", "library\library-9.0.vcproj", "{D66DAC4D-133C-4DB5-923F-C88A961C3C51}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mixin", "mixin\mixin-9.0.vcproj", "{8CCA6181-F2CE-4E5E-A20E-4E1E53A35125}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mixed", "mixed\mixed-9.0.vcproj", "{304FD6A7-6C73-41C3-B489-97FD5E635CCB}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "generated", "generated\generated-9.0.vcproj", "{4277B39A-C9FB-4F10-8223-8DD38053EDA0}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "multiroot", "multiroot\multiroot-9.0.vcproj", "{3AC187DF-4FDF-40B7-9E12-002DC0A15EDB}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "polymorphism", "polymorphism\polymorphism-9.0.vcproj", "{E05F914A-490B-4780-9BAB-1ED225B3DBEE}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "polyroot", "polyroot\polyroot-9.0.vcproj", "{FB2098FC-CE8C-4A6B-A064-E2705324A16A}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wildcard", "wildcard\wildcard-9.0.vcproj", "{9832425B-38D5-44EC-AED6-3ED4353B24EA}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "performance", "performance\performance-9.0.vcproj", "{676CB1A8-1060-4B7F-86FA-5F8F01AB80BD}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Debug|x64 = Debug|x64
+ Release|Win32 = Release|Win32
+ Release|x64 = Release|x64
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {683E9D46-FCC7-4163-984B-9F399169CF7F}.Debug|Win32.ActiveCfg = Debug|Win32
+ {683E9D46-FCC7-4163-984B-9F399169CF7F}.Debug|Win32.Build.0 = Debug|Win32
+ {683E9D46-FCC7-4163-984B-9F399169CF7F}.Debug|x64.ActiveCfg = Debug|x64
+ {683E9D46-FCC7-4163-984B-9F399169CF7F}.Debug|x64.Build.0 = Debug|x64
+ {683E9D46-FCC7-4163-984B-9F399169CF7F}.Release|Win32.ActiveCfg = Release|Win32
+ {683E9D46-FCC7-4163-984B-9F399169CF7F}.Release|Win32.Build.0 = Release|Win32
+ {683E9D46-FCC7-4163-984B-9F399169CF7F}.Release|x64.ActiveCfg = Release|x64
+ {683E9D46-FCC7-4163-984B-9F399169CF7F}.Release|x64.Build.0 = Release|x64
+ {D66DAC4D-133C-4DB5-923F-C88A961C3C51}.Debug|Win32.ActiveCfg = Debug|Win32
+ {D66DAC4D-133C-4DB5-923F-C88A961C3C51}.Debug|Win32.Build.0 = Debug|Win32
+ {D66DAC4D-133C-4DB5-923F-C88A961C3C51}.Debug|x64.ActiveCfg = Debug|x64
+ {D66DAC4D-133C-4DB5-923F-C88A961C3C51}.Debug|x64.Build.0 = Debug|x64
+ {D66DAC4D-133C-4DB5-923F-C88A961C3C51}.Release|Win32.ActiveCfg = Release|Win32
+ {D66DAC4D-133C-4DB5-923F-C88A961C3C51}.Release|Win32.Build.0 = Release|Win32
+ {D66DAC4D-133C-4DB5-923F-C88A961C3C51}.Release|x64.ActiveCfg = Release|x64
+ {D66DAC4D-133C-4DB5-923F-C88A961C3C51}.Release|x64.Build.0 = Release|x64
+ {8CCA6181-F2CE-4E5E-A20E-4E1E53A35125}.Debug|Win32.ActiveCfg = Debug|Win32
+ {8CCA6181-F2CE-4E5E-A20E-4E1E53A35125}.Debug|Win32.Build.0 = Debug|Win32
+ {8CCA6181-F2CE-4E5E-A20E-4E1E53A35125}.Debug|x64.ActiveCfg = Debug|x64
+ {8CCA6181-F2CE-4E5E-A20E-4E1E53A35125}.Debug|x64.Build.0 = Debug|x64
+ {8CCA6181-F2CE-4E5E-A20E-4E1E53A35125}.Release|Win32.ActiveCfg = Release|Win32
+ {8CCA6181-F2CE-4E5E-A20E-4E1E53A35125}.Release|Win32.Build.0 = Release|Win32
+ {8CCA6181-F2CE-4E5E-A20E-4E1E53A35125}.Release|x64.ActiveCfg = Release|x64
+ {8CCA6181-F2CE-4E5E-A20E-4E1E53A35125}.Release|x64.Build.0 = Release|x64
+ {304FD6A7-6C73-41C3-B489-97FD5E635CCB}.Debug|Win32.ActiveCfg = Debug|Win32
+ {304FD6A7-6C73-41C3-B489-97FD5E635CCB}.Debug|Win32.Build.0 = Debug|Win32
+ {304FD6A7-6C73-41C3-B489-97FD5E635CCB}.Debug|x64.ActiveCfg = Debug|x64
+ {304FD6A7-6C73-41C3-B489-97FD5E635CCB}.Debug|x64.Build.0 = Debug|x64
+ {304FD6A7-6C73-41C3-B489-97FD5E635CCB}.Release|Win32.ActiveCfg = Release|Win32
+ {304FD6A7-6C73-41C3-B489-97FD5E635CCB}.Release|Win32.Build.0 = Release|Win32
+ {304FD6A7-6C73-41C3-B489-97FD5E635CCB}.Release|x64.ActiveCfg = Release|x64
+ {304FD6A7-6C73-41C3-B489-97FD5E635CCB}.Release|x64.Build.0 = Release|x64
+ {4277B39A-C9FB-4F10-8223-8DD38053EDA0}.Debug|Win32.ActiveCfg = Debug|Win32
+ {4277B39A-C9FB-4F10-8223-8DD38053EDA0}.Debug|Win32.Build.0 = Debug|Win32
+ {4277B39A-C9FB-4F10-8223-8DD38053EDA0}.Debug|x64.ActiveCfg = Debug|x64
+ {4277B39A-C9FB-4F10-8223-8DD38053EDA0}.Debug|x64.Build.0 = Debug|x64
+ {4277B39A-C9FB-4F10-8223-8DD38053EDA0}.Release|Win32.ActiveCfg = Release|Win32
+ {4277B39A-C9FB-4F10-8223-8DD38053EDA0}.Release|Win32.Build.0 = Release|Win32
+ {4277B39A-C9FB-4F10-8223-8DD38053EDA0}.Release|x64.ActiveCfg = Release|x64
+ {4277B39A-C9FB-4F10-8223-8DD38053EDA0}.Release|x64.Build.0 = Release|x64
+ {3AC187DF-4FDF-40B7-9E12-002DC0A15EDB}.Debug|Win32.ActiveCfg = Debug|Win32
+ {3AC187DF-4FDF-40B7-9E12-002DC0A15EDB}.Debug|Win32.Build.0 = Debug|Win32
+ {3AC187DF-4FDF-40B7-9E12-002DC0A15EDB}.Debug|x64.ActiveCfg = Debug|x64
+ {3AC187DF-4FDF-40B7-9E12-002DC0A15EDB}.Debug|x64.Build.0 = Debug|x64
+ {3AC187DF-4FDF-40B7-9E12-002DC0A15EDB}.Release|Win32.ActiveCfg = Release|Win32
+ {3AC187DF-4FDF-40B7-9E12-002DC0A15EDB}.Release|Win32.Build.0 = Release|Win32
+ {3AC187DF-4FDF-40B7-9E12-002DC0A15EDB}.Release|x64.ActiveCfg = Release|x64
+ {3AC187DF-4FDF-40B7-9E12-002DC0A15EDB}.Release|x64.Build.0 = Release|x64
+ {E05F914A-490B-4780-9BAB-1ED225B3DBEE}.Debug|Win32.ActiveCfg = Debug|Win32
+ {E05F914A-490B-4780-9BAB-1ED225B3DBEE}.Debug|Win32.Build.0 = Debug|Win32
+ {E05F914A-490B-4780-9BAB-1ED225B3DBEE}.Debug|x64.ActiveCfg = Debug|x64
+ {E05F914A-490B-4780-9BAB-1ED225B3DBEE}.Debug|x64.Build.0 = Debug|x64
+ {E05F914A-490B-4780-9BAB-1ED225B3DBEE}.Release|Win32.ActiveCfg = Release|Win32
+ {E05F914A-490B-4780-9BAB-1ED225B3DBEE}.Release|Win32.Build.0 = Release|Win32
+ {E05F914A-490B-4780-9BAB-1ED225B3DBEE}.Release|x64.ActiveCfg = Release|x64
+ {E05F914A-490B-4780-9BAB-1ED225B3DBEE}.Release|x64.Build.0 = Release|x64
+ {FB2098FC-CE8C-4A6B-A064-E2705324A16A}.Debug|Win32.ActiveCfg = Debug|Win32
+ {FB2098FC-CE8C-4A6B-A064-E2705324A16A}.Debug|Win32.Build.0 = Debug|Win32
+ {FB2098FC-CE8C-4A6B-A064-E2705324A16A}.Debug|x64.ActiveCfg = Debug|x64
+ {FB2098FC-CE8C-4A6B-A064-E2705324A16A}.Debug|x64.Build.0 = Debug|x64
+ {FB2098FC-CE8C-4A6B-A064-E2705324A16A}.Release|Win32.ActiveCfg = Release|Win32
+ {FB2098FC-CE8C-4A6B-A064-E2705324A16A}.Release|Win32.Build.0 = Release|Win32
+ {FB2098FC-CE8C-4A6B-A064-E2705324A16A}.Release|x64.ActiveCfg = Release|x64
+ {FB2098FC-CE8C-4A6B-A064-E2705324A16A}.Release|x64.Build.0 = Release|x64
+ {9832425B-38D5-44EC-AED6-3ED4353B24EA}.Debug|Win32.ActiveCfg = Debug|Win32
+ {9832425B-38D5-44EC-AED6-3ED4353B24EA}.Debug|Win32.Build.0 = Debug|Win32
+ {9832425B-38D5-44EC-AED6-3ED4353B24EA}.Debug|x64.ActiveCfg = Debug|x64
+ {9832425B-38D5-44EC-AED6-3ED4353B24EA}.Debug|x64.Build.0 = Debug|x64
+ {9832425B-38D5-44EC-AED6-3ED4353B24EA}.Release|Win32.ActiveCfg = Release|Win32
+ {9832425B-38D5-44EC-AED6-3ED4353B24EA}.Release|Win32.Build.0 = Release|Win32
+ {9832425B-38D5-44EC-AED6-3ED4353B24EA}.Release|x64.ActiveCfg = Release|x64
+ {9832425B-38D5-44EC-AED6-3ED4353B24EA}.Release|x64.Build.0 = Release|x64
+ {676CB1A8-1060-4B7F-86FA-5F8F01AB80BD}.Debug|Win32.ActiveCfg = Debug|Win32
+ {676CB1A8-1060-4B7F-86FA-5F8F01AB80BD}.Debug|Win32.Build.0 = Debug|Win32
+ {676CB1A8-1060-4B7F-86FA-5F8F01AB80BD}.Debug|x64.ActiveCfg = Debug|x64
+ {676CB1A8-1060-4B7F-86FA-5F8F01AB80BD}.Debug|x64.Build.0 = Debug|x64
+ {676CB1A8-1060-4B7F-86FA-5F8F01AB80BD}.Release|Win32.ActiveCfg = Release|Win32
+ {676CB1A8-1060-4B7F-86FA-5F8F01AB80BD}.Release|Win32.Build.0 = Release|Win32
+ {676CB1A8-1060-4B7F-86FA-5F8F01AB80BD}.Release|x64.ActiveCfg = Release|x64
+ {676CB1A8-1060-4B7F-86FA-5F8F01AB80BD}.Release|x64.Build.0 = Release|x64
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/xsd/dist/examples/cxx/parser/parser-xerces2-7.1.sln b/xsd/dist/examples/cxx/parser/parser-xerces2-7.1.sln new file mode 100644 index 0000000..83886e5 --- /dev/null +++ b/xsd/dist/examples/cxx/parser/parser-xerces2-7.1.sln @@ -0,0 +1,93 @@ +Microsoft Visual Studio Solution File, Format Version 8.00
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "hello", "hello\hello-xerces2-7.1.vcproj", "{683E9D46-FCC7-4163-984B-9F399169CF7F}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "library", "library\library-xerces2-7.1.vcproj", "{D66DAC4D-133C-4DB5-923F-C88A961C3C51}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mixin", "mixin\mixin-xerces2-7.1.vcproj", "{8CCA6181-F2CE-4E5E-A20E-4E1E53A35125}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mixed", "mixed\mixed-xerces2-7.1.vcproj", "{304FD6A7-6C73-41C3-B489-97FD5E635CCB}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "generated", "generated\generated-xerces2-7.1.vcproj", "{4277B39A-C9FB-4F10-8223-8DD38053EDA0}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "multiroot", "multiroot\multiroot-xerces2-7.1.vcproj", "{3AC187DF-4FDF-40B7-9E12-002DC0A15EDB}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "polymorphism", "polymorphism\polymorphism-xerces2-7.1.vcproj", "{E05F914A-490B-4780-9BAB-1ED225B3DBEE}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "polyroot", "polyroot\polyroot-xerces2-7.1.vcproj", "{FB2098FC-CE8C-4A6B-A064-E2705324A16A}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wildcard", "wildcard\wildcard-xerces2-7.1.vcproj", "{9832425B-38D5-44EC-AED6-3ED4353B24EA}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "performance", "performance\performance-xerces2-7.1.vcproj", "{676CB1A8-1060-4B7F-86FA-5F8F01AB80BD}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Global
+ GlobalSection(SolutionConfiguration) = preSolution
+ Debug = Debug
+ Release = Release
+ EndGlobalSection
+ GlobalSection(ProjectConfiguration) = postSolution
+ {683E9D46-FCC7-4163-984B-9F399169CF7F}.Debug.ActiveCfg = Debug|Win32
+ {683E9D46-FCC7-4163-984B-9F399169CF7F}.Debug.Build.0 = Debug|Win32
+ {683E9D46-FCC7-4163-984B-9F399169CF7F}.Release.ActiveCfg = Release|Win32
+ {683E9D46-FCC7-4163-984B-9F399169CF7F}.Release.Build.0 = Release|Win32
+ {D66DAC4D-133C-4DB5-923F-C88A961C3C51}.Debug.ActiveCfg = Debug|Win32
+ {D66DAC4D-133C-4DB5-923F-C88A961C3C51}.Debug.Build.0 = Debug|Win32
+ {D66DAC4D-133C-4DB5-923F-C88A961C3C51}.Release.ActiveCfg = Release|Win32
+ {D66DAC4D-133C-4DB5-923F-C88A961C3C51}.Release.Build.0 = Release|Win32
+ {8CCA6181-F2CE-4E5E-A20E-4E1E53A35125}.Debug.ActiveCfg = Debug|Win32
+ {8CCA6181-F2CE-4E5E-A20E-4E1E53A35125}.Debug.Build.0 = Debug|Win32
+ {8CCA6181-F2CE-4E5E-A20E-4E1E53A35125}.Release.ActiveCfg = Release|Win32
+ {8CCA6181-F2CE-4E5E-A20E-4E1E53A35125}.Release.Build.0 = Release|Win32
+ {304FD6A7-6C73-41C3-B489-97FD5E635CCB}.Debug.ActiveCfg = Debug|Win32
+ {304FD6A7-6C73-41C3-B489-97FD5E635CCB}.Debug.Build.0 = Debug|Win32
+ {304FD6A7-6C73-41C3-B489-97FD5E635CCB}.Release.ActiveCfg = Release|Win32
+ {304FD6A7-6C73-41C3-B489-97FD5E635CCB}.Release.Build.0 = Release|Win32
+ {4277B39A-C9FB-4F10-8223-8DD38053EDA0}.Debug.ActiveCfg = Debug|Win32
+ {4277B39A-C9FB-4F10-8223-8DD38053EDA0}.Debug.Build.0 = Debug|Win32
+ {4277B39A-C9FB-4F10-8223-8DD38053EDA0}.Release.ActiveCfg = Release|Win32
+ {4277B39A-C9FB-4F10-8223-8DD38053EDA0}.Release.Build.0 = Release|Win32
+ {3AC187DF-4FDF-40B7-9E12-002DC0A15EDB}.Debug.ActiveCfg = Debug|Win32
+ {3AC187DF-4FDF-40B7-9E12-002DC0A15EDB}.Debug.Build.0 = Debug|Win32
+ {3AC187DF-4FDF-40B7-9E12-002DC0A15EDB}.Release.ActiveCfg = Release|Win32
+ {3AC187DF-4FDF-40B7-9E12-002DC0A15EDB}.Release.Build.0 = Release|Win32
+ {9832425B-38D5-44EC-AED6-3ED4353B24EA}.Debug.ActiveCfg = Debug|Win32
+ {9832425B-38D5-44EC-AED6-3ED4353B24EA}.Debug.Build.0 = Debug|Win32
+ {9832425B-38D5-44EC-AED6-3ED4353B24EA}.Release.ActiveCfg = Release|Win32
+ {9832425B-38D5-44EC-AED6-3ED4353B24EA}.Release.Build.0 = Release|Win32
+ {E05F914A-490B-4780-9BAB-1ED225B3DBEE}.Debug.ActiveCfg = Debug|Win32
+ {E05F914A-490B-4780-9BAB-1ED225B3DBEE}.Debug.Build.0 = Debug|Win32
+ {E05F914A-490B-4780-9BAB-1ED225B3DBEE}.Release.ActiveCfg = Release|Win32
+ {E05F914A-490B-4780-9BAB-1ED225B3DBEE}.Release.Build.0 = Release|Win32
+ {FB2098FC-CE8C-4A6B-A064-E2705324A16A}.Debug.ActiveCfg = Debug|Win32
+ {FB2098FC-CE8C-4A6B-A064-E2705324A16A}.Debug.Build.0 = Debug|Win32
+ {FB2098FC-CE8C-4A6B-A064-E2705324A16A}.Release.ActiveCfg = Release|Win32
+ {FB2098FC-CE8C-4A6B-A064-E2705324A16A}.Release.Build.0 = Release|Win32
+ {676CB1A8-1060-4B7F-86FA-5F8F01AB80BD}.Debug.ActiveCfg = Debug|Win32
+ {676CB1A8-1060-4B7F-86FA-5F8F01AB80BD}.Debug.Build.0 = Debug|Win32
+ {676CB1A8-1060-4B7F-86FA-5F8F01AB80BD}.Release.ActiveCfg = Release|Win32
+ {676CB1A8-1060-4B7F-86FA-5F8F01AB80BD}.Release.Build.0 = Release|Win32
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ EndGlobalSection
+ GlobalSection(ExtensibilityAddIns) = postSolution
+ EndGlobalSection
+EndGlobal
diff --git a/xsd/dist/examples/cxx/parser/parser-xerces2-8.0.sln b/xsd/dist/examples/cxx/parser/parser-xerces2-8.0.sln new file mode 100644 index 0000000..e2e0743 --- /dev/null +++ b/xsd/dist/examples/cxx/parser/parser-xerces2-8.0.sln @@ -0,0 +1,115 @@ +Microsoft Visual Studio Solution File, Format Version 9.00
+# Visual Studio 2005
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "hello", "hello\hello-xerces2-8.0.vcproj", "{683E9D46-FCC7-4163-984B-9F399169CF7F}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "library", "library\library-xerces2-8.0.vcproj", "{D66DAC4D-133C-4DB5-923F-C88A961C3C51}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mixin", "mixin\mixin-xerces2-8.0.vcproj", "{8CCA6181-F2CE-4E5E-A20E-4E1E53A35125}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mixed", "mixed\mixed-xerces2-8.0.vcproj", "{304FD6A7-6C73-41C3-B489-97FD5E635CCB}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "generated", "generated\generated-xerces2-8.0.vcproj", "{4277B39A-C9FB-4F10-8223-8DD38053EDA0}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "multiroot", "multiroot\multiroot-xerces2-8.0.vcproj", "{3AC187DF-4FDF-40B7-9E12-002DC0A15EDB}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "polymorphism", "polymorphism\polymorphism-xerces2-8.0.vcproj", "{E05F914A-490B-4780-9BAB-1ED225B3DBEE}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "polyroot", "polyroot\polyroot-xerces2-8.0.vcproj", "{FB2098FC-CE8C-4A6B-A064-E2705324A16A}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wildcard", "wildcard\wildcard-xerces2-8.0.vcproj", "{9832425B-38D5-44EC-AED6-3ED4353B24EA}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "performance", "performance\performance-xerces2-8.0.vcproj", "{676CB1A8-1060-4B7F-86FA-5F8F01AB80BD}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Debug|x64 = Debug|x64
+ Release|Win32 = Release|Win32
+ Release|x64 = Release|x64
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {683E9D46-FCC7-4163-984B-9F399169CF7F}.Debug|Win32.ActiveCfg = Debug|Win32
+ {683E9D46-FCC7-4163-984B-9F399169CF7F}.Debug|Win32.Build.0 = Debug|Win32
+ {683E9D46-FCC7-4163-984B-9F399169CF7F}.Debug|x64.ActiveCfg = Debug|x64
+ {683E9D46-FCC7-4163-984B-9F399169CF7F}.Debug|x64.Build.0 = Debug|x64
+ {683E9D46-FCC7-4163-984B-9F399169CF7F}.Release|Win32.ActiveCfg = Release|Win32
+ {683E9D46-FCC7-4163-984B-9F399169CF7F}.Release|Win32.Build.0 = Release|Win32
+ {683E9D46-FCC7-4163-984B-9F399169CF7F}.Release|x64.ActiveCfg = Release|x64
+ {683E9D46-FCC7-4163-984B-9F399169CF7F}.Release|x64.Build.0 = Release|x64
+ {D66DAC4D-133C-4DB5-923F-C88A961C3C51}.Debug|Win32.ActiveCfg = Debug|Win32
+ {D66DAC4D-133C-4DB5-923F-C88A961C3C51}.Debug|Win32.Build.0 = Debug|Win32
+ {D66DAC4D-133C-4DB5-923F-C88A961C3C51}.Debug|x64.ActiveCfg = Debug|x64
+ {D66DAC4D-133C-4DB5-923F-C88A961C3C51}.Debug|x64.Build.0 = Debug|x64
+ {D66DAC4D-133C-4DB5-923F-C88A961C3C51}.Release|Win32.ActiveCfg = Release|Win32
+ {D66DAC4D-133C-4DB5-923F-C88A961C3C51}.Release|Win32.Build.0 = Release|Win32
+ {D66DAC4D-133C-4DB5-923F-C88A961C3C51}.Release|x64.ActiveCfg = Release|x64
+ {D66DAC4D-133C-4DB5-923F-C88A961C3C51}.Release|x64.Build.0 = Release|x64
+ {8CCA6181-F2CE-4E5E-A20E-4E1E53A35125}.Debug|Win32.ActiveCfg = Debug|Win32
+ {8CCA6181-F2CE-4E5E-A20E-4E1E53A35125}.Debug|Win32.Build.0 = Debug|Win32
+ {8CCA6181-F2CE-4E5E-A20E-4E1E53A35125}.Debug|x64.ActiveCfg = Debug|x64
+ {8CCA6181-F2CE-4E5E-A20E-4E1E53A35125}.Debug|x64.Build.0 = Debug|x64
+ {8CCA6181-F2CE-4E5E-A20E-4E1E53A35125}.Release|Win32.ActiveCfg = Release|Win32
+ {8CCA6181-F2CE-4E5E-A20E-4E1E53A35125}.Release|Win32.Build.0 = Release|Win32
+ {8CCA6181-F2CE-4E5E-A20E-4E1E53A35125}.Release|x64.ActiveCfg = Release|x64
+ {8CCA6181-F2CE-4E5E-A20E-4E1E53A35125}.Release|x64.Build.0 = Release|x64
+ {304FD6A7-6C73-41C3-B489-97FD5E635CCB}.Debug|Win32.ActiveCfg = Debug|Win32
+ {304FD6A7-6C73-41C3-B489-97FD5E635CCB}.Debug|Win32.Build.0 = Debug|Win32
+ {304FD6A7-6C73-41C3-B489-97FD5E635CCB}.Debug|x64.ActiveCfg = Debug|x64
+ {304FD6A7-6C73-41C3-B489-97FD5E635CCB}.Debug|x64.Build.0 = Debug|x64
+ {304FD6A7-6C73-41C3-B489-97FD5E635CCB}.Release|Win32.ActiveCfg = Release|Win32
+ {304FD6A7-6C73-41C3-B489-97FD5E635CCB}.Release|Win32.Build.0 = Release|Win32
+ {304FD6A7-6C73-41C3-B489-97FD5E635CCB}.Release|x64.ActiveCfg = Release|x64
+ {304FD6A7-6C73-41C3-B489-97FD5E635CCB}.Release|x64.Build.0 = Release|x64
+ {4277B39A-C9FB-4F10-8223-8DD38053EDA0}.Debug|Win32.ActiveCfg = Debug|Win32
+ {4277B39A-C9FB-4F10-8223-8DD38053EDA0}.Debug|Win32.Build.0 = Debug|Win32
+ {4277B39A-C9FB-4F10-8223-8DD38053EDA0}.Debug|x64.ActiveCfg = Debug|x64
+ {4277B39A-C9FB-4F10-8223-8DD38053EDA0}.Debug|x64.Build.0 = Debug|x64
+ {4277B39A-C9FB-4F10-8223-8DD38053EDA0}.Release|Win32.ActiveCfg = Release|Win32
+ {4277B39A-C9FB-4F10-8223-8DD38053EDA0}.Release|Win32.Build.0 = Release|Win32
+ {4277B39A-C9FB-4F10-8223-8DD38053EDA0}.Release|x64.ActiveCfg = Release|x64
+ {4277B39A-C9FB-4F10-8223-8DD38053EDA0}.Release|x64.Build.0 = Release|x64
+ {3AC187DF-4FDF-40B7-9E12-002DC0A15EDB}.Debug|Win32.ActiveCfg = Debug|Win32
+ {3AC187DF-4FDF-40B7-9E12-002DC0A15EDB}.Debug|Win32.Build.0 = Debug|Win32
+ {3AC187DF-4FDF-40B7-9E12-002DC0A15EDB}.Debug|x64.ActiveCfg = Debug|x64
+ {3AC187DF-4FDF-40B7-9E12-002DC0A15EDB}.Debug|x64.Build.0 = Debug|x64
+ {3AC187DF-4FDF-40B7-9E12-002DC0A15EDB}.Release|Win32.ActiveCfg = Release|Win32
+ {3AC187DF-4FDF-40B7-9E12-002DC0A15EDB}.Release|Win32.Build.0 = Release|Win32
+ {3AC187DF-4FDF-40B7-9E12-002DC0A15EDB}.Release|x64.ActiveCfg = Release|x64
+ {3AC187DF-4FDF-40B7-9E12-002DC0A15EDB}.Release|x64.Build.0 = Release|x64
+ {E05F914A-490B-4780-9BAB-1ED225B3DBEE}.Debug|Win32.ActiveCfg = Debug|Win32
+ {E05F914A-490B-4780-9BAB-1ED225B3DBEE}.Debug|Win32.Build.0 = Debug|Win32
+ {E05F914A-490B-4780-9BAB-1ED225B3DBEE}.Debug|x64.ActiveCfg = Debug|x64
+ {E05F914A-490B-4780-9BAB-1ED225B3DBEE}.Debug|x64.Build.0 = Debug|x64
+ {E05F914A-490B-4780-9BAB-1ED225B3DBEE}.Release|Win32.ActiveCfg = Release|Win32
+ {E05F914A-490B-4780-9BAB-1ED225B3DBEE}.Release|Win32.Build.0 = Release|Win32
+ {E05F914A-490B-4780-9BAB-1ED225B3DBEE}.Release|x64.ActiveCfg = Release|x64
+ {E05F914A-490B-4780-9BAB-1ED225B3DBEE}.Release|x64.Build.0 = Release|x64
+ {FB2098FC-CE8C-4A6B-A064-E2705324A16A}.Debug|Win32.ActiveCfg = Debug|Win32
+ {FB2098FC-CE8C-4A6B-A064-E2705324A16A}.Debug|Win32.Build.0 = Debug|Win32
+ {FB2098FC-CE8C-4A6B-A064-E2705324A16A}.Debug|x64.ActiveCfg = Debug|x64
+ {FB2098FC-CE8C-4A6B-A064-E2705324A16A}.Debug|x64.Build.0 = Debug|x64
+ {FB2098FC-CE8C-4A6B-A064-E2705324A16A}.Release|Win32.ActiveCfg = Release|Win32
+ {FB2098FC-CE8C-4A6B-A064-E2705324A16A}.Release|Win32.Build.0 = Release|Win32
+ {FB2098FC-CE8C-4A6B-A064-E2705324A16A}.Release|x64.ActiveCfg = Release|x64
+ {FB2098FC-CE8C-4A6B-A064-E2705324A16A}.Release|x64.Build.0 = Release|x64
+ {9832425B-38D5-44EC-AED6-3ED4353B24EA}.Debug|Win32.ActiveCfg = Debug|Win32
+ {9832425B-38D5-44EC-AED6-3ED4353B24EA}.Debug|Win32.Build.0 = Debug|Win32
+ {9832425B-38D5-44EC-AED6-3ED4353B24EA}.Debug|x64.ActiveCfg = Debug|x64
+ {9832425B-38D5-44EC-AED6-3ED4353B24EA}.Debug|x64.Build.0 = Debug|x64
+ {9832425B-38D5-44EC-AED6-3ED4353B24EA}.Release|Win32.ActiveCfg = Release|Win32
+ {9832425B-38D5-44EC-AED6-3ED4353B24EA}.Release|Win32.Build.0 = Release|Win32
+ {9832425B-38D5-44EC-AED6-3ED4353B24EA}.Release|x64.ActiveCfg = Release|x64
+ {9832425B-38D5-44EC-AED6-3ED4353B24EA}.Release|x64.Build.0 = Release|x64
+ {676CB1A8-1060-4B7F-86FA-5F8F01AB80BD}.Debug|Win32.ActiveCfg = Debug|Win32
+ {676CB1A8-1060-4B7F-86FA-5F8F01AB80BD}.Debug|Win32.Build.0 = Debug|Win32
+ {676CB1A8-1060-4B7F-86FA-5F8F01AB80BD}.Debug|x64.ActiveCfg = Debug|x64
+ {676CB1A8-1060-4B7F-86FA-5F8F01AB80BD}.Debug|x64.Build.0 = Debug|x64
+ {676CB1A8-1060-4B7F-86FA-5F8F01AB80BD}.Release|Win32.ActiveCfg = Release|Win32
+ {676CB1A8-1060-4B7F-86FA-5F8F01AB80BD}.Release|Win32.Build.0 = Release|Win32
+ {676CB1A8-1060-4B7F-86FA-5F8F01AB80BD}.Release|x64.ActiveCfg = Release|x64
+ {676CB1A8-1060-4B7F-86FA-5F8F01AB80BD}.Release|x64.Build.0 = Release|x64
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/xsd/dist/examples/cxx/parser/parser-xerces2-9.0.sln b/xsd/dist/examples/cxx/parser/parser-xerces2-9.0.sln new file mode 100644 index 0000000..39fffe1 --- /dev/null +++ b/xsd/dist/examples/cxx/parser/parser-xerces2-9.0.sln @@ -0,0 +1,115 @@ +Microsoft Visual Studio Solution File, Format Version 10.00
+# Visual Studio 2008
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "hello", "hello\hello-xerces2-9.0.vcproj", "{683E9D46-FCC7-4163-984B-9F399169CF7F}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "library", "library\library-xerces2-9.0.vcproj", "{D66DAC4D-133C-4DB5-923F-C88A961C3C51}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mixin", "mixin\mixin-xerces2-9.0.vcproj", "{8CCA6181-F2CE-4E5E-A20E-4E1E53A35125}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mixed", "mixed\mixed-xerces2-9.0.vcproj", "{304FD6A7-6C73-41C3-B489-97FD5E635CCB}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "generated", "generated\generated-xerces2-9.0.vcproj", "{4277B39A-C9FB-4F10-8223-8DD38053EDA0}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "multiroot", "multiroot\multiroot-xerces2-9.0.vcproj", "{3AC187DF-4FDF-40B7-9E12-002DC0A15EDB}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "polymorphism", "polymorphism\polymorphism-xerces2-9.0.vcproj", "{E05F914A-490B-4780-9BAB-1ED225B3DBEE}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "polyroot", "polyroot\polyroot-xerces2-9.0.vcproj", "{FB2098FC-CE8C-4A6B-A064-E2705324A16A}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wildcard", "wildcard\wildcard-xerces2-9.0.vcproj", "{9832425B-38D5-44EC-AED6-3ED4353B24EA}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "performance", "performance\performance-xerces2-9.0.vcproj", "{676CB1A8-1060-4B7F-86FA-5F8F01AB80BD}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Debug|x64 = Debug|x64
+ Release|Win32 = Release|Win32
+ Release|x64 = Release|x64
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {683E9D46-FCC7-4163-984B-9F399169CF7F}.Debug|Win32.ActiveCfg = Debug|Win32
+ {683E9D46-FCC7-4163-984B-9F399169CF7F}.Debug|Win32.Build.0 = Debug|Win32
+ {683E9D46-FCC7-4163-984B-9F399169CF7F}.Debug|x64.ActiveCfg = Debug|x64
+ {683E9D46-FCC7-4163-984B-9F399169CF7F}.Debug|x64.Build.0 = Debug|x64
+ {683E9D46-FCC7-4163-984B-9F399169CF7F}.Release|Win32.ActiveCfg = Release|Win32
+ {683E9D46-FCC7-4163-984B-9F399169CF7F}.Release|Win32.Build.0 = Release|Win32
+ {683E9D46-FCC7-4163-984B-9F399169CF7F}.Release|x64.ActiveCfg = Release|x64
+ {683E9D46-FCC7-4163-984B-9F399169CF7F}.Release|x64.Build.0 = Release|x64
+ {D66DAC4D-133C-4DB5-923F-C88A961C3C51}.Debug|Win32.ActiveCfg = Debug|Win32
+ {D66DAC4D-133C-4DB5-923F-C88A961C3C51}.Debug|Win32.Build.0 = Debug|Win32
+ {D66DAC4D-133C-4DB5-923F-C88A961C3C51}.Debug|x64.ActiveCfg = Debug|x64
+ {D66DAC4D-133C-4DB5-923F-C88A961C3C51}.Debug|x64.Build.0 = Debug|x64
+ {D66DAC4D-133C-4DB5-923F-C88A961C3C51}.Release|Win32.ActiveCfg = Release|Win32
+ {D66DAC4D-133C-4DB5-923F-C88A961C3C51}.Release|Win32.Build.0 = Release|Win32
+ {D66DAC4D-133C-4DB5-923F-C88A961C3C51}.Release|x64.ActiveCfg = Release|x64
+ {D66DAC4D-133C-4DB5-923F-C88A961C3C51}.Release|x64.Build.0 = Release|x64
+ {8CCA6181-F2CE-4E5E-A20E-4E1E53A35125}.Debug|Win32.ActiveCfg = Debug|Win32
+ {8CCA6181-F2CE-4E5E-A20E-4E1E53A35125}.Debug|Win32.Build.0 = Debug|Win32
+ {8CCA6181-F2CE-4E5E-A20E-4E1E53A35125}.Debug|x64.ActiveCfg = Debug|x64
+ {8CCA6181-F2CE-4E5E-A20E-4E1E53A35125}.Debug|x64.Build.0 = Debug|x64
+ {8CCA6181-F2CE-4E5E-A20E-4E1E53A35125}.Release|Win32.ActiveCfg = Release|Win32
+ {8CCA6181-F2CE-4E5E-A20E-4E1E53A35125}.Release|Win32.Build.0 = Release|Win32
+ {8CCA6181-F2CE-4E5E-A20E-4E1E53A35125}.Release|x64.ActiveCfg = Release|x64
+ {8CCA6181-F2CE-4E5E-A20E-4E1E53A35125}.Release|x64.Build.0 = Release|x64
+ {304FD6A7-6C73-41C3-B489-97FD5E635CCB}.Debug|Win32.ActiveCfg = Debug|Win32
+ {304FD6A7-6C73-41C3-B489-97FD5E635CCB}.Debug|Win32.Build.0 = Debug|Win32
+ {304FD6A7-6C73-41C3-B489-97FD5E635CCB}.Debug|x64.ActiveCfg = Debug|x64
+ {304FD6A7-6C73-41C3-B489-97FD5E635CCB}.Debug|x64.Build.0 = Debug|x64
+ {304FD6A7-6C73-41C3-B489-97FD5E635CCB}.Release|Win32.ActiveCfg = Release|Win32
+ {304FD6A7-6C73-41C3-B489-97FD5E635CCB}.Release|Win32.Build.0 = Release|Win32
+ {304FD6A7-6C73-41C3-B489-97FD5E635CCB}.Release|x64.ActiveCfg = Release|x64
+ {304FD6A7-6C73-41C3-B489-97FD5E635CCB}.Release|x64.Build.0 = Release|x64
+ {4277B39A-C9FB-4F10-8223-8DD38053EDA0}.Debug|Win32.ActiveCfg = Debug|Win32
+ {4277B39A-C9FB-4F10-8223-8DD38053EDA0}.Debug|Win32.Build.0 = Debug|Win32
+ {4277B39A-C9FB-4F10-8223-8DD38053EDA0}.Debug|x64.ActiveCfg = Debug|x64
+ {4277B39A-C9FB-4F10-8223-8DD38053EDA0}.Debug|x64.Build.0 = Debug|x64
+ {4277B39A-C9FB-4F10-8223-8DD38053EDA0}.Release|Win32.ActiveCfg = Release|Win32
+ {4277B39A-C9FB-4F10-8223-8DD38053EDA0}.Release|Win32.Build.0 = Release|Win32
+ {4277B39A-C9FB-4F10-8223-8DD38053EDA0}.Release|x64.ActiveCfg = Release|x64
+ {4277B39A-C9FB-4F10-8223-8DD38053EDA0}.Release|x64.Build.0 = Release|x64
+ {3AC187DF-4FDF-40B7-9E12-002DC0A15EDB}.Debug|Win32.ActiveCfg = Debug|Win32
+ {3AC187DF-4FDF-40B7-9E12-002DC0A15EDB}.Debug|Win32.Build.0 = Debug|Win32
+ {3AC187DF-4FDF-40B7-9E12-002DC0A15EDB}.Debug|x64.ActiveCfg = Debug|x64
+ {3AC187DF-4FDF-40B7-9E12-002DC0A15EDB}.Debug|x64.Build.0 = Debug|x64
+ {3AC187DF-4FDF-40B7-9E12-002DC0A15EDB}.Release|Win32.ActiveCfg = Release|Win32
+ {3AC187DF-4FDF-40B7-9E12-002DC0A15EDB}.Release|Win32.Build.0 = Release|Win32
+ {3AC187DF-4FDF-40B7-9E12-002DC0A15EDB}.Release|x64.ActiveCfg = Release|x64
+ {3AC187DF-4FDF-40B7-9E12-002DC0A15EDB}.Release|x64.Build.0 = Release|x64
+ {E05F914A-490B-4780-9BAB-1ED225B3DBEE}.Debug|Win32.ActiveCfg = Debug|Win32
+ {E05F914A-490B-4780-9BAB-1ED225B3DBEE}.Debug|Win32.Build.0 = Debug|Win32
+ {E05F914A-490B-4780-9BAB-1ED225B3DBEE}.Debug|x64.ActiveCfg = Debug|x64
+ {E05F914A-490B-4780-9BAB-1ED225B3DBEE}.Debug|x64.Build.0 = Debug|x64
+ {E05F914A-490B-4780-9BAB-1ED225B3DBEE}.Release|Win32.ActiveCfg = Release|Win32
+ {E05F914A-490B-4780-9BAB-1ED225B3DBEE}.Release|Win32.Build.0 = Release|Win32
+ {E05F914A-490B-4780-9BAB-1ED225B3DBEE}.Release|x64.ActiveCfg = Release|x64
+ {E05F914A-490B-4780-9BAB-1ED225B3DBEE}.Release|x64.Build.0 = Release|x64
+ {FB2098FC-CE8C-4A6B-A064-E2705324A16A}.Debug|Win32.ActiveCfg = Debug|Win32
+ {FB2098FC-CE8C-4A6B-A064-E2705324A16A}.Debug|Win32.Build.0 = Debug|Win32
+ {FB2098FC-CE8C-4A6B-A064-E2705324A16A}.Debug|x64.ActiveCfg = Debug|x64
+ {FB2098FC-CE8C-4A6B-A064-E2705324A16A}.Debug|x64.Build.0 = Debug|x64
+ {FB2098FC-CE8C-4A6B-A064-E2705324A16A}.Release|Win32.ActiveCfg = Release|Win32
+ {FB2098FC-CE8C-4A6B-A064-E2705324A16A}.Release|Win32.Build.0 = Release|Win32
+ {FB2098FC-CE8C-4A6B-A064-E2705324A16A}.Release|x64.ActiveCfg = Release|x64
+ {FB2098FC-CE8C-4A6B-A064-E2705324A16A}.Release|x64.Build.0 = Release|x64
+ {9832425B-38D5-44EC-AED6-3ED4353B24EA}.Debug|Win32.ActiveCfg = Debug|Win32
+ {9832425B-38D5-44EC-AED6-3ED4353B24EA}.Debug|Win32.Build.0 = Debug|Win32
+ {9832425B-38D5-44EC-AED6-3ED4353B24EA}.Debug|x64.ActiveCfg = Debug|x64
+ {9832425B-38D5-44EC-AED6-3ED4353B24EA}.Debug|x64.Build.0 = Debug|x64
+ {9832425B-38D5-44EC-AED6-3ED4353B24EA}.Release|Win32.ActiveCfg = Release|Win32
+ {9832425B-38D5-44EC-AED6-3ED4353B24EA}.Release|Win32.Build.0 = Release|Win32
+ {9832425B-38D5-44EC-AED6-3ED4353B24EA}.Release|x64.ActiveCfg = Release|x64
+ {9832425B-38D5-44EC-AED6-3ED4353B24EA}.Release|x64.Build.0 = Release|x64
+ {676CB1A8-1060-4B7F-86FA-5F8F01AB80BD}.Debug|Win32.ActiveCfg = Debug|Win32
+ {676CB1A8-1060-4B7F-86FA-5F8F01AB80BD}.Debug|Win32.Build.0 = Debug|Win32
+ {676CB1A8-1060-4B7F-86FA-5F8F01AB80BD}.Debug|x64.ActiveCfg = Debug|x64
+ {676CB1A8-1060-4B7F-86FA-5F8F01AB80BD}.Debug|x64.Build.0 = Debug|x64
+ {676CB1A8-1060-4B7F-86FA-5F8F01AB80BD}.Release|Win32.ActiveCfg = Release|Win32
+ {676CB1A8-1060-4B7F-86FA-5F8F01AB80BD}.Release|Win32.Build.0 = Release|Win32
+ {676CB1A8-1060-4B7F-86FA-5F8F01AB80BD}.Release|x64.ActiveCfg = Release|x64
+ {676CB1A8-1060-4B7F-86FA-5F8F01AB80BD}.Release|x64.Build.0 = Release|x64
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/xsd/dist/examples/cxx/parser/performance/makefile b/xsd/dist/examples/cxx/parser/performance/makefile new file mode 100644 index 0000000..a98e86a --- /dev/null +++ b/xsd/dist/examples/cxx/parser/performance/makefile @@ -0,0 +1,30 @@ +root := ../../.. + +include $(root)/build/cxx/rules.make +include $(root)/build/xsd/parser-rules.make + +override XSDFLAGS += --generate-inline + +# Build. +# +driver: driver.o test-pskel.o time.o + +driver.o: driver.cxx test-pskel.hxx test-pskel.ixx time.hxx +test-pskel.o: test-pskel.cxx test-pskel.hxx test-pskel.ixx +time.o: time.cxx time.hxx + +test-pskel.hxx test-pskel.ixx test-pskel.cxx: test.xsd + + +# Test. +# +.PHONY: test +test: driver test-50k.xml + ./driver test-50k.xml + + +# Clean. +# +.PHONY: clean +clean: + rm -f test-pskel.?xx test-pskel.o driver.o time.o driver diff --git a/xsd/dist/examples/cxx/parser/performance/performance-10.0.vcxproj b/xsd/dist/examples/cxx/parser/performance/performance-10.0.vcxproj new file mode 100644 index 0000000..1560a07 --- /dev/null +++ b/xsd/dist/examples/cxx/parser/performance/performance-10.0.vcxproj @@ -0,0 +1,207 @@ +<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectName>performance</ProjectName>
+ <ProjectGuid>{676CB1A8-1060-4B7F-86FA-5F8F01AB80BD}</ProjectGuid>
+ <RootNamespace>performance</RootNamespace>
+ <Keyword>Win32Proj</Keyword>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">driver</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">driver</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">driver</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">driver</TargetName>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Debug\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Debug\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)\$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)\$(Configuration)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Release\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Release\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)\$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)\$(Configuration)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>xerces-c_3D.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)driver.pdb</ProgramDatabaseFile>
+ <SubSystem>Console</SubSystem>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>xerces-c_3D.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)driver.pdb</ProgramDatabaseFile>
+ <SubSystem>Console</SubSystem>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>xerces-c_3.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>xerces-c_3.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="driver.cxx" />
+ <ClCompile Include="test-pskel.cxx" />
+ <ClCompile Include="time.cxx" />
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="test-pskel.hxx" />
+ <ClInclude Include="time.hxx" />
+ </ItemGroup>
+ <ItemGroup>
+ <CustomBuild Include="test.xsd">
+ <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">xsd test.xsd</Message>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">xsd cxx-parser --generate-inline test.xsd</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">test-pskel.hxx;test-pskel.ixx;test-pskel.cxx;%(Outputs)</Outputs>
+ <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">xsd test.xsd</Message>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">xsd cxx-parser --generate-inline test.xsd</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">test-pskel.hxx;test-pskel.ixx;test-pskel.cxx;%(Outputs)</Outputs>
+ <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">xsd test.xsd</Message>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">xsd cxx-parser --generate-inline test.xsd</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">test-pskel.hxx;test-pskel.ixx;test-pskel.cxx;%(Outputs)</Outputs>
+ <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">xsd test.xsd</Message>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">xsd cxx-parser --generate-inline test.xsd</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">test-pskel.hxx;test-pskel.ixx;test-pskel.cxx;%(Outputs)</Outputs>
+ </CustomBuild>
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="Readme.txt" />
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project>
\ No newline at end of file diff --git a/xsd/dist/examples/cxx/parser/performance/performance-10.0.vcxproj.filters b/xsd/dist/examples/cxx/parser/performance/performance-10.0.vcxproj.filters new file mode 100644 index 0000000..43190f1 --- /dev/null +++ b/xsd/dist/examples/cxx/parser/performance/performance-10.0.vcxproj.filters @@ -0,0 +1,44 @@ +<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="Source Files">
+ <UniqueIdentifier>{699BF138-9DA5-4EC4-9796-4033D1E443E8}</UniqueIdentifier>
+ <Extensions>cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+ </Filter>
+ <Filter Include="Header Files">
+ <UniqueIdentifier>{6B5C0740-D0B1-4A08-8657-DA9977EBA68D}</UniqueIdentifier>
+ <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
+ </Filter>
+ <Filter Include="Schema Files">
+ <UniqueIdentifier>{d885db2b-37d2-476b-964e-0f50c5f851d4}</UniqueIdentifier>
+ <Extensions>xsd</Extensions>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="driver.cxx">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="test-pskel.cxx">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="time.cxx">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="test-pskel.hxx">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="time.hxx">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="Readme.txt" />
+ </ItemGroup>
+ <ItemGroup>
+ <CustomBuild Include="test.xsd">
+ <Filter>Schema Files</Filter>
+ </CustomBuild>
+ </ItemGroup>
+</Project>
\ No newline at end of file diff --git a/xsd/dist/examples/cxx/parser/performance/performance-7.1.vcproj b/xsd/dist/examples/cxx/parser/performance/performance-7.1.vcproj new file mode 100644 index 0000000..3326752 --- /dev/null +++ b/xsd/dist/examples/cxx/parser/performance/performance-7.1.vcproj @@ -0,0 +1,168 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="performance"
+ ProjectGUID="{676CB1A8-1060-4B7F-86FA-5F8F01AB80BD}"
+ RootNamespace="performance"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="TRUE"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="5"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="4"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="TRUE"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="4"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="3"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{699BF138-9DA5-4EC4-9796-4033D1E443E8}">
+ <File
+ RelativePath=".\driver.cxx">
+ </File>
+ <File
+ RelativePath=".\test-pskel.cxx">
+ </File>
+ <File
+ RelativePath=".\time.cxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{6B5C0740-D0B1-4A08-8657-DA9977EBA68D}">
+ <File
+ RelativePath=".\test-pskel.hxx">
+ </File>
+ <File
+ RelativePath=".\time.hxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd">
+ <File
+ RelativePath=".\test.xsd">
+ <FileConfiguration
+ Name="Debug|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd test.xsd"
+ CommandLine="xsd cxx-parser --generate-inline test.xsd"
+ Outputs="test-pskel.hxx;test-pskel.ixx;test-pskel.cxx"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd test.xsd"
+ CommandLine="xsd cxx-parser --generate-inline test.xsd"
+ Outputs="test-pskel.hxx;test-pskel.ixx;test-pskel.cxx"/>
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/parser/performance/performance-8.0.vcproj b/xsd/dist/examples/cxx/parser/performance/performance-8.0.vcproj new file mode 100644 index 0000000..5ff8ff0 --- /dev/null +++ b/xsd/dist/examples/cxx/parser/performance/performance-8.0.vcproj @@ -0,0 +1,427 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="performance"
+ ProjectGUID="{676CB1A8-1060-4B7F-86FA-5F8F01AB80BD}"
+ RootNamespace="performance"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{699BF138-9DA5-4EC4-9796-4033D1E443E8}"
+ >
+ <File
+ RelativePath=".\driver.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\test-pskel.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\time.cxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{6B5C0740-D0B1-4A08-8657-DA9977EBA68D}"
+ >
+ <File
+ RelativePath=".\test-pskel.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\time.hxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd"
+ >
+ <File
+ RelativePath=".\test.xsd"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd test.xsd"
+ CommandLine="xsd cxx-parser --generate-inline test.xsd"
+ Outputs="test-pskel.hxx;test-pskel.ixx;test-pskel.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd test.xsd"
+ CommandLine="xsd cxx-parser --generate-inline test.xsd"
+ Outputs="test-pskel.hxx;test-pskel.ixx;test-pskel.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd test.xsd"
+ CommandLine="xsd cxx-parser --generate-inline test.xsd"
+ Outputs="test-pskel.hxx;test-pskel.ixx;test-pskel.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd test.xsd"
+ CommandLine="xsd cxx-parser --generate-inline test.xsd"
+ Outputs="test-pskel.hxx;test-pskel.ixx;test-pskel.cxx"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/parser/performance/performance-9.0.vcproj b/xsd/dist/examples/cxx/parser/performance/performance-9.0.vcproj new file mode 100644 index 0000000..e980e74 --- /dev/null +++ b/xsd/dist/examples/cxx/parser/performance/performance-9.0.vcproj @@ -0,0 +1,424 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="performance"
+ ProjectGUID="{676CB1A8-1060-4B7F-86FA-5F8F01AB80BD}"
+ RootNamespace="performance"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{699BF138-9DA5-4EC4-9796-4033D1E443E8}"
+ >
+ <File
+ RelativePath=".\driver.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\test-pskel.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\time.cxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{6B5C0740-D0B1-4A08-8657-DA9977EBA68D}"
+ >
+ <File
+ RelativePath=".\test-pskel.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\time.hxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd"
+ >
+ <File
+ RelativePath=".\test.xsd"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd test.xsd"
+ CommandLine="xsd cxx-parser --generate-inline test.xsd"
+ Outputs="test-pskel.hxx;test-pskel.ixx;test-pskel.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd test.xsd"
+ CommandLine="xsd cxx-parser --generate-inline test.xsd"
+ Outputs="test-pskel.hxx;test-pskel.ixx;test-pskel.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd test.xsd"
+ CommandLine="xsd cxx-parser --generate-inline test.xsd"
+ Outputs="test-pskel.hxx;test-pskel.ixx;test-pskel.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd test.xsd"
+ CommandLine="xsd cxx-parser --generate-inline test.xsd"
+ Outputs="test-pskel.hxx;test-pskel.ixx;test-pskel.cxx"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/parser/performance/performance-xerces2-7.1.vcproj b/xsd/dist/examples/cxx/parser/performance/performance-xerces2-7.1.vcproj new file mode 100644 index 0000000..68498f8 --- /dev/null +++ b/xsd/dist/examples/cxx/parser/performance/performance-xerces2-7.1.vcproj @@ -0,0 +1,168 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="performance"
+ ProjectGUID="{676CB1A8-1060-4B7F-86FA-5F8F01AB80BD}"
+ RootNamespace="performance"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="TRUE"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="5"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="4"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="TRUE"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="4"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="3"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{699BF138-9DA5-4EC4-9796-4033D1E443E8}">
+ <File
+ RelativePath=".\driver.cxx">
+ </File>
+ <File
+ RelativePath=".\test-pskel.cxx">
+ </File>
+ <File
+ RelativePath=".\time.cxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{6B5C0740-D0B1-4A08-8657-DA9977EBA68D}">
+ <File
+ RelativePath=".\test-pskel.hxx">
+ </File>
+ <File
+ RelativePath=".\time.hxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd">
+ <File
+ RelativePath=".\test.xsd">
+ <FileConfiguration
+ Name="Debug|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd test.xsd"
+ CommandLine="xsd cxx-parser --generate-inline test.xsd"
+ Outputs="test-pskel.hxx;test-pskel.ixx;test-pskel.cxx"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd test.xsd"
+ CommandLine="xsd cxx-parser --generate-inline test.xsd"
+ Outputs="test-pskel.hxx;test-pskel.ixx;test-pskel.cxx"/>
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/parser/performance/performance-xerces2-8.0.vcproj b/xsd/dist/examples/cxx/parser/performance/performance-xerces2-8.0.vcproj new file mode 100644 index 0000000..c50f283 --- /dev/null +++ b/xsd/dist/examples/cxx/parser/performance/performance-xerces2-8.0.vcproj @@ -0,0 +1,427 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="performance"
+ ProjectGUID="{676CB1A8-1060-4B7F-86FA-5F8F01AB80BD}"
+ RootNamespace="performance"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{699BF138-9DA5-4EC4-9796-4033D1E443E8}"
+ >
+ <File
+ RelativePath=".\driver.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\test-pskel.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\time.cxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{6B5C0740-D0B1-4A08-8657-DA9977EBA68D}"
+ >
+ <File
+ RelativePath=".\test-pskel.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\time.hxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd"
+ >
+ <File
+ RelativePath=".\test.xsd"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd test.xsd"
+ CommandLine="xsd cxx-parser --generate-inline test.xsd"
+ Outputs="test-pskel.hxx;test-pskel.ixx;test-pskel.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd test.xsd"
+ CommandLine="xsd cxx-parser --generate-inline test.xsd"
+ Outputs="test-pskel.hxx;test-pskel.ixx;test-pskel.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd test.xsd"
+ CommandLine="xsd cxx-parser --generate-inline test.xsd"
+ Outputs="test-pskel.hxx;test-pskel.ixx;test-pskel.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd test.xsd"
+ CommandLine="xsd cxx-parser --generate-inline test.xsd"
+ Outputs="test-pskel.hxx;test-pskel.ixx;test-pskel.cxx"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/parser/performance/performance-xerces2-9.0.vcproj b/xsd/dist/examples/cxx/parser/performance/performance-xerces2-9.0.vcproj new file mode 100644 index 0000000..5f50ab8 --- /dev/null +++ b/xsd/dist/examples/cxx/parser/performance/performance-xerces2-9.0.vcproj @@ -0,0 +1,424 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="performance"
+ ProjectGUID="{676CB1A8-1060-4B7F-86FA-5F8F01AB80BD}"
+ RootNamespace="performance"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{699BF138-9DA5-4EC4-9796-4033D1E443E8}"
+ >
+ <File
+ RelativePath=".\driver.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\test-pskel.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\time.cxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{6B5C0740-D0B1-4A08-8657-DA9977EBA68D}"
+ >
+ <File
+ RelativePath=".\test-pskel.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\time.hxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd"
+ >
+ <File
+ RelativePath=".\test.xsd"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd test.xsd"
+ CommandLine="xsd cxx-parser --generate-inline test.xsd"
+ Outputs="test-pskel.hxx;test-pskel.ixx;test-pskel.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd test.xsd"
+ CommandLine="xsd cxx-parser --generate-inline test.xsd"
+ Outputs="test-pskel.hxx;test-pskel.ixx;test-pskel.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd test.xsd"
+ CommandLine="xsd cxx-parser --generate-inline test.xsd"
+ Outputs="test-pskel.hxx;test-pskel.ixx;test-pskel.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd test.xsd"
+ CommandLine="xsd cxx-parser --generate-inline test.xsd"
+ Outputs="test-pskel.hxx;test-pskel.ixx;test-pskel.cxx"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/parser/polymorphism/makefile b/xsd/dist/examples/cxx/parser/polymorphism/makefile new file mode 100644 index 0000000..935661d --- /dev/null +++ b/xsd/dist/examples/cxx/parser/polymorphism/makefile @@ -0,0 +1,30 @@ +root := ../../.. + +include $(root)/build/cxx/rules.make +include $(root)/build/xsd/parser-rules.make + +override XSDFLAGS += --generate-polymorphic + +# Build +# +driver: driver.o supermen-pskel.o supermen-pimpl.o + +driver.o: driver.cxx supermen-pimpl.hxx supermen-pskel.hxx +supermen-pimpl.o: supermen-pimpl.cxx supermen-pimpl.hxx supermen-pskel.hxx +supermen-pskel.o: supermen-pskel.cxx supermen-pskel.hxx + +supermen-pskel.hxx supermen-pskel.cxx: supermen.xsd + + +# Test. +# +.PHONY: test +test: driver supermen.xml + ./driver supermen.xml + + +# Clean. +# +.PHONY: clean +clean: + rm -f supermen-pskel.?xx supermen-pimpl.o supermen-pskel.o driver.o driver diff --git a/xsd/dist/examples/cxx/parser/polymorphism/polymorphism-10.0.vcxproj b/xsd/dist/examples/cxx/parser/polymorphism/polymorphism-10.0.vcxproj new file mode 100644 index 0000000..8e70cfe --- /dev/null +++ b/xsd/dist/examples/cxx/parser/polymorphism/polymorphism-10.0.vcxproj @@ -0,0 +1,211 @@ +<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectName>polymorphism</ProjectName>
+ <ProjectGuid>{E05F914A-490B-4780-9BAB-1ED225B3DBEE}</ProjectGuid>
+ <RootNamespace>polymorphism</RootNamespace>
+ <Keyword>Win32Proj</Keyword>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">driver</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">driver</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">driver</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">driver</TargetName>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Debug\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Debug\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)\$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)\$(Configuration)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Release\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Release\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)\$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)\$(Configuration)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ <RuntimeTypeInfo>true</RuntimeTypeInfo>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>xerces-c_3D.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)driver.pdb</ProgramDatabaseFile>
+ <SubSystem>Console</SubSystem>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ <RuntimeTypeInfo>true</RuntimeTypeInfo>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>xerces-c_3D.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)driver.pdb</ProgramDatabaseFile>
+ <SubSystem>Console</SubSystem>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <RuntimeTypeInfo>true</RuntimeTypeInfo>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>xerces-c_3.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <RuntimeTypeInfo>true</RuntimeTypeInfo>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>xerces-c_3.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="driver.cxx" />
+ <ClCompile Include="supermen-pimpl.cxx" />
+ <ClCompile Include="supermen-pskel.cxx" />
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="supermen-pimpl.hxx" />
+ <ClInclude Include="supermen-pskel.hxx" />
+ </ItemGroup>
+ <ItemGroup>
+ <CustomBuild Include="supermen.xsd">
+ <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">xsd supermen.xsd</Message>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">xsd cxx-parser --generate-polymorphic supermen.xsd</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">supermen-pskel.hxx;supermen-pskel.cxx;%(Outputs)</Outputs>
+ <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">xsd supermen.xsd</Message>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">xsd cxx-parser --generate-polymorphic supermen.xsd</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">supermen-pskel.hxx;supermen-pskel.cxx;%(Outputs)</Outputs>
+ <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">xsd supermen.xsd</Message>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">xsd cxx-parser --generate-polymorphic supermen.xsd</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">supermen-pskel.hxx;supermen-pskel.cxx;%(Outputs)</Outputs>
+ <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">xsd supermen.xsd</Message>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">xsd cxx-parser --generate-polymorphic supermen.xsd</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">supermen-pskel.hxx;supermen-pskel.cxx;%(Outputs)</Outputs>
+ </CustomBuild>
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="Readme.txt" />
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project>
\ No newline at end of file diff --git a/xsd/dist/examples/cxx/parser/polymorphism/polymorphism-10.0.vcxproj.filters b/xsd/dist/examples/cxx/parser/polymorphism/polymorphism-10.0.vcxproj.filters new file mode 100644 index 0000000..eb84ea1 --- /dev/null +++ b/xsd/dist/examples/cxx/parser/polymorphism/polymorphism-10.0.vcxproj.filters @@ -0,0 +1,44 @@ +<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="Source Files">
+ <UniqueIdentifier>{1B970E5F-EBC0-44A7-A542-7EBFADBF1573}</UniqueIdentifier>
+ <Extensions>cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+ </Filter>
+ <Filter Include="Header Files">
+ <UniqueIdentifier>{B49CCB93-BC13-4222-A005-6785C8220E30}</UniqueIdentifier>
+ <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
+ </Filter>
+ <Filter Include="Schema Files">
+ <UniqueIdentifier>{408b97b6-8a71-4f5b-976a-dc6c59b92362}</UniqueIdentifier>
+ <Extensions>xsd</Extensions>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="driver.cxx">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="supermen-pimpl.cxx">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="supermen-pskel.cxx">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="supermen-pimpl.hxx">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="supermen-pskel.hxx">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="Readme.txt" />
+ </ItemGroup>
+ <ItemGroup>
+ <CustomBuild Include="supermen.xsd">
+ <Filter>Schema Files</Filter>
+ </CustomBuild>
+ </ItemGroup>
+</Project>
\ No newline at end of file diff --git a/xsd/dist/examples/cxx/parser/polymorphism/polymorphism-7.1.vcproj b/xsd/dist/examples/cxx/parser/polymorphism/polymorphism-7.1.vcproj new file mode 100644 index 0000000..9f0724b --- /dev/null +++ b/xsd/dist/examples/cxx/parser/polymorphism/polymorphism-7.1.vcproj @@ -0,0 +1,170 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="polymorphism"
+ ProjectGUID="{E05F914A-490B-4780-9BAB-1ED225B3DBEE}"
+ RootNamespace="polymorphism"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="TRUE"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="5"
+ RuntimeTypeInfo="TRUE"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="4"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="TRUE"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="4"
+ RuntimeTypeInfo="TRUE"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="3"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{1B970E5F-EBC0-44A7-A542-7EBFADBF1573}">
+ <File
+ RelativePath=".\driver.cxx">
+ </File>
+ <File
+ RelativePath=".\supermen-pskel.cxx">
+ </File>
+ <File
+ RelativePath=".\supermen-pimpl.cxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{B49CCB93-BC13-4222-A005-6785C8220E30}">
+ <File
+ RelativePath=".\supermen-pskel.hxx">
+ </File>
+ <File
+ RelativePath=".\supermen-pimpl.hxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd">
+ <File
+ RelativePath=".\supermen.xsd">
+ <FileConfiguration
+ Name="Debug|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd supermen.xsd"
+ CommandLine="xsd cxx-parser --generate-polymorphic supermen.xsd"
+ Outputs="supermen-pskel.hxx;supermen-pskel.cxx"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd supermen.xsd"
+ CommandLine="xsd cxx-parser --generate-polymorphic supermen.xsd"
+ Outputs="supermen-pskel.hxx;supermen-pskel.cxx"/>
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/parser/polymorphism/polymorphism-8.0.vcproj b/xsd/dist/examples/cxx/parser/polymorphism/polymorphism-8.0.vcproj new file mode 100644 index 0000000..d6a0503 --- /dev/null +++ b/xsd/dist/examples/cxx/parser/polymorphism/polymorphism-8.0.vcproj @@ -0,0 +1,431 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="polymorphism"
+ ProjectGUID="{E05F914A-490B-4780-9BAB-1ED225B3DBEE}"
+ RootNamespace="polymorphism"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{1B970E5F-EBC0-44A7-A542-7EBFADBF1573}"
+ >
+ <File
+ RelativePath=".\driver.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\supermen-pimpl.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\supermen-pskel.cxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{B49CCB93-BC13-4222-A005-6785C8220E30}"
+ >
+ <File
+ RelativePath=".\supermen-pimpl.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\supermen-pskel.hxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd"
+ >
+ <File
+ RelativePath=".\supermen.xsd"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd supermen.xsd"
+ CommandLine="xsd cxx-parser --generate-polymorphic supermen.xsd"
+ Outputs="supermen-pskel.hxx;supermen-pskel.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd supermen.xsd"
+ CommandLine="xsd cxx-parser --generate-polymorphic supermen.xsd"
+ Outputs="supermen-pskel.hxx;supermen-pskel.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd supermen.xsd"
+ CommandLine="xsd cxx-parser --generate-polymorphic supermen.xsd"
+ Outputs="supermen-pskel.hxx;supermen-pskel.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd supermen.xsd"
+ CommandLine="xsd cxx-parser --generate-polymorphic supermen.xsd"
+ Outputs="supermen-pskel.hxx;supermen-pskel.cxx"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/parser/polymorphism/polymorphism-9.0.vcproj b/xsd/dist/examples/cxx/parser/polymorphism/polymorphism-9.0.vcproj new file mode 100644 index 0000000..a504d67 --- /dev/null +++ b/xsd/dist/examples/cxx/parser/polymorphism/polymorphism-9.0.vcproj @@ -0,0 +1,428 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="polymorphism"
+ ProjectGUID="{E05F914A-490B-4780-9BAB-1ED225B3DBEE}"
+ RootNamespace="polymorphism"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{1B970E5F-EBC0-44A7-A542-7EBFADBF1573}"
+ >
+ <File
+ RelativePath=".\driver.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\supermen-pimpl.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\supermen-pskel.cxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{B49CCB93-BC13-4222-A005-6785C8220E30}"
+ >
+ <File
+ RelativePath=".\supermen-pimpl.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\supermen-pskel.hxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd"
+ >
+ <File
+ RelativePath=".\supermen.xsd"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd supermen.xsd"
+ CommandLine="xsd cxx-parser --generate-polymorphic supermen.xsd"
+ Outputs="supermen-pskel.hxx;supermen-pskel.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd supermen.xsd"
+ CommandLine="xsd cxx-parser --generate-polymorphic supermen.xsd"
+ Outputs="supermen-pskel.hxx;supermen-pskel.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd supermen.xsd"
+ CommandLine="xsd cxx-parser --generate-polymorphic supermen.xsd"
+ Outputs="supermen-pskel.hxx;supermen-pskel.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd supermen.xsd"
+ CommandLine="xsd cxx-parser --generate-polymorphic supermen.xsd"
+ Outputs="supermen-pskel.hxx;supermen-pskel.cxx"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/parser/polymorphism/polymorphism-xerces2-7.1.vcproj b/xsd/dist/examples/cxx/parser/polymorphism/polymorphism-xerces2-7.1.vcproj new file mode 100644 index 0000000..c407617 --- /dev/null +++ b/xsd/dist/examples/cxx/parser/polymorphism/polymorphism-xerces2-7.1.vcproj @@ -0,0 +1,170 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="polymorphism"
+ ProjectGUID="{E05F914A-490B-4780-9BAB-1ED225B3DBEE}"
+ RootNamespace="polymorphism"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="TRUE"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="5"
+ RuntimeTypeInfo="TRUE"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="4"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="TRUE"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="4"
+ RuntimeTypeInfo="TRUE"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="3"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{1B970E5F-EBC0-44A7-A542-7EBFADBF1573}">
+ <File
+ RelativePath=".\driver.cxx">
+ </File>
+ <File
+ RelativePath=".\supermen-pskel.cxx">
+ </File>
+ <File
+ RelativePath=".\supermen-pimpl.cxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{B49CCB93-BC13-4222-A005-6785C8220E30}">
+ <File
+ RelativePath=".\supermen-pskel.hxx">
+ </File>
+ <File
+ RelativePath=".\supermen-pimpl.hxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd">
+ <File
+ RelativePath=".\supermen.xsd">
+ <FileConfiguration
+ Name="Debug|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd supermen.xsd"
+ CommandLine="xsd cxx-parser --generate-polymorphic supermen.xsd"
+ Outputs="supermen-pskel.hxx;supermen-pskel.cxx"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd supermen.xsd"
+ CommandLine="xsd cxx-parser --generate-polymorphic supermen.xsd"
+ Outputs="supermen-pskel.hxx;supermen-pskel.cxx"/>
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/parser/polymorphism/polymorphism-xerces2-8.0.vcproj b/xsd/dist/examples/cxx/parser/polymorphism/polymorphism-xerces2-8.0.vcproj new file mode 100644 index 0000000..5b478dc --- /dev/null +++ b/xsd/dist/examples/cxx/parser/polymorphism/polymorphism-xerces2-8.0.vcproj @@ -0,0 +1,431 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="polymorphism"
+ ProjectGUID="{E05F914A-490B-4780-9BAB-1ED225B3DBEE}"
+ RootNamespace="polymorphism"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{1B970E5F-EBC0-44A7-A542-7EBFADBF1573}"
+ >
+ <File
+ RelativePath=".\driver.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\supermen-pimpl.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\supermen-pskel.cxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{B49CCB93-BC13-4222-A005-6785C8220E30}"
+ >
+ <File
+ RelativePath=".\supermen-pimpl.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\supermen-pskel.hxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd"
+ >
+ <File
+ RelativePath=".\supermen.xsd"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd supermen.xsd"
+ CommandLine="xsd cxx-parser --generate-polymorphic supermen.xsd"
+ Outputs="supermen-pskel.hxx;supermen-pskel.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd supermen.xsd"
+ CommandLine="xsd cxx-parser --generate-polymorphic supermen.xsd"
+ Outputs="supermen-pskel.hxx;supermen-pskel.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd supermen.xsd"
+ CommandLine="xsd cxx-parser --generate-polymorphic supermen.xsd"
+ Outputs="supermen-pskel.hxx;supermen-pskel.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd supermen.xsd"
+ CommandLine="xsd cxx-parser --generate-polymorphic supermen.xsd"
+ Outputs="supermen-pskel.hxx;supermen-pskel.cxx"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/parser/polymorphism/polymorphism-xerces2-9.0.vcproj b/xsd/dist/examples/cxx/parser/polymorphism/polymorphism-xerces2-9.0.vcproj new file mode 100644 index 0000000..94d0e59 --- /dev/null +++ b/xsd/dist/examples/cxx/parser/polymorphism/polymorphism-xerces2-9.0.vcproj @@ -0,0 +1,428 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="polymorphism"
+ ProjectGUID="{E05F914A-490B-4780-9BAB-1ED225B3DBEE}"
+ RootNamespace="polymorphism"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{1B970E5F-EBC0-44A7-A542-7EBFADBF1573}"
+ >
+ <File
+ RelativePath=".\driver.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\supermen-pimpl.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\supermen-pskel.cxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{B49CCB93-BC13-4222-A005-6785C8220E30}"
+ >
+ <File
+ RelativePath=".\supermen-pimpl.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\supermen-pskel.hxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd"
+ >
+ <File
+ RelativePath=".\supermen.xsd"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd supermen.xsd"
+ CommandLine="xsd cxx-parser --generate-polymorphic supermen.xsd"
+ Outputs="supermen-pskel.hxx;supermen-pskel.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd supermen.xsd"
+ CommandLine="xsd cxx-parser --generate-polymorphic supermen.xsd"
+ Outputs="supermen-pskel.hxx;supermen-pskel.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd supermen.xsd"
+ CommandLine="xsd cxx-parser --generate-polymorphic supermen.xsd"
+ Outputs="supermen-pskel.hxx;supermen-pskel.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd supermen.xsd"
+ CommandLine="xsd cxx-parser --generate-polymorphic supermen.xsd"
+ Outputs="supermen-pskel.hxx;supermen-pskel.cxx"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/parser/polyroot/makefile b/xsd/dist/examples/cxx/parser/polyroot/makefile new file mode 100644 index 0000000..487ad08 --- /dev/null +++ b/xsd/dist/examples/cxx/parser/polyroot/makefile @@ -0,0 +1,31 @@ +root := ../../.. + +include $(root)/build/cxx/rules.make +include $(root)/build/xsd/parser-rules.make + +override XSDFLAGS += --generate-polymorphic + +# Build +# +driver: driver.o supermen-pskel.o supermen-pimpl.o + +driver.o: driver.cxx supermen-pimpl.hxx supermen-pskel.hxx +supermen-pimpl.o: supermen-pimpl.cxx supermen-pimpl.hxx supermen-pskel.hxx +supermen-pskel.o: supermen-pskel.cxx supermen-pskel.hxx + +supermen-pskel.hxx supermen-pskel.cxx: supermen.xsd + + +# Test. +# +.PHONY: test +test: driver person.xml superman.xml batman.xml + ./driver person.xml + ./driver superman.xml + ./driver batman.xml + +# Clean. +# +.PHONY: clean +clean: + rm -f supermen-pskel.?xx supermen-pimpl.o supermen-pskel.o driver.o driver diff --git a/xsd/dist/examples/cxx/parser/polyroot/polyroot-10.0.vcxproj b/xsd/dist/examples/cxx/parser/polyroot/polyroot-10.0.vcxproj new file mode 100644 index 0000000..41906bd --- /dev/null +++ b/xsd/dist/examples/cxx/parser/polyroot/polyroot-10.0.vcxproj @@ -0,0 +1,211 @@ +<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectName>polyroot</ProjectName>
+ <ProjectGuid>{FB2098FC-CE8C-4A6B-A064-E2705324A16A}</ProjectGuid>
+ <RootNamespace>polyroot</RootNamespace>
+ <Keyword>Win32Proj</Keyword>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">driver</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">driver</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">driver</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">driver</TargetName>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Debug\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Debug\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)\$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)\$(Configuration)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Release\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Release\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)\$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)\$(Configuration)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ <RuntimeTypeInfo>true</RuntimeTypeInfo>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>xerces-c_3D.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)driver.pdb</ProgramDatabaseFile>
+ <SubSystem>Console</SubSystem>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ <RuntimeTypeInfo>true</RuntimeTypeInfo>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>xerces-c_3D.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)driver.pdb</ProgramDatabaseFile>
+ <SubSystem>Console</SubSystem>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <RuntimeTypeInfo>true</RuntimeTypeInfo>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>xerces-c_3.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <RuntimeTypeInfo>true</RuntimeTypeInfo>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>xerces-c_3.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="driver.cxx" />
+ <ClCompile Include="supermen-pimpl.cxx" />
+ <ClCompile Include="supermen-pskel.cxx" />
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="supermen-pimpl.hxx" />
+ <ClInclude Include="supermen-pskel.hxx" />
+ </ItemGroup>
+ <ItemGroup>
+ <CustomBuild Include="supermen.xsd">
+ <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">xsd supermen.xsd</Message>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">xsd cxx-parser --generate-polymorphic supermen.xsd</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">supermen-pskel.hxx;supermen-pskel.cxx;%(Outputs)</Outputs>
+ <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">xsd supermen.xsd</Message>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">xsd cxx-parser --generate-polymorphic supermen.xsd</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">supermen-pskel.hxx;supermen-pskel.cxx;%(Outputs)</Outputs>
+ <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">xsd supermen.xsd</Message>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">xsd cxx-parser --generate-polymorphic supermen.xsd</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">supermen-pskel.hxx;supermen-pskel.cxx;%(Outputs)</Outputs>
+ <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">xsd supermen.xsd</Message>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">xsd cxx-parser --generate-polymorphic supermen.xsd</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">supermen-pskel.hxx;supermen-pskel.cxx;%(Outputs)</Outputs>
+ </CustomBuild>
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="Readme.txt" />
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project>
\ No newline at end of file diff --git a/xsd/dist/examples/cxx/parser/polyroot/polyroot-10.0.vcxproj.filters b/xsd/dist/examples/cxx/parser/polyroot/polyroot-10.0.vcxproj.filters new file mode 100644 index 0000000..5b0ee29 --- /dev/null +++ b/xsd/dist/examples/cxx/parser/polyroot/polyroot-10.0.vcxproj.filters @@ -0,0 +1,44 @@ +<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="Source Files">
+ <UniqueIdentifier>{00F2FCE3-0165-405E-B027-F51956F669D1}</UniqueIdentifier>
+ <Extensions>cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+ </Filter>
+ <Filter Include="Header Files">
+ <UniqueIdentifier>{6F6E09B9-C59E-45EE-BC77-C2F22039A485}</UniqueIdentifier>
+ <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
+ </Filter>
+ <Filter Include="Schema Files">
+ <UniqueIdentifier>{91582f5b-59e2-4b82-9325-b99cf969649e}</UniqueIdentifier>
+ <Extensions>xsd</Extensions>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="driver.cxx">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="supermen-pimpl.cxx">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="supermen-pskel.cxx">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="supermen-pimpl.hxx">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="supermen-pskel.hxx">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="Readme.txt" />
+ </ItemGroup>
+ <ItemGroup>
+ <CustomBuild Include="supermen.xsd">
+ <Filter>Schema Files</Filter>
+ </CustomBuild>
+ </ItemGroup>
+</Project>
\ No newline at end of file diff --git a/xsd/dist/examples/cxx/parser/polyroot/polyroot-7.1.vcproj b/xsd/dist/examples/cxx/parser/polyroot/polyroot-7.1.vcproj new file mode 100644 index 0000000..a725981 --- /dev/null +++ b/xsd/dist/examples/cxx/parser/polyroot/polyroot-7.1.vcproj @@ -0,0 +1,170 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="polyroot"
+ ProjectGUID="{FB2098FC-CE8C-4A6B-A064-E2705324A16A}"
+ RootNamespace="polyroot"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="TRUE"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="5"
+ RuntimeTypeInfo="TRUE"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="4"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="TRUE"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="4"
+ RuntimeTypeInfo="TRUE"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="3"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{00F2FCE3-0165-405E-B027-F51956F669D1}">
+ <File
+ RelativePath=".\driver.cxx">
+ </File>
+ <File
+ RelativePath=".\supermen-pskel.cxx">
+ </File>
+ <File
+ RelativePath=".\supermen-pimpl.cxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{6F6E09B9-C59E-45EE-BC77-C2F22039A485}">
+ <File
+ RelativePath=".\supermen-pskel.hxx">
+ </File>
+ <File
+ RelativePath=".\supermen-pimpl.hxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd">
+ <File
+ RelativePath=".\supermen.xsd">
+ <FileConfiguration
+ Name="Debug|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd supermen.xsd"
+ CommandLine="xsd cxx-parser --generate-polymorphic supermen.xsd"
+ Outputs="supermen-pskel.hxx;supermen-pskel.cxx"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd supermen.xsd"
+ CommandLine="xsd cxx-parser --generate-polymorphic supermen.xsd"
+ Outputs="supermen-pskel.hxx;supermen-pskel.cxx"/>
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/parser/polyroot/polyroot-8.0.vcproj b/xsd/dist/examples/cxx/parser/polyroot/polyroot-8.0.vcproj new file mode 100644 index 0000000..d62670f --- /dev/null +++ b/xsd/dist/examples/cxx/parser/polyroot/polyroot-8.0.vcproj @@ -0,0 +1,431 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="polyroot"
+ ProjectGUID="{FB2098FC-CE8C-4A6B-A064-E2705324A16A}"
+ RootNamespace="polyroot"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{00F2FCE3-0165-405E-B027-F51956F669D1}"
+ >
+ <File
+ RelativePath=".\driver.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\supermen-pimpl.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\supermen-pskel.cxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{6F6E09B9-C59E-45EE-BC77-C2F22039A485}"
+ >
+ <File
+ RelativePath=".\supermen-pimpl.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\supermen-pskel.hxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd"
+ >
+ <File
+ RelativePath=".\supermen.xsd"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd supermen.xsd"
+ CommandLine="xsd cxx-parser --generate-polymorphic supermen.xsd"
+ Outputs="supermen-pskel.hxx;supermen-pskel.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd supermen.xsd"
+ CommandLine="xsd cxx-parser --generate-polymorphic supermen.xsd"
+ Outputs="supermen-pskel.hxx;supermen-pskel.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd supermen.xsd"
+ CommandLine="xsd cxx-parser --generate-polymorphic supermen.xsd"
+ Outputs="supermen-pskel.hxx;supermen-pskel.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd supermen.xsd"
+ CommandLine="xsd cxx-parser --generate-polymorphic supermen.xsd"
+ Outputs="supermen-pskel.hxx;supermen-pskel.cxx"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/parser/polyroot/polyroot-9.0.vcproj b/xsd/dist/examples/cxx/parser/polyroot/polyroot-9.0.vcproj new file mode 100644 index 0000000..33d4daa --- /dev/null +++ b/xsd/dist/examples/cxx/parser/polyroot/polyroot-9.0.vcproj @@ -0,0 +1,428 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="polyroot"
+ ProjectGUID="{FB2098FC-CE8C-4A6B-A064-E2705324A16A}"
+ RootNamespace="polyroot"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{00F2FCE3-0165-405E-B027-F51956F669D1}"
+ >
+ <File
+ RelativePath=".\driver.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\supermen-pimpl.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\supermen-pskel.cxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{6F6E09B9-C59E-45EE-BC77-C2F22039A485}"
+ >
+ <File
+ RelativePath=".\supermen-pimpl.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\supermen-pskel.hxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd"
+ >
+ <File
+ RelativePath=".\supermen.xsd"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd supermen.xsd"
+ CommandLine="xsd cxx-parser --generate-polymorphic supermen.xsd"
+ Outputs="supermen-pskel.hxx;supermen-pskel.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd supermen.xsd"
+ CommandLine="xsd cxx-parser --generate-polymorphic supermen.xsd"
+ Outputs="supermen-pskel.hxx;supermen-pskel.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd supermen.xsd"
+ CommandLine="xsd cxx-parser --generate-polymorphic supermen.xsd"
+ Outputs="supermen-pskel.hxx;supermen-pskel.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd supermen.xsd"
+ CommandLine="xsd cxx-parser --generate-polymorphic supermen.xsd"
+ Outputs="supermen-pskel.hxx;supermen-pskel.cxx"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/parser/polyroot/polyroot-xerces2-7.1.vcproj b/xsd/dist/examples/cxx/parser/polyroot/polyroot-xerces2-7.1.vcproj new file mode 100644 index 0000000..1cf2d7b --- /dev/null +++ b/xsd/dist/examples/cxx/parser/polyroot/polyroot-xerces2-7.1.vcproj @@ -0,0 +1,170 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="polyroot"
+ ProjectGUID="{FB2098FC-CE8C-4A6B-A064-E2705324A16A}"
+ RootNamespace="polyroot"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="TRUE"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="5"
+ RuntimeTypeInfo="TRUE"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="4"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="TRUE"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="4"
+ RuntimeTypeInfo="TRUE"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="3"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{00F2FCE3-0165-405E-B027-F51956F669D1}">
+ <File
+ RelativePath=".\driver.cxx">
+ </File>
+ <File
+ RelativePath=".\supermen-pskel.cxx">
+ </File>
+ <File
+ RelativePath=".\supermen-pimpl.cxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{6F6E09B9-C59E-45EE-BC77-C2F22039A485}">
+ <File
+ RelativePath=".\supermen-pskel.hxx">
+ </File>
+ <File
+ RelativePath=".\supermen-pimpl.hxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd">
+ <File
+ RelativePath=".\supermen.xsd">
+ <FileConfiguration
+ Name="Debug|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd supermen.xsd"
+ CommandLine="xsd cxx-parser --generate-polymorphic supermen.xsd"
+ Outputs="supermen-pskel.hxx;supermen-pskel.cxx"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd supermen.xsd"
+ CommandLine="xsd cxx-parser --generate-polymorphic supermen.xsd"
+ Outputs="supermen-pskel.hxx;supermen-pskel.cxx"/>
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/parser/polyroot/polyroot-xerces2-8.0.vcproj b/xsd/dist/examples/cxx/parser/polyroot/polyroot-xerces2-8.0.vcproj new file mode 100644 index 0000000..13ee0c1 --- /dev/null +++ b/xsd/dist/examples/cxx/parser/polyroot/polyroot-xerces2-8.0.vcproj @@ -0,0 +1,431 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="polyroot"
+ ProjectGUID="{FB2098FC-CE8C-4A6B-A064-E2705324A16A}"
+ RootNamespace="polyroot"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{00F2FCE3-0165-405E-B027-F51956F669D1}"
+ >
+ <File
+ RelativePath=".\driver.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\supermen-pimpl.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\supermen-pskel.cxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{6F6E09B9-C59E-45EE-BC77-C2F22039A485}"
+ >
+ <File
+ RelativePath=".\supermen-pimpl.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\supermen-pskel.hxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd"
+ >
+ <File
+ RelativePath=".\supermen.xsd"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd supermen.xsd"
+ CommandLine="xsd cxx-parser --generate-polymorphic supermen.xsd"
+ Outputs="supermen-pskel.hxx;supermen-pskel.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd supermen.xsd"
+ CommandLine="xsd cxx-parser --generate-polymorphic supermen.xsd"
+ Outputs="supermen-pskel.hxx;supermen-pskel.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd supermen.xsd"
+ CommandLine="xsd cxx-parser --generate-polymorphic supermen.xsd"
+ Outputs="supermen-pskel.hxx;supermen-pskel.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd supermen.xsd"
+ CommandLine="xsd cxx-parser --generate-polymorphic supermen.xsd"
+ Outputs="supermen-pskel.hxx;supermen-pskel.cxx"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/parser/polyroot/polyroot-xerces2-9.0.vcproj b/xsd/dist/examples/cxx/parser/polyroot/polyroot-xerces2-9.0.vcproj new file mode 100644 index 0000000..792cac2 --- /dev/null +++ b/xsd/dist/examples/cxx/parser/polyroot/polyroot-xerces2-9.0.vcproj @@ -0,0 +1,428 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="polyroot"
+ ProjectGUID="{FB2098FC-CE8C-4A6B-A064-E2705324A16A}"
+ RootNamespace="polyroot"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{00F2FCE3-0165-405E-B027-F51956F669D1}"
+ >
+ <File
+ RelativePath=".\driver.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\supermen-pimpl.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\supermen-pskel.cxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{6F6E09B9-C59E-45EE-BC77-C2F22039A485}"
+ >
+ <File
+ RelativePath=".\supermen-pimpl.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\supermen-pskel.hxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd"
+ >
+ <File
+ RelativePath=".\supermen.xsd"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd supermen.xsd"
+ CommandLine="xsd cxx-parser --generate-polymorphic supermen.xsd"
+ Outputs="supermen-pskel.hxx;supermen-pskel.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd supermen.xsd"
+ CommandLine="xsd cxx-parser --generate-polymorphic supermen.xsd"
+ Outputs="supermen-pskel.hxx;supermen-pskel.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd supermen.xsd"
+ CommandLine="xsd cxx-parser --generate-polymorphic supermen.xsd"
+ Outputs="supermen-pskel.hxx;supermen-pskel.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd supermen.xsd"
+ CommandLine="xsd cxx-parser --generate-polymorphic supermen.xsd"
+ Outputs="supermen-pskel.hxx;supermen-pskel.cxx"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/parser/wildcard/makefile b/xsd/dist/examples/cxx/parser/wildcard/makefile new file mode 100644 index 0000000..924e937 --- /dev/null +++ b/xsd/dist/examples/cxx/parser/wildcard/makefile @@ -0,0 +1,28 @@ +root := ../../.. + +include $(root)/build/cxx/rules.make +include $(root)/build/xsd/parser-rules.make + + +# Build. +# +driver: driver.o email-pskel.o + +driver.o: driver.cxx email-pskel.hxx +email-pskel.o: email-pskel.cxx email-pskel.hxx + +email-pskel.hxx email-pskel.cxx: email.xsd + + +# Test. +# +.PHONY: test +test: driver email.xml + ./driver email.xml + + +# Clean. +# +.PHONY: clean +clean: + rm -f email-pskel.?xx email-pskel.o driver.o driver diff --git a/xsd/dist/examples/cxx/parser/wildcard/wildcard-10.0.vcxproj b/xsd/dist/examples/cxx/parser/wildcard/wildcard-10.0.vcxproj new file mode 100644 index 0000000..749e901 --- /dev/null +++ b/xsd/dist/examples/cxx/parser/wildcard/wildcard-10.0.vcxproj @@ -0,0 +1,205 @@ +<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectName>wildcard</ProjectName>
+ <ProjectGuid>{9832425B-38D5-44EC-AED6-3ED4353B24EA}</ProjectGuid>
+ <RootNamespace>wildcard</RootNamespace>
+ <Keyword>Win32Proj</Keyword>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">driver</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">driver</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">driver</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">driver</TargetName>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Debug\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Debug\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)\$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)\$(Configuration)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Release\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Release\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)\$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)\$(Configuration)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>xerces-c_3D.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)driver.pdb</ProgramDatabaseFile>
+ <SubSystem>Console</SubSystem>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>xerces-c_3D.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)driver.pdb</ProgramDatabaseFile>
+ <SubSystem>Console</SubSystem>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>xerces-c_3.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>xerces-c_3.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="driver.cxx" />
+ <ClCompile Include="email-pskel.cxx" />
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="email-pskel.hxx" />
+ </ItemGroup>
+ <ItemGroup>
+ <CustomBuild Include="email.xsd">
+ <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">xsd email.xsd</Message>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">xsd cxx-parser email.xsd</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">email-pskel.hxx;email-pskel.cxx;%(Outputs)</Outputs>
+ <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">xsd email.xsd</Message>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">xsd cxx-parser email.xsd</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">email-pskel.hxx;email-pskel.cxx;%(Outputs)</Outputs>
+ <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">xsd email.xsd</Message>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">xsd cxx-parser email.xsd</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">email-pskel.hxx;email-pskel.cxx;%(Outputs)</Outputs>
+ <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">xsd email.xsd</Message>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">xsd cxx-parser email.xsd</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">email-pskel.hxx;email-pskel.cxx;%(Outputs)</Outputs>
+ </CustomBuild>
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="Readme.txt" />
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project>
\ No newline at end of file diff --git a/xsd/dist/examples/cxx/parser/wildcard/wildcard-10.0.vcxproj.filters b/xsd/dist/examples/cxx/parser/wildcard/wildcard-10.0.vcxproj.filters new file mode 100644 index 0000000..756239f --- /dev/null +++ b/xsd/dist/examples/cxx/parser/wildcard/wildcard-10.0.vcxproj.filters @@ -0,0 +1,38 @@ +<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="Source Files">
+ <UniqueIdentifier>{F05001BC-BAEB-4D9D-89E4-D19B208F34BF}</UniqueIdentifier>
+ <Extensions>cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+ </Filter>
+ <Filter Include="Header Files">
+ <UniqueIdentifier>{CDCB25B7-BCBA-4C74-828E-09B2D7860485}</UniqueIdentifier>
+ <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
+ </Filter>
+ <Filter Include="Schema Files">
+ <UniqueIdentifier>{1b27359f-6508-4bb0-96ed-b5a3fdb228c6}</UniqueIdentifier>
+ <Extensions>xsd</Extensions>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="driver.cxx">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="email-pskel.cxx">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="email-pskel.hxx">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="Readme.txt" />
+ </ItemGroup>
+ <ItemGroup>
+ <CustomBuild Include="email.xsd">
+ <Filter>Schema Files</Filter>
+ </CustomBuild>
+ </ItemGroup>
+</Project>
\ No newline at end of file diff --git a/xsd/dist/examples/cxx/parser/wildcard/wildcard-7.1.vcproj b/xsd/dist/examples/cxx/parser/wildcard/wildcard-7.1.vcproj new file mode 100644 index 0000000..a689a5f --- /dev/null +++ b/xsd/dist/examples/cxx/parser/wildcard/wildcard-7.1.vcproj @@ -0,0 +1,162 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="wildcard"
+ ProjectGUID="{9832425B-38D5-44EC-AED6-3ED4353B24EA}"
+ RootNamespace="wildcard"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="TRUE"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="5"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="4"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="TRUE"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="4"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="3"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{F05001BC-BAEB-4D9D-89E4-D19B208F34BF}">
+ <File
+ RelativePath=".\driver.cxx">
+ </File>
+ <File
+ RelativePath=".\email-pskel.cxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{CDCB25B7-BCBA-4C74-828E-09B2D7860485}">
+ <File
+ RelativePath=".\email-pskel.hxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd">
+ <File
+ RelativePath=".\email.xsd">
+ <FileConfiguration
+ Name="Debug|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd email.xsd"
+ CommandLine="xsd cxx-parser email.xsd"
+ Outputs="email-pskel.hxx;email-pskel.cxx"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd email.xsd"
+ CommandLine="xsd cxx-parser email.xsd"
+ Outputs="email-pskel.hxx;email-pskel.cxx"/>
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/parser/wildcard/wildcard-8.0.vcproj b/xsd/dist/examples/cxx/parser/wildcard/wildcard-8.0.vcproj new file mode 100644 index 0000000..a84eda5 --- /dev/null +++ b/xsd/dist/examples/cxx/parser/wildcard/wildcard-8.0.vcproj @@ -0,0 +1,419 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="wildcard"
+ ProjectGUID="{9832425B-38D5-44EC-AED6-3ED4353B24EA}"
+ RootNamespace="wildcard"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{F05001BC-BAEB-4D9D-89E4-D19B208F34BF}"
+ >
+ <File
+ RelativePath=".\driver.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\email-pskel.cxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{CDCB25B7-BCBA-4C74-828E-09B2D7860485}"
+ >
+ <File
+ RelativePath=".\email-pskel.hxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd"
+ >
+ <File
+ RelativePath=".\email.xsd"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd email.xsd"
+ CommandLine="xsd cxx-parser email.xsd"
+ Outputs="email-pskel.hxx;email-pskel.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd email.xsd"
+ CommandLine="xsd cxx-parser email.xsd"
+ Outputs="email-pskel.hxx;email-pskel.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd email.xsd"
+ CommandLine="xsd cxx-parser email.xsd"
+ Outputs="email-pskel.hxx;email-pskel.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd email.xsd"
+ CommandLine="xsd cxx-parser email.xsd"
+ Outputs="email-pskel.hxx;email-pskel.cxx"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/parser/wildcard/wildcard-9.0.vcproj b/xsd/dist/examples/cxx/parser/wildcard/wildcard-9.0.vcproj new file mode 100644 index 0000000..a016883 --- /dev/null +++ b/xsd/dist/examples/cxx/parser/wildcard/wildcard-9.0.vcproj @@ -0,0 +1,416 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="wildcard"
+ ProjectGUID="{9832425B-38D5-44EC-AED6-3ED4353B24EA}"
+ RootNamespace="wildcard"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{F05001BC-BAEB-4D9D-89E4-D19B208F34BF}"
+ >
+ <File
+ RelativePath=".\driver.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\email-pskel.cxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{CDCB25B7-BCBA-4C74-828E-09B2D7860485}"
+ >
+ <File
+ RelativePath=".\email-pskel.hxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd"
+ >
+ <File
+ RelativePath=".\email.xsd"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd email.xsd"
+ CommandLine="xsd cxx-parser email.xsd"
+ Outputs="email-pskel.hxx;email-pskel.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd email.xsd"
+ CommandLine="xsd cxx-parser email.xsd"
+ Outputs="email-pskel.hxx;email-pskel.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd email.xsd"
+ CommandLine="xsd cxx-parser email.xsd"
+ Outputs="email-pskel.hxx;email-pskel.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd email.xsd"
+ CommandLine="xsd cxx-parser email.xsd"
+ Outputs="email-pskel.hxx;email-pskel.cxx"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/parser/wildcard/wildcard-xerces2-7.1.vcproj b/xsd/dist/examples/cxx/parser/wildcard/wildcard-xerces2-7.1.vcproj new file mode 100644 index 0000000..b1cca07 --- /dev/null +++ b/xsd/dist/examples/cxx/parser/wildcard/wildcard-xerces2-7.1.vcproj @@ -0,0 +1,162 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="wildcard"
+ ProjectGUID="{9832425B-38D5-44EC-AED6-3ED4353B24EA}"
+ RootNamespace="wildcard"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="TRUE"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="5"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="4"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="TRUE"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="4"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="3"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{F05001BC-BAEB-4D9D-89E4-D19B208F34BF}">
+ <File
+ RelativePath=".\driver.cxx">
+ </File>
+ <File
+ RelativePath=".\email-pskel.cxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{CDCB25B7-BCBA-4C74-828E-09B2D7860485}">
+ <File
+ RelativePath=".\email-pskel.hxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd">
+ <File
+ RelativePath=".\email.xsd">
+ <FileConfiguration
+ Name="Debug|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd email.xsd"
+ CommandLine="xsd cxx-parser email.xsd"
+ Outputs="email-pskel.hxx;email-pskel.cxx"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd email.xsd"
+ CommandLine="xsd cxx-parser email.xsd"
+ Outputs="email-pskel.hxx;email-pskel.cxx"/>
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/parser/wildcard/wildcard-xerces2-8.0.vcproj b/xsd/dist/examples/cxx/parser/wildcard/wildcard-xerces2-8.0.vcproj new file mode 100644 index 0000000..15a62f2 --- /dev/null +++ b/xsd/dist/examples/cxx/parser/wildcard/wildcard-xerces2-8.0.vcproj @@ -0,0 +1,419 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="wildcard"
+ ProjectGUID="{9832425B-38D5-44EC-AED6-3ED4353B24EA}"
+ RootNamespace="wildcard"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{F05001BC-BAEB-4D9D-89E4-D19B208F34BF}"
+ >
+ <File
+ RelativePath=".\driver.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\email-pskel.cxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{CDCB25B7-BCBA-4C74-828E-09B2D7860485}"
+ >
+ <File
+ RelativePath=".\email-pskel.hxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd"
+ >
+ <File
+ RelativePath=".\email.xsd"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd email.xsd"
+ CommandLine="xsd cxx-parser email.xsd"
+ Outputs="email-pskel.hxx;email-pskel.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd email.xsd"
+ CommandLine="xsd cxx-parser email.xsd"
+ Outputs="email-pskel.hxx;email-pskel.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd email.xsd"
+ CommandLine="xsd cxx-parser email.xsd"
+ Outputs="email-pskel.hxx;email-pskel.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd email.xsd"
+ CommandLine="xsd cxx-parser email.xsd"
+ Outputs="email-pskel.hxx;email-pskel.cxx"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/parser/wildcard/wildcard-xerces2-9.0.vcproj b/xsd/dist/examples/cxx/parser/wildcard/wildcard-xerces2-9.0.vcproj new file mode 100644 index 0000000..8ff8985 --- /dev/null +++ b/xsd/dist/examples/cxx/parser/wildcard/wildcard-xerces2-9.0.vcproj @@ -0,0 +1,416 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="wildcard"
+ ProjectGUID="{9832425B-38D5-44EC-AED6-3ED4353B24EA}"
+ RootNamespace="wildcard"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{F05001BC-BAEB-4D9D-89E4-D19B208F34BF}"
+ >
+ <File
+ RelativePath=".\driver.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\email-pskel.cxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{CDCB25B7-BCBA-4C74-828E-09B2D7860485}"
+ >
+ <File
+ RelativePath=".\email-pskel.hxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd"
+ >
+ <File
+ RelativePath=".\email.xsd"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd email.xsd"
+ CommandLine="xsd cxx-parser email.xsd"
+ Outputs="email-pskel.hxx;email-pskel.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd email.xsd"
+ CommandLine="xsd cxx-parser email.xsd"
+ Outputs="email-pskel.hxx;email-pskel.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd email.xsd"
+ CommandLine="xsd cxx-parser email.xsd"
+ Outputs="email-pskel.hxx;email-pskel.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd email.xsd"
+ CommandLine="xsd cxx-parser email.xsd"
+ Outputs="email-pskel.hxx;email-pskel.cxx"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/binary/boost/boost-10.0.sln b/xsd/dist/examples/cxx/tree/binary/boost/boost-10.0.sln new file mode 100644 index 0000000..de4071f --- /dev/null +++ b/xsd/dist/examples/cxx/tree/binary/boost/boost-10.0.sln @@ -0,0 +1,25 @@ +Microsoft Visual Studio Solution File, Format Version 11.00
+# Visual Studio 2010
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "boost", "boost-10.0.vcxproj", "{0C3A70E2-F673-46B7-B23D-9888266918D5}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Debug|x64 = Debug|x64
+ Release|Win32 = Release|Win32
+ Release|x64 = Release|x64
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {0C3A70E2-F673-46B7-B23D-9888266918D5}.Debug|Win32.ActiveCfg = Debug|Win32
+ {0C3A70E2-F673-46B7-B23D-9888266918D5}.Debug|Win32.Build.0 = Debug|Win32
+ {0C3A70E2-F673-46B7-B23D-9888266918D5}.Debug|x64.ActiveCfg = Debug|x64
+ {0C3A70E2-F673-46B7-B23D-9888266918D5}.Debug|x64.Build.0 = Debug|x64
+ {0C3A70E2-F673-46B7-B23D-9888266918D5}.Release|Win32.ActiveCfg = Release|Win32
+ {0C3A70E2-F673-46B7-B23D-9888266918D5}.Release|Win32.Build.0 = Release|Win32
+ {0C3A70E2-F673-46B7-B23D-9888266918D5}.Release|x64.ActiveCfg = Release|x64
+ {0C3A70E2-F673-46B7-B23D-9888266918D5}.Release|x64.Build.0 = Release|x64
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/xsd/dist/examples/cxx/tree/binary/boost/boost-10.0.vcxproj b/xsd/dist/examples/cxx/tree/binary/boost/boost-10.0.vcxproj new file mode 100644 index 0000000..8df3f37 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/binary/boost/boost-10.0.vcxproj @@ -0,0 +1,212 @@ +<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectName>boost</ProjectName>
+ <ProjectGuid>{0C3A70E2-F673-46B7-B23D-9888266918D5}</ProjectGuid>
+ <RootNamespace>boost</RootNamespace>
+ <Keyword>Win32Proj</Keyword>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">driver</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">driver</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">driver</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">driver</TargetName>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Debug\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Debug\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)\$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)\$(Configuration)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Release\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Release\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)\$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)\$(Configuration)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <RuntimeTypeInfo>true</RuntimeTypeInfo>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>xerces-c_3D.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)driver.pdb</ProgramDatabaseFile>
+ <SubSystem>Console</SubSystem>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <RuntimeTypeInfo>true</RuntimeTypeInfo>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>xerces-c_3D.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)driver.pdb</ProgramDatabaseFile>
+ <SubSystem>Console</SubSystem>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <RuntimeTypeInfo>true</RuntimeTypeInfo>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>xerces-c_3.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <RuntimeTypeInfo>true</RuntimeTypeInfo>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>xerces-c_3.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="driver.cxx" />
+ <ClCompile Include="library.cxx" />
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="boost-archive-extraction.hxx" />
+ <ClInclude Include="boost-archive-insertion.hxx" />
+ <ClInclude Include="library-prologue.hxx" />
+ <ClInclude Include="library.hxx" />
+ </ItemGroup>
+ <ItemGroup>
+ <CustomBuild Include="library.xsd">
+ <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">xsd library.xsd</Message>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">xsd cxx-tree --generate-ostream --hxx-prologue-file library-prologue.hxx --generate-insertion boost::archive::text_oarchive --generate-extraction boost::archive::text_iarchive library.xsd</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">library.hxx;library.cxx;%(Outputs)</Outputs>
+ <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">xsd library.xsd</Message>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">xsd cxx-tree --generate-ostream --hxx-prologue-file library-prologue.hxx --generate-insertion boost::archive::text_oarchive --generate-extraction boost::archive::text_iarchive library.xsd</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">library.hxx;library.cxx;%(Outputs)</Outputs>
+ <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">xsd library.xsd</Message>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">xsd cxx-tree --generate-ostream --hxx-prologue-file library-prologue.hxx --generate-insertion boost::archive::text_oarchive --generate-extraction boost::archive::text_iarchive library.xsd</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">library.hxx;library.cxx;%(Outputs)</Outputs>
+ <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">xsd library.xsd</Message>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">xsd cxx-tree --generate-ostream --hxx-prologue-file library-prologue.hxx --generate-insertion boost::archive::text_oarchive --generate-extraction boost::archive::text_iarchive library.xsd</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">library.hxx;library.cxx;%(Outputs)</Outputs>
+ </CustomBuild>
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="Readme.txt" />
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project>
\ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/binary/boost/boost-10.0.vcxproj.filters b/xsd/dist/examples/cxx/tree/binary/boost/boost-10.0.vcxproj.filters new file mode 100644 index 0000000..edb71a3 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/binary/boost/boost-10.0.vcxproj.filters @@ -0,0 +1,47 @@ +<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="Source Files">
+ <UniqueIdentifier>{22FBBBBD-3A62-471C-867C-8B6F5B3531A9}</UniqueIdentifier>
+ <Extensions>cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+ </Filter>
+ <Filter Include="Header Files">
+ <UniqueIdentifier>{BB6813A9-25E1-49A2-8FCC-FAC9FC4C27FB}</UniqueIdentifier>
+ <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
+ </Filter>
+ <Filter Include="Schema Files">
+ <UniqueIdentifier>{458e67fd-1629-41ef-9a2b-66709e69a9bf}</UniqueIdentifier>
+ <Extensions>xsd</Extensions>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="driver.cxx">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="library.cxx">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="boost-archive-extraction.hxx">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="boost-archive-insertion.hxx">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="library-prologue.hxx">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="library.hxx">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="Readme.txt" />
+ </ItemGroup>
+ <ItemGroup>
+ <CustomBuild Include="library.xsd">
+ <Filter>Schema Files</Filter>
+ </CustomBuild>
+ </ItemGroup>
+</Project>
\ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/binary/boost/boost-7.1.sln b/xsd/dist/examples/cxx/tree/binary/boost/boost-7.1.sln new file mode 100644 index 0000000..a819e22 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/binary/boost/boost-7.1.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 8.00
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "boost", "boost-7.1.vcproj", "{0C3A70E2-F673-46B7-B23D-9888266918D5}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Global
+ GlobalSection(SolutionConfiguration) = preSolution
+ Debug = Debug
+ Release = Release
+ EndGlobalSection
+ GlobalSection(ProjectConfiguration) = postSolution
+ {0C3A70E2-F673-46B7-B23D-9888266918D5}.Debug.ActiveCfg = Debug|Win32
+ {0C3A70E2-F673-46B7-B23D-9888266918D5}.Debug.Build.0 = Debug|Win32
+ {0C3A70E2-F673-46B7-B23D-9888266918D5}.Release.ActiveCfg = Release|Win32
+ {0C3A70E2-F673-46B7-B23D-9888266918D5}.Release.Build.0 = Release|Win32
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ EndGlobalSection
+ GlobalSection(ExtensibilityAddIns) = postSolution
+ EndGlobalSection
+EndGlobal
diff --git a/xsd/dist/examples/cxx/tree/binary/boost/boost-7.1.vcproj b/xsd/dist/examples/cxx/tree/binary/boost/boost-7.1.vcproj new file mode 100644 index 0000000..1332c12 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/binary/boost/boost-7.1.vcproj @@ -0,0 +1,173 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="boost"
+ ProjectGUID="{0C3A70E2-F673-46B7-B23D-9888266918D5}"
+ RootNamespace="boost"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="TRUE"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ RuntimeTypeInfo="TRUE"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="4"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="TRUE"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ RuntimeTypeInfo="TRUE"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="3"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{22FBBBBD-3A62-471C-867C-8B6F5B3531A9}">
+ <File
+ RelativePath=".\driver.cxx">
+ </File>
+ <File
+ RelativePath=".\library.cxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{BB6813A9-25E1-49A2-8FCC-FAC9FC4C27FB}">
+ <File
+ RelativePath=".\library.hxx">
+ </File>
+ <File
+ RelativePath=".\library-prologue.hxx">
+ </File>
+ <File
+ RelativePath=".\boost-archive-insertion.hxx">
+ </File>
+ <File
+ RelativePath=".\boost-archive-extraction.hxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd">
+ <File
+ RelativePath=".\library.xsd">
+ <FileConfiguration
+ Name="Debug|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree --generate-ostream --generate-intellisense --hxx-prologue-file library-prologue.hxx --generate-insertion boost::archive::text_oarchive --generate-extraction boost::archive::text_iarchive library.xsd"
+ Outputs="library.hxx;library.cxx"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree --generate-ostream --generate-intellisense --hxx-prologue-file library-prologue.hxx --generate-insertion boost::archive::text_oarchive --generate-extraction boost::archive::text_iarchive library.xsd"
+ Outputs="library.hxx;library.cxx"/>
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/binary/boost/boost-8.0.sln b/xsd/dist/examples/cxx/tree/binary/boost/boost-8.0.sln new file mode 100644 index 0000000..1cfe184 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/binary/boost/boost-8.0.sln @@ -0,0 +1,25 @@ +Microsoft Visual Studio Solution File, Format Version 9.00
+# Visual Studio 2005
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "boost", "boost-8.0.vcproj", "{0C3A70E2-F673-46B7-B23D-9888266918D5}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Debug|x64 = Debug|x64
+ Release|Win32 = Release|Win32
+ Release|x64 = Release|x64
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {0C3A70E2-F673-46B7-B23D-9888266918D5}.Debug|Win32.ActiveCfg = Debug|Win32
+ {0C3A70E2-F673-46B7-B23D-9888266918D5}.Debug|Win32.Build.0 = Debug|Win32
+ {0C3A70E2-F673-46B7-B23D-9888266918D5}.Debug|x64.ActiveCfg = Debug|x64
+ {0C3A70E2-F673-46B7-B23D-9888266918D5}.Debug|x64.Build.0 = Debug|x64
+ {0C3A70E2-F673-46B7-B23D-9888266918D5}.Release|Win32.ActiveCfg = Release|Win32
+ {0C3A70E2-F673-46B7-B23D-9888266918D5}.Release|Win32.Build.0 = Release|Win32
+ {0C3A70E2-F673-46B7-B23D-9888266918D5}.Release|x64.ActiveCfg = Release|x64
+ {0C3A70E2-F673-46B7-B23D-9888266918D5}.Release|x64.Build.0 = Release|x64
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/xsd/dist/examples/cxx/tree/binary/boost/boost-8.0.vcproj b/xsd/dist/examples/cxx/tree/binary/boost/boost-8.0.vcproj new file mode 100644 index 0000000..82d23ae --- /dev/null +++ b/xsd/dist/examples/cxx/tree/binary/boost/boost-8.0.vcproj @@ -0,0 +1,435 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="boost"
+ ProjectGUID="{0C3A70E2-F673-46B7-B23D-9888266918D5}"
+ RootNamespace="boost"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{22FBBBBD-3A62-471C-867C-8B6F5B3531A9}"
+ >
+ <File
+ RelativePath=".\driver.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\library.cxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{BB6813A9-25E1-49A2-8FCC-FAC9FC4C27FB}"
+ >
+ <File
+ RelativePath=".\boost-archive-extraction.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\boost-archive-insertion.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\library-prologue.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\library.hxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd"
+ >
+ <File
+ RelativePath=".\library.xsd"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree --generate-ostream --generate-intellisense --hxx-prologue-file library-prologue.hxx --generate-insertion boost::archive::text_oarchive --generate-extraction boost::archive::text_iarchive library.xsd"
+ Outputs="library.hxx;library.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree --generate-ostream --generate-intellisense --hxx-prologue-file library-prologue.hxx --generate-insertion boost::archive::text_oarchive --generate-extraction boost::archive::text_iarchive library.xsd"
+ Outputs="library.hxx;library.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree --generate-ostream --generate-intellisense --hxx-prologue-file library-prologue.hxx --generate-insertion boost::archive::text_oarchive --generate-extraction boost::archive::text_iarchive library.xsd"
+ Outputs="library.hxx;library.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree --generate-ostream --generate-intellisense --hxx-prologue-file library-prologue.hxx --generate-insertion boost::archive::text_oarchive --generate-extraction boost::archive::text_iarchive library.xsd"
+ Outputs="library.hxx;library.cxx"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/binary/boost/boost-9.0.sln b/xsd/dist/examples/cxx/tree/binary/boost/boost-9.0.sln new file mode 100644 index 0000000..b1c69ef --- /dev/null +++ b/xsd/dist/examples/cxx/tree/binary/boost/boost-9.0.sln @@ -0,0 +1,25 @@ +Microsoft Visual Studio Solution File, Format Version 10.00
+# Visual Studio 2008
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "boost", "boost-9.0.vcproj", "{0C3A70E2-F673-46B7-B23D-9888266918D5}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Debug|x64 = Debug|x64
+ Release|Win32 = Release|Win32
+ Release|x64 = Release|x64
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {0C3A70E2-F673-46B7-B23D-9888266918D5}.Debug|Win32.ActiveCfg = Debug|Win32
+ {0C3A70E2-F673-46B7-B23D-9888266918D5}.Debug|Win32.Build.0 = Debug|Win32
+ {0C3A70E2-F673-46B7-B23D-9888266918D5}.Debug|x64.ActiveCfg = Debug|x64
+ {0C3A70E2-F673-46B7-B23D-9888266918D5}.Debug|x64.Build.0 = Debug|x64
+ {0C3A70E2-F673-46B7-B23D-9888266918D5}.Release|Win32.ActiveCfg = Release|Win32
+ {0C3A70E2-F673-46B7-B23D-9888266918D5}.Release|Win32.Build.0 = Release|Win32
+ {0C3A70E2-F673-46B7-B23D-9888266918D5}.Release|x64.ActiveCfg = Release|x64
+ {0C3A70E2-F673-46B7-B23D-9888266918D5}.Release|x64.Build.0 = Release|x64
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/xsd/dist/examples/cxx/tree/binary/boost/boost-9.0.vcproj b/xsd/dist/examples/cxx/tree/binary/boost/boost-9.0.vcproj new file mode 100644 index 0000000..f5369af --- /dev/null +++ b/xsd/dist/examples/cxx/tree/binary/boost/boost-9.0.vcproj @@ -0,0 +1,432 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="boost"
+ ProjectGUID="{0C3A70E2-F673-46B7-B23D-9888266918D5}"
+ RootNamespace="boost"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{22FBBBBD-3A62-471C-867C-8B6F5B3531A9}"
+ >
+ <File
+ RelativePath=".\driver.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\library.cxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{BB6813A9-25E1-49A2-8FCC-FAC9FC4C27FB}"
+ >
+ <File
+ RelativePath=".\boost-archive-extraction.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\boost-archive-insertion.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\library-prologue.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\library.hxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd"
+ >
+ <File
+ RelativePath=".\library.xsd"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree --generate-ostream --hxx-prologue-file library-prologue.hxx --generate-insertion boost::archive::text_oarchive --generate-extraction boost::archive::text_iarchive library.xsd"
+ Outputs="library.hxx;library.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree --generate-ostream --hxx-prologue-file library-prologue.hxx --generate-insertion boost::archive::text_oarchive --generate-extraction boost::archive::text_iarchive library.xsd"
+ Outputs="library.hxx;library.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree --generate-ostream --hxx-prologue-file library-prologue.hxx --generate-insertion boost::archive::text_oarchive --generate-extraction boost::archive::text_iarchive library.xsd"
+ Outputs="library.hxx;library.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree --generate-ostream --hxx-prologue-file library-prologue.hxx --generate-insertion boost::archive::text_oarchive --generate-extraction boost::archive::text_iarchive library.xsd"
+ Outputs="library.hxx;library.cxx"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/binary/boost/boost-xerces2-7.1.sln b/xsd/dist/examples/cxx/tree/binary/boost/boost-xerces2-7.1.sln new file mode 100644 index 0000000..f6493d6 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/binary/boost/boost-xerces2-7.1.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 8.00
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "boost", "boost-xerces2-7.1.vcproj", "{0C3A70E2-F673-46B7-B23D-9888266918D5}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Global
+ GlobalSection(SolutionConfiguration) = preSolution
+ Debug = Debug
+ Release = Release
+ EndGlobalSection
+ GlobalSection(ProjectConfiguration) = postSolution
+ {0C3A70E2-F673-46B7-B23D-9888266918D5}.Debug.ActiveCfg = Debug|Win32
+ {0C3A70E2-F673-46B7-B23D-9888266918D5}.Debug.Build.0 = Debug|Win32
+ {0C3A70E2-F673-46B7-B23D-9888266918D5}.Release.ActiveCfg = Release|Win32
+ {0C3A70E2-F673-46B7-B23D-9888266918D5}.Release.Build.0 = Release|Win32
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ EndGlobalSection
+ GlobalSection(ExtensibilityAddIns) = postSolution
+ EndGlobalSection
+EndGlobal
diff --git a/xsd/dist/examples/cxx/tree/binary/boost/boost-xerces2-7.1.vcproj b/xsd/dist/examples/cxx/tree/binary/boost/boost-xerces2-7.1.vcproj new file mode 100644 index 0000000..5081f38 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/binary/boost/boost-xerces2-7.1.vcproj @@ -0,0 +1,173 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="boost"
+ ProjectGUID="{0C3A70E2-F673-46B7-B23D-9888266918D5}"
+ RootNamespace="boost"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="TRUE"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ RuntimeTypeInfo="TRUE"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="4"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="TRUE"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ RuntimeTypeInfo="TRUE"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="3"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{22FBBBBD-3A62-471C-867C-8B6F5B3531A9}">
+ <File
+ RelativePath=".\driver.cxx">
+ </File>
+ <File
+ RelativePath=".\library.cxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{BB6813A9-25E1-49A2-8FCC-FAC9FC4C27FB}">
+ <File
+ RelativePath=".\library.hxx">
+ </File>
+ <File
+ RelativePath=".\library-prologue.hxx">
+ </File>
+ <File
+ RelativePath=".\boost-archive-insertion.hxx">
+ </File>
+ <File
+ RelativePath=".\boost-archive-extraction.hxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd">
+ <File
+ RelativePath=".\library.xsd">
+ <FileConfiguration
+ Name="Debug|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree --generate-ostream --generate-intellisense --hxx-prologue-file library-prologue.hxx --generate-insertion boost::archive::text_oarchive --generate-extraction boost::archive::text_iarchive library.xsd"
+ Outputs="library.hxx;library.cxx"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree --generate-ostream --generate-intellisense --hxx-prologue-file library-prologue.hxx --generate-insertion boost::archive::text_oarchive --generate-extraction boost::archive::text_iarchive library.xsd"
+ Outputs="library.hxx;library.cxx"/>
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/binary/boost/boost-xerces2-8.0.sln b/xsd/dist/examples/cxx/tree/binary/boost/boost-xerces2-8.0.sln new file mode 100644 index 0000000..34ae78e --- /dev/null +++ b/xsd/dist/examples/cxx/tree/binary/boost/boost-xerces2-8.0.sln @@ -0,0 +1,25 @@ +Microsoft Visual Studio Solution File, Format Version 9.00
+# Visual Studio 2005
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "boost", "boost-xerces2-8.0.vcproj", "{0C3A70E2-F673-46B7-B23D-9888266918D5}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Debug|x64 = Debug|x64
+ Release|Win32 = Release|Win32
+ Release|x64 = Release|x64
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {0C3A70E2-F673-46B7-B23D-9888266918D5}.Debug|Win32.ActiveCfg = Debug|Win32
+ {0C3A70E2-F673-46B7-B23D-9888266918D5}.Debug|Win32.Build.0 = Debug|Win32
+ {0C3A70E2-F673-46B7-B23D-9888266918D5}.Debug|x64.ActiveCfg = Debug|x64
+ {0C3A70E2-F673-46B7-B23D-9888266918D5}.Debug|x64.Build.0 = Debug|x64
+ {0C3A70E2-F673-46B7-B23D-9888266918D5}.Release|Win32.ActiveCfg = Release|Win32
+ {0C3A70E2-F673-46B7-B23D-9888266918D5}.Release|Win32.Build.0 = Release|Win32
+ {0C3A70E2-F673-46B7-B23D-9888266918D5}.Release|x64.ActiveCfg = Release|x64
+ {0C3A70E2-F673-46B7-B23D-9888266918D5}.Release|x64.Build.0 = Release|x64
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/xsd/dist/examples/cxx/tree/binary/boost/boost-xerces2-8.0.vcproj b/xsd/dist/examples/cxx/tree/binary/boost/boost-xerces2-8.0.vcproj new file mode 100644 index 0000000..a3910f4 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/binary/boost/boost-xerces2-8.0.vcproj @@ -0,0 +1,435 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="boost"
+ ProjectGUID="{0C3A70E2-F673-46B7-B23D-9888266918D5}"
+ RootNamespace="boost"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{22FBBBBD-3A62-471C-867C-8B6F5B3531A9}"
+ >
+ <File
+ RelativePath=".\driver.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\library.cxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{BB6813A9-25E1-49A2-8FCC-FAC9FC4C27FB}"
+ >
+ <File
+ RelativePath=".\boost-archive-extraction.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\boost-archive-insertion.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\library-prologue.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\library.hxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd"
+ >
+ <File
+ RelativePath=".\library.xsd"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree --generate-ostream --generate-intellisense --hxx-prologue-file library-prologue.hxx --generate-insertion boost::archive::text_oarchive --generate-extraction boost::archive::text_iarchive library.xsd"
+ Outputs="library.hxx;library.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree --generate-ostream --generate-intellisense --hxx-prologue-file library-prologue.hxx --generate-insertion boost::archive::text_oarchive --generate-extraction boost::archive::text_iarchive library.xsd"
+ Outputs="library.hxx;library.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree --generate-ostream --generate-intellisense --hxx-prologue-file library-prologue.hxx --generate-insertion boost::archive::text_oarchive --generate-extraction boost::archive::text_iarchive library.xsd"
+ Outputs="library.hxx;library.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree --generate-ostream --generate-intellisense --hxx-prologue-file library-prologue.hxx --generate-insertion boost::archive::text_oarchive --generate-extraction boost::archive::text_iarchive library.xsd"
+ Outputs="library.hxx;library.cxx"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/binary/boost/boost-xerces2-9.0.sln b/xsd/dist/examples/cxx/tree/binary/boost/boost-xerces2-9.0.sln new file mode 100644 index 0000000..9e2d81e --- /dev/null +++ b/xsd/dist/examples/cxx/tree/binary/boost/boost-xerces2-9.0.sln @@ -0,0 +1,25 @@ +Microsoft Visual Studio Solution File, Format Version 10.00
+# Visual Studio 2008
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "boost", "boost-xerces2-9.0.vcproj", "{0C3A70E2-F673-46B7-B23D-9888266918D5}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Debug|x64 = Debug|x64
+ Release|Win32 = Release|Win32
+ Release|x64 = Release|x64
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {0C3A70E2-F673-46B7-B23D-9888266918D5}.Debug|Win32.ActiveCfg = Debug|Win32
+ {0C3A70E2-F673-46B7-B23D-9888266918D5}.Debug|Win32.Build.0 = Debug|Win32
+ {0C3A70E2-F673-46B7-B23D-9888266918D5}.Debug|x64.ActiveCfg = Debug|x64
+ {0C3A70E2-F673-46B7-B23D-9888266918D5}.Debug|x64.Build.0 = Debug|x64
+ {0C3A70E2-F673-46B7-B23D-9888266918D5}.Release|Win32.ActiveCfg = Release|Win32
+ {0C3A70E2-F673-46B7-B23D-9888266918D5}.Release|Win32.Build.0 = Release|Win32
+ {0C3A70E2-F673-46B7-B23D-9888266918D5}.Release|x64.ActiveCfg = Release|x64
+ {0C3A70E2-F673-46B7-B23D-9888266918D5}.Release|x64.Build.0 = Release|x64
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/xsd/dist/examples/cxx/tree/binary/boost/boost-xerces2-9.0.vcproj b/xsd/dist/examples/cxx/tree/binary/boost/boost-xerces2-9.0.vcproj new file mode 100644 index 0000000..f1d01ef --- /dev/null +++ b/xsd/dist/examples/cxx/tree/binary/boost/boost-xerces2-9.0.vcproj @@ -0,0 +1,432 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="boost"
+ ProjectGUID="{0C3A70E2-F673-46B7-B23D-9888266918D5}"
+ RootNamespace="boost"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{22FBBBBD-3A62-471C-867C-8B6F5B3531A9}"
+ >
+ <File
+ RelativePath=".\driver.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\library.cxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{BB6813A9-25E1-49A2-8FCC-FAC9FC4C27FB}"
+ >
+ <File
+ RelativePath=".\boost-archive-extraction.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\boost-archive-insertion.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\library-prologue.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\library.hxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd"
+ >
+ <File
+ RelativePath=".\library.xsd"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree --generate-ostream --hxx-prologue-file library-prologue.hxx --generate-insertion boost::archive::text_oarchive --generate-extraction boost::archive::text_iarchive library.xsd"
+ Outputs="library.hxx;library.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree --generate-ostream --hxx-prologue-file library-prologue.hxx --generate-insertion boost::archive::text_oarchive --generate-extraction boost::archive::text_iarchive library.xsd"
+ Outputs="library.hxx;library.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree --generate-ostream --hxx-prologue-file library-prologue.hxx --generate-insertion boost::archive::text_oarchive --generate-extraction boost::archive::text_iarchive library.xsd"
+ Outputs="library.hxx;library.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree --generate-ostream --hxx-prologue-file library-prologue.hxx --generate-insertion boost::archive::text_oarchive --generate-extraction boost::archive::text_iarchive library.xsd"
+ Outputs="library.hxx;library.cxx"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/binary/boost/makefile b/xsd/dist/examples/cxx/tree/binary/boost/makefile new file mode 100644 index 0000000..7c35f02 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/binary/boost/makefile @@ -0,0 +1,37 @@ +root := ../../../.. + +include $(root)/build/cxx/rules.make +include $(root)/build/xsd/tree-rules.make + + +override XSDFLAGS += --generate-ostream \ +--hxx-prologue-file library-prologue.hxx \ +--generate-insertion boost::archive::text_oarchive \ +--generate-extraction boost::archive::text_iarchive + + +override LIBS += -lboost_serialization + + +# Build. +# +driver: driver.o library.o + +library.o: library.cxx library.hxx boost-archive-insertion.hxx boost-archive-extraction.hxx +driver.o: driver.cxx library.hxx boost-archive-insertion.hxx boost-archive-extraction.hxx + +library.cxx library.hxx: library.xsd + + +# Test +# +.PHONY: test +test: driver library.xml + ./driver library.xml + + +# Clean. +# +.PHONY: clean +clean: + rm -f library.o library.?xx driver.o driver diff --git a/xsd/dist/examples/cxx/tree/binary/cdr/cdr-10.0.sln b/xsd/dist/examples/cxx/tree/binary/cdr/cdr-10.0.sln new file mode 100644 index 0000000..d3bf523 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/binary/cdr/cdr-10.0.sln @@ -0,0 +1,25 @@ +Microsoft Visual Studio Solution File, Format Version 11.00
+# Visual Studio 2010
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "cdr", "cdr-10.0.vcxproj", "{A8CC2814-5056-4953-8B4C-E52E72ADD36C}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Debug|x64 = Debug|x64
+ Release|Win32 = Release|Win32
+ Release|x64 = Release|x64
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {A8CC2814-5056-4953-8B4C-E52E72ADD36C}.Debug|Win32.ActiveCfg = Debug|Win32
+ {A8CC2814-5056-4953-8B4C-E52E72ADD36C}.Debug|Win32.Build.0 = Debug|Win32
+ {A8CC2814-5056-4953-8B4C-E52E72ADD36C}.Debug|x64.ActiveCfg = Debug|x64
+ {A8CC2814-5056-4953-8B4C-E52E72ADD36C}.Debug|x64.Build.0 = Debug|x64
+ {A8CC2814-5056-4953-8B4C-E52E72ADD36C}.Release|Win32.ActiveCfg = Release|Win32
+ {A8CC2814-5056-4953-8B4C-E52E72ADD36C}.Release|Win32.Build.0 = Release|Win32
+ {A8CC2814-5056-4953-8B4C-E52E72ADD36C}.Release|x64.ActiveCfg = Release|x64
+ {A8CC2814-5056-4953-8B4C-E52E72ADD36C}.Release|x64.Build.0 = Release|x64
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/xsd/dist/examples/cxx/tree/binary/cdr/cdr-10.0.vcxproj b/xsd/dist/examples/cxx/tree/binary/cdr/cdr-10.0.vcxproj new file mode 100644 index 0000000..a872d5f --- /dev/null +++ b/xsd/dist/examples/cxx/tree/binary/cdr/cdr-10.0.vcxproj @@ -0,0 +1,209 @@ +<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectName>cdr</ProjectName>
+ <ProjectGuid>{A8CC2814-5056-4953-8B4C-E52E72ADD36C}</ProjectGuid>
+ <RootNamespace>cdr</RootNamespace>
+ <Keyword>Win32Proj</Keyword>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">driver</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">driver</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">driver</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">driver</TargetName>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Debug\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Debug\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)\$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)\$(Configuration)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Release\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Release\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)\$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)\$(Configuration)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <RuntimeTypeInfo>true</RuntimeTypeInfo>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>xerces-c_3D.lib;ACEd.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)driver.pdb</ProgramDatabaseFile>
+ <SubSystem>Console</SubSystem>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <RuntimeTypeInfo>true</RuntimeTypeInfo>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>xerces-c_3D.lib;ACEd.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)driver.pdb</ProgramDatabaseFile>
+ <SubSystem>Console</SubSystem>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <RuntimeTypeInfo>true</RuntimeTypeInfo>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>xerces-c_3.lib;ACE.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <RuntimeTypeInfo>true</RuntimeTypeInfo>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>xerces-c_3.lib;ACE.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="driver.cxx" />
+ <ClCompile Include="library.cxx" />
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="library.hxx" />
+ </ItemGroup>
+ <ItemGroup>
+ <CustomBuild Include="library.xsd">
+ <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">xsd library.xsd</Message>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">xsd cxx-tree --generate-ostream --generate-insertion ACE_OutputCDR --generate-extraction ACE_InputCDR library.xsd</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">library.hxx;library.cxx;%(Outputs)</Outputs>
+ <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">xsd library.xsd</Message>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">xsd cxx-tree --generate-ostream --generate-insertion ACE_OutputCDR --generate-extraction ACE_InputCDR library.xsd</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">library.hxx;library.cxx;%(Outputs)</Outputs>
+ <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">xsd library.xsd</Message>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">xsd cxx-tree --generate-ostream --generate-insertion ACE_OutputCDR --generate-extraction ACE_InputCDR library.xsd</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">library.hxx;library.cxx;%(Outputs)</Outputs>
+ <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">xsd library.xsd</Message>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">xsd cxx-tree --generate-ostream --generate-insertion ACE_OutputCDR --generate-extraction ACE_InputCDR library.xsd</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">library.hxx;library.cxx;%(Outputs)</Outputs>
+ </CustomBuild>
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="Readme.txt" />
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project>
\ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/binary/cdr/cdr-10.0.vcxproj.filters b/xsd/dist/examples/cxx/tree/binary/cdr/cdr-10.0.vcxproj.filters new file mode 100644 index 0000000..92ff3ee --- /dev/null +++ b/xsd/dist/examples/cxx/tree/binary/cdr/cdr-10.0.vcxproj.filters @@ -0,0 +1,38 @@ +<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="Source Files">
+ <UniqueIdentifier>{50AA6317-04BE-45AB-98DD-7A32AEB710CF}</UniqueIdentifier>
+ <Extensions>cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+ </Filter>
+ <Filter Include="Header Files">
+ <UniqueIdentifier>{E740B51E-A619-4888-B6B9-566A3C77C60B}</UniqueIdentifier>
+ <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
+ </Filter>
+ <Filter Include="Schema Files">
+ <UniqueIdentifier>{37283c57-4a32-48ed-823b-0efdf7cdcf51}</UniqueIdentifier>
+ <Extensions>xsd</Extensions>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="driver.cxx">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="library.cxx">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="library.hxx">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="Readme.txt" />
+ </ItemGroup>
+ <ItemGroup>
+ <CustomBuild Include="library.xsd">
+ <Filter>Schema Files</Filter>
+ </CustomBuild>
+ </ItemGroup>
+</Project>
\ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/binary/cdr/cdr-7.1.sln b/xsd/dist/examples/cxx/tree/binary/cdr/cdr-7.1.sln new file mode 100644 index 0000000..ba99300 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/binary/cdr/cdr-7.1.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 8.00
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "cdr", "cdr-7.1.vcproj", "{A8CC2814-5056-4953-8B4C-E52E72ADD36C}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Global
+ GlobalSection(SolutionConfiguration) = preSolution
+ Debug = Debug
+ Release = Release
+ EndGlobalSection
+ GlobalSection(ProjectConfiguration) = postSolution
+ {A8CC2814-5056-4953-8B4C-E52E72ADD36C}.Debug.ActiveCfg = Debug|Win32
+ {A8CC2814-5056-4953-8B4C-E52E72ADD36C}.Debug.Build.0 = Debug|Win32
+ {A8CC2814-5056-4953-8B4C-E52E72ADD36C}.Release.ActiveCfg = Release|Win32
+ {A8CC2814-5056-4953-8B4C-E52E72ADD36C}.Release.Build.0 = Release|Win32
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ EndGlobalSection
+ GlobalSection(ExtensibilityAddIns) = postSolution
+ EndGlobalSection
+EndGlobal
diff --git a/xsd/dist/examples/cxx/tree/binary/cdr/cdr-7.1.vcproj b/xsd/dist/examples/cxx/tree/binary/cdr/cdr-7.1.vcproj new file mode 100644 index 0000000..90cc1ef --- /dev/null +++ b/xsd/dist/examples/cxx/tree/binary/cdr/cdr-7.1.vcproj @@ -0,0 +1,164 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="cdr"
+ ProjectGUID="{A8CC2814-5056-4953-8B4C-E52E72ADD36C}"
+ RootNamespace="cdr"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="TRUE"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ RuntimeTypeInfo="TRUE"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="4"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib ACEd.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="TRUE"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ RuntimeTypeInfo="TRUE"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="3"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib ACE.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{50AA6317-04BE-45AB-98DD-7A32AEB710CF}">
+ <File
+ RelativePath=".\driver.cxx">
+ </File>
+ <File
+ RelativePath=".\library.cxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{E740B51E-A619-4888-B6B9-566A3C77C60B}">
+ <File
+ RelativePath=".\library.hxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd">
+ <File
+ RelativePath=".\library.xsd">
+ <FileConfiguration
+ Name="Debug|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree --generate-ostream --generate-intellisense --generate-insertion ACE_OutputCDR --generate-extraction ACE_InputCDR library.xsd"
+ Outputs="library.hxx;library.cxx"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree --generate-ostream --generate-intellisense --generate-insertion ACE_OutputCDR --generate-extraction ACE_InputCDR library.xsd"
+ Outputs="library.hxx;library.cxx"/>
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/binary/cdr/cdr-8.0.sln b/xsd/dist/examples/cxx/tree/binary/cdr/cdr-8.0.sln new file mode 100644 index 0000000..d56f85b --- /dev/null +++ b/xsd/dist/examples/cxx/tree/binary/cdr/cdr-8.0.sln @@ -0,0 +1,25 @@ +Microsoft Visual Studio Solution File, Format Version 9.00
+# Visual Studio 2005
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "cdr", "cdr-8.0.vcproj", "{A8CC2814-5056-4953-8B4C-E52E72ADD36C}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Debug|x64 = Debug|x64
+ Release|Win32 = Release|Win32
+ Release|x64 = Release|x64
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {A8CC2814-5056-4953-8B4C-E52E72ADD36C}.Debug|Win32.ActiveCfg = Debug|Win32
+ {A8CC2814-5056-4953-8B4C-E52E72ADD36C}.Debug|Win32.Build.0 = Debug|Win32
+ {A8CC2814-5056-4953-8B4C-E52E72ADD36C}.Debug|x64.ActiveCfg = Debug|x64
+ {A8CC2814-5056-4953-8B4C-E52E72ADD36C}.Debug|x64.Build.0 = Debug|x64
+ {A8CC2814-5056-4953-8B4C-E52E72ADD36C}.Release|Win32.ActiveCfg = Release|Win32
+ {A8CC2814-5056-4953-8B4C-E52E72ADD36C}.Release|Win32.Build.0 = Release|Win32
+ {A8CC2814-5056-4953-8B4C-E52E72ADD36C}.Release|x64.ActiveCfg = Release|x64
+ {A8CC2814-5056-4953-8B4C-E52E72ADD36C}.Release|x64.Build.0 = Release|x64
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/xsd/dist/examples/cxx/tree/binary/cdr/cdr-8.0.vcproj b/xsd/dist/examples/cxx/tree/binary/cdr/cdr-8.0.vcproj new file mode 100644 index 0000000..d35171a --- /dev/null +++ b/xsd/dist/examples/cxx/tree/binary/cdr/cdr-8.0.vcproj @@ -0,0 +1,423 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="cdr"
+ ProjectGUID="{A8CC2814-5056-4953-8B4C-E52E72ADD36C}"
+ RootNamespace="cdr"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib ACEd.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib ACE.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib ACEd.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib ACE.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{50AA6317-04BE-45AB-98DD-7A32AEB710CF}"
+ >
+ <File
+ RelativePath=".\driver.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\library.cxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{E740B51E-A619-4888-B6B9-566A3C77C60B}"
+ >
+ <File
+ RelativePath=".\library.hxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd"
+ >
+ <File
+ RelativePath=".\library.xsd"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree --generate-ostream --generate-intellisense --generate-insertion ACE_OutputCDR --generate-extraction ACE_InputCDR library.xsd"
+ Outputs="library.hxx;library.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree --generate-ostream --generate-intellisense --generate-insertion ACE_OutputCDR --generate-extraction ACE_InputCDR library.xsd"
+ Outputs="library.hxx;library.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree --generate-ostream --generate-intellisense --generate-insertion ACE_OutputCDR --generate-extraction ACE_InputCDR library.xsd"
+ Outputs="library.hxx;library.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree --generate-ostream --generate-intellisense --generate-insertion ACE_OutputCDR --generate-extraction ACE_InputCDR library.xsd"
+ Outputs="library.hxx;library.cxx"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/binary/cdr/cdr-9.0.sln b/xsd/dist/examples/cxx/tree/binary/cdr/cdr-9.0.sln new file mode 100644 index 0000000..873085c --- /dev/null +++ b/xsd/dist/examples/cxx/tree/binary/cdr/cdr-9.0.sln @@ -0,0 +1,25 @@ +Microsoft Visual Studio Solution File, Format Version 10.00
+# Visual Studio 2008
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "cdr", "cdr-9.0.vcproj", "{A8CC2814-5056-4953-8B4C-E52E72ADD36C}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Debug|x64 = Debug|x64
+ Release|Win32 = Release|Win32
+ Release|x64 = Release|x64
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {A8CC2814-5056-4953-8B4C-E52E72ADD36C}.Debug|Win32.ActiveCfg = Debug|Win32
+ {A8CC2814-5056-4953-8B4C-E52E72ADD36C}.Debug|Win32.Build.0 = Debug|Win32
+ {A8CC2814-5056-4953-8B4C-E52E72ADD36C}.Debug|x64.ActiveCfg = Debug|x64
+ {A8CC2814-5056-4953-8B4C-E52E72ADD36C}.Debug|x64.Build.0 = Debug|x64
+ {A8CC2814-5056-4953-8B4C-E52E72ADD36C}.Release|Win32.ActiveCfg = Release|Win32
+ {A8CC2814-5056-4953-8B4C-E52E72ADD36C}.Release|Win32.Build.0 = Release|Win32
+ {A8CC2814-5056-4953-8B4C-E52E72ADD36C}.Release|x64.ActiveCfg = Release|x64
+ {A8CC2814-5056-4953-8B4C-E52E72ADD36C}.Release|x64.Build.0 = Release|x64
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/xsd/dist/examples/cxx/tree/binary/cdr/cdr-9.0.vcproj b/xsd/dist/examples/cxx/tree/binary/cdr/cdr-9.0.vcproj new file mode 100644 index 0000000..f379d83 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/binary/cdr/cdr-9.0.vcproj @@ -0,0 +1,420 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="cdr"
+ ProjectGUID="{A8CC2814-5056-4953-8B4C-E52E72ADD36C}"
+ RootNamespace="cdr"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib ACEd.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib ACEd.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib ACE.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib ACE.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{50AA6317-04BE-45AB-98DD-7A32AEB710CF}"
+ >
+ <File
+ RelativePath=".\driver.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\library.cxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{E740B51E-A619-4888-B6B9-566A3C77C60B}"
+ >
+ <File
+ RelativePath=".\library.hxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd"
+ >
+ <File
+ RelativePath=".\library.xsd"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree --generate-ostream --generate-insertion ACE_OutputCDR --generate-extraction ACE_InputCDR library.xsd"
+ Outputs="library.hxx;library.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree --generate-ostream --generate-insertion ACE_OutputCDR --generate-extraction ACE_InputCDR library.xsd"
+ Outputs="library.hxx;library.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree --generate-ostream --generate-insertion ACE_OutputCDR --generate-extraction ACE_InputCDR library.xsd"
+ Outputs="library.hxx;library.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree --generate-ostream --generate-insertion ACE_OutputCDR --generate-extraction ACE_InputCDR library.xsd"
+ Outputs="library.hxx;library.cxx"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/binary/cdr/cdr-xerces2-7.1.sln b/xsd/dist/examples/cxx/tree/binary/cdr/cdr-xerces2-7.1.sln new file mode 100644 index 0000000..c704679 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/binary/cdr/cdr-xerces2-7.1.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 8.00
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "cdr", "cdr-xerces2-7.1.vcproj", "{A8CC2814-5056-4953-8B4C-E52E72ADD36C}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Global
+ GlobalSection(SolutionConfiguration) = preSolution
+ Debug = Debug
+ Release = Release
+ EndGlobalSection
+ GlobalSection(ProjectConfiguration) = postSolution
+ {A8CC2814-5056-4953-8B4C-E52E72ADD36C}.Debug.ActiveCfg = Debug|Win32
+ {A8CC2814-5056-4953-8B4C-E52E72ADD36C}.Debug.Build.0 = Debug|Win32
+ {A8CC2814-5056-4953-8B4C-E52E72ADD36C}.Release.ActiveCfg = Release|Win32
+ {A8CC2814-5056-4953-8B4C-E52E72ADD36C}.Release.Build.0 = Release|Win32
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ EndGlobalSection
+ GlobalSection(ExtensibilityAddIns) = postSolution
+ EndGlobalSection
+EndGlobal
diff --git a/xsd/dist/examples/cxx/tree/binary/cdr/cdr-xerces2-7.1.vcproj b/xsd/dist/examples/cxx/tree/binary/cdr/cdr-xerces2-7.1.vcproj new file mode 100644 index 0000000..1723d58 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/binary/cdr/cdr-xerces2-7.1.vcproj @@ -0,0 +1,164 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="cdr"
+ ProjectGUID="{A8CC2814-5056-4953-8B4C-E52E72ADD36C}"
+ RootNamespace="cdr"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="TRUE"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ RuntimeTypeInfo="TRUE"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="4"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib ACEd.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="TRUE"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ RuntimeTypeInfo="TRUE"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="3"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib ACE.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{50AA6317-04BE-45AB-98DD-7A32AEB710CF}">
+ <File
+ RelativePath=".\driver.cxx">
+ </File>
+ <File
+ RelativePath=".\library.cxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{E740B51E-A619-4888-B6B9-566A3C77C60B}">
+ <File
+ RelativePath=".\library.hxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd">
+ <File
+ RelativePath=".\library.xsd">
+ <FileConfiguration
+ Name="Debug|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree --generate-ostream --generate-intellisense --generate-insertion ACE_OutputCDR --generate-extraction ACE_InputCDR library.xsd"
+ Outputs="library.hxx;library.cxx"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree --generate-ostream --generate-intellisense --generate-insertion ACE_OutputCDR --generate-extraction ACE_InputCDR library.xsd"
+ Outputs="library.hxx;library.cxx"/>
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/binary/cdr/cdr-xerces2-8.0.sln b/xsd/dist/examples/cxx/tree/binary/cdr/cdr-xerces2-8.0.sln new file mode 100644 index 0000000..3ffce8e --- /dev/null +++ b/xsd/dist/examples/cxx/tree/binary/cdr/cdr-xerces2-8.0.sln @@ -0,0 +1,25 @@ +Microsoft Visual Studio Solution File, Format Version 9.00
+# Visual Studio 2005
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "cdr", "cdr-xerces2-8.0.vcproj", "{A8CC2814-5056-4953-8B4C-E52E72ADD36C}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Debug|x64 = Debug|x64
+ Release|Win32 = Release|Win32
+ Release|x64 = Release|x64
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {A8CC2814-5056-4953-8B4C-E52E72ADD36C}.Debug|Win32.ActiveCfg = Debug|Win32
+ {A8CC2814-5056-4953-8B4C-E52E72ADD36C}.Debug|Win32.Build.0 = Debug|Win32
+ {A8CC2814-5056-4953-8B4C-E52E72ADD36C}.Debug|x64.ActiveCfg = Debug|x64
+ {A8CC2814-5056-4953-8B4C-E52E72ADD36C}.Debug|x64.Build.0 = Debug|x64
+ {A8CC2814-5056-4953-8B4C-E52E72ADD36C}.Release|Win32.ActiveCfg = Release|Win32
+ {A8CC2814-5056-4953-8B4C-E52E72ADD36C}.Release|Win32.Build.0 = Release|Win32
+ {A8CC2814-5056-4953-8B4C-E52E72ADD36C}.Release|x64.ActiveCfg = Release|x64
+ {A8CC2814-5056-4953-8B4C-E52E72ADD36C}.Release|x64.Build.0 = Release|x64
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/xsd/dist/examples/cxx/tree/binary/cdr/cdr-xerces2-8.0.vcproj b/xsd/dist/examples/cxx/tree/binary/cdr/cdr-xerces2-8.0.vcproj new file mode 100644 index 0000000..2b469a2 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/binary/cdr/cdr-xerces2-8.0.vcproj @@ -0,0 +1,423 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="cdr"
+ ProjectGUID="{A8CC2814-5056-4953-8B4C-E52E72ADD36C}"
+ RootNamespace="cdr"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib ACEd.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib ACE.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib ACEd.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib ACE.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{50AA6317-04BE-45AB-98DD-7A32AEB710CF}"
+ >
+ <File
+ RelativePath=".\driver.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\library.cxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{E740B51E-A619-4888-B6B9-566A3C77C60B}"
+ >
+ <File
+ RelativePath=".\library.hxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd"
+ >
+ <File
+ RelativePath=".\library.xsd"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree --generate-ostream --generate-intellisense --generate-insertion ACE_OutputCDR --generate-extraction ACE_InputCDR library.xsd"
+ Outputs="library.hxx;library.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree --generate-ostream --generate-intellisense --generate-insertion ACE_OutputCDR --generate-extraction ACE_InputCDR library.xsd"
+ Outputs="library.hxx;library.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree --generate-ostream --generate-intellisense --generate-insertion ACE_OutputCDR --generate-extraction ACE_InputCDR library.xsd"
+ Outputs="library.hxx;library.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree --generate-ostream --generate-intellisense --generate-insertion ACE_OutputCDR --generate-extraction ACE_InputCDR library.xsd"
+ Outputs="library.hxx;library.cxx"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/binary/cdr/cdr-xerces2-9.0.sln b/xsd/dist/examples/cxx/tree/binary/cdr/cdr-xerces2-9.0.sln new file mode 100644 index 0000000..2ec0fbd --- /dev/null +++ b/xsd/dist/examples/cxx/tree/binary/cdr/cdr-xerces2-9.0.sln @@ -0,0 +1,25 @@ +Microsoft Visual Studio Solution File, Format Version 10.00
+# Visual Studio 2008
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "cdr", "cdr-xerces2-9.0.vcproj", "{A8CC2814-5056-4953-8B4C-E52E72ADD36C}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Debug|x64 = Debug|x64
+ Release|Win32 = Release|Win32
+ Release|x64 = Release|x64
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {A8CC2814-5056-4953-8B4C-E52E72ADD36C}.Debug|Win32.ActiveCfg = Debug|Win32
+ {A8CC2814-5056-4953-8B4C-E52E72ADD36C}.Debug|Win32.Build.0 = Debug|Win32
+ {A8CC2814-5056-4953-8B4C-E52E72ADD36C}.Debug|x64.ActiveCfg = Debug|x64
+ {A8CC2814-5056-4953-8B4C-E52E72ADD36C}.Debug|x64.Build.0 = Debug|x64
+ {A8CC2814-5056-4953-8B4C-E52E72ADD36C}.Release|Win32.ActiveCfg = Release|Win32
+ {A8CC2814-5056-4953-8B4C-E52E72ADD36C}.Release|Win32.Build.0 = Release|Win32
+ {A8CC2814-5056-4953-8B4C-E52E72ADD36C}.Release|x64.ActiveCfg = Release|x64
+ {A8CC2814-5056-4953-8B4C-E52E72ADD36C}.Release|x64.Build.0 = Release|x64
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/xsd/dist/examples/cxx/tree/binary/cdr/cdr-xerces2-9.0.vcproj b/xsd/dist/examples/cxx/tree/binary/cdr/cdr-xerces2-9.0.vcproj new file mode 100644 index 0000000..21d8cd9 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/binary/cdr/cdr-xerces2-9.0.vcproj @@ -0,0 +1,420 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="cdr"
+ ProjectGUID="{A8CC2814-5056-4953-8B4C-E52E72ADD36C}"
+ RootNamespace="cdr"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib ACEd.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib ACEd.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib ACE.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib ACE.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{50AA6317-04BE-45AB-98DD-7A32AEB710CF}"
+ >
+ <File
+ RelativePath=".\driver.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\library.cxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{E740B51E-A619-4888-B6B9-566A3C77C60B}"
+ >
+ <File
+ RelativePath=".\library.hxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd"
+ >
+ <File
+ RelativePath=".\library.xsd"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree --generate-ostream --generate-insertion ACE_OutputCDR --generate-extraction ACE_InputCDR library.xsd"
+ Outputs="library.hxx;library.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree --generate-ostream --generate-insertion ACE_OutputCDR --generate-extraction ACE_InputCDR library.xsd"
+ Outputs="library.hxx;library.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree --generate-ostream --generate-insertion ACE_OutputCDR --generate-extraction ACE_InputCDR library.xsd"
+ Outputs="library.hxx;library.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree --generate-ostream --generate-insertion ACE_OutputCDR --generate-extraction ACE_InputCDR library.xsd"
+ Outputs="library.hxx;library.cxx"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/binary/cdr/makefile b/xsd/dist/examples/cxx/tree/binary/cdr/makefile new file mode 100644 index 0000000..a2d9848 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/binary/cdr/makefile @@ -0,0 +1,35 @@ +root := ../../../.. + +include $(root)/build/cxx/rules.make +include $(root)/build/xsd/tree-rules.make + + +override XSDFLAGS += --generate-ostream --generate-insertion ACE_OutputCDR \ +--generate-extraction ACE_InputCDR + + +override LIBS += -lACE + + +# Build. +# +driver: driver.o library.o + +library.o: library.cxx library.hxx +driver.o: driver.cxx library.hxx + +library.cxx library.hxx: library.xsd + + +# Test +# +.PHONY: test +test: driver library.xml + ./driver library.xml + + +# Clean. +# +.PHONY: clean +clean: + rm -f library.o library.?xx driver.o driver diff --git a/xsd/dist/examples/cxx/tree/binary/makefile b/xsd/dist/examples/cxx/tree/binary/makefile new file mode 100644 index 0000000..d337eb5 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/binary/makefile @@ -0,0 +1,25 @@ +dirs := + +ifeq ($(WITH_BOOST),1) +dirs += boost +endif + + +ifeq ($(WITH_ACE),1) +dirs += cdr +endif + +ifeq ($(WITH_XDR),1) +dirs += xdr +endif + + +.PHONY: all $(dirs) + +all: $(dirs) + +$(dirs): + @$(MAKE) -C $@ $(MAKECMDGOALS) + +makefile: ; +% :: $(dirs) ; diff --git a/xsd/dist/examples/cxx/tree/binary/xdr/makefile b/xsd/dist/examples/cxx/tree/binary/xdr/makefile new file mode 100644 index 0000000..a9123d7 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/binary/xdr/makefile @@ -0,0 +1,35 @@ +root := ../../../.. + +include $(root)/build/cxx/rules.make +include $(root)/build/xsd/tree-rules.make + + +override XSDFLAGS += --generate-ostream --generate-insertion XDR \ +--generate-extraction XDR + + +override LIBS += -lnsl + + +# Build. +# +driver: driver.o library.o + +library.o: library.cxx library.hxx +driver.o: driver.cxx library.hxx + +library.cxx library.hxx: library.xsd + + +# Test +# +.PHONY: test +test: driver library.xml + ./driver library.xml + + +# Clean. +# +.PHONY: clean +clean: + rm -f library.o library.?xx driver.o driver diff --git a/xsd/dist/examples/cxx/tree/binary/xdr/xdr-10.0.sln b/xsd/dist/examples/cxx/tree/binary/xdr/xdr-10.0.sln new file mode 100644 index 0000000..0477aa1 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/binary/xdr/xdr-10.0.sln @@ -0,0 +1,25 @@ +Microsoft Visual Studio Solution File, Format Version 11.00
+# Visual Studio 2010
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xdr", "xdr-10.0.vcxproj", "{D9696808-1B73-43C9-A3BB-18DD29776EC5}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Debug|x64 = Debug|x64
+ Release|Win32 = Release|Win32
+ Release|x64 = Release|x64
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {D9696808-1B73-43C9-A3BB-18DD29776EC5}.Debug|Win32.ActiveCfg = Debug|Win32
+ {D9696808-1B73-43C9-A3BB-18DD29776EC5}.Debug|Win32.Build.0 = Debug|Win32
+ {D9696808-1B73-43C9-A3BB-18DD29776EC5}.Debug|x64.ActiveCfg = Debug|x64
+ {D9696808-1B73-43C9-A3BB-18DD29776EC5}.Debug|x64.Build.0 = Debug|x64
+ {D9696808-1B73-43C9-A3BB-18DD29776EC5}.Release|Win32.ActiveCfg = Release|Win32
+ {D9696808-1B73-43C9-A3BB-18DD29776EC5}.Release|Win32.Build.0 = Release|Win32
+ {D9696808-1B73-43C9-A3BB-18DD29776EC5}.Release|x64.ActiveCfg = Release|x64
+ {D9696808-1B73-43C9-A3BB-18DD29776EC5}.Release|x64.Build.0 = Release|x64
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/xsd/dist/examples/cxx/tree/binary/xdr/xdr-10.0.vcxproj b/xsd/dist/examples/cxx/tree/binary/xdr/xdr-10.0.vcxproj new file mode 100644 index 0000000..1033991 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/binary/xdr/xdr-10.0.vcxproj @@ -0,0 +1,209 @@ +<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectName>xdr</ProjectName>
+ <ProjectGuid>{D9696808-1B73-43C9-A3BB-18DD29776EC5}</ProjectGuid>
+ <RootNamespace>xdr</RootNamespace>
+ <Keyword>Win32Proj</Keyword>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">driver</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">driver</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">driver</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">driver</TargetName>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Debug\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Debug\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)\$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)\$(Configuration)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Release\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Release\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)\$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)\$(Configuration)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <RuntimeTypeInfo>true</RuntimeTypeInfo>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>xerces-c_3D.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)driver.pdb</ProgramDatabaseFile>
+ <SubSystem>Console</SubSystem>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <RuntimeTypeInfo>true</RuntimeTypeInfo>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>xerces-c_3D.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)driver.pdb</ProgramDatabaseFile>
+ <SubSystem>Console</SubSystem>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <RuntimeTypeInfo>true</RuntimeTypeInfo>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>xerces-c_3.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <RuntimeTypeInfo>true</RuntimeTypeInfo>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>xerces-c_3.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="driver.cxx" />
+ <ClCompile Include="library.cxx" />
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="library.hxx" />
+ </ItemGroup>
+ <ItemGroup>
+ <CustomBuild Include="library.xsd">
+ <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">xsd library.xsd</Message>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">xsd cxx-tree --generate-ostream --generate-insertion XDR --generate-extraction XDR library.xsd</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">library.hxx;library.cxx;%(Outputs)</Outputs>
+ <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">xsd library.xsd</Message>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">xsd cxx-tree --generate-ostream --generate-insertion XDR --generate-extraction XDR library.xsd</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">library.hxx;library.cxx;%(Outputs)</Outputs>
+ <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">xsd library.xsd</Message>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">xsd cxx-tree --generate-ostream --generate-insertion XDR --generate-extraction XDR library.xsd</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">library.hxx;library.cxx;%(Outputs)</Outputs>
+ <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">xsd library.xsd</Message>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">xsd cxx-tree --generate-ostream --generate-insertion XDR --generate-extraction XDR library.xsd</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">library.hxx;library.cxx;%(Outputs)</Outputs>
+ </CustomBuild>
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="Readme.txt" />
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project>
\ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/binary/xdr/xdr-10.0.vcxproj.filters b/xsd/dist/examples/cxx/tree/binary/xdr/xdr-10.0.vcxproj.filters new file mode 100644 index 0000000..c9e491f --- /dev/null +++ b/xsd/dist/examples/cxx/tree/binary/xdr/xdr-10.0.vcxproj.filters @@ -0,0 +1,38 @@ +<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="Source Files">
+ <UniqueIdentifier>{C5A0E74B-63C1-41E3-B291-B85FCC86FDF7}</UniqueIdentifier>
+ <Extensions>cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+ </Filter>
+ <Filter Include="Header Files">
+ <UniqueIdentifier>{FC110C72-7935-49D5-B25E-F96C87BA49E4}</UniqueIdentifier>
+ <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
+ </Filter>
+ <Filter Include="Schema Files">
+ <UniqueIdentifier>{b7ff65c1-ff9c-4e2d-869b-e4925d838adb}</UniqueIdentifier>
+ <Extensions>xsd</Extensions>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="driver.cxx">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="library.cxx">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="library.hxx">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="Readme.txt" />
+ </ItemGroup>
+ <ItemGroup>
+ <CustomBuild Include="library.xsd">
+ <Filter>Schema Files</Filter>
+ </CustomBuild>
+ </ItemGroup>
+</Project>
\ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/binary/xdr/xdr-7.1.sln b/xsd/dist/examples/cxx/tree/binary/xdr/xdr-7.1.sln new file mode 100644 index 0000000..0a3d261 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/binary/xdr/xdr-7.1.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 8.00
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xdr", "xdr-7.1.vcproj", "{D9696808-1B73-43C9-A3BB-18DD29776EC5}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Global
+ GlobalSection(SolutionConfiguration) = preSolution
+ Debug = Debug
+ Release = Release
+ EndGlobalSection
+ GlobalSection(ProjectConfiguration) = postSolution
+ {D9696808-1B73-43C9-A3BB-18DD29776EC5}.Debug.ActiveCfg = Debug|Win32
+ {D9696808-1B73-43C9-A3BB-18DD29776EC5}.Debug.Build.0 = Debug|Win32
+ {D9696808-1B73-43C9-A3BB-18DD29776EC5}.Release.ActiveCfg = Release|Win32
+ {D9696808-1B73-43C9-A3BB-18DD29776EC5}.Release.Build.0 = Release|Win32
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ EndGlobalSection
+ GlobalSection(ExtensibilityAddIns) = postSolution
+ EndGlobalSection
+EndGlobal
diff --git a/xsd/dist/examples/cxx/tree/binary/xdr/xdr-7.1.vcproj b/xsd/dist/examples/cxx/tree/binary/xdr/xdr-7.1.vcproj new file mode 100644 index 0000000..8d43d7f --- /dev/null +++ b/xsd/dist/examples/cxx/tree/binary/xdr/xdr-7.1.vcproj @@ -0,0 +1,164 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="xdr"
+ ProjectGUID="{D9696808-1B73-43C9-A3BB-18DD29776EC5}"
+ RootNamespace="xdr"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="TRUE"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ RuntimeTypeInfo="TRUE"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="4"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="TRUE"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ RuntimeTypeInfo="TRUE"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="3"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{C5A0E74B-63C1-41E3-B291-B85FCC86FDF7}">
+ <File
+ RelativePath=".\driver.cxx">
+ </File>
+ <File
+ RelativePath=".\library.cxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{FC110C72-7935-49D5-B25E-F96C87BA49E4}">
+ <File
+ RelativePath=".\library.hxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd">
+ <File
+ RelativePath=".\library.xsd">
+ <FileConfiguration
+ Name="Debug|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree --generate-ostream --generate-intellisense --generate-insertion XDR --generate-extraction XDR library.xsd"
+ Outputs="library.hxx;library.cxx"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree --generate-ostream --generate-intellisense --generate-insertion XDR --generate-extraction XDR library.xsd"
+ Outputs="library.hxx;library.cxx"/>
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/binary/xdr/xdr-8.0.sln b/xsd/dist/examples/cxx/tree/binary/xdr/xdr-8.0.sln new file mode 100644 index 0000000..139be58 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/binary/xdr/xdr-8.0.sln @@ -0,0 +1,25 @@ +Microsoft Visual Studio Solution File, Format Version 9.00
+# Visual Studio 2005
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xdr", "xdr-8.0.vcproj", "{D9696808-1B73-43C9-A3BB-18DD29776EC5}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Debug|x64 = Debug|x64
+ Release|Win32 = Release|Win32
+ Release|x64 = Release|x64
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {D9696808-1B73-43C9-A3BB-18DD29776EC5}.Debug|Win32.ActiveCfg = Debug|Win32
+ {D9696808-1B73-43C9-A3BB-18DD29776EC5}.Debug|Win32.Build.0 = Debug|Win32
+ {D9696808-1B73-43C9-A3BB-18DD29776EC5}.Debug|x64.ActiveCfg = Debug|x64
+ {D9696808-1B73-43C9-A3BB-18DD29776EC5}.Debug|x64.Build.0 = Debug|x64
+ {D9696808-1B73-43C9-A3BB-18DD29776EC5}.Release|Win32.ActiveCfg = Release|Win32
+ {D9696808-1B73-43C9-A3BB-18DD29776EC5}.Release|Win32.Build.0 = Release|Win32
+ {D9696808-1B73-43C9-A3BB-18DD29776EC5}.Release|x64.ActiveCfg = Release|x64
+ {D9696808-1B73-43C9-A3BB-18DD29776EC5}.Release|x64.Build.0 = Release|x64
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/xsd/dist/examples/cxx/tree/binary/xdr/xdr-8.0.vcproj b/xsd/dist/examples/cxx/tree/binary/xdr/xdr-8.0.vcproj new file mode 100644 index 0000000..f83c026 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/binary/xdr/xdr-8.0.vcproj @@ -0,0 +1,423 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="xdr"
+ ProjectGUID="{D9696808-1B73-43C9-A3BB-18DD29776EC5}"
+ RootNamespace="xdr"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{C5A0E74B-63C1-41E3-B291-B85FCC86FDF7}"
+ >
+ <File
+ RelativePath=".\driver.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\library.cxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{FC110C72-7935-49D5-B25E-F96C87BA49E4}"
+ >
+ <File
+ RelativePath=".\library.hxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd"
+ >
+ <File
+ RelativePath=".\library.xsd"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree --generate-ostream --generate-intellisense --generate-insertion XDR --generate-extraction XDR library.xsd"
+ Outputs="library.hxx;library.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree --generate-ostream --generate-intellisense --generate-insertion XDR --generate-extraction XDR library.xsd"
+ Outputs="library.hxx;library.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree --generate-ostream --generate-intellisense --generate-insertion XDR --generate-extraction XDR library.xsd"
+ Outputs="library.hxx;library.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree --generate-ostream --generate-intellisense --generate-insertion XDR --generate-extraction XDR library.xsd"
+ Outputs="library.hxx;library.cxx"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/binary/xdr/xdr-9.0.sln b/xsd/dist/examples/cxx/tree/binary/xdr/xdr-9.0.sln new file mode 100644 index 0000000..65f094f --- /dev/null +++ b/xsd/dist/examples/cxx/tree/binary/xdr/xdr-9.0.sln @@ -0,0 +1,25 @@ +Microsoft Visual Studio Solution File, Format Version 10.00
+# Visual Studio 2008
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xdr", "xdr-9.0.vcproj", "{D9696808-1B73-43C9-A3BB-18DD29776EC5}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Debug|x64 = Debug|x64
+ Release|Win32 = Release|Win32
+ Release|x64 = Release|x64
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {D9696808-1B73-43C9-A3BB-18DD29776EC5}.Debug|Win32.ActiveCfg = Debug|Win32
+ {D9696808-1B73-43C9-A3BB-18DD29776EC5}.Debug|Win32.Build.0 = Debug|Win32
+ {D9696808-1B73-43C9-A3BB-18DD29776EC5}.Debug|x64.ActiveCfg = Debug|x64
+ {D9696808-1B73-43C9-A3BB-18DD29776EC5}.Debug|x64.Build.0 = Debug|x64
+ {D9696808-1B73-43C9-A3BB-18DD29776EC5}.Release|Win32.ActiveCfg = Release|Win32
+ {D9696808-1B73-43C9-A3BB-18DD29776EC5}.Release|Win32.Build.0 = Release|Win32
+ {D9696808-1B73-43C9-A3BB-18DD29776EC5}.Release|x64.ActiveCfg = Release|x64
+ {D9696808-1B73-43C9-A3BB-18DD29776EC5}.Release|x64.Build.0 = Release|x64
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/xsd/dist/examples/cxx/tree/binary/xdr/xdr-9.0.vcproj b/xsd/dist/examples/cxx/tree/binary/xdr/xdr-9.0.vcproj new file mode 100644 index 0000000..34ca6b4 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/binary/xdr/xdr-9.0.vcproj @@ -0,0 +1,420 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="xdr"
+ ProjectGUID="{D9696808-1B73-43C9-A3BB-18DD29776EC5}"
+ RootNamespace="xdr"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{C5A0E74B-63C1-41E3-B291-B85FCC86FDF7}"
+ >
+ <File
+ RelativePath=".\driver.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\library.cxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{FC110C72-7935-49D5-B25E-F96C87BA49E4}"
+ >
+ <File
+ RelativePath=".\library.hxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd"
+ >
+ <File
+ RelativePath=".\library.xsd"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree --generate-ostream --generate-insertion XDR --generate-extraction XDR library.xsd"
+ Outputs="library.hxx;library.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree --generate-ostream --generate-insertion XDR --generate-extraction XDR library.xsd"
+ Outputs="library.hxx;library.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree --generate-ostream --generate-insertion XDR --generate-extraction XDR library.xsd"
+ Outputs="library.hxx;library.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree --generate-ostream --generate-insertion XDR --generate-extraction XDR library.xsd"
+ Outputs="library.hxx;library.cxx"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/binary/xdr/xdr-xerces2-7.1.sln b/xsd/dist/examples/cxx/tree/binary/xdr/xdr-xerces2-7.1.sln new file mode 100644 index 0000000..5526613 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/binary/xdr/xdr-xerces2-7.1.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 8.00
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xdr", "xdr-xerces2-7.1.vcproj", "{D9696808-1B73-43C9-A3BB-18DD29776EC5}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Global
+ GlobalSection(SolutionConfiguration) = preSolution
+ Debug = Debug
+ Release = Release
+ EndGlobalSection
+ GlobalSection(ProjectConfiguration) = postSolution
+ {D9696808-1B73-43C9-A3BB-18DD29776EC5}.Debug.ActiveCfg = Debug|Win32
+ {D9696808-1B73-43C9-A3BB-18DD29776EC5}.Debug.Build.0 = Debug|Win32
+ {D9696808-1B73-43C9-A3BB-18DD29776EC5}.Release.ActiveCfg = Release|Win32
+ {D9696808-1B73-43C9-A3BB-18DD29776EC5}.Release.Build.0 = Release|Win32
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ EndGlobalSection
+ GlobalSection(ExtensibilityAddIns) = postSolution
+ EndGlobalSection
+EndGlobal
diff --git a/xsd/dist/examples/cxx/tree/binary/xdr/xdr-xerces2-7.1.vcproj b/xsd/dist/examples/cxx/tree/binary/xdr/xdr-xerces2-7.1.vcproj new file mode 100644 index 0000000..c592fbd --- /dev/null +++ b/xsd/dist/examples/cxx/tree/binary/xdr/xdr-xerces2-7.1.vcproj @@ -0,0 +1,164 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="xdr"
+ ProjectGUID="{D9696808-1B73-43C9-A3BB-18DD29776EC5}"
+ RootNamespace="xdr"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="TRUE"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ RuntimeTypeInfo="TRUE"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="4"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="TRUE"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ RuntimeTypeInfo="TRUE"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="3"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{C5A0E74B-63C1-41E3-B291-B85FCC86FDF7}">
+ <File
+ RelativePath=".\driver.cxx">
+ </File>
+ <File
+ RelativePath=".\library.cxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{FC110C72-7935-49D5-B25E-F96C87BA49E4}">
+ <File
+ RelativePath=".\library.hxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd">
+ <File
+ RelativePath=".\library.xsd">
+ <FileConfiguration
+ Name="Debug|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree --generate-ostream --generate-intellisense --generate-insertion XDR --generate-extraction XDR library.xsd"
+ Outputs="library.hxx;library.cxx"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree --generate-ostream --generate-intellisense --generate-insertion XDR --generate-extraction XDR library.xsd"
+ Outputs="library.hxx;library.cxx"/>
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/binary/xdr/xdr-xerces2-8.0.sln b/xsd/dist/examples/cxx/tree/binary/xdr/xdr-xerces2-8.0.sln new file mode 100644 index 0000000..9ee2ee2 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/binary/xdr/xdr-xerces2-8.0.sln @@ -0,0 +1,25 @@ +Microsoft Visual Studio Solution File, Format Version 9.00
+# Visual Studio 2005
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xdr", "xdr-xerces2-8.0.vcproj", "{D9696808-1B73-43C9-A3BB-18DD29776EC5}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Debug|x64 = Debug|x64
+ Release|Win32 = Release|Win32
+ Release|x64 = Release|x64
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {D9696808-1B73-43C9-A3BB-18DD29776EC5}.Debug|Win32.ActiveCfg = Debug|Win32
+ {D9696808-1B73-43C9-A3BB-18DD29776EC5}.Debug|Win32.Build.0 = Debug|Win32
+ {D9696808-1B73-43C9-A3BB-18DD29776EC5}.Debug|x64.ActiveCfg = Debug|x64
+ {D9696808-1B73-43C9-A3BB-18DD29776EC5}.Debug|x64.Build.0 = Debug|x64
+ {D9696808-1B73-43C9-A3BB-18DD29776EC5}.Release|Win32.ActiveCfg = Release|Win32
+ {D9696808-1B73-43C9-A3BB-18DD29776EC5}.Release|Win32.Build.0 = Release|Win32
+ {D9696808-1B73-43C9-A3BB-18DD29776EC5}.Release|x64.ActiveCfg = Release|x64
+ {D9696808-1B73-43C9-A3BB-18DD29776EC5}.Release|x64.Build.0 = Release|x64
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/xsd/dist/examples/cxx/tree/binary/xdr/xdr-xerces2-8.0.vcproj b/xsd/dist/examples/cxx/tree/binary/xdr/xdr-xerces2-8.0.vcproj new file mode 100644 index 0000000..23f2030 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/binary/xdr/xdr-xerces2-8.0.vcproj @@ -0,0 +1,423 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="xdr"
+ ProjectGUID="{D9696808-1B73-43C9-A3BB-18DD29776EC5}"
+ RootNamespace="xdr"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{C5A0E74B-63C1-41E3-B291-B85FCC86FDF7}"
+ >
+ <File
+ RelativePath=".\driver.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\library.cxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{FC110C72-7935-49D5-B25E-F96C87BA49E4}"
+ >
+ <File
+ RelativePath=".\library.hxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd"
+ >
+ <File
+ RelativePath=".\library.xsd"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree --generate-ostream --generate-intellisense --generate-insertion XDR --generate-extraction XDR library.xsd"
+ Outputs="library.hxx;library.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree --generate-ostream --generate-intellisense --generate-insertion XDR --generate-extraction XDR library.xsd"
+ Outputs="library.hxx;library.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree --generate-ostream --generate-intellisense --generate-insertion XDR --generate-extraction XDR library.xsd"
+ Outputs="library.hxx;library.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree --generate-ostream --generate-intellisense --generate-insertion XDR --generate-extraction XDR library.xsd"
+ Outputs="library.hxx;library.cxx"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/binary/xdr/xdr-xerces2-9.0.sln b/xsd/dist/examples/cxx/tree/binary/xdr/xdr-xerces2-9.0.sln new file mode 100644 index 0000000..6e0a25a --- /dev/null +++ b/xsd/dist/examples/cxx/tree/binary/xdr/xdr-xerces2-9.0.sln @@ -0,0 +1,25 @@ +Microsoft Visual Studio Solution File, Format Version 10.00
+# Visual Studio 2008
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xdr", "xdr-xerces2-9.0.vcproj", "{D9696808-1B73-43C9-A3BB-18DD29776EC5}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Debug|x64 = Debug|x64
+ Release|Win32 = Release|Win32
+ Release|x64 = Release|x64
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {D9696808-1B73-43C9-A3BB-18DD29776EC5}.Debug|Win32.ActiveCfg = Debug|Win32
+ {D9696808-1B73-43C9-A3BB-18DD29776EC5}.Debug|Win32.Build.0 = Debug|Win32
+ {D9696808-1B73-43C9-A3BB-18DD29776EC5}.Debug|x64.ActiveCfg = Debug|x64
+ {D9696808-1B73-43C9-A3BB-18DD29776EC5}.Debug|x64.Build.0 = Debug|x64
+ {D9696808-1B73-43C9-A3BB-18DD29776EC5}.Release|Win32.ActiveCfg = Release|Win32
+ {D9696808-1B73-43C9-A3BB-18DD29776EC5}.Release|Win32.Build.0 = Release|Win32
+ {D9696808-1B73-43C9-A3BB-18DD29776EC5}.Release|x64.ActiveCfg = Release|x64
+ {D9696808-1B73-43C9-A3BB-18DD29776EC5}.Release|x64.Build.0 = Release|x64
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/xsd/dist/examples/cxx/tree/binary/xdr/xdr-xerces2-9.0.vcproj b/xsd/dist/examples/cxx/tree/binary/xdr/xdr-xerces2-9.0.vcproj new file mode 100644 index 0000000..75b0331 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/binary/xdr/xdr-xerces2-9.0.vcproj @@ -0,0 +1,420 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="xdr"
+ ProjectGUID="{D9696808-1B73-43C9-A3BB-18DD29776EC5}"
+ RootNamespace="xdr"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{C5A0E74B-63C1-41E3-B291-B85FCC86FDF7}"
+ >
+ <File
+ RelativePath=".\driver.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\library.cxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{FC110C72-7935-49D5-B25E-F96C87BA49E4}"
+ >
+ <File
+ RelativePath=".\library.hxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd"
+ >
+ <File
+ RelativePath=".\library.xsd"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree --generate-ostream --generate-insertion XDR --generate-extraction XDR library.xsd"
+ Outputs="library.hxx;library.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree --generate-ostream --generate-insertion XDR --generate-extraction XDR library.xsd"
+ Outputs="library.hxx;library.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree --generate-ostream --generate-insertion XDR --generate-extraction XDR library.xsd"
+ Outputs="library.hxx;library.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree --generate-ostream --generate-insertion XDR --generate-extraction XDR library.xsd"
+ Outputs="library.hxx;library.cxx"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/caching/caching-10.0.vcxproj b/xsd/dist/examples/cxx/tree/caching/caching-10.0.vcxproj new file mode 100644 index 0000000..286ed09 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/caching/caching-10.0.vcxproj @@ -0,0 +1,209 @@ +<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectName>caching</ProjectName>
+ <ProjectGuid>{932D8CD0-4E11-4C3A-9084-4D30DE75C2B7}</ProjectGuid>
+ <RootNamespace>caching</RootNamespace>
+ <Keyword>Win32Proj</Keyword>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">driver</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">driver</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">driver</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">driver</TargetName>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Debug\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Debug\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)\$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)\$(Configuration)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Release\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Release\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)\$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)\$(Configuration)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <RuntimeTypeInfo>true</RuntimeTypeInfo>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>xerces-c_3D.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)driver.pdb</ProgramDatabaseFile>
+ <SubSystem>Console</SubSystem>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <RuntimeTypeInfo>true</RuntimeTypeInfo>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>xerces-c_3D.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)driver.pdb</ProgramDatabaseFile>
+ <SubSystem>Console</SubSystem>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <RuntimeTypeInfo>true</RuntimeTypeInfo>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>xerces-c_3.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <RuntimeTypeInfo>true</RuntimeTypeInfo>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>xerces-c_3.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="driver.cxx" />
+ <ClCompile Include="library.cxx" />
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="library.hxx" />
+ </ItemGroup>
+ <ItemGroup>
+ <CustomBuild Include="library.xsd">
+ <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">xsd library.xsd</Message>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">xsd cxx-tree library.xsd</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">library.hxx;library.cxx;%(Outputs)</Outputs>
+ <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">xsd library.xsd</Message>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">xsd cxx-tree library.xsd</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">library.hxx;library.cxx;%(Outputs)</Outputs>
+ <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">xsd library.xsd</Message>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">xsd cxx-tree library.xsd</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">library.hxx;library.cxx;%(Outputs)</Outputs>
+ <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">xsd library.xsd</Message>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">xsd cxx-tree library.xsd</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">library.hxx;library.cxx;%(Outputs)</Outputs>
+ </CustomBuild>
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="Readme.txt" />
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project>
\ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/caching/caching-10.0.vcxproj.filters b/xsd/dist/examples/cxx/tree/caching/caching-10.0.vcxproj.filters new file mode 100644 index 0000000..07ab0e9 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/caching/caching-10.0.vcxproj.filters @@ -0,0 +1,38 @@ +<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="Source Files">
+ <UniqueIdentifier>{8953E6CC-4E46-4D97-9704-CE8F76672843}</UniqueIdentifier>
+ <Extensions>cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+ </Filter>
+ <Filter Include="Header Files">
+ <UniqueIdentifier>{AA1A2DB4-3798-4A0C-9339-FAA57753A0AC}</UniqueIdentifier>
+ <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
+ </Filter>
+ <Filter Include="Schema Files">
+ <UniqueIdentifier>{88b19602-75bf-44d6-a995-f5e213e36528}</UniqueIdentifier>
+ <Extensions>xsd</Extensions>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="driver.cxx">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="library.cxx">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="library.hxx">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="Readme.txt" />
+ </ItemGroup>
+ <ItemGroup>
+ <CustomBuild Include="library.xsd">
+ <Filter>Schema Files</Filter>
+ </CustomBuild>
+ </ItemGroup>
+</Project>
\ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/caching/caching-7.1.vcproj b/xsd/dist/examples/cxx/tree/caching/caching-7.1.vcproj new file mode 100644 index 0000000..6301d32 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/caching/caching-7.1.vcproj @@ -0,0 +1,164 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="caching"
+ ProjectGUID="{932D8CD0-4E11-4C3A-9084-4D30DE75C2B7}"
+ RootNamespace="caching"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="TRUE"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ RuntimeTypeInfo="TRUE"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="4"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="TRUE"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ RuntimeTypeInfo="TRUE"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="3"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{8953E6CC-4E46-4D97-9704-CE8F76672843}">
+ <File
+ RelativePath=".\driver.cxx">
+ </File>
+ <File
+ RelativePath=".\library.cxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{AA1A2DB4-3798-4A0C-9339-FAA57753A0AC}">
+ <File
+ RelativePath=".\library.hxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd">
+ <File
+ RelativePath=".\library.xsd">
+ <FileConfiguration
+ Name="Debug|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree --generate-intellisense library.xsd"
+ Outputs="library.hxx;library.cxx"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree --generate-intellisense library.xsd"
+ Outputs="library.hxx;library.cxx"/>
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/caching/caching-8.0.vcproj b/xsd/dist/examples/cxx/tree/caching/caching-8.0.vcproj new file mode 100644 index 0000000..3d75cb6 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/caching/caching-8.0.vcproj @@ -0,0 +1,423 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="caching"
+ ProjectGUID="{932D8CD0-4E11-4C3A-9084-4D30DE75C2B7}"
+ RootNamespace="caching"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{8953E6CC-4E46-4D97-9704-CE8F76672843}"
+ >
+ <File
+ RelativePath=".\driver.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\library.cxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{AA1A2DB4-3798-4A0C-9339-FAA57753A0AC}"
+ >
+ <File
+ RelativePath=".\library.hxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd"
+ >
+ <File
+ RelativePath=".\library.xsd"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree --generate-intellisense library.xsd"
+ Outputs="library.hxx;library.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree --generate-intellisense library.xsd"
+ Outputs="library.hxx;library.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree --generate-intellisense library.xsd"
+ Outputs="library.hxx;library.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree --generate-intellisense library.xsd"
+ Outputs="library.hxx;library.cxx"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/caching/caching-9.0.vcproj b/xsd/dist/examples/cxx/tree/caching/caching-9.0.vcproj new file mode 100644 index 0000000..b356172 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/caching/caching-9.0.vcproj @@ -0,0 +1,420 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="caching"
+ ProjectGUID="{932D8CD0-4E11-4C3A-9084-4D30DE75C2B7}"
+ RootNamespace="caching"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{8953E6CC-4E46-4D97-9704-CE8F76672843}"
+ >
+ <File
+ RelativePath=".\driver.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\library.cxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{AA1A2DB4-3798-4A0C-9339-FAA57753A0AC}"
+ >
+ <File
+ RelativePath=".\library.hxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd"
+ >
+ <File
+ RelativePath=".\library.xsd"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree library.xsd"
+ Outputs="library.hxx;library.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree library.xsd"
+ Outputs="library.hxx;library.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree library.xsd"
+ Outputs="library.hxx;library.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree library.xsd"
+ Outputs="library.hxx;library.cxx"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/caching/caching-xerces2-7.1.vcproj b/xsd/dist/examples/cxx/tree/caching/caching-xerces2-7.1.vcproj new file mode 100644 index 0000000..e280f2f --- /dev/null +++ b/xsd/dist/examples/cxx/tree/caching/caching-xerces2-7.1.vcproj @@ -0,0 +1,164 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="caching"
+ ProjectGUID="{932D8CD0-4E11-4C3A-9084-4D30DE75C2B7}"
+ RootNamespace="caching"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="TRUE"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ RuntimeTypeInfo="TRUE"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="4"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="TRUE"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ RuntimeTypeInfo="TRUE"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="3"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{8953E6CC-4E46-4D97-9704-CE8F76672843}">
+ <File
+ RelativePath=".\driver.cxx">
+ </File>
+ <File
+ RelativePath=".\library.cxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{AA1A2DB4-3798-4A0C-9339-FAA57753A0AC}">
+ <File
+ RelativePath=".\library.hxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd">
+ <File
+ RelativePath=".\library.xsd">
+ <FileConfiguration
+ Name="Debug|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree --generate-intellisense library.xsd"
+ Outputs="library.hxx;library.cxx"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree --generate-intellisense library.xsd"
+ Outputs="library.hxx;library.cxx"/>
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/caching/caching-xerces2-8.0.vcproj b/xsd/dist/examples/cxx/tree/caching/caching-xerces2-8.0.vcproj new file mode 100644 index 0000000..07d9da5 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/caching/caching-xerces2-8.0.vcproj @@ -0,0 +1,423 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="caching"
+ ProjectGUID="{932D8CD0-4E11-4C3A-9084-4D30DE75C2B7}"
+ RootNamespace="caching"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{8953E6CC-4E46-4D97-9704-CE8F76672843}"
+ >
+ <File
+ RelativePath=".\driver.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\library.cxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{AA1A2DB4-3798-4A0C-9339-FAA57753A0AC}"
+ >
+ <File
+ RelativePath=".\library.hxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd"
+ >
+ <File
+ RelativePath=".\library.xsd"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree --generate-intellisense library.xsd"
+ Outputs="library.hxx;library.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree --generate-intellisense library.xsd"
+ Outputs="library.hxx;library.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree --generate-intellisense library.xsd"
+ Outputs="library.hxx;library.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree --generate-intellisense library.xsd"
+ Outputs="library.hxx;library.cxx"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/caching/caching-xerces2-9.0.vcproj b/xsd/dist/examples/cxx/tree/caching/caching-xerces2-9.0.vcproj new file mode 100644 index 0000000..07c61ca --- /dev/null +++ b/xsd/dist/examples/cxx/tree/caching/caching-xerces2-9.0.vcproj @@ -0,0 +1,420 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="caching"
+ ProjectGUID="{932D8CD0-4E11-4C3A-9084-4D30DE75C2B7}"
+ RootNamespace="caching"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{8953E6CC-4E46-4D97-9704-CE8F76672843}"
+ >
+ <File
+ RelativePath=".\driver.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\library.cxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{AA1A2DB4-3798-4A0C-9339-FAA57753A0AC}"
+ >
+ <File
+ RelativePath=".\library.hxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd"
+ >
+ <File
+ RelativePath=".\library.xsd"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree library.xsd"
+ Outputs="library.hxx;library.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree library.xsd"
+ Outputs="library.hxx;library.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree library.xsd"
+ Outputs="library.hxx;library.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree library.xsd"
+ Outputs="library.hxx;library.cxx"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/caching/makefile b/xsd/dist/examples/cxx/tree/caching/makefile new file mode 100644 index 0000000..d8d33fd --- /dev/null +++ b/xsd/dist/examples/cxx/tree/caching/makefile @@ -0,0 +1,28 @@ +root := ../../.. + +include $(root)/build/cxx/rules.make +include $(root)/build/xsd/tree-rules.make + + +# Build. +# +driver: driver.o library.o + +library.o: library.cxx library.hxx +driver.o: driver.cxx library.hxx + +library.cxx library.hxx: library.xsd + + +# Test +# +.PHONY: test +test: driver library.xml + ./driver library.xml + + +# Clean. +# +.PHONY: clean +clean: + rm -f library.o library.?xx driver.o driver diff --git a/xsd/dist/examples/cxx/tree/compression/compression-10.0.sln b/xsd/dist/examples/cxx/tree/compression/compression-10.0.sln new file mode 100644 index 0000000..5e7c35f --- /dev/null +++ b/xsd/dist/examples/cxx/tree/compression/compression-10.0.sln @@ -0,0 +1,25 @@ +Microsoft Visual Studio Solution File, Format Version 11.00
+# Visual Studio 2010
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "compression", "compression-10.0.vcxproj", "{AA385EB4-7352-4865-9C5C-9F0DE7BA0060}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Debug|x64 = Debug|x64
+ Release|Win32 = Release|Win32
+ Release|x64 = Release|x64
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {AA385EB4-7352-4865-9C5C-9F0DE7BA0060}.Debug|Win32.ActiveCfg = Debug|Win32
+ {AA385EB4-7352-4865-9C5C-9F0DE7BA0060}.Debug|Win32.Build.0 = Debug|Win32
+ {AA385EB4-7352-4865-9C5C-9F0DE7BA0060}.Debug|x64.ActiveCfg = Debug|x64
+ {AA385EB4-7352-4865-9C5C-9F0DE7BA0060}.Debug|x64.Build.0 = Debug|x64
+ {AA385EB4-7352-4865-9C5C-9F0DE7BA0060}.Release|Win32.ActiveCfg = Release|Win32
+ {AA385EB4-7352-4865-9C5C-9F0DE7BA0060}.Release|Win32.Build.0 = Release|Win32
+ {AA385EB4-7352-4865-9C5C-9F0DE7BA0060}.Release|x64.ActiveCfg = Release|x64
+ {AA385EB4-7352-4865-9C5C-9F0DE7BA0060}.Release|x64.Build.0 = Release|x64
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/xsd/dist/examples/cxx/tree/compression/compression-10.0.vcxproj b/xsd/dist/examples/cxx/tree/compression/compression-10.0.vcxproj new file mode 100644 index 0000000..3ecb3ab --- /dev/null +++ b/xsd/dist/examples/cxx/tree/compression/compression-10.0.vcxproj @@ -0,0 +1,213 @@ +<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectName>compression</ProjectName>
+ <ProjectGuid>{AA385EB4-7352-4865-9C5C-9F0DE7BA0060}</ProjectGuid>
+ <RootNamespace>compression</RootNamespace>
+ <Keyword>Win32Proj</Keyword>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">driver</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">driver</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">driver</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">driver</TargetName>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Debug\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Debug\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)\$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)\$(Configuration)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Release\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Release\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)\$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)\$(Configuration)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <RuntimeTypeInfo>true</RuntimeTypeInfo>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>xerces-c_3D.lib;zdll.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)driver.pdb</ProgramDatabaseFile>
+ <SubSystem>Console</SubSystem>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <RuntimeTypeInfo>true</RuntimeTypeInfo>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>xerces-c_3D.lib;zdll.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)driver.pdb</ProgramDatabaseFile>
+ <SubSystem>Console</SubSystem>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <RuntimeTypeInfo>true</RuntimeTypeInfo>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>xerces-c_3.lib;zdll.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <RuntimeTypeInfo>true</RuntimeTypeInfo>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>xerces-c_3.lib;zdll.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="driver.cxx" />
+ <ClCompile Include="library.cxx" />
+ <ClCompile Include="compressed-format-target.cxx" />
+ <ClCompile Include="compressed-input-source.cxx" />
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="library.hxx" />
+ <ClInclude Include="compressed-format-target.hxx" />
+ <ClInclude Include="compressed-input-source.hxx" />
+ </ItemGroup>
+ <ItemGroup>
+ <CustomBuild Include="library.xsd">
+ <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">xsd library.xsd</Message>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">xsd cxx-tree --generate-ostream --generate-serialization library.xsd</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">library.hxx;library.cxx;%(Outputs)</Outputs>
+ <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">xsd library.xsd</Message>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">xsd cxx-tree --generate-ostream --generate-serialization library.xsd</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">library.hxx;library.cxx;%(Outputs)</Outputs>
+ <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">xsd library.xsd</Message>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">xsd cxx-tree --generate-ostream --generate-serialization library.xsd</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">library.hxx;library.cxx;%(Outputs)</Outputs>
+ <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">xsd library.xsd</Message>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">xsd cxx-tree --generate-ostream --generate-serialization library.xsd</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">library.hxx;library.cxx;%(Outputs)</Outputs>
+ </CustomBuild>
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="Readme.txt" />
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project>
\ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/compression/compression-10.0.vcxproj.filters b/xsd/dist/examples/cxx/tree/compression/compression-10.0.vcxproj.filters new file mode 100644 index 0000000..0156a51 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/compression/compression-10.0.vcxproj.filters @@ -0,0 +1,50 @@ +<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="Source Files">
+ <UniqueIdentifier>{E38C94E8-B473-4B88-9C42-BD34C81BC24B}</UniqueIdentifier>
+ <Extensions>cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+ </Filter>
+ <Filter Include="Header Files">
+ <UniqueIdentifier>{408177AE-D480-4933-AED3-705D39F15C9F}</UniqueIdentifier>
+ <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
+ </Filter>
+ <Filter Include="Schema Files">
+ <UniqueIdentifier>{0e78ae69-359d-42ea-8a3c-c60040f3aa2c}</UniqueIdentifier>
+ <Extensions>xsd</Extensions>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="driver.cxx">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="library.cxx">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="compressed-format-target.cxx">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="compressed-input-source.cxx">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="library.hxx">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="compressed-format-target.hxx">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="compressed-input-source.hxx">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="Readme.txt" />
+ </ItemGroup>
+ <ItemGroup>
+ <CustomBuild Include="library.xsd">
+ <Filter>Schema Files</Filter>
+ </CustomBuild>
+ </ItemGroup>
+</Project>
\ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/compression/compression-7.1.sln b/xsd/dist/examples/cxx/tree/compression/compression-7.1.sln new file mode 100644 index 0000000..fbb90b5 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/compression/compression-7.1.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 8.00
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "compression", "compression-7.1.vcproj", "{AA385EB4-7352-4865-9C5C-9F0DE7BA0060}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Global
+ GlobalSection(SolutionConfiguration) = preSolution
+ Debug = Debug
+ Release = Release
+ EndGlobalSection
+ GlobalSection(ProjectConfiguration) = postSolution
+ {AA385EB4-7352-4865-9C5C-9F0DE7BA0060}.Debug.ActiveCfg = Debug|Win32
+ {AA385EB4-7352-4865-9C5C-9F0DE7BA0060}.Debug.Build.0 = Debug|Win32
+ {AA385EB4-7352-4865-9C5C-9F0DE7BA0060}.Release.ActiveCfg = Release|Win32
+ {AA385EB4-7352-4865-9C5C-9F0DE7BA0060}.Release.Build.0 = Release|Win32
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ EndGlobalSection
+ GlobalSection(ExtensibilityAddIns) = postSolution
+ EndGlobalSection
+EndGlobal
diff --git a/xsd/dist/examples/cxx/tree/compression/compression-7.1.vcproj b/xsd/dist/examples/cxx/tree/compression/compression-7.1.vcproj new file mode 100644 index 0000000..fddab79 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/compression/compression-7.1.vcproj @@ -0,0 +1,176 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="compression"
+ ProjectGUID="{AA385EB4-7352-4865-9C5C-9F0DE7BA0060}"
+ RootNamespace="compression"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="TRUE"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ RuntimeTypeInfo="TRUE"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="4"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib zdll.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="TRUE"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ RuntimeTypeInfo="TRUE"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="3"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib zdll.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{E38C94E8-B473-4B88-9C42-BD34C81BC24B}">
+ <File
+ RelativePath=".\driver.cxx">
+ </File>
+ <File
+ RelativePath=".\library.cxx">
+ </File>
+ <File
+ RelativePath=".\compressed-format-target.cxx">
+ </File>
+ <File
+ RelativePath=".\compressed-input-source.cxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{408177AE-D480-4933-AED3-705D39F15C9F}">
+ <File
+ RelativePath=".\library.hxx">
+ </File>
+ <File
+ RelativePath=".\compressed-format-target.hxx">
+ </File>
+ <File
+ RelativePath=".\compressed-input-source.hxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd">
+ <File
+ RelativePath=".\library.xsd">
+ <FileConfiguration
+ Name="Debug|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree --generate-ostream --generate-intellisense --generate-serialization library.xsd"
+ Outputs="library.hxx;library.cxx"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree --generate-ostream --generate-intellisense --generate-serialization library.xsd"
+ Outputs="library.hxx;library.cxx"/>
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/compression/compression-8.0.sln b/xsd/dist/examples/cxx/tree/compression/compression-8.0.sln new file mode 100644 index 0000000..5b0f577 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/compression/compression-8.0.sln @@ -0,0 +1,25 @@ +Microsoft Visual Studio Solution File, Format Version 9.00
+# Visual Studio 2005
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "compression", "compression-8.0.vcproj", "{AA385EB4-7352-4865-9C5C-9F0DE7BA0060}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Debug|x64 = Debug|x64
+ Release|Win32 = Release|Win32
+ Release|x64 = Release|x64
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {AA385EB4-7352-4865-9C5C-9F0DE7BA0060}.Debug|Win32.ActiveCfg = Debug|Win32
+ {AA385EB4-7352-4865-9C5C-9F0DE7BA0060}.Debug|Win32.Build.0 = Debug|Win32
+ {AA385EB4-7352-4865-9C5C-9F0DE7BA0060}.Debug|x64.ActiveCfg = Debug|x64
+ {AA385EB4-7352-4865-9C5C-9F0DE7BA0060}.Debug|x64.Build.0 = Debug|x64
+ {AA385EB4-7352-4865-9C5C-9F0DE7BA0060}.Release|Win32.ActiveCfg = Release|Win32
+ {AA385EB4-7352-4865-9C5C-9F0DE7BA0060}.Release|Win32.Build.0 = Release|Win32
+ {AA385EB4-7352-4865-9C5C-9F0DE7BA0060}.Release|x64.ActiveCfg = Release|x64
+ {AA385EB4-7352-4865-9C5C-9F0DE7BA0060}.Release|x64.Build.0 = Release|x64
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/xsd/dist/examples/cxx/tree/compression/compression-8.0.vcproj b/xsd/dist/examples/cxx/tree/compression/compression-8.0.vcproj new file mode 100644 index 0000000..85b45d8 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/compression/compression-8.0.vcproj @@ -0,0 +1,435 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="compression"
+ ProjectGUID="{AA385EB4-7352-4865-9C5C-9F0DE7BA0060}"
+ RootNamespace="compression"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib zdll.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib zdll.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib zdll.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib zdll.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{E38C94E8-B473-4B88-9C42-BD34C81BC24B}"
+ >
+ <File
+ RelativePath=".\driver.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\library.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\compressed-format-target.cxx">
+ </File>
+ <File
+ RelativePath=".\compressed-input-source.cxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{408177AE-D480-4933-AED3-705D39F15C9F}"
+ >
+ <File
+ RelativePath=".\library.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\compressed-format-target.hxx">
+ </File>
+ <File
+ RelativePath=".\compressed-input-source.hxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd"
+ >
+ <File
+ RelativePath=".\library.xsd"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree --generate-ostream --generate-intellisense --generate-serialization library.xsd"
+ Outputs="library.hxx;library.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree --generate-ostream --generate-intellisense --generate-serialization library.xsd"
+ Outputs="library.hxx;library.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree --generate-ostream --generate-intellisense --generate-serialization library.xsd"
+ Outputs="library.hxx;library.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree --generate-ostream --generate-intellisense --generate-serialization library.xsd"
+ Outputs="library.hxx;library.cxx"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/compression/compression-9.0.sln b/xsd/dist/examples/cxx/tree/compression/compression-9.0.sln new file mode 100644 index 0000000..73d32a6 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/compression/compression-9.0.sln @@ -0,0 +1,25 @@ +Microsoft Visual Studio Solution File, Format Version 10.00
+# Visual Studio 2008
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "compression", "compression-9.0.vcproj", "{AA385EB4-7352-4865-9C5C-9F0DE7BA0060}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Debug|x64 = Debug|x64
+ Release|Win32 = Release|Win32
+ Release|x64 = Release|x64
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {AA385EB4-7352-4865-9C5C-9F0DE7BA0060}.Debug|Win32.ActiveCfg = Debug|Win32
+ {AA385EB4-7352-4865-9C5C-9F0DE7BA0060}.Debug|Win32.Build.0 = Debug|Win32
+ {AA385EB4-7352-4865-9C5C-9F0DE7BA0060}.Debug|x64.ActiveCfg = Debug|x64
+ {AA385EB4-7352-4865-9C5C-9F0DE7BA0060}.Debug|x64.Build.0 = Debug|x64
+ {AA385EB4-7352-4865-9C5C-9F0DE7BA0060}.Release|Win32.ActiveCfg = Release|Win32
+ {AA385EB4-7352-4865-9C5C-9F0DE7BA0060}.Release|Win32.Build.0 = Release|Win32
+ {AA385EB4-7352-4865-9C5C-9F0DE7BA0060}.Release|x64.ActiveCfg = Release|x64
+ {AA385EB4-7352-4865-9C5C-9F0DE7BA0060}.Release|x64.Build.0 = Release|x64
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/xsd/dist/examples/cxx/tree/compression/compression-9.0.vcproj b/xsd/dist/examples/cxx/tree/compression/compression-9.0.vcproj new file mode 100644 index 0000000..92ea1da --- /dev/null +++ b/xsd/dist/examples/cxx/tree/compression/compression-9.0.vcproj @@ -0,0 +1,432 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="compression"
+ ProjectGUID="{AA385EB4-7352-4865-9C5C-9F0DE7BA0060}"
+ RootNamespace="compression"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib zdll.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib zdll.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib zdll.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib zdll.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{E38C94E8-B473-4B88-9C42-BD34C81BC24B}"
+ >
+ <File
+ RelativePath=".\driver.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\library.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\compressed-format-target.cxx">
+ </File>
+ <File
+ RelativePath=".\compressed-input-source.cxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{408177AE-D480-4933-AED3-705D39F15C9F}"
+ >
+ <File
+ RelativePath=".\library.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\compressed-format-target.hxx">
+ </File>
+ <File
+ RelativePath=".\compressed-input-source.hxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd"
+ >
+ <File
+ RelativePath=".\library.xsd"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree --generate-ostream --generate-serialization library.xsd"
+ Outputs="library.hxx;library.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree --generate-ostream --generate-serialization library.xsd"
+ Outputs="library.hxx;library.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree --generate-ostream --generate-serialization library.xsd"
+ Outputs="library.hxx;library.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree --generate-ostream --generate-serialization library.xsd"
+ Outputs="library.hxx;library.cxx"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/compression/compression-xerces2-7.1.sln b/xsd/dist/examples/cxx/tree/compression/compression-xerces2-7.1.sln new file mode 100644 index 0000000..b37e3eb --- /dev/null +++ b/xsd/dist/examples/cxx/tree/compression/compression-xerces2-7.1.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 8.00
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "compression", "compression-xerces2-7.1.vcproj", "{AA385EB4-7352-4865-9C5C-9F0DE7BA0060}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Global
+ GlobalSection(SolutionConfiguration) = preSolution
+ Debug = Debug
+ Release = Release
+ EndGlobalSection
+ GlobalSection(ProjectConfiguration) = postSolution
+ {AA385EB4-7352-4865-9C5C-9F0DE7BA0060}.Debug.ActiveCfg = Debug|Win32
+ {AA385EB4-7352-4865-9C5C-9F0DE7BA0060}.Debug.Build.0 = Debug|Win32
+ {AA385EB4-7352-4865-9C5C-9F0DE7BA0060}.Release.ActiveCfg = Release|Win32
+ {AA385EB4-7352-4865-9C5C-9F0DE7BA0060}.Release.Build.0 = Release|Win32
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ EndGlobalSection
+ GlobalSection(ExtensibilityAddIns) = postSolution
+ EndGlobalSection
+EndGlobal
diff --git a/xsd/dist/examples/cxx/tree/compression/compression-xerces2-7.1.vcproj b/xsd/dist/examples/cxx/tree/compression/compression-xerces2-7.1.vcproj new file mode 100644 index 0000000..e361b62 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/compression/compression-xerces2-7.1.vcproj @@ -0,0 +1,176 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="compression"
+ ProjectGUID="{AA385EB4-7352-4865-9C5C-9F0DE7BA0060}"
+ RootNamespace="compression"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="TRUE"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ RuntimeTypeInfo="TRUE"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="4"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib zdll.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="TRUE"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ RuntimeTypeInfo="TRUE"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="3"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib zdll.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{E38C94E8-B473-4B88-9C42-BD34C81BC24B}">
+ <File
+ RelativePath=".\driver.cxx">
+ </File>
+ <File
+ RelativePath=".\library.cxx">
+ </File>
+ <File
+ RelativePath=".\compressed-format-target.cxx">
+ </File>
+ <File
+ RelativePath=".\compressed-input-source.cxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{408177AE-D480-4933-AED3-705D39F15C9F}">
+ <File
+ RelativePath=".\library.hxx">
+ </File>
+ <File
+ RelativePath=".\compressed-format-target.hxx">
+ </File>
+ <File
+ RelativePath=".\compressed-input-source.hxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd">
+ <File
+ RelativePath=".\library.xsd">
+ <FileConfiguration
+ Name="Debug|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree --generate-ostream --generate-intellisense --generate-serialization library.xsd"
+ Outputs="library.hxx;library.cxx"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree --generate-ostream --generate-intellisense --generate-serialization library.xsd"
+ Outputs="library.hxx;library.cxx"/>
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/compression/compression-xerces2-8.0.sln b/xsd/dist/examples/cxx/tree/compression/compression-xerces2-8.0.sln new file mode 100644 index 0000000..a6ef4ed --- /dev/null +++ b/xsd/dist/examples/cxx/tree/compression/compression-xerces2-8.0.sln @@ -0,0 +1,25 @@ +Microsoft Visual Studio Solution File, Format Version 9.00
+# Visual Studio 2005
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "compression", "compression-xerces2-8.0.vcproj", "{AA385EB4-7352-4865-9C5C-9F0DE7BA0060}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Debug|x64 = Debug|x64
+ Release|Win32 = Release|Win32
+ Release|x64 = Release|x64
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {AA385EB4-7352-4865-9C5C-9F0DE7BA0060}.Debug|Win32.ActiveCfg = Debug|Win32
+ {AA385EB4-7352-4865-9C5C-9F0DE7BA0060}.Debug|Win32.Build.0 = Debug|Win32
+ {AA385EB4-7352-4865-9C5C-9F0DE7BA0060}.Debug|x64.ActiveCfg = Debug|x64
+ {AA385EB4-7352-4865-9C5C-9F0DE7BA0060}.Debug|x64.Build.0 = Debug|x64
+ {AA385EB4-7352-4865-9C5C-9F0DE7BA0060}.Release|Win32.ActiveCfg = Release|Win32
+ {AA385EB4-7352-4865-9C5C-9F0DE7BA0060}.Release|Win32.Build.0 = Release|Win32
+ {AA385EB4-7352-4865-9C5C-9F0DE7BA0060}.Release|x64.ActiveCfg = Release|x64
+ {AA385EB4-7352-4865-9C5C-9F0DE7BA0060}.Release|x64.Build.0 = Release|x64
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/xsd/dist/examples/cxx/tree/compression/compression-xerces2-8.0.vcproj b/xsd/dist/examples/cxx/tree/compression/compression-xerces2-8.0.vcproj new file mode 100644 index 0000000..fb651f6 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/compression/compression-xerces2-8.0.vcproj @@ -0,0 +1,435 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="compression"
+ ProjectGUID="{AA385EB4-7352-4865-9C5C-9F0DE7BA0060}"
+ RootNamespace="compression"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib zdll.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib zdll.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib zdll.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib zdll.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{E38C94E8-B473-4B88-9C42-BD34C81BC24B}"
+ >
+ <File
+ RelativePath=".\driver.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\library.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\compressed-format-target.cxx">
+ </File>
+ <File
+ RelativePath=".\compressed-input-source.cxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{408177AE-D480-4933-AED3-705D39F15C9F}"
+ >
+ <File
+ RelativePath=".\library.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\compressed-format-target.hxx">
+ </File>
+ <File
+ RelativePath=".\compressed-input-source.hxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd"
+ >
+ <File
+ RelativePath=".\library.xsd"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree --generate-ostream --generate-intellisense --generate-serialization library.xsd"
+ Outputs="library.hxx;library.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree --generate-ostream --generate-intellisense --generate-serialization library.xsd"
+ Outputs="library.hxx;library.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree --generate-ostream --generate-intellisense --generate-serialization library.xsd"
+ Outputs="library.hxx;library.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree --generate-ostream --generate-intellisense --generate-serialization library.xsd"
+ Outputs="library.hxx;library.cxx"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/compression/compression-xerces2-9.0.sln b/xsd/dist/examples/cxx/tree/compression/compression-xerces2-9.0.sln new file mode 100644 index 0000000..69eb3e3 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/compression/compression-xerces2-9.0.sln @@ -0,0 +1,25 @@ +Microsoft Visual Studio Solution File, Format Version 10.00
+# Visual Studio 2008
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "compression", "compression-xerces2-9.0.vcproj", "{AA385EB4-7352-4865-9C5C-9F0DE7BA0060}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Debug|x64 = Debug|x64
+ Release|Win32 = Release|Win32
+ Release|x64 = Release|x64
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {AA385EB4-7352-4865-9C5C-9F0DE7BA0060}.Debug|Win32.ActiveCfg = Debug|Win32
+ {AA385EB4-7352-4865-9C5C-9F0DE7BA0060}.Debug|Win32.Build.0 = Debug|Win32
+ {AA385EB4-7352-4865-9C5C-9F0DE7BA0060}.Debug|x64.ActiveCfg = Debug|x64
+ {AA385EB4-7352-4865-9C5C-9F0DE7BA0060}.Debug|x64.Build.0 = Debug|x64
+ {AA385EB4-7352-4865-9C5C-9F0DE7BA0060}.Release|Win32.ActiveCfg = Release|Win32
+ {AA385EB4-7352-4865-9C5C-9F0DE7BA0060}.Release|Win32.Build.0 = Release|Win32
+ {AA385EB4-7352-4865-9C5C-9F0DE7BA0060}.Release|x64.ActiveCfg = Release|x64
+ {AA385EB4-7352-4865-9C5C-9F0DE7BA0060}.Release|x64.Build.0 = Release|x64
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/xsd/dist/examples/cxx/tree/compression/compression-xerces2-9.0.vcproj b/xsd/dist/examples/cxx/tree/compression/compression-xerces2-9.0.vcproj new file mode 100644 index 0000000..7c95a2a --- /dev/null +++ b/xsd/dist/examples/cxx/tree/compression/compression-xerces2-9.0.vcproj @@ -0,0 +1,432 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="compression"
+ ProjectGUID="{AA385EB4-7352-4865-9C5C-9F0DE7BA0060}"
+ RootNamespace="compression"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib zdll.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib zdll.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib zdll.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib zdll.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{E38C94E8-B473-4B88-9C42-BD34C81BC24B}"
+ >
+ <File
+ RelativePath=".\driver.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\library.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\compressed-format-target.cxx">
+ </File>
+ <File
+ RelativePath=".\compressed-input-source.cxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{408177AE-D480-4933-AED3-705D39F15C9F}"
+ >
+ <File
+ RelativePath=".\library.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\compressed-format-target.hxx">
+ </File>
+ <File
+ RelativePath=".\compressed-input-source.hxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd"
+ >
+ <File
+ RelativePath=".\library.xsd"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree --generate-ostream --generate-serialization library.xsd"
+ Outputs="library.hxx;library.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree --generate-ostream --generate-serialization library.xsd"
+ Outputs="library.hxx;library.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree --generate-ostream --generate-serialization library.xsd"
+ Outputs="library.hxx;library.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree --generate-ostream --generate-serialization library.xsd"
+ Outputs="library.hxx;library.cxx"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/compression/makefile b/xsd/dist/examples/cxx/tree/compression/makefile new file mode 100644 index 0000000..f55c6ad --- /dev/null +++ b/xsd/dist/examples/cxx/tree/compression/makefile @@ -0,0 +1,37 @@ +root := ../../.. + +include $(root)/build/cxx/rules.make +include $(root)/build/xsd/tree-rules.make + + +override XSDFLAGS += --generate-ostream --generate-serialization + +override LIBS += -lz + +# Build. +# +driver: driver.o library.o compressed-format-target.o compressed-input-source.o + +library.o: library.cxx library.hxx +driver.o: driver.cxx library.hxx compressed-format-target.hxx \ +compressed-input-source.hxx +compressed-format-target.o: compressed-format-target.cxx +compressed-input-source.o: compressed-input-source.cxx + +library.cxx library.hxx: library.xsd + + +# Test +# +.PHONY: test +test: driver library.xml.gz + ./driver library.xml.gz + + +# Clean. +# +.PHONY: clean +clean: + rm -f library.o library.?xx driver.o compressed-format-target.o \ +compressed-input-source.o driver out.xml.gz + diff --git a/xsd/dist/examples/cxx/tree/custom/calendar/calendar-10.0.sln b/xsd/dist/examples/cxx/tree/custom/calendar/calendar-10.0.sln new file mode 100644 index 0000000..70b733c --- /dev/null +++ b/xsd/dist/examples/cxx/tree/custom/calendar/calendar-10.0.sln @@ -0,0 +1,25 @@ +Microsoft Visual Studio Solution File, Format Version 11.00
+# Visual Studio 2010
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "calendar", "calendar-10.0.vcxproj", "{2DB41EF7-0BED-45BA-A311-44D2719BFE09}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Debug|x64 = Debug|x64
+ Release|Win32 = Release|Win32
+ Release|x64 = Release|x64
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {2DB41EF7-0BED-45BA-A311-44D2719BFE09}.Debug|Win32.ActiveCfg = Debug|Win32
+ {2DB41EF7-0BED-45BA-A311-44D2719BFE09}.Debug|Win32.Build.0 = Debug|Win32
+ {2DB41EF7-0BED-45BA-A311-44D2719BFE09}.Debug|x64.ActiveCfg = Debug|x64
+ {2DB41EF7-0BED-45BA-A311-44D2719BFE09}.Debug|x64.Build.0 = Debug|x64
+ {2DB41EF7-0BED-45BA-A311-44D2719BFE09}.Release|Win32.ActiveCfg = Release|Win32
+ {2DB41EF7-0BED-45BA-A311-44D2719BFE09}.Release|Win32.Build.0 = Release|Win32
+ {2DB41EF7-0BED-45BA-A311-44D2719BFE09}.Release|x64.ActiveCfg = Release|x64
+ {2DB41EF7-0BED-45BA-A311-44D2719BFE09}.Release|x64.Build.0 = Release|x64
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/xsd/dist/examples/cxx/tree/custom/calendar/calendar-10.0.vcxproj b/xsd/dist/examples/cxx/tree/custom/calendar/calendar-10.0.vcxproj new file mode 100644 index 0000000..7dc3711 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/custom/calendar/calendar-10.0.vcxproj @@ -0,0 +1,233 @@ +<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectName>calendar</ProjectName>
+ <ProjectGuid>{2DB41EF7-0BED-45BA-A311-44D2719BFE09}</ProjectGuid>
+ <RootNamespace>calendar</RootNamespace>
+ <Keyword>Win32Proj</Keyword>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">driver</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">driver</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">driver</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">driver</TargetName>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Debug\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Debug\</IntDir>
+ <PreBuildEventUseInBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</PreBuildEventUseInBuild>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)\$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)\$(Configuration)\</IntDir>
+ <PreBuildEventUseInBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</PreBuildEventUseInBuild>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Release\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Release\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)\$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)\$(Configuration)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <PreBuildEvent>
+ <Message>xsd xml-schema.xsd</Message>
+ <Command>xsd cxx-tree --generate-xml-schema --custom-type date --hxx-epilogue "#include \"xml-schema-custom.hxx\"" xml-schema.xsd</Command>
+ </PreBuildEvent>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ <RuntimeTypeInfo>true</RuntimeTypeInfo>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>xerces-c_3D.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)driver.pdb</ProgramDatabaseFile>
+ <SubSystem>Console</SubSystem>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <PreBuildEvent>
+ <Message>xsd xml-schema.xsd</Message>
+ <Command>xsd cxx-tree --generate-xml-schema --custom-type date --hxx-epilogue "#include \"xml-schema-custom.hxx\"" xml-schema.xsd</Command>
+ </PreBuildEvent>
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ <RuntimeTypeInfo>true</RuntimeTypeInfo>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>xerces-c_3D.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)driver.pdb</ProgramDatabaseFile>
+ <SubSystem>Console</SubSystem>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <PreBuildEvent>
+ <Message>xsd xml-schema.xsd</Message>
+ <Command>xsd cxx-tree --generate-xml-schema --custom-type date --hxx-epilogue "#include \"xml-schema-custom.hxx\"" xml-schema.xsd</Command>
+ </PreBuildEvent>
+ <ClCompile>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <RuntimeTypeInfo>true</RuntimeTypeInfo>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>xerces-c_3.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <PreBuildEvent>
+ <Message>xsd xml-schema.xsd</Message>
+ <Command>xsd cxx-tree --generate-xml-schema --custom-type date --hxx-epilogue "#include \"xml-schema-custom.hxx\"" xml-schema.xsd</Command>
+ </PreBuildEvent>
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <RuntimeTypeInfo>true</RuntimeTypeInfo>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>xerces-c_3.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="calendar.cxx" />
+ <ClCompile Include="driver.cxx" />
+ <ClCompile Include="xml-schema-custom.cxx" />
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="calendar.hxx" />
+ <ClInclude Include="xml-schema-custom.hxx" />
+ <ClInclude Include="xml-schema.hxx" />
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="calendar.ixx" />
+ <None Include="Readme.txt" />
+ </ItemGroup>
+ <ItemGroup>
+ <CustomBuild Include="calendar.xsd">
+ <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">xsd calendar.xsd</Message>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">xsd cxx-tree --generate-inline --extern-xml-schema xml-schema.xsd calendar.xsd</Command>
+ <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">xml-schema.hxx;%(AdditionalInputs)</AdditionalInputs>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">calendar.hxx;calendar.ixx;calendar.cxx;%(Outputs)</Outputs>
+ <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">xsd calendar.xsd</Message>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">xsd cxx-tree --generate-inline --extern-xml-schema xml-schema.xsd calendar.xsd</Command>
+ <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">xml-schema.hxx;%(AdditionalInputs)</AdditionalInputs>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">calendar.hxx;calendar.ixx;calendar.cxx;%(Outputs)</Outputs>
+ <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">xsd calendar.xsd</Message>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">xsd cxx-tree --generate-inline --extern-xml-schema xml-schema.xsd calendar.xsd</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">calendar.hxx;calendar.ixx;calendar.cxx;%(Outputs)</Outputs>
+ <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">xsd calendar.xsd</Message>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">xsd cxx-tree --generate-inline --extern-xml-schema xml-schema.xsd calendar.xsd</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">calendar.hxx;calendar.ixx;calendar.cxx;%(Outputs)</Outputs>
+ </CustomBuild>
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project>
\ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/custom/calendar/calendar-10.0.vcxproj.filters b/xsd/dist/examples/cxx/tree/custom/calendar/calendar-10.0.vcxproj.filters new file mode 100644 index 0000000..943a2dc --- /dev/null +++ b/xsd/dist/examples/cxx/tree/custom/calendar/calendar-10.0.vcxproj.filters @@ -0,0 +1,54 @@ +<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="Source Files">
+ <UniqueIdentifier>{1F206676-7422-4DD5-94C3-7B9B2EC9C2D6}</UniqueIdentifier>
+ <Extensions>cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+ </Filter>
+ <Filter Include="Header Files">
+ <UniqueIdentifier>{8D4FED5E-FA2A-44AB-94AC-C8F302E2E1F3}</UniqueIdentifier>
+ <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
+ </Filter>
+ <Filter Include="Inline Files">
+ <UniqueIdentifier>{5c4bcf4f-9ad2-4a82-adfb-91528fe6f2e5}</UniqueIdentifier>
+ <Extensions>ixx</Extensions>
+ </Filter>
+ <Filter Include="Schema Files">
+ <UniqueIdentifier>{df5d1e63-29c7-4626-853a-34fc5c7f7443}</UniqueIdentifier>
+ <Extensions>xsd</Extensions>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="calendar.cxx">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="driver.cxx">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="xml-schema-custom.cxx">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="calendar.hxx">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="xml-schema-custom.hxx">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="xml-schema.hxx">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="calendar.ixx">
+ <Filter>Inline Files</Filter>
+ </None>
+ <None Include="Readme.txt" />
+ </ItemGroup>
+ <ItemGroup>
+ <CustomBuild Include="calendar.xsd">
+ <Filter>Schema Files</Filter>
+ </CustomBuild>
+ </ItemGroup>
+</Project>
\ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/custom/calendar/calendar-7.1.sln b/xsd/dist/examples/cxx/tree/custom/calendar/calendar-7.1.sln new file mode 100644 index 0000000..fb9c8e9 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/custom/calendar/calendar-7.1.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 8.00
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "calendar", "calendar-7.1.vcproj", "{2DB41EF7-0BED-45BA-A311-44D2719BFE09}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Global
+ GlobalSection(SolutionConfiguration) = preSolution
+ Debug = Debug
+ Release = Release
+ EndGlobalSection
+ GlobalSection(ProjectConfiguration) = postSolution
+ {2DB41EF7-0BED-45BA-A311-44D2719BFE09}.Debug.ActiveCfg = Debug|Win32
+ {2DB41EF7-0BED-45BA-A311-44D2719BFE09}.Debug.Build.0 = Debug|Win32
+ {2DB41EF7-0BED-45BA-A311-44D2719BFE09}.Release.ActiveCfg = Release|Win32
+ {2DB41EF7-0BED-45BA-A311-44D2719BFE09}.Release.Build.0 = Release|Win32
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ EndGlobalSection
+ GlobalSection(ExtensibilityAddIns) = postSolution
+ EndGlobalSection
+EndGlobal
diff --git a/xsd/dist/examples/cxx/tree/custom/calendar/calendar-7.1.vcproj b/xsd/dist/examples/cxx/tree/custom/calendar/calendar-7.1.vcproj new file mode 100644 index 0000000..c307908 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/custom/calendar/calendar-7.1.vcproj @@ -0,0 +1,186 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="calendar"
+ ProjectGUID="{2DB41EF7-0BED-45BA-A311-44D2719BFE09}"
+ RootNamespace="calendar"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="TRUE"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="5"
+ RuntimeTypeInfo="TRUE"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="4"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="TRUE"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"
+ Description="xsd xml-schema.xsd"
+ CommandLine="xsd cxx-tree --generate-xml-schema --generate-intellisense --custom-type date --hxx-epilogue "#include \"xml-schema-custom.hxx\"" xml-schema.xsd"
+ ExcludedFromBuild="FALSE"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="4"
+ RuntimeTypeInfo="TRUE"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="3"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"
+ Description="xsd xml-schema.xsd"
+ CommandLine="xsd cxx-tree --generate-xml-schema --generate-intellisense --custom-type date --hxx-epilogue "#include \"xml-schema-custom.hxx\"" xml-schema.xsd"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{1F206676-7422-4DD5-94C3-7B9B2EC9C2D6}">
+ <File
+ RelativePath=".\calendar.cxx">
+ </File>
+ <File
+ RelativePath=".\driver.cxx">
+ </File>
+ <File
+ RelativePath=".\xml-schema-custom.cxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{8D4FED5E-FA2A-44AB-94AC-C8F302E2E1F3}">
+ <File
+ RelativePath=".\calendar.hxx">
+ </File>
+ <File
+ RelativePath=".\xml-schema-custom.hxx">
+ </File>
+ <File
+ RelativePath=".\xml-schema.hxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Inline Files"
+ Filter="ixx">
+ <File
+ RelativePath=".\calendar.ixx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd">
+ <File
+ RelativePath=".\calendar.xsd">
+ <FileConfiguration
+ Name="Debug|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd calendar.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-intellisense --extern-xml-schema xml-schema.xsd calendar.xsd"
+ AdditionalDependencies="xml-schema.hxx"
+ Outputs="calendar.hxx;calendar.ixx;calendar.cxx"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd calendar.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-intellisense --extern-xml-schema xml-schema.xsd calendar.xsd"
+ Outputs="calendar.hxx;calendar.ixx;calendar.cxx"/>
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/custom/calendar/calendar-8.0.sln b/xsd/dist/examples/cxx/tree/custom/calendar/calendar-8.0.sln new file mode 100644 index 0000000..52f98df --- /dev/null +++ b/xsd/dist/examples/cxx/tree/custom/calendar/calendar-8.0.sln @@ -0,0 +1,25 @@ +Microsoft Visual Studio Solution File, Format Version 9.00
+# Visual Studio 2005
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "calendar", "calendar-8.0.vcproj", "{2DB41EF7-0BED-45BA-A311-44D2719BFE09}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Debug|x64 = Debug|x64
+ Release|Win32 = Release|Win32
+ Release|x64 = Release|x64
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {2DB41EF7-0BED-45BA-A311-44D2719BFE09}.Debug|Win32.ActiveCfg = Debug|Win32
+ {2DB41EF7-0BED-45BA-A311-44D2719BFE09}.Debug|Win32.Build.0 = Debug|Win32
+ {2DB41EF7-0BED-45BA-A311-44D2719BFE09}.Debug|x64.ActiveCfg = Debug|x64
+ {2DB41EF7-0BED-45BA-A311-44D2719BFE09}.Debug|x64.Build.0 = Debug|x64
+ {2DB41EF7-0BED-45BA-A311-44D2719BFE09}.Release|Win32.ActiveCfg = Release|Win32
+ {2DB41EF7-0BED-45BA-A311-44D2719BFE09}.Release|Win32.Build.0 = Release|Win32
+ {2DB41EF7-0BED-45BA-A311-44D2719BFE09}.Release|x64.ActiveCfg = Release|x64
+ {2DB41EF7-0BED-45BA-A311-44D2719BFE09}.Release|x64.Build.0 = Release|x64
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/xsd/dist/examples/cxx/tree/custom/calendar/calendar-8.0.vcproj b/xsd/dist/examples/cxx/tree/custom/calendar/calendar-8.0.vcproj new file mode 100644 index 0000000..e04807f --- /dev/null +++ b/xsd/dist/examples/cxx/tree/custom/calendar/calendar-8.0.vcproj @@ -0,0 +1,456 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="calendar"
+ ProjectGUID="{2DB41EF7-0BED-45BA-A311-44D2719BFE09}"
+ RootNamespace="calendar"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ Description="xsd xml-schema.xsd"
+ CommandLine="xsd cxx-tree --generate-xml-schema --generate-intellisense --custom-type date --hxx-epilogue "#include \"xml-schema-custom.hxx\"" xml-schema.xsd"
+ ExcludedFromBuild="false"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ Description="xsd xml-schema.xsd"
+ CommandLine="xsd cxx-tree --generate-xml-schema --generate-intellisense --custom-type date --hxx-epilogue "#include \"xml-schema-custom.hxx\"" xml-schema.xsd"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ Description="xsd xml-schema.xsd"
+ CommandLine="xsd cxx-tree --generate-xml-schema --generate-intellisense --custom-type date --hxx-epilogue "#include \"xml-schema-custom.hxx\"" xml-schema.xsd"
+ ExcludedFromBuild="false"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ Description="xsd xml-schema.xsd"
+ CommandLine="xsd cxx-tree --generate-xml-schema --generate-intellisense --custom-type date --hxx-epilogue "#include \"xml-schema-custom.hxx\"" xml-schema.xsd"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{1F206676-7422-4DD5-94C3-7B9B2EC9C2D6}"
+ >
+ <File
+ RelativePath=".\calendar.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\driver.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\xml-schema-custom.cxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{8D4FED5E-FA2A-44AB-94AC-C8F302E2E1F3}"
+ >
+ <File
+ RelativePath=".\calendar.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\xml-schema-custom.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\xml-schema.hxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Inline Files"
+ Filter="ixx"
+ >
+ <File
+ RelativePath=".\calendar.ixx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd"
+ >
+ <File
+ RelativePath=".\calendar.xsd"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd calendar.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-intellisense --extern-xml-schema xml-schema.xsd calendar.xsd"
+ AdditionalDependencies="xml-schema.hxx"
+ Outputs="calendar.hxx;calendar.ixx;calendar.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd calendar.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-intellisense --extern-xml-schema xml-schema.xsd calendar.xsd"
+ Outputs="calendar.hxx;calendar.ixx;calendar.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd calendar.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-intellisense --extern-xml-schema xml-schema.xsd calendar.xsd"
+ AdditionalDependencies="xml-schema.hxx"
+ Outputs="calendar.hxx;calendar.ixx;calendar.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd calendar.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-intellisense --extern-xml-schema xml-schema.xsd calendar.xsd"
+ Outputs="calendar.hxx;calendar.ixx;calendar.cxx"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/custom/calendar/calendar-9.0.sln b/xsd/dist/examples/cxx/tree/custom/calendar/calendar-9.0.sln new file mode 100644 index 0000000..ddaadad --- /dev/null +++ b/xsd/dist/examples/cxx/tree/custom/calendar/calendar-9.0.sln @@ -0,0 +1,25 @@ +Microsoft Visual Studio Solution File, Format Version 10.00
+# Visual Studio 2008
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "calendar", "calendar-9.0.vcproj", "{2DB41EF7-0BED-45BA-A311-44D2719BFE09}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Debug|x64 = Debug|x64
+ Release|Win32 = Release|Win32
+ Release|x64 = Release|x64
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {2DB41EF7-0BED-45BA-A311-44D2719BFE09}.Debug|Win32.ActiveCfg = Debug|Win32
+ {2DB41EF7-0BED-45BA-A311-44D2719BFE09}.Debug|Win32.Build.0 = Debug|Win32
+ {2DB41EF7-0BED-45BA-A311-44D2719BFE09}.Debug|x64.ActiveCfg = Debug|x64
+ {2DB41EF7-0BED-45BA-A311-44D2719BFE09}.Debug|x64.Build.0 = Debug|x64
+ {2DB41EF7-0BED-45BA-A311-44D2719BFE09}.Release|Win32.ActiveCfg = Release|Win32
+ {2DB41EF7-0BED-45BA-A311-44D2719BFE09}.Release|Win32.Build.0 = Release|Win32
+ {2DB41EF7-0BED-45BA-A311-44D2719BFE09}.Release|x64.ActiveCfg = Release|x64
+ {2DB41EF7-0BED-45BA-A311-44D2719BFE09}.Release|x64.Build.0 = Release|x64
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/xsd/dist/examples/cxx/tree/custom/calendar/calendar-9.0.vcproj b/xsd/dist/examples/cxx/tree/custom/calendar/calendar-9.0.vcproj new file mode 100644 index 0000000..d3a189a --- /dev/null +++ b/xsd/dist/examples/cxx/tree/custom/calendar/calendar-9.0.vcproj @@ -0,0 +1,453 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="calendar"
+ ProjectGUID="{2DB41EF7-0BED-45BA-A311-44D2719BFE09}"
+ RootNamespace="calendar"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ Description="xsd xml-schema.xsd"
+ CommandLine="xsd cxx-tree --generate-xml-schema --custom-type date --hxx-epilogue "#include \"xml-schema-custom.hxx\"" xml-schema.xsd"
+ ExcludedFromBuild="false"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ Description="xsd xml-schema.xsd"
+ CommandLine="xsd cxx-tree --generate-xml-schema --custom-type date --hxx-epilogue "#include \"xml-schema-custom.hxx\"" xml-schema.xsd"
+ ExcludedFromBuild="false"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ Description="xsd xml-schema.xsd"
+ CommandLine="xsd cxx-tree --generate-xml-schema --custom-type date --hxx-epilogue "#include \"xml-schema-custom.hxx\"" xml-schema.xsd"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ Description="xsd xml-schema.xsd"
+ CommandLine="xsd cxx-tree --generate-xml-schema --custom-type date --hxx-epilogue "#include \"xml-schema-custom.hxx\"" xml-schema.xsd"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{1F206676-7422-4DD5-94C3-7B9B2EC9C2D6}"
+ >
+ <File
+ RelativePath=".\calendar.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\driver.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\xml-schema-custom.cxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{8D4FED5E-FA2A-44AB-94AC-C8F302E2E1F3}"
+ >
+ <File
+ RelativePath=".\calendar.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\xml-schema-custom.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\xml-schema.hxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Inline Files"
+ Filter="ixx"
+ >
+ <File
+ RelativePath=".\calendar.ixx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd"
+ >
+ <File
+ RelativePath=".\calendar.xsd"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd calendar.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --extern-xml-schema xml-schema.xsd calendar.xsd"
+ AdditionalDependencies="xml-schema.hxx"
+ Outputs="calendar.hxx;calendar.ixx;calendar.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd calendar.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --extern-xml-schema xml-schema.xsd calendar.xsd"
+ AdditionalDependencies="xml-schema.hxx"
+ Outputs="calendar.hxx;calendar.ixx;calendar.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd calendar.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --extern-xml-schema xml-schema.xsd calendar.xsd"
+ Outputs="calendar.hxx;calendar.ixx;calendar.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd calendar.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --extern-xml-schema xml-schema.xsd calendar.xsd"
+ Outputs="calendar.hxx;calendar.ixx;calendar.cxx"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/custom/calendar/calendar-xerces2-7.1.sln b/xsd/dist/examples/cxx/tree/custom/calendar/calendar-xerces2-7.1.sln new file mode 100644 index 0000000..efc2856 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/custom/calendar/calendar-xerces2-7.1.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 8.00
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "calendar", "calendar-xerces2-7.1.vcproj", "{2DB41EF7-0BED-45BA-A311-44D2719BFE09}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Global
+ GlobalSection(SolutionConfiguration) = preSolution
+ Debug = Debug
+ Release = Release
+ EndGlobalSection
+ GlobalSection(ProjectConfiguration) = postSolution
+ {2DB41EF7-0BED-45BA-A311-44D2719BFE09}.Debug.ActiveCfg = Debug|Win32
+ {2DB41EF7-0BED-45BA-A311-44D2719BFE09}.Debug.Build.0 = Debug|Win32
+ {2DB41EF7-0BED-45BA-A311-44D2719BFE09}.Release.ActiveCfg = Release|Win32
+ {2DB41EF7-0BED-45BA-A311-44D2719BFE09}.Release.Build.0 = Release|Win32
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ EndGlobalSection
+ GlobalSection(ExtensibilityAddIns) = postSolution
+ EndGlobalSection
+EndGlobal
diff --git a/xsd/dist/examples/cxx/tree/custom/calendar/calendar-xerces2-7.1.vcproj b/xsd/dist/examples/cxx/tree/custom/calendar/calendar-xerces2-7.1.vcproj new file mode 100644 index 0000000..46f54ea --- /dev/null +++ b/xsd/dist/examples/cxx/tree/custom/calendar/calendar-xerces2-7.1.vcproj @@ -0,0 +1,186 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="calendar"
+ ProjectGUID="{2DB41EF7-0BED-45BA-A311-44D2719BFE09}"
+ RootNamespace="calendar"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="TRUE"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="5"
+ RuntimeTypeInfo="TRUE"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="4"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="TRUE"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"
+ Description="xsd xml-schema.xsd"
+ CommandLine="xsd cxx-tree --generate-xml-schema --generate-intellisense --custom-type date --hxx-epilogue "#include \"xml-schema-custom.hxx\"" xml-schema.xsd"
+ ExcludedFromBuild="FALSE"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="4"
+ RuntimeTypeInfo="TRUE"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="3"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"
+ Description="xsd xml-schema.xsd"
+ CommandLine="xsd cxx-tree --generate-xml-schema --generate-intellisense --custom-type date --hxx-epilogue "#include \"xml-schema-custom.hxx\"" xml-schema.xsd"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{1F206676-7422-4DD5-94C3-7B9B2EC9C2D6}">
+ <File
+ RelativePath=".\calendar.cxx">
+ </File>
+ <File
+ RelativePath=".\driver.cxx">
+ </File>
+ <File
+ RelativePath=".\xml-schema-custom.cxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{8D4FED5E-FA2A-44AB-94AC-C8F302E2E1F3}">
+ <File
+ RelativePath=".\calendar.hxx">
+ </File>
+ <File
+ RelativePath=".\xml-schema-custom.hxx">
+ </File>
+ <File
+ RelativePath=".\xml-schema.hxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Inline Files"
+ Filter="ixx">
+ <File
+ RelativePath=".\calendar.ixx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd">
+ <File
+ RelativePath=".\calendar.xsd">
+ <FileConfiguration
+ Name="Debug|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd calendar.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-intellisense --extern-xml-schema xml-schema.xsd calendar.xsd"
+ AdditionalDependencies="xml-schema.hxx"
+ Outputs="calendar.hxx;calendar.ixx;calendar.cxx"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd calendar.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-intellisense --extern-xml-schema xml-schema.xsd calendar.xsd"
+ Outputs="calendar.hxx;calendar.ixx;calendar.cxx"/>
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/custom/calendar/calendar-xerces2-8.0.sln b/xsd/dist/examples/cxx/tree/custom/calendar/calendar-xerces2-8.0.sln new file mode 100644 index 0000000..5701549 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/custom/calendar/calendar-xerces2-8.0.sln @@ -0,0 +1,25 @@ +Microsoft Visual Studio Solution File, Format Version 9.00
+# Visual Studio 2005
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "calendar", "calendar-xerces2-8.0.vcproj", "{2DB41EF7-0BED-45BA-A311-44D2719BFE09}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Debug|x64 = Debug|x64
+ Release|Win32 = Release|Win32
+ Release|x64 = Release|x64
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {2DB41EF7-0BED-45BA-A311-44D2719BFE09}.Debug|Win32.ActiveCfg = Debug|Win32
+ {2DB41EF7-0BED-45BA-A311-44D2719BFE09}.Debug|Win32.Build.0 = Debug|Win32
+ {2DB41EF7-0BED-45BA-A311-44D2719BFE09}.Debug|x64.ActiveCfg = Debug|x64
+ {2DB41EF7-0BED-45BA-A311-44D2719BFE09}.Debug|x64.Build.0 = Debug|x64
+ {2DB41EF7-0BED-45BA-A311-44D2719BFE09}.Release|Win32.ActiveCfg = Release|Win32
+ {2DB41EF7-0BED-45BA-A311-44D2719BFE09}.Release|Win32.Build.0 = Release|Win32
+ {2DB41EF7-0BED-45BA-A311-44D2719BFE09}.Release|x64.ActiveCfg = Release|x64
+ {2DB41EF7-0BED-45BA-A311-44D2719BFE09}.Release|x64.Build.0 = Release|x64
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/xsd/dist/examples/cxx/tree/custom/calendar/calendar-xerces2-8.0.vcproj b/xsd/dist/examples/cxx/tree/custom/calendar/calendar-xerces2-8.0.vcproj new file mode 100644 index 0000000..7ba96cc --- /dev/null +++ b/xsd/dist/examples/cxx/tree/custom/calendar/calendar-xerces2-8.0.vcproj @@ -0,0 +1,456 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="calendar"
+ ProjectGUID="{2DB41EF7-0BED-45BA-A311-44D2719BFE09}"
+ RootNamespace="calendar"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ Description="xsd xml-schema.xsd"
+ CommandLine="xsd cxx-tree --generate-xml-schema --generate-intellisense --custom-type date --hxx-epilogue "#include \"xml-schema-custom.hxx\"" xml-schema.xsd"
+ ExcludedFromBuild="false"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ Description="xsd xml-schema.xsd"
+ CommandLine="xsd cxx-tree --generate-xml-schema --generate-intellisense --custom-type date --hxx-epilogue "#include \"xml-schema-custom.hxx\"" xml-schema.xsd"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ Description="xsd xml-schema.xsd"
+ CommandLine="xsd cxx-tree --generate-xml-schema --generate-intellisense --custom-type date --hxx-epilogue "#include \"xml-schema-custom.hxx\"" xml-schema.xsd"
+ ExcludedFromBuild="false"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ Description="xsd xml-schema.xsd"
+ CommandLine="xsd cxx-tree --generate-xml-schema --generate-intellisense --custom-type date --hxx-epilogue "#include \"xml-schema-custom.hxx\"" xml-schema.xsd"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{1F206676-7422-4DD5-94C3-7B9B2EC9C2D6}"
+ >
+ <File
+ RelativePath=".\calendar.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\driver.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\xml-schema-custom.cxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{8D4FED5E-FA2A-44AB-94AC-C8F302E2E1F3}"
+ >
+ <File
+ RelativePath=".\calendar.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\xml-schema-custom.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\xml-schema.hxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Inline Files"
+ Filter="ixx"
+ >
+ <File
+ RelativePath=".\calendar.ixx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd"
+ >
+ <File
+ RelativePath=".\calendar.xsd"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd calendar.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-intellisense --extern-xml-schema xml-schema.xsd calendar.xsd"
+ AdditionalDependencies="xml-schema.hxx"
+ Outputs="calendar.hxx;calendar.ixx;calendar.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd calendar.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-intellisense --extern-xml-schema xml-schema.xsd calendar.xsd"
+ Outputs="calendar.hxx;calendar.ixx;calendar.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd calendar.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-intellisense --extern-xml-schema xml-schema.xsd calendar.xsd"
+ AdditionalDependencies="xml-schema.hxx"
+ Outputs="calendar.hxx;calendar.ixx;calendar.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd calendar.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-intellisense --extern-xml-schema xml-schema.xsd calendar.xsd"
+ Outputs="calendar.hxx;calendar.ixx;calendar.cxx"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/custom/calendar/calendar-xerces2-9.0.sln b/xsd/dist/examples/cxx/tree/custom/calendar/calendar-xerces2-9.0.sln new file mode 100644 index 0000000..982fa39 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/custom/calendar/calendar-xerces2-9.0.sln @@ -0,0 +1,25 @@ +Microsoft Visual Studio Solution File, Format Version 10.00
+# Visual Studio 2008
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "calendar", "calendar-xerces2-9.0.vcproj", "{2DB41EF7-0BED-45BA-A311-44D2719BFE09}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Debug|x64 = Debug|x64
+ Release|Win32 = Release|Win32
+ Release|x64 = Release|x64
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {2DB41EF7-0BED-45BA-A311-44D2719BFE09}.Debug|Win32.ActiveCfg = Debug|Win32
+ {2DB41EF7-0BED-45BA-A311-44D2719BFE09}.Debug|Win32.Build.0 = Debug|Win32
+ {2DB41EF7-0BED-45BA-A311-44D2719BFE09}.Debug|x64.ActiveCfg = Debug|x64
+ {2DB41EF7-0BED-45BA-A311-44D2719BFE09}.Debug|x64.Build.0 = Debug|x64
+ {2DB41EF7-0BED-45BA-A311-44D2719BFE09}.Release|Win32.ActiveCfg = Release|Win32
+ {2DB41EF7-0BED-45BA-A311-44D2719BFE09}.Release|Win32.Build.0 = Release|Win32
+ {2DB41EF7-0BED-45BA-A311-44D2719BFE09}.Release|x64.ActiveCfg = Release|x64
+ {2DB41EF7-0BED-45BA-A311-44D2719BFE09}.Release|x64.Build.0 = Release|x64
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/xsd/dist/examples/cxx/tree/custom/calendar/calendar-xerces2-9.0.vcproj b/xsd/dist/examples/cxx/tree/custom/calendar/calendar-xerces2-9.0.vcproj new file mode 100644 index 0000000..a100668 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/custom/calendar/calendar-xerces2-9.0.vcproj @@ -0,0 +1,453 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="calendar"
+ ProjectGUID="{2DB41EF7-0BED-45BA-A311-44D2719BFE09}"
+ RootNamespace="calendar"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ Description="xsd xml-schema.xsd"
+ CommandLine="xsd cxx-tree --generate-xml-schema --custom-type date --hxx-epilogue "#include \"xml-schema-custom.hxx\"" xml-schema.xsd"
+ ExcludedFromBuild="false"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ Description="xsd xml-schema.xsd"
+ CommandLine="xsd cxx-tree --generate-xml-schema --custom-type date --hxx-epilogue "#include \"xml-schema-custom.hxx\"" xml-schema.xsd"
+ ExcludedFromBuild="false"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ Description="xsd xml-schema.xsd"
+ CommandLine="xsd cxx-tree --generate-xml-schema --custom-type date --hxx-epilogue "#include \"xml-schema-custom.hxx\"" xml-schema.xsd"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ Description="xsd xml-schema.xsd"
+ CommandLine="xsd cxx-tree --generate-xml-schema --custom-type date --hxx-epilogue "#include \"xml-schema-custom.hxx\"" xml-schema.xsd"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{1F206676-7422-4DD5-94C3-7B9B2EC9C2D6}"
+ >
+ <File
+ RelativePath=".\calendar.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\driver.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\xml-schema-custom.cxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{8D4FED5E-FA2A-44AB-94AC-C8F302E2E1F3}"
+ >
+ <File
+ RelativePath=".\calendar.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\xml-schema-custom.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\xml-schema.hxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Inline Files"
+ Filter="ixx"
+ >
+ <File
+ RelativePath=".\calendar.ixx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd"
+ >
+ <File
+ RelativePath=".\calendar.xsd"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd calendar.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --extern-xml-schema xml-schema.xsd calendar.xsd"
+ AdditionalDependencies="xml-schema.hxx"
+ Outputs="calendar.hxx;calendar.ixx;calendar.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd calendar.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --extern-xml-schema xml-schema.xsd calendar.xsd"
+ AdditionalDependencies="xml-schema.hxx"
+ Outputs="calendar.hxx;calendar.ixx;calendar.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd calendar.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --extern-xml-schema xml-schema.xsd calendar.xsd"
+ Outputs="calendar.hxx;calendar.ixx;calendar.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd calendar.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --extern-xml-schema xml-schema.xsd calendar.xsd"
+ Outputs="calendar.hxx;calendar.ixx;calendar.cxx"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/custom/calendar/makefile b/xsd/dist/examples/cxx/tree/custom/calendar/makefile new file mode 100644 index 0000000..009d647 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/custom/calendar/makefile @@ -0,0 +1,42 @@ +root := ../../../.. + +include $(root)/build/cxx/rules.make +include $(root)/build/xsd/tree-rules.make + + +override XSDFLAGS += --generate-inline --extern-xml-schema xml-schema.xsd + +override LIBS += -lboost_date_time + + +# Build. +# +driver: driver.o calendar.o xml-schema-custom.o + +driver.o: driver.cxx calendar.ixx calendar.hxx xml-schema.hxx xml-schema-custom.hxx +calendar.o: calendar.cxx calendar.ixx calendar.hxx xml-schema.hxx xml-schema-custom.hxx +xml-schema-custom.o: xml-schema.hxx xml-schema-custom.hxx + +calendar.cxx calendar.ixx calendar.hxx: calendar.xsd + +# Generate header for XML Schema namespace. +# +XML_SCHEMA_XSDFLAGS := --generate-xml-schema --custom-type date \ +--hxx-epilogue '\#include "xml-schema-custom.hxx"' + +xml-schema.hxx: + $(XSD) cxx-tree $(XML_SCHEMA_XSDFLAGS) xml-schema.xsd + + +# Test +# +.PHONY: test +test: driver calendar.xml + ./driver calendar.xml + + +# Clean. +# +.PHONY: clean +clean: + rm -f xml-schema.hxx xml-schema-custom.o calendar.o calendar.?xx driver.o driver diff --git a/xsd/dist/examples/cxx/tree/custom/comments/comments-10.0.vcxproj b/xsd/dist/examples/cxx/tree/custom/comments/comments-10.0.vcxproj new file mode 100644 index 0000000..e6ad6e5 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/custom/comments/comments-10.0.vcxproj @@ -0,0 +1,235 @@ +<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectName>comments</ProjectName>
+ <ProjectGuid>{262E34D2-48D2-4657-9DB2-F01FFDCEA295}</ProjectGuid>
+ <RootNamespace>comments</RootNamespace>
+ <Keyword>Win32Proj</Keyword>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">driver</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">driver</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">driver</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">driver</TargetName>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Debug\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Debug\</IntDir>
+ <PreBuildEventUseInBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</PreBuildEventUseInBuild>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)\$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)\$(Configuration)\</IntDir>
+ <PreBuildEventUseInBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</PreBuildEventUseInBuild>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Release\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Release\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)\$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)\$(Configuration)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <PreBuildEvent>
+ <Message>xsd xml-schema.xsd</Message>
+ <Command>xsd cxx-tree --generate-xml-schema --generate-serialization --custom-type anyType=/type_base --hxx-epilogue "#include \"xml-schema-custom.hxx\"" xml-schema.xsd</Command>
+ </PreBuildEvent>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ <RuntimeTypeInfo>true</RuntimeTypeInfo>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>xerces-c_3D.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)driver.pdb</ProgramDatabaseFile>
+ <SubSystem>Console</SubSystem>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <PreBuildEvent>
+ <Message>xsd xml-schema.xsd</Message>
+ <Command>xsd cxx-tree --generate-xml-schema --generate-serialization --custom-type anyType=/type_base --hxx-epilogue "#include \"xml-schema-custom.hxx\"" xml-schema.xsd</Command>
+ </PreBuildEvent>
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ <RuntimeTypeInfo>true</RuntimeTypeInfo>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>xerces-c_3D.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)driver.pdb</ProgramDatabaseFile>
+ <SubSystem>Console</SubSystem>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <PreBuildEvent>
+ <Message>xsd xml-schema.xsd</Message>
+ <Command>xsd cxx-tree --generate-xml-schema --generate-serialization --custom-type anyType=/type_base --hxx-epilogue "#include \"xml-schema-custom.hxx\"" xml-schema.xsd</Command>
+ </PreBuildEvent>
+ <ClCompile>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <RuntimeTypeInfo>true</RuntimeTypeInfo>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>xerces-c_3.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <PreBuildEvent>
+ <Message>xsd xml-schema.xsd</Message>
+ <Command>xsd cxx-tree --generate-xml-schema --generate-serialization --custom-type anyType=/type_base --hxx-epilogue "#include \"xml-schema-custom.hxx\"" xml-schema.xsd</Command>
+ </PreBuildEvent>
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <RuntimeTypeInfo>true</RuntimeTypeInfo>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>xerces-c_3.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="dom-parse.cxx" />
+ <ClCompile Include="driver.cxx" />
+ <ClCompile Include="people.cxx" />
+ <ClCompile Include="xml-schema-custom.cxx" />
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="dom-parse.hxx" />
+ <ClInclude Include="people.hxx" />
+ <ClInclude Include="xml-schema-custom.hxx" />
+ <ClInclude Include="xml-schema.hxx" />
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="people.ixx" />
+ <None Include="Readme.txt" />
+ </ItemGroup>
+ <ItemGroup>
+ <CustomBuild Include="people.xsd">
+ <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">xsd people.xsd</Message>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">xsd cxx-tree --generate-inline --generate-serialization --extern-xml-schema xml-schema.xsd people.xsd</Command>
+ <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">xml-schema.hxx;%(AdditionalInputs)</AdditionalInputs>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">people.hxx;people.ixx;people.cxx;%(Outputs)</Outputs>
+ <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">xsd people.xsd</Message>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">xsd cxx-tree --generate-inline --generate-serialization --extern-xml-schema xml-schema.xsd people.xsd</Command>
+ <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">xml-schema.hxx;%(AdditionalInputs)</AdditionalInputs>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">people.hxx;people.ixx;people.cxx;%(Outputs)</Outputs>
+ <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">xsd people.xsd</Message>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">xsd cxx-tree --generate-inline --generate-serialization --extern-xml-schema xml-schema.xsd people.xsd</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">people.hxx;people.ixx;people.cxx;%(Outputs)</Outputs>
+ <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">xsd people.xsd</Message>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">xsd cxx-tree --generate-inline --generate-serialization --extern-xml-schema xml-schema.xsd people.xsd</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">people.hxx;people.ixx;people.cxx;%(Outputs)</Outputs>
+ </CustomBuild>
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project>
\ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/custom/comments/comments-10.0.vcxproj.filters b/xsd/dist/examples/cxx/tree/custom/comments/comments-10.0.vcxproj.filters new file mode 100644 index 0000000..934cabe --- /dev/null +++ b/xsd/dist/examples/cxx/tree/custom/comments/comments-10.0.vcxproj.filters @@ -0,0 +1,60 @@ +<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="Source Files">
+ <UniqueIdentifier>{97CD019E-CFDE-4879-AB8C-97DB3B526F92}</UniqueIdentifier>
+ <Extensions>cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+ </Filter>
+ <Filter Include="Header Files">
+ <UniqueIdentifier>{8E3E001B-1C7C-4383-A18D-B83AA525773F}</UniqueIdentifier>
+ <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
+ </Filter>
+ <Filter Include="Inline Files">
+ <UniqueIdentifier>{07ed52c5-d0a0-4659-9a65-2ee052612d2c}</UniqueIdentifier>
+ <Extensions>ixx</Extensions>
+ </Filter>
+ <Filter Include="Schema Files">
+ <UniqueIdentifier>{515a4811-9a34-429e-9c6d-3b771934d8db}</UniqueIdentifier>
+ <Extensions>xsd</Extensions>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="dom-parse.cxx">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="driver.cxx">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="people.cxx">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="xml-schema-custom.cxx">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="dom-parse.hxx">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="people.hxx">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="xml-schema-custom.hxx">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="xml-schema.hxx">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="people.ixx">
+ <Filter>Inline Files</Filter>
+ </None>
+ <None Include="Readme.txt" />
+ </ItemGroup>
+ <ItemGroup>
+ <CustomBuild Include="people.xsd">
+ <Filter>Schema Files</Filter>
+ </CustomBuild>
+ </ItemGroup>
+</Project>
\ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/custom/comments/comments-7.1.vcproj b/xsd/dist/examples/cxx/tree/custom/comments/comments-7.1.vcproj new file mode 100644 index 0000000..6d282c5 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/custom/comments/comments-7.1.vcproj @@ -0,0 +1,192 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="comments"
+ ProjectGUID="{262E34D2-48D2-4657-9DB2-F01FFDCEA295}"
+ RootNamespace="comments"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="TRUE"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="5"
+ RuntimeTypeInfo="TRUE"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="4"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="TRUE"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"
+ Description="xsd xml-schema.xsd"
+ CommandLine="xsd cxx-tree --generate-xml-schema --generate-serialization --generate-intellisense --custom-type anyType=/type_base --hxx-epilogue "#include \"xml-schema-custom.hxx\"" xml-schema.xsd"
+ ExcludedFromBuild="FALSE"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="4"
+ RuntimeTypeInfo="TRUE"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="3"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"
+ Description="xsd xml-schema.xsd"
+ CommandLine="xsd cxx-tree --generate-xml-schema --generate-serialization --generate-intellisense --custom-type anyType=/type_base --hxx-epilogue "#include \"xml-schema-custom.hxx\"" xml-schema.xsd"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{97CD019E-CFDE-4879-AB8C-97DB3B526F92}">
+ <File
+ RelativePath=".\people.cxx">
+ </File>
+ <File
+ RelativePath=".\driver.cxx">
+ </File>
+ <File
+ RelativePath=".\xml-schema-custom.cxx">
+ </File>
+ <File
+ RelativePath=".\dom-parse.cxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{8E3E001B-1C7C-4383-A18D-B83AA525773F}">
+ <File
+ RelativePath=".\people.hxx">
+ </File>
+ <File
+ RelativePath=".\xml-schema-custom.hxx">
+ </File>
+ <File
+ RelativePath=".\xml-schema.hxx">
+ </File>
+ <File
+ RelativePath=".\dom-parse.hxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Inline Files"
+ Filter="ixx">
+ <File
+ RelativePath=".\people.ixx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd">
+ <File
+ RelativePath=".\people.xsd">
+ <FileConfiguration
+ Name="Debug|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd people.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-serialization --generate-intellisense --extern-xml-schema xml-schema.xsd people.xsd"
+ AdditionalDependencies="xml-schema.hxx"
+ Outputs="people.hxx;people.ixx;people.cxx"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd people.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-serialization --generate-intellisense --extern-xml-schema xml-schema.xsd people.xsd"
+ Outputs="people.hxx;people.ixx;people.cxx"/>
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/custom/comments/comments-8.0.vcproj b/xsd/dist/examples/cxx/tree/custom/comments/comments-8.0.vcproj new file mode 100644 index 0000000..1ddca35 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/custom/comments/comments-8.0.vcproj @@ -0,0 +1,464 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="comments"
+ ProjectGUID="{262E34D2-48D2-4657-9DB2-F01FFDCEA295}"
+ RootNamespace="comments"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ Description="xsd xml-schema.xsd"
+ CommandLine="xsd cxx-tree --generate-xml-schema --generate-serialization --generate-intellisense --custom-type anyType=/type_base --hxx-epilogue "#include \"xml-schema-custom.hxx\"" xml-schema.xsd"
+ ExcludedFromBuild="false"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ Description="xsd xml-schema.xsd"
+ CommandLine="xsd cxx-tree --generate-xml-schema --generate-serialization --generate-intellisense --custom-type anyType=/type_base --hxx-epilogue "#include \"xml-schema-custom.hxx\"" xml-schema.xsd"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ Description="xsd xml-schema.xsd"
+ CommandLine="xsd cxx-tree --generate-xml-schema --generate-serialization --generate-intellisense --custom-type anyType=/type_base --hxx-epilogue "#include \"xml-schema-custom.hxx\"" xml-schema.xsd"
+ ExcludedFromBuild="false"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ Description="xsd xml-schema.xsd"
+ CommandLine="xsd cxx-tree --generate-xml-schema --generate-serialization --generate-intellisense --custom-type anyType=/type_base --hxx-epilogue "#include \"xml-schema-custom.hxx\"" xml-schema.xsd"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{97CD019E-CFDE-4879-AB8C-97DB3B526F92}"
+ >
+ <File
+ RelativePath=".\dom-parse.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\driver.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\people.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\xml-schema-custom.cxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{8E3E001B-1C7C-4383-A18D-B83AA525773F}"
+ >
+ <File
+ RelativePath=".\dom-parse.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\people.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\xml-schema-custom.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\xml-schema.hxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Inline Files"
+ Filter="ixx"
+ >
+ <File
+ RelativePath=".\people.ixx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd"
+ >
+ <File
+ RelativePath=".\people.xsd"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd people.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-serialization --generate-intellisense --extern-xml-schema xml-schema.xsd people.xsd"
+ AdditionalDependencies="xml-schema.hxx"
+ Outputs="people.hxx;people.ixx;people.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd people.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-serialization --generate-intellisense --extern-xml-schema xml-schema.xsd people.xsd"
+ Outputs="people.hxx;people.ixx;people.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd people.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-serialization --generate-intellisense --extern-xml-schema xml-schema.xsd people.xsd"
+ AdditionalDependencies="xml-schema.hxx"
+ Outputs="people.hxx;people.ixx;people.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd people.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-serialization --generate-intellisense --extern-xml-schema xml-schema.xsd people.xsd"
+ Outputs="people.hxx;people.ixx;people.cxx"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/custom/comments/comments-9.0.vcproj b/xsd/dist/examples/cxx/tree/custom/comments/comments-9.0.vcproj new file mode 100644 index 0000000..54d1925 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/custom/comments/comments-9.0.vcproj @@ -0,0 +1,461 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="comments"
+ ProjectGUID="{262E34D2-48D2-4657-9DB2-F01FFDCEA295}"
+ RootNamespace="comments"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ Description="xsd xml-schema.xsd"
+ CommandLine="xsd cxx-tree --generate-xml-schema --generate-serialization --custom-type anyType=/type_base --hxx-epilogue "#include \"xml-schema-custom.hxx\"" xml-schema.xsd"
+ ExcludedFromBuild="false"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ Description="xsd xml-schema.xsd"
+ CommandLine="xsd cxx-tree --generate-xml-schema --generate-serialization --custom-type anyType=/type_base --hxx-epilogue "#include \"xml-schema-custom.hxx\"" xml-schema.xsd"
+ ExcludedFromBuild="false"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ Description="xsd xml-schema.xsd"
+ CommandLine="xsd cxx-tree --generate-xml-schema --generate-serialization --custom-type anyType=/type_base --hxx-epilogue "#include \"xml-schema-custom.hxx\"" xml-schema.xsd"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ Description="xsd xml-schema.xsd"
+ CommandLine="xsd cxx-tree --generate-xml-schema --generate-serialization --custom-type anyType=/type_base --hxx-epilogue "#include \"xml-schema-custom.hxx\"" xml-schema.xsd"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{97CD019E-CFDE-4879-AB8C-97DB3B526F92}"
+ >
+ <File
+ RelativePath=".\dom-parse.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\driver.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\people.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\xml-schema-custom.cxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{8E3E001B-1C7C-4383-A18D-B83AA525773F}"
+ >
+ <File
+ RelativePath=".\dom-parse.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\people.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\xml-schema-custom.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\xml-schema.hxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Inline Files"
+ Filter="ixx"
+ >
+ <File
+ RelativePath=".\people.ixx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd"
+ >
+ <File
+ RelativePath=".\people.xsd"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd people.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-serialization --extern-xml-schema xml-schema.xsd people.xsd"
+ AdditionalDependencies="xml-schema.hxx"
+ Outputs="people.hxx;people.ixx;people.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd people.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-serialization --extern-xml-schema xml-schema.xsd people.xsd"
+ AdditionalDependencies="xml-schema.hxx"
+ Outputs="people.hxx;people.ixx;people.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd people.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-serialization --extern-xml-schema xml-schema.xsd people.xsd"
+ Outputs="people.hxx;people.ixx;people.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd people.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-serialization --extern-xml-schema xml-schema.xsd people.xsd"
+ Outputs="people.hxx;people.ixx;people.cxx"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/custom/comments/comments-xerces2-7.1.vcproj b/xsd/dist/examples/cxx/tree/custom/comments/comments-xerces2-7.1.vcproj new file mode 100644 index 0000000..390f2d9 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/custom/comments/comments-xerces2-7.1.vcproj @@ -0,0 +1,192 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="comments"
+ ProjectGUID="{262E34D2-48D2-4657-9DB2-F01FFDCEA295}"
+ RootNamespace="comments"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="TRUE"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="5"
+ RuntimeTypeInfo="TRUE"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="4"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="TRUE"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"
+ Description="xsd xml-schema.xsd"
+ CommandLine="xsd cxx-tree --generate-xml-schema --generate-serialization --generate-intellisense --custom-type anyType=/type_base --hxx-epilogue "#include \"xml-schema-custom.hxx\"" xml-schema.xsd"
+ ExcludedFromBuild="FALSE"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="4"
+ RuntimeTypeInfo="TRUE"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="3"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"
+ Description="xsd xml-schema.xsd"
+ CommandLine="xsd cxx-tree --generate-xml-schema --generate-serialization --generate-intellisense --custom-type anyType=/type_base --hxx-epilogue "#include \"xml-schema-custom.hxx\"" xml-schema.xsd"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{97CD019E-CFDE-4879-AB8C-97DB3B526F92}">
+ <File
+ RelativePath=".\people.cxx">
+ </File>
+ <File
+ RelativePath=".\driver.cxx">
+ </File>
+ <File
+ RelativePath=".\xml-schema-custom.cxx">
+ </File>
+ <File
+ RelativePath=".\dom-parse.cxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{8E3E001B-1C7C-4383-A18D-B83AA525773F}">
+ <File
+ RelativePath=".\people.hxx">
+ </File>
+ <File
+ RelativePath=".\xml-schema-custom.hxx">
+ </File>
+ <File
+ RelativePath=".\xml-schema.hxx">
+ </File>
+ <File
+ RelativePath=".\dom-parse.hxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Inline Files"
+ Filter="ixx">
+ <File
+ RelativePath=".\people.ixx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd">
+ <File
+ RelativePath=".\people.xsd">
+ <FileConfiguration
+ Name="Debug|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd people.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-serialization --generate-intellisense --extern-xml-schema xml-schema.xsd people.xsd"
+ AdditionalDependencies="xml-schema.hxx"
+ Outputs="people.hxx;people.ixx;people.cxx"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd people.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-serialization --generate-intellisense --extern-xml-schema xml-schema.xsd people.xsd"
+ Outputs="people.hxx;people.ixx;people.cxx"/>
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/custom/comments/comments-xerces2-8.0.vcproj b/xsd/dist/examples/cxx/tree/custom/comments/comments-xerces2-8.0.vcproj new file mode 100644 index 0000000..137eff8 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/custom/comments/comments-xerces2-8.0.vcproj @@ -0,0 +1,464 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="comments"
+ ProjectGUID="{262E34D2-48D2-4657-9DB2-F01FFDCEA295}"
+ RootNamespace="comments"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ Description="xsd xml-schema.xsd"
+ CommandLine="xsd cxx-tree --generate-xml-schema --generate-serialization --generate-intellisense --custom-type anyType=/type_base --hxx-epilogue "#include \"xml-schema-custom.hxx\"" xml-schema.xsd"
+ ExcludedFromBuild="false"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ Description="xsd xml-schema.xsd"
+ CommandLine="xsd cxx-tree --generate-xml-schema --generate-serialization --generate-intellisense --custom-type anyType=/type_base --hxx-epilogue "#include \"xml-schema-custom.hxx\"" xml-schema.xsd"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ Description="xsd xml-schema.xsd"
+ CommandLine="xsd cxx-tree --generate-xml-schema --generate-serialization --generate-intellisense --custom-type anyType=/type_base --hxx-epilogue "#include \"xml-schema-custom.hxx\"" xml-schema.xsd"
+ ExcludedFromBuild="false"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ Description="xsd xml-schema.xsd"
+ CommandLine="xsd cxx-tree --generate-xml-schema --generate-serialization --generate-intellisense --custom-type anyType=/type_base --hxx-epilogue "#include \"xml-schema-custom.hxx\"" xml-schema.xsd"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{97CD019E-CFDE-4879-AB8C-97DB3B526F92}"
+ >
+ <File
+ RelativePath=".\dom-parse.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\driver.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\people.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\xml-schema-custom.cxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{8E3E001B-1C7C-4383-A18D-B83AA525773F}"
+ >
+ <File
+ RelativePath=".\dom-parse.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\people.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\xml-schema-custom.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\xml-schema.hxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Inline Files"
+ Filter="ixx"
+ >
+ <File
+ RelativePath=".\people.ixx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd"
+ >
+ <File
+ RelativePath=".\people.xsd"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd people.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-serialization --generate-intellisense --extern-xml-schema xml-schema.xsd people.xsd"
+ AdditionalDependencies="xml-schema.hxx"
+ Outputs="people.hxx;people.ixx;people.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd people.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-serialization --generate-intellisense --extern-xml-schema xml-schema.xsd people.xsd"
+ Outputs="people.hxx;people.ixx;people.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd people.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-serialization --generate-intellisense --extern-xml-schema xml-schema.xsd people.xsd"
+ AdditionalDependencies="xml-schema.hxx"
+ Outputs="people.hxx;people.ixx;people.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd people.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-serialization --generate-intellisense --extern-xml-schema xml-schema.xsd people.xsd"
+ Outputs="people.hxx;people.ixx;people.cxx"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/custom/comments/comments-xerces2-9.0.vcproj b/xsd/dist/examples/cxx/tree/custom/comments/comments-xerces2-9.0.vcproj new file mode 100644 index 0000000..e1f238f --- /dev/null +++ b/xsd/dist/examples/cxx/tree/custom/comments/comments-xerces2-9.0.vcproj @@ -0,0 +1,461 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="comments"
+ ProjectGUID="{262E34D2-48D2-4657-9DB2-F01FFDCEA295}"
+ RootNamespace="comments"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ Description="xsd xml-schema.xsd"
+ CommandLine="xsd cxx-tree --generate-xml-schema --generate-serialization --custom-type anyType=/type_base --hxx-epilogue "#include \"xml-schema-custom.hxx\"" xml-schema.xsd"
+ ExcludedFromBuild="false"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ Description="xsd xml-schema.xsd"
+ CommandLine="xsd cxx-tree --generate-xml-schema --generate-serialization --custom-type anyType=/type_base --hxx-epilogue "#include \"xml-schema-custom.hxx\"" xml-schema.xsd"
+ ExcludedFromBuild="false"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ Description="xsd xml-schema.xsd"
+ CommandLine="xsd cxx-tree --generate-xml-schema --generate-serialization --custom-type anyType=/type_base --hxx-epilogue "#include \"xml-schema-custom.hxx\"" xml-schema.xsd"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ Description="xsd xml-schema.xsd"
+ CommandLine="xsd cxx-tree --generate-xml-schema --generate-serialization --custom-type anyType=/type_base --hxx-epilogue "#include \"xml-schema-custom.hxx\"" xml-schema.xsd"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{97CD019E-CFDE-4879-AB8C-97DB3B526F92}"
+ >
+ <File
+ RelativePath=".\dom-parse.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\driver.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\people.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\xml-schema-custom.cxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{8E3E001B-1C7C-4383-A18D-B83AA525773F}"
+ >
+ <File
+ RelativePath=".\dom-parse.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\people.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\xml-schema-custom.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\xml-schema.hxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Inline Files"
+ Filter="ixx"
+ >
+ <File
+ RelativePath=".\people.ixx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd"
+ >
+ <File
+ RelativePath=".\people.xsd"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd people.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-serialization --extern-xml-schema xml-schema.xsd people.xsd"
+ AdditionalDependencies="xml-schema.hxx"
+ Outputs="people.hxx;people.ixx;people.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd people.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-serialization --extern-xml-schema xml-schema.xsd people.xsd"
+ AdditionalDependencies="xml-schema.hxx"
+ Outputs="people.hxx;people.ixx;people.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd people.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-serialization --extern-xml-schema xml-schema.xsd people.xsd"
+ Outputs="people.hxx;people.ixx;people.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd people.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-serialization --extern-xml-schema xml-schema.xsd people.xsd"
+ Outputs="people.hxx;people.ixx;people.cxx"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/custom/comments/makefile b/xsd/dist/examples/cxx/tree/custom/comments/makefile new file mode 100644 index 0000000..963f262 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/custom/comments/makefile @@ -0,0 +1,43 @@ +root := ../../../.. + +include $(root)/build/cxx/rules.make +include $(root)/build/xsd/tree-rules.make + + +override XSDFLAGS += --generate-inline --generate-serialization \ +--extern-xml-schema xml-schema.xsd + + +# Build. +# +driver: driver.o people.o xml-schema-custom.o dom-parse.o + +driver.o: driver.cxx dom-parse.hxx people.ixx people.hxx xml-schema.hxx xml-schema-custom.hxx +people.o: people.cxx people.ixx people.hxx xml-schema.hxx xml-schema-custom.hxx +xml-schema-custom.o: xml-schema.hxx xml-schema-custom.hxx +dom-parse.o: dom-parse.cxx dom-parse.hxx + +people.cxx people.ixx people.hxx: people.xsd + +# Generate header for XML Schema namespace. +# +XML_SCHEMA_XSDFLAGS := --generate-xml-schema --generate-serialization \ +--custom-type anyType=/type_base \ +--hxx-epilogue '\#include "xml-schema-custom.hxx"' + +xml-schema.hxx: + $(XSD) cxx-tree $(XML_SCHEMA_XSDFLAGS) xml-schema.xsd + + +# Test +# +.PHONY: test +test: driver people.xml + ./driver people.xml + + +# Clean. +# +.PHONY: clean +clean: + rm -f xml-schema.hxx xml-schema-custom.o people.o people.?xx dom-parse.o driver.o driver diff --git a/xsd/dist/examples/cxx/tree/custom/contacts/contacts-10.0.vcxproj b/xsd/dist/examples/cxx/tree/custom/contacts/contacts-10.0.vcxproj new file mode 100644 index 0000000..6d02858 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/custom/contacts/contacts-10.0.vcxproj @@ -0,0 +1,212 @@ +<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectName>contacts</ProjectName>
+ <ProjectGuid>{9FB807C1-53EE-4E71-812F-89E8BE6FCB43}</ProjectGuid>
+ <RootNamespace>contacts</RootNamespace>
+ <Keyword>Win32Proj</Keyword>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">driver</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">driver</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">driver</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">driver</TargetName>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Debug\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Debug\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)\$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)\$(Configuration)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Release\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Release\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)\$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)\$(Configuration)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ <RuntimeTypeInfo>true</RuntimeTypeInfo>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>xerces-c_3D.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)driver.pdb</ProgramDatabaseFile>
+ <SubSystem>Console</SubSystem>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ <RuntimeTypeInfo>true</RuntimeTypeInfo>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>xerces-c_3D.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)driver.pdb</ProgramDatabaseFile>
+ <SubSystem>Console</SubSystem>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <RuntimeTypeInfo>true</RuntimeTypeInfo>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>xerces-c_3.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <RuntimeTypeInfo>true</RuntimeTypeInfo>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>xerces-c_3.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="contacts-custom.cxx" />
+ <ClCompile Include="contacts.cxx" />
+ <ClCompile Include="driver.cxx" />
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="contacts-custom.hxx" />
+ <ClInclude Include="contacts.hxx" />
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="contacts.ixx" />
+ <None Include="Readme.txt" />
+ </ItemGroup>
+ <ItemGroup>
+ <CustomBuild Include="contacts.xsd">
+ <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">xsd contacts.xsd</Message>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">xsd cxx-tree --generate-inline --custom-type contact=/contact_base --hxx-epilogue "#include \"contacts-custom.hxx\"" contacts.xsd</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">contacts.hxx;contacts.ixx;contacts.cxx;%(Outputs)</Outputs>
+ <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">xsd contacts.xsd</Message>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">xsd cxx-tree --generate-inline --custom-type contact=/contact_base --hxx-epilogue "#include \"contacts-custom.hxx\"" contacts.xsd</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">contacts.hxx;contacts.ixx;contacts.cxx;%(Outputs)</Outputs>
+ <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">xsd contacts.xsd</Message>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">xsd cxx-tree --generate-inline --custom-type contact=/contact_base --hxx-epilogue "#include \"contacts-custom.hxx\"" contacts.xsd</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">contacts.hxx;contacts.ixx;contacts.cxx;%(Outputs)</Outputs>
+ <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">xsd contacts.xsd</Message>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">xsd cxx-tree --generate-inline --custom-type contact=/contact_base --hxx-epilogue "#include \"contacts-custom.hxx\"" contacts.xsd</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">contacts.hxx;contacts.ixx;contacts.cxx;%(Outputs)</Outputs>
+ </CustomBuild>
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project>
\ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/custom/contacts/contacts-10.0.vcxproj.filters b/xsd/dist/examples/cxx/tree/custom/contacts/contacts-10.0.vcxproj.filters new file mode 100644 index 0000000..4435f19 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/custom/contacts/contacts-10.0.vcxproj.filters @@ -0,0 +1,51 @@ +<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="Source Files">
+ <UniqueIdentifier>{2E28B5D5-6E1D-434A-BFE2-2162751B243B}</UniqueIdentifier>
+ <Extensions>cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+ </Filter>
+ <Filter Include="Header Files">
+ <UniqueIdentifier>{92523A51-9884-450F-A581-5618AB14A9E3}</UniqueIdentifier>
+ <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
+ </Filter>
+ <Filter Include="Inline Files">
+ <UniqueIdentifier>{63214694-d62f-4e29-965b-bc5ecd1ac8b8}</UniqueIdentifier>
+ <Extensions>ixx</Extensions>
+ </Filter>
+ <Filter Include="Schema Files">
+ <UniqueIdentifier>{8b44177f-b842-4c6c-bfb8-c25e433bc0a3}</UniqueIdentifier>
+ <Extensions>xsd</Extensions>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="contacts-custom.cxx">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="contacts.cxx">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="driver.cxx">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="contacts-custom.hxx">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="contacts.hxx">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="contacts.ixx">
+ <Filter>Inline Files</Filter>
+ </None>
+ <None Include="Readme.txt" />
+ </ItemGroup>
+ <ItemGroup>
+ <CustomBuild Include="contacts.xsd">
+ <Filter>Schema Files</Filter>
+ </CustomBuild>
+ </ItemGroup>
+</Project>
\ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/custom/contacts/contacts-7.1.vcproj b/xsd/dist/examples/cxx/tree/custom/contacts/contacts-7.1.vcproj new file mode 100644 index 0000000..7b2fc6a --- /dev/null +++ b/xsd/dist/examples/cxx/tree/custom/contacts/contacts-7.1.vcproj @@ -0,0 +1,177 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="contacts"
+ ProjectGUID="{9FB807C1-53EE-4E71-812F-89E8BE6FCB43}"
+ RootNamespace="contacts"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="TRUE"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="5"
+ RuntimeTypeInfo="TRUE"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="4"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="TRUE"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="4"
+ RuntimeTypeInfo="TRUE"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="3"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{2E28B5D5-6E1D-434A-BFE2-2162751B243B}">
+ <File
+ RelativePath=".\driver.cxx">
+ </File>
+ <File
+ RelativePath=".\contacts.cxx">
+ </File>
+ <File
+ RelativePath=".\contacts-custom.cxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{92523A51-9884-450F-A581-5618AB14A9E3}">
+ <File
+ RelativePath=".\contacts.hxx">
+ </File>
+ <File
+ RelativePath=".\contacts-custom.hxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Inline Files"
+ Filter="ixx">
+ <File
+ RelativePath=".\contacts.ixx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd">
+ <File
+ RelativePath=".\contacts.xsd">
+ <FileConfiguration
+ Name="Debug|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd contacts.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-intellisense --custom-type contact=/contact_base --hxx-epilogue "#include \"contacts-custom.hxx\"" contacts.xsd"
+ Outputs="contacts.hxx;contacts.ixx;contacts.cxx"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd contacts.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-intellisense --custom-type contact=/contact_base --hxx-epilogue "#include \"contacts-custom.hxx\"" contacts.xsd"
+ Outputs="contacts.hxx;contacts.ixx;contacts.cxx"/>
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/custom/contacts/contacts-8.0.vcproj b/xsd/dist/examples/cxx/tree/custom/contacts/contacts-8.0.vcproj new file mode 100644 index 0000000..e98d06f --- /dev/null +++ b/xsd/dist/examples/cxx/tree/custom/contacts/contacts-8.0.vcproj @@ -0,0 +1,440 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="contacts"
+ ProjectGUID="{9FB807C1-53EE-4E71-812F-89E8BE6FCB43}"
+ RootNamespace="contacts"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{2E28B5D5-6E1D-434A-BFE2-2162751B243B}"
+ >
+ <File
+ RelativePath=".\contacts-custom.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\contacts.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\driver.cxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{92523A51-9884-450F-A581-5618AB14A9E3}"
+ >
+ <File
+ RelativePath=".\contacts-custom.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\contacts.hxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Inline Files"
+ Filter="ixx"
+ >
+ <File
+ RelativePath=".\contacts.ixx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd"
+ >
+ <File
+ RelativePath=".\contacts.xsd"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd contacts.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-intellisense --custom-type contact=/contact_base --hxx-epilogue "#include \"contacts-custom.hxx\"" contacts.xsd"
+ Outputs="contacts.hxx;contacts.ixx;contacts.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd contacts.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-intellisense --custom-type contact=/contact_base --hxx-epilogue "#include \"contacts-custom.hxx\"" contacts.xsd"
+ Outputs="contacts.hxx;contacts.ixx;contacts.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd contacts.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-intellisense --custom-type contact=/contact_base --hxx-epilogue "#include \"contacts-custom.hxx\"" contacts.xsd"
+ Outputs="contacts.hxx;contacts.ixx;contacts.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd contacts.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-intellisense --custom-type contact=/contact_base --hxx-epilogue "#include \"contacts-custom.hxx\"" contacts.xsd"
+ Outputs="contacts.hxx;contacts.ixx;contacts.cxx"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/custom/contacts/contacts-9.0.vcproj b/xsd/dist/examples/cxx/tree/custom/contacts/contacts-9.0.vcproj new file mode 100644 index 0000000..0d1c90f --- /dev/null +++ b/xsd/dist/examples/cxx/tree/custom/contacts/contacts-9.0.vcproj @@ -0,0 +1,437 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="contacts"
+ ProjectGUID="{9FB807C1-53EE-4E71-812F-89E8BE6FCB43}"
+ RootNamespace="contacts"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{2E28B5D5-6E1D-434A-BFE2-2162751B243B}"
+ >
+ <File
+ RelativePath=".\contacts-custom.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\contacts.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\driver.cxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{92523A51-9884-450F-A581-5618AB14A9E3}"
+ >
+ <File
+ RelativePath=".\contacts-custom.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\contacts.hxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Inline Files"
+ Filter="ixx"
+ >
+ <File
+ RelativePath=".\contacts.ixx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd"
+ >
+ <File
+ RelativePath=".\contacts.xsd"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd contacts.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --custom-type contact=/contact_base --hxx-epilogue "#include \"contacts-custom.hxx\"" contacts.xsd"
+ Outputs="contacts.hxx;contacts.ixx;contacts.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd contacts.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --custom-type contact=/contact_base --hxx-epilogue "#include \"contacts-custom.hxx\"" contacts.xsd"
+ Outputs="contacts.hxx;contacts.ixx;contacts.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd contacts.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --custom-type contact=/contact_base --hxx-epilogue "#include \"contacts-custom.hxx\"" contacts.xsd"
+ Outputs="contacts.hxx;contacts.ixx;contacts.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd contacts.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --custom-type contact=/contact_base --hxx-epilogue "#include \"contacts-custom.hxx\"" contacts.xsd"
+ Outputs="contacts.hxx;contacts.ixx;contacts.cxx"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/custom/contacts/contacts-xerces2-7.1.vcproj b/xsd/dist/examples/cxx/tree/custom/contacts/contacts-xerces2-7.1.vcproj new file mode 100644 index 0000000..315cdaa --- /dev/null +++ b/xsd/dist/examples/cxx/tree/custom/contacts/contacts-xerces2-7.1.vcproj @@ -0,0 +1,177 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="contacts"
+ ProjectGUID="{9FB807C1-53EE-4E71-812F-89E8BE6FCB43}"
+ RootNamespace="contacts"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="TRUE"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="5"
+ RuntimeTypeInfo="TRUE"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="4"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="TRUE"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="4"
+ RuntimeTypeInfo="TRUE"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="3"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{2E28B5D5-6E1D-434A-BFE2-2162751B243B}">
+ <File
+ RelativePath=".\driver.cxx">
+ </File>
+ <File
+ RelativePath=".\contacts.cxx">
+ </File>
+ <File
+ RelativePath=".\contacts-custom.cxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{92523A51-9884-450F-A581-5618AB14A9E3}">
+ <File
+ RelativePath=".\contacts.hxx">
+ </File>
+ <File
+ RelativePath=".\contacts-custom.hxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Inline Files"
+ Filter="ixx">
+ <File
+ RelativePath=".\contacts.ixx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd">
+ <File
+ RelativePath=".\contacts.xsd">
+ <FileConfiguration
+ Name="Debug|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd contacts.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-intellisense --custom-type contact=/contact_base --hxx-epilogue "#include \"contacts-custom.hxx\"" contacts.xsd"
+ Outputs="contacts.hxx;contacts.ixx;contacts.cxx"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd contacts.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-intellisense --custom-type contact=/contact_base --hxx-epilogue "#include \"contacts-custom.hxx\"" contacts.xsd"
+ Outputs="contacts.hxx;contacts.ixx;contacts.cxx"/>
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/custom/contacts/contacts-xerces2-8.0.vcproj b/xsd/dist/examples/cxx/tree/custom/contacts/contacts-xerces2-8.0.vcproj new file mode 100644 index 0000000..08fe9cb --- /dev/null +++ b/xsd/dist/examples/cxx/tree/custom/contacts/contacts-xerces2-8.0.vcproj @@ -0,0 +1,440 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="contacts"
+ ProjectGUID="{9FB807C1-53EE-4E71-812F-89E8BE6FCB43}"
+ RootNamespace="contacts"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{2E28B5D5-6E1D-434A-BFE2-2162751B243B}"
+ >
+ <File
+ RelativePath=".\contacts-custom.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\contacts.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\driver.cxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{92523A51-9884-450F-A581-5618AB14A9E3}"
+ >
+ <File
+ RelativePath=".\contacts-custom.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\contacts.hxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Inline Files"
+ Filter="ixx"
+ >
+ <File
+ RelativePath=".\contacts.ixx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd"
+ >
+ <File
+ RelativePath=".\contacts.xsd"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd contacts.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-intellisense --custom-type contact=/contact_base --hxx-epilogue "#include \"contacts-custom.hxx\"" contacts.xsd"
+ Outputs="contacts.hxx;contacts.ixx;contacts.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd contacts.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-intellisense --custom-type contact=/contact_base --hxx-epilogue "#include \"contacts-custom.hxx\"" contacts.xsd"
+ Outputs="contacts.hxx;contacts.ixx;contacts.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd contacts.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-intellisense --custom-type contact=/contact_base --hxx-epilogue "#include \"contacts-custom.hxx\"" contacts.xsd"
+ Outputs="contacts.hxx;contacts.ixx;contacts.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd contacts.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-intellisense --custom-type contact=/contact_base --hxx-epilogue "#include \"contacts-custom.hxx\"" contacts.xsd"
+ Outputs="contacts.hxx;contacts.ixx;contacts.cxx"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/custom/contacts/contacts-xerces2-9.0.vcproj b/xsd/dist/examples/cxx/tree/custom/contacts/contacts-xerces2-9.0.vcproj new file mode 100644 index 0000000..08d30cc --- /dev/null +++ b/xsd/dist/examples/cxx/tree/custom/contacts/contacts-xerces2-9.0.vcproj @@ -0,0 +1,437 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="contacts"
+ ProjectGUID="{9FB807C1-53EE-4E71-812F-89E8BE6FCB43}"
+ RootNamespace="contacts"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{2E28B5D5-6E1D-434A-BFE2-2162751B243B}"
+ >
+ <File
+ RelativePath=".\contacts-custom.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\contacts.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\driver.cxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{92523A51-9884-450F-A581-5618AB14A9E3}"
+ >
+ <File
+ RelativePath=".\contacts-custom.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\contacts.hxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Inline Files"
+ Filter="ixx"
+ >
+ <File
+ RelativePath=".\contacts.ixx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd"
+ >
+ <File
+ RelativePath=".\contacts.xsd"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd contacts.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --custom-type contact=/contact_base --hxx-epilogue "#include \"contacts-custom.hxx\"" contacts.xsd"
+ Outputs="contacts.hxx;contacts.ixx;contacts.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd contacts.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --custom-type contact=/contact_base --hxx-epilogue "#include \"contacts-custom.hxx\"" contacts.xsd"
+ Outputs="contacts.hxx;contacts.ixx;contacts.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd contacts.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --custom-type contact=/contact_base --hxx-epilogue "#include \"contacts-custom.hxx\"" contacts.xsd"
+ Outputs="contacts.hxx;contacts.ixx;contacts.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd contacts.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --custom-type contact=/contact_base --hxx-epilogue "#include \"contacts-custom.hxx\"" contacts.xsd"
+ Outputs="contacts.hxx;contacts.ixx;contacts.cxx"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/custom/contacts/makefile b/xsd/dist/examples/cxx/tree/custom/contacts/makefile new file mode 100644 index 0000000..8155d0e --- /dev/null +++ b/xsd/dist/examples/cxx/tree/custom/contacts/makefile @@ -0,0 +1,33 @@ +root := ../../../.. + +include $(root)/build/cxx/rules.make +include $(root)/build/xsd/tree-rules.make + + +override XSDFLAGS += --generate-inline --custom-type contact=/contact_base \ +--hxx-epilogue '\#include "contacts-custom.hxx"' + + +# Build. +# +driver: driver.o contacts.o contacts-custom.o + +contacts.o: contacts.cxx contacts.ixx contacts.hxx contacts-custom.hxx +driver.o: driver.cxx contacts.ixx contacts.hxx contacts-custom.hxx +contacts-custom.o: contacts-custom.cxx contacts.ixx contacts.hxx contacts-custom.hxx + +contacts.cxx contacts.hxx contacts.ixx: contacts.xsd + + +# Test +# +.PHONY: test +test: driver contacts.xml + ./driver contacts.xml + + +# Clean. +# +.PHONY: clean +clean: + rm -f contacts-custom.o contacts.o contacts.?xx driver.o driver diff --git a/xsd/dist/examples/cxx/tree/custom/custom-10.0.sln b/xsd/dist/examples/cxx/tree/custom/custom-10.0.sln new file mode 100644 index 0000000..ae089e7 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/custom/custom-10.0.sln @@ -0,0 +1,75 @@ +Microsoft Visual Studio Solution File, Format Version 11.00
+# Visual Studio 2010
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "contacts", "contacts\contacts-10.0.vcxproj", "{9FB807C1-53EE-4E71-812F-89E8BE6FCB43}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "taxonomy", "taxonomy\taxonomy-10.0.vcxproj", "{B3108E70-7B4E-4DDA-8872-0DC4AFDCB2D9}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wildcard", "wildcard\wildcard-10.0.vcxproj", "{6CE6CDEC-F8DE-42D0-80F8-E71C0DD8F897}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "comments", "comments\comments-10.0.vcxproj", "{262E34D2-48D2-4657-9DB2-F01FFDCEA295}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "double", "double\double-10.0.vcxproj", "{CCE6AE91-39AC-49B6-8763-742B65FCD92E}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mixed", "mixed\mixed-10.0.vcxproj", "{26CE0C08-7621-403A-88A7-206E64F32C66}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Debug|x64 = Debug|x64
+ Release|Win32 = Release|Win32
+ Release|x64 = Release|x64
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {9FB807C1-53EE-4E71-812F-89E8BE6FCB43}.Debug|Win32.ActiveCfg = Debug|Win32
+ {9FB807C1-53EE-4E71-812F-89E8BE6FCB43}.Debug|Win32.Build.0 = Debug|Win32
+ {9FB807C1-53EE-4E71-812F-89E8BE6FCB43}.Debug|x64.ActiveCfg = Debug|x64
+ {9FB807C1-53EE-4E71-812F-89E8BE6FCB43}.Debug|x64.Build.0 = Debug|x64
+ {9FB807C1-53EE-4E71-812F-89E8BE6FCB43}.Release|Win32.ActiveCfg = Release|Win32
+ {9FB807C1-53EE-4E71-812F-89E8BE6FCB43}.Release|Win32.Build.0 = Release|Win32
+ {9FB807C1-53EE-4E71-812F-89E8BE6FCB43}.Release|x64.ActiveCfg = Release|x64
+ {9FB807C1-53EE-4E71-812F-89E8BE6FCB43}.Release|x64.Build.0 = Release|x64
+ {B3108E70-7B4E-4DDA-8872-0DC4AFDCB2D9}.Debug|Win32.ActiveCfg = Debug|Win32
+ {B3108E70-7B4E-4DDA-8872-0DC4AFDCB2D9}.Debug|Win32.Build.0 = Debug|Win32
+ {B3108E70-7B4E-4DDA-8872-0DC4AFDCB2D9}.Debug|x64.ActiveCfg = Debug|x64
+ {B3108E70-7B4E-4DDA-8872-0DC4AFDCB2D9}.Debug|x64.Build.0 = Debug|x64
+ {B3108E70-7B4E-4DDA-8872-0DC4AFDCB2D9}.Release|Win32.ActiveCfg = Release|Win32
+ {B3108E70-7B4E-4DDA-8872-0DC4AFDCB2D9}.Release|Win32.Build.0 = Release|Win32
+ {B3108E70-7B4E-4DDA-8872-0DC4AFDCB2D9}.Release|x64.ActiveCfg = Release|x64
+ {B3108E70-7B4E-4DDA-8872-0DC4AFDCB2D9}.Release|x64.Build.0 = Release|x64
+ {6CE6CDEC-F8DE-42D0-80F8-E71C0DD8F897}.Debug|Win32.ActiveCfg = Debug|Win32
+ {6CE6CDEC-F8DE-42D0-80F8-E71C0DD8F897}.Debug|Win32.Build.0 = Debug|Win32
+ {6CE6CDEC-F8DE-42D0-80F8-E71C0DD8F897}.Debug|x64.ActiveCfg = Debug|x64
+ {6CE6CDEC-F8DE-42D0-80F8-E71C0DD8F897}.Debug|x64.Build.0 = Debug|x64
+ {6CE6CDEC-F8DE-42D0-80F8-E71C0DD8F897}.Release|Win32.ActiveCfg = Release|Win32
+ {6CE6CDEC-F8DE-42D0-80F8-E71C0DD8F897}.Release|Win32.Build.0 = Release|Win32
+ {6CE6CDEC-F8DE-42D0-80F8-E71C0DD8F897}.Release|x64.ActiveCfg = Release|x64
+ {6CE6CDEC-F8DE-42D0-80F8-E71C0DD8F897}.Release|x64.Build.0 = Release|x64
+ {262E34D2-48D2-4657-9DB2-F01FFDCEA295}.Debug|Win32.ActiveCfg = Debug|Win32
+ {262E34D2-48D2-4657-9DB2-F01FFDCEA295}.Debug|Win32.Build.0 = Debug|Win32
+ {262E34D2-48D2-4657-9DB2-F01FFDCEA295}.Debug|x64.ActiveCfg = Debug|x64
+ {262E34D2-48D2-4657-9DB2-F01FFDCEA295}.Debug|x64.Build.0 = Debug|x64
+ {262E34D2-48D2-4657-9DB2-F01FFDCEA295}.Release|Win32.ActiveCfg = Release|Win32
+ {262E34D2-48D2-4657-9DB2-F01FFDCEA295}.Release|Win32.Build.0 = Release|Win32
+ {262E34D2-48D2-4657-9DB2-F01FFDCEA295}.Release|x64.ActiveCfg = Release|x64
+ {262E34D2-48D2-4657-9DB2-F01FFDCEA295}.Release|x64.Build.0 = Release|x64
+ {CCE6AE91-39AC-49B6-8763-742B65FCD92E}.Debug|Win32.ActiveCfg = Debug|Win32
+ {CCE6AE91-39AC-49B6-8763-742B65FCD92E}.Debug|Win32.Build.0 = Debug|Win32
+ {CCE6AE91-39AC-49B6-8763-742B65FCD92E}.Debug|x64.ActiveCfg = Debug|x64
+ {CCE6AE91-39AC-49B6-8763-742B65FCD92E}.Debug|x64.Build.0 = Debug|x64
+ {CCE6AE91-39AC-49B6-8763-742B65FCD92E}.Release|Win32.ActiveCfg = Release|Win32
+ {CCE6AE91-39AC-49B6-8763-742B65FCD92E}.Release|Win32.Build.0 = Release|Win32
+ {CCE6AE91-39AC-49B6-8763-742B65FCD92E}.Release|x64.ActiveCfg = Release|x64
+ {CCE6AE91-39AC-49B6-8763-742B65FCD92E}.Release|x64.Build.0 = Release|x64
+ {26CE0C08-7621-403A-88A7-206E64F32C66}.Debug|Win32.ActiveCfg = Debug|Win32
+ {26CE0C08-7621-403A-88A7-206E64F32C66}.Debug|Win32.Build.0 = Debug|Win32
+ {26CE0C08-7621-403A-88A7-206E64F32C66}.Debug|x64.ActiveCfg = Debug|x64
+ {26CE0C08-7621-403A-88A7-206E64F32C66}.Debug|x64.Build.0 = Debug|x64
+ {26CE0C08-7621-403A-88A7-206E64F32C66}.Release|Win32.ActiveCfg = Release|Win32
+ {26CE0C08-7621-403A-88A7-206E64F32C66}.Release|Win32.Build.0 = Release|Win32
+ {26CE0C08-7621-403A-88A7-206E64F32C66}.Release|x64.ActiveCfg = Release|x64
+ {26CE0C08-7621-403A-88A7-206E64F32C66}.Release|x64.Build.0 = Release|x64
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/xsd/dist/examples/cxx/tree/custom/custom-7.1.sln b/xsd/dist/examples/cxx/tree/custom/custom-7.1.sln new file mode 100644 index 0000000..86f7196 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/custom/custom-7.1.sln @@ -0,0 +1,61 @@ +Microsoft Visual Studio Solution File, Format Version 8.00
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "contacts", "contacts\contacts-7.1.vcproj", "{9FB807C1-53EE-4E71-812F-89E8BE6FCB43}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "taxonomy", "taxonomy\taxonomy-7.1.vcproj", "{B3108E70-7B4E-4DDA-8872-0DC4AFDCB2D9}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wildcard", "wildcard\wildcard-7.1.vcproj", "{6CE6CDEC-F8DE-42D0-80F8-E71C0DD8F897}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "comments", "comments\comments-7.1.vcproj", "{262E34D2-48D2-4657-9DB2-F01FFDCEA295}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "double", "double\double-7.1.vcproj", "{CCE6AE91-39AC-49B6-8763-742B65FCD92E}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mixed", "mixed\mixed-7.1.vcproj", "{26CE0C08-7621-403A-88A7-206E64F32C66}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Global
+ GlobalSection(SolutionConfiguration) = preSolution
+ Debug = Debug
+ Release = Release
+ EndGlobalSection
+ GlobalSection(ProjectConfiguration) = postSolution
+ {9FB807C1-53EE-4E71-812F-89E8BE6FCB43}.Debug.ActiveCfg = Debug|Win32
+ {9FB807C1-53EE-4E71-812F-89E8BE6FCB43}.Debug.Build.0 = Debug|Win32
+ {9FB807C1-53EE-4E71-812F-89E8BE6FCB43}.Release.ActiveCfg = Release|Win32
+ {9FB807C1-53EE-4E71-812F-89E8BE6FCB43}.Release.Build.0 = Release|Win32
+ {B3108E70-7B4E-4DDA-8872-0DC4AFDCB2D9}.Debug.ActiveCfg = Debug|Win32
+ {B3108E70-7B4E-4DDA-8872-0DC4AFDCB2D9}.Debug.Build.0 = Debug|Win32
+ {B3108E70-7B4E-4DDA-8872-0DC4AFDCB2D9}.Release.ActiveCfg = Release|Win32
+ {B3108E70-7B4E-4DDA-8872-0DC4AFDCB2D9}.Release.Build.0 = Release|Win32
+ {6CE6CDEC-F8DE-42D0-80F8-E71C0DD8F897}.Debug.ActiveCfg = Debug|Win32
+ {6CE6CDEC-F8DE-42D0-80F8-E71C0DD8F897}.Debug.Build.0 = Debug|Win32
+ {6CE6CDEC-F8DE-42D0-80F8-E71C0DD8F897}.Release.ActiveCfg = Release|Win32
+ {6CE6CDEC-F8DE-42D0-80F8-E71C0DD8F897}.Release.Build.0 = Release|Win32
+ {262E34D2-48D2-4657-9DB2-F01FFDCEA295}.Debug.ActiveCfg = Debug|Win32
+ {262E34D2-48D2-4657-9DB2-F01FFDCEA295}.Debug.Build.0 = Debug|Win32
+ {262E34D2-48D2-4657-9DB2-F01FFDCEA295}.Release.ActiveCfg = Release|Win32
+ {262E34D2-48D2-4657-9DB2-F01FFDCEA295}.Release.Build.0 = Release|Win32
+ {CCE6AE91-39AC-49B6-8763-742B65FCD92E}.Debug.ActiveCfg = Debug|Win32
+ {CCE6AE91-39AC-49B6-8763-742B65FCD92E}.Debug.Build.0 = Debug|Win32
+ {CCE6AE91-39AC-49B6-8763-742B65FCD92E}.Release.ActiveCfg = Release|Win32
+ {CCE6AE91-39AC-49B6-8763-742B65FCD92E}.Release.Build.0 = Release|Win32
+ {26CE0C08-7621-403A-88A7-206E64F32C66}.Debug.ActiveCfg = Debug|Win32
+ {26CE0C08-7621-403A-88A7-206E64F32C66}.Debug.Build.0 = Debug|Win32
+ {26CE0C08-7621-403A-88A7-206E64F32C66}.Release.ActiveCfg = Release|Win32
+ {26CE0C08-7621-403A-88A7-206E64F32C66}.Release.Build.0 = Release|Win32
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ EndGlobalSection
+ GlobalSection(ExtensibilityAddIns) = postSolution
+ EndGlobalSection
+EndGlobal
diff --git a/xsd/dist/examples/cxx/tree/custom/custom-8.0.sln b/xsd/dist/examples/cxx/tree/custom/custom-8.0.sln new file mode 100644 index 0000000..7faee8d --- /dev/null +++ b/xsd/dist/examples/cxx/tree/custom/custom-8.0.sln @@ -0,0 +1,75 @@ +Microsoft Visual Studio Solution File, Format Version 9.00
+# Visual Studio 2005
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "contacts", "contacts\contacts-8.0.vcproj", "{9FB807C1-53EE-4E71-812F-89E8BE6FCB43}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "taxonomy", "taxonomy\taxonomy-8.0.vcproj", "{B3108E70-7B4E-4DDA-8872-0DC4AFDCB2D9}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wildcard", "wildcard\wildcard-8.0.vcproj", "{6CE6CDEC-F8DE-42D0-80F8-E71C0DD8F897}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "comments", "comments\comments-8.0.vcproj", "{262E34D2-48D2-4657-9DB2-F01FFDCEA295}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "double", "double\double-8.0.vcproj", "{CCE6AE91-39AC-49B6-8763-742B65FCD92E}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mixed", "mixed\mixed-8.0.vcproj", "{26CE0C08-7621-403A-88A7-206E64F32C66}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Debug|x64 = Debug|x64
+ Release|Win32 = Release|Win32
+ Release|x64 = Release|x64
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {9FB807C1-53EE-4E71-812F-89E8BE6FCB43}.Debug|Win32.ActiveCfg = Debug|Win32
+ {9FB807C1-53EE-4E71-812F-89E8BE6FCB43}.Debug|Win32.Build.0 = Debug|Win32
+ {9FB807C1-53EE-4E71-812F-89E8BE6FCB43}.Debug|x64.ActiveCfg = Debug|x64
+ {9FB807C1-53EE-4E71-812F-89E8BE6FCB43}.Debug|x64.Build.0 = Debug|x64
+ {9FB807C1-53EE-4E71-812F-89E8BE6FCB43}.Release|Win32.ActiveCfg = Release|Win32
+ {9FB807C1-53EE-4E71-812F-89E8BE6FCB43}.Release|Win32.Build.0 = Release|Win32
+ {9FB807C1-53EE-4E71-812F-89E8BE6FCB43}.Release|x64.ActiveCfg = Release|x64
+ {9FB807C1-53EE-4E71-812F-89E8BE6FCB43}.Release|x64.Build.0 = Release|x64
+ {B3108E70-7B4E-4DDA-8872-0DC4AFDCB2D9}.Debug|Win32.ActiveCfg = Debug|Win32
+ {B3108E70-7B4E-4DDA-8872-0DC4AFDCB2D9}.Debug|Win32.Build.0 = Debug|Win32
+ {B3108E70-7B4E-4DDA-8872-0DC4AFDCB2D9}.Debug|x64.ActiveCfg = Debug|x64
+ {B3108E70-7B4E-4DDA-8872-0DC4AFDCB2D9}.Debug|x64.Build.0 = Debug|x64
+ {B3108E70-7B4E-4DDA-8872-0DC4AFDCB2D9}.Release|Win32.ActiveCfg = Release|Win32
+ {B3108E70-7B4E-4DDA-8872-0DC4AFDCB2D9}.Release|Win32.Build.0 = Release|Win32
+ {B3108E70-7B4E-4DDA-8872-0DC4AFDCB2D9}.Release|x64.ActiveCfg = Release|x64
+ {B3108E70-7B4E-4DDA-8872-0DC4AFDCB2D9}.Release|x64.Build.0 = Release|x64
+ {6CE6CDEC-F8DE-42D0-80F8-E71C0DD8F897}.Debug|Win32.ActiveCfg = Debug|Win32
+ {6CE6CDEC-F8DE-42D0-80F8-E71C0DD8F897}.Debug|Win32.Build.0 = Debug|Win32
+ {6CE6CDEC-F8DE-42D0-80F8-E71C0DD8F897}.Debug|x64.ActiveCfg = Debug|x64
+ {6CE6CDEC-F8DE-42D0-80F8-E71C0DD8F897}.Debug|x64.Build.0 = Debug|x64
+ {6CE6CDEC-F8DE-42D0-80F8-E71C0DD8F897}.Release|Win32.ActiveCfg = Release|Win32
+ {6CE6CDEC-F8DE-42D0-80F8-E71C0DD8F897}.Release|Win32.Build.0 = Release|Win32
+ {6CE6CDEC-F8DE-42D0-80F8-E71C0DD8F897}.Release|x64.ActiveCfg = Release|x64
+ {6CE6CDEC-F8DE-42D0-80F8-E71C0DD8F897}.Release|x64.Build.0 = Release|x64
+ {262E34D2-48D2-4657-9DB2-F01FFDCEA295}.Debug|Win32.ActiveCfg = Debug|Win32
+ {262E34D2-48D2-4657-9DB2-F01FFDCEA295}.Debug|Win32.Build.0 = Debug|Win32
+ {262E34D2-48D2-4657-9DB2-F01FFDCEA295}.Debug|x64.ActiveCfg = Debug|x64
+ {262E34D2-48D2-4657-9DB2-F01FFDCEA295}.Debug|x64.Build.0 = Debug|x64
+ {262E34D2-48D2-4657-9DB2-F01FFDCEA295}.Release|Win32.ActiveCfg = Release|Win32
+ {262E34D2-48D2-4657-9DB2-F01FFDCEA295}.Release|Win32.Build.0 = Release|Win32
+ {262E34D2-48D2-4657-9DB2-F01FFDCEA295}.Release|x64.ActiveCfg = Release|x64
+ {262E34D2-48D2-4657-9DB2-F01FFDCEA295}.Release|x64.Build.0 = Release|x64
+ {CCE6AE91-39AC-49B6-8763-742B65FCD92E}.Debug|Win32.ActiveCfg = Debug|Win32
+ {CCE6AE91-39AC-49B6-8763-742B65FCD92E}.Debug|Win32.Build.0 = Debug|Win32
+ {CCE6AE91-39AC-49B6-8763-742B65FCD92E}.Debug|x64.ActiveCfg = Debug|x64
+ {CCE6AE91-39AC-49B6-8763-742B65FCD92E}.Debug|x64.Build.0 = Debug|x64
+ {CCE6AE91-39AC-49B6-8763-742B65FCD92E}.Release|Win32.ActiveCfg = Release|Win32
+ {CCE6AE91-39AC-49B6-8763-742B65FCD92E}.Release|Win32.Build.0 = Release|Win32
+ {CCE6AE91-39AC-49B6-8763-742B65FCD92E}.Release|x64.ActiveCfg = Release|x64
+ {CCE6AE91-39AC-49B6-8763-742B65FCD92E}.Release|x64.Build.0 = Release|x64
+ {26CE0C08-7621-403A-88A7-206E64F32C66}.Debug|Win32.ActiveCfg = Debug|Win32
+ {26CE0C08-7621-403A-88A7-206E64F32C66}.Debug|Win32.Build.0 = Debug|Win32
+ {26CE0C08-7621-403A-88A7-206E64F32C66}.Debug|x64.ActiveCfg = Debug|x64
+ {26CE0C08-7621-403A-88A7-206E64F32C66}.Debug|x64.Build.0 = Debug|x64
+ {26CE0C08-7621-403A-88A7-206E64F32C66}.Release|Win32.ActiveCfg = Release|Win32
+ {26CE0C08-7621-403A-88A7-206E64F32C66}.Release|Win32.Build.0 = Release|Win32
+ {26CE0C08-7621-403A-88A7-206E64F32C66}.Release|x64.ActiveCfg = Release|x64
+ {26CE0C08-7621-403A-88A7-206E64F32C66}.Release|x64.Build.0 = Release|x64
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/xsd/dist/examples/cxx/tree/custom/custom-9.0.sln b/xsd/dist/examples/cxx/tree/custom/custom-9.0.sln new file mode 100644 index 0000000..2def79a --- /dev/null +++ b/xsd/dist/examples/cxx/tree/custom/custom-9.0.sln @@ -0,0 +1,75 @@ +Microsoft Visual Studio Solution File, Format Version 10.00
+# Visual Studio 2008
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "contacts", "contacts\contacts-9.0.vcproj", "{9FB807C1-53EE-4E71-812F-89E8BE6FCB43}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "taxonomy", "taxonomy\taxonomy-9.0.vcproj", "{B3108E70-7B4E-4DDA-8872-0DC4AFDCB2D9}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wildcard", "wildcard\wildcard-9.0.vcproj", "{6CE6CDEC-F8DE-42D0-80F8-E71C0DD8F897}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "comments", "comments\comments-9.0.vcproj", "{262E34D2-48D2-4657-9DB2-F01FFDCEA295}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "double", "double\double-9.0.vcproj", "{CCE6AE91-39AC-49B6-8763-742B65FCD92E}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mixed", "mixed\mixed-9.0.vcproj", "{26CE0C08-7621-403A-88A7-206E64F32C66}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Debug|x64 = Debug|x64
+ Release|Win32 = Release|Win32
+ Release|x64 = Release|x64
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {9FB807C1-53EE-4E71-812F-89E8BE6FCB43}.Debug|Win32.ActiveCfg = Debug|Win32
+ {9FB807C1-53EE-4E71-812F-89E8BE6FCB43}.Debug|Win32.Build.0 = Debug|Win32
+ {9FB807C1-53EE-4E71-812F-89E8BE6FCB43}.Debug|x64.ActiveCfg = Debug|x64
+ {9FB807C1-53EE-4E71-812F-89E8BE6FCB43}.Debug|x64.Build.0 = Debug|x64
+ {9FB807C1-53EE-4E71-812F-89E8BE6FCB43}.Release|Win32.ActiveCfg = Release|Win32
+ {9FB807C1-53EE-4E71-812F-89E8BE6FCB43}.Release|Win32.Build.0 = Release|Win32
+ {9FB807C1-53EE-4E71-812F-89E8BE6FCB43}.Release|x64.ActiveCfg = Release|x64
+ {9FB807C1-53EE-4E71-812F-89E8BE6FCB43}.Release|x64.Build.0 = Release|x64
+ {B3108E70-7B4E-4DDA-8872-0DC4AFDCB2D9}.Debug|Win32.ActiveCfg = Debug|Win32
+ {B3108E70-7B4E-4DDA-8872-0DC4AFDCB2D9}.Debug|Win32.Build.0 = Debug|Win32
+ {B3108E70-7B4E-4DDA-8872-0DC4AFDCB2D9}.Debug|x64.ActiveCfg = Debug|x64
+ {B3108E70-7B4E-4DDA-8872-0DC4AFDCB2D9}.Debug|x64.Build.0 = Debug|x64
+ {B3108E70-7B4E-4DDA-8872-0DC4AFDCB2D9}.Release|Win32.ActiveCfg = Release|Win32
+ {B3108E70-7B4E-4DDA-8872-0DC4AFDCB2D9}.Release|Win32.Build.0 = Release|Win32
+ {B3108E70-7B4E-4DDA-8872-0DC4AFDCB2D9}.Release|x64.ActiveCfg = Release|x64
+ {B3108E70-7B4E-4DDA-8872-0DC4AFDCB2D9}.Release|x64.Build.0 = Release|x64
+ {6CE6CDEC-F8DE-42D0-80F8-E71C0DD8F897}.Debug|Win32.ActiveCfg = Debug|Win32
+ {6CE6CDEC-F8DE-42D0-80F8-E71C0DD8F897}.Debug|Win32.Build.0 = Debug|Win32
+ {6CE6CDEC-F8DE-42D0-80F8-E71C0DD8F897}.Debug|x64.ActiveCfg = Debug|x64
+ {6CE6CDEC-F8DE-42D0-80F8-E71C0DD8F897}.Debug|x64.Build.0 = Debug|x64
+ {6CE6CDEC-F8DE-42D0-80F8-E71C0DD8F897}.Release|Win32.ActiveCfg = Release|Win32
+ {6CE6CDEC-F8DE-42D0-80F8-E71C0DD8F897}.Release|Win32.Build.0 = Release|Win32
+ {6CE6CDEC-F8DE-42D0-80F8-E71C0DD8F897}.Release|x64.ActiveCfg = Release|x64
+ {6CE6CDEC-F8DE-42D0-80F8-E71C0DD8F897}.Release|x64.Build.0 = Release|x64
+ {262E34D2-48D2-4657-9DB2-F01FFDCEA295}.Debug|Win32.ActiveCfg = Debug|Win32
+ {262E34D2-48D2-4657-9DB2-F01FFDCEA295}.Debug|Win32.Build.0 = Debug|Win32
+ {262E34D2-48D2-4657-9DB2-F01FFDCEA295}.Debug|x64.ActiveCfg = Debug|x64
+ {262E34D2-48D2-4657-9DB2-F01FFDCEA295}.Debug|x64.Build.0 = Debug|x64
+ {262E34D2-48D2-4657-9DB2-F01FFDCEA295}.Release|Win32.ActiveCfg = Release|Win32
+ {262E34D2-48D2-4657-9DB2-F01FFDCEA295}.Release|Win32.Build.0 = Release|Win32
+ {262E34D2-48D2-4657-9DB2-F01FFDCEA295}.Release|x64.ActiveCfg = Release|x64
+ {262E34D2-48D2-4657-9DB2-F01FFDCEA295}.Release|x64.Build.0 = Release|x64
+ {CCE6AE91-39AC-49B6-8763-742B65FCD92E}.Debug|Win32.ActiveCfg = Debug|Win32
+ {CCE6AE91-39AC-49B6-8763-742B65FCD92E}.Debug|Win32.Build.0 = Debug|Win32
+ {CCE6AE91-39AC-49B6-8763-742B65FCD92E}.Debug|x64.ActiveCfg = Debug|x64
+ {CCE6AE91-39AC-49B6-8763-742B65FCD92E}.Debug|x64.Build.0 = Debug|x64
+ {CCE6AE91-39AC-49B6-8763-742B65FCD92E}.Release|Win32.ActiveCfg = Release|Win32
+ {CCE6AE91-39AC-49B6-8763-742B65FCD92E}.Release|Win32.Build.0 = Release|Win32
+ {CCE6AE91-39AC-49B6-8763-742B65FCD92E}.Release|x64.ActiveCfg = Release|x64
+ {CCE6AE91-39AC-49B6-8763-742B65FCD92E}.Release|x64.Build.0 = Release|x64
+ {26CE0C08-7621-403A-88A7-206E64F32C66}.Debug|Win32.ActiveCfg = Debug|Win32
+ {26CE0C08-7621-403A-88A7-206E64F32C66}.Debug|Win32.Build.0 = Debug|Win32
+ {26CE0C08-7621-403A-88A7-206E64F32C66}.Debug|x64.ActiveCfg = Debug|x64
+ {26CE0C08-7621-403A-88A7-206E64F32C66}.Debug|x64.Build.0 = Debug|x64
+ {26CE0C08-7621-403A-88A7-206E64F32C66}.Release|Win32.ActiveCfg = Release|Win32
+ {26CE0C08-7621-403A-88A7-206E64F32C66}.Release|Win32.Build.0 = Release|Win32
+ {26CE0C08-7621-403A-88A7-206E64F32C66}.Release|x64.ActiveCfg = Release|x64
+ {26CE0C08-7621-403A-88A7-206E64F32C66}.Release|x64.Build.0 = Release|x64
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/xsd/dist/examples/cxx/tree/custom/custom-xerces2-7.1.sln b/xsd/dist/examples/cxx/tree/custom/custom-xerces2-7.1.sln new file mode 100644 index 0000000..f5ace2f --- /dev/null +++ b/xsd/dist/examples/cxx/tree/custom/custom-xerces2-7.1.sln @@ -0,0 +1,61 @@ +Microsoft Visual Studio Solution File, Format Version 8.00
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "contacts", "contacts\contacts-xerces2-7.1.vcproj", "{9FB807C1-53EE-4E71-812F-89E8BE6FCB43}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "taxonomy", "taxonomy\taxonomy-xerces2-7.1.vcproj", "{B3108E70-7B4E-4DDA-8872-0DC4AFDCB2D9}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wildcard", "wildcard\wildcard-xerces2-7.1.vcproj", "{6CE6CDEC-F8DE-42D0-80F8-E71C0DD8F897}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "comments", "comments\comments-xerces2-7.1.vcproj", "{262E34D2-48D2-4657-9DB2-F01FFDCEA295}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "double", "double\double-xerces2-7.1.vcproj", "{CCE6AE91-39AC-49B6-8763-742B65FCD92E}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mixed", "mixed\mixed-xerces2-7.1.vcproj", "{26CE0C08-7621-403A-88A7-206E64F32C66}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Global
+ GlobalSection(SolutionConfiguration) = preSolution
+ Debug = Debug
+ Release = Release
+ EndGlobalSection
+ GlobalSection(ProjectConfiguration) = postSolution
+ {9FB807C1-53EE-4E71-812F-89E8BE6FCB43}.Debug.ActiveCfg = Debug|Win32
+ {9FB807C1-53EE-4E71-812F-89E8BE6FCB43}.Debug.Build.0 = Debug|Win32
+ {9FB807C1-53EE-4E71-812F-89E8BE6FCB43}.Release.ActiveCfg = Release|Win32
+ {9FB807C1-53EE-4E71-812F-89E8BE6FCB43}.Release.Build.0 = Release|Win32
+ {B3108E70-7B4E-4DDA-8872-0DC4AFDCB2D9}.Debug.ActiveCfg = Debug|Win32
+ {B3108E70-7B4E-4DDA-8872-0DC4AFDCB2D9}.Debug.Build.0 = Debug|Win32
+ {B3108E70-7B4E-4DDA-8872-0DC4AFDCB2D9}.Release.ActiveCfg = Release|Win32
+ {B3108E70-7B4E-4DDA-8872-0DC4AFDCB2D9}.Release.Build.0 = Release|Win32
+ {6CE6CDEC-F8DE-42D0-80F8-E71C0DD8F897}.Debug.ActiveCfg = Debug|Win32
+ {6CE6CDEC-F8DE-42D0-80F8-E71C0DD8F897}.Debug.Build.0 = Debug|Win32
+ {6CE6CDEC-F8DE-42D0-80F8-E71C0DD8F897}.Release.ActiveCfg = Release|Win32
+ {6CE6CDEC-F8DE-42D0-80F8-E71C0DD8F897}.Release.Build.0 = Release|Win32
+ {262E34D2-48D2-4657-9DB2-F01FFDCEA295}.Debug.ActiveCfg = Debug|Win32
+ {262E34D2-48D2-4657-9DB2-F01FFDCEA295}.Debug.Build.0 = Debug|Win32
+ {262E34D2-48D2-4657-9DB2-F01FFDCEA295}.Release.ActiveCfg = Release|Win32
+ {262E34D2-48D2-4657-9DB2-F01FFDCEA295}.Release.Build.0 = Release|Win32
+ {CCE6AE91-39AC-49B6-8763-742B65FCD92E}.Debug.ActiveCfg = Debug|Win32
+ {CCE6AE91-39AC-49B6-8763-742B65FCD92E}.Debug.Build.0 = Debug|Win32
+ {CCE6AE91-39AC-49B6-8763-742B65FCD92E}.Release.ActiveCfg = Release|Win32
+ {CCE6AE91-39AC-49B6-8763-742B65FCD92E}.Release.Build.0 = Release|Win32
+ {26CE0C08-7621-403A-88A7-206E64F32C66}.Debug.ActiveCfg = Debug|Win32
+ {26CE0C08-7621-403A-88A7-206E64F32C66}.Debug.Build.0 = Debug|Win32
+ {26CE0C08-7621-403A-88A7-206E64F32C66}.Release.ActiveCfg = Release|Win32
+ {26CE0C08-7621-403A-88A7-206E64F32C66}.Release.Build.0 = Release|Win32
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ EndGlobalSection
+ GlobalSection(ExtensibilityAddIns) = postSolution
+ EndGlobalSection
+EndGlobal
diff --git a/xsd/dist/examples/cxx/tree/custom/custom-xerces2-8.0.sln b/xsd/dist/examples/cxx/tree/custom/custom-xerces2-8.0.sln new file mode 100644 index 0000000..b3e013c --- /dev/null +++ b/xsd/dist/examples/cxx/tree/custom/custom-xerces2-8.0.sln @@ -0,0 +1,75 @@ +Microsoft Visual Studio Solution File, Format Version 9.00
+# Visual Studio 2005
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "contacts", "contacts\contacts-xerces2-8.0.vcproj", "{9FB807C1-53EE-4E71-812F-89E8BE6FCB43}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "taxonomy", "taxonomy\taxonomy-xerces2-8.0.vcproj", "{B3108E70-7B4E-4DDA-8872-0DC4AFDCB2D9}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wildcard", "wildcard\wildcard-xerces2-8.0.vcproj", "{6CE6CDEC-F8DE-42D0-80F8-E71C0DD8F897}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "comments", "comments\comments-xerces2-8.0.vcproj", "{262E34D2-48D2-4657-9DB2-F01FFDCEA295}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "double", "double\double-xerces2-8.0.vcproj", "{CCE6AE91-39AC-49B6-8763-742B65FCD92E}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mixed", "mixed\mixed-xerces2-8.0.vcproj", "{26CE0C08-7621-403A-88A7-206E64F32C66}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Debug|x64 = Debug|x64
+ Release|Win32 = Release|Win32
+ Release|x64 = Release|x64
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {9FB807C1-53EE-4E71-812F-89E8BE6FCB43}.Debug|Win32.ActiveCfg = Debug|Win32
+ {9FB807C1-53EE-4E71-812F-89E8BE6FCB43}.Debug|Win32.Build.0 = Debug|Win32
+ {9FB807C1-53EE-4E71-812F-89E8BE6FCB43}.Debug|x64.ActiveCfg = Debug|x64
+ {9FB807C1-53EE-4E71-812F-89E8BE6FCB43}.Debug|x64.Build.0 = Debug|x64
+ {9FB807C1-53EE-4E71-812F-89E8BE6FCB43}.Release|Win32.ActiveCfg = Release|Win32
+ {9FB807C1-53EE-4E71-812F-89E8BE6FCB43}.Release|Win32.Build.0 = Release|Win32
+ {9FB807C1-53EE-4E71-812F-89E8BE6FCB43}.Release|x64.ActiveCfg = Release|x64
+ {9FB807C1-53EE-4E71-812F-89E8BE6FCB43}.Release|x64.Build.0 = Release|x64
+ {B3108E70-7B4E-4DDA-8872-0DC4AFDCB2D9}.Debug|Win32.ActiveCfg = Debug|Win32
+ {B3108E70-7B4E-4DDA-8872-0DC4AFDCB2D9}.Debug|Win32.Build.0 = Debug|Win32
+ {B3108E70-7B4E-4DDA-8872-0DC4AFDCB2D9}.Debug|x64.ActiveCfg = Debug|x64
+ {B3108E70-7B4E-4DDA-8872-0DC4AFDCB2D9}.Debug|x64.Build.0 = Debug|x64
+ {B3108E70-7B4E-4DDA-8872-0DC4AFDCB2D9}.Release|Win32.ActiveCfg = Release|Win32
+ {B3108E70-7B4E-4DDA-8872-0DC4AFDCB2D9}.Release|Win32.Build.0 = Release|Win32
+ {B3108E70-7B4E-4DDA-8872-0DC4AFDCB2D9}.Release|x64.ActiveCfg = Release|x64
+ {B3108E70-7B4E-4DDA-8872-0DC4AFDCB2D9}.Release|x64.Build.0 = Release|x64
+ {6CE6CDEC-F8DE-42D0-80F8-E71C0DD8F897}.Debug|Win32.ActiveCfg = Debug|Win32
+ {6CE6CDEC-F8DE-42D0-80F8-E71C0DD8F897}.Debug|Win32.Build.0 = Debug|Win32
+ {6CE6CDEC-F8DE-42D0-80F8-E71C0DD8F897}.Debug|x64.ActiveCfg = Debug|x64
+ {6CE6CDEC-F8DE-42D0-80F8-E71C0DD8F897}.Debug|x64.Build.0 = Debug|x64
+ {6CE6CDEC-F8DE-42D0-80F8-E71C0DD8F897}.Release|Win32.ActiveCfg = Release|Win32
+ {6CE6CDEC-F8DE-42D0-80F8-E71C0DD8F897}.Release|Win32.Build.0 = Release|Win32
+ {6CE6CDEC-F8DE-42D0-80F8-E71C0DD8F897}.Release|x64.ActiveCfg = Release|x64
+ {6CE6CDEC-F8DE-42D0-80F8-E71C0DD8F897}.Release|x64.Build.0 = Release|x64
+ {262E34D2-48D2-4657-9DB2-F01FFDCEA295}.Debug|Win32.ActiveCfg = Debug|Win32
+ {262E34D2-48D2-4657-9DB2-F01FFDCEA295}.Debug|Win32.Build.0 = Debug|Win32
+ {262E34D2-48D2-4657-9DB2-F01FFDCEA295}.Debug|x64.ActiveCfg = Debug|x64
+ {262E34D2-48D2-4657-9DB2-F01FFDCEA295}.Debug|x64.Build.0 = Debug|x64
+ {262E34D2-48D2-4657-9DB2-F01FFDCEA295}.Release|Win32.ActiveCfg = Release|Win32
+ {262E34D2-48D2-4657-9DB2-F01FFDCEA295}.Release|Win32.Build.0 = Release|Win32
+ {262E34D2-48D2-4657-9DB2-F01FFDCEA295}.Release|x64.ActiveCfg = Release|x64
+ {262E34D2-48D2-4657-9DB2-F01FFDCEA295}.Release|x64.Build.0 = Release|x64
+ {CCE6AE91-39AC-49B6-8763-742B65FCD92E}.Debug|Win32.ActiveCfg = Debug|Win32
+ {CCE6AE91-39AC-49B6-8763-742B65FCD92E}.Debug|Win32.Build.0 = Debug|Win32
+ {CCE6AE91-39AC-49B6-8763-742B65FCD92E}.Debug|x64.ActiveCfg = Debug|x64
+ {CCE6AE91-39AC-49B6-8763-742B65FCD92E}.Debug|x64.Build.0 = Debug|x64
+ {CCE6AE91-39AC-49B6-8763-742B65FCD92E}.Release|Win32.ActiveCfg = Release|Win32
+ {CCE6AE91-39AC-49B6-8763-742B65FCD92E}.Release|Win32.Build.0 = Release|Win32
+ {CCE6AE91-39AC-49B6-8763-742B65FCD92E}.Release|x64.ActiveCfg = Release|x64
+ {CCE6AE91-39AC-49B6-8763-742B65FCD92E}.Release|x64.Build.0 = Release|x64
+ {26CE0C08-7621-403A-88A7-206E64F32C66}.Debug|Win32.ActiveCfg = Debug|Win32
+ {26CE0C08-7621-403A-88A7-206E64F32C66}.Debug|Win32.Build.0 = Debug|Win32
+ {26CE0C08-7621-403A-88A7-206E64F32C66}.Debug|x64.ActiveCfg = Debug|x64
+ {26CE0C08-7621-403A-88A7-206E64F32C66}.Debug|x64.Build.0 = Debug|x64
+ {26CE0C08-7621-403A-88A7-206E64F32C66}.Release|Win32.ActiveCfg = Release|Win32
+ {26CE0C08-7621-403A-88A7-206E64F32C66}.Release|Win32.Build.0 = Release|Win32
+ {26CE0C08-7621-403A-88A7-206E64F32C66}.Release|x64.ActiveCfg = Release|x64
+ {26CE0C08-7621-403A-88A7-206E64F32C66}.Release|x64.Build.0 = Release|x64
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/xsd/dist/examples/cxx/tree/custom/custom-xerces2-9.0.sln b/xsd/dist/examples/cxx/tree/custom/custom-xerces2-9.0.sln new file mode 100644 index 0000000..ec151cc --- /dev/null +++ b/xsd/dist/examples/cxx/tree/custom/custom-xerces2-9.0.sln @@ -0,0 +1,75 @@ +Microsoft Visual Studio Solution File, Format Version 10.00
+# Visual Studio 2008
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "contacts", "contacts\contacts-xerces2-9.0.vcproj", "{9FB807C1-53EE-4E71-812F-89E8BE6FCB43}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "taxonomy", "taxonomy\taxonomy-xerces2-9.0.vcproj", "{B3108E70-7B4E-4DDA-8872-0DC4AFDCB2D9}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wildcard", "wildcard\wildcard-xerces2-9.0.vcproj", "{6CE6CDEC-F8DE-42D0-80F8-E71C0DD8F897}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "comments", "comments\comments-xerces2-9.0.vcproj", "{262E34D2-48D2-4657-9DB2-F01FFDCEA295}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "double", "double\double-xerces2-9.0.vcproj", "{CCE6AE91-39AC-49B6-8763-742B65FCD92E}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mixed", "mixed\mixed-xerces2-9.0.vcproj", "{26CE0C08-7621-403A-88A7-206E64F32C66}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Debug|x64 = Debug|x64
+ Release|Win32 = Release|Win32
+ Release|x64 = Release|x64
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {9FB807C1-53EE-4E71-812F-89E8BE6FCB43}.Debug|Win32.ActiveCfg = Debug|Win32
+ {9FB807C1-53EE-4E71-812F-89E8BE6FCB43}.Debug|Win32.Build.0 = Debug|Win32
+ {9FB807C1-53EE-4E71-812F-89E8BE6FCB43}.Debug|x64.ActiveCfg = Debug|x64
+ {9FB807C1-53EE-4E71-812F-89E8BE6FCB43}.Debug|x64.Build.0 = Debug|x64
+ {9FB807C1-53EE-4E71-812F-89E8BE6FCB43}.Release|Win32.ActiveCfg = Release|Win32
+ {9FB807C1-53EE-4E71-812F-89E8BE6FCB43}.Release|Win32.Build.0 = Release|Win32
+ {9FB807C1-53EE-4E71-812F-89E8BE6FCB43}.Release|x64.ActiveCfg = Release|x64
+ {9FB807C1-53EE-4E71-812F-89E8BE6FCB43}.Release|x64.Build.0 = Release|x64
+ {B3108E70-7B4E-4DDA-8872-0DC4AFDCB2D9}.Debug|Win32.ActiveCfg = Debug|Win32
+ {B3108E70-7B4E-4DDA-8872-0DC4AFDCB2D9}.Debug|Win32.Build.0 = Debug|Win32
+ {B3108E70-7B4E-4DDA-8872-0DC4AFDCB2D9}.Debug|x64.ActiveCfg = Debug|x64
+ {B3108E70-7B4E-4DDA-8872-0DC4AFDCB2D9}.Debug|x64.Build.0 = Debug|x64
+ {B3108E70-7B4E-4DDA-8872-0DC4AFDCB2D9}.Release|Win32.ActiveCfg = Release|Win32
+ {B3108E70-7B4E-4DDA-8872-0DC4AFDCB2D9}.Release|Win32.Build.0 = Release|Win32
+ {B3108E70-7B4E-4DDA-8872-0DC4AFDCB2D9}.Release|x64.ActiveCfg = Release|x64
+ {B3108E70-7B4E-4DDA-8872-0DC4AFDCB2D9}.Release|x64.Build.0 = Release|x64
+ {6CE6CDEC-F8DE-42D0-80F8-E71C0DD8F897}.Debug|Win32.ActiveCfg = Debug|Win32
+ {6CE6CDEC-F8DE-42D0-80F8-E71C0DD8F897}.Debug|Win32.Build.0 = Debug|Win32
+ {6CE6CDEC-F8DE-42D0-80F8-E71C0DD8F897}.Debug|x64.ActiveCfg = Debug|x64
+ {6CE6CDEC-F8DE-42D0-80F8-E71C0DD8F897}.Debug|x64.Build.0 = Debug|x64
+ {6CE6CDEC-F8DE-42D0-80F8-E71C0DD8F897}.Release|Win32.ActiveCfg = Release|Win32
+ {6CE6CDEC-F8DE-42D0-80F8-E71C0DD8F897}.Release|Win32.Build.0 = Release|Win32
+ {6CE6CDEC-F8DE-42D0-80F8-E71C0DD8F897}.Release|x64.ActiveCfg = Release|x64
+ {6CE6CDEC-F8DE-42D0-80F8-E71C0DD8F897}.Release|x64.Build.0 = Release|x64
+ {262E34D2-48D2-4657-9DB2-F01FFDCEA295}.Debug|Win32.ActiveCfg = Debug|Win32
+ {262E34D2-48D2-4657-9DB2-F01FFDCEA295}.Debug|Win32.Build.0 = Debug|Win32
+ {262E34D2-48D2-4657-9DB2-F01FFDCEA295}.Debug|x64.ActiveCfg = Debug|x64
+ {262E34D2-48D2-4657-9DB2-F01FFDCEA295}.Debug|x64.Build.0 = Debug|x64
+ {262E34D2-48D2-4657-9DB2-F01FFDCEA295}.Release|Win32.ActiveCfg = Release|Win32
+ {262E34D2-48D2-4657-9DB2-F01FFDCEA295}.Release|Win32.Build.0 = Release|Win32
+ {262E34D2-48D2-4657-9DB2-F01FFDCEA295}.Release|x64.ActiveCfg = Release|x64
+ {262E34D2-48D2-4657-9DB2-F01FFDCEA295}.Release|x64.Build.0 = Release|x64
+ {CCE6AE91-39AC-49B6-8763-742B65FCD92E}.Debug|Win32.ActiveCfg = Debug|Win32
+ {CCE6AE91-39AC-49B6-8763-742B65FCD92E}.Debug|Win32.Build.0 = Debug|Win32
+ {CCE6AE91-39AC-49B6-8763-742B65FCD92E}.Debug|x64.ActiveCfg = Debug|x64
+ {CCE6AE91-39AC-49B6-8763-742B65FCD92E}.Debug|x64.Build.0 = Debug|x64
+ {CCE6AE91-39AC-49B6-8763-742B65FCD92E}.Release|Win32.ActiveCfg = Release|Win32
+ {CCE6AE91-39AC-49B6-8763-742B65FCD92E}.Release|Win32.Build.0 = Release|Win32
+ {CCE6AE91-39AC-49B6-8763-742B65FCD92E}.Release|x64.ActiveCfg = Release|x64
+ {CCE6AE91-39AC-49B6-8763-742B65FCD92E}.Release|x64.Build.0 = Release|x64
+ {26CE0C08-7621-403A-88A7-206E64F32C66}.Debug|Win32.ActiveCfg = Debug|Win32
+ {26CE0C08-7621-403A-88A7-206E64F32C66}.Debug|Win32.Build.0 = Debug|Win32
+ {26CE0C08-7621-403A-88A7-206E64F32C66}.Debug|x64.ActiveCfg = Debug|x64
+ {26CE0C08-7621-403A-88A7-206E64F32C66}.Debug|x64.Build.0 = Debug|x64
+ {26CE0C08-7621-403A-88A7-206E64F32C66}.Release|Win32.ActiveCfg = Release|Win32
+ {26CE0C08-7621-403A-88A7-206E64F32C66}.Release|Win32.Build.0 = Release|Win32
+ {26CE0C08-7621-403A-88A7-206E64F32C66}.Release|x64.ActiveCfg = Release|x64
+ {26CE0C08-7621-403A-88A7-206E64F32C66}.Release|x64.Build.0 = Release|x64
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/xsd/dist/examples/cxx/tree/custom/double/double-10.0.vcxproj b/xsd/dist/examples/cxx/tree/custom/double/double-10.0.vcxproj new file mode 100644 index 0000000..6f25ea6 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/custom/double/double-10.0.vcxproj @@ -0,0 +1,233 @@ +<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectName>double</ProjectName>
+ <ProjectGuid>{CCE6AE91-39AC-49B6-8763-742B65FCD92E}</ProjectGuid>
+ <RootNamespace>double</RootNamespace>
+ <Keyword>Win32Proj</Keyword>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">driver</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">driver</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">driver</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">driver</TargetName>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Debug\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Debug\</IntDir>
+ <PreBuildEventUseInBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</PreBuildEventUseInBuild>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)\$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)\$(Configuration)\</IntDir>
+ <PreBuildEventUseInBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</PreBuildEventUseInBuild>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Release\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Release\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)\$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)\$(Configuration)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <PreBuildEvent>
+ <Message>xsd xml-schema.xsd</Message>
+ <Command>xsd cxx-tree --generate-xml-schema --generate-serialization --custom-type double=double --hxx-epilogue "#include \"double-custom.hxx\"" xml-schema.xsd</Command>
+ </PreBuildEvent>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ <RuntimeTypeInfo>true</RuntimeTypeInfo>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>xerces-c_3D.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)driver.pdb</ProgramDatabaseFile>
+ <SubSystem>Console</SubSystem>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <PreBuildEvent>
+ <Message>xsd xml-schema.xsd</Message>
+ <Command>xsd cxx-tree --generate-xml-schema --generate-serialization --custom-type double=double --hxx-epilogue "#include \"double-custom.hxx\"" xml-schema.xsd</Command>
+ </PreBuildEvent>
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ <RuntimeTypeInfo>true</RuntimeTypeInfo>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>xerces-c_3D.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)driver.pdb</ProgramDatabaseFile>
+ <SubSystem>Console</SubSystem>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <PreBuildEvent>
+ <Message>xsd xml-schema.xsd</Message>
+ <Command>xsd cxx-tree --generate-xml-schema --generate-serialization --custom-type double=double --hxx-epilogue "#include \"double-custom.hxx\"" xml-schema.xsd</Command>
+ </PreBuildEvent>
+ <ClCompile>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <RuntimeTypeInfo>true</RuntimeTypeInfo>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>xerces-c_3.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <PreBuildEvent>
+ <Message>xsd xml-schema.xsd</Message>
+ <Command>xsd cxx-tree --generate-xml-schema --generate-serialization --custom-type double=double --hxx-epilogue "#include \"double-custom.hxx\"" xml-schema.xsd</Command>
+ </PreBuildEvent>
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <RuntimeTypeInfo>true</RuntimeTypeInfo>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>xerces-c_3.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="driver.cxx" />
+ <ClCompile Include="order.cxx" />
+ <ClCompile Include="double-custom.cxx" />
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="order.hxx" />
+ <ClInclude Include="double-custom.hxx" />
+ <ClInclude Include="xml-schema.hxx" />
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="order.ixx" />
+ <None Include="Readme.txt" />
+ </ItemGroup>
+ <ItemGroup>
+ <CustomBuild Include="order.xsd">
+ <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">xsd order.xsd</Message>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">xsd cxx-tree --generate-inline --generate-serialization --extern-xml-schema xml-schema.xsd order.xsd</Command>
+ <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">xml-schema.hxx;%(AdditionalInputs)</AdditionalInputs>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">order.hxx;order.ixx;order.cxx;%(Outputs)</Outputs>
+ <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">xsd order.xsd</Message>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">xsd cxx-tree --generate-inline --generate-serialization --extern-xml-schema xml-schema.xsd order.xsd</Command>
+ <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">xml-schema.hxx;%(AdditionalInputs)</AdditionalInputs>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">order.hxx;order.ixx;order.cxx;%(Outputs)</Outputs>
+ <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">xsd order.xsd</Message>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">xsd cxx-tree --generate-inline --generate-serialization --extern-xml-schema xml-schema.xsd order.xsd</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">order.hxx;order.ixx;order.cxx;%(Outputs)</Outputs>
+ <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">xsd order.xsd</Message>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">xsd cxx-tree --generate-inline --generate-serialization --extern-xml-schema xml-schema.xsd order.xsd</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">order.hxx;order.ixx;order.cxx;%(Outputs)</Outputs>
+ </CustomBuild>
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project>
\ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/custom/double/double-10.0.vcxproj.filters b/xsd/dist/examples/cxx/tree/custom/double/double-10.0.vcxproj.filters new file mode 100644 index 0000000..b36f95b --- /dev/null +++ b/xsd/dist/examples/cxx/tree/custom/double/double-10.0.vcxproj.filters @@ -0,0 +1,54 @@ +<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="Source Files">
+ <UniqueIdentifier>{9AB5F296-2836-4A71-A39E-8D63EECB86D8}</UniqueIdentifier>
+ <Extensions>cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+ </Filter>
+ <Filter Include="Header Files">
+ <UniqueIdentifier>{CDC85F55-DEE6-4EB3-9B72-1CBDDA21CFBE}</UniqueIdentifier>
+ <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
+ </Filter>
+ <Filter Include="Inline Files">
+ <UniqueIdentifier>{69c0bc69-f38e-42f7-8c11-cd6c1a121574}</UniqueIdentifier>
+ <Extensions>ixx</Extensions>
+ </Filter>
+ <Filter Include="Schema Files">
+ <UniqueIdentifier>{bad36e63-36c2-4233-87a2-68af084d612a}</UniqueIdentifier>
+ <Extensions>xsd</Extensions>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="driver.cxx">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="order.cxx">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="double-custom.cxx">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="order.hxx">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="double-custom.hxx">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="xml-schema.hxx">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="order.ixx">
+ <Filter>Inline Files</Filter>
+ </None>
+ <None Include="Readme.txt" />
+ </ItemGroup>
+ <ItemGroup>
+ <CustomBuild Include="order.xsd">
+ <Filter>Schema Files</Filter>
+ </CustomBuild>
+ </ItemGroup>
+</Project>
\ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/custom/double/double-7.1.vcproj b/xsd/dist/examples/cxx/tree/custom/double/double-7.1.vcproj new file mode 100644 index 0000000..ccaa903 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/custom/double/double-7.1.vcproj @@ -0,0 +1,186 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="double"
+ ProjectGUID="{CCE6AE91-39AC-49B6-8763-742B65FCD92E}"
+ RootNamespace="double"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="TRUE"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="5"
+ RuntimeTypeInfo="TRUE"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="4"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="TRUE"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"
+ Description="xsd xml-schema.xsd"
+ CommandLine="xsd cxx-tree --generate-xml-schema --generate-serialization --generate-intellisense --custom-type double=double --hxx-epilogue "#include \"double-custom.hxx\"" xml-schema.xsd"
+ ExcludedFromBuild="FALSE"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="4"
+ RuntimeTypeInfo="TRUE"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="3"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"
+ Description="xsd xml-schema.xsd"
+ CommandLine="xsd cxx-tree --generate-xml-schema --generate-serialization --generate-intellisense --custom-type double=double --hxx-epilogue "#include \"double-custom.hxx\"" xml-schema.xsd"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{9AB5F296-2836-4A71-A39E-8D63EECB86D8}">
+ <File
+ RelativePath=".\order.cxx">
+ </File>
+ <File
+ RelativePath=".\driver.cxx">
+ </File>
+ <File
+ RelativePath=".\double-custom.cxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{CDC85F55-DEE6-4EB3-9B72-1CBDDA21CFBE}">
+ <File
+ RelativePath=".\order.hxx">
+ </File>
+ <File
+ RelativePath=".\double-custom.hxx">
+ </File>
+ <File
+ RelativePath=".\xml-schema.hxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Inline Files"
+ Filter="ixx">
+ <File
+ RelativePath=".\order.ixx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd">
+ <File
+ RelativePath=".\order.xsd">
+ <FileConfiguration
+ Name="Debug|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd order.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-serialization --generate-intellisense --extern-xml-schema xml-schema.xsd order.xsd"
+ AdditionalDependencies="xml-schema.hxx"
+ Outputs="order.hxx;order.ixx;order.cxx"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd order.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-serialization --generate-intellisense --extern-xml-schema xml-schema.xsd order.xsd"
+ Outputs="order.hxx;order.ixx;order.cxx"/>
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/custom/double/double-8.0.vcproj b/xsd/dist/examples/cxx/tree/custom/double/double-8.0.vcproj new file mode 100644 index 0000000..ea63b9f --- /dev/null +++ b/xsd/dist/examples/cxx/tree/custom/double/double-8.0.vcproj @@ -0,0 +1,456 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="double"
+ ProjectGUID="{CCE6AE91-39AC-49B6-8763-742B65FCD92E}"
+ RootNamespace="double"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ Description="xsd xml-schema.xsd"
+ CommandLine="xsd cxx-tree --generate-xml-schema --generate-serialization --generate-intellisense --custom-type double=double --hxx-epilogue "#include \"double-custom.hxx\"" xml-schema.xsd"
+ ExcludedFromBuild="false"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ Description="xsd xml-schema.xsd"
+ CommandLine="xsd cxx-tree --generate-xml-schema --generate-serialization --generate-intellisense --custom-type double=double --hxx-epilogue "#include \"double-custom.hxx\"" xml-schema.xsd"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ Description="xsd xml-schema.xsd"
+ CommandLine="xsd cxx-tree --generate-xml-schema --generate-serialization --generate-intellisense --custom-type double=double --hxx-epilogue "#include \"double-custom.hxx\"" xml-schema.xsd"
+ ExcludedFromBuild="false"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ Description="xsd xml-schema.xsd"
+ CommandLine="xsd cxx-tree --generate-xml-schema --generate-serialization --generate-intellisense --custom-type double=double --hxx-epilogue "#include \"double-custom.hxx\"" xml-schema.xsd"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{9AB5F296-2836-4A71-A39E-8D63EECB86D8}"
+ >
+ <File
+ RelativePath=".\driver.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\order.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\double-custom.cxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{CDC85F55-DEE6-4EB3-9B72-1CBDDA21CFBE}"
+ >
+ <File
+ RelativePath=".\order.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\double-custom.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\xml-schema.hxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Inline Files"
+ Filter="ixx"
+ >
+ <File
+ RelativePath=".\order.ixx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd"
+ >
+ <File
+ RelativePath=".\order.xsd"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd order.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-serialization --generate-intellisense --extern-xml-schema xml-schema.xsd order.xsd"
+ AdditionalDependencies="xml-schema.hxx"
+ Outputs="order.hxx;order.ixx;order.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd order.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-serialization --generate-intellisense --extern-xml-schema xml-schema.xsd order.xsd"
+ Outputs="order.hxx;order.ixx;order.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd order.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-serialization --generate-intellisense --extern-xml-schema xml-schema.xsd order.xsd"
+ AdditionalDependencies="xml-schema.hxx"
+ Outputs="order.hxx;order.ixx;order.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd order.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-serialization --generate-intellisense --extern-xml-schema xml-schema.xsd order.xsd"
+ Outputs="order.hxx;order.ixx;order.cxx"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/custom/double/double-9.0.vcproj b/xsd/dist/examples/cxx/tree/custom/double/double-9.0.vcproj new file mode 100644 index 0000000..15b599b --- /dev/null +++ b/xsd/dist/examples/cxx/tree/custom/double/double-9.0.vcproj @@ -0,0 +1,453 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="double"
+ ProjectGUID="{CCE6AE91-39AC-49B6-8763-742B65FCD92E}"
+ RootNamespace="double"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ Description="xsd xml-schema.xsd"
+ CommandLine="xsd cxx-tree --generate-xml-schema --generate-serialization --custom-type double=double --hxx-epilogue "#include \"double-custom.hxx\"" xml-schema.xsd"
+ ExcludedFromBuild="false"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ Description="xsd xml-schema.xsd"
+ CommandLine="xsd cxx-tree --generate-xml-schema --generate-serialization --custom-type double=double --hxx-epilogue "#include \"double-custom.hxx\"" xml-schema.xsd"
+ ExcludedFromBuild="false"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ Description="xsd xml-schema.xsd"
+ CommandLine="xsd cxx-tree --generate-xml-schema --generate-serialization --custom-type double=double --hxx-epilogue "#include \"double-custom.hxx\"" xml-schema.xsd"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ Description="xsd xml-schema.xsd"
+ CommandLine="xsd cxx-tree --generate-xml-schema --generate-serialization --custom-type double=double --hxx-epilogue "#include \"double-custom.hxx\"" xml-schema.xsd"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{9AB5F296-2836-4A71-A39E-8D63EECB86D8}"
+ >
+ <File
+ RelativePath=".\driver.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\order.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\double-custom.cxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{CDC85F55-DEE6-4EB3-9B72-1CBDDA21CFBE}"
+ >
+ <File
+ RelativePath=".\order.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\double-custom.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\xml-schema.hxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Inline Files"
+ Filter="ixx"
+ >
+ <File
+ RelativePath=".\order.ixx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd"
+ >
+ <File
+ RelativePath=".\order.xsd"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd order.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-serialization --extern-xml-schema xml-schema.xsd order.xsd"
+ AdditionalDependencies="xml-schema.hxx"
+ Outputs="order.hxx;order.ixx;order.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd order.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-serialization --extern-xml-schema xml-schema.xsd order.xsd"
+ AdditionalDependencies="xml-schema.hxx"
+ Outputs="order.hxx;order.ixx;order.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd order.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-serialization --extern-xml-schema xml-schema.xsd order.xsd"
+ Outputs="order.hxx;order.ixx;order.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd order.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-serialization --extern-xml-schema xml-schema.xsd order.xsd"
+ Outputs="order.hxx;order.ixx;order.cxx"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/custom/double/double-xerces2-7.1.vcproj b/xsd/dist/examples/cxx/tree/custom/double/double-xerces2-7.1.vcproj new file mode 100644 index 0000000..d4a28aa --- /dev/null +++ b/xsd/dist/examples/cxx/tree/custom/double/double-xerces2-7.1.vcproj @@ -0,0 +1,186 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="double"
+ ProjectGUID="{CCE6AE91-39AC-49B6-8763-742B65FCD92E}"
+ RootNamespace="double"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="TRUE"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="5"
+ RuntimeTypeInfo="TRUE"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="4"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="TRUE"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"
+ Description="xsd xml-schema.xsd"
+ CommandLine="xsd cxx-tree --generate-xml-schema --generate-serialization --generate-intellisense --custom-type double=double --hxx-epilogue "#include \"double-custom.hxx\"" xml-schema.xsd"
+ ExcludedFromBuild="FALSE"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="4"
+ RuntimeTypeInfo="TRUE"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="3"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"
+ Description="xsd xml-schema.xsd"
+ CommandLine="xsd cxx-tree --generate-xml-schema --generate-serialization --generate-intellisense --custom-type double=double --hxx-epilogue "#include \"double-custom.hxx\"" xml-schema.xsd"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{9AB5F296-2836-4A71-A39E-8D63EECB86D8}">
+ <File
+ RelativePath=".\order.cxx">
+ </File>
+ <File
+ RelativePath=".\driver.cxx">
+ </File>
+ <File
+ RelativePath=".\double-custom.cxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{CDC85F55-DEE6-4EB3-9B72-1CBDDA21CFBE}">
+ <File
+ RelativePath=".\order.hxx">
+ </File>
+ <File
+ RelativePath=".\double-custom.hxx">
+ </File>
+ <File
+ RelativePath=".\xml-schema.hxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Inline Files"
+ Filter="ixx">
+ <File
+ RelativePath=".\order.ixx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd">
+ <File
+ RelativePath=".\order.xsd">
+ <FileConfiguration
+ Name="Debug|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd order.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-serialization --generate-intellisense --extern-xml-schema xml-schema.xsd order.xsd"
+ AdditionalDependencies="xml-schema.hxx"
+ Outputs="order.hxx;order.ixx;order.cxx"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd order.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-serialization --generate-intellisense --extern-xml-schema xml-schema.xsd order.xsd"
+ Outputs="order.hxx;order.ixx;order.cxx"/>
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/custom/double/double-xerces2-8.0.vcproj b/xsd/dist/examples/cxx/tree/custom/double/double-xerces2-8.0.vcproj new file mode 100644 index 0000000..8dcfb74 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/custom/double/double-xerces2-8.0.vcproj @@ -0,0 +1,456 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="double"
+ ProjectGUID="{CCE6AE91-39AC-49B6-8763-742B65FCD92E}"
+ RootNamespace="double"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ Description="xsd xml-schema.xsd"
+ CommandLine="xsd cxx-tree --generate-xml-schema --generate-serialization --generate-intellisense --custom-type double=double --hxx-epilogue "#include \"double-custom.hxx\"" xml-schema.xsd"
+ ExcludedFromBuild="false"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ Description="xsd xml-schema.xsd"
+ CommandLine="xsd cxx-tree --generate-xml-schema --generate-serialization --generate-intellisense --custom-type double=double --hxx-epilogue "#include \"double-custom.hxx\"" xml-schema.xsd"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ Description="xsd xml-schema.xsd"
+ CommandLine="xsd cxx-tree --generate-xml-schema --generate-serialization --generate-intellisense --custom-type double=double --hxx-epilogue "#include \"double-custom.hxx\"" xml-schema.xsd"
+ ExcludedFromBuild="false"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ Description="xsd xml-schema.xsd"
+ CommandLine="xsd cxx-tree --generate-xml-schema --generate-serialization --generate-intellisense --custom-type double=double --hxx-epilogue "#include \"double-custom.hxx\"" xml-schema.xsd"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{9AB5F296-2836-4A71-A39E-8D63EECB86D8}"
+ >
+ <File
+ RelativePath=".\driver.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\order.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\double-custom.cxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{CDC85F55-DEE6-4EB3-9B72-1CBDDA21CFBE}"
+ >
+ <File
+ RelativePath=".\order.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\double-custom.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\xml-schema.hxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Inline Files"
+ Filter="ixx"
+ >
+ <File
+ RelativePath=".\order.ixx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd"
+ >
+ <File
+ RelativePath=".\order.xsd"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd order.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-serialization --generate-intellisense --extern-xml-schema xml-schema.xsd order.xsd"
+ AdditionalDependencies="xml-schema.hxx"
+ Outputs="order.hxx;order.ixx;order.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd order.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-serialization --generate-intellisense --extern-xml-schema xml-schema.xsd order.xsd"
+ Outputs="order.hxx;order.ixx;order.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd order.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-serialization --generate-intellisense --extern-xml-schema xml-schema.xsd order.xsd"
+ AdditionalDependencies="xml-schema.hxx"
+ Outputs="order.hxx;order.ixx;order.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd order.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-serialization --generate-intellisense --extern-xml-schema xml-schema.xsd order.xsd"
+ Outputs="order.hxx;order.ixx;order.cxx"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/custom/double/double-xerces2-9.0.vcproj b/xsd/dist/examples/cxx/tree/custom/double/double-xerces2-9.0.vcproj new file mode 100644 index 0000000..0915560 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/custom/double/double-xerces2-9.0.vcproj @@ -0,0 +1,453 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="double"
+ ProjectGUID="{CCE6AE91-39AC-49B6-8763-742B65FCD92E}"
+ RootNamespace="double"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ Description="xsd xml-schema.xsd"
+ CommandLine="xsd cxx-tree --generate-xml-schema --generate-serialization --custom-type double=double --hxx-epilogue "#include \"double-custom.hxx\"" xml-schema.xsd"
+ ExcludedFromBuild="false"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ Description="xsd xml-schema.xsd"
+ CommandLine="xsd cxx-tree --generate-xml-schema --generate-serialization --custom-type double=double --hxx-epilogue "#include \"double-custom.hxx\"" xml-schema.xsd"
+ ExcludedFromBuild="false"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ Description="xsd xml-schema.xsd"
+ CommandLine="xsd cxx-tree --generate-xml-schema --generate-serialization --custom-type double=double --hxx-epilogue "#include \"double-custom.hxx\"" xml-schema.xsd"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ Description="xsd xml-schema.xsd"
+ CommandLine="xsd cxx-tree --generate-xml-schema --generate-serialization --custom-type double=double --hxx-epilogue "#include \"double-custom.hxx\"" xml-schema.xsd"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{9AB5F296-2836-4A71-A39E-8D63EECB86D8}"
+ >
+ <File
+ RelativePath=".\driver.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\order.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\double-custom.cxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{CDC85F55-DEE6-4EB3-9B72-1CBDDA21CFBE}"
+ >
+ <File
+ RelativePath=".\order.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\double-custom.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\xml-schema.hxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Inline Files"
+ Filter="ixx"
+ >
+ <File
+ RelativePath=".\order.ixx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd"
+ >
+ <File
+ RelativePath=".\order.xsd"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd order.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-serialization --extern-xml-schema xml-schema.xsd order.xsd"
+ AdditionalDependencies="xml-schema.hxx"
+ Outputs="order.hxx;order.ixx;order.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd order.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-serialization --extern-xml-schema xml-schema.xsd order.xsd"
+ AdditionalDependencies="xml-schema.hxx"
+ Outputs="order.hxx;order.ixx;order.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd order.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-serialization --extern-xml-schema xml-schema.xsd order.xsd"
+ Outputs="order.hxx;order.ixx;order.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd order.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-serialization --extern-xml-schema xml-schema.xsd order.xsd"
+ Outputs="order.hxx;order.ixx;order.cxx"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/custom/double/makefile b/xsd/dist/examples/cxx/tree/custom/double/makefile new file mode 100644 index 0000000..9480279 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/custom/double/makefile @@ -0,0 +1,42 @@ +root := ../../../.. + +include $(root)/build/cxx/rules.make +include $(root)/build/xsd/tree-rules.make + + +override XSDFLAGS += --generate-inline --generate-serialization \ +--extern-xml-schema xml-schema.xsd + + +# Build. +# +driver: driver.o order.o double-custom.o + +driver.o: driver.cxx order.ixx order.hxx xml-schema.hxx double-custom.hxx +order.o: order.cxx order.ixx order.hxx xml-schema.hxx double-custom.hxx +double-custom.o: xml-schema.hxx double-custom.hxx + +order.cxx order.ixx order.hxx: order.xsd + +# Generate header for XML Schema namespace. +# +XML_SCHEMA_XSDFLAGS := --generate-xml-schema --generate-serialization \ +--custom-type double=double \ +--hxx-epilogue '\#include "double-custom.hxx"' + +xml-schema.hxx: + $(XSD) cxx-tree $(XML_SCHEMA_XSDFLAGS) xml-schema.xsd + + +# Test +# +.PHONY: test +test: driver + ./driver + + +# Clean. +# +.PHONY: clean +clean: + rm -f xml-schema.hxx double-custom.o order.o order.?xx driver.o driver diff --git a/xsd/dist/examples/cxx/tree/custom/makefile b/xsd/dist/examples/cxx/tree/custom/makefile new file mode 100644 index 0000000..584f599 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/custom/makefile @@ -0,0 +1,15 @@ +dirs := comments contacts double mixed taxonomy wildcard + +ifeq ($(WITH_BOOST),1) +dirs += calendar +endif + +.PHONY: all $(dirs) + +all: $(dirs) + +$(dirs): + @$(MAKE) -C $@ $(MAKECMDGOALS) + +makefile: ; +% :: $(dirs) ; diff --git a/xsd/dist/examples/cxx/tree/custom/mixed/makefile b/xsd/dist/examples/cxx/tree/custom/mixed/makefile new file mode 100644 index 0000000..a5ea87e --- /dev/null +++ b/xsd/dist/examples/cxx/tree/custom/mixed/makefile @@ -0,0 +1,33 @@ +root := ../../../.. + +include $(root)/build/cxx/rules.make +include $(root)/build/xsd/tree-rules.make + + +override XSDFLAGS += --generate-inline --generate-serialization \ +--custom-type bio=/bio_base --hxx-epilogue '\#include "people-custom.hxx"' + + +# Build. +# +driver: driver.o people.o people-custom.o + +people.o: people.cxx people.ixx people.hxx people-custom.hxx +driver.o: driver.cxx people.ixx people.hxx people-custom.hxx +people-custom.o: people-custom.cxx people.ixx people.hxx people-custom.hxx + +people.cxx people.hxx people.ixx: people.xsd + + +# Test +# +.PHONY: test +test: driver people.xml + ./driver people.xml + + +# Clean. +# +.PHONY: clean +clean: + rm -f people-custom.o people.o people.?xx driver.o driver diff --git a/xsd/dist/examples/cxx/tree/custom/mixed/mixed-10.0.vcxproj b/xsd/dist/examples/cxx/tree/custom/mixed/mixed-10.0.vcxproj new file mode 100644 index 0000000..9071bcc --- /dev/null +++ b/xsd/dist/examples/cxx/tree/custom/mixed/mixed-10.0.vcxproj @@ -0,0 +1,212 @@ +<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectName>mixed</ProjectName>
+ <ProjectGuid>{26CE0C08-7621-403A-88A7-206E64F32C66}</ProjectGuid>
+ <RootNamespace>mixed</RootNamespace>
+ <Keyword>Win32Proj</Keyword>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">driver</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">driver</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">driver</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">driver</TargetName>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Debug\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Debug\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)\$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)\$(Configuration)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Release\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Release\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)\$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)\$(Configuration)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ <RuntimeTypeInfo>true</RuntimeTypeInfo>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>xerces-c_3D.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)driver.pdb</ProgramDatabaseFile>
+ <SubSystem>Console</SubSystem>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ <RuntimeTypeInfo>true</RuntimeTypeInfo>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>xerces-c_3D.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)driver.pdb</ProgramDatabaseFile>
+ <SubSystem>Console</SubSystem>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <RuntimeTypeInfo>true</RuntimeTypeInfo>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>xerces-c_3.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <RuntimeTypeInfo>true</RuntimeTypeInfo>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>xerces-c_3.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="driver.cxx" />
+ <ClCompile Include="people-custom.cxx" />
+ <ClCompile Include="people.cxx" />
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="people-custom.hxx" />
+ <ClInclude Include="people.hxx" />
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="people.ixx" />
+ <None Include="Readme.txt" />
+ </ItemGroup>
+ <ItemGroup>
+ <CustomBuild Include="people.xsd">
+ <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">xsd people.xsd</Message>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">xsd cxx-tree --generate-inline --generate-serialization --custom-type bio=/bio_base --hxx-epilogue "#include \"people-custom.hxx\"" people.xsd</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">people.hxx;people.ixx;people.cxx;%(Outputs)</Outputs>
+ <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">xsd people.xsd</Message>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">xsd cxx-tree --generate-inline --generate-serialization --custom-type bio=/bio_base --hxx-epilogue "#include \"people-custom.hxx\"" people.xsd</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">people.hxx;people.ixx;people.cxx;%(Outputs)</Outputs>
+ <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">xsd people.xsd</Message>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">xsd cxx-tree --generate-inline --generate-serialization --custom-type bio=/bio_base --hxx-epilogue "#include \"people-custom.hxx\"" people.xsd</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">people.hxx;people.ixx;people.cxx;%(Outputs)</Outputs>
+ <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">xsd people.xsd</Message>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">xsd cxx-tree --generate-inline --generate-serialization --custom-type bio=/bio_base --hxx-epilogue "#include \"people-custom.hxx\"" people.xsd</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">people.hxx;people.ixx;people.cxx;%(Outputs)</Outputs>
+ </CustomBuild>
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project>
\ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/custom/mixed/mixed-10.0.vcxproj.filters b/xsd/dist/examples/cxx/tree/custom/mixed/mixed-10.0.vcxproj.filters new file mode 100644 index 0000000..1f317e1 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/custom/mixed/mixed-10.0.vcxproj.filters @@ -0,0 +1,51 @@ +<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="Source Files">
+ <UniqueIdentifier>{CBA3D0E2-DDB8-4ABE-8B5A-7A28191CA323}</UniqueIdentifier>
+ <Extensions>cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+ </Filter>
+ <Filter Include="Header Files">
+ <UniqueIdentifier>{54846A6A-25CD-4C8C-A5F1-2DAC77554F47}</UniqueIdentifier>
+ <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
+ </Filter>
+ <Filter Include="Inline Files">
+ <UniqueIdentifier>{ba5c74eb-b935-4573-98b5-2987ed135ec6}</UniqueIdentifier>
+ <Extensions>ixx</Extensions>
+ </Filter>
+ <Filter Include="Schema Files">
+ <UniqueIdentifier>{b02fd6d3-59e2-4819-9c5b-66ef2b5834a0}</UniqueIdentifier>
+ <Extensions>xsd</Extensions>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="driver.cxx">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="people-custom.cxx">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="people.cxx">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="people-custom.hxx">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="people.hxx">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="people.ixx">
+ <Filter>Inline Files</Filter>
+ </None>
+ <None Include="Readme.txt" />
+ </ItemGroup>
+ <ItemGroup>
+ <CustomBuild Include="people.xsd">
+ <Filter>Schema Files</Filter>
+ </CustomBuild>
+ </ItemGroup>
+</Project>
\ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/custom/mixed/mixed-7.1.vcproj b/xsd/dist/examples/cxx/tree/custom/mixed/mixed-7.1.vcproj new file mode 100644 index 0000000..7f155fd --- /dev/null +++ b/xsd/dist/examples/cxx/tree/custom/mixed/mixed-7.1.vcproj @@ -0,0 +1,177 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="mixed"
+ ProjectGUID="{26CE0C08-7621-403A-88A7-206E64F32C66}"
+ RootNamespace="mixed"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="TRUE"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="5"
+ RuntimeTypeInfo="TRUE"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="4"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="TRUE"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="4"
+ RuntimeTypeInfo="TRUE"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="3"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{CBA3D0E2-DDB8-4ABE-8B5A-7A28191CA323}">
+ <File
+ RelativePath=".\driver.cxx">
+ </File>
+ <File
+ RelativePath=".\people.cxx">
+ </File>
+ <File
+ RelativePath=".\people-custom.cxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{54846A6A-25CD-4C8C-A5F1-2DAC77554F47}">
+ <File
+ RelativePath=".\people.hxx">
+ </File>
+ <File
+ RelativePath=".\people-custom.hxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Inline Files"
+ Filter="ixx">
+ <File
+ RelativePath=".\people.ixx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd">
+ <File
+ RelativePath=".\people.xsd">
+ <FileConfiguration
+ Name="Debug|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd people.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-serialization --generate-intellisense --custom-type bio=/bio_base --hxx-epilogue "#include \"people-custom.hxx\"" people.xsd"
+ Outputs="people.hxx;people.ixx;people.cxx"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd people.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-serialization --generate-intellisense --custom-type bio=/bio_base --hxx-epilogue "#include \"people-custom.hxx\"" people.xsd"
+ Outputs="people.hxx;people.ixx;people.cxx"/>
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/custom/mixed/mixed-8.0.vcproj b/xsd/dist/examples/cxx/tree/custom/mixed/mixed-8.0.vcproj new file mode 100644 index 0000000..ce238d4 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/custom/mixed/mixed-8.0.vcproj @@ -0,0 +1,440 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="mixed"
+ ProjectGUID="{26CE0C08-7621-403A-88A7-206E64F32C66}"
+ RootNamespace="mixed"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{CBA3D0E2-DDB8-4ABE-8B5A-7A28191CA323}"
+ >
+ <File
+ RelativePath=".\driver.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\people-custom.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\people.cxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{54846A6A-25CD-4C8C-A5F1-2DAC77554F47}"
+ >
+ <File
+ RelativePath=".\people-custom.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\people.hxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Inline Files"
+ Filter="ixx"
+ >
+ <File
+ RelativePath=".\people.ixx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd"
+ >
+ <File
+ RelativePath=".\people.xsd"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd people.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-serialization --generate-intellisense --custom-type bio=/bio_base --hxx-epilogue "#include \"people-custom.hxx\"" people.xsd"
+ Outputs="people.hxx;people.ixx;people.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd people.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-serialization --generate-intellisense --custom-type bio=/bio_base --hxx-epilogue "#include \"people-custom.hxx\"" people.xsd"
+ Outputs="people.hxx;people.ixx;people.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd people.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-serialization --generate-intellisense --custom-type bio=/bio_base --hxx-epilogue "#include \"people-custom.hxx\"" people.xsd"
+ Outputs="people.hxx;people.ixx;people.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd people.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-serialization --generate-intellisense --custom-type bio=/bio_base --hxx-epilogue "#include \"people-custom.hxx\"" people.xsd"
+ Outputs="people.hxx;people.ixx;people.cxx"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/custom/mixed/mixed-9.0.vcproj b/xsd/dist/examples/cxx/tree/custom/mixed/mixed-9.0.vcproj new file mode 100644 index 0000000..5e3c6da --- /dev/null +++ b/xsd/dist/examples/cxx/tree/custom/mixed/mixed-9.0.vcproj @@ -0,0 +1,437 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="mixed"
+ ProjectGUID="{26CE0C08-7621-403A-88A7-206E64F32C66}"
+ RootNamespace="mixed"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{CBA3D0E2-DDB8-4ABE-8B5A-7A28191CA323}"
+ >
+ <File
+ RelativePath=".\driver.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\people-custom.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\people.cxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{54846A6A-25CD-4C8C-A5F1-2DAC77554F47}"
+ >
+ <File
+ RelativePath=".\people-custom.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\people.hxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Inline Files"
+ Filter="ixx"
+ >
+ <File
+ RelativePath=".\people.ixx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd"
+ >
+ <File
+ RelativePath=".\people.xsd"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd people.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-serialization --custom-type bio=/bio_base --hxx-epilogue "#include \"people-custom.hxx\"" people.xsd"
+ Outputs="people.hxx;people.ixx;people.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd people.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-serialization --custom-type bio=/bio_base --hxx-epilogue "#include \"people-custom.hxx\"" people.xsd"
+ Outputs="people.hxx;people.ixx;people.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd people.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-serialization --custom-type bio=/bio_base --hxx-epilogue "#include \"people-custom.hxx\"" people.xsd"
+ Outputs="people.hxx;people.ixx;people.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd people.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-serialization --custom-type bio=/bio_base --hxx-epilogue "#include \"people-custom.hxx\"" people.xsd"
+ Outputs="people.hxx;people.ixx;people.cxx"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/custom/mixed/mixed-xerces2-7.1.vcproj b/xsd/dist/examples/cxx/tree/custom/mixed/mixed-xerces2-7.1.vcproj new file mode 100644 index 0000000..148bc8f --- /dev/null +++ b/xsd/dist/examples/cxx/tree/custom/mixed/mixed-xerces2-7.1.vcproj @@ -0,0 +1,177 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="mixed"
+ ProjectGUID="{26CE0C08-7621-403A-88A7-206E64F32C66}"
+ RootNamespace="mixed"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="TRUE"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="5"
+ RuntimeTypeInfo="TRUE"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="4"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="TRUE"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="4"
+ RuntimeTypeInfo="TRUE"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="3"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{CBA3D0E2-DDB8-4ABE-8B5A-7A28191CA323}">
+ <File
+ RelativePath=".\driver.cxx">
+ </File>
+ <File
+ RelativePath=".\people.cxx">
+ </File>
+ <File
+ RelativePath=".\people-custom.cxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{54846A6A-25CD-4C8C-A5F1-2DAC77554F47}">
+ <File
+ RelativePath=".\people.hxx">
+ </File>
+ <File
+ RelativePath=".\people-custom.hxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Inline Files"
+ Filter="ixx">
+ <File
+ RelativePath=".\people.ixx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd">
+ <File
+ RelativePath=".\people.xsd">
+ <FileConfiguration
+ Name="Debug|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd people.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-serialization --generate-intellisense --custom-type bio=/bio_base --hxx-epilogue "#include \"people-custom.hxx\"" people.xsd"
+ Outputs="people.hxx;people.ixx;people.cxx"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd people.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-serialization --generate-intellisense --custom-type bio=/bio_base --hxx-epilogue "#include \"people-custom.hxx\"" people.xsd"
+ Outputs="people.hxx;people.ixx;people.cxx"/>
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/custom/mixed/mixed-xerces2-8.0.vcproj b/xsd/dist/examples/cxx/tree/custom/mixed/mixed-xerces2-8.0.vcproj new file mode 100644 index 0000000..94715cf --- /dev/null +++ b/xsd/dist/examples/cxx/tree/custom/mixed/mixed-xerces2-8.0.vcproj @@ -0,0 +1,440 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="mixed"
+ ProjectGUID="{26CE0C08-7621-403A-88A7-206E64F32C66}"
+ RootNamespace="mixed"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{CBA3D0E2-DDB8-4ABE-8B5A-7A28191CA323}"
+ >
+ <File
+ RelativePath=".\driver.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\people-custom.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\people.cxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{54846A6A-25CD-4C8C-A5F1-2DAC77554F47}"
+ >
+ <File
+ RelativePath=".\people-custom.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\people.hxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Inline Files"
+ Filter="ixx"
+ >
+ <File
+ RelativePath=".\people.ixx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd"
+ >
+ <File
+ RelativePath=".\people.xsd"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd people.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-serialization --generate-intellisense --custom-type bio=/bio_base --hxx-epilogue "#include \"people-custom.hxx\"" people.xsd"
+ Outputs="people.hxx;people.ixx;people.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd people.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-serialization --generate-intellisense --custom-type bio=/bio_base --hxx-epilogue "#include \"people-custom.hxx\"" people.xsd"
+ Outputs="people.hxx;people.ixx;people.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd people.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-serialization --generate-intellisense --custom-type bio=/bio_base --hxx-epilogue "#include \"people-custom.hxx\"" people.xsd"
+ Outputs="people.hxx;people.ixx;people.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd people.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-serialization --generate-intellisense --custom-type bio=/bio_base --hxx-epilogue "#include \"people-custom.hxx\"" people.xsd"
+ Outputs="people.hxx;people.ixx;people.cxx"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/custom/mixed/mixed-xerces2-9.0.vcproj b/xsd/dist/examples/cxx/tree/custom/mixed/mixed-xerces2-9.0.vcproj new file mode 100644 index 0000000..bee87ae --- /dev/null +++ b/xsd/dist/examples/cxx/tree/custom/mixed/mixed-xerces2-9.0.vcproj @@ -0,0 +1,437 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="mixed"
+ ProjectGUID="{26CE0C08-7621-403A-88A7-206E64F32C66}"
+ RootNamespace="mixed"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{CBA3D0E2-DDB8-4ABE-8B5A-7A28191CA323}"
+ >
+ <File
+ RelativePath=".\driver.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\people-custom.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\people.cxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{54846A6A-25CD-4C8C-A5F1-2DAC77554F47}"
+ >
+ <File
+ RelativePath=".\people-custom.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\people.hxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Inline Files"
+ Filter="ixx"
+ >
+ <File
+ RelativePath=".\people.ixx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd"
+ >
+ <File
+ RelativePath=".\people.xsd"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd people.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-serialization --custom-type bio=/bio_base --hxx-epilogue "#include \"people-custom.hxx\"" people.xsd"
+ Outputs="people.hxx;people.ixx;people.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd people.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-serialization --custom-type bio=/bio_base --hxx-epilogue "#include \"people-custom.hxx\"" people.xsd"
+ Outputs="people.hxx;people.ixx;people.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd people.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-serialization --custom-type bio=/bio_base --hxx-epilogue "#include \"people-custom.hxx\"" people.xsd"
+ Outputs="people.hxx;people.ixx;people.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd people.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-serialization --custom-type bio=/bio_base --hxx-epilogue "#include \"people-custom.hxx\"" people.xsd"
+ Outputs="people.hxx;people.ixx;people.cxx"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/custom/taxonomy/makefile b/xsd/dist/examples/cxx/tree/custom/taxonomy/makefile new file mode 100644 index 0000000..11fa6ef --- /dev/null +++ b/xsd/dist/examples/cxx/tree/custom/taxonomy/makefile @@ -0,0 +1,39 @@ +root := ../../../.. + +include $(root)/build/cxx/rules.make +include $(root)/build/xsd/tree-rules.make + + +override XSDFLAGS += --generate-inline --generate-forward \ +--generate-polymorphic \ +--polymorphic-type person \ +--custom-type "person=person_impl<person_base>/person_base" \ +--custom-type "superman=superman_impl<superman_base>/superman_base" \ +--custom-type "batman=batman_impl<batman_base>/batman_base" \ +--fwd-prologue '\#include "people-custom-fwd.hxx"' \ +--hxx-prologue '\#include "people-custom.hxx"' + + +# Build. +# +driver: driver.o people.o people-custom.o + +people.o: people.cxx people.ixx people.hxx people-custom.hxx people-custom-fwd.hxx +driver.o: driver.cxx people.ixx people.hxx people-custom.hxx people-custom-fwd.hxx +people-custom.o: people-custom.cxx people.ixx people.hxx people-custom.hxx people-custom-fwd.hxx + +people.cxx people.ixx people.hxx people-fwd.hxx: people.xsd + + +# Test +# +.PHONY: test +test: driver people.xml + ./driver people.xml + + +# Clean. +# +.PHONY: clean +clean: + rm -f people-custom.o people.o people-fwd.hxx people.?xx driver.o driver diff --git a/xsd/dist/examples/cxx/tree/custom/taxonomy/taxonomy-10.0.vcxproj b/xsd/dist/examples/cxx/tree/custom/taxonomy/taxonomy-10.0.vcxproj new file mode 100644 index 0000000..56302f7 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/custom/taxonomy/taxonomy-10.0.vcxproj @@ -0,0 +1,214 @@ +<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectName>taxonomy</ProjectName>
+ <ProjectGuid>{B3108E70-7B4E-4DDA-8872-0DC4AFDCB2D9}</ProjectGuid>
+ <RootNamespace>taxonomy</RootNamespace>
+ <Keyword>Win32Proj</Keyword>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">driver</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">driver</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">driver</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">driver</TargetName>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Debug\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Debug\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)\$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)\$(Configuration)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Release\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Release\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)\$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)\$(Configuration)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ <RuntimeTypeInfo>true</RuntimeTypeInfo>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>xerces-c_3D.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)driver.pdb</ProgramDatabaseFile>
+ <SubSystem>Console</SubSystem>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ <RuntimeTypeInfo>true</RuntimeTypeInfo>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>xerces-c_3D.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)driver.pdb</ProgramDatabaseFile>
+ <SubSystem>Console</SubSystem>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <RuntimeTypeInfo>true</RuntimeTypeInfo>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>xerces-c_3.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <RuntimeTypeInfo>true</RuntimeTypeInfo>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>xerces-c_3.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="driver.cxx" />
+ <ClCompile Include="people-custom.cxx" />
+ <ClCompile Include="people.cxx" />
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="people-custom-fwd.hxx" />
+ <ClInclude Include="people-custom.hxx" />
+ <ClInclude Include="people-fwd.hxx" />
+ <ClInclude Include="people.hxx" />
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="people.ixx" />
+ <None Include="Readme.txt" />
+ </ItemGroup>
+ <ItemGroup>
+ <CustomBuild Include="people.xsd">
+ <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">xsd people.xsd</Message>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">xsd cxx-tree --generate-inline --generate-forward --generate-polymorphic --polymorphic-type person --custom-type "person=person_impl<person_base>/person_base" --custom-type "superman=superman_impl<superman_base>/superman_base" --custom-type "batman=batman_impl<batman_base>/batman_base" --fwd-prologue "#include \"people-custom-fwd.hxx\"" --hxx-prologue "#include \"people-custom.hxx\"" people.xsd</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">people-fwd.hxx;people.hxx;people.ixx;people.cxx;%(Outputs)</Outputs>
+ <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">xsd people.xsd</Message>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">xsd cxx-tree --generate-inline --generate-forward --generate-polymorphic --polymorphic-type person --custom-type "person=person_impl<person_base>/person_base" --custom-type "superman=superman_impl<superman_base>/superman_base" --custom-type "batman=batman_impl<batman_base>/batman_base" --fwd-prologue "#include \"people-custom-fwd.hxx\"" --hxx-prologue "#include \"people-custom.hxx\"" people.xsd</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">people-fwd.hxx;people.hxx;people.ixx;people.cxx;%(Outputs)</Outputs>
+ <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">xsd people.xsd</Message>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">xsd cxx-tree --generate-inline --generate-forward --generate-polymorphic --polymorphic-type person --custom-type "person=person_impl<person_base>/person_base" --custom-type "superman=superman_impl<superman_base>/superman_base" --custom-type "batman=batman_impl<batman_base>/batman_base" --fwd-prologue "#include \"people-custom-fwd.hxx\"" --hxx-prologue "#include \"people-custom.hxx\"" people.xsd</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">people-fwd.hxx;people.hxx;people.ixx;people.cxx;%(Outputs)</Outputs>
+ <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">xsd people.xsd</Message>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">xsd cxx-tree --generate-inline --generate-forward --generate-polymorphic --polymorphic-type person --custom-type "person=person_impl<person_base>/person_base" --custom-type "superman=superman_impl<superman_base>/superman_base" --custom-type "batman=batman_impl<batman_base>/batman_base" --fwd-prologue "#include \"people-custom-fwd.hxx\"" --hxx-prologue "#include \"people-custom.hxx\"" people.xsd</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">people-fwd.hxx;people.hxx;people.ixx;people.cxx;%(Outputs)</Outputs>
+ </CustomBuild>
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project>
\ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/custom/taxonomy/taxonomy-10.0.vcxproj.filters b/xsd/dist/examples/cxx/tree/custom/taxonomy/taxonomy-10.0.vcxproj.filters new file mode 100644 index 0000000..78058c3 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/custom/taxonomy/taxonomy-10.0.vcxproj.filters @@ -0,0 +1,57 @@ +<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="Source Files">
+ <UniqueIdentifier>{E2FFBF97-01E8-483D-8B32-D8D6F065E4C7}</UniqueIdentifier>
+ <Extensions>cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+ </Filter>
+ <Filter Include="Header Files">
+ <UniqueIdentifier>{0B3DDFAD-4254-48B9-BB24-1FC92DD1E7F6}</UniqueIdentifier>
+ <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
+ </Filter>
+ <Filter Include="Inline Files">
+ <UniqueIdentifier>{a33f9d45-baba-483a-83c4-9421790f7d92}</UniqueIdentifier>
+ <Extensions>ixx</Extensions>
+ </Filter>
+ <Filter Include="Schema Files">
+ <UniqueIdentifier>{0c14530b-7a4b-4841-864e-e8da7ae18eea}</UniqueIdentifier>
+ <Extensions>xsd</Extensions>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="driver.cxx">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="people-custom.cxx">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="people.cxx">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="people-custom-fwd.hxx">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="people-custom.hxx">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="people-fwd.hxx">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="people.hxx">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="people.ixx">
+ <Filter>Inline Files</Filter>
+ </None>
+ <None Include="Readme.txt" />
+ </ItemGroup>
+ <ItemGroup>
+ <CustomBuild Include="people.xsd">
+ <Filter>Schema Files</Filter>
+ </CustomBuild>
+ </ItemGroup>
+</Project>
\ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/custom/taxonomy/taxonomy-7.1.vcproj b/xsd/dist/examples/cxx/tree/custom/taxonomy/taxonomy-7.1.vcproj new file mode 100644 index 0000000..2f8b136 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/custom/taxonomy/taxonomy-7.1.vcproj @@ -0,0 +1,183 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="taxonomy"
+ ProjectGUID="{B3108E70-7B4E-4DDA-8872-0DC4AFDCB2D9}"
+ RootNamespace="taxonomy"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="TRUE"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="5"
+ RuntimeTypeInfo="TRUE"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="4"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="TRUE"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="4"
+ RuntimeTypeInfo="TRUE"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="3"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{E2FFBF97-01E8-483D-8B32-D8D6F065E4C7}">
+ <File
+ RelativePath=".\driver.cxx">
+ </File>
+ <File
+ RelativePath=".\people.cxx">
+ </File>
+ <File
+ RelativePath=".\people-custom.cxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{0B3DDFAD-4254-48B9-BB24-1FC92DD1E7F6}">
+ <File
+ RelativePath=".\people.hxx">
+ </File>
+ <File
+ RelativePath=".\people-fwd.hxx">
+ </File>
+ <File
+ RelativePath=".\people-custom.hxx">
+ </File>
+ <File
+ RelativePath=".\people-custom-fwd.hxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Inline Files"
+ Filter="ixx">
+ <File
+ RelativePath=".\people.ixx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd">
+ <File
+ RelativePath=".\people.xsd">
+ <FileConfiguration
+ Name="Debug|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd people.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-forward --generate-polymorphic --polymorphic-type person --generate-intellisense --custom-type "person=person_impl<person_base>/person_base" --custom-type "superman=superman_impl<superman_base>/superman_base" --custom-type "batman=batman_impl<batman_base>/batman_base" --fwd-prologue "#include \"people-custom-fwd.hxx\"" --hxx-prologue "#include \"people-custom.hxx\"" people.xsd"
+ Outputs="people-fwd.hxx,people.hxx;people.ixx;people.cxx"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd people.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-forward --generate-polymorphic --polymorphic-type person --generate-intellisense --custom-type "person=person_impl<person_base>/person_base" --custom-type "superman=superman_impl<superman_base>/superman_base" --custom-type "batman=batman_impl<batman_base>/batman_base" --fwd-prologue "#include \"people-custom-fwd.hxx\"" --hxx-prologue "#include \"people-custom.hxx\"" people.xsd"
+ Outputs="people-fwd.hxx,people.hxx;people.ixx;people.cxx"/>
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/custom/taxonomy/taxonomy-8.0.vcproj b/xsd/dist/examples/cxx/tree/custom/taxonomy/taxonomy-8.0.vcproj new file mode 100644 index 0000000..72fe0ba --- /dev/null +++ b/xsd/dist/examples/cxx/tree/custom/taxonomy/taxonomy-8.0.vcproj @@ -0,0 +1,448 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="taxonomy"
+ ProjectGUID="{B3108E70-7B4E-4DDA-8872-0DC4AFDCB2D9}"
+ RootNamespace="taxonomy"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{E2FFBF97-01E8-483D-8B32-D8D6F065E4C7}"
+ >
+ <File
+ RelativePath=".\driver.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\people-custom.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\people.cxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{0B3DDFAD-4254-48B9-BB24-1FC92DD1E7F6}"
+ >
+ <File
+ RelativePath=".\people-custom-fwd.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\people-custom.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\people-fwd.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\people.hxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Inline Files"
+ Filter="ixx"
+ >
+ <File
+ RelativePath=".\people.ixx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd"
+ >
+ <File
+ RelativePath=".\people.xsd"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd people.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-forward --generate-polymorphic --polymorphic-type person --generate-intellisense --custom-type "person=person_impl<person_base>/person_base" --custom-type "superman=superman_impl<superman_base>/superman_base" --custom-type "batman=batman_impl<batman_base>/batman_base" --fwd-prologue "#include \"people-custom-fwd.hxx\"" --hxx-prologue "#include \"people-custom.hxx\"" people.xsd"
+ Outputs="people-fwd.hxx,people.hxx;people.ixx;people.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd people.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-forward --generate-polymorphic --polymorphic-type person --generate-intellisense --custom-type "person=person_impl<person_base>/person_base" --custom-type "superman=superman_impl<superman_base>/superman_base" --custom-type "batman=batman_impl<batman_base>/batman_base" --fwd-prologue "#include \"people-custom-fwd.hxx\"" --hxx-prologue "#include \"people-custom.hxx\"" people.xsd"
+ Outputs="people-fwd.hxx,people.hxx;people.ixx;people.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd people.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-forward --generate-polymorphic --polymorphic-type person --generate-intellisense --custom-type "person=person_impl<person_base>/person_base" --custom-type "superman=superman_impl<superman_base>/superman_base" --custom-type "batman=batman_impl<batman_base>/batman_base" --fwd-prologue "#include \"people-custom-fwd.hxx\"" --hxx-prologue "#include \"people-custom.hxx\"" people.xsd"
+ Outputs="people-fwd.hxx,people.hxx;people.ixx;people.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd people.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-forward --generate-polymorphic --polymorphic-type person --generate-intellisense --custom-type "person=person_impl<person_base>/person_base" --custom-type "superman=superman_impl<superman_base>/superman_base" --custom-type "batman=batman_impl<batman_base>/batman_base" --fwd-prologue "#include \"people-custom-fwd.hxx\"" --hxx-prologue "#include \"people-custom.hxx\"" people.xsd"
+ Outputs="people-fwd.hxx,people.hxx;people.ixx;people.cxx"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/custom/taxonomy/taxonomy-9.0.vcproj b/xsd/dist/examples/cxx/tree/custom/taxonomy/taxonomy-9.0.vcproj new file mode 100644 index 0000000..fa728e2 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/custom/taxonomy/taxonomy-9.0.vcproj @@ -0,0 +1,445 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="taxonomy"
+ ProjectGUID="{B3108E70-7B4E-4DDA-8872-0DC4AFDCB2D9}"
+ RootNamespace="taxonomy"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{E2FFBF97-01E8-483D-8B32-D8D6F065E4C7}"
+ >
+ <File
+ RelativePath=".\driver.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\people-custom.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\people.cxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{0B3DDFAD-4254-48B9-BB24-1FC92DD1E7F6}"
+ >
+ <File
+ RelativePath=".\people-custom-fwd.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\people-custom.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\people-fwd.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\people.hxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Inline Files"
+ Filter="ixx"
+ >
+ <File
+ RelativePath=".\people.ixx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd"
+ >
+ <File
+ RelativePath=".\people.xsd"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd people.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-forward --generate-polymorphic --polymorphic-type person --custom-type "person=person_impl<person_base>/person_base" --custom-type "superman=superman_impl<superman_base>/superman_base" --custom-type "batman=batman_impl<batman_base>/batman_base" --fwd-prologue "#include \"people-custom-fwd.hxx\"" --hxx-prologue "#include \"people-custom.hxx\"" people.xsd"
+ Outputs="people-fwd.hxx,people.hxx;people.ixx;people.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd people.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-forward --generate-polymorphic --polymorphic-type person --custom-type "person=person_impl<person_base>/person_base" --custom-type "superman=superman_impl<superman_base>/superman_base" --custom-type "batman=batman_impl<batman_base>/batman_base" --fwd-prologue "#include \"people-custom-fwd.hxx\"" --hxx-prologue "#include \"people-custom.hxx\"" people.xsd"
+ Outputs="people-fwd.hxx,people.hxx;people.ixx;people.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd people.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-forward --generate-polymorphic --polymorphic-type person --custom-type "person=person_impl<person_base>/person_base" --custom-type "superman=superman_impl<superman_base>/superman_base" --custom-type "batman=batman_impl<batman_base>/batman_base" --fwd-prologue "#include \"people-custom-fwd.hxx\"" --hxx-prologue "#include \"people-custom.hxx\"" people.xsd"
+ Outputs="people-fwd.hxx,people.hxx;people.ixx;people.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd people.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-forward --generate-polymorphic --polymorphic-type person --custom-type "person=person_impl<person_base>/person_base" --custom-type "superman=superman_impl<superman_base>/superman_base" --custom-type "batman=batman_impl<batman_base>/batman_base" --fwd-prologue "#include \"people-custom-fwd.hxx\"" --hxx-prologue "#include \"people-custom.hxx\"" people.xsd"
+ Outputs="people-fwd.hxx,people.hxx;people.ixx;people.cxx"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/custom/taxonomy/taxonomy-xerces2-7.1.vcproj b/xsd/dist/examples/cxx/tree/custom/taxonomy/taxonomy-xerces2-7.1.vcproj new file mode 100644 index 0000000..bb699b1 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/custom/taxonomy/taxonomy-xerces2-7.1.vcproj @@ -0,0 +1,183 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="taxonomy"
+ ProjectGUID="{B3108E70-7B4E-4DDA-8872-0DC4AFDCB2D9}"
+ RootNamespace="taxonomy"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="TRUE"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="5"
+ RuntimeTypeInfo="TRUE"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="4"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="TRUE"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="4"
+ RuntimeTypeInfo="TRUE"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="3"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{E2FFBF97-01E8-483D-8B32-D8D6F065E4C7}">
+ <File
+ RelativePath=".\driver.cxx">
+ </File>
+ <File
+ RelativePath=".\people.cxx">
+ </File>
+ <File
+ RelativePath=".\people-custom.cxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{0B3DDFAD-4254-48B9-BB24-1FC92DD1E7F6}">
+ <File
+ RelativePath=".\people.hxx">
+ </File>
+ <File
+ RelativePath=".\people-fwd.hxx">
+ </File>
+ <File
+ RelativePath=".\people-custom.hxx">
+ </File>
+ <File
+ RelativePath=".\people-custom-fwd.hxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Inline Files"
+ Filter="ixx">
+ <File
+ RelativePath=".\people.ixx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd">
+ <File
+ RelativePath=".\people.xsd">
+ <FileConfiguration
+ Name="Debug|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd people.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-forward --generate-polymorphic --polymorphic-type person --generate-intellisense --custom-type "person=person_impl<person_base>/person_base" --custom-type "superman=superman_impl<superman_base>/superman_base" --custom-type "batman=batman_impl<batman_base>/batman_base" --fwd-prologue "#include \"people-custom-fwd.hxx\"" --hxx-prologue "#include \"people-custom.hxx\"" people.xsd"
+ Outputs="people-fwd.hxx,people.hxx;people.ixx;people.cxx"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd people.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-forward --generate-polymorphic --polymorphic-type person --generate-intellisense --custom-type "person=person_impl<person_base>/person_base" --custom-type "superman=superman_impl<superman_base>/superman_base" --custom-type "batman=batman_impl<batman_base>/batman_base" --fwd-prologue "#include \"people-custom-fwd.hxx\"" --hxx-prologue "#include \"people-custom.hxx\"" people.xsd"
+ Outputs="people-fwd.hxx,people.hxx;people.ixx;people.cxx"/>
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/custom/taxonomy/taxonomy-xerces2-8.0.vcproj b/xsd/dist/examples/cxx/tree/custom/taxonomy/taxonomy-xerces2-8.0.vcproj new file mode 100644 index 0000000..f3a8e6a --- /dev/null +++ b/xsd/dist/examples/cxx/tree/custom/taxonomy/taxonomy-xerces2-8.0.vcproj @@ -0,0 +1,448 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="taxonomy"
+ ProjectGUID="{B3108E70-7B4E-4DDA-8872-0DC4AFDCB2D9}"
+ RootNamespace="taxonomy"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{E2FFBF97-01E8-483D-8B32-D8D6F065E4C7}"
+ >
+ <File
+ RelativePath=".\driver.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\people-custom.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\people.cxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{0B3DDFAD-4254-48B9-BB24-1FC92DD1E7F6}"
+ >
+ <File
+ RelativePath=".\people-custom-fwd.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\people-custom.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\people-fwd.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\people.hxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Inline Files"
+ Filter="ixx"
+ >
+ <File
+ RelativePath=".\people.ixx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd"
+ >
+ <File
+ RelativePath=".\people.xsd"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd people.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-forward --generate-polymorphic --polymorphic-type person --generate-intellisense --custom-type "person=person_impl<person_base>/person_base" --custom-type "superman=superman_impl<superman_base>/superman_base" --custom-type "batman=batman_impl<batman_base>/batman_base" --fwd-prologue "#include \"people-custom-fwd.hxx\"" --hxx-prologue "#include \"people-custom.hxx\"" people.xsd"
+ Outputs="people-fwd.hxx,people.hxx;people.ixx;people.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd people.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-forward --generate-polymorphic --polymorphic-type person --generate-intellisense --custom-type "person=person_impl<person_base>/person_base" --custom-type "superman=superman_impl<superman_base>/superman_base" --custom-type "batman=batman_impl<batman_base>/batman_base" --fwd-prologue "#include \"people-custom-fwd.hxx\"" --hxx-prologue "#include \"people-custom.hxx\"" people.xsd"
+ Outputs="people-fwd.hxx,people.hxx;people.ixx;people.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd people.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-forward --generate-polymorphic --polymorphic-type person --generate-intellisense --custom-type "person=person_impl<person_base>/person_base" --custom-type "superman=superman_impl<superman_base>/superman_base" --custom-type "batman=batman_impl<batman_base>/batman_base" --fwd-prologue "#include \"people-custom-fwd.hxx\"" --hxx-prologue "#include \"people-custom.hxx\"" people.xsd"
+ Outputs="people-fwd.hxx,people.hxx;people.ixx;people.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd people.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-forward --generate-polymorphic --polymorphic-type person --generate-intellisense --custom-type "person=person_impl<person_base>/person_base" --custom-type "superman=superman_impl<superman_base>/superman_base" --custom-type "batman=batman_impl<batman_base>/batman_base" --fwd-prologue "#include \"people-custom-fwd.hxx\"" --hxx-prologue "#include \"people-custom.hxx\"" people.xsd"
+ Outputs="people-fwd.hxx,people.hxx;people.ixx;people.cxx"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/custom/taxonomy/taxonomy-xerces2-9.0.vcproj b/xsd/dist/examples/cxx/tree/custom/taxonomy/taxonomy-xerces2-9.0.vcproj new file mode 100644 index 0000000..77eb684 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/custom/taxonomy/taxonomy-xerces2-9.0.vcproj @@ -0,0 +1,445 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="taxonomy"
+ ProjectGUID="{B3108E70-7B4E-4DDA-8872-0DC4AFDCB2D9}"
+ RootNamespace="taxonomy"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{E2FFBF97-01E8-483D-8B32-D8D6F065E4C7}"
+ >
+ <File
+ RelativePath=".\driver.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\people-custom.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\people.cxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{0B3DDFAD-4254-48B9-BB24-1FC92DD1E7F6}"
+ >
+ <File
+ RelativePath=".\people-custom-fwd.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\people-custom.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\people-fwd.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\people.hxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Inline Files"
+ Filter="ixx"
+ >
+ <File
+ RelativePath=".\people.ixx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd"
+ >
+ <File
+ RelativePath=".\people.xsd"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd people.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-forward --generate-polymorphic --polymorphic-type person --custom-type "person=person_impl<person_base>/person_base" --custom-type "superman=superman_impl<superman_base>/superman_base" --custom-type "batman=batman_impl<batman_base>/batman_base" --fwd-prologue "#include \"people-custom-fwd.hxx\"" --hxx-prologue "#include \"people-custom.hxx\"" people.xsd"
+ Outputs="people-fwd.hxx,people.hxx;people.ixx;people.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd people.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-forward --generate-polymorphic --polymorphic-type person --custom-type "person=person_impl<person_base>/person_base" --custom-type "superman=superman_impl<superman_base>/superman_base" --custom-type "batman=batman_impl<batman_base>/batman_base" --fwd-prologue "#include \"people-custom-fwd.hxx\"" --hxx-prologue "#include \"people-custom.hxx\"" people.xsd"
+ Outputs="people-fwd.hxx,people.hxx;people.ixx;people.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd people.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-forward --generate-polymorphic --polymorphic-type person --custom-type "person=person_impl<person_base>/person_base" --custom-type "superman=superman_impl<superman_base>/superman_base" --custom-type "batman=batman_impl<batman_base>/batman_base" --fwd-prologue "#include \"people-custom-fwd.hxx\"" --hxx-prologue "#include \"people-custom.hxx\"" people.xsd"
+ Outputs="people-fwd.hxx,people.hxx;people.ixx;people.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd people.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-forward --generate-polymorphic --polymorphic-type person --custom-type "person=person_impl<person_base>/person_base" --custom-type "superman=superman_impl<superman_base>/superman_base" --custom-type "batman=batman_impl<batman_base>/batman_base" --fwd-prologue "#include \"people-custom-fwd.hxx\"" --hxx-prologue "#include \"people-custom.hxx\"" people.xsd"
+ Outputs="people-fwd.hxx,people.hxx;people.ixx;people.cxx"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/custom/wildcard/makefile b/xsd/dist/examples/cxx/tree/custom/wildcard/makefile new file mode 100644 index 0000000..20ea1d2 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/custom/wildcard/makefile @@ -0,0 +1,34 @@ +root := ../../../.. + +include $(root)/build/cxx/rules.make +include $(root)/build/xsd/tree-rules.make + + +override XSDFLAGS += --generate-inline --generate-ostream \ +--generate-serialization --custom-type data=/data_base \ +--hxx-epilogue '\#include "wildcard-custom.hxx"' + + +# Build. +# +driver: driver.o wildcard.o wildcard-custom.o + +wildcard.o: wildcard.cxx wildcard.ixx wildcard.hxx wildcard-custom.hxx +driver.o: driver.cxx wildcard.ixx wildcard.hxx wildcard-custom.hxx +wildcard-custom.o: wildcard-custom.cxx wildcard.ixx wildcard.hxx wildcard-custom.hxx + +wildcard.cxx wildcard.hxx wildcard.ixx: wildcard.xsd + + +# Test +# +.PHONY: test +test: driver wildcard.xml + ./driver wildcard.xml + + +# Clean. +# +.PHONY: clean +clean: + rm -f wildcard-custom.o wildcard.o wildcard.?xx driver.o driver diff --git a/xsd/dist/examples/cxx/tree/custom/wildcard/wildcard-10.0.vcxproj b/xsd/dist/examples/cxx/tree/custom/wildcard/wildcard-10.0.vcxproj new file mode 100644 index 0000000..5356b27 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/custom/wildcard/wildcard-10.0.vcxproj @@ -0,0 +1,212 @@ +<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectName>wildcard</ProjectName>
+ <ProjectGuid>{6CE6CDEC-F8DE-42D0-80F8-E71C0DD8F897}</ProjectGuid>
+ <RootNamespace>wildcard</RootNamespace>
+ <Keyword>Win32Proj</Keyword>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">driver</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">driver</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">driver</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">driver</TargetName>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Debug\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Debug\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)\$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)\$(Configuration)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Release\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Release\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)\$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)\$(Configuration)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ <RuntimeTypeInfo>true</RuntimeTypeInfo>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>xerces-c_3D.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)driver.pdb</ProgramDatabaseFile>
+ <SubSystem>Console</SubSystem>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ <RuntimeTypeInfo>true</RuntimeTypeInfo>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>xerces-c_3D.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)driver.pdb</ProgramDatabaseFile>
+ <SubSystem>Console</SubSystem>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <RuntimeTypeInfo>true</RuntimeTypeInfo>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>xerces-c_3.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <RuntimeTypeInfo>true</RuntimeTypeInfo>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>xerces-c_3.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="driver.cxx" />
+ <ClCompile Include="wildcard-custom.cxx" />
+ <ClCompile Include="wildcard.cxx" />
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="wildcard-custom.hxx" />
+ <ClInclude Include="wildcard.hxx" />
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="wildcard.ixx" />
+ <None Include="Readme.txt" />
+ </ItemGroup>
+ <ItemGroup>
+ <CustomBuild Include="wildcard.xsd">
+ <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">xsd wildcard.xsd</Message>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">xsd cxx-tree --generate-inline --generate-ostream --generate-serialization --custom-type data=/data_base --hxx-epilogue "#include \"wildcard-custom.hxx\"" wildcard.xsd</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">wildcard.hxx;wildcard.ixx;wildcard.cxx;%(Outputs)</Outputs>
+ <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">xsd wildcard.xsd</Message>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">xsd cxx-tree --generate-inline --generate-ostream --generate-serialization --custom-type data=/data_base --hxx-epilogue "#include \"wildcard-custom.hxx\"" wildcard.xsd</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">wildcard.hxx;wildcard.ixx;wildcard.cxx;%(Outputs)</Outputs>
+ <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">xsd wildcard.xsd</Message>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">xsd cxx-tree --generate-inline --generate-ostream --generate-serialization --custom-type data=/data_base --hxx-epilogue "#include \"wildcard-custom.hxx\"" wildcard.xsd</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">wildcard.hxx;wildcard.ixx;wildcard.cxx;%(Outputs)</Outputs>
+ <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">xsd wildcard.xsd</Message>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">xsd cxx-tree --generate-inline --generate-ostream --generate-serialization --custom-type data=/data_base --hxx-epilogue "#include \"wildcard-custom.hxx\"" wildcard.xsd</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">wildcard.hxx;wildcard.ixx;wildcard.cxx;%(Outputs)</Outputs>
+ </CustomBuild>
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project>
\ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/custom/wildcard/wildcard-10.0.vcxproj.filters b/xsd/dist/examples/cxx/tree/custom/wildcard/wildcard-10.0.vcxproj.filters new file mode 100644 index 0000000..b67a77a --- /dev/null +++ b/xsd/dist/examples/cxx/tree/custom/wildcard/wildcard-10.0.vcxproj.filters @@ -0,0 +1,51 @@ +<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="Source Files">
+ <UniqueIdentifier>{426B0A1E-659E-40E5-B93B-EF76EBBE0C0A}</UniqueIdentifier>
+ <Extensions>cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+ </Filter>
+ <Filter Include="Header Files">
+ <UniqueIdentifier>{42AF0399-9A66-43B2-94AA-DBF9BEEF1E92}</UniqueIdentifier>
+ <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
+ </Filter>
+ <Filter Include="Inline Files">
+ <UniqueIdentifier>{0e336f4b-1f4c-4838-9a6a-183c80df8b67}</UniqueIdentifier>
+ <Extensions>ixx</Extensions>
+ </Filter>
+ <Filter Include="Schema Files">
+ <UniqueIdentifier>{228a47a0-93d7-4c99-9486-a589705ee401}</UniqueIdentifier>
+ <Extensions>xsd</Extensions>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="driver.cxx">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="wildcard-custom.cxx">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="wildcard.cxx">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="wildcard-custom.hxx">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="wildcard.hxx">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="wildcard.ixx">
+ <Filter>Inline Files</Filter>
+ </None>
+ <None Include="Readme.txt" />
+ </ItemGroup>
+ <ItemGroup>
+ <CustomBuild Include="wildcard.xsd">
+ <Filter>Schema Files</Filter>
+ </CustomBuild>
+ </ItemGroup>
+</Project>
\ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/custom/wildcard/wildcard-7.1.vcproj b/xsd/dist/examples/cxx/tree/custom/wildcard/wildcard-7.1.vcproj new file mode 100644 index 0000000..0dc9881 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/custom/wildcard/wildcard-7.1.vcproj @@ -0,0 +1,177 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="wildcard"
+ ProjectGUID="{6CE6CDEC-F8DE-42D0-80F8-E71C0DD8F897}"
+ RootNamespace="wildcard"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="TRUE"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="5"
+ RuntimeTypeInfo="TRUE"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="4"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="TRUE"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="4"
+ RuntimeTypeInfo="TRUE"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="3"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{426B0A1E-659E-40E5-B93B-EF76EBBE0C0A}">
+ <File
+ RelativePath=".\driver.cxx">
+ </File>
+ <File
+ RelativePath=".\wildcard.cxx">
+ </File>
+ <File
+ RelativePath=".\wildcard-custom.cxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{42AF0399-9A66-43B2-94AA-DBF9BEEF1E92}">
+ <File
+ RelativePath=".\wildcard.hxx">
+ </File>
+ <File
+ RelativePath=".\wildcard-custom.hxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Inline Files"
+ Filter="ixx">
+ <File
+ RelativePath=".\wildcard.ixx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd">
+ <File
+ RelativePath=".\wildcard.xsd">
+ <FileConfiguration
+ Name="Debug|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd wildcard.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-ostream --generate-serialization --generate-intellisense --custom-type data=/data_base --hxx-epilogue "#include \"wildcard-custom.hxx\"" wildcard.xsd"
+ Outputs="wildcard.hxx;wildcard.ixx;wildcard.cxx"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd wildcard.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-ostream --generate-serialization --generate-intellisense --custom-type data=/data_base --hxx-epilogue "#include \"wildcard-custom.hxx\"" wildcard.xsd"
+ Outputs="wildcard.hxx;wildcard.ixx;wildcard.cxx"/>
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/custom/wildcard/wildcard-8.0.vcproj b/xsd/dist/examples/cxx/tree/custom/wildcard/wildcard-8.0.vcproj new file mode 100644 index 0000000..bfd4bb6 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/custom/wildcard/wildcard-8.0.vcproj @@ -0,0 +1,440 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="wildcard"
+ ProjectGUID="{6CE6CDEC-F8DE-42D0-80F8-E71C0DD8F897}"
+ RootNamespace="wildcard"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{426B0A1E-659E-40E5-B93B-EF76EBBE0C0A}"
+ >
+ <File
+ RelativePath=".\driver.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\wildcard-custom.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\wildcard.cxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{42AF0399-9A66-43B2-94AA-DBF9BEEF1E92}"
+ >
+ <File
+ RelativePath=".\wildcard-custom.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\wildcard.hxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Inline Files"
+ Filter="ixx"
+ >
+ <File
+ RelativePath=".\wildcard.ixx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd"
+ >
+ <File
+ RelativePath=".\wildcard.xsd"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd wildcard.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-ostream --generate-serialization --generate-intellisense --custom-type data=/data_base --hxx-epilogue "#include \"wildcard-custom.hxx\"" wildcard.xsd"
+ Outputs="wildcard.hxx;wildcard.ixx;wildcard.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd wildcard.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-ostream --generate-serialization --generate-intellisense --custom-type data=/data_base --hxx-epilogue "#include \"wildcard-custom.hxx\"" wildcard.xsd"
+ Outputs="wildcard.hxx;wildcard.ixx;wildcard.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd wildcard.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-ostream --generate-serialization --generate-intellisense --custom-type data=/data_base --hxx-epilogue "#include \"wildcard-custom.hxx\"" wildcard.xsd"
+ Outputs="wildcard.hxx;wildcard.ixx;wildcard.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd wildcard.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-ostream --generate-serialization --generate-intellisense --custom-type data=/data_base --hxx-epilogue "#include \"wildcard-custom.hxx\"" wildcard.xsd"
+ Outputs="wildcard.hxx;wildcard.ixx;wildcard.cxx"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/custom/wildcard/wildcard-9.0.vcproj b/xsd/dist/examples/cxx/tree/custom/wildcard/wildcard-9.0.vcproj new file mode 100644 index 0000000..6254390 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/custom/wildcard/wildcard-9.0.vcproj @@ -0,0 +1,437 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="wildcard"
+ ProjectGUID="{6CE6CDEC-F8DE-42D0-80F8-E71C0DD8F897}"
+ RootNamespace="wildcard"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{426B0A1E-659E-40E5-B93B-EF76EBBE0C0A}"
+ >
+ <File
+ RelativePath=".\driver.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\wildcard-custom.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\wildcard.cxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{42AF0399-9A66-43B2-94AA-DBF9BEEF1E92}"
+ >
+ <File
+ RelativePath=".\wildcard-custom.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\wildcard.hxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Inline Files"
+ Filter="ixx"
+ >
+ <File
+ RelativePath=".\wildcard.ixx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd"
+ >
+ <File
+ RelativePath=".\wildcard.xsd"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd wildcard.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-ostream --generate-serialization --custom-type data=/data_base --hxx-epilogue "#include \"wildcard-custom.hxx\"" wildcard.xsd"
+ Outputs="wildcard.hxx;wildcard.ixx;wildcard.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd wildcard.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-ostream --generate-serialization --custom-type data=/data_base --hxx-epilogue "#include \"wildcard-custom.hxx\"" wildcard.xsd"
+ Outputs="wildcard.hxx;wildcard.ixx;wildcard.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd wildcard.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-ostream --generate-serialization --custom-type data=/data_base --hxx-epilogue "#include \"wildcard-custom.hxx\"" wildcard.xsd"
+ Outputs="wildcard.hxx;wildcard.ixx;wildcard.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd wildcard.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-ostream --generate-serialization --custom-type data=/data_base --hxx-epilogue "#include \"wildcard-custom.hxx\"" wildcard.xsd"
+ Outputs="wildcard.hxx;wildcard.ixx;wildcard.cxx"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/custom/wildcard/wildcard-xerces2-7.1.vcproj b/xsd/dist/examples/cxx/tree/custom/wildcard/wildcard-xerces2-7.1.vcproj new file mode 100644 index 0000000..2433f70 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/custom/wildcard/wildcard-xerces2-7.1.vcproj @@ -0,0 +1,177 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="wildcard"
+ ProjectGUID="{6CE6CDEC-F8DE-42D0-80F8-E71C0DD8F897}"
+ RootNamespace="wildcard"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="TRUE"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="5"
+ RuntimeTypeInfo="TRUE"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="4"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="TRUE"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="4"
+ RuntimeTypeInfo="TRUE"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="3"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{426B0A1E-659E-40E5-B93B-EF76EBBE0C0A}">
+ <File
+ RelativePath=".\driver.cxx">
+ </File>
+ <File
+ RelativePath=".\wildcard.cxx">
+ </File>
+ <File
+ RelativePath=".\wildcard-custom.cxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{42AF0399-9A66-43B2-94AA-DBF9BEEF1E92}">
+ <File
+ RelativePath=".\wildcard.hxx">
+ </File>
+ <File
+ RelativePath=".\wildcard-custom.hxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Inline Files"
+ Filter="ixx">
+ <File
+ RelativePath=".\wildcard.ixx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd">
+ <File
+ RelativePath=".\wildcard.xsd">
+ <FileConfiguration
+ Name="Debug|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd wildcard.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-ostream --generate-serialization --generate-intellisense --custom-type data=/data_base --hxx-epilogue "#include \"wildcard-custom.hxx\"" wildcard.xsd"
+ Outputs="wildcard.hxx;wildcard.ixx;wildcard.cxx"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd wildcard.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-ostream --generate-serialization --generate-intellisense --custom-type data=/data_base --hxx-epilogue "#include \"wildcard-custom.hxx\"" wildcard.xsd"
+ Outputs="wildcard.hxx;wildcard.ixx;wildcard.cxx"/>
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/custom/wildcard/wildcard-xerces2-8.0.vcproj b/xsd/dist/examples/cxx/tree/custom/wildcard/wildcard-xerces2-8.0.vcproj new file mode 100644 index 0000000..7f982c7 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/custom/wildcard/wildcard-xerces2-8.0.vcproj @@ -0,0 +1,440 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="wildcard"
+ ProjectGUID="{6CE6CDEC-F8DE-42D0-80F8-E71C0DD8F897}"
+ RootNamespace="wildcard"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{426B0A1E-659E-40E5-B93B-EF76EBBE0C0A}"
+ >
+ <File
+ RelativePath=".\driver.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\wildcard-custom.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\wildcard.cxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{42AF0399-9A66-43B2-94AA-DBF9BEEF1E92}"
+ >
+ <File
+ RelativePath=".\wildcard-custom.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\wildcard.hxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Inline Files"
+ Filter="ixx"
+ >
+ <File
+ RelativePath=".\wildcard.ixx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd"
+ >
+ <File
+ RelativePath=".\wildcard.xsd"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd wildcard.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-ostream --generate-serialization --generate-intellisense --custom-type data=/data_base --hxx-epilogue "#include \"wildcard-custom.hxx\"" wildcard.xsd"
+ Outputs="wildcard.hxx;wildcard.ixx;wildcard.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd wildcard.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-ostream --generate-serialization --generate-intellisense --custom-type data=/data_base --hxx-epilogue "#include \"wildcard-custom.hxx\"" wildcard.xsd"
+ Outputs="wildcard.hxx;wildcard.ixx;wildcard.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd wildcard.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-ostream --generate-serialization --generate-intellisense --custom-type data=/data_base --hxx-epilogue "#include \"wildcard-custom.hxx\"" wildcard.xsd"
+ Outputs="wildcard.hxx;wildcard.ixx;wildcard.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd wildcard.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-ostream --generate-serialization --generate-intellisense --custom-type data=/data_base --hxx-epilogue "#include \"wildcard-custom.hxx\"" wildcard.xsd"
+ Outputs="wildcard.hxx;wildcard.ixx;wildcard.cxx"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/custom/wildcard/wildcard-xerces2-9.0.vcproj b/xsd/dist/examples/cxx/tree/custom/wildcard/wildcard-xerces2-9.0.vcproj new file mode 100644 index 0000000..d475ac5 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/custom/wildcard/wildcard-xerces2-9.0.vcproj @@ -0,0 +1,437 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="wildcard"
+ ProjectGUID="{6CE6CDEC-F8DE-42D0-80F8-E71C0DD8F897}"
+ RootNamespace="wildcard"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{426B0A1E-659E-40E5-B93B-EF76EBBE0C0A}"
+ >
+ <File
+ RelativePath=".\driver.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\wildcard-custom.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\wildcard.cxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{42AF0399-9A66-43B2-94AA-DBF9BEEF1E92}"
+ >
+ <File
+ RelativePath=".\wildcard-custom.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\wildcard.hxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Inline Files"
+ Filter="ixx"
+ >
+ <File
+ RelativePath=".\wildcard.ixx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd"
+ >
+ <File
+ RelativePath=".\wildcard.xsd"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd wildcard.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-ostream --generate-serialization --custom-type data=/data_base --hxx-epilogue "#include \"wildcard-custom.hxx\"" wildcard.xsd"
+ Outputs="wildcard.hxx;wildcard.ixx;wildcard.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd wildcard.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-ostream --generate-serialization --custom-type data=/data_base --hxx-epilogue "#include \"wildcard-custom.hxx\"" wildcard.xsd"
+ Outputs="wildcard.hxx;wildcard.ixx;wildcard.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd wildcard.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-ostream --generate-serialization --custom-type data=/data_base --hxx-epilogue "#include \"wildcard-custom.hxx\"" wildcard.xsd"
+ Outputs="wildcard.hxx;wildcard.ixx;wildcard.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd wildcard.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-ostream --generate-serialization --custom-type data=/data_base --hxx-epilogue "#include \"wildcard-custom.hxx\"" wildcard.xsd"
+ Outputs="wildcard.hxx;wildcard.ixx;wildcard.cxx"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/dbxml/dbxml-10.0.sln b/xsd/dist/examples/cxx/tree/dbxml/dbxml-10.0.sln new file mode 100644 index 0000000..fc08f1f --- /dev/null +++ b/xsd/dist/examples/cxx/tree/dbxml/dbxml-10.0.sln @@ -0,0 +1,25 @@ +Microsoft Visual Studio Solution File, Format Version 11.00
+# Visual Studio 2010
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "dbxml", "dbxml-10.0.vcxproj", "{96CDC9C8-FC31-40B8-BDD0-1751712ED704}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Debug|x64 = Debug|x64
+ Release|Win32 = Release|Win32
+ Release|x64 = Release|x64
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {96CDC9C8-FC31-40B8-BDD0-1751712ED704}.Debug|Win32.ActiveCfg = Debug|Win32
+ {96CDC9C8-FC31-40B8-BDD0-1751712ED704}.Debug|Win32.Build.0 = Debug|Win32
+ {96CDC9C8-FC31-40B8-BDD0-1751712ED704}.Debug|x64.ActiveCfg = Debug|x64
+ {96CDC9C8-FC31-40B8-BDD0-1751712ED704}.Debug|x64.Build.0 = Debug|x64
+ {96CDC9C8-FC31-40B8-BDD0-1751712ED704}.Release|Win32.ActiveCfg = Release|Win32
+ {96CDC9C8-FC31-40B8-BDD0-1751712ED704}.Release|Win32.Build.0 = Release|Win32
+ {96CDC9C8-FC31-40B8-BDD0-1751712ED704}.Release|x64.ActiveCfg = Release|x64
+ {96CDC9C8-FC31-40B8-BDD0-1751712ED704}.Release|x64.Build.0 = Release|x64
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/xsd/dist/examples/cxx/tree/dbxml/dbxml-10.0.vcxproj b/xsd/dist/examples/cxx/tree/dbxml/dbxml-10.0.vcxproj new file mode 100644 index 0000000..69b1d32 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/dbxml/dbxml-10.0.vcxproj @@ -0,0 +1,209 @@ +<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectName>dbxml</ProjectName>
+ <ProjectGuid>{96CDC9C8-FC31-40B8-BDD0-1751712ED704}</ProjectGuid>
+ <RootNamespace>dbxml</RootNamespace>
+ <Keyword>Win32Proj</Keyword>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">driver</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">driver</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">driver</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">driver</TargetName>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Debug\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Debug\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)\$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)\$(Configuration)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Release\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Release\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)\$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)\$(Configuration)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;DBXML_DOM;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <RuntimeTypeInfo>true</RuntimeTypeInfo>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>libdbxml23d.lib;libdb45d.lib;xerces-c_2D.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)driver.pdb</ProgramDatabaseFile>
+ <SubSystem>Console</SubSystem>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;DBXML_DOM;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <RuntimeTypeInfo>true</RuntimeTypeInfo>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>libdbxml23d.lib;libdb45d.lib;xerces-c_2D.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)driver.pdb</ProgramDatabaseFile>
+ <SubSystem>Console</SubSystem>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;DBXML_DOM;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <RuntimeTypeInfo>true</RuntimeTypeInfo>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>libdbxml23.lib;libdb45.lib;xerces-c_2.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;DBXML_DOM;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <RuntimeTypeInfo>true</RuntimeTypeInfo>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>libdbxml23.lib;libdb45.lib;xerces-c_2.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="driver.cxx" />
+ <ClCompile Include="library.cxx" />
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="library.hxx" />
+ </ItemGroup>
+ <ItemGroup>
+ <CustomBuild Include="library.xsd">
+ <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">xsd library.xsd</Message>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">xsd cxx-tree --generate-ostream --generate-serialization library.xsd</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">library.hxx;library.cxx;%(Outputs)</Outputs>
+ <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">xsd library.xsd</Message>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">xsd cxx-tree --generate-ostream --generate-serialization library.xsd</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">library.hxx;library.cxx;%(Outputs)</Outputs>
+ <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">xsd library.xsd</Message>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">xsd cxx-tree --generate-ostream --generate-serialization library.xsd</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">library.hxx;library.cxx;%(Outputs)</Outputs>
+ <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">xsd library.xsd</Message>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">xsd cxx-tree --generate-ostream --generate-serialization library.xsd</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">library.hxx;library.cxx;%(Outputs)</Outputs>
+ </CustomBuild>
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="Readme.txt" />
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project>
\ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/dbxml/dbxml-10.0.vcxproj.filters b/xsd/dist/examples/cxx/tree/dbxml/dbxml-10.0.vcxproj.filters new file mode 100644 index 0000000..b1f4731 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/dbxml/dbxml-10.0.vcxproj.filters @@ -0,0 +1,38 @@ +<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="Source Files">
+ <UniqueIdentifier>{19D063BE-083B-4E8A-89F8-D87CC43CB197}</UniqueIdentifier>
+ <Extensions>cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+ </Filter>
+ <Filter Include="Header Files">
+ <UniqueIdentifier>{E11762CD-4895-44DE-AA13-48BC7AAFC419}</UniqueIdentifier>
+ <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
+ </Filter>
+ <Filter Include="Schema Files">
+ <UniqueIdentifier>{e64ee5c7-1fea-48c3-92f2-3b85fdd87547}</UniqueIdentifier>
+ <Extensions>xsd</Extensions>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="driver.cxx">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="library.cxx">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="library.hxx">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="Readme.txt" />
+ </ItemGroup>
+ <ItemGroup>
+ <CustomBuild Include="library.xsd">
+ <Filter>Schema Files</Filter>
+ </CustomBuild>
+ </ItemGroup>
+</Project>
\ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/dbxml/dbxml-7.1.sln b/xsd/dist/examples/cxx/tree/dbxml/dbxml-7.1.sln new file mode 100644 index 0000000..8af0222 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/dbxml/dbxml-7.1.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 8.00
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "dbxml", "dbxml-7.1.vcproj", "{96CDC9C8-FC31-40B8-BDD0-1751712ED704}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Global
+ GlobalSection(SolutionConfiguration) = preSolution
+ Debug = Debug
+ Release = Release
+ EndGlobalSection
+ GlobalSection(ProjectConfiguration) = postSolution
+ {96CDC9C8-FC31-40B8-BDD0-1751712ED704}.Debug.ActiveCfg = Debug|Win32
+ {96CDC9C8-FC31-40B8-BDD0-1751712ED704}.Debug.Build.0 = Debug|Win32
+ {96CDC9C8-FC31-40B8-BDD0-1751712ED704}.Release.ActiveCfg = Release|Win32
+ {96CDC9C8-FC31-40B8-BDD0-1751712ED704}.Release.Build.0 = Release|Win32
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ EndGlobalSection
+ GlobalSection(ExtensibilityAddIns) = postSolution
+ EndGlobalSection
+EndGlobal
diff --git a/xsd/dist/examples/cxx/tree/dbxml/dbxml-7.1.vcproj b/xsd/dist/examples/cxx/tree/dbxml/dbxml-7.1.vcproj new file mode 100644 index 0000000..c0acf22 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/dbxml/dbxml-7.1.vcproj @@ -0,0 +1,164 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="dbxml"
+ ProjectGUID="{96CDC9C8-FC31-40B8-BDD0-1751712ED704}"
+ RootNamespace="dbxml"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;DBXML_DOM"
+ MinimalRebuild="TRUE"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ RuntimeTypeInfo="TRUE"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="4"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="libdbxml23d.lib libdb45d.lib xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="TRUE"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;DBXML_DOM"
+ RuntimeLibrary="2"
+ RuntimeTypeInfo="TRUE"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="3"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="libdbxml23.lib libdb45.lib xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{19D063BE-083B-4E8A-89F8-D87CC43CB197}">
+ <File
+ RelativePath=".\driver.cxx">
+ </File>
+ <File
+ RelativePath=".\library.cxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{E11762CD-4895-44DE-AA13-48BC7AAFC419}">
+ <File
+ RelativePath=".\library.hxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd">
+ <File
+ RelativePath=".\library.xsd">
+ <FileConfiguration
+ Name="Debug|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree --generate-ostream --generate-serialization --generate-intellisense library.xsd"
+ Outputs="library.hxx;library.cxx"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree --generate-ostream --generate-serialization --generate-intellisense library.xsd"
+ Outputs="library.hxx;library.cxx"/>
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/dbxml/dbxml-8.0.sln b/xsd/dist/examples/cxx/tree/dbxml/dbxml-8.0.sln new file mode 100644 index 0000000..b217889 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/dbxml/dbxml-8.0.sln @@ -0,0 +1,25 @@ +Microsoft Visual Studio Solution File, Format Version 9.00
+# Visual Studio 2005
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "dbxml", "dbxml-8.0.vcproj", "{96CDC9C8-FC31-40B8-BDD0-1751712ED704}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Debug|x64 = Debug|x64
+ Release|Win32 = Release|Win32
+ Release|x64 = Release|x64
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {96CDC9C8-FC31-40B8-BDD0-1751712ED704}.Debug|Win32.ActiveCfg = Debug|Win32
+ {96CDC9C8-FC31-40B8-BDD0-1751712ED704}.Debug|Win32.Build.0 = Debug|Win32
+ {96CDC9C8-FC31-40B8-BDD0-1751712ED704}.Debug|x64.ActiveCfg = Debug|x64
+ {96CDC9C8-FC31-40B8-BDD0-1751712ED704}.Debug|x64.Build.0 = Debug|x64
+ {96CDC9C8-FC31-40B8-BDD0-1751712ED704}.Release|Win32.ActiveCfg = Release|Win32
+ {96CDC9C8-FC31-40B8-BDD0-1751712ED704}.Release|Win32.Build.0 = Release|Win32
+ {96CDC9C8-FC31-40B8-BDD0-1751712ED704}.Release|x64.ActiveCfg = Release|x64
+ {96CDC9C8-FC31-40B8-BDD0-1751712ED704}.Release|x64.Build.0 = Release|x64
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/xsd/dist/examples/cxx/tree/dbxml/dbxml-8.0.vcproj b/xsd/dist/examples/cxx/tree/dbxml/dbxml-8.0.vcproj new file mode 100644 index 0000000..68ccebf --- /dev/null +++ b/xsd/dist/examples/cxx/tree/dbxml/dbxml-8.0.vcproj @@ -0,0 +1,423 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="dbxml"
+ ProjectGUID="{96CDC9C8-FC31-40B8-BDD0-1751712ED704}"
+ RootNamespace="dbxml"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;DBXML_DOM"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="libdbxml23d.lib libdb45d.lib xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;DBXML_DOM"
+ RuntimeLibrary="2"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="libdbxml23.lib libdb45.lib xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;DBXML_DOM"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="libdbxml23d.lib libdb45d.lib xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;DBXML_DOM"
+ RuntimeLibrary="2"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="libdbxml23.lib libdb45.lib xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{19D063BE-083B-4E8A-89F8-D87CC43CB197}"
+ >
+ <File
+ RelativePath=".\driver.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\library.cxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{E11762CD-4895-44DE-AA13-48BC7AAFC419}"
+ >
+ <File
+ RelativePath=".\library.hxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd"
+ >
+ <File
+ RelativePath=".\library.xsd"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree --generate-ostream --generate-serialization --generate-intellisense library.xsd"
+ Outputs="library.hxx;library.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree --generate-ostream --generate-serialization --generate-intellisense library.xsd"
+ Outputs="library.hxx;library.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree --generate-ostream --generate-serialization --generate-intellisense library.xsd"
+ Outputs="library.hxx;library.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree --generate-ostream --generate-serialization --generate-intellisense library.xsd"
+ Outputs="library.hxx;library.cxx"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/dbxml/dbxml-9.0.sln b/xsd/dist/examples/cxx/tree/dbxml/dbxml-9.0.sln new file mode 100644 index 0000000..89e242e --- /dev/null +++ b/xsd/dist/examples/cxx/tree/dbxml/dbxml-9.0.sln @@ -0,0 +1,25 @@ +Microsoft Visual Studio Solution File, Format Version 10.00
+# Visual Studio 2008
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "dbxml", "dbxml-9.0.vcproj", "{96CDC9C8-FC31-40B8-BDD0-1751712ED704}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Debug|x64 = Debug|x64
+ Release|Win32 = Release|Win32
+ Release|x64 = Release|x64
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {96CDC9C8-FC31-40B8-BDD0-1751712ED704}.Debug|Win32.ActiveCfg = Debug|Win32
+ {96CDC9C8-FC31-40B8-BDD0-1751712ED704}.Debug|Win32.Build.0 = Debug|Win32
+ {96CDC9C8-FC31-40B8-BDD0-1751712ED704}.Debug|x64.ActiveCfg = Debug|x64
+ {96CDC9C8-FC31-40B8-BDD0-1751712ED704}.Debug|x64.Build.0 = Debug|x64
+ {96CDC9C8-FC31-40B8-BDD0-1751712ED704}.Release|Win32.ActiveCfg = Release|Win32
+ {96CDC9C8-FC31-40B8-BDD0-1751712ED704}.Release|Win32.Build.0 = Release|Win32
+ {96CDC9C8-FC31-40B8-BDD0-1751712ED704}.Release|x64.ActiveCfg = Release|x64
+ {96CDC9C8-FC31-40B8-BDD0-1751712ED704}.Release|x64.Build.0 = Release|x64
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/xsd/dist/examples/cxx/tree/dbxml/dbxml-9.0.vcproj b/xsd/dist/examples/cxx/tree/dbxml/dbxml-9.0.vcproj new file mode 100644 index 0000000..7068154 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/dbxml/dbxml-9.0.vcproj @@ -0,0 +1,420 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="dbxml"
+ ProjectGUID="{96CDC9C8-FC31-40B8-BDD0-1751712ED704}"
+ RootNamespace="dbxml"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;DBXML_DOM"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="libdbxml23d.lib libdb45d.lib xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;DBXML_DOM"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="libdbxml23d.lib libdb45d.lib xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;DBXML_DOM"
+ RuntimeLibrary="2"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="libdbxml23.lib libdb45.lib xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;DBXML_DOM"
+ RuntimeLibrary="2"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="libdbxml23.lib libdb45.lib xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{19D063BE-083B-4E8A-89F8-D87CC43CB197}"
+ >
+ <File
+ RelativePath=".\driver.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\library.cxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{E11762CD-4895-44DE-AA13-48BC7AAFC419}"
+ >
+ <File
+ RelativePath=".\library.hxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd"
+ >
+ <File
+ RelativePath=".\library.xsd"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree --generate-ostream --generate-serialization library.xsd"
+ Outputs="library.hxx;library.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree --generate-ostream --generate-serialization library.xsd"
+ Outputs="library.hxx;library.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree --generate-ostream --generate-serialization library.xsd"
+ Outputs="library.hxx;library.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree --generate-ostream --generate-serialization library.xsd"
+ Outputs="library.hxx;library.cxx"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/dbxml/makefile b/xsd/dist/examples/cxx/tree/dbxml/makefile new file mode 100644 index 0000000..501bddf --- /dev/null +++ b/xsd/dist/examples/cxx/tree/dbxml/makefile @@ -0,0 +1,33 @@ +root := ../../.. + +include $(root)/build/cxx/rules.make +include $(root)/build/xsd/tree-rules.make + + +override XSDFLAGS += --generate-ostream --generate-serialization +override CPPFLAGS += -DDBXML_DOM +override LIBS += -ldbxml -lxqilla -ldb_cxx -ldb + + +# Build. +# +driver: driver.o library.o + +library.o: library.cxx library.hxx +driver.o: driver.cxx library.hxx + +library.cxx library.hxx: library.xsd + + +# Test +# +.PHONY: test +test: driver + ./driver + + +# Clean. +# +.PHONY: clean +clean: + rm -f library.o library.?xx driver.o driver new.dbxml diff --git a/xsd/dist/examples/cxx/tree/embedded/embedded-10.0.sln b/xsd/dist/examples/cxx/tree/embedded/embedded-10.0.sln new file mode 100644 index 0000000..bf8c3e2 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/embedded/embedded-10.0.sln @@ -0,0 +1,35 @@ +Microsoft Visual Studio Solution File, Format Version 11.00
+# Visual Studio 2010
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xsdbin", "xsdbin-10.0.vcxproj", "{A3F6E060-D536-4A43-AF4B-89063F65DE91}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "embedded", "embedded-10.0.vcxproj", "{9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Debug|x64 = Debug|x64
+ Release|Win32 = Release|Win32
+ Release|x64 = Release|x64
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {A3F6E060-D536-4A43-AF4B-89063F65DE91}.Debug|Win32.ActiveCfg = Debug|Win32
+ {A3F6E060-D536-4A43-AF4B-89063F65DE91}.Debug|Win32.Build.0 = Debug|Win32
+ {A3F6E060-D536-4A43-AF4B-89063F65DE91}.Debug|x64.ActiveCfg = Debug|x64
+ {A3F6E060-D536-4A43-AF4B-89063F65DE91}.Debug|x64.Build.0 = Debug|x64
+ {A3F6E060-D536-4A43-AF4B-89063F65DE91}.Release|Win32.ActiveCfg = Release|Win32
+ {A3F6E060-D536-4A43-AF4B-89063F65DE91}.Release|Win32.Build.0 = Release|Win32
+ {A3F6E060-D536-4A43-AF4B-89063F65DE91}.Release|x64.ActiveCfg = Release|x64
+ {A3F6E060-D536-4A43-AF4B-89063F65DE91}.Release|x64.Build.0 = Release|x64
+ {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}.Debug|Win32.ActiveCfg = Debug|Win32
+ {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}.Debug|Win32.Build.0 = Debug|Win32
+ {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}.Debug|x64.ActiveCfg = Debug|x64
+ {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}.Debug|x64.Build.0 = Debug|x64
+ {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}.Release|Win32.ActiveCfg = Release|Win32
+ {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}.Release|Win32.Build.0 = Release|Win32
+ {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}.Release|x64.ActiveCfg = Release|x64
+ {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}.Release|x64.Build.0 = Release|x64
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/xsd/dist/examples/cxx/tree/embedded/embedded-10.0.vcxproj b/xsd/dist/examples/cxx/tree/embedded/embedded-10.0.vcxproj new file mode 100644 index 0000000..3cd8fd2 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/embedded/embedded-10.0.vcxproj @@ -0,0 +1,219 @@ +<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectName>embedded</ProjectName>
+ <ProjectGuid>{9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}</ProjectGuid>
+ <RootNamespace>embedded</RootNamespace>
+ <Keyword>Win32Proj</Keyword>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">driver</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">driver</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">driver</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">driver</TargetName>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Debug\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Debug\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)\$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)\$(Configuration)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Release\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Release\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)\$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)\$(Configuration)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <RuntimeTypeInfo>true</RuntimeTypeInfo>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>xerces-c_3D.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)driver.pdb</ProgramDatabaseFile>
+ <SubSystem>Console</SubSystem>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <RuntimeTypeInfo>true</RuntimeTypeInfo>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>xerces-c_3D.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)driver.pdb</ProgramDatabaseFile>
+ <SubSystem>Console</SubSystem>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <RuntimeTypeInfo>true</RuntimeTypeInfo>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>xerces-c_3.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <RuntimeTypeInfo>true</RuntimeTypeInfo>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>xerces-c_3.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="driver.cxx" />
+ <ClCompile Include="library.cxx" />
+ <ClCompile Include="library-schema.cxx" />
+ <ClCompile Include="grammar-input-stream.cxx" />
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="library.hxx" />
+ <ClInclude Include="library-schema.hxx" />
+ <ClInclude Include="grammar-input-stream.hxx" />
+ </ItemGroup>
+ <ItemGroup>
+ <CustomBuild Include="library.xsd">
+ <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">xsd library.xsd</Message>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">xsd cxx-tree library.xsd && xsdbin.exe library.xsd</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">library.hxx;library.cxx;library-schema.hxx;library-schema.cxx;%(Outputs)</Outputs>
+ <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">xsd library.xsd</Message>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">xsd cxx-tree library.xsd && xsdbin.exe library.xsd</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">library.hxx;library.cxx;library-schema.hxx;library-schema.cxx;%(Outputs)</Outputs>
+ <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">xsd library.xsd</Message>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">xsd cxx-tree library.xsd && xsdbin.exe library.xsd</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">library.hxx;library.cxx;library-schema.hxx;library-schema.cxx;%(Outputs)</Outputs>
+ <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">xsd library.xsd</Message>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">xsd cxx-tree library.xsd && xsdbin.exe library.xsd</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">library.hxx;library.cxx;library-schema.hxx;library-schema.cxx;%(Outputs)</Outputs>
+ </CustomBuild>
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="Readme.txt" />
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="xsdbin-10.0.vcxproj">
+ <Project>{a3f6e060-d536-4a43-af4b-89063f65de91}</Project>
+ <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
+ </ProjectReference>
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project>
\ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/embedded/embedded-10.0.vcxproj.filters b/xsd/dist/examples/cxx/tree/embedded/embedded-10.0.vcxproj.filters new file mode 100644 index 0000000..42beedc --- /dev/null +++ b/xsd/dist/examples/cxx/tree/embedded/embedded-10.0.vcxproj.filters @@ -0,0 +1,50 @@ +<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="Source Files">
+ <UniqueIdentifier>{1D046D9C-4D20-4084-A1F4-90488E0B0669}</UniqueIdentifier>
+ <Extensions>cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+ </Filter>
+ <Filter Include="Header Files">
+ <UniqueIdentifier>{E2D458FA-56FA-4268-998B-BF3934169712}</UniqueIdentifier>
+ <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
+ </Filter>
+ <Filter Include="Schema Files">
+ <UniqueIdentifier>{a57574af-3c36-408f-9f8e-5140fe6abbf6}</UniqueIdentifier>
+ <Extensions>xsd</Extensions>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="driver.cxx">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="library.cxx">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="library-schema.cxx">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="grammar-input-stream.cxx">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="library.hxx">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="library-schema.hxx">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="grammar-input-stream.hxx">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="Readme.txt" />
+ </ItemGroup>
+ <ItemGroup>
+ <CustomBuild Include="library.xsd">
+ <Filter>Schema Files</Filter>
+ </CustomBuild>
+ </ItemGroup>
+</Project>
\ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/embedded/embedded-7.1.sln b/xsd/dist/examples/cxx/tree/embedded/embedded-7.1.sln new file mode 100644 index 0000000..86e246f --- /dev/null +++ b/xsd/dist/examples/cxx/tree/embedded/embedded-7.1.sln @@ -0,0 +1,30 @@ +Microsoft Visual Studio Solution File, Format Version 8.00
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xsdbin", "xsdbin-7.1.vcproj", "{A3F6E060-D536-4A43-AF4B-89063F65DE91}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "embedded", "embedded-7.1.vcproj", "{9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}"
+ ProjectSection(ProjectDependencies) = postProject
+ {A3F6E060-D536-4A43-AF4B-89063F65DE91} = {A3F6E060-D536-4A43-AF4B-89063F65DE91}
+ EndProjectSection
+EndProject
+Global
+ GlobalSection(SolutionConfiguration) = preSolution
+ Debug = Debug
+ Release = Release
+ EndGlobalSection
+ GlobalSection(ProjectConfiguration) = postSolution
+ {A3F6E060-D536-4A43-AF4B-89063F65DE91}.Debug.ActiveCfg = Debug|Win32
+ {A3F6E060-D536-4A43-AF4B-89063F65DE91}.Debug.Build.0 = Debug|Win32
+ {A3F6E060-D536-4A43-AF4B-89063F65DE91}.Release.ActiveCfg = Release|Win32
+ {A3F6E060-D536-4A43-AF4B-89063F65DE91}.Release.Build.0 = Release|Win32
+ {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}.Debug.ActiveCfg = Debug|Win32
+ {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}.Debug.Build.0 = Debug|Win32
+ {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}.Release.ActiveCfg = Release|Win32
+ {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}.Release.Build.0 = Release|Win32
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ EndGlobalSection
+ GlobalSection(ExtensibilityAddIns) = postSolution
+ EndGlobalSection
+EndGlobal
diff --git a/xsd/dist/examples/cxx/tree/embedded/embedded-7.1.vcproj b/xsd/dist/examples/cxx/tree/embedded/embedded-7.1.vcproj new file mode 100644 index 0000000..bce7897 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/embedded/embedded-7.1.vcproj @@ -0,0 +1,176 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="embedded"
+ ProjectGUID="{9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}"
+ RootNamespace="embedded"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="TRUE"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ RuntimeTypeInfo="TRUE"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="4"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="TRUE"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ RuntimeTypeInfo="TRUE"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="3"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{1D046D9C-4D20-4084-A1F4-90488E0B0669}">
+ <File
+ RelativePath=".\driver.cxx">
+ </File>
+ <File
+ RelativePath=".\library.cxx">
+ </File>
+ <File
+ RelativePath=".\library-schema.cxx">
+ </File>
+ <File
+ RelativePath=".\grammar-input-stream.cxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{E2D458FA-56FA-4268-998B-BF3934169712}">
+ <File
+ RelativePath=".\library.hxx">
+ </File>
+ <File
+ RelativePath=".\library-schema.hxx">
+ </File>
+ <File
+ RelativePath=".\grammar-input-stream.hxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd">
+ <File
+ RelativePath=".\library.xsd">
+ <FileConfiguration
+ Name="Debug|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree --generate-intellisense library.xsd && xsdbin.exe library.xsd"
+ Outputs="library.hxx;library.cxx;library-schema.hxx;library-schema.cxx"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree --generate-intellisense library.xsd && xsdbin.exe library.xsd"
+ Outputs="library.hxx;library.cxx;library-schema.hxx;library-schema.cxx"/>
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/embedded/embedded-8.0.sln b/xsd/dist/examples/cxx/tree/embedded/embedded-8.0.sln new file mode 100644 index 0000000..50b49af --- /dev/null +++ b/xsd/dist/examples/cxx/tree/embedded/embedded-8.0.sln @@ -0,0 +1,38 @@ +Microsoft Visual Studio Solution File, Format Version 9.00
+# Visual Studio 2005
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xsdbin", "xsdbin-8.0.vcproj", "{A3F6E060-D536-4A43-AF4B-89063F65DE91}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "embedded", "embedded-8.0.vcproj", "{9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}"
+ ProjectSection(ProjectDependencies) = postProject
+ {A3F6E060-D536-4A43-AF4B-89063F65DE91} = {A3F6E060-D536-4A43-AF4B-89063F65DE91}
+ EndProjectSection
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Debug|x64 = Debug|x64
+ Release|Win32 = Release|Win32
+ Release|x64 = Release|x64
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {A3F6E060-D536-4A43-AF4B-89063F65DE91}.Debug|Win32.ActiveCfg = Debug|Win32
+ {A3F6E060-D536-4A43-AF4B-89063F65DE91}.Debug|Win32.Build.0 = Debug|Win32
+ {A3F6E060-D536-4A43-AF4B-89063F65DE91}.Debug|x64.ActiveCfg = Debug|x64
+ {A3F6E060-D536-4A43-AF4B-89063F65DE91}.Debug|x64.Build.0 = Debug|x64
+ {A3F6E060-D536-4A43-AF4B-89063F65DE91}.Release|Win32.ActiveCfg = Release|Win32
+ {A3F6E060-D536-4A43-AF4B-89063F65DE91}.Release|Win32.Build.0 = Release|Win32
+ {A3F6E060-D536-4A43-AF4B-89063F65DE91}.Release|x64.ActiveCfg = Release|x64
+ {A3F6E060-D536-4A43-AF4B-89063F65DE91}.Release|x64.Build.0 = Release|x64
+ {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}.Debug|Win32.ActiveCfg = Debug|Win32
+ {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}.Debug|Win32.Build.0 = Debug|Win32
+ {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}.Debug|x64.ActiveCfg = Debug|x64
+ {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}.Debug|x64.Build.0 = Debug|x64
+ {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}.Release|Win32.ActiveCfg = Release|Win32
+ {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}.Release|Win32.Build.0 = Release|Win32
+ {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}.Release|x64.ActiveCfg = Release|x64
+ {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}.Release|x64.Build.0 = Release|x64
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/xsd/dist/examples/cxx/tree/embedded/embedded-8.0.vcproj b/xsd/dist/examples/cxx/tree/embedded/embedded-8.0.vcproj new file mode 100644 index 0000000..d0df22c --- /dev/null +++ b/xsd/dist/examples/cxx/tree/embedded/embedded-8.0.vcproj @@ -0,0 +1,439 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="embedded"
+ ProjectGUID="{9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}"
+ RootNamespace="embedded"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{1D046D9C-4D20-4084-A1F4-90488E0B0669}"
+ >
+ <File
+ RelativePath=".\driver.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\library.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\library-schema.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\grammar-input-stream.cxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{E2D458FA-56FA-4268-998B-BF3934169712}"
+ >
+ <File
+ RelativePath=".\library.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\library-schema.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\grammar-input-stream.hxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd"
+ >
+ <File
+ RelativePath=".\library.xsd"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree --generate-intellisense library.xsd && xsdbin.exe library.xsd"
+ Outputs="library.hxx;library.cxx;library-schema.hxx;library-schema.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree --generate-intellisense library.xsd && xsdbin.exe library.xsd"
+ Outputs="library.hxx;library.cxx;library-schema.hxx;library-schema.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree --generate-intellisense library.xsd && xsdbin.exe library.xsd"
+ Outputs="library.hxx;library.cxx;library-schema.hxx;library-schema.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree --generate-intellisense library.xsd && xsdbin.exe library.xsd"
+ Outputs="library.hxx;library.cxx;library-schema.hxx;library-schema.cxx"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/embedded/embedded-9.0.sln b/xsd/dist/examples/cxx/tree/embedded/embedded-9.0.sln new file mode 100644 index 0000000..bf0d15b --- /dev/null +++ b/xsd/dist/examples/cxx/tree/embedded/embedded-9.0.sln @@ -0,0 +1,38 @@ +Microsoft Visual Studio Solution File, Format Version 10.00
+# Visual Studio 2008
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xsdbin", "xsdbin-9.0.vcproj", "{A3F6E060-D536-4A43-AF4B-89063F65DE91}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "embedded", "embedded-9.0.vcproj", "{9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}"
+ ProjectSection(ProjectDependencies) = postProject
+ {A3F6E060-D536-4A43-AF4B-89063F65DE91} = {A3F6E060-D536-4A43-AF4B-89063F65DE91}
+ EndProjectSection
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Debug|x64 = Debug|x64
+ Release|Win32 = Release|Win32
+ Release|x64 = Release|x64
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {A3F6E060-D536-4A43-AF4B-89063F65DE91}.Debug|Win32.ActiveCfg = Debug|Win32
+ {A3F6E060-D536-4A43-AF4B-89063F65DE91}.Debug|Win32.Build.0 = Debug|Win32
+ {A3F6E060-D536-4A43-AF4B-89063F65DE91}.Debug|x64.ActiveCfg = Debug|x64
+ {A3F6E060-D536-4A43-AF4B-89063F65DE91}.Debug|x64.Build.0 = Debug|x64
+ {A3F6E060-D536-4A43-AF4B-89063F65DE91}.Release|Win32.ActiveCfg = Release|Win32
+ {A3F6E060-D536-4A43-AF4B-89063F65DE91}.Release|Win32.Build.0 = Release|Win32
+ {A3F6E060-D536-4A43-AF4B-89063F65DE91}.Release|x64.ActiveCfg = Release|x64
+ {A3F6E060-D536-4A43-AF4B-89063F65DE91}.Release|x64.Build.0 = Release|x64
+ {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}.Debug|Win32.ActiveCfg = Debug|Win32
+ {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}.Debug|Win32.Build.0 = Debug|Win32
+ {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}.Debug|x64.ActiveCfg = Debug|x64
+ {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}.Debug|x64.Build.0 = Debug|x64
+ {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}.Release|Win32.ActiveCfg = Release|Win32
+ {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}.Release|Win32.Build.0 = Release|Win32
+ {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}.Release|x64.ActiveCfg = Release|x64
+ {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}.Release|x64.Build.0 = Release|x64
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/xsd/dist/examples/cxx/tree/embedded/embedded-9.0.vcproj b/xsd/dist/examples/cxx/tree/embedded/embedded-9.0.vcproj new file mode 100644 index 0000000..bf5498c --- /dev/null +++ b/xsd/dist/examples/cxx/tree/embedded/embedded-9.0.vcproj @@ -0,0 +1,436 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="embedded"
+ ProjectGUID="{9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}"
+ RootNamespace="embedded"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{1D046D9C-4D20-4084-A1F4-90488E0B0669}"
+ >
+ <File
+ RelativePath=".\driver.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\library.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\library-schema.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\grammar-input-stream.cxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{E2D458FA-56FA-4268-998B-BF3934169712}"
+ >
+ <File
+ RelativePath=".\library.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\library-schema.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\grammar-input-stream.hxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd"
+ >
+ <File
+ RelativePath=".\library.xsd"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree library.xsd && xsdbin.exe library.xsd"
+ Outputs="library.hxx;library.cxx;library-schema.hxx;library-schema.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree library.xsd && xsdbin.exe library.xsd"
+ Outputs="library.hxx;library.cxx;library-schema.hxx;library-schema.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree library.xsd && xsdbin.exe library.xsd"
+ Outputs="library.hxx;library.cxx;library-schema.hxx;library-schema.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree library.xsd && xsdbin.exe library.xsd"
+ Outputs="library.hxx;library.cxx;library-schema.hxx;library-schema.cxx"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/embedded/embedded-xerces2-7.1.sln b/xsd/dist/examples/cxx/tree/embedded/embedded-xerces2-7.1.sln new file mode 100644 index 0000000..aecc9e2 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/embedded/embedded-xerces2-7.1.sln @@ -0,0 +1,30 @@ +Microsoft Visual Studio Solution File, Format Version 8.00
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xsdbin", "xsdbin-xerces2-7.1.vcproj", "{A3F6E060-D536-4A43-AF4B-89063F65DE91}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "embedded", "embedded-xerces2-7.1.vcproj", "{9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}"
+ ProjectSection(ProjectDependencies) = postProject
+ {A3F6E060-D536-4A43-AF4B-89063F65DE91} = {A3F6E060-D536-4A43-AF4B-89063F65DE91}
+ EndProjectSection
+EndProject
+Global
+ GlobalSection(SolutionConfiguration) = preSolution
+ Debug = Debug
+ Release = Release
+ EndGlobalSection
+ GlobalSection(ProjectConfiguration) = postSolution
+ {A3F6E060-D536-4A43-AF4B-89063F65DE91}.Debug.ActiveCfg = Debug|Win32
+ {A3F6E060-D536-4A43-AF4B-89063F65DE91}.Debug.Build.0 = Debug|Win32
+ {A3F6E060-D536-4A43-AF4B-89063F65DE91}.Release.ActiveCfg = Release|Win32
+ {A3F6E060-D536-4A43-AF4B-89063F65DE91}.Release.Build.0 = Release|Win32
+ {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}.Debug.ActiveCfg = Debug|Win32
+ {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}.Debug.Build.0 = Debug|Win32
+ {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}.Release.ActiveCfg = Release|Win32
+ {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}.Release.Build.0 = Release|Win32
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ EndGlobalSection
+ GlobalSection(ExtensibilityAddIns) = postSolution
+ EndGlobalSection
+EndGlobal
diff --git a/xsd/dist/examples/cxx/tree/embedded/embedded-xerces2-7.1.vcproj b/xsd/dist/examples/cxx/tree/embedded/embedded-xerces2-7.1.vcproj new file mode 100644 index 0000000..1b1b4f9 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/embedded/embedded-xerces2-7.1.vcproj @@ -0,0 +1,176 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="embedded"
+ ProjectGUID="{9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}"
+ RootNamespace="embedded"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="TRUE"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ RuntimeTypeInfo="TRUE"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="4"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="TRUE"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ RuntimeTypeInfo="TRUE"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="3"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{1D046D9C-4D20-4084-A1F4-90488E0B0669}">
+ <File
+ RelativePath=".\driver.cxx">
+ </File>
+ <File
+ RelativePath=".\library.cxx">
+ </File>
+ <File
+ RelativePath=".\library-schema.cxx">
+ </File>
+ <File
+ RelativePath=".\grammar-input-stream.cxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{E2D458FA-56FA-4268-998B-BF3934169712}">
+ <File
+ RelativePath=".\library.hxx">
+ </File>
+ <File
+ RelativePath=".\library-schema.hxx">
+ </File>
+ <File
+ RelativePath=".\grammar-input-stream.hxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd">
+ <File
+ RelativePath=".\library.xsd">
+ <FileConfiguration
+ Name="Debug|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree --generate-intellisense library.xsd && xsdbin.exe library.xsd"
+ Outputs="library.hxx;library.cxx;library-schema.hxx;library-schema.cxx"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree --generate-intellisense library.xsd && xsdbin.exe library.xsd"
+ Outputs="library.hxx;library.cxx;library-schema.hxx;library-schema.cxx"/>
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/embedded/embedded-xerces2-8.0.sln b/xsd/dist/examples/cxx/tree/embedded/embedded-xerces2-8.0.sln new file mode 100644 index 0000000..8f5e370 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/embedded/embedded-xerces2-8.0.sln @@ -0,0 +1,38 @@ +Microsoft Visual Studio Solution File, Format Version 9.00
+# Visual Studio 2005
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xsdbin", "xsdbin-xerces2-8.0.vcproj", "{A3F6E060-D536-4A43-AF4B-89063F65DE91}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "embedded", "embedded-xerces2-8.0.vcproj", "{9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}"
+ ProjectSection(ProjectDependencies) = postProject
+ {A3F6E060-D536-4A43-AF4B-89063F65DE91} = {A3F6E060-D536-4A43-AF4B-89063F65DE91}
+ EndProjectSection
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Debug|x64 = Debug|x64
+ Release|Win32 = Release|Win32
+ Release|x64 = Release|x64
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {A3F6E060-D536-4A43-AF4B-89063F65DE91}.Debug|Win32.ActiveCfg = Debug|Win32
+ {A3F6E060-D536-4A43-AF4B-89063F65DE91}.Debug|Win32.Build.0 = Debug|Win32
+ {A3F6E060-D536-4A43-AF4B-89063F65DE91}.Debug|x64.ActiveCfg = Debug|x64
+ {A3F6E060-D536-4A43-AF4B-89063F65DE91}.Debug|x64.Build.0 = Debug|x64
+ {A3F6E060-D536-4A43-AF4B-89063F65DE91}.Release|Win32.ActiveCfg = Release|Win32
+ {A3F6E060-D536-4A43-AF4B-89063F65DE91}.Release|Win32.Build.0 = Release|Win32
+ {A3F6E060-D536-4A43-AF4B-89063F65DE91}.Release|x64.ActiveCfg = Release|x64
+ {A3F6E060-D536-4A43-AF4B-89063F65DE91}.Release|x64.Build.0 = Release|x64
+ {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}.Debug|Win32.ActiveCfg = Debug|Win32
+ {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}.Debug|Win32.Build.0 = Debug|Win32
+ {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}.Debug|x64.ActiveCfg = Debug|x64
+ {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}.Debug|x64.Build.0 = Debug|x64
+ {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}.Release|Win32.ActiveCfg = Release|Win32
+ {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}.Release|Win32.Build.0 = Release|Win32
+ {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}.Release|x64.ActiveCfg = Release|x64
+ {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}.Release|x64.Build.0 = Release|x64
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/xsd/dist/examples/cxx/tree/embedded/embedded-xerces2-8.0.vcproj b/xsd/dist/examples/cxx/tree/embedded/embedded-xerces2-8.0.vcproj new file mode 100644 index 0000000..8f890bd --- /dev/null +++ b/xsd/dist/examples/cxx/tree/embedded/embedded-xerces2-8.0.vcproj @@ -0,0 +1,439 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="embedded"
+ ProjectGUID="{9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}"
+ RootNamespace="embedded"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{1D046D9C-4D20-4084-A1F4-90488E0B0669}"
+ >
+ <File
+ RelativePath=".\driver.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\library.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\library-schema.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\grammar-input-stream.cxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{E2D458FA-56FA-4268-998B-BF3934169712}"
+ >
+ <File
+ RelativePath=".\library.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\library-schema.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\grammar-input-stream.hxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd"
+ >
+ <File
+ RelativePath=".\library.xsd"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree --generate-intellisense library.xsd && xsdbin.exe library.xsd"
+ Outputs="library.hxx;library.cxx;library-schema.hxx;library-schema.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree --generate-intellisense library.xsd && xsdbin.exe library.xsd"
+ Outputs="library.hxx;library.cxx;library-schema.hxx;library-schema.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree --generate-intellisense library.xsd && xsdbin.exe library.xsd"
+ Outputs="library.hxx;library.cxx;library-schema.hxx;library-schema.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree --generate-intellisense library.xsd && xsdbin.exe library.xsd"
+ Outputs="library.hxx;library.cxx;library-schema.hxx;library-schema.cxx"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/embedded/embedded-xerces2-9.0.sln b/xsd/dist/examples/cxx/tree/embedded/embedded-xerces2-9.0.sln new file mode 100644 index 0000000..f3e16d2 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/embedded/embedded-xerces2-9.0.sln @@ -0,0 +1,38 @@ +Microsoft Visual Studio Solution File, Format Version 10.00
+# Visual Studio 2008
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xsdbin", "xsdbin-xerces2-9.0.vcproj", "{A3F6E060-D536-4A43-AF4B-89063F65DE91}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "embedded", "embedded-xerces2-9.0.vcproj", "{9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}"
+ ProjectSection(ProjectDependencies) = postProject
+ {A3F6E060-D536-4A43-AF4B-89063F65DE91} = {A3F6E060-D536-4A43-AF4B-89063F65DE91}
+ EndProjectSection
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Debug|x64 = Debug|x64
+ Release|Win32 = Release|Win32
+ Release|x64 = Release|x64
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {A3F6E060-D536-4A43-AF4B-89063F65DE91}.Debug|Win32.ActiveCfg = Debug|Win32
+ {A3F6E060-D536-4A43-AF4B-89063F65DE91}.Debug|Win32.Build.0 = Debug|Win32
+ {A3F6E060-D536-4A43-AF4B-89063F65DE91}.Debug|x64.ActiveCfg = Debug|x64
+ {A3F6E060-D536-4A43-AF4B-89063F65DE91}.Debug|x64.Build.0 = Debug|x64
+ {A3F6E060-D536-4A43-AF4B-89063F65DE91}.Release|Win32.ActiveCfg = Release|Win32
+ {A3F6E060-D536-4A43-AF4B-89063F65DE91}.Release|Win32.Build.0 = Release|Win32
+ {A3F6E060-D536-4A43-AF4B-89063F65DE91}.Release|x64.ActiveCfg = Release|x64
+ {A3F6E060-D536-4A43-AF4B-89063F65DE91}.Release|x64.Build.0 = Release|x64
+ {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}.Debug|Win32.ActiveCfg = Debug|Win32
+ {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}.Debug|Win32.Build.0 = Debug|Win32
+ {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}.Debug|x64.ActiveCfg = Debug|x64
+ {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}.Debug|x64.Build.0 = Debug|x64
+ {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}.Release|Win32.ActiveCfg = Release|Win32
+ {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}.Release|Win32.Build.0 = Release|Win32
+ {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}.Release|x64.ActiveCfg = Release|x64
+ {9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}.Release|x64.Build.0 = Release|x64
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/xsd/dist/examples/cxx/tree/embedded/embedded-xerces2-9.0.vcproj b/xsd/dist/examples/cxx/tree/embedded/embedded-xerces2-9.0.vcproj new file mode 100644 index 0000000..dcc9fc5 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/embedded/embedded-xerces2-9.0.vcproj @@ -0,0 +1,436 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="embedded"
+ ProjectGUID="{9C8C2AA4-DF31-4884-B3B9-A6A36F3CB429}"
+ RootNamespace="embedded"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{1D046D9C-4D20-4084-A1F4-90488E0B0669}"
+ >
+ <File
+ RelativePath=".\driver.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\library.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\library-schema.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\grammar-input-stream.cxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{E2D458FA-56FA-4268-998B-BF3934169712}"
+ >
+ <File
+ RelativePath=".\library.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\library-schema.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\grammar-input-stream.hxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd"
+ >
+ <File
+ RelativePath=".\library.xsd"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree library.xsd && xsdbin.exe library.xsd"
+ Outputs="library.hxx;library.cxx;library-schema.hxx;library-schema.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree library.xsd && xsdbin.exe library.xsd"
+ Outputs="library.hxx;library.cxx;library-schema.hxx;library-schema.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree library.xsd && xsdbin.exe library.xsd"
+ Outputs="library.hxx;library.cxx;library-schema.hxx;library-schema.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree library.xsd && xsdbin.exe library.xsd"
+ Outputs="library.hxx;library.cxx;library-schema.hxx;library-schema.cxx"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/embedded/makefile b/xsd/dist/examples/cxx/tree/embedded/makefile new file mode 100644 index 0000000..0879da9 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/embedded/makefile @@ -0,0 +1,36 @@ +root := ../../.. + +include $(root)/build/cxx/rules.make +include $(root)/build/xsd/tree-rules.make + + +# Build. +# +driver: driver.o library.o library-schema.o grammar-input-stream.o +xsdbin: xsdbin.o + +library.o: library.cxx library.hxx +driver.o: driver.cxx library.hxx library-schema.hxx +library-schema.o: library-schema.cxx library-schema.hxx +grammar-input-stream.o: grammar-input-stream.cxx grammar-input-stream.hxx + +library.cxx library.hxx: library.xsd +library-schema.cxx library-schema.hxx: library.xsd + +.PRECIOUS: %-schema.cxx %-schema.hxx +%-schema.cxx %-schema.hxx: %.xsd xsdbin + ./xsdbin $< + +# Test +# +.PHONY: test +test: driver library.xml + ./driver library.xml + + +# Clean. +# +.PHONY: clean +clean: + rm -f library.o library.?xx library-schema.?xx driver.o \ +library-schema.o grammar-input-stream.o xsdbin.o xsdbin driver diff --git a/xsd/dist/examples/cxx/tree/embedded/xsdbin-10.0.vcxproj b/xsd/dist/examples/cxx/tree/embedded/xsdbin-10.0.vcxproj new file mode 100644 index 0000000..d9a9da2 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/embedded/xsdbin-10.0.vcxproj @@ -0,0 +1,186 @@ +<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectName>xsdbin</ProjectName>
+ <ProjectGuid>{A3F6E060-D536-4A43-AF4B-89063F65DE91}</ProjectGuid>
+ <RootNamespace>xsdbin</RootNamespace>
+ <Keyword>Win32Proj</Keyword>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">xsdbin</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">xsdbin</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">xsdbin</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">xsdbin</TargetName>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectDir)</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Debug\xsdbin\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(ProjectDir)</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)\$(Configuration)\xsdbin\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(ProjectDir)</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Release\xsdbin\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(ProjectDir)</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)\$(Configuration)\xsdbin\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <RuntimeTypeInfo>true</RuntimeTypeInfo>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>xerces-c_3D.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)xsdbin.pdb</ProgramDatabaseFile>
+ <SubSystem>Console</SubSystem>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <RuntimeTypeInfo>true</RuntimeTypeInfo>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>xerces-c_3D.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)xsdbin.pdb</ProgramDatabaseFile>
+ <SubSystem>Console</SubSystem>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <RuntimeTypeInfo>true</RuntimeTypeInfo>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>xerces-c_3.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <RuntimeTypeInfo>true</RuntimeTypeInfo>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>xerces-c_3.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="xsdbin.cxx" />
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project>
\ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/embedded/xsdbin-10.0.vcxproj.filters b/xsd/dist/examples/cxx/tree/embedded/xsdbin-10.0.vcxproj.filters new file mode 100644 index 0000000..27abb01 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/embedded/xsdbin-10.0.vcxproj.filters @@ -0,0 +1,14 @@ +<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="Source Files">
+ <UniqueIdentifier>{D9727125-E5B7-4777-8EB3-6EE957552516}</UniqueIdentifier>
+ <Extensions>cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="xsdbin.cxx">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ </ItemGroup>
+</Project>
\ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/embedded/xsdbin-7.1.vcproj b/xsd/dist/examples/cxx/tree/embedded/xsdbin-7.1.vcproj new file mode 100644 index 0000000..dea527f --- /dev/null +++ b/xsd/dist/examples/cxx/tree/embedded/xsdbin-7.1.vcproj @@ -0,0 +1,127 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="xsdbin"
+ ProjectGUID="{A3F6E060-D536-4A43-AF4B-89063F65DE91}"
+ RootNamespace="xsdbin"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug\xsdbin"
+ IntermediateDirectory="Debug\xsdbin"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="TRUE"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ RuntimeTypeInfo="TRUE"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="4"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="xsdbin.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="TRUE"
+ ProgramDatabaseFile="$(OutDir)/xsdbin.pdb"
+ SubSystem="1"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release\xsdbin"
+ IntermediateDirectory="Release\xsdbin"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ RuntimeTypeInfo="TRUE"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="3"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="xsdbin.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{D9727125-E5B7-4777-8EB3-6EE957552516}">
+ <File
+ RelativePath=".\xsdbin.cxx">
+ </File>
+ </Filter>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/embedded/xsdbin-8.0.vcproj b/xsd/dist/examples/cxx/tree/embedded/xsdbin-8.0.vcproj new file mode 100644 index 0000000..095024f --- /dev/null +++ b/xsd/dist/examples/cxx/tree/embedded/xsdbin-8.0.vcproj @@ -0,0 +1,356 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="xsdbin"
+ ProjectGUID="{A3F6E060-D536-4A43-AF4B-89063F65DE91}"
+ RootNamespace="xsdbin"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug\xsdbin"
+ IntermediateDirectory="Debug\xsdbin"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="xsdbin.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/xsdbin.pdb"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release\xsdbin"
+ IntermediateDirectory="Release\xsdbin"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="xsdbin.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)\xsdbin"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)\xsdbin"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="xsdbin.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/xsdbin.pdb"
+ SubSystem="1"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)\xsdbin"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)\xsdbin"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="xsdbin.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{D9727125-E5B7-4777-8EB3-6EE957552516}"
+ >
+ <File
+ RelativePath=".\xsdbin.cxx"
+ >
+ </File>
+ </Filter>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/embedded/xsdbin-9.0.vcproj b/xsd/dist/examples/cxx/tree/embedded/xsdbin-9.0.vcproj new file mode 100644 index 0000000..1cb2ead --- /dev/null +++ b/xsd/dist/examples/cxx/tree/embedded/xsdbin-9.0.vcproj @@ -0,0 +1,353 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="xsdbin"
+ ProjectGUID="{A3F6E060-D536-4A43-AF4B-89063F65DE91}"
+ RootNamespace="xsdbin"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug\xsdbin"
+ IntermediateDirectory="Debug\xsdbin"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="xsdbin.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/xsdbin.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)\xsdbin"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)\xsdbin"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="xsdbin.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/xsdbin.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release\xsdbin"
+ IntermediateDirectory="Release\xsdbin"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="xsdbin.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)\xsdbin"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)\xsdbin"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="xsdbin.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{D9727125-E5B7-4777-8EB3-6EE957552516}"
+ >
+ <File
+ RelativePath=".\xsdbin.cxx"
+ >
+ </File>
+ </Filter>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/embedded/xsdbin-xerces2-7.1.vcproj b/xsd/dist/examples/cxx/tree/embedded/xsdbin-xerces2-7.1.vcproj new file mode 100644 index 0000000..8d0e9ec --- /dev/null +++ b/xsd/dist/examples/cxx/tree/embedded/xsdbin-xerces2-7.1.vcproj @@ -0,0 +1,127 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="xsdbin"
+ ProjectGUID="{A3F6E060-D536-4A43-AF4B-89063F65DE91}"
+ RootNamespace="xsdbin"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug\xsdbin"
+ IntermediateDirectory="Debug\xsdbin"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="TRUE"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ RuntimeTypeInfo="TRUE"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="4"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="xsdbin.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="TRUE"
+ ProgramDatabaseFile="$(OutDir)/xsdbin.pdb"
+ SubSystem="1"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release\xsdbin"
+ IntermediateDirectory="Release\xsdbin"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ RuntimeTypeInfo="TRUE"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="3"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="xsdbin.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{D9727125-E5B7-4777-8EB3-6EE957552516}">
+ <File
+ RelativePath=".\xsdbin.cxx">
+ </File>
+ </Filter>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/embedded/xsdbin-xerces2-8.0.vcproj b/xsd/dist/examples/cxx/tree/embedded/xsdbin-xerces2-8.0.vcproj new file mode 100644 index 0000000..f0677fe --- /dev/null +++ b/xsd/dist/examples/cxx/tree/embedded/xsdbin-xerces2-8.0.vcproj @@ -0,0 +1,356 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="xsdbin"
+ ProjectGUID="{A3F6E060-D536-4A43-AF4B-89063F65DE91}"
+ RootNamespace="xsdbin"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug\xsdbin"
+ IntermediateDirectory="Debug\xsdbin"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="xsdbin.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/xsdbin.pdb"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release\xsdbin"
+ IntermediateDirectory="Release\xsdbin"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="xsdbin.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)\xsdbin"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)\xsdbin"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="xsdbin.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/xsdbin.pdb"
+ SubSystem="1"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)\xsdbin"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)\xsdbin"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="xsdbin.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{D9727125-E5B7-4777-8EB3-6EE957552516}"
+ >
+ <File
+ RelativePath=".\xsdbin.cxx"
+ >
+ </File>
+ </Filter>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/embedded/xsdbin-xerces2-9.0.vcproj b/xsd/dist/examples/cxx/tree/embedded/xsdbin-xerces2-9.0.vcproj new file mode 100644 index 0000000..e1292ea --- /dev/null +++ b/xsd/dist/examples/cxx/tree/embedded/xsdbin-xerces2-9.0.vcproj @@ -0,0 +1,353 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="xsdbin"
+ ProjectGUID="{A3F6E060-D536-4A43-AF4B-89063F65DE91}"
+ RootNamespace="xsdbin"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug\xsdbin"
+ IntermediateDirectory="Debug\xsdbin"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="xsdbin.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/xsdbin.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)\xsdbin"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)\xsdbin"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="xsdbin.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/xsdbin.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release\xsdbin"
+ IntermediateDirectory="Release\xsdbin"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="xsdbin.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)\xsdbin"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)\xsdbin"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="xsdbin.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{D9727125-E5B7-4777-8EB3-6EE957552516}"
+ >
+ <File
+ RelativePath=".\xsdbin.cxx"
+ >
+ </File>
+ </Filter>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/hello/hello-10.0.vcxproj b/xsd/dist/examples/cxx/tree/hello/hello-10.0.vcxproj new file mode 100644 index 0000000..1a1ffe8 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/hello/hello-10.0.vcxproj @@ -0,0 +1,209 @@ +<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectName>hello</ProjectName>
+ <ProjectGuid>{538CCAB6-984B-4602-B0D0-985E8FD4FEB9}</ProjectGuid>
+ <RootNamespace>hello</RootNamespace>
+ <Keyword>Win32Proj</Keyword>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">driver</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">driver</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">driver</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">driver</TargetName>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Debug\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Debug\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)\$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)\$(Configuration)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Release\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Release\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)\$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)\$(Configuration)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ <RuntimeTypeInfo>true</RuntimeTypeInfo>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>xerces-c_3D.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)driver.pdb</ProgramDatabaseFile>
+ <SubSystem>Console</SubSystem>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ <RuntimeTypeInfo>true</RuntimeTypeInfo>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>xerces-c_3D.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)driver.pdb</ProgramDatabaseFile>
+ <SubSystem>Console</SubSystem>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <RuntimeTypeInfo>true</RuntimeTypeInfo>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>xerces-c_3.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <RuntimeTypeInfo>true</RuntimeTypeInfo>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>xerces-c_3.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="driver.cxx" />
+ <ClCompile Include="hello.cxx" />
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="hello.hxx" />
+ </ItemGroup>
+ <ItemGroup>
+ <CustomBuild Include="hello.xsd">
+ <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">xsd hello.xsd</Message>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">xsd.exe cxx-tree hello.xsd</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">hello.cxx;hello.hxx;%(Outputs)</Outputs>
+ <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">xsd hello.xsd</Message>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">xsd.exe cxx-tree hello.xsd</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">hello.cxx;hello.hxx;%(Outputs)</Outputs>
+ <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">xsd hello.xsd</Message>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">xsd.exe cxx-tree hello.xsd</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">hello.cxx;hello.hxx;%(Outputs)</Outputs>
+ <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">xsd hello.xsd</Message>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">xsd.exe cxx-tree hello.xsd</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">hello.cxx;hello.hxx;%(Outputs)</Outputs>
+ </CustomBuild>
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="Readme.txt" />
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project>
\ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/hello/hello-10.0.vcxproj.filters b/xsd/dist/examples/cxx/tree/hello/hello-10.0.vcxproj.filters new file mode 100644 index 0000000..620639d --- /dev/null +++ b/xsd/dist/examples/cxx/tree/hello/hello-10.0.vcxproj.filters @@ -0,0 +1,38 @@ +<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="Source Files">
+ <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
+ <Extensions>cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+ </Filter>
+ <Filter Include="Header Files">
+ <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
+ <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
+ </Filter>
+ <Filter Include="Schema Files">
+ <UniqueIdentifier>{d512d9c4-9ddd-4830-a487-1d87db0643d5}</UniqueIdentifier>
+ <Extensions>xsd</Extensions>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="driver.cxx">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="hello.cxx">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="hello.hxx">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="Readme.txt" />
+ </ItemGroup>
+ <ItemGroup>
+ <CustomBuild Include="hello.xsd">
+ <Filter>Schema Files</Filter>
+ </CustomBuild>
+ </ItemGroup>
+</Project>
\ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/hello/hello-7.1.vcproj b/xsd/dist/examples/cxx/tree/hello/hello-7.1.vcproj new file mode 100644 index 0000000..719f0d7 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/hello/hello-7.1.vcproj @@ -0,0 +1,164 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="hello"
+ ProjectGUID="{538CCAB6-984B-4602-B0D0-985E8FD4FEB9}"
+ RootNamespace="hello"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="TRUE"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="5"
+ RuntimeTypeInfo="TRUE"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="4"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="TRUE"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="4"
+ RuntimeTypeInfo="TRUE"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="3"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
+ <File
+ RelativePath=".\driver.cxx">
+ </File>
+ <File
+ RelativePath=".\hello.cxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}">
+ <File
+ RelativePath=".\hello.hxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd">
+ <File
+ RelativePath=".\hello.xsd">
+ <FileConfiguration
+ Name="Debug|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd hello.xsd"
+ CommandLine="xsd.exe cxx-tree --generate-intellisense hello.xsd"
+ Outputs="hello.cxx;hello.hxx"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd hello.xsd"
+ CommandLine="xsd.exe cxx-tree --generate-intellisense hello.xsd"
+ Outputs="hello.cxx;hello.hxx"/>
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/hello/hello-8.0.vcproj b/xsd/dist/examples/cxx/tree/hello/hello-8.0.vcproj new file mode 100644 index 0000000..299fd53 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/hello/hello-8.0.vcproj @@ -0,0 +1,423 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="hello"
+ ProjectGUID="{538CCAB6-984B-4602-B0D0-985E8FD4FEB9}"
+ RootNamespace="hello"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+ >
+ <File
+ RelativePath=".\driver.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\hello.cxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
+ >
+ <File
+ RelativePath=".\hello.hxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd"
+ >
+ <File
+ RelativePath=".\hello.xsd"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd hello.xsd"
+ CommandLine="xsd.exe cxx-tree --generate-intellisense hello.xsd"
+ Outputs="hello.cxx;hello.hxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd hello.xsd"
+ CommandLine="xsd.exe cxx-tree --generate-intellisense hello.xsd"
+ Outputs="hello.cxx;hello.hxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd hello.xsd"
+ CommandLine="xsd.exe cxx-tree --generate-intellisense hello.xsd"
+ Outputs="hello.cxx;hello.hxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd hello.xsd"
+ CommandLine="xsd.exe cxx-tree --generate-intellisense hello.xsd"
+ Outputs="hello.cxx;hello.hxx"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/hello/hello-9.0.vcproj b/xsd/dist/examples/cxx/tree/hello/hello-9.0.vcproj new file mode 100644 index 0000000..0d85099 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/hello/hello-9.0.vcproj @@ -0,0 +1,420 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="hello"
+ ProjectGUID="{538CCAB6-984B-4602-B0D0-985E8FD4FEB9}"
+ RootNamespace="hello"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+ >
+ <File
+ RelativePath=".\driver.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\hello.cxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
+ >
+ <File
+ RelativePath=".\hello.hxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd"
+ >
+ <File
+ RelativePath=".\hello.xsd"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd hello.xsd"
+ CommandLine="xsd.exe cxx-tree hello.xsd"
+ Outputs="hello.cxx;hello.hxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd hello.xsd"
+ CommandLine="xsd.exe cxx-tree hello.xsd"
+ Outputs="hello.cxx;hello.hxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd hello.xsd"
+ CommandLine="xsd.exe cxx-tree hello.xsd"
+ Outputs="hello.cxx;hello.hxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd hello.xsd"
+ CommandLine="xsd.exe cxx-tree hello.xsd"
+ Outputs="hello.cxx;hello.hxx"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/hello/hello-xerces2-7.1.vcproj b/xsd/dist/examples/cxx/tree/hello/hello-xerces2-7.1.vcproj new file mode 100644 index 0000000..a2cab95 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/hello/hello-xerces2-7.1.vcproj @@ -0,0 +1,164 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="hello"
+ ProjectGUID="{538CCAB6-984B-4602-B0D0-985E8FD4FEB9}"
+ RootNamespace="hello"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="TRUE"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="5"
+ RuntimeTypeInfo="TRUE"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="4"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="TRUE"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="4"
+ RuntimeTypeInfo="TRUE"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="3"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
+ <File
+ RelativePath=".\driver.cxx">
+ </File>
+ <File
+ RelativePath=".\hello.cxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}">
+ <File
+ RelativePath=".\hello.hxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd">
+ <File
+ RelativePath=".\hello.xsd">
+ <FileConfiguration
+ Name="Debug|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd hello.xsd"
+ CommandLine="xsd.exe cxx-tree --generate-intellisense hello.xsd"
+ Outputs="hello.cxx;hello.hxx"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd hello.xsd"
+ CommandLine="xsd.exe cxx-tree --generate-intellisense hello.xsd"
+ Outputs="hello.cxx;hello.hxx"/>
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/hello/hello-xerces2-8.0.vcproj b/xsd/dist/examples/cxx/tree/hello/hello-xerces2-8.0.vcproj new file mode 100644 index 0000000..1b39f7c --- /dev/null +++ b/xsd/dist/examples/cxx/tree/hello/hello-xerces2-8.0.vcproj @@ -0,0 +1,423 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="hello"
+ ProjectGUID="{538CCAB6-984B-4602-B0D0-985E8FD4FEB9}"
+ RootNamespace="hello"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+ >
+ <File
+ RelativePath=".\driver.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\hello.cxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
+ >
+ <File
+ RelativePath=".\hello.hxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd"
+ >
+ <File
+ RelativePath=".\hello.xsd"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd hello.xsd"
+ CommandLine="xsd.exe cxx-tree --generate-intellisense hello.xsd"
+ Outputs="hello.cxx;hello.hxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd hello.xsd"
+ CommandLine="xsd.exe cxx-tree --generate-intellisense hello.xsd"
+ Outputs="hello.cxx;hello.hxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd hello.xsd"
+ CommandLine="xsd.exe cxx-tree --generate-intellisense hello.xsd"
+ Outputs="hello.cxx;hello.hxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd hello.xsd"
+ CommandLine="xsd.exe cxx-tree --generate-intellisense hello.xsd"
+ Outputs="hello.cxx;hello.hxx"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/hello/hello-xerces2-9.0.vcproj b/xsd/dist/examples/cxx/tree/hello/hello-xerces2-9.0.vcproj new file mode 100644 index 0000000..8b8fd22 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/hello/hello-xerces2-9.0.vcproj @@ -0,0 +1,420 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="hello"
+ ProjectGUID="{538CCAB6-984B-4602-B0D0-985E8FD4FEB9}"
+ RootNamespace="hello"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+ >
+ <File
+ RelativePath=".\driver.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\hello.cxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
+ >
+ <File
+ RelativePath=".\hello.hxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd"
+ >
+ <File
+ RelativePath=".\hello.xsd"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd hello.xsd"
+ CommandLine="xsd.exe cxx-tree hello.xsd"
+ Outputs="hello.cxx;hello.hxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd hello.xsd"
+ CommandLine="xsd.exe cxx-tree hello.xsd"
+ Outputs="hello.cxx;hello.hxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd hello.xsd"
+ CommandLine="xsd.exe cxx-tree hello.xsd"
+ Outputs="hello.cxx;hello.hxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd hello.xsd"
+ CommandLine="xsd.exe cxx-tree hello.xsd"
+ Outputs="hello.cxx;hello.hxx"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/hello/makefile b/xsd/dist/examples/cxx/tree/hello/makefile new file mode 100644 index 0000000..7886049 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/hello/makefile @@ -0,0 +1,29 @@ +root := ../../.. + +include $(root)/build/cxx/rules.make +include $(root)/build/xsd/tree-rules.make + + +# Build. +# +driver: driver.o hello.o + +hello.o: hello.cxx hello.hxx +driver.o: driver.cxx hello.hxx + +hello.cxx hello.hxx: hello.xsd + + +# Test. +# +.PHONY: test +test: driver hello.xml + ./driver hello.xml + + +# Clean. +# +.PHONY: clean +clean: + rm -f hello.o hello.?xx driver.o driver + diff --git a/xsd/dist/examples/cxx/tree/library/library-10.0.vcxproj b/xsd/dist/examples/cxx/tree/library/library-10.0.vcxproj new file mode 100644 index 0000000..022737f --- /dev/null +++ b/xsd/dist/examples/cxx/tree/library/library-10.0.vcxproj @@ -0,0 +1,210 @@ +<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectName>library</ProjectName>
+ <ProjectGuid>{D661AD5B-5FF4-4AFD-A656-429BA348E9EF}</ProjectGuid>
+ <RootNamespace>library</RootNamespace>
+ <Keyword>Win32Proj</Keyword>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">driver</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">driver</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">driver</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">driver</TargetName>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Debug\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Debug\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)\$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)\$(Configuration)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Release\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Release\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)\$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)\$(Configuration)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ <RuntimeTypeInfo>true</RuntimeTypeInfo>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>xerces-c_3D.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)driver.pdb</ProgramDatabaseFile>
+ <SubSystem>Console</SubSystem>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ <RuntimeTypeInfo>true</RuntimeTypeInfo>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>xerces-c_3D.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)driver.pdb</ProgramDatabaseFile>
+ <SubSystem>Console</SubSystem>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <RuntimeTypeInfo>true</RuntimeTypeInfo>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>xerces-c_3.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <RuntimeTypeInfo>true</RuntimeTypeInfo>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>xerces-c_3.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="driver.cxx" />
+ <ClCompile Include="library.cxx" />
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="library.hxx" />
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="library.ixx" />
+ <None Include="Readme.txt" />
+ </ItemGroup>
+ <ItemGroup>
+ <CustomBuild Include="library.xsd">
+ <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">xsd library.xsd</Message>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">xsd cxx-tree --generate-inline --generate-ostream --generate-serialization library.xsd</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">library.hxx;library.ixx;library.cxx;%(Outputs)</Outputs>
+ <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">xsd library.xsd</Message>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">xsd cxx-tree --generate-inline --generate-ostream --generate-serialization library.xsd</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">library.hxx;library.ixx;library.cxx;%(Outputs)</Outputs>
+ <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">xsd library.xsd</Message>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">xsd cxx-tree --generate-inline --generate-ostream --generate-serialization library.xsd</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">library.hxx;library.ixx;library.cxx;%(Outputs)</Outputs>
+ <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">xsd library.xsd</Message>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">xsd cxx-tree --generate-inline --generate-ostream --generate-serialization library.xsd</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">library.hxx;library.ixx;library.cxx;%(Outputs)</Outputs>
+ </CustomBuild>
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project>
\ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/library/library-10.0.vcxproj.filters b/xsd/dist/examples/cxx/tree/library/library-10.0.vcxproj.filters new file mode 100644 index 0000000..e5e21e6 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/library/library-10.0.vcxproj.filters @@ -0,0 +1,45 @@ +<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="Source Files">
+ <UniqueIdentifier>{E7CF4BC5-B0CB-4799-B64E-5AF3B67A6F0E}</UniqueIdentifier>
+ <Extensions>cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+ </Filter>
+ <Filter Include="Header Files">
+ <UniqueIdentifier>{FDC2B8B2-1264-427A-9D4E-5577BF295A64}</UniqueIdentifier>
+ <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
+ </Filter>
+ <Filter Include="Inline Files">
+ <UniqueIdentifier>{8b40f964-53f9-4b8c-a52b-3fbe8bcfe092}</UniqueIdentifier>
+ <Extensions>ixx</Extensions>
+ </Filter>
+ <Filter Include="Schema Files">
+ <UniqueIdentifier>{50e811c7-6a8b-428b-8c92-0fb6c830a337}</UniqueIdentifier>
+ <Extensions>xsd</Extensions>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="driver.cxx">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="library.cxx">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="library.hxx">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="library.ixx">
+ <Filter>Inline Files</Filter>
+ </None>
+ <None Include="Readme.txt" />
+ </ItemGroup>
+ <ItemGroup>
+ <CustomBuild Include="library.xsd">
+ <Filter>Schema Files</Filter>
+ </CustomBuild>
+ </ItemGroup>
+</Project>
\ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/library/library-7.1.vcproj b/xsd/dist/examples/cxx/tree/library/library-7.1.vcproj new file mode 100644 index 0000000..32ea8af --- /dev/null +++ b/xsd/dist/examples/cxx/tree/library/library-7.1.vcproj @@ -0,0 +1,171 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="library"
+ ProjectGUID="{D661AD5B-5FF4-4AFD-A656-429BA348E9EF}"
+ RootNamespace="library"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="TRUE"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="5"
+ RuntimeTypeInfo="TRUE"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="4"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="TRUE"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="4"
+ RuntimeTypeInfo="TRUE"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="3"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{E7CF4BC5-B0CB-4799-B64E-5AF3B67A6F0E}">
+ <File
+ RelativePath=".\driver.cxx">
+ </File>
+ <File
+ RelativePath=".\library.cxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{FDC2B8B2-1264-427A-9D4E-5577BF295A64}">
+ <File
+ RelativePath=".\library.hxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Inline Files"
+ Filter="ixx">
+ <File
+ RelativePath=".\library.ixx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd">
+ <File
+ RelativePath=".\library.xsd">
+ <FileConfiguration
+ Name="Debug|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-ostream --generate-serialization --generate-intellisense library.xsd"
+ Outputs="library.hxx;library.ixx;library.cxx"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-ostream --generate-serialization --generate-intellisense library.xsd"
+ Outputs="library.hxx;library.ixx;library.cxx"/>
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/library/library-8.0.vcproj b/xsd/dist/examples/cxx/tree/library/library-8.0.vcproj new file mode 100644 index 0000000..0bc66af --- /dev/null +++ b/xsd/dist/examples/cxx/tree/library/library-8.0.vcproj @@ -0,0 +1,432 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="library"
+ ProjectGUID="{D661AD5B-5FF4-4AFD-A656-429BA348E9EF}"
+ RootNamespace="library"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{E7CF4BC5-B0CB-4799-B64E-5AF3B67A6F0E}"
+ >
+ <File
+ RelativePath=".\driver.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\library.cxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{FDC2B8B2-1264-427A-9D4E-5577BF295A64}"
+ >
+ <File
+ RelativePath=".\library.hxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Inline Files"
+ Filter="ixx"
+ >
+ <File
+ RelativePath=".\library.ixx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd"
+ >
+ <File
+ RelativePath=".\library.xsd"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-ostream --generate-serialization --generate-intellisense library.xsd"
+ Outputs="library.hxx;library.ixx;library.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-ostream --generate-serialization --generate-intellisense library.xsd"
+ Outputs="library.hxx;library.ixx;library.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-ostream --generate-serialization --generate-intellisense library.xsd"
+ Outputs="library.hxx;library.ixx;library.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-ostream --generate-serialization --generate-intellisense library.xsd"
+ Outputs="library.hxx;library.ixx;library.cxx"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/library/library-9.0.vcproj b/xsd/dist/examples/cxx/tree/library/library-9.0.vcproj new file mode 100644 index 0000000..84d729b --- /dev/null +++ b/xsd/dist/examples/cxx/tree/library/library-9.0.vcproj @@ -0,0 +1,429 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="library"
+ ProjectGUID="{D661AD5B-5FF4-4AFD-A656-429BA348E9EF}"
+ RootNamespace="library"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{E7CF4BC5-B0CB-4799-B64E-5AF3B67A6F0E}"
+ >
+ <File
+ RelativePath=".\driver.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\library.cxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{FDC2B8B2-1264-427A-9D4E-5577BF295A64}"
+ >
+ <File
+ RelativePath=".\library.hxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Inline Files"
+ Filter="ixx"
+ >
+ <File
+ RelativePath=".\library.ixx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd"
+ >
+ <File
+ RelativePath=".\library.xsd"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-ostream --generate-serialization library.xsd"
+ Outputs="library.hxx;library.ixx;library.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-ostream --generate-serialization library.xsd"
+ Outputs="library.hxx;library.ixx;library.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-ostream --generate-serialization library.xsd"
+ Outputs="library.hxx;library.ixx;library.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-ostream --generate-serialization library.xsd"
+ Outputs="library.hxx;library.ixx;library.cxx"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/library/library-xerces2-7.1.vcproj b/xsd/dist/examples/cxx/tree/library/library-xerces2-7.1.vcproj new file mode 100644 index 0000000..8cf6570 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/library/library-xerces2-7.1.vcproj @@ -0,0 +1,171 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="library"
+ ProjectGUID="{D661AD5B-5FF4-4AFD-A656-429BA348E9EF}"
+ RootNamespace="library"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="TRUE"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="5"
+ RuntimeTypeInfo="TRUE"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="4"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="TRUE"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="4"
+ RuntimeTypeInfo="TRUE"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="3"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{E7CF4BC5-B0CB-4799-B64E-5AF3B67A6F0E}">
+ <File
+ RelativePath=".\driver.cxx">
+ </File>
+ <File
+ RelativePath=".\library.cxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{FDC2B8B2-1264-427A-9D4E-5577BF295A64}">
+ <File
+ RelativePath=".\library.hxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Inline Files"
+ Filter="ixx">
+ <File
+ RelativePath=".\library.ixx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd">
+ <File
+ RelativePath=".\library.xsd">
+ <FileConfiguration
+ Name="Debug|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-ostream --generate-serialization --generate-intellisense library.xsd"
+ Outputs="library.hxx;library.ixx;library.cxx"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-ostream --generate-serialization --generate-intellisense library.xsd"
+ Outputs="library.hxx;library.ixx;library.cxx"/>
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/library/library-xerces2-8.0.vcproj b/xsd/dist/examples/cxx/tree/library/library-xerces2-8.0.vcproj new file mode 100644 index 0000000..fc3b99e --- /dev/null +++ b/xsd/dist/examples/cxx/tree/library/library-xerces2-8.0.vcproj @@ -0,0 +1,432 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="library"
+ ProjectGUID="{D661AD5B-5FF4-4AFD-A656-429BA348E9EF}"
+ RootNamespace="library"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{E7CF4BC5-B0CB-4799-B64E-5AF3B67A6F0E}"
+ >
+ <File
+ RelativePath=".\driver.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\library.cxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{FDC2B8B2-1264-427A-9D4E-5577BF295A64}"
+ >
+ <File
+ RelativePath=".\library.hxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Inline Files"
+ Filter="ixx"
+ >
+ <File
+ RelativePath=".\library.ixx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd"
+ >
+ <File
+ RelativePath=".\library.xsd"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-ostream --generate-serialization --generate-intellisense library.xsd"
+ Outputs="library.hxx;library.ixx;library.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-ostream --generate-serialization --generate-intellisense library.xsd"
+ Outputs="library.hxx;library.ixx;library.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-ostream --generate-serialization --generate-intellisense library.xsd"
+ Outputs="library.hxx;library.ixx;library.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-ostream --generate-serialization --generate-intellisense library.xsd"
+ Outputs="library.hxx;library.ixx;library.cxx"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/library/library-xerces2-9.0.vcproj b/xsd/dist/examples/cxx/tree/library/library-xerces2-9.0.vcproj new file mode 100644 index 0000000..ce9426a --- /dev/null +++ b/xsd/dist/examples/cxx/tree/library/library-xerces2-9.0.vcproj @@ -0,0 +1,429 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="library"
+ ProjectGUID="{D661AD5B-5FF4-4AFD-A656-429BA348E9EF}"
+ RootNamespace="library"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{E7CF4BC5-B0CB-4799-B64E-5AF3B67A6F0E}"
+ >
+ <File
+ RelativePath=".\driver.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\library.cxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{FDC2B8B2-1264-427A-9D4E-5577BF295A64}"
+ >
+ <File
+ RelativePath=".\library.hxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Inline Files"
+ Filter="ixx"
+ >
+ <File
+ RelativePath=".\library.ixx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd"
+ >
+ <File
+ RelativePath=".\library.xsd"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-ostream --generate-serialization library.xsd"
+ Outputs="library.hxx;library.ixx;library.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-ostream --generate-serialization library.xsd"
+ Outputs="library.hxx;library.ixx;library.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-ostream --generate-serialization library.xsd"
+ Outputs="library.hxx;library.ixx;library.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd library.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-ostream --generate-serialization library.xsd"
+ Outputs="library.hxx;library.ixx;library.cxx"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/library/makefile b/xsd/dist/examples/cxx/tree/library/makefile new file mode 100644 index 0000000..2f9bb6a --- /dev/null +++ b/xsd/dist/examples/cxx/tree/library/makefile @@ -0,0 +1,32 @@ +root := ../../.. + +include $(root)/build/cxx/rules.make +include $(root)/build/xsd/tree-rules.make + + +override XSDFLAGS += --generate-inline --generate-ostream --generate-serialization + + +# Build. +# +driver: driver.o library.o + +library.o: library.cxx library.hxx library.ixx +driver.o: driver.cxx library.hxx library.ixx + +library.cxx library.hxx library.ixx: library.xsd + + +# Test +# +.PHONY: test +test: driver library.xml + ./driver library.xml + + +# Clean. +# +.PHONY: clean +clean: + rm -f library.o library.?xx driver.o driver + diff --git a/xsd/dist/examples/cxx/tree/makefile b/xsd/dist/examples/cxx/tree/makefile new file mode 100644 index 0000000..8c23fef --- /dev/null +++ b/xsd/dist/examples/cxx/tree/makefile @@ -0,0 +1,24 @@ +dirs := binary caching embedded custom hello library messaging mixed \ +multiroot performance polymorphism streaming wildcard + +ifeq ($(WITH_ZLIB),1) +dirs += compression +endif + +ifeq ($(WITH_DBXML),1) +dirs += dbxml +endif + +ifeq ($(WITH_XQILLA),1) +dirs += xpath +endif + +.PHONY: all $(dirs) + +all: $(dirs) + +$(dirs): + @$(MAKE) -C $@ $(MAKECMDGOALS) + +makefile: ; +% :: $(dirs) ; diff --git a/xsd/dist/examples/cxx/tree/messaging/makefile b/xsd/dist/examples/cxx/tree/messaging/makefile new file mode 100644 index 0000000..0557a7c --- /dev/null +++ b/xsd/dist/examples/cxx/tree/messaging/makefile @@ -0,0 +1,35 @@ +root := ../../.. + +include $(root)/build/cxx/rules.make +include $(root)/build/xsd/tree-rules.make + +override XSDFLAGS += --root-element-all --generate-element-type \ +--generate-element-map --generate-serialization + + +# Build. +# +driver: driver.o dom-parse.o dom-serialize.o protocol.o + +protocol.o: protocol.cxx protocol.hxx +dom-parse.o: dom-parse.cxx dom-parse.hxx +dom-serialize.o: dom-serialize.cxx dom-serialize.hxx +driver.o: driver.cxx dom-parse.hxx dom-serialize.hxx protocol.hxx + +protocol.cxx protocol.hxx: protocol.xsd + + +# Test +# +.PHONY: test +test: driver balance.xml withdraw.xml deposit.xml + ./driver balance.xml + ./driver withdraw.xml + ./driver deposit.xml + + +# Clean. +# +.PHONY: clean +clean: + rm -f protocol.o protocol.?xx dom-parse.o dom-serialize.o driver.o driver diff --git a/xsd/dist/examples/cxx/tree/messaging/messaging-10.0.vcxproj b/xsd/dist/examples/cxx/tree/messaging/messaging-10.0.vcxproj new file mode 100644 index 0000000..66c97bc --- /dev/null +++ b/xsd/dist/examples/cxx/tree/messaging/messaging-10.0.vcxproj @@ -0,0 +1,213 @@ +<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectName>messaging</ProjectName>
+ <ProjectGuid>{F7696252-45B5-438B-B14F-0510137704F0}</ProjectGuid>
+ <RootNamespace>messaging</RootNamespace>
+ <Keyword>Win32Proj</Keyword>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">driver</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">driver</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">driver</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">driver</TargetName>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Debug\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Debug\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)\$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)\$(Configuration)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Release\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Release\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)\$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)\$(Configuration)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ <RuntimeTypeInfo>true</RuntimeTypeInfo>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>xerces-c_3D.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)driver.pdb</ProgramDatabaseFile>
+ <SubSystem>Console</SubSystem>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ <RuntimeTypeInfo>true</RuntimeTypeInfo>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>xerces-c_3D.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)driver.pdb</ProgramDatabaseFile>
+ <SubSystem>Console</SubSystem>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <RuntimeTypeInfo>true</RuntimeTypeInfo>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>xerces-c_3.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <RuntimeTypeInfo>true</RuntimeTypeInfo>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>xerces-c_3.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="dom-parse.cxx" />
+ <ClCompile Include="dom-serialize.cxx" />
+ <ClCompile Include="driver.cxx" />
+ <ClCompile Include="protocol.cxx" />
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="dom-parse.hxx" />
+ <ClInclude Include="dom-serialize.hxx" />
+ <ClInclude Include="protocol.hxx" />
+ </ItemGroup>
+ <ItemGroup>
+ <CustomBuild Include="protocol.xsd">
+ <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">xsd protocol.xsd</Message>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">xsd cxx-tree --root-element-all --generate-element-type --generate-element-map --generate-serialization protocol.xsd</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">protocol.hxx;protocol.cxx;%(Outputs)</Outputs>
+ <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">xsd protocol.xsd</Message>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">xsd cxx-tree --root-element-all --generate-element-type --generate-element-map --generate-serialization protocol.xsd</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">protocol.hxx;protocol.cxx;%(Outputs)</Outputs>
+ <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">xsd protocol.xsd</Message>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">xsd cxx-tree --root-element-all --generate-element-type --generate-element-map --generate-serialization protocol.xsd</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">protocol.hxx;protocol.cxx;%(Outputs)</Outputs>
+ <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">xsd protocol.xsd</Message>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">xsd cxx-tree --root-element-all --generate-element-type --generate-element-map --generate-serialization protocol.xsd</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">protocol.hxx;protocol.cxx;%(Outputs)</Outputs>
+ </CustomBuild>
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="Readme.txt" />
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project>
\ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/messaging/messaging-10.0.vcxproj.filters b/xsd/dist/examples/cxx/tree/messaging/messaging-10.0.vcxproj.filters new file mode 100644 index 0000000..c94955d --- /dev/null +++ b/xsd/dist/examples/cxx/tree/messaging/messaging-10.0.vcxproj.filters @@ -0,0 +1,50 @@ +<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="Source Files">
+ <UniqueIdentifier>{0BA0A3D7-40AF-4307-8033-5BE39B33ABE5}</UniqueIdentifier>
+ <Extensions>cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+ </Filter>
+ <Filter Include="Header Files">
+ <UniqueIdentifier>{F7AC5A29-8CF7-4882-89B6-1B5B81AA00F2}</UniqueIdentifier>
+ <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
+ </Filter>
+ <Filter Include="Schema Files">
+ <UniqueIdentifier>{945e9234-36d7-4bbb-a5f2-97af87338c49}</UniqueIdentifier>
+ <Extensions>xsd</Extensions>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="dom-parse.cxx">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="dom-serialize.cxx">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="driver.cxx">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="protocol.cxx">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="dom-parse.hxx">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="dom-serialize.hxx">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="protocol.hxx">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="Readme.txt" />
+ </ItemGroup>
+ <ItemGroup>
+ <CustomBuild Include="protocol.xsd">
+ <Filter>Schema Files</Filter>
+ </CustomBuild>
+ </ItemGroup>
+</Project>
\ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/messaging/messaging-7.1.vcproj b/xsd/dist/examples/cxx/tree/messaging/messaging-7.1.vcproj new file mode 100644 index 0000000..1f56759 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/messaging/messaging-7.1.vcproj @@ -0,0 +1,176 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="messaging"
+ ProjectGUID="{F7696252-45B5-438B-B14F-0510137704F0}"
+ RootNamespace="messaging"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="TRUE"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="5"
+ RuntimeTypeInfo="TRUE"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="4"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="TRUE"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="4"
+ RuntimeTypeInfo="TRUE"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="3"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{0BA0A3D7-40AF-4307-8033-5BE39B33ABE5}">
+ <File
+ RelativePath=".\driver.cxx">
+ </File>
+ <File
+ RelativePath=".\dom-parse.cxx">
+ </File>
+ <File
+ RelativePath=".\dom-serialize.cxx">
+ </File>
+ <File
+ RelativePath=".\protocol.cxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{F7AC5A29-8CF7-4882-89B6-1B5B81AA00F2}">
+ <File
+ RelativePath=".\dom-parse.hxx">
+ </File>
+ <File
+ RelativePath=".\dom-serialize.hxx">
+ </File>
+ <File
+ RelativePath=".\protocol.hxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd">
+ <File
+ RelativePath=".\protocol.xsd">
+ <FileConfiguration
+ Name="Debug|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd protocol.xsd"
+ CommandLine="xsd cxx-tree --root-element-all --generate-element-type --generate-element-map --generate-serialization --generate-intellisense protocol.xsd"
+ Outputs="protocol.hxx;protocol.cxx"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd protocol.xsd"
+ CommandLine="xsd cxx-tree --root-element-all --generate-element-type --generate-element-map --generate-serialization --generate-intellisense protocol.xsd"
+ Outputs="protocol.hxx;protocol.cxx"/>
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/messaging/messaging-8.0.vcproj b/xsd/dist/examples/cxx/tree/messaging/messaging-8.0.vcproj new file mode 100644 index 0000000..7f8b0e4 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/messaging/messaging-8.0.vcproj @@ -0,0 +1,439 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="messaging"
+ ProjectGUID="{F7696252-45B5-438B-B14F-0510137704F0}"
+ RootNamespace="messaging"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{0BA0A3D7-40AF-4307-8033-5BE39B33ABE5}"
+ >
+ <File
+ RelativePath=".\dom-parse.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\dom-serialize.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\driver.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\protocol.cxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{F7AC5A29-8CF7-4882-89B6-1B5B81AA00F2}"
+ >
+ <File
+ RelativePath=".\dom-parse.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\dom-serialize.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\protocol.hxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd"
+ >
+ <File
+ RelativePath=".\protocol.xsd"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd protocol.xsd"
+ CommandLine="xsd cxx-tree --root-element-all --generate-element-type --generate-element-map --generate-serialization --generate-intellisense protocol.xsd"
+ Outputs="protocol.hxx;protocol.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd protocol.xsd"
+ CommandLine="xsd cxx-tree --root-element-all --generate-element-type --generate-element-map --generate-serialization --generate-intellisense protocol.xsd"
+ Outputs="protocol.hxx;protocol.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd protocol.xsd"
+ CommandLine="xsd cxx-tree --root-element-all --generate-element-type --generate-element-map --generate-serialization --generate-intellisense protocol.xsd"
+ Outputs="protocol.hxx;protocol.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd protocol.xsd"
+ CommandLine="xsd cxx-tree --root-element-all --generate-element-type --generate-element-map --generate-serialization --generate-intellisense protocol.xsd"
+ Outputs="protocol.hxx;protocol.cxx"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/messaging/messaging-9.0.vcproj b/xsd/dist/examples/cxx/tree/messaging/messaging-9.0.vcproj new file mode 100644 index 0000000..0e2819d --- /dev/null +++ b/xsd/dist/examples/cxx/tree/messaging/messaging-9.0.vcproj @@ -0,0 +1,436 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="messaging"
+ ProjectGUID="{F7696252-45B5-438B-B14F-0510137704F0}"
+ RootNamespace="messaging"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{0BA0A3D7-40AF-4307-8033-5BE39B33ABE5}"
+ >
+ <File
+ RelativePath=".\dom-parse.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\dom-serialize.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\driver.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\protocol.cxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{F7AC5A29-8CF7-4882-89B6-1B5B81AA00F2}"
+ >
+ <File
+ RelativePath=".\dom-parse.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\dom-serialize.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\protocol.hxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd"
+ >
+ <File
+ RelativePath=".\protocol.xsd"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd protocol.xsd"
+ CommandLine="xsd cxx-tree --root-element-all --generate-element-type --generate-element-map --generate-serialization protocol.xsd"
+ Outputs="protocol.hxx;protocol.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd protocol.xsd"
+ CommandLine="xsd cxx-tree --root-element-all --generate-element-type --generate-element-map --generate-serialization protocol.xsd"
+ Outputs="protocol.hxx;protocol.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd protocol.xsd"
+ CommandLine="xsd cxx-tree --root-element-all --generate-element-type --generate-element-map --generate-serialization protocol.xsd"
+ Outputs="protocol.hxx;protocol.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd protocol.xsd"
+ CommandLine="xsd cxx-tree --root-element-all --generate-element-type --generate-element-map --generate-serialization protocol.xsd"
+ Outputs="protocol.hxx;protocol.cxx"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/messaging/messaging-xerces2-7.1.vcproj b/xsd/dist/examples/cxx/tree/messaging/messaging-xerces2-7.1.vcproj new file mode 100644 index 0000000..c08339a --- /dev/null +++ b/xsd/dist/examples/cxx/tree/messaging/messaging-xerces2-7.1.vcproj @@ -0,0 +1,176 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="messaging"
+ ProjectGUID="{F7696252-45B5-438B-B14F-0510137704F0}"
+ RootNamespace="messaging"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="TRUE"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="5"
+ RuntimeTypeInfo="TRUE"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="4"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="TRUE"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="4"
+ RuntimeTypeInfo="TRUE"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="3"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{0BA0A3D7-40AF-4307-8033-5BE39B33ABE5}">
+ <File
+ RelativePath=".\driver.cxx">
+ </File>
+ <File
+ RelativePath=".\dom-parse.cxx">
+ </File>
+ <File
+ RelativePath=".\dom-serialize.cxx">
+ </File>
+ <File
+ RelativePath=".\protocol.cxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{F7AC5A29-8CF7-4882-89B6-1B5B81AA00F2}">
+ <File
+ RelativePath=".\dom-parse.hxx">
+ </File>
+ <File
+ RelativePath=".\dom-serialize.hxx">
+ </File>
+ <File
+ RelativePath=".\protocol.hxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd">
+ <File
+ RelativePath=".\protocol.xsd">
+ <FileConfiguration
+ Name="Debug|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd protocol.xsd"
+ CommandLine="xsd cxx-tree --root-element-all --generate-element-type --generate-element-map --generate-serialization --generate-intellisense protocol.xsd"
+ Outputs="protocol.hxx;protocol.cxx"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd protocol.xsd"
+ CommandLine="xsd cxx-tree --root-element-all --generate-element-type --generate-element-map --generate-serialization --generate-intellisense protocol.xsd"
+ Outputs="protocol.hxx;protocol.cxx"/>
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/messaging/messaging-xerces2-8.0.vcproj b/xsd/dist/examples/cxx/tree/messaging/messaging-xerces2-8.0.vcproj new file mode 100644 index 0000000..6406bb4 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/messaging/messaging-xerces2-8.0.vcproj @@ -0,0 +1,439 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="messaging"
+ ProjectGUID="{F7696252-45B5-438B-B14F-0510137704F0}"
+ RootNamespace="messaging"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{0BA0A3D7-40AF-4307-8033-5BE39B33ABE5}"
+ >
+ <File
+ RelativePath=".\dom-parse.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\dom-serialize.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\driver.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\protocol.cxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{F7AC5A29-8CF7-4882-89B6-1B5B81AA00F2}"
+ >
+ <File
+ RelativePath=".\dom-parse.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\dom-serialize.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\protocol.hxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd"
+ >
+ <File
+ RelativePath=".\protocol.xsd"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd protocol.xsd"
+ CommandLine="xsd cxx-tree --root-element-all --generate-element-type --generate-element-map --generate-serialization --generate-intellisense protocol.xsd"
+ Outputs="protocol.hxx;protocol.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd protocol.xsd"
+ CommandLine="xsd cxx-tree --root-element-all --generate-element-type --generate-element-map --generate-serialization --generate-intellisense protocol.xsd"
+ Outputs="protocol.hxx;protocol.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd protocol.xsd"
+ CommandLine="xsd cxx-tree --root-element-all --generate-element-type --generate-element-map --generate-serialization --generate-intellisense protocol.xsd"
+ Outputs="protocol.hxx;protocol.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd protocol.xsd"
+ CommandLine="xsd cxx-tree --root-element-all --generate-element-type --generate-element-map --generate-serialization --generate-intellisense protocol.xsd"
+ Outputs="protocol.hxx;protocol.cxx"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/messaging/messaging-xerces2-9.0.vcproj b/xsd/dist/examples/cxx/tree/messaging/messaging-xerces2-9.0.vcproj new file mode 100644 index 0000000..bcc81da --- /dev/null +++ b/xsd/dist/examples/cxx/tree/messaging/messaging-xerces2-9.0.vcproj @@ -0,0 +1,436 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="messaging"
+ ProjectGUID="{F7696252-45B5-438B-B14F-0510137704F0}"
+ RootNamespace="messaging"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{0BA0A3D7-40AF-4307-8033-5BE39B33ABE5}"
+ >
+ <File
+ RelativePath=".\dom-parse.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\dom-serialize.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\driver.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\protocol.cxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{F7AC5A29-8CF7-4882-89B6-1B5B81AA00F2}"
+ >
+ <File
+ RelativePath=".\dom-parse.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\dom-serialize.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\protocol.hxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd"
+ >
+ <File
+ RelativePath=".\protocol.xsd"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd protocol.xsd"
+ CommandLine="xsd cxx-tree --root-element-all --generate-element-type --generate-element-map --generate-serialization protocol.xsd"
+ Outputs="protocol.hxx;protocol.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd protocol.xsd"
+ CommandLine="xsd cxx-tree --root-element-all --generate-element-type --generate-element-map --generate-serialization protocol.xsd"
+ Outputs="protocol.hxx;protocol.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd protocol.xsd"
+ CommandLine="xsd cxx-tree --root-element-all --generate-element-type --generate-element-map --generate-serialization protocol.xsd"
+ Outputs="protocol.hxx;protocol.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd protocol.xsd"
+ CommandLine="xsd cxx-tree --root-element-all --generate-element-type --generate-element-map --generate-serialization protocol.xsd"
+ Outputs="protocol.hxx;protocol.cxx"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/mixed/makefile b/xsd/dist/examples/cxx/tree/mixed/makefile new file mode 100644 index 0000000..594821c --- /dev/null +++ b/xsd/dist/examples/cxx/tree/mixed/makefile @@ -0,0 +1,28 @@ +root := ../../.. + +include $(root)/build/cxx/rules.make +include $(root)/build/xsd/tree-rules.make + + +# Build. +# +driver: driver.o text.o + +text.o: text.cxx text.hxx +driver.o: driver.cxx text.hxx + +text.cxx text.hxx: text.xsd + + +# Test. +# +.PHONY: test +test: driver text.xml + ./driver text.xml + + +# Clean. +# +.PHONY: clean +clean: + rm -f text.o text.?xx driver.o driver diff --git a/xsd/dist/examples/cxx/tree/mixed/mixed-10.0.vcxproj b/xsd/dist/examples/cxx/tree/mixed/mixed-10.0.vcxproj new file mode 100644 index 0000000..0b78b5a --- /dev/null +++ b/xsd/dist/examples/cxx/tree/mixed/mixed-10.0.vcxproj @@ -0,0 +1,209 @@ +<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectName>mixed</ProjectName>
+ <ProjectGuid>{6EF7868E-AA58-4615-9C1A-06B010CB4209}</ProjectGuid>
+ <RootNamespace>mixed</RootNamespace>
+ <Keyword>Win32Proj</Keyword>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">driver</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">driver</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">driver</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">driver</TargetName>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Debug\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Debug\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)\$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)\$(Configuration)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Release\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Release\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)\$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)\$(Configuration)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ <RuntimeTypeInfo>true</RuntimeTypeInfo>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>xerces-c_3D.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)driver.pdb</ProgramDatabaseFile>
+ <SubSystem>Console</SubSystem>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ <RuntimeTypeInfo>true</RuntimeTypeInfo>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>xerces-c_3D.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)driver.pdb</ProgramDatabaseFile>
+ <SubSystem>Console</SubSystem>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <RuntimeTypeInfo>true</RuntimeTypeInfo>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>xerces-c_3.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <RuntimeTypeInfo>true</RuntimeTypeInfo>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>xerces-c_3.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="driver.cxx" />
+ <ClCompile Include="text.cxx" />
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="text.hxx" />
+ </ItemGroup>
+ <ItemGroup>
+ <CustomBuild Include="text.xsd">
+ <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">xsd text.xsd</Message>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">xsd.exe cxx-tree text.xsd</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">text.cxx;text.hxx;%(Outputs)</Outputs>
+ <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">xsd text.xsd</Message>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">xsd.exe cxx-tree text.xsd</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">text.cxx;text.hxx;%(Outputs)</Outputs>
+ <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">xsd text.xsd</Message>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">xsd.exe cxx-tree text.xsd</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">text.cxx;text.hxx;%(Outputs)</Outputs>
+ <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">xsd text.xsd</Message>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">xsd.exe cxx-tree text.xsd</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">text.cxx;text.hxx;%(Outputs)</Outputs>
+ </CustomBuild>
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="Readme.txt" />
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project>
\ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/mixed/mixed-10.0.vcxproj.filters b/xsd/dist/examples/cxx/tree/mixed/mixed-10.0.vcxproj.filters new file mode 100644 index 0000000..992400e --- /dev/null +++ b/xsd/dist/examples/cxx/tree/mixed/mixed-10.0.vcxproj.filters @@ -0,0 +1,38 @@ +<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="Source Files">
+ <UniqueIdentifier>{590B5830-837E-4D7F-984C-173456EE7E70}</UniqueIdentifier>
+ <Extensions>cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+ </Filter>
+ <Filter Include="Header Files">
+ <UniqueIdentifier>{3B7C0CD8-48D5-4244-A1FB-B60D510C2359}</UniqueIdentifier>
+ <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
+ </Filter>
+ <Filter Include="Schema Files">
+ <UniqueIdentifier>{ba06cc21-c20a-4656-89ab-0a7b56f50871}</UniqueIdentifier>
+ <Extensions>xsd</Extensions>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="driver.cxx">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="text.cxx">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="text.hxx">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="Readme.txt" />
+ </ItemGroup>
+ <ItemGroup>
+ <CustomBuild Include="text.xsd">
+ <Filter>Schema Files</Filter>
+ </CustomBuild>
+ </ItemGroup>
+</Project>
\ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/mixed/mixed-7.1.vcproj b/xsd/dist/examples/cxx/tree/mixed/mixed-7.1.vcproj new file mode 100644 index 0000000..cfa1939 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/mixed/mixed-7.1.vcproj @@ -0,0 +1,164 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="mixed"
+ ProjectGUID="{6EF7868E-AA58-4615-9C1A-06B010CB4209}"
+ RootNamespace="mixed"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="TRUE"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="5"
+ RuntimeTypeInfo="TRUE"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="4"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="TRUE"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="4"
+ RuntimeTypeInfo="TRUE"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="3"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{590B5830-837E-4D7F-984C-173456EE7E70}">
+ <File
+ RelativePath=".\driver.cxx">
+ </File>
+ <File
+ RelativePath=".\text.cxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{3B7C0CD8-48D5-4244-A1FB-B60D510C2359}">
+ <File
+ RelativePath=".\text.hxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd">
+ <File
+ RelativePath=".\text.xsd">
+ <FileConfiguration
+ Name="Debug|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd text.xsd"
+ CommandLine="xsd.exe cxx-tree --generate-intellisense text.xsd"
+ Outputs="text.cxx;text.hxx"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd text.xsd"
+ CommandLine="xsd.exe cxx-tree --generate-intellisense text.xsd"
+ Outputs="text.cxx;text.hxx"/>
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/mixed/mixed-8.0.vcproj b/xsd/dist/examples/cxx/tree/mixed/mixed-8.0.vcproj new file mode 100644 index 0000000..f376bbf --- /dev/null +++ b/xsd/dist/examples/cxx/tree/mixed/mixed-8.0.vcproj @@ -0,0 +1,423 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="mixed"
+ ProjectGUID="{6EF7868E-AA58-4615-9C1A-06B010CB4209}"
+ RootNamespace="mixed"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{590B5830-837E-4D7F-984C-173456EE7E70}"
+ >
+ <File
+ RelativePath=".\driver.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\text.cxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{3B7C0CD8-48D5-4244-A1FB-B60D510C2359}"
+ >
+ <File
+ RelativePath=".\text.hxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd"
+ >
+ <File
+ RelativePath=".\text.xsd"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd text.xsd"
+ CommandLine="xsd.exe cxx-tree --generate-intellisense text.xsd"
+ Outputs="text.cxx;text.hxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd text.xsd"
+ CommandLine="xsd.exe cxx-tree --generate-intellisense text.xsd"
+ Outputs="text.cxx;text.hxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd text.xsd"
+ CommandLine="xsd.exe cxx-tree --generate-intellisense text.xsd"
+ Outputs="text.cxx;text.hxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd text.xsd"
+ CommandLine="xsd.exe cxx-tree --generate-intellisense text.xsd"
+ Outputs="text.cxx;text.hxx"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/mixed/mixed-9.0.vcproj b/xsd/dist/examples/cxx/tree/mixed/mixed-9.0.vcproj new file mode 100644 index 0000000..7e144e7 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/mixed/mixed-9.0.vcproj @@ -0,0 +1,420 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="mixed"
+ ProjectGUID="{6EF7868E-AA58-4615-9C1A-06B010CB4209}"
+ RootNamespace="mixed"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{590B5830-837E-4D7F-984C-173456EE7E70}"
+ >
+ <File
+ RelativePath=".\driver.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\text.cxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{3B7C0CD8-48D5-4244-A1FB-B60D510C2359}"
+ >
+ <File
+ RelativePath=".\text.hxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd"
+ >
+ <File
+ RelativePath=".\text.xsd"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd text.xsd"
+ CommandLine="xsd.exe cxx-tree text.xsd"
+ Outputs="text.cxx;text.hxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd text.xsd"
+ CommandLine="xsd.exe cxx-tree text.xsd"
+ Outputs="text.cxx;text.hxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd text.xsd"
+ CommandLine="xsd.exe cxx-tree text.xsd"
+ Outputs="text.cxx;text.hxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd text.xsd"
+ CommandLine="xsd.exe cxx-tree text.xsd"
+ Outputs="text.cxx;text.hxx"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/mixed/mixed-xerces2-7.1.vcproj b/xsd/dist/examples/cxx/tree/mixed/mixed-xerces2-7.1.vcproj new file mode 100644 index 0000000..510a1d5 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/mixed/mixed-xerces2-7.1.vcproj @@ -0,0 +1,164 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="mixed"
+ ProjectGUID="{6EF7868E-AA58-4615-9C1A-06B010CB4209}"
+ RootNamespace="mixed"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="TRUE"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="5"
+ RuntimeTypeInfo="TRUE"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="4"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="TRUE"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="4"
+ RuntimeTypeInfo="TRUE"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="3"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{590B5830-837E-4D7F-984C-173456EE7E70}">
+ <File
+ RelativePath=".\driver.cxx">
+ </File>
+ <File
+ RelativePath=".\text.cxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{3B7C0CD8-48D5-4244-A1FB-B60D510C2359}">
+ <File
+ RelativePath=".\text.hxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd">
+ <File
+ RelativePath=".\text.xsd">
+ <FileConfiguration
+ Name="Debug|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd text.xsd"
+ CommandLine="xsd.exe cxx-tree --generate-intellisense text.xsd"
+ Outputs="text.cxx;text.hxx"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd text.xsd"
+ CommandLine="xsd.exe cxx-tree --generate-intellisense text.xsd"
+ Outputs="text.cxx;text.hxx"/>
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/mixed/mixed-xerces2-8.0.vcproj b/xsd/dist/examples/cxx/tree/mixed/mixed-xerces2-8.0.vcproj new file mode 100644 index 0000000..5dfbf16 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/mixed/mixed-xerces2-8.0.vcproj @@ -0,0 +1,423 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="mixed"
+ ProjectGUID="{6EF7868E-AA58-4615-9C1A-06B010CB4209}"
+ RootNamespace="mixed"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{590B5830-837E-4D7F-984C-173456EE7E70}"
+ >
+ <File
+ RelativePath=".\driver.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\text.cxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{3B7C0CD8-48D5-4244-A1FB-B60D510C2359}"
+ >
+ <File
+ RelativePath=".\text.hxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd"
+ >
+ <File
+ RelativePath=".\text.xsd"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd text.xsd"
+ CommandLine="xsd.exe cxx-tree --generate-intellisense text.xsd"
+ Outputs="text.cxx;text.hxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd text.xsd"
+ CommandLine="xsd.exe cxx-tree --generate-intellisense text.xsd"
+ Outputs="text.cxx;text.hxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd text.xsd"
+ CommandLine="xsd.exe cxx-tree --generate-intellisense text.xsd"
+ Outputs="text.cxx;text.hxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd text.xsd"
+ CommandLine="xsd.exe cxx-tree --generate-intellisense text.xsd"
+ Outputs="text.cxx;text.hxx"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/mixed/mixed-xerces2-9.0.vcproj b/xsd/dist/examples/cxx/tree/mixed/mixed-xerces2-9.0.vcproj new file mode 100644 index 0000000..4e6ff97 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/mixed/mixed-xerces2-9.0.vcproj @@ -0,0 +1,420 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="mixed"
+ ProjectGUID="{6EF7868E-AA58-4615-9C1A-06B010CB4209}"
+ RootNamespace="mixed"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{590B5830-837E-4D7F-984C-173456EE7E70}"
+ >
+ <File
+ RelativePath=".\driver.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\text.cxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{3B7C0CD8-48D5-4244-A1FB-B60D510C2359}"
+ >
+ <File
+ RelativePath=".\text.hxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd"
+ >
+ <File
+ RelativePath=".\text.xsd"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd text.xsd"
+ CommandLine="xsd.exe cxx-tree text.xsd"
+ Outputs="text.cxx;text.hxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd text.xsd"
+ CommandLine="xsd.exe cxx-tree text.xsd"
+ Outputs="text.cxx;text.hxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd text.xsd"
+ CommandLine="xsd.exe cxx-tree text.xsd"
+ Outputs="text.cxx;text.hxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd text.xsd"
+ CommandLine="xsd.exe cxx-tree text.xsd"
+ Outputs="text.cxx;text.hxx"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/multiroot/makefile b/xsd/dist/examples/cxx/tree/multiroot/makefile new file mode 100644 index 0000000..d94da7f --- /dev/null +++ b/xsd/dist/examples/cxx/tree/multiroot/makefile @@ -0,0 +1,33 @@ +root := ../../.. + +include $(root)/build/cxx/rules.make +include $(root)/build/xsd/tree-rules.make + +override XSDFLAGS += --root-element-all + + +# Build. +# +driver: driver.o dom-parse.o protocol.o + +protocol.o: protocol.cxx protocol.hxx +dom-parse.o: dom-parse.cxx dom-parse.hxx +driver.o: driver.cxx dom-parse.hxx protocol.hxx + +protocol.cxx protocol.hxx: protocol.xsd + + +# Test +# +.PHONY: test +test: driver balance.xml withdraw.xml deposit.xml + ./driver balance.xml + ./driver withdraw.xml + ./driver deposit.xml + + +# Clean. +# +.PHONY: clean +clean: + rm -f protocol.o protocol.?xx dom-parse.o driver.o driver diff --git a/xsd/dist/examples/cxx/tree/multiroot/multiroot-10.0.vcxproj b/xsd/dist/examples/cxx/tree/multiroot/multiroot-10.0.vcxproj new file mode 100644 index 0000000..acc0e93 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/multiroot/multiroot-10.0.vcxproj @@ -0,0 +1,211 @@ +<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectName>multiroot</ProjectName>
+ <ProjectGuid>{1CFBC9C5-5F9C-4B60-A2A3-0A79BCDD2670}</ProjectGuid>
+ <RootNamespace>multiroot</RootNamespace>
+ <Keyword>Win32Proj</Keyword>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">driver</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">driver</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">driver</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">driver</TargetName>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Debug\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Debug\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)\$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)\$(Configuration)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Release\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Release\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)\$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)\$(Configuration)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ <RuntimeTypeInfo>true</RuntimeTypeInfo>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>xerces-c_3D.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)driver.pdb</ProgramDatabaseFile>
+ <SubSystem>Console</SubSystem>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ <RuntimeTypeInfo>true</RuntimeTypeInfo>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>xerces-c_3D.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)driver.pdb</ProgramDatabaseFile>
+ <SubSystem>Console</SubSystem>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <RuntimeTypeInfo>true</RuntimeTypeInfo>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>xerces-c_3.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <RuntimeTypeInfo>true</RuntimeTypeInfo>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>xerces-c_3.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="dom-parse.cxx" />
+ <ClCompile Include="driver.cxx" />
+ <ClCompile Include="protocol.cxx" />
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="dom-parse.hxx" />
+ <ClInclude Include="protocol.hxx" />
+ </ItemGroup>
+ <ItemGroup>
+ <CustomBuild Include="protocol.xsd">
+ <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">xsd protocol.xsd</Message>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">xsd cxx-tree --root-element-all protocol.xsd</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">protocol.hxx;protocol.cxx;%(Outputs)</Outputs>
+ <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">xsd protocol.xsd</Message>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">xsd cxx-tree --root-element-all protocol.xsd</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">protocol.hxx;protocol.cxx;%(Outputs)</Outputs>
+ <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">xsd protocol.xsd</Message>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">xsd cxx-tree --root-element-all protocol.xsd</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">protocol.hxx;protocol.cxx;%(Outputs)</Outputs>
+ <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">xsd protocol.xsd</Message>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">xsd cxx-tree --root-element-all protocol.xsd</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">protocol.hxx;protocol.cxx;%(Outputs)</Outputs>
+ </CustomBuild>
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="Readme.txt" />
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project>
\ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/multiroot/multiroot-10.0.vcxproj.filters b/xsd/dist/examples/cxx/tree/multiroot/multiroot-10.0.vcxproj.filters new file mode 100644 index 0000000..148c832 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/multiroot/multiroot-10.0.vcxproj.filters @@ -0,0 +1,44 @@ +<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="Source Files">
+ <UniqueIdentifier>{761DEBB9-455C-4599-A11D-66D602C486C3}</UniqueIdentifier>
+ <Extensions>cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+ </Filter>
+ <Filter Include="Header Files">
+ <UniqueIdentifier>{AAF07268-FD5E-485F-8EB8-1AFDDE8BFD57}</UniqueIdentifier>
+ <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
+ </Filter>
+ <Filter Include="Schema Files">
+ <UniqueIdentifier>{770136e0-0d08-4ab1-b67b-eabbde953e47}</UniqueIdentifier>
+ <Extensions>xsd</Extensions>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="dom-parse.cxx">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="driver.cxx">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="protocol.cxx">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="dom-parse.hxx">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="protocol.hxx">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="Readme.txt" />
+ </ItemGroup>
+ <ItemGroup>
+ <CustomBuild Include="protocol.xsd">
+ <Filter>Schema Files</Filter>
+ </CustomBuild>
+ </ItemGroup>
+</Project>
\ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/multiroot/multiroot-7.1.vcproj b/xsd/dist/examples/cxx/tree/multiroot/multiroot-7.1.vcproj new file mode 100644 index 0000000..675fe8b --- /dev/null +++ b/xsd/dist/examples/cxx/tree/multiroot/multiroot-7.1.vcproj @@ -0,0 +1,170 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="multiroot"
+ ProjectGUID="{1CFBC9C5-5F9C-4B60-A2A3-0A79BCDD2670}"
+ RootNamespace="multiroot"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="TRUE"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="5"
+ RuntimeTypeInfo="TRUE"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="4"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="TRUE"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="4"
+ RuntimeTypeInfo="TRUE"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="3"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{761DEBB9-455C-4599-A11D-66D602C486C3}">
+ <File
+ RelativePath=".\driver.cxx">
+ </File>
+ <File
+ RelativePath=".\dom-parse.cxx">
+ </File>
+ <File
+ RelativePath=".\protocol.cxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{AAF07268-FD5E-485F-8EB8-1AFDDE8BFD57}">
+ <File
+ RelativePath=".\dom-parse.hxx">
+ </File>
+ <File
+ RelativePath=".\protocol.hxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd">
+ <File
+ RelativePath=".\protocol.xsd">
+ <FileConfiguration
+ Name="Debug|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd protocol.xsd"
+ CommandLine="xsd cxx-tree --root-element-all --generate-intellisense protocol.xsd"
+ Outputs="protocol.hxx;protocol.cxx"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd protocol.xsd"
+ CommandLine="xsd cxx-tree --root-element-all --generate-intellisense protocol.xsd"
+ Outputs="protocol.hxx;protocol.cxx"/>
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/multiroot/multiroot-8.0.vcproj b/xsd/dist/examples/cxx/tree/multiroot/multiroot-8.0.vcproj new file mode 100644 index 0000000..915953a --- /dev/null +++ b/xsd/dist/examples/cxx/tree/multiroot/multiroot-8.0.vcproj @@ -0,0 +1,431 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="multiroot"
+ ProjectGUID="{1CFBC9C5-5F9C-4B60-A2A3-0A79BCDD2670}"
+ RootNamespace="multiroot"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{761DEBB9-455C-4599-A11D-66D602C486C3}"
+ >
+ <File
+ RelativePath=".\dom-parse.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\driver.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\protocol.cxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{AAF07268-FD5E-485F-8EB8-1AFDDE8BFD57}"
+ >
+ <File
+ RelativePath=".\dom-parse.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\protocol.hxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd"
+ >
+ <File
+ RelativePath=".\protocol.xsd"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd protocol.xsd"
+ CommandLine="xsd cxx-tree --root-element-all --generate-intellisense protocol.xsd"
+ Outputs="protocol.hxx;protocol.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd protocol.xsd"
+ CommandLine="xsd cxx-tree --root-element-all --generate-intellisense protocol.xsd"
+ Outputs="protocol.hxx;protocol.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd protocol.xsd"
+ CommandLine="xsd cxx-tree --root-element-all --generate-intellisense protocol.xsd"
+ Outputs="protocol.hxx;protocol.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd protocol.xsd"
+ CommandLine="xsd cxx-tree --root-element-all --generate-intellisense protocol.xsd"
+ Outputs="protocol.hxx;protocol.cxx"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/multiroot/multiroot-9.0.vcproj b/xsd/dist/examples/cxx/tree/multiroot/multiroot-9.0.vcproj new file mode 100644 index 0000000..a6458ba --- /dev/null +++ b/xsd/dist/examples/cxx/tree/multiroot/multiroot-9.0.vcproj @@ -0,0 +1,428 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="multiroot"
+ ProjectGUID="{1CFBC9C5-5F9C-4B60-A2A3-0A79BCDD2670}"
+ RootNamespace="multiroot"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{761DEBB9-455C-4599-A11D-66D602C486C3}"
+ >
+ <File
+ RelativePath=".\dom-parse.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\driver.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\protocol.cxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{AAF07268-FD5E-485F-8EB8-1AFDDE8BFD57}"
+ >
+ <File
+ RelativePath=".\dom-parse.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\protocol.hxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd"
+ >
+ <File
+ RelativePath=".\protocol.xsd"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd protocol.xsd"
+ CommandLine="xsd cxx-tree --root-element-all protocol.xsd"
+ Outputs="protocol.hxx;protocol.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd protocol.xsd"
+ CommandLine="xsd cxx-tree --root-element-all protocol.xsd"
+ Outputs="protocol.hxx;protocol.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd protocol.xsd"
+ CommandLine="xsd cxx-tree --root-element-all protocol.xsd"
+ Outputs="protocol.hxx;protocol.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd protocol.xsd"
+ CommandLine="xsd cxx-tree --root-element-all protocol.xsd"
+ Outputs="protocol.hxx;protocol.cxx"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/multiroot/multiroot-xerces2-7.1.vcproj b/xsd/dist/examples/cxx/tree/multiroot/multiroot-xerces2-7.1.vcproj new file mode 100644 index 0000000..8d42356 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/multiroot/multiroot-xerces2-7.1.vcproj @@ -0,0 +1,170 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="multiroot"
+ ProjectGUID="{1CFBC9C5-5F9C-4B60-A2A3-0A79BCDD2670}"
+ RootNamespace="multiroot"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="TRUE"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="5"
+ RuntimeTypeInfo="TRUE"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="4"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="TRUE"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="4"
+ RuntimeTypeInfo="TRUE"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="3"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{761DEBB9-455C-4599-A11D-66D602C486C3}">
+ <File
+ RelativePath=".\driver.cxx">
+ </File>
+ <File
+ RelativePath=".\dom-parse.cxx">
+ </File>
+ <File
+ RelativePath=".\protocol.cxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{AAF07268-FD5E-485F-8EB8-1AFDDE8BFD57}">
+ <File
+ RelativePath=".\dom-parse.hxx">
+ </File>
+ <File
+ RelativePath=".\protocol.hxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd">
+ <File
+ RelativePath=".\protocol.xsd">
+ <FileConfiguration
+ Name="Debug|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd protocol.xsd"
+ CommandLine="xsd cxx-tree --root-element-all --generate-intellisense protocol.xsd"
+ Outputs="protocol.hxx;protocol.cxx"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd protocol.xsd"
+ CommandLine="xsd cxx-tree --root-element-all --generate-intellisense protocol.xsd"
+ Outputs="protocol.hxx;protocol.cxx"/>
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/multiroot/multiroot-xerces2-8.0.vcproj b/xsd/dist/examples/cxx/tree/multiroot/multiroot-xerces2-8.0.vcproj new file mode 100644 index 0000000..489e8ff --- /dev/null +++ b/xsd/dist/examples/cxx/tree/multiroot/multiroot-xerces2-8.0.vcproj @@ -0,0 +1,431 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="multiroot"
+ ProjectGUID="{1CFBC9C5-5F9C-4B60-A2A3-0A79BCDD2670}"
+ RootNamespace="multiroot"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{761DEBB9-455C-4599-A11D-66D602C486C3}"
+ >
+ <File
+ RelativePath=".\dom-parse.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\driver.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\protocol.cxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{AAF07268-FD5E-485F-8EB8-1AFDDE8BFD57}"
+ >
+ <File
+ RelativePath=".\dom-parse.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\protocol.hxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd"
+ >
+ <File
+ RelativePath=".\protocol.xsd"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd protocol.xsd"
+ CommandLine="xsd cxx-tree --root-element-all --generate-intellisense protocol.xsd"
+ Outputs="protocol.hxx;protocol.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd protocol.xsd"
+ CommandLine="xsd cxx-tree --root-element-all --generate-intellisense protocol.xsd"
+ Outputs="protocol.hxx;protocol.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd protocol.xsd"
+ CommandLine="xsd cxx-tree --root-element-all --generate-intellisense protocol.xsd"
+ Outputs="protocol.hxx;protocol.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd protocol.xsd"
+ CommandLine="xsd cxx-tree --root-element-all --generate-intellisense protocol.xsd"
+ Outputs="protocol.hxx;protocol.cxx"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/multiroot/multiroot-xerces2-9.0.vcproj b/xsd/dist/examples/cxx/tree/multiroot/multiroot-xerces2-9.0.vcproj new file mode 100644 index 0000000..c39bd06 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/multiroot/multiroot-xerces2-9.0.vcproj @@ -0,0 +1,428 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="multiroot"
+ ProjectGUID="{1CFBC9C5-5F9C-4B60-A2A3-0A79BCDD2670}"
+ RootNamespace="multiroot"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{761DEBB9-455C-4599-A11D-66D602C486C3}"
+ >
+ <File
+ RelativePath=".\dom-parse.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\driver.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\protocol.cxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{AAF07268-FD5E-485F-8EB8-1AFDDE8BFD57}"
+ >
+ <File
+ RelativePath=".\dom-parse.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\protocol.hxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd"
+ >
+ <File
+ RelativePath=".\protocol.xsd"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd protocol.xsd"
+ CommandLine="xsd cxx-tree --root-element-all protocol.xsd"
+ Outputs="protocol.hxx;protocol.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd protocol.xsd"
+ CommandLine="xsd cxx-tree --root-element-all protocol.xsd"
+ Outputs="protocol.hxx;protocol.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd protocol.xsd"
+ CommandLine="xsd cxx-tree --root-element-all protocol.xsd"
+ Outputs="protocol.hxx;protocol.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd protocol.xsd"
+ CommandLine="xsd cxx-tree --root-element-all protocol.xsd"
+ Outputs="protocol.hxx;protocol.cxx"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/performance/makefile b/xsd/dist/examples/cxx/tree/performance/makefile new file mode 100644 index 0000000..80bf4be --- /dev/null +++ b/xsd/dist/examples/cxx/tree/performance/makefile @@ -0,0 +1,34 @@ +root := ../../.. + +include $(root)/build/cxx/rules.make +include $(root)/build/xsd/tree-rules.make + + +override XSDFLAGS += --generate-inline --generate-serialization + + +# Build. +# +driver: driver.o parsing.o serialization.o test.o time.o + +driver.o: driver.cxx +test.o: test.cxx test.hxx test.ixx +parsing.o: parsing.cxx test.hxx test.ixx time.hxx +serialization.o: serialization.cxx test.hxx test.ixx time.hxx +time.o: time.cxx time.hxx + +test.cxx test.hxx test.ixx: test.xsd + + +# Test +# +.PHONY: test +test: driver test-50k.xml + ./driver test-50k.xml + + +# Clean. +# +.PHONY: clean +clean: + rm -f test.o test.?xx driver.o parsing.o serialization.o time.o driver diff --git a/xsd/dist/examples/cxx/tree/performance/performance-10.0.vcxproj b/xsd/dist/examples/cxx/tree/performance/performance-10.0.vcxproj new file mode 100644 index 0000000..46de693 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/performance/performance-10.0.vcxproj @@ -0,0 +1,214 @@ +<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectName>performance</ProjectName>
+ <ProjectGuid>{C60700D1-DB4B-4EFF-8EE9-97BD716BCB89}</ProjectGuid>
+ <RootNamespace>performance</RootNamespace>
+ <Keyword>Win32Proj</Keyword>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">driver</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">driver</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">driver</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">driver</TargetName>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Debug\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Debug\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)\$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)\$(Configuration)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Release\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Release\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)\$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)\$(Configuration)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ <RuntimeTypeInfo>true</RuntimeTypeInfo>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>xerces-c_3D.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)driver.pdb</ProgramDatabaseFile>
+ <SubSystem>Console</SubSystem>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ <RuntimeTypeInfo>true</RuntimeTypeInfo>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>xerces-c_3D.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)driver.pdb</ProgramDatabaseFile>
+ <SubSystem>Console</SubSystem>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <RuntimeTypeInfo>true</RuntimeTypeInfo>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>xerces-c_3.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <RuntimeTypeInfo>true</RuntimeTypeInfo>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>xerces-c_3.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="driver.cxx" />
+ <ClCompile Include="test.cxx" />
+ <ClCompile Include="time.cxx" />
+ <ClCompile Include="parsing.cxx" />
+ <ClCompile Include="serialization.cxx" />
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="test.hxx" />
+ <ClInclude Include="time.hxx" />
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="test.ixx" />
+ <None Include="Readme.txt" />
+ </ItemGroup>
+ <ItemGroup>
+ <CustomBuild Include="test.xsd">
+ <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">xsd test.xsd</Message>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">xsd cxx-tree --generate-inline --generate-serialization test.xsd</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">test.hxx;test.ixx;test.cxx;%(Outputs)</Outputs>
+ <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">xsd test.xsd</Message>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">xsd cxx-tree --generate-inline --generate-serialization test.xsd</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">test.hxx;test.ixx;test.cxx;%(Outputs)</Outputs>
+ <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">xsd test.xsd</Message>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">xsd cxx-tree --generate-inline --generate-serialization test.xsd</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">test.hxx;test.ixx;test.cxx;%(Outputs)</Outputs>
+ <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">xsd test.xsd</Message>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">xsd cxx-tree --generate-inline --generate-serialization test.xsd</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">test.hxx;test.ixx;test.cxx;%(Outputs)</Outputs>
+ </CustomBuild>
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project>
\ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/performance/performance-10.0.vcxproj.filters b/xsd/dist/examples/cxx/tree/performance/performance-10.0.vcxproj.filters new file mode 100644 index 0000000..6fc7fa3 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/performance/performance-10.0.vcxproj.filters @@ -0,0 +1,57 @@ +<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="Source Files">
+ <UniqueIdentifier>{4BF3D33D-891D-402D-A26F-AEBC35E127DE}</UniqueIdentifier>
+ <Extensions>cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+ </Filter>
+ <Filter Include="Header Files">
+ <UniqueIdentifier>{FD93B741-02F9-48B5-BE59-E5DD2C73CC7A}</UniqueIdentifier>
+ <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
+ </Filter>
+ <Filter Include="Inline Files">
+ <UniqueIdentifier>{e0558eb1-4ecb-42e8-b50b-e07487e59072}</UniqueIdentifier>
+ <Extensions>ixx</Extensions>
+ </Filter>
+ <Filter Include="Schema Files">
+ <UniqueIdentifier>{47ef7335-e3a1-4832-bff0-c59ac4d25088}</UniqueIdentifier>
+ <Extensions>xsd</Extensions>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="driver.cxx">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="test.cxx">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="time.cxx">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="parsing.cxx">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="serialization.cxx">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="test.hxx">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="time.hxx">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="test.ixx">
+ <Filter>Inline Files</Filter>
+ </None>
+ <None Include="Readme.txt" />
+ </ItemGroup>
+ <ItemGroup>
+ <CustomBuild Include="test.xsd">
+ <Filter>Schema Files</Filter>
+ </CustomBuild>
+ </ItemGroup>
+</Project>
\ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/performance/performance-7.1.vcproj b/xsd/dist/examples/cxx/tree/performance/performance-7.1.vcproj new file mode 100644 index 0000000..f5eace8 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/performance/performance-7.1.vcproj @@ -0,0 +1,183 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="performance"
+ ProjectGUID="{C60700D1-DB4B-4EFF-8EE9-97BD716BCB89}"
+ RootNamespace="performance"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="TRUE"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="5"
+ RuntimeTypeInfo="TRUE"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="4"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="TRUE"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="4"
+ RuntimeTypeInfo="TRUE"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="3"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{4BF3D33D-891D-402D-A26F-AEBC35E127DE}">
+ <File
+ RelativePath=".\driver.cxx">
+ </File>
+ <File
+ RelativePath=".\test.cxx">
+ </File>
+ <File
+ RelativePath=".\time.cxx">
+ </File>
+ <File
+ RelativePath=".\parsing.cxx">
+ </File>
+ <File
+ RelativePath=".\serialization.cxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{FD93B741-02F9-48B5-BE59-E5DD2C73CC7A}">
+ <File
+ RelativePath=".\test.hxx">
+ </File>
+ <File
+ RelativePath=".\time.hxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Inline Files"
+ Filter="ixx">
+ <File
+ RelativePath=".\test.ixx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd">
+ <File
+ RelativePath=".\test.xsd">
+ <FileConfiguration
+ Name="Debug|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd test.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-serialization --generate-intellisense test.xsd"
+ Outputs="test.hxx;test.ixx;test.cxx"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd test.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-serialization --generate-intellisense test.xsd"
+ Outputs="test.hxx;test.ixx;test.cxx"/>
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/performance/performance-8.0.vcproj b/xsd/dist/examples/cxx/tree/performance/performance-8.0.vcproj new file mode 100644 index 0000000..88d0e7c --- /dev/null +++ b/xsd/dist/examples/cxx/tree/performance/performance-8.0.vcproj @@ -0,0 +1,445 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="performance"
+ ProjectGUID="{C60700D1-DB4B-4EFF-8EE9-97BD716BCB89}"
+ RootNamespace="performance"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{4BF3D33D-891D-402D-A26F-AEBC35E127DE}"
+ >
+ <File
+ RelativePath=".\driver.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\test.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\time.cxx">
+ </File>
+ <File
+ RelativePath=".\parsing.cxx">
+ </File>
+ <File
+ RelativePath=".\serialization.cxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{FD93B741-02F9-48B5-BE59-E5DD2C73CC7A}"
+ >
+ <File
+ RelativePath=".\test.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\time.hxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Inline Files"
+ Filter="ixx"
+ >
+ <File
+ RelativePath=".\test.ixx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd"
+ >
+ <File
+ RelativePath=".\test.xsd"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd test.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-serialization --generate-intellisense test.xsd"
+ Outputs="test.hxx;test.ixx;test.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd test.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-serialization --generate-intellisense test.xsd"
+ Outputs="test.hxx;test.ixx;test.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd test.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-serialization --generate-intellisense test.xsd"
+ Outputs="test.hxx;test.ixx;test.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd test.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-serialization --generate-intellisense test.xsd"
+ Outputs="test.hxx;test.ixx;test.cxx"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/performance/performance-9.0.vcproj b/xsd/dist/examples/cxx/tree/performance/performance-9.0.vcproj new file mode 100644 index 0000000..907e153 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/performance/performance-9.0.vcproj @@ -0,0 +1,442 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="performance"
+ ProjectGUID="{C60700D1-DB4B-4EFF-8EE9-97BD716BCB89}"
+ RootNamespace="performance"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{4BF3D33D-891D-402D-A26F-AEBC35E127DE}"
+ >
+ <File
+ RelativePath=".\driver.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\test.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\time.cxx">
+ </File>
+ <File
+ RelativePath=".\parsing.cxx">
+ </File>
+ <File
+ RelativePath=".\serialization.cxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{FD93B741-02F9-48B5-BE59-E5DD2C73CC7A}"
+ >
+ <File
+ RelativePath=".\test.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\time.hxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Inline Files"
+ Filter="ixx"
+ >
+ <File
+ RelativePath=".\test.ixx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd"
+ >
+ <File
+ RelativePath=".\test.xsd"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd test.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-serialization test.xsd"
+ Outputs="test.hxx;test.ixx;test.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd test.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-serialization test.xsd"
+ Outputs="test.hxx;test.ixx;test.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd test.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-serialization test.xsd"
+ Outputs="test.hxx;test.ixx;test.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd test.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-serialization test.xsd"
+ Outputs="test.hxx;test.ixx;test.cxx"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/performance/performance-xerces2-7.1.vcproj b/xsd/dist/examples/cxx/tree/performance/performance-xerces2-7.1.vcproj new file mode 100644 index 0000000..9fb5f98 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/performance/performance-xerces2-7.1.vcproj @@ -0,0 +1,183 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="performance"
+ ProjectGUID="{C60700D1-DB4B-4EFF-8EE9-97BD716BCB89}"
+ RootNamespace="performance"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="TRUE"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="5"
+ RuntimeTypeInfo="TRUE"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="4"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="TRUE"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="4"
+ RuntimeTypeInfo="TRUE"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="3"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{4BF3D33D-891D-402D-A26F-AEBC35E127DE}">
+ <File
+ RelativePath=".\driver.cxx">
+ </File>
+ <File
+ RelativePath=".\test.cxx">
+ </File>
+ <File
+ RelativePath=".\time.cxx">
+ </File>
+ <File
+ RelativePath=".\parsing.cxx">
+ </File>
+ <File
+ RelativePath=".\serialization.cxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{FD93B741-02F9-48B5-BE59-E5DD2C73CC7A}">
+ <File
+ RelativePath=".\test.hxx">
+ </File>
+ <File
+ RelativePath=".\time.hxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Inline Files"
+ Filter="ixx">
+ <File
+ RelativePath=".\test.ixx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd">
+ <File
+ RelativePath=".\test.xsd">
+ <FileConfiguration
+ Name="Debug|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd test.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-serialization --generate-intellisense test.xsd"
+ Outputs="test.hxx;test.ixx;test.cxx"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd test.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-serialization --generate-intellisense test.xsd"
+ Outputs="test.hxx;test.ixx;test.cxx"/>
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/performance/performance-xerces2-8.0.vcproj b/xsd/dist/examples/cxx/tree/performance/performance-xerces2-8.0.vcproj new file mode 100644 index 0000000..0feba16 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/performance/performance-xerces2-8.0.vcproj @@ -0,0 +1,445 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="performance"
+ ProjectGUID="{C60700D1-DB4B-4EFF-8EE9-97BD716BCB89}"
+ RootNamespace="performance"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{4BF3D33D-891D-402D-A26F-AEBC35E127DE}"
+ >
+ <File
+ RelativePath=".\driver.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\test.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\time.cxx">
+ </File>
+ <File
+ RelativePath=".\parsing.cxx">
+ </File>
+ <File
+ RelativePath=".\serialization.cxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{FD93B741-02F9-48B5-BE59-E5DD2C73CC7A}"
+ >
+ <File
+ RelativePath=".\test.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\time.hxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Inline Files"
+ Filter="ixx"
+ >
+ <File
+ RelativePath=".\test.ixx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd"
+ >
+ <File
+ RelativePath=".\test.xsd"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd test.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-serialization --generate-intellisense test.xsd"
+ Outputs="test.hxx;test.ixx;test.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd test.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-serialization --generate-intellisense test.xsd"
+ Outputs="test.hxx;test.ixx;test.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd test.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-serialization --generate-intellisense test.xsd"
+ Outputs="test.hxx;test.ixx;test.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd test.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-serialization --generate-intellisense test.xsd"
+ Outputs="test.hxx;test.ixx;test.cxx"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/performance/performance-xerces2-9.0.vcproj b/xsd/dist/examples/cxx/tree/performance/performance-xerces2-9.0.vcproj new file mode 100644 index 0000000..561e294 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/performance/performance-xerces2-9.0.vcproj @@ -0,0 +1,442 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="performance"
+ ProjectGUID="{C60700D1-DB4B-4EFF-8EE9-97BD716BCB89}"
+ RootNamespace="performance"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{4BF3D33D-891D-402D-A26F-AEBC35E127DE}"
+ >
+ <File
+ RelativePath=".\driver.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\test.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\time.cxx">
+ </File>
+ <File
+ RelativePath=".\parsing.cxx">
+ </File>
+ <File
+ RelativePath=".\serialization.cxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{FD93B741-02F9-48B5-BE59-E5DD2C73CC7A}"
+ >
+ <File
+ RelativePath=".\test.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\time.hxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Inline Files"
+ Filter="ixx"
+ >
+ <File
+ RelativePath=".\test.ixx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd"
+ >
+ <File
+ RelativePath=".\test.xsd"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd test.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-serialization test.xsd"
+ Outputs="test.hxx;test.ixx;test.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd test.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-serialization test.xsd"
+ Outputs="test.hxx;test.ixx;test.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd test.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-serialization test.xsd"
+ Outputs="test.hxx;test.ixx;test.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd test.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-serialization test.xsd"
+ Outputs="test.hxx;test.ixx;test.cxx"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/polymorphism/makefile b/xsd/dist/examples/cxx/tree/polymorphism/makefile new file mode 100644 index 0000000..282266e --- /dev/null +++ b/xsd/dist/examples/cxx/tree/polymorphism/makefile @@ -0,0 +1,30 @@ +root := ../../.. + +include $(root)/build/cxx/rules.make +include $(root)/build/xsd/tree-rules.make + +override XSDFLAGS += --generate-polymorphic --generate-serialization --root-element-last + + +# Build. +# +driver: driver.o supermen.o + +supermen.o: supermen.cxx supermen.hxx +driver.o: driver.cxx supermen.hxx + +supermen.cxx supermen.hxx: supermen.xsd + + +# Test. +# +.PHONY: test +test: driver supermen.xml + ./driver supermen.xml + + +# Clean. +# +.PHONY: clean +clean: + rm -f supermen.o supermen.?xx driver.o driver diff --git a/xsd/dist/examples/cxx/tree/polymorphism/polymorphism-10.0.vcxproj b/xsd/dist/examples/cxx/tree/polymorphism/polymorphism-10.0.vcxproj new file mode 100644 index 0000000..184ebe9 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/polymorphism/polymorphism-10.0.vcxproj @@ -0,0 +1,209 @@ +<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectName>polymorphism</ProjectName>
+ <ProjectGuid>{03224289-FD3C-4A58-A6D7-E8D658B0E45A}</ProjectGuid>
+ <RootNamespace>polymorphism</RootNamespace>
+ <Keyword>Win32Proj</Keyword>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">driver</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">driver</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">driver</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">driver</TargetName>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Debug\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Debug\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)\$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)\$(Configuration)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Release\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Release\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)\$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)\$(Configuration)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ <RuntimeTypeInfo>true</RuntimeTypeInfo>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>xerces-c_3D.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)driver.pdb</ProgramDatabaseFile>
+ <SubSystem>Console</SubSystem>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ <RuntimeTypeInfo>true</RuntimeTypeInfo>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>xerces-c_3D.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)driver.pdb</ProgramDatabaseFile>
+ <SubSystem>Console</SubSystem>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <RuntimeTypeInfo>true</RuntimeTypeInfo>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>xerces-c_3.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <RuntimeTypeInfo>true</RuntimeTypeInfo>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>xerces-c_3.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="driver.cxx" />
+ <ClCompile Include="supermen.cxx" />
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="supermen.hxx" />
+ </ItemGroup>
+ <ItemGroup>
+ <CustomBuild Include="supermen.xsd">
+ <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">xsd supermen.xsd</Message>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">xsd.exe cxx-tree --generate-polymorphic --generate-serialization --root-element-last supermen.xsd</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">supermen.cxx;supermen.hxx;%(Outputs)</Outputs>
+ <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">xsd supermen.xsd</Message>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">xsd.exe cxx-tree --generate-polymorphic --generate-serialization --root-element-last supermen.xsd</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">supermen.cxx;supermen.hxx;%(Outputs)</Outputs>
+ <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">xsd supermen.xsd</Message>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">xsd.exe cxx-tree --generate-polymorphic --generate-serialization --root-element-last supermen.xsd</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">supermen.cxx;supermen.hxx;%(Outputs)</Outputs>
+ <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">xsd supermen.xsd</Message>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">xsd.exe cxx-tree --generate-polymorphic --generate-serialization --root-element-last supermen.xsd</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">supermen.cxx;supermen.hxx;%(Outputs)</Outputs>
+ </CustomBuild>
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="Readme.txt" />
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project>
\ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/polymorphism/polymorphism-10.0.vcxproj.filters b/xsd/dist/examples/cxx/tree/polymorphism/polymorphism-10.0.vcxproj.filters new file mode 100644 index 0000000..4459d2c --- /dev/null +++ b/xsd/dist/examples/cxx/tree/polymorphism/polymorphism-10.0.vcxproj.filters @@ -0,0 +1,38 @@ +<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="Source Files">
+ <UniqueIdentifier>{A02BB28E-3A7B-4E9E-A2AC-AA264C62525C}</UniqueIdentifier>
+ <Extensions>cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+ </Filter>
+ <Filter Include="Header Files">
+ <UniqueIdentifier>{6B2184D0-2125-48EB-AE80-64E24055DCE4}</UniqueIdentifier>
+ <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
+ </Filter>
+ <Filter Include="Schema Files">
+ <UniqueIdentifier>{e32c9352-17dd-4c6c-b9fa-fadaf6eee928}</UniqueIdentifier>
+ <Extensions>xsd</Extensions>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="driver.cxx">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="supermen.cxx">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="supermen.hxx">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="Readme.txt" />
+ </ItemGroup>
+ <ItemGroup>
+ <CustomBuild Include="supermen.xsd">
+ <Filter>Schema Files</Filter>
+ </CustomBuild>
+ </ItemGroup>
+</Project>
\ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/polymorphism/polymorphism-7.1.vcproj b/xsd/dist/examples/cxx/tree/polymorphism/polymorphism-7.1.vcproj new file mode 100644 index 0000000..c47b133 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/polymorphism/polymorphism-7.1.vcproj @@ -0,0 +1,164 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="polymorphism"
+ ProjectGUID="{03224289-FD3C-4A58-A6D7-E8D658B0E45A}"
+ RootNamespace="polymorphism"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="TRUE"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="5"
+ RuntimeTypeInfo="TRUE"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="4"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="TRUE"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="4"
+ RuntimeTypeInfo="TRUE"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="3"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{A02BB28E-3A7B-4E9E-A2AC-AA264C62525C}">
+ <File
+ RelativePath=".\driver.cxx">
+ </File>
+ <File
+ RelativePath=".\supermen.cxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{6B2184D0-2125-48EB-AE80-64E24055DCE4}">
+ <File
+ RelativePath=".\supermen.hxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd">
+ <File
+ RelativePath=".\supermen.xsd">
+ <FileConfiguration
+ Name="Debug|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd supermen.xsd"
+ CommandLine="xsd.exe cxx-tree --generate-polymorphic --generate-serialization --generate-intellisense --root-element-last supermen.xsd"
+ Outputs="supermen.cxx;supermen.hxx"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd supermen.xsd"
+ CommandLine="xsd.exe cxx-tree --generate-polymorphic --generate-serialization --generate-intellisense --root-element-last supermen.xsd"
+ Outputs="supermen.cxx;supermen.hxx"/>
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/polymorphism/polymorphism-8.0.vcproj b/xsd/dist/examples/cxx/tree/polymorphism/polymorphism-8.0.vcproj new file mode 100644 index 0000000..6e5478c --- /dev/null +++ b/xsd/dist/examples/cxx/tree/polymorphism/polymorphism-8.0.vcproj @@ -0,0 +1,423 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="polymorphism"
+ ProjectGUID="{03224289-FD3C-4A58-A6D7-E8D658B0E45A}"
+ RootNamespace="polymorphism"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{A02BB28E-3A7B-4E9E-A2AC-AA264C62525C}"
+ >
+ <File
+ RelativePath=".\driver.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\supermen.cxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{6B2184D0-2125-48EB-AE80-64E24055DCE4}"
+ >
+ <File
+ RelativePath=".\supermen.hxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd"
+ >
+ <File
+ RelativePath=".\supermen.xsd"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd supermen.xsd"
+ CommandLine="xsd.exe cxx-tree --generate-polymorphic --generate-serialization --generate-intellisense --root-element-last supermen.xsd"
+ Outputs="supermen.cxx;supermen.hxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd supermen.xsd"
+ CommandLine="xsd.exe cxx-tree --generate-polymorphic --generate-serialization --generate-intellisense --root-element-last supermen.xsd"
+ Outputs="supermen.cxx;supermen.hxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd supermen.xsd"
+ CommandLine="xsd.exe cxx-tree --generate-polymorphic --generate-serialization --generate-intellisense --root-element-last supermen.xsd"
+ Outputs="supermen.cxx;supermen.hxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd supermen.xsd"
+ CommandLine="xsd.exe cxx-tree --generate-polymorphic --generate-serialization --generate-intellisense --root-element-last supermen.xsd"
+ Outputs="supermen.cxx;supermen.hxx"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/polymorphism/polymorphism-9.0.vcproj b/xsd/dist/examples/cxx/tree/polymorphism/polymorphism-9.0.vcproj new file mode 100644 index 0000000..dd033ab --- /dev/null +++ b/xsd/dist/examples/cxx/tree/polymorphism/polymorphism-9.0.vcproj @@ -0,0 +1,420 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="polymorphism"
+ ProjectGUID="{03224289-FD3C-4A58-A6D7-E8D658B0E45A}"
+ RootNamespace="polymorphism"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{A02BB28E-3A7B-4E9E-A2AC-AA264C62525C}"
+ >
+ <File
+ RelativePath=".\driver.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\supermen.cxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{6B2184D0-2125-48EB-AE80-64E24055DCE4}"
+ >
+ <File
+ RelativePath=".\supermen.hxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd"
+ >
+ <File
+ RelativePath=".\supermen.xsd"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd supermen.xsd"
+ CommandLine="xsd.exe cxx-tree --generate-polymorphic --generate-serialization --root-element-last supermen.xsd"
+ Outputs="supermen.cxx;supermen.hxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd supermen.xsd"
+ CommandLine="xsd.exe cxx-tree --generate-polymorphic --generate-serialization --root-element-last supermen.xsd"
+ Outputs="supermen.cxx;supermen.hxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd supermen.xsd"
+ CommandLine="xsd.exe cxx-tree --generate-polymorphic --generate-serialization --root-element-last supermen.xsd"
+ Outputs="supermen.cxx;supermen.hxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd supermen.xsd"
+ CommandLine="xsd.exe cxx-tree --generate-polymorphic --generate-serialization --root-element-last supermen.xsd"
+ Outputs="supermen.cxx;supermen.hxx"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/polymorphism/polymorphism-xerces2-7.1.vcproj b/xsd/dist/examples/cxx/tree/polymorphism/polymorphism-xerces2-7.1.vcproj new file mode 100644 index 0000000..47a0568 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/polymorphism/polymorphism-xerces2-7.1.vcproj @@ -0,0 +1,164 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="polymorphism"
+ ProjectGUID="{03224289-FD3C-4A58-A6D7-E8D658B0E45A}"
+ RootNamespace="polymorphism"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="TRUE"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="5"
+ RuntimeTypeInfo="TRUE"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="4"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="TRUE"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="4"
+ RuntimeTypeInfo="TRUE"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="3"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{A02BB28E-3A7B-4E9E-A2AC-AA264C62525C}">
+ <File
+ RelativePath=".\driver.cxx">
+ </File>
+ <File
+ RelativePath=".\supermen.cxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{6B2184D0-2125-48EB-AE80-64E24055DCE4}">
+ <File
+ RelativePath=".\supermen.hxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd">
+ <File
+ RelativePath=".\supermen.xsd">
+ <FileConfiguration
+ Name="Debug|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd supermen.xsd"
+ CommandLine="xsd.exe cxx-tree --generate-polymorphic --generate-serialization --generate-intellisense --root-element-last supermen.xsd"
+ Outputs="supermen.cxx;supermen.hxx"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd supermen.xsd"
+ CommandLine="xsd.exe cxx-tree --generate-polymorphic --generate-serialization --generate-intellisense --root-element-last supermen.xsd"
+ Outputs="supermen.cxx;supermen.hxx"/>
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/polymorphism/polymorphism-xerces2-8.0.vcproj b/xsd/dist/examples/cxx/tree/polymorphism/polymorphism-xerces2-8.0.vcproj new file mode 100644 index 0000000..539f395 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/polymorphism/polymorphism-xerces2-8.0.vcproj @@ -0,0 +1,423 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="polymorphism"
+ ProjectGUID="{03224289-FD3C-4A58-A6D7-E8D658B0E45A}"
+ RootNamespace="polymorphism"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{A02BB28E-3A7B-4E9E-A2AC-AA264C62525C}"
+ >
+ <File
+ RelativePath=".\driver.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\supermen.cxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{6B2184D0-2125-48EB-AE80-64E24055DCE4}"
+ >
+ <File
+ RelativePath=".\supermen.hxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd"
+ >
+ <File
+ RelativePath=".\supermen.xsd"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd supermen.xsd"
+ CommandLine="xsd.exe cxx-tree --generate-polymorphic --generate-serialization --generate-intellisense --root-element-last supermen.xsd"
+ Outputs="supermen.cxx;supermen.hxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd supermen.xsd"
+ CommandLine="xsd.exe cxx-tree --generate-polymorphic --generate-serialization --generate-intellisense --root-element-last supermen.xsd"
+ Outputs="supermen.cxx;supermen.hxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd supermen.xsd"
+ CommandLine="xsd.exe cxx-tree --generate-polymorphic --generate-serialization --generate-intellisense --root-element-last supermen.xsd"
+ Outputs="supermen.cxx;supermen.hxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd supermen.xsd"
+ CommandLine="xsd.exe cxx-tree --generate-polymorphic --generate-serialization --generate-intellisense --root-element-last supermen.xsd"
+ Outputs="supermen.cxx;supermen.hxx"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/polymorphism/polymorphism-xerces2-9.0.vcproj b/xsd/dist/examples/cxx/tree/polymorphism/polymorphism-xerces2-9.0.vcproj new file mode 100644 index 0000000..cc48260 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/polymorphism/polymorphism-xerces2-9.0.vcproj @@ -0,0 +1,420 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="polymorphism"
+ ProjectGUID="{03224289-FD3C-4A58-A6D7-E8D658B0E45A}"
+ RootNamespace="polymorphism"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{A02BB28E-3A7B-4E9E-A2AC-AA264C62525C}"
+ >
+ <File
+ RelativePath=".\driver.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\supermen.cxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{6B2184D0-2125-48EB-AE80-64E24055DCE4}"
+ >
+ <File
+ RelativePath=".\supermen.hxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd"
+ >
+ <File
+ RelativePath=".\supermen.xsd"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd supermen.xsd"
+ CommandLine="xsd.exe cxx-tree --generate-polymorphic --generate-serialization --root-element-last supermen.xsd"
+ Outputs="supermen.cxx;supermen.hxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd supermen.xsd"
+ CommandLine="xsd.exe cxx-tree --generate-polymorphic --generate-serialization --root-element-last supermen.xsd"
+ Outputs="supermen.cxx;supermen.hxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd supermen.xsd"
+ CommandLine="xsd.exe cxx-tree --generate-polymorphic --generate-serialization --root-element-last supermen.xsd"
+ Outputs="supermen.cxx;supermen.hxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd supermen.xsd"
+ CommandLine="xsd.exe cxx-tree --generate-polymorphic --generate-serialization --root-element-last supermen.xsd"
+ Outputs="supermen.cxx;supermen.hxx"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/streaming/makefile b/xsd/dist/examples/cxx/tree/streaming/makefile new file mode 100644 index 0000000..ed32b83 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/streaming/makefile @@ -0,0 +1,33 @@ +root := ../../.. + +include $(root)/build/cxx/rules.make +include $(root)/build/xsd/tree-rules.make + + +override XSDFLAGS += --generate-serialization + + +# Build. +# +driver: driver.o parser.o serializer.o position.o + +position.o: position.cxx position.hxx +driver.o: driver.cxx position.hxx parser.hxx serializer.hxx +parser.o: parser.cxx parser.hxx +serializer.o: serializer.cxx serializer.hxx + +position.cxx position.hxx: position.xsd + + +# Test +# +.PHONY: test +test: driver position.xml + ./driver position.xml + + +# Clean. +# +.PHONY: clean +clean: + rm -f position.o position.?xx parser.o serializer.o driver.o driver out.xml diff --git a/xsd/dist/examples/cxx/tree/streaming/streaming-10.0.vcxproj b/xsd/dist/examples/cxx/tree/streaming/streaming-10.0.vcxproj new file mode 100644 index 0000000..fb74ff1 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/streaming/streaming-10.0.vcxproj @@ -0,0 +1,213 @@ +<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectName>streaming</ProjectName>
+ <ProjectGuid>{3950B11C-AEB1-4E9C-BCB3-2E7133818C79}</ProjectGuid>
+ <RootNamespace>streaming</RootNamespace>
+ <Keyword>Win32Proj</Keyword>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">driver</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">driver</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">driver</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">driver</TargetName>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Debug\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Debug\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)\$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)\$(Configuration)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Release\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Release\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)\$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)\$(Configuration)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ <RuntimeTypeInfo>true</RuntimeTypeInfo>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>xerces-c_3D.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)driver.pdb</ProgramDatabaseFile>
+ <SubSystem>Console</SubSystem>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ <RuntimeTypeInfo>true</RuntimeTypeInfo>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>xerces-c_3D.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)driver.pdb</ProgramDatabaseFile>
+ <SubSystem>Console</SubSystem>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <RuntimeTypeInfo>true</RuntimeTypeInfo>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>xerces-c_3.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <RuntimeTypeInfo>true</RuntimeTypeInfo>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>xerces-c_3.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="driver.cxx" />
+ <ClCompile Include="position.cxx" />
+ <ClCompile Include="parser.cxx" />
+ <ClCompile Include="serializer.cxx" />
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="position.hxx" />
+ <ClInclude Include="parser.hxx" />
+ <ClInclude Include="serializer.hxx" />
+ </ItemGroup>
+ <ItemGroup>
+ <CustomBuild Include="position.xsd">
+ <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">xsd position.xsd</Message>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">xsd.exe cxx-tree --generate-serialization position.xsd</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">position.cxx;position.hxx;%(Outputs)</Outputs>
+ <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">xsd position.xsd</Message>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">xsd.exe cxx-tree --generate-serialization position.xsd</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">position.cxx;position.hxx;%(Outputs)</Outputs>
+ <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">xsd position.xsd</Message>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">xsd.exe cxx-tree --generate-serialization position.xsd</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">position.cxx;position.hxx;%(Outputs)</Outputs>
+ <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">xsd position.xsd</Message>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">xsd.exe cxx-tree --generate-serialization position.xsd</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">position.cxx;position.hxx;%(Outputs)</Outputs>
+ </CustomBuild>
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="Readme.txt" />
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project>
\ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/streaming/streaming-10.0.vcxproj.filters b/xsd/dist/examples/cxx/tree/streaming/streaming-10.0.vcxproj.filters new file mode 100644 index 0000000..cf8b190 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/streaming/streaming-10.0.vcxproj.filters @@ -0,0 +1,50 @@ +<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="Source Files">
+ <UniqueIdentifier>{4F684AD4-DFB2-4488-BA73-8625AECC91A3}</UniqueIdentifier>
+ <Extensions>cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+ </Filter>
+ <Filter Include="Header Files">
+ <UniqueIdentifier>{94F3375D-5EB8-4D2C-8739-4D47E9AB7072}</UniqueIdentifier>
+ <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
+ </Filter>
+ <Filter Include="Schema Files">
+ <UniqueIdentifier>{b73125d6-60b1-4f32-9cfb-d11e709d0d14}</UniqueIdentifier>
+ <Extensions>xsd</Extensions>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="driver.cxx">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="position.cxx">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="parser.cxx">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="serializer.cxx">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="position.hxx">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="parser.hxx">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="serializer.hxx">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="Readme.txt" />
+ </ItemGroup>
+ <ItemGroup>
+ <CustomBuild Include="position.xsd">
+ <Filter>Schema Files</Filter>
+ </CustomBuild>
+ </ItemGroup>
+</Project>
\ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/streaming/streaming-7.1.vcproj b/xsd/dist/examples/cxx/tree/streaming/streaming-7.1.vcproj new file mode 100644 index 0000000..7a11fe9 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/streaming/streaming-7.1.vcproj @@ -0,0 +1,176 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="streaming"
+ ProjectGUID="{3950B11C-AEB1-4E9C-BCB3-2E7133818C79}"
+ RootNamespace="streaming"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="TRUE"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="5"
+ RuntimeTypeInfo="TRUE"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="4"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="TRUE"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="4"
+ RuntimeTypeInfo="TRUE"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="3"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{4F684AD4-DFB2-4488-BA73-8625AECC91A3}">
+ <File
+ RelativePath=".\driver.cxx">
+ </File>
+ <File
+ RelativePath=".\position.cxx">
+ </File>
+ <File
+ RelativePath=".\parser.cxx">
+ </File>
+ <File
+ RelativePath=".\serializer.cxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{94F3375D-5EB8-4D2C-8739-4D47E9AB7072}">
+ <File
+ RelativePath=".\position.hxx">
+ </File>
+ <File
+ RelativePath=".\parser.hxx">
+ </File>
+ <File
+ RelativePath=".\serializer.hxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd">
+ <File
+ RelativePath=".\position.xsd">
+ <FileConfiguration
+ Name="Debug|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd position.xsd"
+ CommandLine="xsd.exe cxx-tree --generate-serialization --generate-intellisense position.xsd"
+ Outputs="position.cxx;position.hxx"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd position.xsd"
+ CommandLine="xsd.exe cxx-tree --generate-serialization --generate-intellisense position.xsd"
+ Outputs="position.cxx;position.hxx"/>
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/streaming/streaming-8.0.vcproj b/xsd/dist/examples/cxx/tree/streaming/streaming-8.0.vcproj new file mode 100644 index 0000000..b7f65d0 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/streaming/streaming-8.0.vcproj @@ -0,0 +1,435 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="streaming"
+ ProjectGUID="{3950B11C-AEB1-4E9C-BCB3-2E7133818C79}"
+ RootNamespace="streaming"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{4F684AD4-DFB2-4488-BA73-8625AECC91A3}"
+ >
+ <File
+ RelativePath=".\driver.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\position.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\parser.cxx">
+ </File>
+ <File
+ RelativePath=".\serializer.cxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{94F3375D-5EB8-4D2C-8739-4D47E9AB7072}"
+ >
+ <File
+ RelativePath=".\position.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\parser.hxx">
+ </File>
+ <File
+ RelativePath=".\serializer.hxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd"
+ >
+ <File
+ RelativePath=".\position.xsd"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd position.xsd"
+ CommandLine="xsd.exe cxx-tree --generate-serialization --generate-intellisense position.xsd"
+ Outputs="position.cxx;position.hxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd position.xsd"
+ CommandLine="xsd.exe cxx-tree --generate-serialization --generate-intellisense position.xsd"
+ Outputs="position.cxx;position.hxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd position.xsd"
+ CommandLine="xsd.exe cxx-tree --generate-serialization --generate-intellisense position.xsd"
+ Outputs="position.cxx;position.hxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd position.xsd"
+ CommandLine="xsd.exe cxx-tree --generate-serialization --generate-intellisense position.xsd"
+ Outputs="position.cxx;position.hxx"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/streaming/streaming-9.0.vcproj b/xsd/dist/examples/cxx/tree/streaming/streaming-9.0.vcproj new file mode 100644 index 0000000..cbfec59 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/streaming/streaming-9.0.vcproj @@ -0,0 +1,432 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="streaming"
+ ProjectGUID="{3950B11C-AEB1-4E9C-BCB3-2E7133818C79}"
+ RootNamespace="streaming"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{4F684AD4-DFB2-4488-BA73-8625AECC91A3}"
+ >
+ <File
+ RelativePath=".\driver.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\position.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\parser.cxx">
+ </File>
+ <File
+ RelativePath=".\serializer.cxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{94F3375D-5EB8-4D2C-8739-4D47E9AB7072}"
+ >
+ <File
+ RelativePath=".\position.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\parser.hxx">
+ </File>
+ <File
+ RelativePath=".\serializer.hxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd"
+ >
+ <File
+ RelativePath=".\position.xsd"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd position.xsd"
+ CommandLine="xsd.exe cxx-tree --generate-serialization position.xsd"
+ Outputs="position.cxx;position.hxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd position.xsd"
+ CommandLine="xsd.exe cxx-tree --generate-serialization position.xsd"
+ Outputs="position.cxx;position.hxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd position.xsd"
+ CommandLine="xsd.exe cxx-tree --generate-serialization position.xsd"
+ Outputs="position.cxx;position.hxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd position.xsd"
+ CommandLine="xsd.exe cxx-tree --generate-serialization position.xsd"
+ Outputs="position.cxx;position.hxx"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/streaming/streaming-xerces2-7.1.vcproj b/xsd/dist/examples/cxx/tree/streaming/streaming-xerces2-7.1.vcproj new file mode 100644 index 0000000..b606b8f --- /dev/null +++ b/xsd/dist/examples/cxx/tree/streaming/streaming-xerces2-7.1.vcproj @@ -0,0 +1,176 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="streaming"
+ ProjectGUID="{3950B11C-AEB1-4E9C-BCB3-2E7133818C79}"
+ RootNamespace="streaming"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="TRUE"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="5"
+ RuntimeTypeInfo="TRUE"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="4"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="TRUE"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="4"
+ RuntimeTypeInfo="TRUE"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="3"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{4F684AD4-DFB2-4488-BA73-8625AECC91A3}">
+ <File
+ RelativePath=".\driver.cxx">
+ </File>
+ <File
+ RelativePath=".\position.cxx">
+ </File>
+ <File
+ RelativePath=".\parser.cxx">
+ </File>
+ <File
+ RelativePath=".\serializer.cxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{94F3375D-5EB8-4D2C-8739-4D47E9AB7072}">
+ <File
+ RelativePath=".\position.hxx">
+ </File>
+ <File
+ RelativePath=".\parser.hxx">
+ </File>
+ <File
+ RelativePath=".\serializer.hxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd">
+ <File
+ RelativePath=".\position.xsd">
+ <FileConfiguration
+ Name="Debug|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd position.xsd"
+ CommandLine="xsd.exe cxx-tree --generate-serialization --generate-intellisense position.xsd"
+ Outputs="position.cxx;position.hxx"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd position.xsd"
+ CommandLine="xsd.exe cxx-tree --generate-serialization --generate-intellisense position.xsd"
+ Outputs="position.cxx;position.hxx"/>
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/streaming/streaming-xerces2-8.0.vcproj b/xsd/dist/examples/cxx/tree/streaming/streaming-xerces2-8.0.vcproj new file mode 100644 index 0000000..fbd555e --- /dev/null +++ b/xsd/dist/examples/cxx/tree/streaming/streaming-xerces2-8.0.vcproj @@ -0,0 +1,435 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="streaming"
+ ProjectGUID="{3950B11C-AEB1-4E9C-BCB3-2E7133818C79}"
+ RootNamespace="streaming"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{4F684AD4-DFB2-4488-BA73-8625AECC91A3}"
+ >
+ <File
+ RelativePath=".\driver.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\position.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\parser.cxx">
+ </File>
+ <File
+ RelativePath=".\serializer.cxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{94F3375D-5EB8-4D2C-8739-4D47E9AB7072}"
+ >
+ <File
+ RelativePath=".\position.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\parser.hxx">
+ </File>
+ <File
+ RelativePath=".\serializer.hxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd"
+ >
+ <File
+ RelativePath=".\position.xsd"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd position.xsd"
+ CommandLine="xsd.exe cxx-tree --generate-serialization --generate-intellisense position.xsd"
+ Outputs="position.cxx;position.hxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd position.xsd"
+ CommandLine="xsd.exe cxx-tree --generate-serialization --generate-intellisense position.xsd"
+ Outputs="position.cxx;position.hxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd position.xsd"
+ CommandLine="xsd.exe cxx-tree --generate-serialization --generate-intellisense position.xsd"
+ Outputs="position.cxx;position.hxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd position.xsd"
+ CommandLine="xsd.exe cxx-tree --generate-serialization --generate-intellisense position.xsd"
+ Outputs="position.cxx;position.hxx"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/streaming/streaming-xerces2-9.0.vcproj b/xsd/dist/examples/cxx/tree/streaming/streaming-xerces2-9.0.vcproj new file mode 100644 index 0000000..e3da54b --- /dev/null +++ b/xsd/dist/examples/cxx/tree/streaming/streaming-xerces2-9.0.vcproj @@ -0,0 +1,432 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="streaming"
+ ProjectGUID="{3950B11C-AEB1-4E9C-BCB3-2E7133818C79}"
+ RootNamespace="streaming"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{4F684AD4-DFB2-4488-BA73-8625AECC91A3}"
+ >
+ <File
+ RelativePath=".\driver.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\position.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\parser.cxx">
+ </File>
+ <File
+ RelativePath=".\serializer.cxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{94F3375D-5EB8-4D2C-8739-4D47E9AB7072}"
+ >
+ <File
+ RelativePath=".\position.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\parser.hxx">
+ </File>
+ <File
+ RelativePath=".\serializer.hxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd"
+ >
+ <File
+ RelativePath=".\position.xsd"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd position.xsd"
+ CommandLine="xsd.exe cxx-tree --generate-serialization position.xsd"
+ Outputs="position.cxx;position.hxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd position.xsd"
+ CommandLine="xsd.exe cxx-tree --generate-serialization position.xsd"
+ Outputs="position.cxx;position.hxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd position.xsd"
+ CommandLine="xsd.exe cxx-tree --generate-serialization position.xsd"
+ Outputs="position.cxx;position.hxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd position.xsd"
+ CommandLine="xsd.exe cxx-tree --generate-serialization position.xsd"
+ Outputs="position.cxx;position.hxx"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/tree-10.0.sln b/xsd/dist/examples/cxx/tree/tree-10.0.sln new file mode 100644 index 0000000..3f9d2e2 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/tree-10.0.sln @@ -0,0 +1,115 @@ +Microsoft Visual Studio Solution File, Format Version 11.00
+# Visual Studio 2010
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "hello", "hello\hello-10.0.vcxproj", "{538CCAB6-984B-4602-B0D0-985E8FD4FEB9}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "library", "library\library-10.0.vcxproj", "{D661AD5B-5FF4-4AFD-A656-429BA348E9EF}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mixed", "mixed\mixed-10.0.vcxproj", "{6EF7868E-AA58-4615-9C1A-06B010CB4209}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "polymorphism", "polymorphism\polymorphism-10.0.vcxproj", "{03224289-FD3C-4A58-A6D7-E8D658B0E45A}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "streaming", "streaming\streaming-10.0.vcxproj", "{3950B11C-AEB1-4E9C-BCB3-2E7133818C79}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wildcard", "wildcard\wildcard-10.0.vcxproj", "{13C21A83-CC75-459E-9B01-E9EC36D1524B}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "caching", "caching\caching-10.0.vcxproj", "{932D8CD0-4E11-4C3A-9084-4D30DE75C2B7}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "multiroot", "multiroot\multiroot-10.0.vcxproj", "{1CFBC9C5-5F9C-4B60-A2A3-0A79BCDD2670}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "performance", "performance\performance-10.0.vcxproj", "{C60700D1-DB4B-4EFF-8EE9-97BD716BCB89}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "messaging", "messaging\messaging-10.0.vcxproj", "{F7696252-45B5-438B-B14F-0510137704F0}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Debug|x64 = Debug|x64
+ Release|Win32 = Release|Win32
+ Release|x64 = Release|x64
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {538CCAB6-984B-4602-B0D0-985E8FD4FEB9}.Debug|Win32.ActiveCfg = Debug|Win32
+ {538CCAB6-984B-4602-B0D0-985E8FD4FEB9}.Debug|Win32.Build.0 = Debug|Win32
+ {538CCAB6-984B-4602-B0D0-985E8FD4FEB9}.Debug|x64.ActiveCfg = Debug|x64
+ {538CCAB6-984B-4602-B0D0-985E8FD4FEB9}.Debug|x64.Build.0 = Debug|x64
+ {538CCAB6-984B-4602-B0D0-985E8FD4FEB9}.Release|Win32.ActiveCfg = Release|Win32
+ {538CCAB6-984B-4602-B0D0-985E8FD4FEB9}.Release|Win32.Build.0 = Release|Win32
+ {538CCAB6-984B-4602-B0D0-985E8FD4FEB9}.Release|x64.ActiveCfg = Release|x64
+ {538CCAB6-984B-4602-B0D0-985E8FD4FEB9}.Release|x64.Build.0 = Release|x64
+ {D661AD5B-5FF4-4AFD-A656-429BA348E9EF}.Debug|Win32.ActiveCfg = Debug|Win32
+ {D661AD5B-5FF4-4AFD-A656-429BA348E9EF}.Debug|Win32.Build.0 = Debug|Win32
+ {D661AD5B-5FF4-4AFD-A656-429BA348E9EF}.Debug|x64.ActiveCfg = Debug|x64
+ {D661AD5B-5FF4-4AFD-A656-429BA348E9EF}.Debug|x64.Build.0 = Debug|x64
+ {D661AD5B-5FF4-4AFD-A656-429BA348E9EF}.Release|Win32.ActiveCfg = Release|Win32
+ {D661AD5B-5FF4-4AFD-A656-429BA348E9EF}.Release|Win32.Build.0 = Release|Win32
+ {D661AD5B-5FF4-4AFD-A656-429BA348E9EF}.Release|x64.ActiveCfg = Release|x64
+ {D661AD5B-5FF4-4AFD-A656-429BA348E9EF}.Release|x64.Build.0 = Release|x64
+ {6EF7868E-AA58-4615-9C1A-06B010CB4209}.Debug|Win32.ActiveCfg = Debug|Win32
+ {6EF7868E-AA58-4615-9C1A-06B010CB4209}.Debug|Win32.Build.0 = Debug|Win32
+ {6EF7868E-AA58-4615-9C1A-06B010CB4209}.Debug|x64.ActiveCfg = Debug|x64
+ {6EF7868E-AA58-4615-9C1A-06B010CB4209}.Debug|x64.Build.0 = Debug|x64
+ {6EF7868E-AA58-4615-9C1A-06B010CB4209}.Release|Win32.ActiveCfg = Release|Win32
+ {6EF7868E-AA58-4615-9C1A-06B010CB4209}.Release|Win32.Build.0 = Release|Win32
+ {6EF7868E-AA58-4615-9C1A-06B010CB4209}.Release|x64.ActiveCfg = Release|x64
+ {6EF7868E-AA58-4615-9C1A-06B010CB4209}.Release|x64.Build.0 = Release|x64
+ {03224289-FD3C-4A58-A6D7-E8D658B0E45A}.Debug|Win32.ActiveCfg = Debug|Win32
+ {03224289-FD3C-4A58-A6D7-E8D658B0E45A}.Debug|Win32.Build.0 = Debug|Win32
+ {03224289-FD3C-4A58-A6D7-E8D658B0E45A}.Debug|x64.ActiveCfg = Debug|x64
+ {03224289-FD3C-4A58-A6D7-E8D658B0E45A}.Debug|x64.Build.0 = Debug|x64
+ {03224289-FD3C-4A58-A6D7-E8D658B0E45A}.Release|Win32.ActiveCfg = Release|Win32
+ {03224289-FD3C-4A58-A6D7-E8D658B0E45A}.Release|Win32.Build.0 = Release|Win32
+ {03224289-FD3C-4A58-A6D7-E8D658B0E45A}.Release|x64.ActiveCfg = Release|x64
+ {03224289-FD3C-4A58-A6D7-E8D658B0E45A}.Release|x64.Build.0 = Release|x64
+ {3950B11C-AEB1-4E9C-BCB3-2E7133818C79}.Debug|Win32.ActiveCfg = Debug|Win32
+ {3950B11C-AEB1-4E9C-BCB3-2E7133818C79}.Debug|Win32.Build.0 = Debug|Win32
+ {3950B11C-AEB1-4E9C-BCB3-2E7133818C79}.Debug|x64.ActiveCfg = Debug|x64
+ {3950B11C-AEB1-4E9C-BCB3-2E7133818C79}.Debug|x64.Build.0 = Debug|x64
+ {3950B11C-AEB1-4E9C-BCB3-2E7133818C79}.Release|Win32.ActiveCfg = Release|Win32
+ {3950B11C-AEB1-4E9C-BCB3-2E7133818C79}.Release|Win32.Build.0 = Release|Win32
+ {3950B11C-AEB1-4E9C-BCB3-2E7133818C79}.Release|x64.ActiveCfg = Release|x64
+ {3950B11C-AEB1-4E9C-BCB3-2E7133818C79}.Release|x64.Build.0 = Release|x64
+ {13C21A83-CC75-459E-9B01-E9EC36D1524B}.Debug|Win32.ActiveCfg = Debug|Win32
+ {13C21A83-CC75-459E-9B01-E9EC36D1524B}.Debug|Win32.Build.0 = Debug|Win32
+ {13C21A83-CC75-459E-9B01-E9EC36D1524B}.Debug|x64.ActiveCfg = Debug|x64
+ {13C21A83-CC75-459E-9B01-E9EC36D1524B}.Debug|x64.Build.0 = Debug|x64
+ {13C21A83-CC75-459E-9B01-E9EC36D1524B}.Release|Win32.ActiveCfg = Release|Win32
+ {13C21A83-CC75-459E-9B01-E9EC36D1524B}.Release|Win32.Build.0 = Release|Win32
+ {13C21A83-CC75-459E-9B01-E9EC36D1524B}.Release|x64.ActiveCfg = Release|x64
+ {13C21A83-CC75-459E-9B01-E9EC36D1524B}.Release|x64.Build.0 = Release|x64
+ {932D8CD0-4E11-4C3A-9084-4D30DE75C2B7}.Debug|Win32.ActiveCfg = Debug|Win32
+ {932D8CD0-4E11-4C3A-9084-4D30DE75C2B7}.Debug|Win32.Build.0 = Debug|Win32
+ {932D8CD0-4E11-4C3A-9084-4D30DE75C2B7}.Debug|x64.ActiveCfg = Debug|x64
+ {932D8CD0-4E11-4C3A-9084-4D30DE75C2B7}.Debug|x64.Build.0 = Debug|x64
+ {932D8CD0-4E11-4C3A-9084-4D30DE75C2B7}.Release|Win32.ActiveCfg = Release|Win32
+ {932D8CD0-4E11-4C3A-9084-4D30DE75C2B7}.Release|Win32.Build.0 = Release|Win32
+ {932D8CD0-4E11-4C3A-9084-4D30DE75C2B7}.Release|x64.ActiveCfg = Release|x64
+ {932D8CD0-4E11-4C3A-9084-4D30DE75C2B7}.Release|x64.Build.0 = Release|x64
+ {1CFBC9C5-5F9C-4B60-A2A3-0A79BCDD2670}.Debug|Win32.ActiveCfg = Debug|Win32
+ {1CFBC9C5-5F9C-4B60-A2A3-0A79BCDD2670}.Debug|Win32.Build.0 = Debug|Win32
+ {1CFBC9C5-5F9C-4B60-A2A3-0A79BCDD2670}.Debug|x64.ActiveCfg = Debug|x64
+ {1CFBC9C5-5F9C-4B60-A2A3-0A79BCDD2670}.Debug|x64.Build.0 = Debug|x64
+ {1CFBC9C5-5F9C-4B60-A2A3-0A79BCDD2670}.Release|Win32.ActiveCfg = Release|Win32
+ {1CFBC9C5-5F9C-4B60-A2A3-0A79BCDD2670}.Release|Win32.Build.0 = Release|Win32
+ {1CFBC9C5-5F9C-4B60-A2A3-0A79BCDD2670}.Release|x64.ActiveCfg = Release|x64
+ {1CFBC9C5-5F9C-4B60-A2A3-0A79BCDD2670}.Release|x64.Build.0 = Release|x64
+ {C60700D1-DB4B-4EFF-8EE9-97BD716BCB89}.Debug|Win32.ActiveCfg = Debug|Win32
+ {C60700D1-DB4B-4EFF-8EE9-97BD716BCB89}.Debug|Win32.Build.0 = Debug|Win32
+ {C60700D1-DB4B-4EFF-8EE9-97BD716BCB89}.Debug|x64.ActiveCfg = Debug|x64
+ {C60700D1-DB4B-4EFF-8EE9-97BD716BCB89}.Debug|x64.Build.0 = Debug|x64
+ {C60700D1-DB4B-4EFF-8EE9-97BD716BCB89}.Release|Win32.ActiveCfg = Release|Win32
+ {C60700D1-DB4B-4EFF-8EE9-97BD716BCB89}.Release|Win32.Build.0 = Release|Win32
+ {C60700D1-DB4B-4EFF-8EE9-97BD716BCB89}.Release|x64.ActiveCfg = Release|x64
+ {C60700D1-DB4B-4EFF-8EE9-97BD716BCB89}.Release|x64.Build.0 = Release|x64
+ {F7696252-45B5-438B-B14F-0510137704F0}.Debug|Win32.ActiveCfg = Debug|Win32
+ {F7696252-45B5-438B-B14F-0510137704F0}.Debug|Win32.Build.0 = Debug|Win32
+ {F7696252-45B5-438B-B14F-0510137704F0}.Debug|x64.ActiveCfg = Debug|x64
+ {F7696252-45B5-438B-B14F-0510137704F0}.Debug|x64.Build.0 = Debug|x64
+ {F7696252-45B5-438B-B14F-0510137704F0}.Release|Win32.ActiveCfg = Release|Win32
+ {F7696252-45B5-438B-B14F-0510137704F0}.Release|Win32.Build.0 = Release|Win32
+ {F7696252-45B5-438B-B14F-0510137704F0}.Release|x64.ActiveCfg = Release|x64
+ {F7696252-45B5-438B-B14F-0510137704F0}.Release|x64.Build.0 = Release|x64
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/xsd/dist/examples/cxx/tree/tree-7.1.sln b/xsd/dist/examples/cxx/tree/tree-7.1.sln new file mode 100644 index 0000000..fc5147b --- /dev/null +++ b/xsd/dist/examples/cxx/tree/tree-7.1.sln @@ -0,0 +1,93 @@ +Microsoft Visual Studio Solution File, Format Version 8.00
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "hello", "hello\hello-7.1.vcproj", "{538CCAB6-984B-4602-B0D0-985E8FD4FEB9}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "library", "library\library-7.1.vcproj", "{D661AD5B-5FF4-4AFD-A656-429BA348E9EF}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mixed", "mixed\mixed-7.1.vcproj", "{6EF7868E-AA58-4615-9C1A-06B010CB4209}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "polymorphism", "polymorphism\polymorphism-7.1.vcproj", "{03224289-FD3C-4A58-A6D7-E8D658B0E45A}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "streaming", "streaming\streaming-7.1.vcproj", "{3950B11C-AEB1-4E9C-BCB3-2E7133818C79}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wildcard", "wildcard\wildcard-7.1.vcproj", "{13C21A83-CC75-459E-9B01-E9EC36D1524B}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "caching", "caching\caching-7.1.vcproj", "{932D8CD0-4E11-4C3A-9084-4D30DE75C2B7}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "multiroot", "multiroot\multiroot-7.1.vcproj", "{1CFBC9C5-5F9C-4B60-A2A3-0A79BCDD2670}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "performance", "performance\performance-7.1.vcproj", "{C60700D1-DB4B-4EFF-8EE9-97BD716BCB89}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "messaging", "messaging\messaging-7.1.vcproj", "{F7696252-45B5-438B-B14F-0510137704F0}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Global
+ GlobalSection(SolutionConfiguration) = preSolution
+ Debug = Debug
+ Release = Release
+ EndGlobalSection
+ GlobalSection(ProjectConfiguration) = postSolution
+ {538CCAB6-984B-4602-B0D0-985E8FD4FEB9}.Debug.ActiveCfg = Debug|Win32
+ {538CCAB6-984B-4602-B0D0-985E8FD4FEB9}.Debug.Build.0 = Debug|Win32
+ {538CCAB6-984B-4602-B0D0-985E8FD4FEB9}.Release.ActiveCfg = Release|Win32
+ {538CCAB6-984B-4602-B0D0-985E8FD4FEB9}.Release.Build.0 = Release|Win32
+ {D661AD5B-5FF4-4AFD-A656-429BA348E9EF}.Debug.ActiveCfg = Debug|Win32
+ {D661AD5B-5FF4-4AFD-A656-429BA348E9EF}.Debug.Build.0 = Debug|Win32
+ {D661AD5B-5FF4-4AFD-A656-429BA348E9EF}.Release.ActiveCfg = Release|Win32
+ {D661AD5B-5FF4-4AFD-A656-429BA348E9EF}.Release.Build.0 = Release|Win32
+ {6EF7868E-AA58-4615-9C1A-06B010CB4209}.Debug.ActiveCfg = Debug|Win32
+ {6EF7868E-AA58-4615-9C1A-06B010CB4209}.Debug.Build.0 = Debug|Win32
+ {6EF7868E-AA58-4615-9C1A-06B010CB4209}.Release.ActiveCfg = Release|Win32
+ {6EF7868E-AA58-4615-9C1A-06B010CB4209}.Release.Build.0 = Release|Win32
+ {03224289-FD3C-4A58-A6D7-E8D658B0E45A}.Debug.ActiveCfg = Debug|Win32
+ {03224289-FD3C-4A58-A6D7-E8D658B0E45A}.Debug.Build.0 = Debug|Win32
+ {03224289-FD3C-4A58-A6D7-E8D658B0E45A}.Release.ActiveCfg = Release|Win32
+ {03224289-FD3C-4A58-A6D7-E8D658B0E45A}.Release.Build.0 = Release|Win32
+ {3950B11C-AEB1-4E9C-BCB3-2E7133818C79}.Debug.ActiveCfg = Debug|Win32
+ {3950B11C-AEB1-4E9C-BCB3-2E7133818C79}.Debug.Build.0 = Debug|Win32
+ {3950B11C-AEB1-4E9C-BCB3-2E7133818C79}.Release.ActiveCfg = Release|Win32
+ {3950B11C-AEB1-4E9C-BCB3-2E7133818C79}.Release.Build.0 = Release|Win32
+ {13C21A83-CC75-459E-9B01-E9EC36D1524B}.Debug.ActiveCfg = Debug|Win32
+ {13C21A83-CC75-459E-9B01-E9EC36D1524B}.Debug.Build.0 = Debug|Win32
+ {13C21A83-CC75-459E-9B01-E9EC36D1524B}.Release.ActiveCfg = Release|Win32
+ {13C21A83-CC75-459E-9B01-E9EC36D1524B}.Release.Build.0 = Release|Win32
+ {932D8CD0-4E11-4C3A-9084-4D30DE75C2B7}.Debug.ActiveCfg = Debug|Win32
+ {932D8CD0-4E11-4C3A-9084-4D30DE75C2B7}.Debug.Build.0 = Debug|Win32
+ {932D8CD0-4E11-4C3A-9084-4D30DE75C2B7}.Release.ActiveCfg = Release|Win32
+ {932D8CD0-4E11-4C3A-9084-4D30DE75C2B7}.Release.Build.0 = Release|Win32
+ {1CFBC9C5-5F9C-4B60-A2A3-0A79BCDD2670}.Debug.ActiveCfg = Debug|Win32
+ {1CFBC9C5-5F9C-4B60-A2A3-0A79BCDD2670}.Debug.Build.0 = Debug|Win32
+ {1CFBC9C5-5F9C-4B60-A2A3-0A79BCDD2670}.Release.ActiveCfg = Release|Win32
+ {1CFBC9C5-5F9C-4B60-A2A3-0A79BCDD2670}.Release.Build.0 = Release|Win32
+ {C60700D1-DB4B-4EFF-8EE9-97BD716BCB89}.Debug.ActiveCfg = Debug|Win32
+ {C60700D1-DB4B-4EFF-8EE9-97BD716BCB89}.Debug.Build.0 = Debug|Win32
+ {C60700D1-DB4B-4EFF-8EE9-97BD716BCB89}.Release.ActiveCfg = Release|Win32
+ {C60700D1-DB4B-4EFF-8EE9-97BD716BCB89}.Release.Build.0 = Release|Win32
+ {F7696252-45B5-438B-B14F-0510137704F0}.Debug.ActiveCfg = Debug|Win32
+ {F7696252-45B5-438B-B14F-0510137704F0}.Debug.Build.0 = Debug|Win32
+ {F7696252-45B5-438B-B14F-0510137704F0}.Release.ActiveCfg = Release|Win32
+ {F7696252-45B5-438B-B14F-0510137704F0}.Release.Build.0 = Release|Win32
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ EndGlobalSection
+ GlobalSection(ExtensibilityAddIns) = postSolution
+ EndGlobalSection
+EndGlobal
diff --git a/xsd/dist/examples/cxx/tree/tree-8.0.sln b/xsd/dist/examples/cxx/tree/tree-8.0.sln new file mode 100644 index 0000000..f504aa6 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/tree-8.0.sln @@ -0,0 +1,115 @@ +Microsoft Visual Studio Solution File, Format Version 9.00
+# Visual Studio 2005
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "hello", "hello\hello-8.0.vcproj", "{538CCAB6-984B-4602-B0D0-985E8FD4FEB9}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "library", "library\library-8.0.vcproj", "{D661AD5B-5FF4-4AFD-A656-429BA348E9EF}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mixed", "mixed\mixed-8.0.vcproj", "{6EF7868E-AA58-4615-9C1A-06B010CB4209}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "polymorphism", "polymorphism\polymorphism-8.0.vcproj", "{03224289-FD3C-4A58-A6D7-E8D658B0E45A}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "streaming", "streaming\streaming-8.0.vcproj", "{3950B11C-AEB1-4E9C-BCB3-2E7133818C79}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wildcard", "wildcard\wildcard-8.0.vcproj", "{13C21A83-CC75-459E-9B01-E9EC36D1524B}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "caching", "caching\caching-8.0.vcproj", "{932D8CD0-4E11-4C3A-9084-4D30DE75C2B7}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "multiroot", "multiroot\multiroot-8.0.vcproj", "{1CFBC9C5-5F9C-4B60-A2A3-0A79BCDD2670}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "performance", "performance\performance-8.0.vcproj", "{C60700D1-DB4B-4EFF-8EE9-97BD716BCB89}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "messaging", "messaging\messaging-8.0.vcproj", "{F7696252-45B5-438B-B14F-0510137704F0}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Debug|x64 = Debug|x64
+ Release|Win32 = Release|Win32
+ Release|x64 = Release|x64
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {538CCAB6-984B-4602-B0D0-985E8FD4FEB9}.Debug|Win32.ActiveCfg = Debug|Win32
+ {538CCAB6-984B-4602-B0D0-985E8FD4FEB9}.Debug|Win32.Build.0 = Debug|Win32
+ {538CCAB6-984B-4602-B0D0-985E8FD4FEB9}.Debug|x64.ActiveCfg = Debug|x64
+ {538CCAB6-984B-4602-B0D0-985E8FD4FEB9}.Debug|x64.Build.0 = Debug|x64
+ {538CCAB6-984B-4602-B0D0-985E8FD4FEB9}.Release|Win32.ActiveCfg = Release|Win32
+ {538CCAB6-984B-4602-B0D0-985E8FD4FEB9}.Release|Win32.Build.0 = Release|Win32
+ {538CCAB6-984B-4602-B0D0-985E8FD4FEB9}.Release|x64.ActiveCfg = Release|x64
+ {538CCAB6-984B-4602-B0D0-985E8FD4FEB9}.Release|x64.Build.0 = Release|x64
+ {D661AD5B-5FF4-4AFD-A656-429BA348E9EF}.Debug|Win32.ActiveCfg = Debug|Win32
+ {D661AD5B-5FF4-4AFD-A656-429BA348E9EF}.Debug|Win32.Build.0 = Debug|Win32
+ {D661AD5B-5FF4-4AFD-A656-429BA348E9EF}.Debug|x64.ActiveCfg = Debug|x64
+ {D661AD5B-5FF4-4AFD-A656-429BA348E9EF}.Debug|x64.Build.0 = Debug|x64
+ {D661AD5B-5FF4-4AFD-A656-429BA348E9EF}.Release|Win32.ActiveCfg = Release|Win32
+ {D661AD5B-5FF4-4AFD-A656-429BA348E9EF}.Release|Win32.Build.0 = Release|Win32
+ {D661AD5B-5FF4-4AFD-A656-429BA348E9EF}.Release|x64.ActiveCfg = Release|x64
+ {D661AD5B-5FF4-4AFD-A656-429BA348E9EF}.Release|x64.Build.0 = Release|x64
+ {6EF7868E-AA58-4615-9C1A-06B010CB4209}.Debug|Win32.ActiveCfg = Debug|Win32
+ {6EF7868E-AA58-4615-9C1A-06B010CB4209}.Debug|Win32.Build.0 = Debug|Win32
+ {6EF7868E-AA58-4615-9C1A-06B010CB4209}.Debug|x64.ActiveCfg = Debug|x64
+ {6EF7868E-AA58-4615-9C1A-06B010CB4209}.Debug|x64.Build.0 = Debug|x64
+ {6EF7868E-AA58-4615-9C1A-06B010CB4209}.Release|Win32.ActiveCfg = Release|Win32
+ {6EF7868E-AA58-4615-9C1A-06B010CB4209}.Release|Win32.Build.0 = Release|Win32
+ {6EF7868E-AA58-4615-9C1A-06B010CB4209}.Release|x64.ActiveCfg = Release|x64
+ {6EF7868E-AA58-4615-9C1A-06B010CB4209}.Release|x64.Build.0 = Release|x64
+ {03224289-FD3C-4A58-A6D7-E8D658B0E45A}.Debug|Win32.ActiveCfg = Debug|Win32
+ {03224289-FD3C-4A58-A6D7-E8D658B0E45A}.Debug|Win32.Build.0 = Debug|Win32
+ {03224289-FD3C-4A58-A6D7-E8D658B0E45A}.Debug|x64.ActiveCfg = Debug|x64
+ {03224289-FD3C-4A58-A6D7-E8D658B0E45A}.Debug|x64.Build.0 = Debug|x64
+ {03224289-FD3C-4A58-A6D7-E8D658B0E45A}.Release|Win32.ActiveCfg = Release|Win32
+ {03224289-FD3C-4A58-A6D7-E8D658B0E45A}.Release|Win32.Build.0 = Release|Win32
+ {03224289-FD3C-4A58-A6D7-E8D658B0E45A}.Release|x64.ActiveCfg = Release|x64
+ {03224289-FD3C-4A58-A6D7-E8D658B0E45A}.Release|x64.Build.0 = Release|x64
+ {3950B11C-AEB1-4E9C-BCB3-2E7133818C79}.Debug|Win32.ActiveCfg = Debug|Win32
+ {3950B11C-AEB1-4E9C-BCB3-2E7133818C79}.Debug|Win32.Build.0 = Debug|Win32
+ {3950B11C-AEB1-4E9C-BCB3-2E7133818C79}.Debug|x64.ActiveCfg = Debug|x64
+ {3950B11C-AEB1-4E9C-BCB3-2E7133818C79}.Debug|x64.Build.0 = Debug|x64
+ {3950B11C-AEB1-4E9C-BCB3-2E7133818C79}.Release|Win32.ActiveCfg = Release|Win32
+ {3950B11C-AEB1-4E9C-BCB3-2E7133818C79}.Release|Win32.Build.0 = Release|Win32
+ {3950B11C-AEB1-4E9C-BCB3-2E7133818C79}.Release|x64.ActiveCfg = Release|x64
+ {3950B11C-AEB1-4E9C-BCB3-2E7133818C79}.Release|x64.Build.0 = Release|x64
+ {13C21A83-CC75-459E-9B01-E9EC36D1524B}.Debug|Win32.ActiveCfg = Debug|Win32
+ {13C21A83-CC75-459E-9B01-E9EC36D1524B}.Debug|Win32.Build.0 = Debug|Win32
+ {13C21A83-CC75-459E-9B01-E9EC36D1524B}.Debug|x64.ActiveCfg = Debug|x64
+ {13C21A83-CC75-459E-9B01-E9EC36D1524B}.Debug|x64.Build.0 = Debug|x64
+ {13C21A83-CC75-459E-9B01-E9EC36D1524B}.Release|Win32.ActiveCfg = Release|Win32
+ {13C21A83-CC75-459E-9B01-E9EC36D1524B}.Release|Win32.Build.0 = Release|Win32
+ {13C21A83-CC75-459E-9B01-E9EC36D1524B}.Release|x64.ActiveCfg = Release|x64
+ {13C21A83-CC75-459E-9B01-E9EC36D1524B}.Release|x64.Build.0 = Release|x64
+ {932D8CD0-4E11-4C3A-9084-4D30DE75C2B7}.Debug|Win32.ActiveCfg = Debug|Win32
+ {932D8CD0-4E11-4C3A-9084-4D30DE75C2B7}.Debug|Win32.Build.0 = Debug|Win32
+ {932D8CD0-4E11-4C3A-9084-4D30DE75C2B7}.Debug|x64.ActiveCfg = Debug|x64
+ {932D8CD0-4E11-4C3A-9084-4D30DE75C2B7}.Debug|x64.Build.0 = Debug|x64
+ {932D8CD0-4E11-4C3A-9084-4D30DE75C2B7}.Release|Win32.ActiveCfg = Release|Win32
+ {932D8CD0-4E11-4C3A-9084-4D30DE75C2B7}.Release|Win32.Build.0 = Release|Win32
+ {932D8CD0-4E11-4C3A-9084-4D30DE75C2B7}.Release|x64.ActiveCfg = Release|x64
+ {932D8CD0-4E11-4C3A-9084-4D30DE75C2B7}.Release|x64.Build.0 = Release|x64
+ {1CFBC9C5-5F9C-4B60-A2A3-0A79BCDD2670}.Debug|Win32.ActiveCfg = Debug|Win32
+ {1CFBC9C5-5F9C-4B60-A2A3-0A79BCDD2670}.Debug|Win32.Build.0 = Debug|Win32
+ {1CFBC9C5-5F9C-4B60-A2A3-0A79BCDD2670}.Debug|x64.ActiveCfg = Debug|x64
+ {1CFBC9C5-5F9C-4B60-A2A3-0A79BCDD2670}.Debug|x64.Build.0 = Debug|x64
+ {1CFBC9C5-5F9C-4B60-A2A3-0A79BCDD2670}.Release|Win32.ActiveCfg = Release|Win32
+ {1CFBC9C5-5F9C-4B60-A2A3-0A79BCDD2670}.Release|Win32.Build.0 = Release|Win32
+ {1CFBC9C5-5F9C-4B60-A2A3-0A79BCDD2670}.Release|x64.ActiveCfg = Release|x64
+ {1CFBC9C5-5F9C-4B60-A2A3-0A79BCDD2670}.Release|x64.Build.0 = Release|x64
+ {C60700D1-DB4B-4EFF-8EE9-97BD716BCB89}.Debug|Win32.ActiveCfg = Debug|Win32
+ {C60700D1-DB4B-4EFF-8EE9-97BD716BCB89}.Debug|Win32.Build.0 = Debug|Win32
+ {C60700D1-DB4B-4EFF-8EE9-97BD716BCB89}.Debug|x64.ActiveCfg = Debug|x64
+ {C60700D1-DB4B-4EFF-8EE9-97BD716BCB89}.Debug|x64.Build.0 = Debug|x64
+ {C60700D1-DB4B-4EFF-8EE9-97BD716BCB89}.Release|Win32.ActiveCfg = Release|Win32
+ {C60700D1-DB4B-4EFF-8EE9-97BD716BCB89}.Release|Win32.Build.0 = Release|Win32
+ {C60700D1-DB4B-4EFF-8EE9-97BD716BCB89}.Release|x64.ActiveCfg = Release|x64
+ {C60700D1-DB4B-4EFF-8EE9-97BD716BCB89}.Release|x64.Build.0 = Release|x64
+ {F7696252-45B5-438B-B14F-0510137704F0}.Debug|Win32.ActiveCfg = Debug|Win32
+ {F7696252-45B5-438B-B14F-0510137704F0}.Debug|Win32.Build.0 = Debug|Win32
+ {F7696252-45B5-438B-B14F-0510137704F0}.Debug|x64.ActiveCfg = Debug|x64
+ {F7696252-45B5-438B-B14F-0510137704F0}.Debug|x64.Build.0 = Debug|x64
+ {F7696252-45B5-438B-B14F-0510137704F0}.Release|Win32.ActiveCfg = Release|Win32
+ {F7696252-45B5-438B-B14F-0510137704F0}.Release|Win32.Build.0 = Release|Win32
+ {F7696252-45B5-438B-B14F-0510137704F0}.Release|x64.ActiveCfg = Release|x64
+ {F7696252-45B5-438B-B14F-0510137704F0}.Release|x64.Build.0 = Release|x64
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/xsd/dist/examples/cxx/tree/tree-9.0.sln b/xsd/dist/examples/cxx/tree/tree-9.0.sln new file mode 100644 index 0000000..6bc073e --- /dev/null +++ b/xsd/dist/examples/cxx/tree/tree-9.0.sln @@ -0,0 +1,115 @@ +Microsoft Visual Studio Solution File, Format Version 10.00
+# Visual Studio 2008
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "hello", "hello\hello-9.0.vcproj", "{538CCAB6-984B-4602-B0D0-985E8FD4FEB9}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "library", "library\library-9.0.vcproj", "{D661AD5B-5FF4-4AFD-A656-429BA348E9EF}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mixed", "mixed\mixed-9.0.vcproj", "{6EF7868E-AA58-4615-9C1A-06B010CB4209}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "polymorphism", "polymorphism\polymorphism-9.0.vcproj", "{03224289-FD3C-4A58-A6D7-E8D658B0E45A}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "streaming", "streaming\streaming-9.0.vcproj", "{3950B11C-AEB1-4E9C-BCB3-2E7133818C79}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wildcard", "wildcard\wildcard-9.0.vcproj", "{13C21A83-CC75-459E-9B01-E9EC36D1524B}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "caching", "caching\caching-9.0.vcproj", "{932D8CD0-4E11-4C3A-9084-4D30DE75C2B7}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "multiroot", "multiroot\multiroot-9.0.vcproj", "{1CFBC9C5-5F9C-4B60-A2A3-0A79BCDD2670}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "performance", "performance\performance-9.0.vcproj", "{C60700D1-DB4B-4EFF-8EE9-97BD716BCB89}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "messaging", "messaging\messaging-9.0.vcproj", "{F7696252-45B5-438B-B14F-0510137704F0}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Debug|x64 = Debug|x64
+ Release|Win32 = Release|Win32
+ Release|x64 = Release|x64
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {538CCAB6-984B-4602-B0D0-985E8FD4FEB9}.Debug|Win32.ActiveCfg = Debug|Win32
+ {538CCAB6-984B-4602-B0D0-985E8FD4FEB9}.Debug|Win32.Build.0 = Debug|Win32
+ {538CCAB6-984B-4602-B0D0-985E8FD4FEB9}.Debug|x64.ActiveCfg = Debug|x64
+ {538CCAB6-984B-4602-B0D0-985E8FD4FEB9}.Debug|x64.Build.0 = Debug|x64
+ {538CCAB6-984B-4602-B0D0-985E8FD4FEB9}.Release|Win32.ActiveCfg = Release|Win32
+ {538CCAB6-984B-4602-B0D0-985E8FD4FEB9}.Release|Win32.Build.0 = Release|Win32
+ {538CCAB6-984B-4602-B0D0-985E8FD4FEB9}.Release|x64.ActiveCfg = Release|x64
+ {538CCAB6-984B-4602-B0D0-985E8FD4FEB9}.Release|x64.Build.0 = Release|x64
+ {D661AD5B-5FF4-4AFD-A656-429BA348E9EF}.Debug|Win32.ActiveCfg = Debug|Win32
+ {D661AD5B-5FF4-4AFD-A656-429BA348E9EF}.Debug|Win32.Build.0 = Debug|Win32
+ {D661AD5B-5FF4-4AFD-A656-429BA348E9EF}.Debug|x64.ActiveCfg = Debug|x64
+ {D661AD5B-5FF4-4AFD-A656-429BA348E9EF}.Debug|x64.Build.0 = Debug|x64
+ {D661AD5B-5FF4-4AFD-A656-429BA348E9EF}.Release|Win32.ActiveCfg = Release|Win32
+ {D661AD5B-5FF4-4AFD-A656-429BA348E9EF}.Release|Win32.Build.0 = Release|Win32
+ {D661AD5B-5FF4-4AFD-A656-429BA348E9EF}.Release|x64.ActiveCfg = Release|x64
+ {D661AD5B-5FF4-4AFD-A656-429BA348E9EF}.Release|x64.Build.0 = Release|x64
+ {6EF7868E-AA58-4615-9C1A-06B010CB4209}.Debug|Win32.ActiveCfg = Debug|Win32
+ {6EF7868E-AA58-4615-9C1A-06B010CB4209}.Debug|Win32.Build.0 = Debug|Win32
+ {6EF7868E-AA58-4615-9C1A-06B010CB4209}.Debug|x64.ActiveCfg = Debug|x64
+ {6EF7868E-AA58-4615-9C1A-06B010CB4209}.Debug|x64.Build.0 = Debug|x64
+ {6EF7868E-AA58-4615-9C1A-06B010CB4209}.Release|Win32.ActiveCfg = Release|Win32
+ {6EF7868E-AA58-4615-9C1A-06B010CB4209}.Release|Win32.Build.0 = Release|Win32
+ {6EF7868E-AA58-4615-9C1A-06B010CB4209}.Release|x64.ActiveCfg = Release|x64
+ {6EF7868E-AA58-4615-9C1A-06B010CB4209}.Release|x64.Build.0 = Release|x64
+ {03224289-FD3C-4A58-A6D7-E8D658B0E45A}.Debug|Win32.ActiveCfg = Debug|Win32
+ {03224289-FD3C-4A58-A6D7-E8D658B0E45A}.Debug|Win32.Build.0 = Debug|Win32
+ {03224289-FD3C-4A58-A6D7-E8D658B0E45A}.Debug|x64.ActiveCfg = Debug|x64
+ {03224289-FD3C-4A58-A6D7-E8D658B0E45A}.Debug|x64.Build.0 = Debug|x64
+ {03224289-FD3C-4A58-A6D7-E8D658B0E45A}.Release|Win32.ActiveCfg = Release|Win32
+ {03224289-FD3C-4A58-A6D7-E8D658B0E45A}.Release|Win32.Build.0 = Release|Win32
+ {03224289-FD3C-4A58-A6D7-E8D658B0E45A}.Release|x64.ActiveCfg = Release|x64
+ {03224289-FD3C-4A58-A6D7-E8D658B0E45A}.Release|x64.Build.0 = Release|x64
+ {3950B11C-AEB1-4E9C-BCB3-2E7133818C79}.Debug|Win32.ActiveCfg = Debug|Win32
+ {3950B11C-AEB1-4E9C-BCB3-2E7133818C79}.Debug|Win32.Build.0 = Debug|Win32
+ {3950B11C-AEB1-4E9C-BCB3-2E7133818C79}.Debug|x64.ActiveCfg = Debug|x64
+ {3950B11C-AEB1-4E9C-BCB3-2E7133818C79}.Debug|x64.Build.0 = Debug|x64
+ {3950B11C-AEB1-4E9C-BCB3-2E7133818C79}.Release|Win32.ActiveCfg = Release|Win32
+ {3950B11C-AEB1-4E9C-BCB3-2E7133818C79}.Release|Win32.Build.0 = Release|Win32
+ {3950B11C-AEB1-4E9C-BCB3-2E7133818C79}.Release|x64.ActiveCfg = Release|x64
+ {3950B11C-AEB1-4E9C-BCB3-2E7133818C79}.Release|x64.Build.0 = Release|x64
+ {13C21A83-CC75-459E-9B01-E9EC36D1524B}.Debug|Win32.ActiveCfg = Debug|Win32
+ {13C21A83-CC75-459E-9B01-E9EC36D1524B}.Debug|Win32.Build.0 = Debug|Win32
+ {13C21A83-CC75-459E-9B01-E9EC36D1524B}.Debug|x64.ActiveCfg = Debug|x64
+ {13C21A83-CC75-459E-9B01-E9EC36D1524B}.Debug|x64.Build.0 = Debug|x64
+ {13C21A83-CC75-459E-9B01-E9EC36D1524B}.Release|Win32.ActiveCfg = Release|Win32
+ {13C21A83-CC75-459E-9B01-E9EC36D1524B}.Release|Win32.Build.0 = Release|Win32
+ {13C21A83-CC75-459E-9B01-E9EC36D1524B}.Release|x64.ActiveCfg = Release|x64
+ {13C21A83-CC75-459E-9B01-E9EC36D1524B}.Release|x64.Build.0 = Release|x64
+ {932D8CD0-4E11-4C3A-9084-4D30DE75C2B7}.Debug|Win32.ActiveCfg = Debug|Win32
+ {932D8CD0-4E11-4C3A-9084-4D30DE75C2B7}.Debug|Win32.Build.0 = Debug|Win32
+ {932D8CD0-4E11-4C3A-9084-4D30DE75C2B7}.Debug|x64.ActiveCfg = Debug|x64
+ {932D8CD0-4E11-4C3A-9084-4D30DE75C2B7}.Debug|x64.Build.0 = Debug|x64
+ {932D8CD0-4E11-4C3A-9084-4D30DE75C2B7}.Release|Win32.ActiveCfg = Release|Win32
+ {932D8CD0-4E11-4C3A-9084-4D30DE75C2B7}.Release|Win32.Build.0 = Release|Win32
+ {932D8CD0-4E11-4C3A-9084-4D30DE75C2B7}.Release|x64.ActiveCfg = Release|x64
+ {932D8CD0-4E11-4C3A-9084-4D30DE75C2B7}.Release|x64.Build.0 = Release|x64
+ {1CFBC9C5-5F9C-4B60-A2A3-0A79BCDD2670}.Debug|Win32.ActiveCfg = Debug|Win32
+ {1CFBC9C5-5F9C-4B60-A2A3-0A79BCDD2670}.Debug|Win32.Build.0 = Debug|Win32
+ {1CFBC9C5-5F9C-4B60-A2A3-0A79BCDD2670}.Debug|x64.ActiveCfg = Debug|x64
+ {1CFBC9C5-5F9C-4B60-A2A3-0A79BCDD2670}.Debug|x64.Build.0 = Debug|x64
+ {1CFBC9C5-5F9C-4B60-A2A3-0A79BCDD2670}.Release|Win32.ActiveCfg = Release|Win32
+ {1CFBC9C5-5F9C-4B60-A2A3-0A79BCDD2670}.Release|Win32.Build.0 = Release|Win32
+ {1CFBC9C5-5F9C-4B60-A2A3-0A79BCDD2670}.Release|x64.ActiveCfg = Release|x64
+ {1CFBC9C5-5F9C-4B60-A2A3-0A79BCDD2670}.Release|x64.Build.0 = Release|x64
+ {C60700D1-DB4B-4EFF-8EE9-97BD716BCB89}.Debug|Win32.ActiveCfg = Debug|Win32
+ {C60700D1-DB4B-4EFF-8EE9-97BD716BCB89}.Debug|Win32.Build.0 = Debug|Win32
+ {C60700D1-DB4B-4EFF-8EE9-97BD716BCB89}.Debug|x64.ActiveCfg = Debug|x64
+ {C60700D1-DB4B-4EFF-8EE9-97BD716BCB89}.Debug|x64.Build.0 = Debug|x64
+ {C60700D1-DB4B-4EFF-8EE9-97BD716BCB89}.Release|Win32.ActiveCfg = Release|Win32
+ {C60700D1-DB4B-4EFF-8EE9-97BD716BCB89}.Release|Win32.Build.0 = Release|Win32
+ {C60700D1-DB4B-4EFF-8EE9-97BD716BCB89}.Release|x64.ActiveCfg = Release|x64
+ {C60700D1-DB4B-4EFF-8EE9-97BD716BCB89}.Release|x64.Build.0 = Release|x64
+ {F7696252-45B5-438B-B14F-0510137704F0}.Debug|Win32.ActiveCfg = Debug|Win32
+ {F7696252-45B5-438B-B14F-0510137704F0}.Debug|Win32.Build.0 = Debug|Win32
+ {F7696252-45B5-438B-B14F-0510137704F0}.Debug|x64.ActiveCfg = Debug|x64
+ {F7696252-45B5-438B-B14F-0510137704F0}.Debug|x64.Build.0 = Debug|x64
+ {F7696252-45B5-438B-B14F-0510137704F0}.Release|Win32.ActiveCfg = Release|Win32
+ {F7696252-45B5-438B-B14F-0510137704F0}.Release|Win32.Build.0 = Release|Win32
+ {F7696252-45B5-438B-B14F-0510137704F0}.Release|x64.ActiveCfg = Release|x64
+ {F7696252-45B5-438B-B14F-0510137704F0}.Release|x64.Build.0 = Release|x64
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/xsd/dist/examples/cxx/tree/tree-xerces2-7.1.sln b/xsd/dist/examples/cxx/tree/tree-xerces2-7.1.sln new file mode 100644 index 0000000..f19b237 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/tree-xerces2-7.1.sln @@ -0,0 +1,93 @@ +Microsoft Visual Studio Solution File, Format Version 8.00
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "hello", "hello\hello-xerces2-7.1.vcproj", "{538CCAB6-984B-4602-B0D0-985E8FD4FEB9}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "library", "library\library-xerces2-7.1.vcproj", "{D661AD5B-5FF4-4AFD-A656-429BA348E9EF}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mixed", "mixed\mixed-xerces2-7.1.vcproj", "{6EF7868E-AA58-4615-9C1A-06B010CB4209}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "polymorphism", "polymorphism\polymorphism-xerces2-7.1.vcproj", "{03224289-FD3C-4A58-A6D7-E8D658B0E45A}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "streaming", "streaming\streaming-xerces2-7.1.vcproj", "{3950B11C-AEB1-4E9C-BCB3-2E7133818C79}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wildcard", "wildcard\wildcard-xerces2-7.1.vcproj", "{13C21A83-CC75-459E-9B01-E9EC36D1524B}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "caching", "caching\caching-xerces2-7.1.vcproj", "{932D8CD0-4E11-4C3A-9084-4D30DE75C2B7}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "multiroot", "multiroot\multiroot-xerces2-7.1.vcproj", "{1CFBC9C5-5F9C-4B60-A2A3-0A79BCDD2670}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "performance", "performance\performance-xerces2-7.1.vcproj", "{C60700D1-DB4B-4EFF-8EE9-97BD716BCB89}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "messaging", "messaging\messaging-xerces2-7.1.vcproj", "{F7696252-45B5-438B-B14F-0510137704F0}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Global
+ GlobalSection(SolutionConfiguration) = preSolution
+ Debug = Debug
+ Release = Release
+ EndGlobalSection
+ GlobalSection(ProjectConfiguration) = postSolution
+ {538CCAB6-984B-4602-B0D0-985E8FD4FEB9}.Debug.ActiveCfg = Debug|Win32
+ {538CCAB6-984B-4602-B0D0-985E8FD4FEB9}.Debug.Build.0 = Debug|Win32
+ {538CCAB6-984B-4602-B0D0-985E8FD4FEB9}.Release.ActiveCfg = Release|Win32
+ {538CCAB6-984B-4602-B0D0-985E8FD4FEB9}.Release.Build.0 = Release|Win32
+ {D661AD5B-5FF4-4AFD-A656-429BA348E9EF}.Debug.ActiveCfg = Debug|Win32
+ {D661AD5B-5FF4-4AFD-A656-429BA348E9EF}.Debug.Build.0 = Debug|Win32
+ {D661AD5B-5FF4-4AFD-A656-429BA348E9EF}.Release.ActiveCfg = Release|Win32
+ {D661AD5B-5FF4-4AFD-A656-429BA348E9EF}.Release.Build.0 = Release|Win32
+ {6EF7868E-AA58-4615-9C1A-06B010CB4209}.Debug.ActiveCfg = Debug|Win32
+ {6EF7868E-AA58-4615-9C1A-06B010CB4209}.Debug.Build.0 = Debug|Win32
+ {6EF7868E-AA58-4615-9C1A-06B010CB4209}.Release.ActiveCfg = Release|Win32
+ {6EF7868E-AA58-4615-9C1A-06B010CB4209}.Release.Build.0 = Release|Win32
+ {03224289-FD3C-4A58-A6D7-E8D658B0E45A}.Debug.ActiveCfg = Debug|Win32
+ {03224289-FD3C-4A58-A6D7-E8D658B0E45A}.Debug.Build.0 = Debug|Win32
+ {03224289-FD3C-4A58-A6D7-E8D658B0E45A}.Release.ActiveCfg = Release|Win32
+ {03224289-FD3C-4A58-A6D7-E8D658B0E45A}.Release.Build.0 = Release|Win32
+ {3950B11C-AEB1-4E9C-BCB3-2E7133818C79}.Debug.ActiveCfg = Debug|Win32
+ {3950B11C-AEB1-4E9C-BCB3-2E7133818C79}.Debug.Build.0 = Debug|Win32
+ {3950B11C-AEB1-4E9C-BCB3-2E7133818C79}.Release.ActiveCfg = Release|Win32
+ {3950B11C-AEB1-4E9C-BCB3-2E7133818C79}.Release.Build.0 = Release|Win32
+ {13C21A83-CC75-459E-9B01-E9EC36D1524B}.Debug.ActiveCfg = Debug|Win32
+ {13C21A83-CC75-459E-9B01-E9EC36D1524B}.Debug.Build.0 = Debug|Win32
+ {13C21A83-CC75-459E-9B01-E9EC36D1524B}.Release.ActiveCfg = Release|Win32
+ {13C21A83-CC75-459E-9B01-E9EC36D1524B}.Release.Build.0 = Release|Win32
+ {932D8CD0-4E11-4C3A-9084-4D30DE75C2B7}.Debug.ActiveCfg = Debug|Win32
+ {932D8CD0-4E11-4C3A-9084-4D30DE75C2B7}.Debug.Build.0 = Debug|Win32
+ {932D8CD0-4E11-4C3A-9084-4D30DE75C2B7}.Release.ActiveCfg = Release|Win32
+ {932D8CD0-4E11-4C3A-9084-4D30DE75C2B7}.Release.Build.0 = Release|Win32
+ {1CFBC9C5-5F9C-4B60-A2A3-0A79BCDD2670}.Debug.ActiveCfg = Debug|Win32
+ {1CFBC9C5-5F9C-4B60-A2A3-0A79BCDD2670}.Debug.Build.0 = Debug|Win32
+ {1CFBC9C5-5F9C-4B60-A2A3-0A79BCDD2670}.Release.ActiveCfg = Release|Win32
+ {1CFBC9C5-5F9C-4B60-A2A3-0A79BCDD2670}.Release.Build.0 = Release|Win32
+ {C60700D1-DB4B-4EFF-8EE9-97BD716BCB89}.Debug.ActiveCfg = Debug|Win32
+ {C60700D1-DB4B-4EFF-8EE9-97BD716BCB89}.Debug.Build.0 = Debug|Win32
+ {C60700D1-DB4B-4EFF-8EE9-97BD716BCB89}.Release.ActiveCfg = Release|Win32
+ {C60700D1-DB4B-4EFF-8EE9-97BD716BCB89}.Release.Build.0 = Release|Win32
+ {F7696252-45B5-438B-B14F-0510137704F0}.Debug.ActiveCfg = Debug|Win32
+ {F7696252-45B5-438B-B14F-0510137704F0}.Debug.Build.0 = Debug|Win32
+ {F7696252-45B5-438B-B14F-0510137704F0}.Release.ActiveCfg = Release|Win32
+ {F7696252-45B5-438B-B14F-0510137704F0}.Release.Build.0 = Release|Win32
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ EndGlobalSection
+ GlobalSection(ExtensibilityAddIns) = postSolution
+ EndGlobalSection
+EndGlobal
diff --git a/xsd/dist/examples/cxx/tree/tree-xerces2-8.0.sln b/xsd/dist/examples/cxx/tree/tree-xerces2-8.0.sln new file mode 100644 index 0000000..d3fd49b --- /dev/null +++ b/xsd/dist/examples/cxx/tree/tree-xerces2-8.0.sln @@ -0,0 +1,115 @@ +Microsoft Visual Studio Solution File, Format Version 9.00
+# Visual Studio 2005
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "hello", "hello\hello-xerces2-8.0.vcproj", "{538CCAB6-984B-4602-B0D0-985E8FD4FEB9}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "library", "library\library-xerces2-8.0.vcproj", "{D661AD5B-5FF4-4AFD-A656-429BA348E9EF}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mixed", "mixed\mixed-xerces2-8.0.vcproj", "{6EF7868E-AA58-4615-9C1A-06B010CB4209}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "polymorphism", "polymorphism\polymorphism-xerces2-8.0.vcproj", "{03224289-FD3C-4A58-A6D7-E8D658B0E45A}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "streaming", "streaming\streaming-xerces2-8.0.vcproj", "{3950B11C-AEB1-4E9C-BCB3-2E7133818C79}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wildcard", "wildcard\wildcard-xerces2-8.0.vcproj", "{13C21A83-CC75-459E-9B01-E9EC36D1524B}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "caching", "caching\caching-xerces2-8.0.vcproj", "{932D8CD0-4E11-4C3A-9084-4D30DE75C2B7}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "multiroot", "multiroot\multiroot-xerces2-8.0.vcproj", "{1CFBC9C5-5F9C-4B60-A2A3-0A79BCDD2670}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "performance", "performance\performance-xerces2-8.0.vcproj", "{C60700D1-DB4B-4EFF-8EE9-97BD716BCB89}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "messaging", "messaging\messaging-xerces2-8.0.vcproj", "{F7696252-45B5-438B-B14F-0510137704F0}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Debug|x64 = Debug|x64
+ Release|Win32 = Release|Win32
+ Release|x64 = Release|x64
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {538CCAB6-984B-4602-B0D0-985E8FD4FEB9}.Debug|Win32.ActiveCfg = Debug|Win32
+ {538CCAB6-984B-4602-B0D0-985E8FD4FEB9}.Debug|Win32.Build.0 = Debug|Win32
+ {538CCAB6-984B-4602-B0D0-985E8FD4FEB9}.Debug|x64.ActiveCfg = Debug|x64
+ {538CCAB6-984B-4602-B0D0-985E8FD4FEB9}.Debug|x64.Build.0 = Debug|x64
+ {538CCAB6-984B-4602-B0D0-985E8FD4FEB9}.Release|Win32.ActiveCfg = Release|Win32
+ {538CCAB6-984B-4602-B0D0-985E8FD4FEB9}.Release|Win32.Build.0 = Release|Win32
+ {538CCAB6-984B-4602-B0D0-985E8FD4FEB9}.Release|x64.ActiveCfg = Release|x64
+ {538CCAB6-984B-4602-B0D0-985E8FD4FEB9}.Release|x64.Build.0 = Release|x64
+ {D661AD5B-5FF4-4AFD-A656-429BA348E9EF}.Debug|Win32.ActiveCfg = Debug|Win32
+ {D661AD5B-5FF4-4AFD-A656-429BA348E9EF}.Debug|Win32.Build.0 = Debug|Win32
+ {D661AD5B-5FF4-4AFD-A656-429BA348E9EF}.Debug|x64.ActiveCfg = Debug|x64
+ {D661AD5B-5FF4-4AFD-A656-429BA348E9EF}.Debug|x64.Build.0 = Debug|x64
+ {D661AD5B-5FF4-4AFD-A656-429BA348E9EF}.Release|Win32.ActiveCfg = Release|Win32
+ {D661AD5B-5FF4-4AFD-A656-429BA348E9EF}.Release|Win32.Build.0 = Release|Win32
+ {D661AD5B-5FF4-4AFD-A656-429BA348E9EF}.Release|x64.ActiveCfg = Release|x64
+ {D661AD5B-5FF4-4AFD-A656-429BA348E9EF}.Release|x64.Build.0 = Release|x64
+ {6EF7868E-AA58-4615-9C1A-06B010CB4209}.Debug|Win32.ActiveCfg = Debug|Win32
+ {6EF7868E-AA58-4615-9C1A-06B010CB4209}.Debug|Win32.Build.0 = Debug|Win32
+ {6EF7868E-AA58-4615-9C1A-06B010CB4209}.Debug|x64.ActiveCfg = Debug|x64
+ {6EF7868E-AA58-4615-9C1A-06B010CB4209}.Debug|x64.Build.0 = Debug|x64
+ {6EF7868E-AA58-4615-9C1A-06B010CB4209}.Release|Win32.ActiveCfg = Release|Win32
+ {6EF7868E-AA58-4615-9C1A-06B010CB4209}.Release|Win32.Build.0 = Release|Win32
+ {6EF7868E-AA58-4615-9C1A-06B010CB4209}.Release|x64.ActiveCfg = Release|x64
+ {6EF7868E-AA58-4615-9C1A-06B010CB4209}.Release|x64.Build.0 = Release|x64
+ {03224289-FD3C-4A58-A6D7-E8D658B0E45A}.Debug|Win32.ActiveCfg = Debug|Win32
+ {03224289-FD3C-4A58-A6D7-E8D658B0E45A}.Debug|Win32.Build.0 = Debug|Win32
+ {03224289-FD3C-4A58-A6D7-E8D658B0E45A}.Debug|x64.ActiveCfg = Debug|x64
+ {03224289-FD3C-4A58-A6D7-E8D658B0E45A}.Debug|x64.Build.0 = Debug|x64
+ {03224289-FD3C-4A58-A6D7-E8D658B0E45A}.Release|Win32.ActiveCfg = Release|Win32
+ {03224289-FD3C-4A58-A6D7-E8D658B0E45A}.Release|Win32.Build.0 = Release|Win32
+ {03224289-FD3C-4A58-A6D7-E8D658B0E45A}.Release|x64.ActiveCfg = Release|x64
+ {03224289-FD3C-4A58-A6D7-E8D658B0E45A}.Release|x64.Build.0 = Release|x64
+ {3950B11C-AEB1-4E9C-BCB3-2E7133818C79}.Debug|Win32.ActiveCfg = Debug|Win32
+ {3950B11C-AEB1-4E9C-BCB3-2E7133818C79}.Debug|Win32.Build.0 = Debug|Win32
+ {3950B11C-AEB1-4E9C-BCB3-2E7133818C79}.Debug|x64.ActiveCfg = Debug|x64
+ {3950B11C-AEB1-4E9C-BCB3-2E7133818C79}.Debug|x64.Build.0 = Debug|x64
+ {3950B11C-AEB1-4E9C-BCB3-2E7133818C79}.Release|Win32.ActiveCfg = Release|Win32
+ {3950B11C-AEB1-4E9C-BCB3-2E7133818C79}.Release|Win32.Build.0 = Release|Win32
+ {3950B11C-AEB1-4E9C-BCB3-2E7133818C79}.Release|x64.ActiveCfg = Release|x64
+ {3950B11C-AEB1-4E9C-BCB3-2E7133818C79}.Release|x64.Build.0 = Release|x64
+ {13C21A83-CC75-459E-9B01-E9EC36D1524B}.Debug|Win32.ActiveCfg = Debug|Win32
+ {13C21A83-CC75-459E-9B01-E9EC36D1524B}.Debug|Win32.Build.0 = Debug|Win32
+ {13C21A83-CC75-459E-9B01-E9EC36D1524B}.Debug|x64.ActiveCfg = Debug|x64
+ {13C21A83-CC75-459E-9B01-E9EC36D1524B}.Debug|x64.Build.0 = Debug|x64
+ {13C21A83-CC75-459E-9B01-E9EC36D1524B}.Release|Win32.ActiveCfg = Release|Win32
+ {13C21A83-CC75-459E-9B01-E9EC36D1524B}.Release|Win32.Build.0 = Release|Win32
+ {13C21A83-CC75-459E-9B01-E9EC36D1524B}.Release|x64.ActiveCfg = Release|x64
+ {13C21A83-CC75-459E-9B01-E9EC36D1524B}.Release|x64.Build.0 = Release|x64
+ {932D8CD0-4E11-4C3A-9084-4D30DE75C2B7}.Debug|Win32.ActiveCfg = Debug|Win32
+ {932D8CD0-4E11-4C3A-9084-4D30DE75C2B7}.Debug|Win32.Build.0 = Debug|Win32
+ {932D8CD0-4E11-4C3A-9084-4D30DE75C2B7}.Debug|x64.ActiveCfg = Debug|x64
+ {932D8CD0-4E11-4C3A-9084-4D30DE75C2B7}.Debug|x64.Build.0 = Debug|x64
+ {932D8CD0-4E11-4C3A-9084-4D30DE75C2B7}.Release|Win32.ActiveCfg = Release|Win32
+ {932D8CD0-4E11-4C3A-9084-4D30DE75C2B7}.Release|Win32.Build.0 = Release|Win32
+ {932D8CD0-4E11-4C3A-9084-4D30DE75C2B7}.Release|x64.ActiveCfg = Release|x64
+ {932D8CD0-4E11-4C3A-9084-4D30DE75C2B7}.Release|x64.Build.0 = Release|x64
+ {1CFBC9C5-5F9C-4B60-A2A3-0A79BCDD2670}.Debug|Win32.ActiveCfg = Debug|Win32
+ {1CFBC9C5-5F9C-4B60-A2A3-0A79BCDD2670}.Debug|Win32.Build.0 = Debug|Win32
+ {1CFBC9C5-5F9C-4B60-A2A3-0A79BCDD2670}.Debug|x64.ActiveCfg = Debug|x64
+ {1CFBC9C5-5F9C-4B60-A2A3-0A79BCDD2670}.Debug|x64.Build.0 = Debug|x64
+ {1CFBC9C5-5F9C-4B60-A2A3-0A79BCDD2670}.Release|Win32.ActiveCfg = Release|Win32
+ {1CFBC9C5-5F9C-4B60-A2A3-0A79BCDD2670}.Release|Win32.Build.0 = Release|Win32
+ {1CFBC9C5-5F9C-4B60-A2A3-0A79BCDD2670}.Release|x64.ActiveCfg = Release|x64
+ {1CFBC9C5-5F9C-4B60-A2A3-0A79BCDD2670}.Release|x64.Build.0 = Release|x64
+ {C60700D1-DB4B-4EFF-8EE9-97BD716BCB89}.Debug|Win32.ActiveCfg = Debug|Win32
+ {C60700D1-DB4B-4EFF-8EE9-97BD716BCB89}.Debug|Win32.Build.0 = Debug|Win32
+ {C60700D1-DB4B-4EFF-8EE9-97BD716BCB89}.Debug|x64.ActiveCfg = Debug|x64
+ {C60700D1-DB4B-4EFF-8EE9-97BD716BCB89}.Debug|x64.Build.0 = Debug|x64
+ {C60700D1-DB4B-4EFF-8EE9-97BD716BCB89}.Release|Win32.ActiveCfg = Release|Win32
+ {C60700D1-DB4B-4EFF-8EE9-97BD716BCB89}.Release|Win32.Build.0 = Release|Win32
+ {C60700D1-DB4B-4EFF-8EE9-97BD716BCB89}.Release|x64.ActiveCfg = Release|x64
+ {C60700D1-DB4B-4EFF-8EE9-97BD716BCB89}.Release|x64.Build.0 = Release|x64
+ {F7696252-45B5-438B-B14F-0510137704F0}.Debug|Win32.ActiveCfg = Debug|Win32
+ {F7696252-45B5-438B-B14F-0510137704F0}.Debug|Win32.Build.0 = Debug|Win32
+ {F7696252-45B5-438B-B14F-0510137704F0}.Debug|x64.ActiveCfg = Debug|x64
+ {F7696252-45B5-438B-B14F-0510137704F0}.Debug|x64.Build.0 = Debug|x64
+ {F7696252-45B5-438B-B14F-0510137704F0}.Release|Win32.ActiveCfg = Release|Win32
+ {F7696252-45B5-438B-B14F-0510137704F0}.Release|Win32.Build.0 = Release|Win32
+ {F7696252-45B5-438B-B14F-0510137704F0}.Release|x64.ActiveCfg = Release|x64
+ {F7696252-45B5-438B-B14F-0510137704F0}.Release|x64.Build.0 = Release|x64
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/xsd/dist/examples/cxx/tree/tree-xerces2-9.0.sln b/xsd/dist/examples/cxx/tree/tree-xerces2-9.0.sln new file mode 100644 index 0000000..ed9bace --- /dev/null +++ b/xsd/dist/examples/cxx/tree/tree-xerces2-9.0.sln @@ -0,0 +1,115 @@ +Microsoft Visual Studio Solution File, Format Version 10.00
+# Visual Studio 2008
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "hello", "hello\hello-xerces2-9.0.vcproj", "{538CCAB6-984B-4602-B0D0-985E8FD4FEB9}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "library", "library\library-xerces2-9.0.vcproj", "{D661AD5B-5FF4-4AFD-A656-429BA348E9EF}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mixed", "mixed\mixed-xerces2-9.0.vcproj", "{6EF7868E-AA58-4615-9C1A-06B010CB4209}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "polymorphism", "polymorphism\polymorphism-xerces2-9.0.vcproj", "{03224289-FD3C-4A58-A6D7-E8D658B0E45A}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "streaming", "streaming\streaming-xerces2-9.0.vcproj", "{3950B11C-AEB1-4E9C-BCB3-2E7133818C79}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wildcard", "wildcard\wildcard-xerces2-9.0.vcproj", "{13C21A83-CC75-459E-9B01-E9EC36D1524B}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "caching", "caching\caching-xerces2-9.0.vcproj", "{932D8CD0-4E11-4C3A-9084-4D30DE75C2B7}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "multiroot", "multiroot\multiroot-xerces2-9.0.vcproj", "{1CFBC9C5-5F9C-4B60-A2A3-0A79BCDD2670}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "performance", "performance\performance-xerces2-9.0.vcproj", "{C60700D1-DB4B-4EFF-8EE9-97BD716BCB89}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "messaging", "messaging\messaging-xerces2-9.0.vcproj", "{F7696252-45B5-438B-B14F-0510137704F0}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Debug|x64 = Debug|x64
+ Release|Win32 = Release|Win32
+ Release|x64 = Release|x64
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {538CCAB6-984B-4602-B0D0-985E8FD4FEB9}.Debug|Win32.ActiveCfg = Debug|Win32
+ {538CCAB6-984B-4602-B0D0-985E8FD4FEB9}.Debug|Win32.Build.0 = Debug|Win32
+ {538CCAB6-984B-4602-B0D0-985E8FD4FEB9}.Debug|x64.ActiveCfg = Debug|x64
+ {538CCAB6-984B-4602-B0D0-985E8FD4FEB9}.Debug|x64.Build.0 = Debug|x64
+ {538CCAB6-984B-4602-B0D0-985E8FD4FEB9}.Release|Win32.ActiveCfg = Release|Win32
+ {538CCAB6-984B-4602-B0D0-985E8FD4FEB9}.Release|Win32.Build.0 = Release|Win32
+ {538CCAB6-984B-4602-B0D0-985E8FD4FEB9}.Release|x64.ActiveCfg = Release|x64
+ {538CCAB6-984B-4602-B0D0-985E8FD4FEB9}.Release|x64.Build.0 = Release|x64
+ {D661AD5B-5FF4-4AFD-A656-429BA348E9EF}.Debug|Win32.ActiveCfg = Debug|Win32
+ {D661AD5B-5FF4-4AFD-A656-429BA348E9EF}.Debug|Win32.Build.0 = Debug|Win32
+ {D661AD5B-5FF4-4AFD-A656-429BA348E9EF}.Debug|x64.ActiveCfg = Debug|x64
+ {D661AD5B-5FF4-4AFD-A656-429BA348E9EF}.Debug|x64.Build.0 = Debug|x64
+ {D661AD5B-5FF4-4AFD-A656-429BA348E9EF}.Release|Win32.ActiveCfg = Release|Win32
+ {D661AD5B-5FF4-4AFD-A656-429BA348E9EF}.Release|Win32.Build.0 = Release|Win32
+ {D661AD5B-5FF4-4AFD-A656-429BA348E9EF}.Release|x64.ActiveCfg = Release|x64
+ {D661AD5B-5FF4-4AFD-A656-429BA348E9EF}.Release|x64.Build.0 = Release|x64
+ {6EF7868E-AA58-4615-9C1A-06B010CB4209}.Debug|Win32.ActiveCfg = Debug|Win32
+ {6EF7868E-AA58-4615-9C1A-06B010CB4209}.Debug|Win32.Build.0 = Debug|Win32
+ {6EF7868E-AA58-4615-9C1A-06B010CB4209}.Debug|x64.ActiveCfg = Debug|x64
+ {6EF7868E-AA58-4615-9C1A-06B010CB4209}.Debug|x64.Build.0 = Debug|x64
+ {6EF7868E-AA58-4615-9C1A-06B010CB4209}.Release|Win32.ActiveCfg = Release|Win32
+ {6EF7868E-AA58-4615-9C1A-06B010CB4209}.Release|Win32.Build.0 = Release|Win32
+ {6EF7868E-AA58-4615-9C1A-06B010CB4209}.Release|x64.ActiveCfg = Release|x64
+ {6EF7868E-AA58-4615-9C1A-06B010CB4209}.Release|x64.Build.0 = Release|x64
+ {03224289-FD3C-4A58-A6D7-E8D658B0E45A}.Debug|Win32.ActiveCfg = Debug|Win32
+ {03224289-FD3C-4A58-A6D7-E8D658B0E45A}.Debug|Win32.Build.0 = Debug|Win32
+ {03224289-FD3C-4A58-A6D7-E8D658B0E45A}.Debug|x64.ActiveCfg = Debug|x64
+ {03224289-FD3C-4A58-A6D7-E8D658B0E45A}.Debug|x64.Build.0 = Debug|x64
+ {03224289-FD3C-4A58-A6D7-E8D658B0E45A}.Release|Win32.ActiveCfg = Release|Win32
+ {03224289-FD3C-4A58-A6D7-E8D658B0E45A}.Release|Win32.Build.0 = Release|Win32
+ {03224289-FD3C-4A58-A6D7-E8D658B0E45A}.Release|x64.ActiveCfg = Release|x64
+ {03224289-FD3C-4A58-A6D7-E8D658B0E45A}.Release|x64.Build.0 = Release|x64
+ {3950B11C-AEB1-4E9C-BCB3-2E7133818C79}.Debug|Win32.ActiveCfg = Debug|Win32
+ {3950B11C-AEB1-4E9C-BCB3-2E7133818C79}.Debug|Win32.Build.0 = Debug|Win32
+ {3950B11C-AEB1-4E9C-BCB3-2E7133818C79}.Debug|x64.ActiveCfg = Debug|x64
+ {3950B11C-AEB1-4E9C-BCB3-2E7133818C79}.Debug|x64.Build.0 = Debug|x64
+ {3950B11C-AEB1-4E9C-BCB3-2E7133818C79}.Release|Win32.ActiveCfg = Release|Win32
+ {3950B11C-AEB1-4E9C-BCB3-2E7133818C79}.Release|Win32.Build.0 = Release|Win32
+ {3950B11C-AEB1-4E9C-BCB3-2E7133818C79}.Release|x64.ActiveCfg = Release|x64
+ {3950B11C-AEB1-4E9C-BCB3-2E7133818C79}.Release|x64.Build.0 = Release|x64
+ {13C21A83-CC75-459E-9B01-E9EC36D1524B}.Debug|Win32.ActiveCfg = Debug|Win32
+ {13C21A83-CC75-459E-9B01-E9EC36D1524B}.Debug|Win32.Build.0 = Debug|Win32
+ {13C21A83-CC75-459E-9B01-E9EC36D1524B}.Debug|x64.ActiveCfg = Debug|x64
+ {13C21A83-CC75-459E-9B01-E9EC36D1524B}.Debug|x64.Build.0 = Debug|x64
+ {13C21A83-CC75-459E-9B01-E9EC36D1524B}.Release|Win32.ActiveCfg = Release|Win32
+ {13C21A83-CC75-459E-9B01-E9EC36D1524B}.Release|Win32.Build.0 = Release|Win32
+ {13C21A83-CC75-459E-9B01-E9EC36D1524B}.Release|x64.ActiveCfg = Release|x64
+ {13C21A83-CC75-459E-9B01-E9EC36D1524B}.Release|x64.Build.0 = Release|x64
+ {932D8CD0-4E11-4C3A-9084-4D30DE75C2B7}.Debug|Win32.ActiveCfg = Debug|Win32
+ {932D8CD0-4E11-4C3A-9084-4D30DE75C2B7}.Debug|Win32.Build.0 = Debug|Win32
+ {932D8CD0-4E11-4C3A-9084-4D30DE75C2B7}.Debug|x64.ActiveCfg = Debug|x64
+ {932D8CD0-4E11-4C3A-9084-4D30DE75C2B7}.Debug|x64.Build.0 = Debug|x64
+ {932D8CD0-4E11-4C3A-9084-4D30DE75C2B7}.Release|Win32.ActiveCfg = Release|Win32
+ {932D8CD0-4E11-4C3A-9084-4D30DE75C2B7}.Release|Win32.Build.0 = Release|Win32
+ {932D8CD0-4E11-4C3A-9084-4D30DE75C2B7}.Release|x64.ActiveCfg = Release|x64
+ {932D8CD0-4E11-4C3A-9084-4D30DE75C2B7}.Release|x64.Build.0 = Release|x64
+ {1CFBC9C5-5F9C-4B60-A2A3-0A79BCDD2670}.Debug|Win32.ActiveCfg = Debug|Win32
+ {1CFBC9C5-5F9C-4B60-A2A3-0A79BCDD2670}.Debug|Win32.Build.0 = Debug|Win32
+ {1CFBC9C5-5F9C-4B60-A2A3-0A79BCDD2670}.Debug|x64.ActiveCfg = Debug|x64
+ {1CFBC9C5-5F9C-4B60-A2A3-0A79BCDD2670}.Debug|x64.Build.0 = Debug|x64
+ {1CFBC9C5-5F9C-4B60-A2A3-0A79BCDD2670}.Release|Win32.ActiveCfg = Release|Win32
+ {1CFBC9C5-5F9C-4B60-A2A3-0A79BCDD2670}.Release|Win32.Build.0 = Release|Win32
+ {1CFBC9C5-5F9C-4B60-A2A3-0A79BCDD2670}.Release|x64.ActiveCfg = Release|x64
+ {1CFBC9C5-5F9C-4B60-A2A3-0A79BCDD2670}.Release|x64.Build.0 = Release|x64
+ {C60700D1-DB4B-4EFF-8EE9-97BD716BCB89}.Debug|Win32.ActiveCfg = Debug|Win32
+ {C60700D1-DB4B-4EFF-8EE9-97BD716BCB89}.Debug|Win32.Build.0 = Debug|Win32
+ {C60700D1-DB4B-4EFF-8EE9-97BD716BCB89}.Debug|x64.ActiveCfg = Debug|x64
+ {C60700D1-DB4B-4EFF-8EE9-97BD716BCB89}.Debug|x64.Build.0 = Debug|x64
+ {C60700D1-DB4B-4EFF-8EE9-97BD716BCB89}.Release|Win32.ActiveCfg = Release|Win32
+ {C60700D1-DB4B-4EFF-8EE9-97BD716BCB89}.Release|Win32.Build.0 = Release|Win32
+ {C60700D1-DB4B-4EFF-8EE9-97BD716BCB89}.Release|x64.ActiveCfg = Release|x64
+ {C60700D1-DB4B-4EFF-8EE9-97BD716BCB89}.Release|x64.Build.0 = Release|x64
+ {F7696252-45B5-438B-B14F-0510137704F0}.Debug|Win32.ActiveCfg = Debug|Win32
+ {F7696252-45B5-438B-B14F-0510137704F0}.Debug|Win32.Build.0 = Debug|Win32
+ {F7696252-45B5-438B-B14F-0510137704F0}.Debug|x64.ActiveCfg = Debug|x64
+ {F7696252-45B5-438B-B14F-0510137704F0}.Debug|x64.Build.0 = Debug|x64
+ {F7696252-45B5-438B-B14F-0510137704F0}.Release|Win32.ActiveCfg = Release|Win32
+ {F7696252-45B5-438B-B14F-0510137704F0}.Release|Win32.Build.0 = Release|Win32
+ {F7696252-45B5-438B-B14F-0510137704F0}.Release|x64.ActiveCfg = Release|x64
+ {F7696252-45B5-438B-B14F-0510137704F0}.Release|x64.Build.0 = Release|x64
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/xsd/dist/examples/cxx/tree/wildcard/makefile b/xsd/dist/examples/cxx/tree/wildcard/makefile new file mode 100644 index 0000000..148b800 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/wildcard/makefile @@ -0,0 +1,32 @@ +root := ../../.. + +include $(root)/build/cxx/rules.make +include $(root)/build/xsd/tree-rules.make + + +override XSDFLAGS += --generate-inline --generate-serialization \ +--generate-wildcard --root-element message + + +# Build. +# +driver: driver.o email.o + +email.o: email.cxx email.hxx email.ixx +driver.o: driver.cxx email.hxx email.ixx + +email.cxx email.hxx email.ixx: email.xsd + + +# Test +# +.PHONY: test +test: driver email.xml + ./driver email.xml + + +# Clean. +# +.PHONY: clean +clean: + rm -f email.o email.?xx driver.o driver diff --git a/xsd/dist/examples/cxx/tree/wildcard/wildcard-10.0.vcxproj b/xsd/dist/examples/cxx/tree/wildcard/wildcard-10.0.vcxproj new file mode 100644 index 0000000..a2e7d28 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/wildcard/wildcard-10.0.vcxproj @@ -0,0 +1,210 @@ +<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectName>wildcard</ProjectName>
+ <ProjectGuid>{13C21A83-CC75-459E-9B01-E9EC36D1524B}</ProjectGuid>
+ <RootNamespace>wildcard</RootNamespace>
+ <Keyword>Win32Proj</Keyword>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">driver</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">driver</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">driver</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">driver</TargetName>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Debug\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Debug\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)\$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)\$(Configuration)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Release\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Release\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)\$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)\$(Configuration)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ <RuntimeTypeInfo>true</RuntimeTypeInfo>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>xerces-c_3D.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)driver.pdb</ProgramDatabaseFile>
+ <SubSystem>Console</SubSystem>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ <RuntimeTypeInfo>true</RuntimeTypeInfo>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>xerces-c_3D.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)driver.pdb</ProgramDatabaseFile>
+ <SubSystem>Console</SubSystem>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <RuntimeTypeInfo>true</RuntimeTypeInfo>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>xerces-c_3.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <RuntimeTypeInfo>true</RuntimeTypeInfo>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>xerces-c_3.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="driver.cxx" />
+ <ClCompile Include="email.cxx" />
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="email.hxx" />
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="email.ixx" />
+ <None Include="Readme.txt" />
+ </ItemGroup>
+ <ItemGroup>
+ <CustomBuild Include="email.xsd">
+ <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">xsd email.xsd</Message>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">xsd cxx-tree --generate-inline --generate-serialization --generate-wildcard --root-element message email.xsd</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">email.hxx;email.ixx;email.cxx;%(Outputs)</Outputs>
+ <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">xsd email.xsd</Message>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">xsd cxx-tree --generate-inline --generate-serialization --generate-wildcard --root-element message email.xsd</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">email.hxx;email.ixx;email.cxx;%(Outputs)</Outputs>
+ <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">xsd email.xsd</Message>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">xsd cxx-tree --generate-inline --generate-serialization --generate-wildcard --root-element message email.xsd</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">email.hxx;email.ixx;email.cxx;%(Outputs)</Outputs>
+ <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">xsd email.xsd</Message>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">xsd cxx-tree --generate-inline --generate-serialization --generate-wildcard --root-element message email.xsd</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">email.hxx;email.ixx;email.cxx;%(Outputs)</Outputs>
+ </CustomBuild>
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project>
\ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/wildcard/wildcard-10.0.vcxproj.filters b/xsd/dist/examples/cxx/tree/wildcard/wildcard-10.0.vcxproj.filters new file mode 100644 index 0000000..541b946 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/wildcard/wildcard-10.0.vcxproj.filters @@ -0,0 +1,45 @@ +<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="Source Files">
+ <UniqueIdentifier>{C8C63C87-F9B5-4EDF-B4BF-2701982EFCE6}</UniqueIdentifier>
+ <Extensions>cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+ </Filter>
+ <Filter Include="Header Files">
+ <UniqueIdentifier>{E8933542-EAF8-45F5-94AE-AE8D55E47565}</UniqueIdentifier>
+ <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
+ </Filter>
+ <Filter Include="Inline Files">
+ <UniqueIdentifier>{79291748-08c5-4298-a090-a210ea0e7161}</UniqueIdentifier>
+ <Extensions>ixx</Extensions>
+ </Filter>
+ <Filter Include="Schema Files">
+ <UniqueIdentifier>{e83a7a6b-3537-4eea-bf81-494a6fcee412}</UniqueIdentifier>
+ <Extensions>xsd</Extensions>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="driver.cxx">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="email.cxx">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="email.hxx">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="email.ixx">
+ <Filter>Inline Files</Filter>
+ </None>
+ <None Include="Readme.txt" />
+ </ItemGroup>
+ <ItemGroup>
+ <CustomBuild Include="email.xsd">
+ <Filter>Schema Files</Filter>
+ </CustomBuild>
+ </ItemGroup>
+</Project>
\ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/wildcard/wildcard-7.1.vcproj b/xsd/dist/examples/cxx/tree/wildcard/wildcard-7.1.vcproj new file mode 100644 index 0000000..431b94e --- /dev/null +++ b/xsd/dist/examples/cxx/tree/wildcard/wildcard-7.1.vcproj @@ -0,0 +1,171 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="wildcard"
+ ProjectGUID="{13C21A83-CC75-459E-9B01-E9EC36D1524B}"
+ RootNamespace="wildcard"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="TRUE"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="5"
+ RuntimeTypeInfo="TRUE"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="4"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="TRUE"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="4"
+ RuntimeTypeInfo="TRUE"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="3"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{C8C63C87-F9B5-4EDF-B4BF-2701982EFCE6}">
+ <File
+ RelativePath=".\driver.cxx">
+ </File>
+ <File
+ RelativePath=".\email.cxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{E8933542-EAF8-45F5-94AE-AE8D55E47565}">
+ <File
+ RelativePath=".\email.hxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Inline Files"
+ Filter="ixx">
+ <File
+ RelativePath=".\email.ixx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd">
+ <File
+ RelativePath=".\email.xsd">
+ <FileConfiguration
+ Name="Debug|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd email.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-serialization --generate-wildcard --generate-intellisense --root-element message email.xsd"
+ Outputs="email.hxx;email.ixx;email.cxx"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd email.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-serialization --generate-wildcard --generate-intellisense --root-element message email.xsd"
+ Outputs="email.hxx;email.ixx;email.cxx"/>
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/wildcard/wildcard-8.0.vcproj b/xsd/dist/examples/cxx/tree/wildcard/wildcard-8.0.vcproj new file mode 100644 index 0000000..4f61b88 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/wildcard/wildcard-8.0.vcproj @@ -0,0 +1,432 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="wildcard"
+ ProjectGUID="{13C21A83-CC75-459E-9B01-E9EC36D1524B}"
+ RootNamespace="wildcard"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{C8C63C87-F9B5-4EDF-B4BF-2701982EFCE6}"
+ >
+ <File
+ RelativePath=".\driver.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\email.cxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{E8933542-EAF8-45F5-94AE-AE8D55E47565}"
+ >
+ <File
+ RelativePath=".\email.hxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Inline Files"
+ Filter="ixx"
+ >
+ <File
+ RelativePath=".\email.ixx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd"
+ >
+ <File
+ RelativePath=".\email.xsd"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd email.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-serialization --generate-wildcard --generate-intellisense --root-element message email.xsd"
+ Outputs="email.hxx;email.ixx;email.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd email.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-serialization --generate-wildcard --generate-intellisense --root-element message email.xsd"
+ Outputs="email.hxx;email.ixx;email.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd email.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-serialization --generate-wildcard --generate-intellisense --root-element message email.xsd"
+ Outputs="email.hxx;email.ixx;email.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd email.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-serialization --generate-wildcard --generate-intellisense --root-element message email.xsd"
+ Outputs="email.hxx;email.ixx;email.cxx"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/wildcard/wildcard-9.0.vcproj b/xsd/dist/examples/cxx/tree/wildcard/wildcard-9.0.vcproj new file mode 100644 index 0000000..0cbc382 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/wildcard/wildcard-9.0.vcproj @@ -0,0 +1,429 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="wildcard"
+ ProjectGUID="{13C21A83-CC75-459E-9B01-E9EC36D1524B}"
+ RootNamespace="wildcard"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{C8C63C87-F9B5-4EDF-B4BF-2701982EFCE6}"
+ >
+ <File
+ RelativePath=".\driver.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\email.cxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{E8933542-EAF8-45F5-94AE-AE8D55E47565}"
+ >
+ <File
+ RelativePath=".\email.hxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Inline Files"
+ Filter="ixx"
+ >
+ <File
+ RelativePath=".\email.ixx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd"
+ >
+ <File
+ RelativePath=".\email.xsd"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd email.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-serialization --generate-wildcard --root-element message email.xsd"
+ Outputs="email.hxx;email.ixx;email.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd email.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-serialization --generate-wildcard --root-element message email.xsd"
+ Outputs="email.hxx;email.ixx;email.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd email.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-serialization --generate-wildcard --root-element message email.xsd"
+ Outputs="email.hxx;email.ixx;email.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd email.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-serialization --generate-wildcard --root-element message email.xsd"
+ Outputs="email.hxx;email.ixx;email.cxx"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/wildcard/wildcard-xerces2-7.1.vcproj b/xsd/dist/examples/cxx/tree/wildcard/wildcard-xerces2-7.1.vcproj new file mode 100644 index 0000000..f26ea1b --- /dev/null +++ b/xsd/dist/examples/cxx/tree/wildcard/wildcard-xerces2-7.1.vcproj @@ -0,0 +1,171 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="wildcard"
+ ProjectGUID="{13C21A83-CC75-459E-9B01-E9EC36D1524B}"
+ RootNamespace="wildcard"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="TRUE"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="5"
+ RuntimeTypeInfo="TRUE"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="4"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="TRUE"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="4"
+ RuntimeTypeInfo="TRUE"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="3"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{C8C63C87-F9B5-4EDF-B4BF-2701982EFCE6}">
+ <File
+ RelativePath=".\driver.cxx">
+ </File>
+ <File
+ RelativePath=".\email.cxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{E8933542-EAF8-45F5-94AE-AE8D55E47565}">
+ <File
+ RelativePath=".\email.hxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Inline Files"
+ Filter="ixx">
+ <File
+ RelativePath=".\email.ixx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd">
+ <File
+ RelativePath=".\email.xsd">
+ <FileConfiguration
+ Name="Debug|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd email.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-serialization --generate-wildcard --generate-intellisense --root-element message email.xsd"
+ Outputs="email.hxx;email.ixx;email.cxx"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd email.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-serialization --generate-wildcard --generate-intellisense --root-element message email.xsd"
+ Outputs="email.hxx;email.ixx;email.cxx"/>
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/wildcard/wildcard-xerces2-8.0.vcproj b/xsd/dist/examples/cxx/tree/wildcard/wildcard-xerces2-8.0.vcproj new file mode 100644 index 0000000..d6f5487 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/wildcard/wildcard-xerces2-8.0.vcproj @@ -0,0 +1,432 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="wildcard"
+ ProjectGUID="{13C21A83-CC75-459E-9B01-E9EC36D1524B}"
+ RootNamespace="wildcard"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{C8C63C87-F9B5-4EDF-B4BF-2701982EFCE6}"
+ >
+ <File
+ RelativePath=".\driver.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\email.cxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{E8933542-EAF8-45F5-94AE-AE8D55E47565}"
+ >
+ <File
+ RelativePath=".\email.hxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Inline Files"
+ Filter="ixx"
+ >
+ <File
+ RelativePath=".\email.ixx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd"
+ >
+ <File
+ RelativePath=".\email.xsd"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd email.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-serialization --generate-wildcard --generate-intellisense --root-element message email.xsd"
+ Outputs="email.hxx;email.ixx;email.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd email.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-serialization --generate-wildcard --generate-intellisense --root-element message email.xsd"
+ Outputs="email.hxx;email.ixx;email.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd email.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-serialization --generate-wildcard --generate-intellisense --root-element message email.xsd"
+ Outputs="email.hxx;email.ixx;email.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd email.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-serialization --generate-wildcard --generate-intellisense --root-element message email.xsd"
+ Outputs="email.hxx;email.ixx;email.cxx"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/wildcard/wildcard-xerces2-9.0.vcproj b/xsd/dist/examples/cxx/tree/wildcard/wildcard-xerces2-9.0.vcproj new file mode 100644 index 0000000..312731a --- /dev/null +++ b/xsd/dist/examples/cxx/tree/wildcard/wildcard-xerces2-9.0.vcproj @@ -0,0 +1,429 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="wildcard"
+ ProjectGUID="{13C21A83-CC75-459E-9B01-E9EC36D1524B}"
+ RootNamespace="wildcard"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{C8C63C87-F9B5-4EDF-B4BF-2701982EFCE6}"
+ >
+ <File
+ RelativePath=".\driver.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\email.cxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{E8933542-EAF8-45F5-94AE-AE8D55E47565}"
+ >
+ <File
+ RelativePath=".\email.hxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Inline Files"
+ Filter="ixx"
+ >
+ <File
+ RelativePath=".\email.ixx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd"
+ >
+ <File
+ RelativePath=".\email.xsd"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd email.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-serialization --generate-wildcard --root-element message email.xsd"
+ Outputs="email.hxx;email.ixx;email.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd email.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-serialization --generate-wildcard --root-element message email.xsd"
+ Outputs="email.hxx;email.ixx;email.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd email.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-serialization --generate-wildcard --root-element message email.xsd"
+ Outputs="email.hxx;email.ixx;email.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd email.xsd"
+ CommandLine="xsd cxx-tree --generate-inline --generate-serialization --generate-wildcard --root-element message email.xsd"
+ Outputs="email.hxx;email.ixx;email.cxx"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/xpath/makefile b/xsd/dist/examples/cxx/tree/xpath/makefile new file mode 100644 index 0000000..d5f2833 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/xpath/makefile @@ -0,0 +1,30 @@ +root := ../../.. + +include $(root)/build/cxx/rules.make +include $(root)/build/xsd/tree-rules.make + +override LIBS += -lxqilla + +# Build. +# +driver: driver.o people.o dom-parse.o + +people.o: people.cxx people.hxx +driver.o: driver.cxx people.hxx dom-parse.hxx +people.o: dom-parse.cxx dom-parse.hxx + +people.cxx people.hxx: people.xsd + + +# Test +# +.PHONY: test +test: driver people.xml + ./driver people.xml + + +# Clean. +# +.PHONY: clean +clean: + rm -f people.o people.?xx driver.o dom-parse.o driver diff --git a/xsd/dist/examples/cxx/tree/xpath/xpath-10.0.sln b/xsd/dist/examples/cxx/tree/xpath/xpath-10.0.sln new file mode 100644 index 0000000..0776baf --- /dev/null +++ b/xsd/dist/examples/cxx/tree/xpath/xpath-10.0.sln @@ -0,0 +1,25 @@ +Microsoft Visual Studio Solution File, Format Version 11.00
+# Visual Studio 2010
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xpath", "xpath-10.0.vcxproj", "{EC26ACF9-0103-48D2-B7BA-0222C2175B28}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Debug|x64 = Debug|x64
+ Release|Win32 = Release|Win32
+ Release|x64 = Release|x64
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {EC26ACF9-0103-48D2-B7BA-0222C2175B28}.Debug|Win32.ActiveCfg = Debug|Win32
+ {EC26ACF9-0103-48D2-B7BA-0222C2175B28}.Debug|Win32.Build.0 = Debug|Win32
+ {EC26ACF9-0103-48D2-B7BA-0222C2175B28}.Debug|x64.ActiveCfg = Debug|x64
+ {EC26ACF9-0103-48D2-B7BA-0222C2175B28}.Debug|x64.Build.0 = Debug|x64
+ {EC26ACF9-0103-48D2-B7BA-0222C2175B28}.Release|Win32.ActiveCfg = Release|Win32
+ {EC26ACF9-0103-48D2-B7BA-0222C2175B28}.Release|Win32.Build.0 = Release|Win32
+ {EC26ACF9-0103-48D2-B7BA-0222C2175B28}.Release|x64.ActiveCfg = Release|x64
+ {EC26ACF9-0103-48D2-B7BA-0222C2175B28}.Release|x64.Build.0 = Release|x64
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/xsd/dist/examples/cxx/tree/xpath/xpath-10.0.vcxproj b/xsd/dist/examples/cxx/tree/xpath/xpath-10.0.vcxproj new file mode 100644 index 0000000..f776b11 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/xpath/xpath-10.0.vcxproj @@ -0,0 +1,211 @@ +<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectName>xpath</ProjectName>
+ <ProjectGuid>{EC26ACF9-0103-48D2-B7BA-0222C2175B28}</ProjectGuid>
+ <RootNamespace>xpath</RootNamespace>
+ <Keyword>Win32Proj</Keyword>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">driver</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">driver</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">driver</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">driver</TargetName>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Debug\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Debug\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)\$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)\$(Configuration)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Release\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Release\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)\$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)\$(Configuration)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ <RuntimeTypeInfo>true</RuntimeTypeInfo>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>xerces-c_3D.lib;xqilla22d.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)driver.pdb</ProgramDatabaseFile>
+ <SubSystem>Console</SubSystem>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ <RuntimeTypeInfo>true</RuntimeTypeInfo>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>xerces-c_3D.lib;xqilla22d.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)driver.pdb</ProgramDatabaseFile>
+ <SubSystem>Console</SubSystem>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <RuntimeTypeInfo>true</RuntimeTypeInfo>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>xerces-c_3.lib;xqilla22.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <RuntimeTypeInfo>true</RuntimeTypeInfo>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>xerces-c_3.lib;xqilla22.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(TargetPath)</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="dom-parse.cxx" />
+ <ClCompile Include="driver.cxx" />
+ <ClCompile Include="people.cxx" />
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="dom-parse.hxx" />
+ <ClInclude Include="people.hxx" />
+ </ItemGroup>
+ <ItemGroup>
+ <CustomBuild Include="people.xsd">
+ <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">xsd people.xsd</Message>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">xsd cxx-tree people.xsd</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">people.hxx;people.cxx;%(Outputs)</Outputs>
+ <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">xsd people.xsd</Message>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">xsd cxx-tree people.xsd</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">people.hxx;people.cxx;%(Outputs)</Outputs>
+ <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">xsd people.xsd</Message>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">xsd cxx-tree people.xsd</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">people.hxx;people.cxx;%(Outputs)</Outputs>
+ <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">xsd people.xsd</Message>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">xsd cxx-tree people.xsd</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">people.hxx;people.cxx;%(Outputs)</Outputs>
+ </CustomBuild>
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="Readme.txt" />
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project>
\ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/xpath/xpath-10.0.vcxproj.filters b/xsd/dist/examples/cxx/tree/xpath/xpath-10.0.vcxproj.filters new file mode 100644 index 0000000..d038587 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/xpath/xpath-10.0.vcxproj.filters @@ -0,0 +1,44 @@ +<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="Source Files">
+ <UniqueIdentifier>{0A690AC0-4B5A-4FCA-B2CC-A61C00F01283}</UniqueIdentifier>
+ <Extensions>cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+ </Filter>
+ <Filter Include="Header Files">
+ <UniqueIdentifier>{19387534-A72F-4C3F-A9FB-F5B8909AEB29}</UniqueIdentifier>
+ <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
+ </Filter>
+ <Filter Include="Schema Files">
+ <UniqueIdentifier>{807745b4-2087-4ccb-8fdc-8160206a3042}</UniqueIdentifier>
+ <Extensions>xsd</Extensions>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="dom-parse.cxx">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="driver.cxx">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="people.cxx">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="dom-parse.hxx">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="people.hxx">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="Readme.txt" />
+ </ItemGroup>
+ <ItemGroup>
+ <CustomBuild Include="people.xsd">
+ <Filter>Schema Files</Filter>
+ </CustomBuild>
+ </ItemGroup>
+</Project>
\ No newline at end of file diff --git a/xsd/dist/examples/cxx/tree/xpath/xpath-7.1.sln b/xsd/dist/examples/cxx/tree/xpath/xpath-7.1.sln new file mode 100644 index 0000000..905aaf9 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/xpath/xpath-7.1.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 8.00
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xpath", "xpath-7.1.vcproj", "{EC26ACF9-0103-48D2-B7BA-0222C2175B28}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Global
+ GlobalSection(SolutionConfiguration) = preSolution
+ Debug = Debug
+ Release = Release
+ EndGlobalSection
+ GlobalSection(ProjectConfiguration) = postSolution
+ {EC26ACF9-0103-48D2-B7BA-0222C2175B28}.Debug.ActiveCfg = Debug|Win32
+ {EC26ACF9-0103-48D2-B7BA-0222C2175B28}.Debug.Build.0 = Debug|Win32
+ {EC26ACF9-0103-48D2-B7BA-0222C2175B28}.Release.ActiveCfg = Release|Win32
+ {EC26ACF9-0103-48D2-B7BA-0222C2175B28}.Release.Build.0 = Release|Win32
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ EndGlobalSection
+ GlobalSection(ExtensibilityAddIns) = postSolution
+ EndGlobalSection
+EndGlobal
diff --git a/xsd/dist/examples/cxx/tree/xpath/xpath-7.1.vcproj b/xsd/dist/examples/cxx/tree/xpath/xpath-7.1.vcproj new file mode 100644 index 0000000..bd070b6 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/xpath/xpath-7.1.vcproj @@ -0,0 +1,170 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="xpath"
+ ProjectGUID="{EC26ACF9-0103-48D2-B7BA-0222C2175B28}"
+ RootNamespace="xpath"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="TRUE"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="5"
+ RuntimeTypeInfo="TRUE"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="4"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib xqilla22d.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="TRUE"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="4"
+ RuntimeTypeInfo="TRUE"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="3"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib xqilla22.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{0A690AC0-4B5A-4FCA-B2CC-A61C00F01283}">
+ <File
+ RelativePath=".\driver.cxx">
+ </File>
+ <File
+ RelativePath=".\dom-parse.cxx">
+ </File>
+ <File
+ RelativePath=".\people.cxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{19387534-A72F-4C3F-A9FB-F5B8909AEB29}">
+ <File
+ RelativePath=".\dom-parse.hxx">
+ </File>
+ <File
+ RelativePath=".\people.hxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd">
+ <File
+ RelativePath=".\people.xsd">
+ <FileConfiguration
+ Name="Debug|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd people.xsd"
+ CommandLine="xsd cxx-tree --generate-intellisense people.xsd"
+ Outputs="people.hxx;people.cxx"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd people.xsd"
+ CommandLine="xsd cxx-tree --generate-intellisense people.xsd"
+ Outputs="people.hxx;people.cxx"/>
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/xpath/xpath-8.0.sln b/xsd/dist/examples/cxx/tree/xpath/xpath-8.0.sln new file mode 100644 index 0000000..db1eeea --- /dev/null +++ b/xsd/dist/examples/cxx/tree/xpath/xpath-8.0.sln @@ -0,0 +1,25 @@ +Microsoft Visual Studio Solution File, Format Version 9.00
+# Visual Studio 2005
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xpath", "xpath-8.0.vcproj", "{EC26ACF9-0103-48D2-B7BA-0222C2175B28}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Debug|x64 = Debug|x64
+ Release|Win32 = Release|Win32
+ Release|x64 = Release|x64
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {EC26ACF9-0103-48D2-B7BA-0222C2175B28}.Debug|Win32.ActiveCfg = Debug|Win32
+ {EC26ACF9-0103-48D2-B7BA-0222C2175B28}.Debug|Win32.Build.0 = Debug|Win32
+ {EC26ACF9-0103-48D2-B7BA-0222C2175B28}.Debug|x64.ActiveCfg = Debug|x64
+ {EC26ACF9-0103-48D2-B7BA-0222C2175B28}.Debug|x64.Build.0 = Debug|x64
+ {EC26ACF9-0103-48D2-B7BA-0222C2175B28}.Release|Win32.ActiveCfg = Release|Win32
+ {EC26ACF9-0103-48D2-B7BA-0222C2175B28}.Release|Win32.Build.0 = Release|Win32
+ {EC26ACF9-0103-48D2-B7BA-0222C2175B28}.Release|x64.ActiveCfg = Release|x64
+ {EC26ACF9-0103-48D2-B7BA-0222C2175B28}.Release|x64.Build.0 = Release|x64
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/xsd/dist/examples/cxx/tree/xpath/xpath-8.0.vcproj b/xsd/dist/examples/cxx/tree/xpath/xpath-8.0.vcproj new file mode 100644 index 0000000..29377fb --- /dev/null +++ b/xsd/dist/examples/cxx/tree/xpath/xpath-8.0.vcproj @@ -0,0 +1,431 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="xpath"
+ ProjectGUID="{EC26ACF9-0103-48D2-B7BA-0222C2175B28}"
+ RootNamespace="xpath"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib xqilla22d.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib xqilla22.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib xqilla22d.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib xqilla22.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{0A690AC0-4B5A-4FCA-B2CC-A61C00F01283}"
+ >
+ <File
+ RelativePath=".\dom-parse.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\driver.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\people.cxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{19387534-A72F-4C3F-A9FB-F5B8909AEB29}"
+ >
+ <File
+ RelativePath=".\dom-parse.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\people.hxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd"
+ >
+ <File
+ RelativePath=".\people.xsd"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd people.xsd"
+ CommandLine="xsd cxx-tree --generate-intellisense people.xsd"
+ Outputs="people.hxx;people.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd people.xsd"
+ CommandLine="xsd cxx-tree --generate-intellisense people.xsd"
+ Outputs="people.hxx;people.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd people.xsd"
+ CommandLine="xsd cxx-tree --generate-intellisense people.xsd"
+ Outputs="people.hxx;people.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd people.xsd"
+ CommandLine="xsd cxx-tree --generate-intellisense people.xsd"
+ Outputs="people.hxx;people.cxx"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/xpath/xpath-9.0.sln b/xsd/dist/examples/cxx/tree/xpath/xpath-9.0.sln new file mode 100644 index 0000000..c568474 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/xpath/xpath-9.0.sln @@ -0,0 +1,25 @@ +Microsoft Visual Studio Solution File, Format Version 10.00
+# Visual Studio 2008
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xpath", "xpath-9.0.vcproj", "{EC26ACF9-0103-48D2-B7BA-0222C2175B28}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Debug|x64 = Debug|x64
+ Release|Win32 = Release|Win32
+ Release|x64 = Release|x64
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {EC26ACF9-0103-48D2-B7BA-0222C2175B28}.Debug|Win32.ActiveCfg = Debug|Win32
+ {EC26ACF9-0103-48D2-B7BA-0222C2175B28}.Debug|Win32.Build.0 = Debug|Win32
+ {EC26ACF9-0103-48D2-B7BA-0222C2175B28}.Debug|x64.ActiveCfg = Debug|x64
+ {EC26ACF9-0103-48D2-B7BA-0222C2175B28}.Debug|x64.Build.0 = Debug|x64
+ {EC26ACF9-0103-48D2-B7BA-0222C2175B28}.Release|Win32.ActiveCfg = Release|Win32
+ {EC26ACF9-0103-48D2-B7BA-0222C2175B28}.Release|Win32.Build.0 = Release|Win32
+ {EC26ACF9-0103-48D2-B7BA-0222C2175B28}.Release|x64.ActiveCfg = Release|x64
+ {EC26ACF9-0103-48D2-B7BA-0222C2175B28}.Release|x64.Build.0 = Release|x64
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/xsd/dist/examples/cxx/tree/xpath/xpath-9.0.vcproj b/xsd/dist/examples/cxx/tree/xpath/xpath-9.0.vcproj new file mode 100644 index 0000000..89d3d0f --- /dev/null +++ b/xsd/dist/examples/cxx/tree/xpath/xpath-9.0.vcproj @@ -0,0 +1,428 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="xpath"
+ ProjectGUID="{EC26ACF9-0103-48D2-B7BA-0222C2175B28}"
+ RootNamespace="xpath"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib xqilla22d.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3D.lib xqilla22d.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib xqilla22.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_3.lib xqilla22.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{0A690AC0-4B5A-4FCA-B2CC-A61C00F01283}"
+ >
+ <File
+ RelativePath=".\dom-parse.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\driver.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\people.cxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{19387534-A72F-4C3F-A9FB-F5B8909AEB29}"
+ >
+ <File
+ RelativePath=".\dom-parse.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\people.hxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd"
+ >
+ <File
+ RelativePath=".\people.xsd"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd people.xsd"
+ CommandLine="xsd cxx-tree people.xsd"
+ Outputs="people.hxx;people.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd people.xsd"
+ CommandLine="xsd cxx-tree people.xsd"
+ Outputs="people.hxx;people.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd people.xsd"
+ CommandLine="xsd cxx-tree people.xsd"
+ Outputs="people.hxx;people.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd people.xsd"
+ CommandLine="xsd cxx-tree people.xsd"
+ Outputs="people.hxx;people.cxx"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/xpath/xpath-xerces2-7.1.sln b/xsd/dist/examples/cxx/tree/xpath/xpath-xerces2-7.1.sln new file mode 100644 index 0000000..7b6985c --- /dev/null +++ b/xsd/dist/examples/cxx/tree/xpath/xpath-xerces2-7.1.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 8.00
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xpath", "xpath-xerces2-7.1.vcproj", "{EC26ACF9-0103-48D2-B7BA-0222C2175B28}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Global
+ GlobalSection(SolutionConfiguration) = preSolution
+ Debug = Debug
+ Release = Release
+ EndGlobalSection
+ GlobalSection(ProjectConfiguration) = postSolution
+ {EC26ACF9-0103-48D2-B7BA-0222C2175B28}.Debug.ActiveCfg = Debug|Win32
+ {EC26ACF9-0103-48D2-B7BA-0222C2175B28}.Debug.Build.0 = Debug|Win32
+ {EC26ACF9-0103-48D2-B7BA-0222C2175B28}.Release.ActiveCfg = Release|Win32
+ {EC26ACF9-0103-48D2-B7BA-0222C2175B28}.Release.Build.0 = Release|Win32
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ EndGlobalSection
+ GlobalSection(ExtensibilityAddIns) = postSolution
+ EndGlobalSection
+EndGlobal
diff --git a/xsd/dist/examples/cxx/tree/xpath/xpath-xerces2-7.1.vcproj b/xsd/dist/examples/cxx/tree/xpath/xpath-xerces2-7.1.vcproj new file mode 100644 index 0000000..9aebc49 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/xpath/xpath-xerces2-7.1.vcproj @@ -0,0 +1,170 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="xpath"
+ ProjectGUID="{EC26ACF9-0103-48D2-B7BA-0222C2175B28}"
+ RootNamespace="xpath"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="TRUE"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="5"
+ RuntimeTypeInfo="TRUE"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="4"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib xqilla21d.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="TRUE"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="4"
+ RuntimeTypeInfo="TRUE"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="3"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib xqilla21.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{0A690AC0-4B5A-4FCA-B2CC-A61C00F01283}">
+ <File
+ RelativePath=".\driver-2.cxx">
+ </File>
+ <File
+ RelativePath=".\dom-parse.cxx">
+ </File>
+ <File
+ RelativePath=".\people.cxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{19387534-A72F-4C3F-A9FB-F5B8909AEB29}">
+ <File
+ RelativePath=".\dom-parse.hxx">
+ </File>
+ <File
+ RelativePath=".\people.hxx">
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd">
+ <File
+ RelativePath=".\people.xsd">
+ <FileConfiguration
+ Name="Debug|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd people.xsd"
+ CommandLine="xsd cxx-tree --generate-intellisense people.xsd"
+ Outputs="people.hxx;people.cxx"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd people.xsd"
+ CommandLine="xsd cxx-tree --generate-intellisense people.xsd"
+ Outputs="people.hxx;people.cxx"/>
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/xpath/xpath-xerces2-8.0.sln b/xsd/dist/examples/cxx/tree/xpath/xpath-xerces2-8.0.sln new file mode 100644 index 0000000..f759a95 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/xpath/xpath-xerces2-8.0.sln @@ -0,0 +1,25 @@ +Microsoft Visual Studio Solution File, Format Version 9.00
+# Visual Studio 2005
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xpath", "xpath-xerces2-8.0.vcproj", "{EC26ACF9-0103-48D2-B7BA-0222C2175B28}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Debug|x64 = Debug|x64
+ Release|Win32 = Release|Win32
+ Release|x64 = Release|x64
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {EC26ACF9-0103-48D2-B7BA-0222C2175B28}.Debug|Win32.ActiveCfg = Debug|Win32
+ {EC26ACF9-0103-48D2-B7BA-0222C2175B28}.Debug|Win32.Build.0 = Debug|Win32
+ {EC26ACF9-0103-48D2-B7BA-0222C2175B28}.Debug|x64.ActiveCfg = Debug|x64
+ {EC26ACF9-0103-48D2-B7BA-0222C2175B28}.Debug|x64.Build.0 = Debug|x64
+ {EC26ACF9-0103-48D2-B7BA-0222C2175B28}.Release|Win32.ActiveCfg = Release|Win32
+ {EC26ACF9-0103-48D2-B7BA-0222C2175B28}.Release|Win32.Build.0 = Release|Win32
+ {EC26ACF9-0103-48D2-B7BA-0222C2175B28}.Release|x64.ActiveCfg = Release|x64
+ {EC26ACF9-0103-48D2-B7BA-0222C2175B28}.Release|x64.Build.0 = Release|x64
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/xsd/dist/examples/cxx/tree/xpath/xpath-xerces2-8.0.vcproj b/xsd/dist/examples/cxx/tree/xpath/xpath-xerces2-8.0.vcproj new file mode 100644 index 0000000..d79f2aa --- /dev/null +++ b/xsd/dist/examples/cxx/tree/xpath/xpath-xerces2-8.0.vcproj @@ -0,0 +1,431 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="xpath"
+ ProjectGUID="{EC26ACF9-0103-48D2-B7BA-0222C2175B28}"
+ RootNamespace="xpath"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib xqilla21d.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib xqilla21.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib xqilla21d.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib xqilla21.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{0A690AC0-4B5A-4FCA-B2CC-A61C00F01283}"
+ >
+ <File
+ RelativePath=".\dom-parse.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\driver-2.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\people.cxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{19387534-A72F-4C3F-A9FB-F5B8909AEB29}"
+ >
+ <File
+ RelativePath=".\dom-parse.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\people.hxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd"
+ >
+ <File
+ RelativePath=".\people.xsd"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd people.xsd"
+ CommandLine="xsd cxx-tree --generate-intellisense people.xsd"
+ Outputs="people.hxx;people.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd people.xsd"
+ CommandLine="xsd cxx-tree --generate-intellisense people.xsd"
+ Outputs="people.hxx;people.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd people.xsd"
+ CommandLine="xsd cxx-tree --generate-intellisense people.xsd"
+ Outputs="people.hxx;people.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd people.xsd"
+ CommandLine="xsd cxx-tree --generate-intellisense people.xsd"
+ Outputs="people.hxx;people.cxx"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/cxx/tree/xpath/xpath-xerces2-9.0.sln b/xsd/dist/examples/cxx/tree/xpath/xpath-xerces2-9.0.sln new file mode 100644 index 0000000..97e2209 --- /dev/null +++ b/xsd/dist/examples/cxx/tree/xpath/xpath-xerces2-9.0.sln @@ -0,0 +1,25 @@ +Microsoft Visual Studio Solution File, Format Version 10.00
+# Visual Studio 2008
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xpath", "xpath-xerces2-9.0.vcproj", "{EC26ACF9-0103-48D2-B7BA-0222C2175B28}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Debug|x64 = Debug|x64
+ Release|Win32 = Release|Win32
+ Release|x64 = Release|x64
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {EC26ACF9-0103-48D2-B7BA-0222C2175B28}.Debug|Win32.ActiveCfg = Debug|Win32
+ {EC26ACF9-0103-48D2-B7BA-0222C2175B28}.Debug|Win32.Build.0 = Debug|Win32
+ {EC26ACF9-0103-48D2-B7BA-0222C2175B28}.Debug|x64.ActiveCfg = Debug|x64
+ {EC26ACF9-0103-48D2-B7BA-0222C2175B28}.Debug|x64.Build.0 = Debug|x64
+ {EC26ACF9-0103-48D2-B7BA-0222C2175B28}.Release|Win32.ActiveCfg = Release|Win32
+ {EC26ACF9-0103-48D2-B7BA-0222C2175B28}.Release|Win32.Build.0 = Release|Win32
+ {EC26ACF9-0103-48D2-B7BA-0222C2175B28}.Release|x64.ActiveCfg = Release|x64
+ {EC26ACF9-0103-48D2-B7BA-0222C2175B28}.Release|x64.Build.0 = Release|x64
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/xsd/dist/examples/cxx/tree/xpath/xpath-xerces2-9.0.vcproj b/xsd/dist/examples/cxx/tree/xpath/xpath-xerces2-9.0.vcproj new file mode 100644 index 0000000..8f3938e --- /dev/null +++ b/xsd/dist/examples/cxx/tree/xpath/xpath-xerces2-9.0.vcproj @@ -0,0 +1,428 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="xpath"
+ ProjectGUID="{EC26ACF9-0103-48D2-B7BA-0222C2175B28}"
+ RootNamespace="xpath"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib xqilla21d.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2D.lib xqilla21d.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/driver.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib xqilla21.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="0"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="xerces-c_2.lib xqilla21.lib"
+ OutputFile="$(OutDir)/driver.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{0A690AC0-4B5A-4FCA-B2CC-A61C00F01283}"
+ >
+ <File
+ RelativePath=".\dom-parse.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\driver-2.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\people.cxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{19387534-A72F-4C3F-A9FB-F5B8909AEB29}"
+ >
+ <File
+ RelativePath=".\dom-parse.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\people.hxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Schema Files"
+ Filter="xsd"
+ >
+ <File
+ RelativePath=".\people.xsd"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd people.xsd"
+ CommandLine="xsd cxx-tree people.xsd"
+ Outputs="people.hxx;people.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd people.xsd"
+ CommandLine="xsd cxx-tree people.xsd"
+ Outputs="people.hxx;people.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd people.xsd"
+ CommandLine="xsd cxx-tree people.xsd"
+ Outputs="people.hxx;people.cxx"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="xsd people.xsd"
+ CommandLine="xsd cxx-tree people.xsd"
+ Outputs="people.hxx;people.cxx"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Readme.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/xsd/dist/examples/makefile b/xsd/dist/examples/makefile new file mode 100644 index 0000000..5b8947e --- /dev/null +++ b/xsd/dist/examples/makefile @@ -0,0 +1,11 @@ +dirs := cxx + +.PHONY: all $(dirs) + +all: $(dirs) + +$(dirs): + $(MAKE) -C $@ $(MAKECMDGOALS) + +makefile: ; +% :: $(dirs) ; diff --git a/xsd/documentation/custom-literals.xsd b/xsd/documentation/custom-literals.xsd new file mode 100644 index 0000000..ab2d649 --- /dev/null +++ b/xsd/documentation/custom-literals.xsd @@ -0,0 +1,49 @@ +<?xml version="1.0"?> + +<!-- + +file : documentation/custom-literals.xsd +author : Boris Kolpackov <boris@codesynthesis.com> +copyright : not copyrighted - public domain + +This schema describes the XML format used to provide the custom string +to C++ string literal mapping with the -custom-literals XSD compiler +command line option. Here is a sample instance: + +<string-literal-map> + <entry> + <string>hello</string> + <literal>"hello"</literal> + </entry> + <entry> + <string>greeting</string> + <literal>"greeting"</literal> + </entry> +</string-literal-map> + +--> + +<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + + <xsd:simpleType name="literal_t"> + <xsd:restriction base="xsd:string"> + <xsd:pattern value='".+"'/> + </xsd:restriction> + </xsd:simpleType> + + <xsd:complexType name="entry_t"> + <xsd:sequence> + <xsd:element name="string" type="xsd:string"/> + <xsd:element name="literal" type="literal_t"/> + </xsd:sequence> + </xsd:complexType> + + <xsd:complexType name="string_literal_map_t"> + <xsd:sequence> + <xsd:element name="entry" type="entry_t" maxOccurs="unbounded"/> + </xsd:sequence> + </xsd:complexType> + + <xsd:element name="string-literal-map" type="string_literal_map_t"/> + +</xsd:schema> diff --git a/xsd/documentation/cxx/makefile b/xsd/documentation/cxx/makefile new file mode 100644 index 0000000..e039e23 --- /dev/null +++ b/xsd/documentation/cxx/makefile @@ -0,0 +1,22 @@ +# file : documentation/cxx/makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../build/bootstrap.make + +docs := parser tree + +default := $(out_base)/ +install := $(out_base)/.install +dist := $(out_base)/.dist +dist-win := $(out_base)/.dist-win +cleandoc := $(out_base)/.cleandoc + +$(default): $(addprefix $(out_base)/,$(addsuffix /,$(docs))) +$(install): $(addprefix $(out_base)/,$(addsuffix /.install,$(docs))) +$(dist): $(addprefix $(out_base)/,$(addsuffix /.dist,$(docs))) +$(dist-win): $(addprefix $(out_base)/,$(addsuffix /.dist-win,$(docs))) +$(cleandoc): $(addprefix $(out_base)/,$(addsuffix /.cleandoc,$(docs))) + +$(foreach m,$(docs),$(call import,$(src_base)/$m/makefile)) diff --git a/xsd/documentation/cxx/parser/guide/cxx-parser-guide.pdf b/xsd/documentation/cxx/parser/guide/cxx-parser-guide.pdf Binary files differnew file mode 100644 index 0000000..c549f94 --- /dev/null +++ b/xsd/documentation/cxx/parser/guide/cxx-parser-guide.pdf diff --git a/xsd/documentation/cxx/parser/guide/cxx-parser-guide.ps b/xsd/documentation/cxx/parser/guide/cxx-parser-guide.ps new file mode 100644 index 0000000..0dcd6d7 --- /dev/null +++ b/xsd/documentation/cxx/parser/guide/cxx-parser-guide.ps @@ -0,0 +1,20713 @@ +%!PS +%%Title: C++/Parser Mapping Getting Started Guide +%%Creator: html2ps version 1.0 beta5 +%%EndComments +save +2000 dict begin +/d {bind def} bind def +/D {def} d +/t true D +/f false D +/FL [/Times-Roman +/Times-Italic +/Times-Bold +/Times-BoldItalic +/Courier +/Courier-Oblique +/Courier-Bold +/Courier-BoldOblique +/Helvetica +/Helvetica-Oblique +/Helvetica-Bold +/Helvetica-BoldOblique] D +/WF t D +/WI 0 D +/F 1 D +/IW 471 F div D +/IL 621 F div D +/PS 791 D +/EF [0 1 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 2 2] D +/EZ [12 10 19 17 15 13 12 11 12 12 12 12 12 12 12 12 12 12 12 12 12 12 8 8] D +/Ey [0 0 2 2 2 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] D +/EG [-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1] D +/Tm [1 1 0.8 0.8 0.8 0.8 0.8 0.8 0 0 0 0 0 0 0.5 1 1 1 1 0 0 1.3 0 0] D +/Bm [1 1 0.5 0.5 0.5 0.5 0.5 0.5 0 0 0 0 0 0 0.5 1 1 1 1 0 0 1 0 0] D +/Lm [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 2 2 0 0 2 0 0 0] D +/Rm [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0] D +/EU [-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 0 0] D +/NO f D +/YY [[{()}{ h }][{ h }{()}][{()}{()}]] D +/ZZ [[{ (January 2010) }{ Pn }][{ Pn }{ (January 2010) }][{ Ti }{ Ti }]] D +/Ts EZ 0 get D +/TU f D +/Xp t D +/AU f D +/SN 0 D +/Cf t D +/Tp t D +/Fe f D +/TI 2 Ts mul D +/Fm 14 D +/xL 71 D +/xR 71 D +/yL 706 D +/yR 706 D +/Wl 471 F div D +/Wr 471 F div D +/hL 621 F div D +/hR 621 F div D +/FE {newpath Fm neg Fm M CP BB IW Fm add Fm L IW Fm add IL Fm add neg L CP BB + Fm neg IL Fm add neg L closepath} D +/LA {PM 0 eq{/IW Wl D /IL hL D}{/IW Wr D /IL hR D}ie /W IW D /LL W D /LS W D + TU PM 0 eq and{IW 56 F div add SA{Sf div}if 0 translate} + {PM 0 eq{xL yL}{xR yR}ie translate F SA{Sf mul}if dup scale + CS CF FS Cf{CA CL get VC}if /Bb f D}ie 0 0 M + TF not Tc or {Cf{gsave SA{1 Sf div dup scale}if Cb VC FE fill grestore}if}if}D +/Pi 0 Ts mul D +/SG [0.8 1 1] D +/Ab 15 D +/J 0 D +/Tc t D +/NH 6 D +/Nf f D +/Pa f D +/LH 1.2 D +/XR f D +/Xr {/pN E D ( [p ) WB pN WB (] )WB} D +/Db [16#FF 16#FF 16#FF] D +/Dt [16#00 16#00 16#00] D +/eA f D +/Fi f D +/bT f D +/Lc t D +/Dl [16#00 16#00 16#00] D +/LX f D +/Br 0.25 D +/IA ([IMAGE]) D +/DS {/PF f D()WB NL NP()pop RC ZF} D +/Gb f D +/Mb t D +/Hc [16#00 16#00 16#00] D +/Bl 3 D +/MI -15.6 D +/DX (DRAFT) D +/Di 0 D +/Tt 113.385826771654 D +/Th { ( +) 2 Al()BR ( + ) 0 1 -1 H()4 FZ (C++/Parser Mapping) ES()EH ( + ) 0 1 -1 H()4 FZ (Getting Started Guide) ES()EH ( + ) 0 1 -1 H ( ) EH ( + ) 0 1 -1 H ( ) EH ( + ) 0 1 -1 H ( ) EH ( + ) 0 1 -1 H ( ) EH ( + ) 0 1 -1 H ( ) EH ( + ) 0 1 -1 H ( ) EH ( +) Ea()BR ( + ) 0 P (Copyright © 2005-2010 CODE SYNTHESIS TOOLS CC) EP ( + + ) 0 P (Permission is granted to copy, distribute and/or modify this + document under the terms of the + ) R0 2 A (GNU Free + Documentation License, version 1.2) EA (; with no Invariant Sections, + no Front-Cover Texts and no Back-Cover Texts. + ) EP ( + + ) 0 P (This document is available in the following formats: + ) R1 2 A (XHTML) EA (, + ) R2 2 A (PDF) EA (, and + ) R3 2 A (PostScript) EA (.) EP()} D +/tH {()0 1 -1 H (Table of Contents) EH()} D +/FD 2 D +/Dy 2 D +/cD [16#F0 16#F0 16#F0] D +/FW 0.6 D +/FU [16#00 16#00 16#00] D +/ET {/RM f D /A0 3 D /PN SN D /OU t D /Ou t D /W IW D /LL W D D1 + Ms not TP and{Ip}if /TF f D} D + +%-- End of variable part -- +/MySymbol 10 dict dup begin + /FontType 3 D /FontMatrix [.001 0 0 .001 0 0 ] D /FontBBox [25 -10 600 600] D + /Encoding 256 array D 0 1 255{Encoding exch /.notdef put}for + Encoding (e) 0 get /euro put + /Metrics 2 dict D Metrics begin + /.notdef 0 D + /euro 651 D + end + /BBox 2 dict D BBox begin + /.notdef [0 0 0 0] D + /euro [25 -10 600 600] D + end + /CharacterDefs 2 dict D CharacterDefs begin + /.notdef {} D + /euro{newpath 114 600 moveto 631 600 lineto 464 200 lineto 573 200 lineto + 573 0 lineto -94 0 lineto 31 300 lineto -10 300 lineto closepath clip + 50 setlinewidth newpath 656 300 moveto 381 300 275 0 360 arc stroke + -19 350 moveto 600 0 rlineto -19 250 moveto 600 0 rlineto stroke}d + end + /BuildChar{0 begin + /char E D /fontdict E D /charname fontdict /Encoding get char get D + fontdict begin + Metrics charname get 0 BBox charname get aload pop setcachedevice + CharacterDefs charname get exec + end + end}D + /BuildChar load 0 3 dict put /UniqueID 1 D +end +definefont pop + +/Cd {aload length 2 idiv dup dict begin {D} repeat currentdict end} D +/EX {EC cvx exec} D +/DU {} d +/BB {pop pop}d +/ie {ifelse} d +/E {exch} d +/M {moveto} d +/R {rmoveto} d +/L {lineto} d +/RL {rlineto} d +/CP {currentpoint} d +/SW {stringwidth} d +/GI {getinterval} d +/PI {putinterval} d +/Sg {setgray} d +/LW {setlinewidth} d +/S {dup () ne OU and{0 Co R AT 3 eq LB and HF not and A1 0 ne A2 0 ne or and + {A2 0 32 A1 0 6 -1 roll awidthshow}{show}ie 0 Co neg R}{pop}ie + OU PH 3 eq or{/Ms t D}if} D +/U {OU{gsave CP currentfont /FontInfo get /UnderlinePosition get + 0 E currentfont /FontMatrix get dtransform E pop add newpath M dup SW pop + CJ 0 RL stroke grestore}if} D +/B {OU Br 0 gt and{CP Ts neg Ts .33 mul R gsave 0 Sg + CP newpath Ts Br mul 0 360 arc closepath UI 2 mod 0 eq{stroke}{fill}ie + grestore M CP E Ts Br 1 add mul sub E BB /Ms t D}if}D +/NP {Ms TP not or PA and OU and{TP{OR}if f1{mF k2 /mF E D /YC 0 D}if + TP TU not PM 0 eq or and{showpage}if DU Ip TE not{LA}if 0.6 LW + /CI 0 D /TP t D /Hs f D /hl 6 D /Hv 6 D /HI hi D /Ms f D}if Bs XO BO M} D +/Np {LE sub CP E pop gt PL 0 eq and{NP}if}D +/Ip {/PN PN 1 add D /Pn RM{1}{4}ie PN Ns D /PM PN SN sub 2 mod D} D +/GP {E dup 3 -1 roll get PN 1 add 2 mod get dup type /integertype eq + {get 0 get}{E pop}ie}d +/Fc {dup 2 GP exec SW pop /S1 E D dup 1 GP exec SW pop /S2 E D 0 GP exec SW + pop /S3 E D S1 0 gt{S2 2 mul S1 add S3 2 mul S1 add 2 copy lt{E}if pop}{0}ie + S2 S3 add 2 copy lt{E}if pop IW .9 mul div dup 1 gt{1 E div}{pop 1}ie}D +/OR {Df{Sd}if tp not{gsave SA{1 Sf div dup scale}if Fe{Cf{FU VC}if FW LW + 1 setlinejoin FE stroke}if /YO {60 F div dup 40 gt{pop 40}if}D /cs CS D + /cf CF D /CF 0 D /pf PF D /PF f D /Fn FN D /At AT D /AT 0 D /FN EF Hf 1 add + get D Fz Fs FS ZZ Fc Fz mul Fs FS EU Hf 1 add get dup type /arraytype eq + Cf and{VC}{pop 0 Sg}ie IW IL neg YO sub M ZZ 1 GP exec dup SW pop neg 0 R Sh + 0 IL neg YO sub M ZZ 0 GP exec Sh ZZ 2 GP exec dup SW pop IW E sub 2 div + IL neg YO sub M Sh Fz Fs FS NO{/AW IW Pn SW pop sub D AW 2 div IL neg YO sub + S1 0 gt S2 AW .45 mul gt or S3 AW .45 mul gt or{Fz 2 mul sub}if M Pn Sh}if + EU Hf get dup type /arraytype eq Cf and{VC}{pop 0 Sg}ie YY Fc /FN EF Hf get D + Hz mul HS FS IW YO M YY 1 GP exec dup SW pop neg 0 R Sh 0 YO M YY 0 GP exec Sh + YY 2 GP exec dup SW pop IW E sub 2 div YO M Sh /FN Fn D /AT At D t Pb XO SZ + SL get neg R /PF pf D grestore /CF 0 D cs cf FS}if}D +/Sh {dup () ne{CP Hz 4 div sub BB show CP CS add BB}{pop}ie}D +/Pb {/OU E D /Ou OU D /PB t D 0 0 M Ba{/Sa save D /BP t D /Fl t D RC /PL 0 D + /PH 0 D /W IW D /LE IL .7 mul D /EO 0 D SI ZF /YA 0 D /BO 0 D /C1 () D + BA 0 Ts neg R Bb{Xl Yl Xh Yh}if Bb CP Sa restore M + {/Yh E D /Xh E D /Yl E D /Xl E D}if /Fl t D}if + BL /OU t D /HM f D /Ou t D /PB f D} D +/Bs {/BP Ba not D}D +/reencodeISO { + dup dup findfont dup length dict begin{1 index /FID ne{D}{pop pop}ie}forall + /Encoding ISOLatin1Encoding D currentdict end definefont} D +/ISOLatin1Encoding [ +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright +/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash +/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon +/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N +/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright +/asciicircum/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m +/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/space/exclamdown/cent/sterling/currency/yen/brokenbar +/section/dieresis/copyright/ordfeminine/guillemotleft/logicalnot +/hyphen/registered/macron/degree/plusminus/twosuperior/threesuperior +/acute/mu/paragraph/periodcentered/cedilla/onesuperior/ordmasculine +/guillemotright/onequarter/onehalf/threequarters/questiondown +/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla +/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex +/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis +/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute +/Thorn/germandbls/agrave/aacute/acircumflex/atilde/adieresis +/aring/ae/ccedilla/egrave/eacute/ecircumflex/edieresis/igrave +/iacute/icircumflex/idieresis/eth/ntilde/ograve/oacute/ocircumflex +/otilde/odieresis/divide/oslash/ugrave/uacute/ucircumflex/udieresis +/yacute/thorn/ydieresis +] D +[128/backslash 129/parenleft 130/parenright 141/circumflex 142/tilde +143/perthousand 144/dagger 145/daggerdbl 146/Ydieresis 147/scaron 148/Scaron +149/oe 150/OE 151/guilsinglleft 152/guilsinglright 153/quotesinglbase +154/quotedblbase 155/quotedblleft 156/quotedblright 157/endash 158/emdash +159/trademark] +aload length 2 idiv 1 1 3 -1 roll{pop ISOLatin1Encoding 3 1 roll put}for +/colorimage where{pop}{ + /colorimage { + pop pop /Pr E D {/Cv Pr D /Gr Cv length 3 idiv string D 0 1 Gr length 1 sub + {Gr E dup /i E 3 mul D Cv i get 0.299 mul Cv i 1 add get 0.587 mul add + Cv i 2 add get 0.114 mul add cvi put}for Gr} image} D +}ie +/pdfmark where{pop}{userdict /pdfmark /cleartomark load put}ie +WF{FL{reencodeISO D}forall}{4 1 FL length 1 sub{FL E get reencodeISO D}for}ie +/Symbol dup dup findfont dup length dict begin + {1 index /FID ne{D}{pop pop}ie}forall /Encoding [Encoding aload pop] + dup 128 /therefore put D currentdict end definefont D + +/SF {/CS E D SZ SL CS put FO SL FN put /YI CS LH neg mul D dup ST cvs ( ) join + CS ST cvs join C1 E join ( NF ) join /C1 E D CS NF /Wf WF FN 0 gt or D + /BW Wf{( ) SW pop}{0}ie D}D +/NF {/cS E D /cF E D cF 0 ge{FL cF get}{cF -1 eq{/Symbol}{/MySymbol}ie}ie + findfont cS scalefont setfont} D +/FS {CF or /CF E D FR SL CF put CF CF 0 ge{FN 4 mul add}if E SF} D +/PC {SH /BP f D fin not GL not and{NL}if /HM t D /LL LS D} D +/BS {/TX E D Wf{/fin f D /CW 0 D /LK 0 D /SC 0 D + /RT TX D {RT ( ) search{/NW E D pop /RT E D /WH NW SW pop D CW WH add LL gt + {TX SC LK SC sub 1 sub NN GI GL{SH cF cS OC + 2 copy cS ne E cF ne or{NF}{pop pop}ie}{PC /CW WH BW add D}ie + /SC LK D} + {GL{JC}if + /CW CW WH add BW add D /HM t D}ie /GL f D /Ph f D + /LK LK NW length 1 add add D}{pop exit}ie}loop + /fin t D TX SC LK SC sub GI SH RT () ne{GL not{CC}if}if + /LC TX length D /WH RT SW pop D CW WH add Hy{HC SW pop add}if LL gt + {RT GL{SH cF cS OC 2 copy cS ne E cF ne or{NF}{pop pop}ie + Hy{/Ph t D}if /LL LS D}{NL /LL LS D SH}ie} + {RT PC Hy{CC}if /Ph Ph Hy or D}ie RT () ne{/GL t D /HM t D}if} + {TX SW pop LL le{TX SH}{/NW () D 0 2 TX length 1 sub + {/CW E D TX 0 CW GI dup SW pop LL gt{pop NW SH /HM t D NL/LL W XO sub MR sub D + /CW CW 2 sub NN D /TX TX CW TX length CW sub GI D TX BS exit} + {/NW E D}ie}for}ie}ie /HM t D}D +/CC {C0 length 0 gt{JC}if /C0 [C1 L1 YA YB Mf NS NB TB AF Bw] D + /C1 () D /L0 L1 D /YA 0 D /YB 0 D /Mf 0 D /NS 0 D /NB 0 D}D +/JC {C0 aload length 0 gt{pop pop pop NB add /NB E D NS add /NS E D + dup Mf gt{/Mf E D}{pop}ie dup YB gt{/YB E D}{pop}ie + dup YA gt{/YA E D}{pop}ie pop C1 join /C1 E D /C0 [] D}if}D +/OC {C0 length 0 gt{C1 L1 L0 sub YA YB Mf NS NB TB AF Bw GL C0 aload pop + /Bw E D /AF E D /TB E D /NB E D /NS E D /Mf E D /YB E D /YA E D /C0 [] D + /L1 E D /C1 E D Ph{HC SH}if NL /GL E D /Bw E D /AF E D /TB E D /NB E D /NS E D + /Mf E D /YB E D /YA E D /L1 E D /LL W L1 sub XO sub MR sub WH sub D /CW 0 D + C1 E join /C1 E D}if}D +/BT {/LB t D dup length string copy RS dup dup () ne E ( ) ne and + {/CI 0 D /LS LL D /LL W L1 sub XO sub MR sub D BS} + {dup ( ) eq{/GL f D}if dup () eq L1 0 eq or{pop}{SH /BP f D /Ph f D}ie}ie + /LB f D} D +/BL {CP E pop XO E M} D +/NL {JC /GL f D /SK W XO sub MR sub L1 sub TB{Bw add}if D + /YA LF{Mf HM Fl not and PF or{LH mul}if}{0 /LF t D}ie YA 2 copy lt{E}if pop D + C1 () ne{/FB YB Mf SA{Sf mul}if 4 div 2 copy lt{E}if pop D}if Fl{/Ya YA D}if + CP E pop YA sub YB sub LE neg lt Fl not and PB not and{NP}if NT TL BL + OU PF not and PB or{/RE L1 TB{Bw sub}if + W XO sub MR sub div YA YB add LE BO add div 2 copy lt{E}if pop D + RE 1 gt{BL 1 RE div dup scale}if}if + AT 2 le{SK AT mul 2 div YA neg R}if + AT 3 eq{0 YA neg R TB{/NB NB 1 sub D /NS NS 1 sub D}if /NB NB 1 sub NN D + /A3 NS 6 mul NB add D NS NB add 0 eq + {/A1 0 D /A2 0 D} + {NS 0 eq{/A1 SK NB div dup J gt{pop 0}if D /A2 0 D}{J A3 mul SK lt + {/A1 J D /A2 SK J NB mul sub NS div dup Ab gt{/A1 0 D pop 0}if D} + {/A1 SK A3 div D /A2 A1 6 mul D}ie}ie}ie /A1 A1 NN D /A2 A2 NN D}if + AT 4 eq{0 YA neg R PH 2 le{PD 0 lt{/PD L1 D}if PD M1 gt{/M1 PD D}if + L1 PD sub M2 gt{/M2 L1 PD sub D}if}{DV ID 1 sub get 0 ge{Lo 0 R}if}ie}if + F0 cF ne Cs cS ne or{F0 Cs NF}if + /ms Ms D /Ms f D CP FB sub + C1 cvx exec XO EO sub L1 add TB{BW sub}if dup LM gt{/LM E D}{pop}ie + PH 0 eq PH 4 eq or Ms and{HF not{/PO t D /AH t D}if + BB CP YA add E AT 3 eq LB and{A1 sub}if TB{BW sub}if E BB} + {pop pop}ie Ms HM PH 3 eq and or{/BP f D /Fl f D}if + /Lo 0 D /L1 0 D /F0 cF D /Cs cS D BP not{0 YB NN neg R}if + OU f1 and mF not and{k2 /f1 f D}if + OU PF not and PB or{RE 1 gt{RE dup scale}if}if /Ms ms Ms or D + /C1 AF{(Cp )}{()}ie D /YA 0 D /YB 0 D BL + AT 4 eq LB not and PH 3 ge and + {ID DV length lt{DV ID get dup 0 ge{DO E sub /Lo E D /L1 Lo D}{pop}ie + /ID ID 1 add D}if}if /T t D CD{/LN LN 1 add D PD}if + /PD -1 D /NS 0 D /NB 0 D /TB f D /Ph f D /Mf 0 D /HM f D} D +/RS {/TM E D /CN 0 D TM{10 eq{TM CN ( ) PI}if /CN CN 1 add D}forall + /CN 0 D /BK HM EN and{0}{1}ie D TM + {dup 32 ne{TM CN 3 2 roll put /CN CN 1 add D /BK 0 D} + {pop BK 0 eq{TM CN 32 put /CN CN 1 add D}if /BK 1 D}ie}forall + TM 0 CN GI dup dup () ne E ( ) ne and + {dup CN 1 sub get 32 eq{/EN f D}{/EN t D}ie}if} D +/join {2 copy length E length add string dup 4 2 roll 2 index 0 3 index + PI E length E PI}d +/WR {(\n) search{dup () ne BP not or + {Li 4 le CP E pop YI Li mul add LE add 0 lt and PL 0 eq and{NP}if + SH NL pop /Li Li 1 sub D WR}{pop pop WR}ie}{SH}ie /CI 0 D /BP f D} D +/SH {dup dup () ne E ( ) ne and PF or CS Mf gt and{/Mf CS D}if + T not Wf and{( ) E join /T t D}if dup BP{/MF CS D}if + AT 3 eq{2 copy length dup 0 gt{/NB E NB add D + {( ) search{/NS NS 1 add D pop pop}{pop exit}ie}loop}{pop pop}ie}if + CD PD 0 lt and{dup DC search{SW pop /PD E L1 add D pop pop}{pop}ie}if + 0 Np dup SW pop L1 add /L1 E D dup () ne + {C1 (\() join E join (\)) join AU AF and UF or Wf and{( U ) join}if + sF{( s ) join}if ( S ) join + /C1 E D dup length 1 sub get 32 eq /TB E D /Bw BW D}{pop pop}ie} D +/BG {AI LG BC add add 0 eq} D +/ON {OU{Ty AR AI NN get dup 1 add Ln Ns Ty 2 mod 0 eq{(. )}{(\) )}ie join + dup SW pop neg 0 R CP E 0 lt{0 E M}{pop}ie CP BB show /Ms t D}if} D +/Ln {AR AI 3 -1 roll put}D +/SP {dup CI lt BP not and{dup CI sub 0 E R /CI E D}{pop}ie} D +/BN {PF{WR /HM f D}{BT NL}ie} D +/NN {dup 0 lt{pop 0}if} D +/h {(h) HI ST cvs join cvx exec dup 1 get E Nf{0 get E join}{pop}ie} D +/H {/fn FN D /Hi E 1 add D 1 sub /HL E D /H2 HL 2 add D /GS EZ H2 get D + E Tm H2 get GS mul BE dup 0 gt{1 sub}{pop EG H2 get dup 0 lt{pop AT}if}ie NA + WW Np /SL SL 1 add D /FN EF H2 get D GS Ey H2 get FS + EU H2 get Sc Hs not HL Hl lt and Hs HL hl lt and or Hi 0 eq or + {/HI Hi D /Hs t D /hl HL D /Hv HL D}if HL Hl lt{/hi Hi D}if + Nf HI 0 gt and{(h) Hi ST cvs join cvx exec 0 get WB}if + /HF t D /AH f D /PO f D} D +/EH {Bm H2 get GS mul BE OA /SL SL 1 sub NN D /CF 0 D /FN fn D + SZ SL get FR SL get FS /HF f D /GS Ts D ()Ec} D +/P {E PF{WR}{PO{EP}{BN}ie Ts 4 mul Np AE not{Tm 0 get Ts mul neg SP}if + dup 0 ge AH and{Pi Pd}if}ie 1 sub dup 0 lt{pop AV AL get}if /AT E D /PO t D} D +/EP {PF{WR}{BN Ts 4 mul Np}ie AE not{Bm 0 get Ts mul neg SP}if + /AT AV AL get D /PO f D} D +/BE {E PO{EP}{BN}ie Ts 4 mul Np neg SP} D +/HR {/Aw W EO sub D /RW E dup 0 gt{Aw mul}{neg}ie dup Aw gt{pop Aw}if D /RZ E D + E BN Ts neg SP 1 sub 2 div Aw RW sub mul EO add CP E pop M PF{0 Ps neg R}if + 0 Np OU{gsave RZ LW Cf{Hc VC}{0 Sg}ie CP BB RW 0 RL CP BB stroke grestore}if + /CI 0 D /BP f D PF not{Ts neg SP}if /Ms t D} D +/AD {I NL EG 14 get dup 0 lt{pop AT}if NA /AE t D Tm 14 get Ts mul neg SP + Cf{EU 14 get dup -1 eq{pop CA CL get}if Sc}if} D +/DA {BN ()ES OA /AE f D ()Ec Bm 14 get Ts mul neg SP} D +/PR {/MW E D /Li E D Tm 1 get Ps mul BE 0 NA /FN Fp D /PF t D SI /SL SL 1 add D + /CF 0 D Ps CS mul Ts div MW WC mul CS mul Ts div dup LL gt PL 0 eq and + {LL div div}{pop}ie Ey 1 get FS CP E pop LE add YI neg div cvi dup Li lt + AH and{4 lt YI Li mul 5 mul LE add 0 gt or PL 0 eq and{NP}if}{pop}ie + EU 1 get Sc /GS Ps D}D +/RP {WR NL () /PF f D SI /FN 0 D ES Bm 1 get Ps mul neg SP OA /GS Ts D} D +/SI {/XO Lm 15 get BC NN mul Lm 16 get AI UI sub NN mul add + Lm 17 get UI NN mul add Lm 20 get LG NN mul add Ts mul + PF{Lm 1 get Ps mul add}if EO add D + /MR Rm 15 get BC NN mul Rm 16 get AI UI sub NN mul add + Rm 17 get UI NN mul add Rm 20 get LG NN mul add Ts mul + PF{Rm 1 get Ps mul add}if D /LL W XO sub MR sub D} D +/DT {/cC E D BN /LG LG 1 sub D SI /LG LG 1 add D WW 2 div Np BL} D +/DD {WB Cc 0 eq cC 0 eq and L1 0 eq or Lm 20 get Ts mul L1 sub TB{BW add}if + Ts 2 div lt or NL /LF E D SI BL /cC 0 D} D +/DL {Dc LG Cc put /Cc E D BG{Tm 18 get Ts mul BE}{BN}ie /LG LG 1 add D BL} D +/LD {BN LG 0 gt{/LG LG 1 sub D}if /Cc Dc LG get D SI + BG{()Bm 18 get Ts mul BE}if BL} D +/UL {BG{Tm 17 get Ts mul BE}{BN}ie NR AI NN 0 put /UI UI 1 add D + /AI AI 1 add D SI BL} D +/LU {BN /UI UI 1 sub D /AI AI 1 sub D SI BG{()Bm 17 get Ts mul BE}if BL} D +/OL {E BG{Tm 16 get Ts mul BE}{BN}ie TR AI NN Ty put /Ty E D NR AI NN 1 put + /AI AI 1 add D SI BL 1 Ln} D +/LO {BN /AI AI 1 sub D /Ty TR AI get D SI BG{()Bm 16 get Ts mul BE}if BL} D +/LI {E BN -1 SP /BP f D /CI 0 D 0 Np NR AI 1 sub NN get 1 eq + {dup dup 0 gt E 4 le and{/Ty E D}{pop}ie + /L1 L1 Ty AR AI NN get Ns SW pop XO sub dup 0 lt{pop 0}if add D ( ON )} + {pop ( B )}ie C1 E join /C1 E D CS Mf gt{/Mf CS D}if BL} D +/BQ {Tm 15 get Ts mul BE /BC BC 1 add D SI BL} D +/QB {Bm 15 get Ts mul BE /BC BC 1 sub D SI BL} D +/Al {E EP 1 sub dup 0 lt{pop AV AL get}if NA} D +/Ea {EP OA} D +/WB {PF{WR}{BT}ie} D +/F1 {WB /FN 0 D CS 0 FS} D +/F2 {WB /FN WI D CS 0 FS} D +/HY {/Hy t D WB /Hy f D} D +/YH {WB} D +/A {/LT E D LT 1 eq{/RN E D}if /Lh E D WB /C1 C1 ( Cp ) join D + Lc AF not and{Cl Sc}if /AF t D} D +/EA {Lc AF and{Ec}{WB}ie TL Pa AF and Lh 0 ne and + {( \() Lh join (\)) join /AF f D WB}if /AF f D} D +/TL {C1 ( Tl ) apa /C1 E D} d +/apa {AF OU and Lh 0 ne LT 1 eq or and{LT 1 eq{RN ( /) E ST cvs join} + {(\() Lh join (\)) join}ie E join join}{pop}ie} d +/Cp {/Xc CP /Yc E D D} D +/SS {Cf{dup 0 ge{EU E get dup -1 eq{pop CA CL get}if}{pop CA CL get}ie Sc} + {pop}ie SZ SL get /SL SL 1 add D} D +/I {WB 8 SS 1 FS} D +/EM {WB 8 SS /CF CF 1 xor D 0 FS} D +/BD {WB 9 SS 2 FS} D +/TT {WB 10 SS /FN Fp D 0 FS} D +/KB {WB 11 SS /FN Fp D 2 FS} D +/CT {WB 12 SS 1 FS} D +/SM {WB 13 SS /FN Fp D 0 FS} D +/Q {/QL QL 1 add D QO QL 2 mod get La get join WB} D +/EQ {QC QL 2 mod get La get join WB /QL QL 1 sub D} D +/RO {WB -1 SS /CF 0 D 0 FS} D +/SY {WB -1 SS -1 FS} D +/MY {WB -1 SS -2 FS} D +/ES {WB /SL SL 1 sub NN D /CF 0 D /FN FO SL get D SZ SL get FR SL get FS ()Ec}D +/FZ {3 sub 1.2 E exp GS mul E WB TL /C1 C1 ( Cp ) join D /SL SL 1 add D 0 FS} D +/Ef {WB TL ()ES /C1 C1 ( Cp ) join D} D +/BZ {dup /Bf E D FZ}D +/Sc {dup -1 ne Cf and{/CL CL 1 add D dup 0 eq{pop [0 0 0]}if + dup CA E CL E put VS ( VC ) join C1 E join /C1 E D}{pop}ie} D +/Ec {WB Cf{/CL CL 1 sub NN D CA CL get VS ( VC ) join C1 E join /C1 E D}if} D +/VS {dup type /arraytype eq{([) E {ST cvs join ( ) join}forall (]) join}if} D +/VC {{255 div}forall setrgbcolor} D +/Sl {dup type /integertype ne{Ds}if /La E D WB}d +/UN {WB /UF t D} D +/NU {WB /UF f D} D +/SE {WB /sF t D} D +/XE {WB /sF f D} D +/sM {/C1 C1 ( k1 ) join D}d +/eM {/C1 C1 ( k2 ) join D}d +/k1 {/YC CP E pop Ts add D /mF t D /f1 t D}d +/k2 {gsave 3 LW -9 CP E pop Ts 0.2 mul sub M -9 YC L stroke grestore /mF f D}d +/Ac {/AC E D WB}d +/Ca {eA{( \()join AC join(\) )join}if WB}d +/s {OU{gsave 0 CS .25 mul R dup SW pop CJ 0 RL stroke grestore}if}D +/CJ {AT 3 eq LB and{E dup dup length 1 sub A1 mul E + {( ) search{pop pop E A2 add E}{pop exit}ie}loop 3 -1 roll add + W CP pop sub 2 copy gt{E}if pop}if}D +/So {/Co E D} D +/SO {C1 Yo ST cvs join ( So ) join /C1 E D (j) SW pop 2 div Pd} D +/Se {E WB CS E div Pd}D +/Pd {dup type /stringtype eq{SW pop}if dup /L1 E L1 add D + ST cvs ( 0 R ) join C1 E join /C1 E D} D +/Sp {0.35 CO} D +/Sb {-0.2 CO} D +/CO {OV Io Yo put /Yo E CS mul Yo add D /Io Io 1 add D -1.5 Io mul 3 add FZ SO + CS Yo add dup YA gt{/YA E D}{pop}ie + Yo neg dup YB gt{/YB E D}{pop}ie} D +/Es {ES /Io Io 1 sub NN D /Yo OV Io get D SO} D +/SB {/N2 0 D 0 1 NI{/N E D{IX N2 get 0 lt{/N2 N2 1 add D}{exit}ie}loop + /K WS N get FC N get mul D /NY AY N2 get D /BV NY array D + 0 1 NY 1 sub{/TM K string D currentfile TM readhexstring pop pop BV E TM put} + for BM N BV put /N2 N2 1 add D}for} D +/IC [{/MA E D /MB 0 D}{2 div /MA E D /MB MA D}{/MB E CS sub D /MA CS D} + {pop /MA YS AB mul D /MB 1 AB sub YS mul D}{pop /MA 0 D /MB 0 D}] D +/IP {BV N get /N N 1 add D} D +/II {/K E D IX K get 0 lt{/EC E D}if /TY E D + TY 4 eq{/Y E D /X E D}if TY 3 eq{/AB E D}if + /XW AX K get D /YW AY K get D /IS SG IT K get get D /XS XW IS mul D + /YS YW IS mul D YS IC TY get exec /MA MA Fl not{3 add}if D} D +/IM {II /ty TY D /xs XS D /ys YS D /ya YA D /yb YB D /ma MA D /mb MB D /k K D + /ec EC D /BP f D /CI 0 D WB TL L1 xs add dup XO add MR add W gt + {pop /ma ma Fl{3 add}if D NL /YA ma D /YB mb D /YS ys D /L1 xs D} + {/L1 E D ma YA gt{/YA ma D}if mb YB gt{/YB mb D}if}ie /TB f D + OU{CP E pop YS sub LE neg lt Fl not and PB not and{NP /YA ma D /YB mb D}if + /BP f D ty ST cvs ( ) join IX k get 0 lt{(\() join ec join (\) ) join}if + k ST cvs join ty 3 eq{AB ST cvs ( ) join E join}if + ty 4 eq{X ST cvs ( ) join Y ST cvs join ( ) join E join}if C1 E join + ( DI ) join FP 2 eq FP 1 eq AF and or{( FM ) join}if + ( Il Cp ) apa /C1 E D /EN f D}if /HM t D /T f D} D +/DI {II /Xc CP /Yc E D D /YN YW neg D /HM t D /CI 0 D /K2 IX K get D gsave + TY 4 eq{OX X IS mul add OY FY add YS sub Y IS mul sub} + {/FY YS D CP MB sub 2 copy /OY E D /OX E D}ie + translate K2 0 ge{/DP AZ K2 get D /BV BM K2 get D XS YS scale /N 0 D XW YW DP + [XW 0 0 YN 0 YW] {IP} FC K2 get 1 eq{image}{f 3 colorimage}ie} + {EX}ie grestore XS 0 R /Ms t D} D +/FM {gsave 0 Sg CP MB sub translate XS neg 0 M 0 YS RL XS 0 RL 0 YS neg RL + XS neg 0 RL stroke grestore} D +/NA {/AT E D /AL AL 1 add D AV AL AT put} D +/OA {AL 0 gt{/AL AL 1 sub D /AT AV AL get D}if} D +/D1 {/BR {CP E pop E BN Mb{CP E pop eq{0 YI R}if}{pop}ie} D + /Sn {OU{C1 E ST cvs join ( Ld ) join /C1 E D}{pop}ie} D} D +/D1 {/BR {BN} D /Sn {OU {C1 E ST cvs join ( Ld ) join /C1 E D} {pop} ie} D} D +/TC {/TF t D /ML 0 D HN{SW pop dup ML gt{/ML E D}{pop}ie}forall NP /RM RM not D + RC /OU Tc D Ep /PN 0 D Ms not TP and{Ip}if /W IW ML sub Ts sub D + /A0 0 D TH{/BR {( ) join BT} D /Sn {pop} D /Au () D}if} D +/TN {0 eq{E EA PF HF or not XR and{HN E get Xr}{pop}ie} + {OU{Tn 0 ge{() BN}if /Tn E D}{pop}ie WB}ie} D +/NT {OU LB not and Tn 0 ge and{PL 0 eq{Ms not{CS CF FS}if CP dup + /y E YA sub D W 9 sub CS -1.8 mul XO L1 add 2 add{y M (.) show}for + HN Tn get dup SW pop IW E sub y M show CP BB M}if /Tn -1 D}if} D +/Ld {/DN E D HN DN Pn put [/View [/XYZ -4 Fl{PS}{CP YA add US E pop}ie null] + /Dest DN ST cvs cvn /DEST pdfmark} D +/C {ND 1 eq{1 sub}if TI mul /XO E D NL Nf not{pop()}if 0 3 -1 roll 1 A} D +/OP {BP not{NP}if PN 2 mod 0 eq{/Ms t D NP}if}D +/Ep {Xp PN 2 mod 0 eq and OU and{/Pn (-) D showpage /PM 1 D LA}if}D +/Dg [73 86 88 76 67 68 77] D +/Rd [0 [1 1 0][2 1 0][3 1 0][2 1 1][1 1 1][2 2 1][3 3 1][4 4 1][2 1 2]] D +/Ns {/m E D /c E 32 mul D /j m 1000 idiv D /p j 12 add string D + c 96 le m 0 gt and{c 32 le {/i 0 D /d 77 D /l 100 D /m m j 1000 mul sub D + j -1 1 {pop p i d c add put /i i 1 add D}for + 4 -2 0 {/j E D /n m l idiv D /m m n l mul sub D /d Dg j get D + n 0 gt {/x Rd n get D x 0 get -1 1 {pop p i d c add put /i i 1 add D}for + p i x 1 get sub Dg x 2 get j add get c add put}if /l l 10 idiv D + }for p 0 i GI} + {/i ST length 1 sub D m {1 sub dup 0 ge{dup 26 mod c add 1 add + ST i 3 -1 roll put 26 idiv dup 0 eq{pop exit}if}if /i i 1 sub D}loop + ST i ST length i sub GI}ie} + {m p cvs}ie} D +/US {matrix currentmatrix matrix defaultmatrix matrix invertmatrix + matrix concatmatrix transform} D +/GB {Gb{US}if}D +/Tl {/Rn E D Xc CP pop ne{ + [/Rect [Xc 1 sub Yc cS 0.25 mul sub GB CP E 1 add E cS 0.85 mul add GB] + /Subtype /Link /Border [0 0 Cf Lc and LX and AU or{0}{1}ie] Rn type + /nametype eq {/Dest Rn}{/Action [/Subtype /URI /URI Rn] Cd}ie + /ANN pdfmark}if} D +/Il {/Rn E D [/Rect [Xc Yc GB Xc XS add Yc YS add GB] /Subtype /Link + /Border [0 0 0] Rn type /nametype eq{/Dest Rn} + {/Action [/Subtype /URI /URI Rn] Cd}ie /ANN pdfmark} D +/XP {[{/Z Bz 2 div D Z 0 R Z Z RL Z neg Z RL Z neg Z neg RL Z Z neg RL + Fi cH 1 eq and{fill}if} {Bz 0 RL 0 Bz RL Bz neg 0 RL 0 Bz neg RL + Fi cH 1 eq and{fill}if} {0 -5 R Bz 0 RL 0 21 RL Bz neg 0 RL 0 -21 RL}]} D +/MS {/Sm E D WB}D +/O {BN()0 Sm BX} D +/BX {/Bt E D Bt 2 lt{/Ch E D CS 0.8 mul}{11 mul}ie W XO sub MR sub + 2 copy gt{E}if pop /HZ E D Bt 2 eq{Fi not{pop()}if ( )E join /Ft E D TT + /PF t D /MW 1 D /Li 1 D /Fw Ft SW pop D Fw HZ gt{/HZ Fw 8 add D}if + HZ ST cvs( )join}{WB Ch ST cvs( )join}ie L1 HZ add XO add MR add W gt{NL}if + Bt 2 eq{Ft ES Fw neg HM{CS sub}if Pd}if Bt ST cvs join( Bx )join + Bt 2 eq HM and{CS Pd}if C1 E join /C1 E D /L1 L1 HZ add D /T f D + ( ) Pd /PF f D Bt 2 lt{YA CS .8 mul lt{/YA CS .8 mul D}if} + {YB 5 lt{/YB 5 D}if YA 21 lt{/YA 21 D}if}ie /CI 0 D} D +/Bx {dup 2 eq{E /Bz E D}{E /cH E D /Bz CS .8 mul D}ie + OU {gsave 0 Sg XP E get exec stroke grestore}{pop}ie Bz 0 R /Ms t D}D +/SD {FD 4 mul Dy add DZ NF newpath 0 0 M DX t charpath pathbbox + 3 -1 roll sub /DY E D E dup /X1 E D sub WM mul WX DY mul add WM DG mul E div + /DF E D /DR WX DF mul DY mul WM div 2 div D} d +/Sd {gsave 0 IL Di mul neg translate IL IW atan Di 0 eq{neg}if rotate + FD 4 mul Dy add DZ NF DR X1 sub DY 2 div neg M cD VC DX show grestore} d +/Pt {/tp t D Tp{NP /Pn (TP) D 0 Tt neg R Th BN NP Ep ET RC ZF}if /tp f D} D +/RC {/AI 0 D /LG 0 D /BC 0 D /UI 0 D /PF f D /Cc 0 D /cC 0 D /Dc 10 array D + /NR [0 1 9{pop 0}for] D /La Ds D /AR 10 array D /TR 10 array D /AV 30 array D + SI /AL -1 D /AT A0 D AT NA /OV 9 array D /Yo 0 D /Co 0 D /Io 0 D /Hy f D + /Ph f D /CL -1 D Ct Sc}D +/ZF {/FR [0 1 30{pop 0}for] D /SZ [0 1 30{pop 0}for] D /FO [0 1 30{pop 0}for] D + /SL 0 D /CF 0 D /FN 0 D 0 Ts SF}D +/QO [[(\234)(\233)(\253\240)(\232)(\273)(\253)][(')(`)(\253\240)(\231)(\273)(\253)]] D +/QC [[(\234)(\234)(\240\273)(\233)(\253)(\273)][(')(')(\240\273)(`)(\253)(\273)]] D +/Hf EF length 2 sub D +/Hz EZ Hf get D +/HS Ey Hf get D +/Fz EZ Hf 1 add get D +/Fs Ey Hf 1 add get D +/LE IL D +/Ps EZ 1 get D +/Fp EF 1 get D +/XO 0 D +/YI 0 D +/CI 0 D +/FP 0 D +/WW Ts 7 mul D +/Mf 0 D +/YA 0 D +/YB 0 D +/Cs Ts D +/GS Ts D +/F0 0 D +/NS 0 D +/NB 0 D +/N 0 D +/C0 [] D +/C1 () D +/Lo 0 D +/L1 0 D +/LM 0 D +/PH 0 D +/EC 0 D +/Lh 0 D +/LT 0 D +/CH 1 string D +/ST 16 string D +/CA 9 array D +/HC (\255) D +/HM f D +/PF f D +/EN f D +/TB f D +/UF f D +/sF f D +/AE f D +/AF f D +/BP t D +/CD f D +/PA t D +/GL f D +/T t D +/HF f D +/AH f D +/SA f D +/PB f D +/f1 f D +/mF f D +/OX 0 D +/OY 0 D +/FY 0 D +/EO 0 D +/FB 0 D +/PL 0 D +/Bw 0 D +/PD -1 D +/TP f D +/tp f D +/TH t D +/Ty 4 D +/Tn -1 D +/Fl t D +/LB t D +/PM 1 D +/Ms f D +/Ba f D +/Bb f D +/Hl 3 D +/hl 6 D +/Hv 6 D +/Hs f D +/HI 0 D +/hi 0 D +/PO t D +/TE f D +/LF t D +/BO 0 D +/Sm 1 D +/Bf 3 D +/A1 0 D +/A2 0 D +/Ds 1 D +/QL -1 D +/Cb Db D +/Ct Dt D +/Cl Dl D +/AX [541] D +/AY [291] D +/IX [0] D +/IT [0] D +/AZ [8] D +/WS [541] D +/FC [3] D +/NI 0 D +/BM 1 array D +SB +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffcfdffe1edfb +c9e0f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c7def8d9e9fa +f8fbfeffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffe4effc +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8dceafbffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +d2e4fac5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c7def8ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffd0e3f9c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffd0e3f9 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +d0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf88495a77482928798abc5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf88b9caf +b5cbe4c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf894a6baacc1d8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +8393a57482928a9baec5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf88ea0b3626e7c2e343ac5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf86c7a898fa1b4c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +3d454d9fb3c9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8525c688b9cafc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf88d9eb15f6a77333a41c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c4dcf7afc4dcb9d0e9c5ddf8c5ddf8c5ddf896a9bd2e343ac5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8b3c9e1b3c9e1c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8bdd4eeb0c6dec5ddf8c5ddf8c5ddf8c5ddf8c5ddf8b2c8e0bad0ea +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8b9d0e9b4c9e2c5ddf8c5ddf8c4dcf7bed6f047505a768595bed6f0 +c1d8f3c5ddf8c5ddf8c3dbf6c1d8f3c5ddf8b2c8e0bfd6f1c5ddf8c3dbf6 +bed6f0bed6f0c4dcf7c5ddf8c5ddf8c5ddf8bfd6f1c5ddf8b6cce5c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8b7cde6c4dcf7c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c4dcf7c0d7f2c4dcf7b7cde6c5ddf8 +c5ddf8c5ddf8c4dcf7bed6f0bed6f0c3dbf6c5ddf8c5ddf8c3dbf6c1d9f4 +b4c9e2c5ddf8b8cfe8c4dcf7c5ddf8c3dbf6c1d8f3c1d9f4b9d0e9c5ddf8 +c5ddf8c5ddf8c5ddf891a2b6333a41c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf895a7bb131518252a2f2024288494a6c5ddf8c5ddf896a9bd2e343a +c5ddf8c5ddf8c5ddf8c5ddf82d33392d3339282d3325292eaec3dbc5ddf8 +c5ddf847505a2f343b373e463d454dc5ddf8c5ddf8a9bdd4282d33373e46 +282d337d8d9ec5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c2daf5363c44323940323940525c68c5ddf8a5b9d030363d1214171e2125 +30363d687583c5ddf8c5ddf87b8a9b4149522c3137212529262b30c5ddf8 +96a9bd30363d0a0b0c9aadc2c5ddf8c5ddf8c5ddf8050606454e57272c31 +22272bafc4dcc5ddf8b7cee7464e5821252925292e181b1fa6bbd2c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8a5b9d014171a252a2f22272b +48515bb8cfe8c5ddf8a8bcd430363d1012148393a5c5ddf8c5ddf87f8fa0 +1d202420242832383f292e34353b43c5ddf88b9cb021262a1e2125212529 +545f6ac1d9f4c5ddf8c5ddf891a2b6333a41c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c0d7f214171a8797aac5ddf8c4dcf7b3c9e1c5ddf8c5ddf896a9bd +2e343ac5ddf8c5ddf8c5ddf8c5ddf8b7cde6c5ddf8c5ddf85a65715c6874 +c5ddf8a6bbd21e2125c5ddf8c5ddf8bfd6f1c5ddf8c5ddf85c6874687583 +c5ddf8c5ddf8bfd6f1c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf88d9eb1373e46c5ddf8c5ddf8bfd6f1c5ddf8c5ddf8c5ddf84a535d +7a899ac5ddf8c5ddf8c5ddf8c5ddf87b8a9b0303039cafc4c5ddf8bcd3ed +c5ddf8c5ddf8c5ddf82a2f359aadc2c5ddf8c5ddf8c5ddf80000008b9cb0 +c5ddf8505a65778696c5ddf8798898454e57c4dcf7a0b4ca000000a6bbd2 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8a5b9d0000000a0b4ca +c5ddf847505a7d8c9dc5ddf8c5ddf8c5ddf84149528393a5c5ddf8c5ddf8 +7f8fa049525ca2b6cc0b0d0ec5ddf8212529c0d7f28b9cb0040505b5cbe4 +c1d9f430363d96a9bdc5ddf8c5ddf891a2b6333a41c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8a4b8cf0d0f11c2daf5c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +96a9bd2e343ac5ddf8c5ddf8c5ddf8c5ddf890a2b5505a652b30361b1e22 +4a535dc5ddf8c0d7f21e22263d454d768494bcd3edc5ddf8c5ddf88c9db1 +171a1e535d6992a3b7c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8b2c8e0171a1e454e577e8e9fc1d8f3c5ddf8c5ddf8c5ddf8 +4a535d7a899ac5ddf8c5ddf8c5ddf8c5ddf87b8a9b2b3036c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf82a2f359aadc2c5ddf8c5ddf8c5ddf8020202 +bfd6f1c5ddf8738190525c68c5ddf8424a537a899ac5ddf8c5ddf8101315 +a6bbd2c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8a5b9d00d0e10 +c5ddf8c5ddf879889847505ac5ddf8c5ddf8c5ddf84149528393a5c5ddf8 +c5ddf87f8fa05b6672b4c9e21d2024c5ddf82c3238abc0d78b9cb0252a2f +c5ddf8c5ddf85f6a77626e7bc5ddf8c5ddf891a2b6333a41c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8a4b8cf0d0f11c2daf5c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf897a9be2d3339c5ddf8c5ddf8c5ddf8b9d0e916191ca0b4cac4dcf7 +69768547505ac5ddf8c5ddf8c2daf58a9bae1e222621262ac5ddf8c5ddf8 +c5ddf8b4cae36774820506066c7988c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8bfd6f17f8fa01416193b424ac5ddf8c5ddf8 +c5ddf84a535d7a899ac5ddf8c5ddf8c5ddf8c5ddf87b8a9b49525cc5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf82a2f359aadc2c5ddf8c5ddf8c5ddf8 +060607c5ddf8c5ddf8748292505a65c5ddf849525c758393c5ddf8c4dcf7 +0c0d0fa6bbd2c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8a5b9d0 +0c0d0fc5ddf8c5ddf8788797454e57c5ddf8c5ddf8c5ddf84149528393a5 +c5ddf8c5ddf87f8fa05e6976b7cde6202428c5ddf82f343ba8bcd48b9cb0 +252a2fc5ddf8c5ddf85f6a775f6a77c5ddf8c5ddf892a4b8323940c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c0d7f214171a8797aac5ddf8c4dcf7b4c9e2 +c5ddf8c5ddf8bad1eb131518bdd4eec5ddf8c5ddf89cafc4272c31c5ddf8 +bed6f02a2f3547505ac5ddf8bad1ebc1d8f3c5ddf8b4c9e20e1012c0d7f2 +c5ddf8b6cce5c5ddf8c5ddf86c7988505a65c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8b7cee7c3dbf6c5ddf89cafc51f2327c5ddf8 +c5ddf8c5ddf86673815f6b78c5ddf8c5ddf8c5ddf8c5ddf87b8a9b49525c +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf82a2f359aadc2c5ddf8c5ddf8 +c5ddf8060607c5ddf8c5ddf8748292505a65c5ddf8808fa1394047bed6f0 +90a2b5000000a6bbd2c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +a5b9d00000009db0c6c4dcf7454e577b8a9bc5ddf8c5ddf8c5ddf8414952 +8393a5c5ddf8c5ddf87f8fa05e6976b7cde6202428c5ddf82f343ba8bcd4 +8b9cb0030404b2c8e0c1d8f32f343b95a7bbc5ddf8c5ddf8b7cee715181b +bed6f0c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffd0e3f9c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf895a8bc171a1d262b3022272b +8495a7c5ddf8c5ddf8c5ddf86976851d202431373ec5ddf8c5ddf83d444c +2a2f351b1e2247505a47505ac5ddf899acc1181b1f394047282d326d7b8a +c5ddf8c5ddf856616c24282d363d452b3036a5b9d0c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf88393a51b1e22394047272c318191a3 +c5ddf8c5ddf8c5ddf8a9bed5323940272c3164707ec5ddf8c5ddf87b8a9b +49525cc5ddf8c5ddf8c5ddf8c5ddf856616c2a2f35090a0b2125292a2f35 +a8bcd4c5ddf8060607c5ddf8c5ddf8748292505a65c5ddf8bdd4ee5f6a77 +1d20243e464e1d2024abc0d7c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8a5b9d014171a22272b21252948515bb8cfe8c5ddf86875832a2f35 +0d0f111c20232a2f3596a9bd7f8fa05e6976b7cde6202428c5ddf82f343b +a8bcd48b9cb021262a1b1e22202428545f6ac1d8f3c5ddf8c5ddf8c5ddf8 +6572801c2023353b43c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffd0e3f9 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8b0c6de +bcd3edc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8b7cde6c1d9f4c5ddf8c5ddf8c5ddf8c5ddf8c1d8f3adc3dac3dbf6 +c5ddf8c5ddf8c5ddf8c5ddf8b9d0e9b4c9e2c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8bed6f0aec3dbc5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8bcd3ed1b1f23c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8a5b9d01f2327c4dcf7b7cde6c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf88b9cb0394047c1d9f4b9d0e9c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +d0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +b4c9e240485165717f31373e697584c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8a5b9d01f2327c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf88b9cb0394047c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c4dcf79cafc48494a6b6cce5c5ddf8c5ddf87e8e9f6e7b8b6e7b8b +6e7b8b6e7b8b8a9baec5ddf8bcd3ed96a9bdc5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8b4cae39eb1c7c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c4dcf78494a658626eb4c9e2c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf89eb1c721262a97a9bec1d8f3c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf86f7c8c55606bc5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf86875835b6672c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffd0e3f9c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8bdd4ee3940477a8899c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffd0e3f9 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8b4c9e2131518212529bcd3ed +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +d0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c3dbf63f474f +738190c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +6976855a6571c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8707e8d545e6ac5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8a2b6cc1d20248b9cafbfd6f1c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf892a3b7697685b7cde6c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffff9fcfee6f0fce2eefbe2eefbe2eefbe2eefbe2eefbe2eefb +e2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefb +e2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefb +e2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefb +e2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefb +e2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefb +e2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefb +e2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefb +e2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefb +e2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefb +e2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefb +e2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefb +e2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefb +e2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefb +e2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe2eefb +e2eefbe2eefbe2eefbe2eefbe2eefbe2eefbe8f2fcfdfeffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffbfcfed6e7fac6ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8cae0f9e6f0fc +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffe1eefbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8f3f8feffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffd0e3f9c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c0d7f29fb2c8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +95a8bc47505ac5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffcfdffc9dff8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8ddebfbffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffd0e3f9 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8aec3db16191cc5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8b0c6de8fa1b4c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffeff6fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8cae0f9ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +d0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8b6cce57482924b545f636f7dbad0eac5ddf87a899a515b670a0b0c +5b67735b6773b7cde6c5ddf8c5ddf86a7786a8bcd465717f505a65a6bbd2 +c5ddf8707e8d5b6773798898c5ddf8c5ddf8c5ddf891a2b690a2b5697685 +5c6874acc1d8c5ddf8c5ddf8c1d9f478879758626e92a4b88494a6c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf84e57625e69769db0c67a899ab0c6dec5ddf8a2b6cc8292a4 +10131593a5b993a5b9bed6f0c5ddf8c5ddf81a1d2132383f6673818191a3 +93a5b9c5ddf89db0c66b7887363c44c5ddf8c5ddf8c5ddf8636f7d191c20 +7988986572802c3238c5ddf8c5ddf83940474e58637f8fa01c2023434b54 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf830363d707e8dbed5efc5ddf8c5ddf8c5ddf8c5ddf8 +aec3db16191cc5ddf8c5ddf8c5ddf8c5ddf8c5ddf81a1d216f7c8cc5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf88ea0b3363c44c5ddf8c5ddf8c5ddf8636f7d +48515bc5ddf8c2daf50b0d0ebdd4eebcd3ed0a0c0dc0d7f2c5ddf85f6a77 +434b54c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8a3b7ce434c550c0d0f454e57b9d0e9c5ddf8 +c5ddf8aec3db16191cc5ddf8c5ddf8c5ddf8c5ddf8c5ddf81a1d21a3b7ce +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf88ea0b3363c44c5ddf8c5ddf8c5ddf8 +636f7d677482c5ddf8c5ddf8131518b1c7df9cafc41e2226c5ddf8c5ddf8 +7d8c9d434b54c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8a6bbd22024287c8b9c +c5ddf8c5ddf8b4cae3101315c5ddf8c5ddf8c5ddf8c5ddf8c5ddf81a1d21 +aabfd6c5ddf8c5ddf8c5ddf8c5ddf8c5ddf88ea0b3363c44c5ddf8c5ddf8 +c5ddf8636f7d677482c5ddf8c5ddf8131518b1c7dfc0d7f20b0d0ebed5ef +c5ddf8596470434b54c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffeff5fdc5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8616d7a92a3b790a2b51e2226 +a6bbd2c5ddf8c5ddf8c5ddf823272c6774828d9eb1bed5efc5ddf8c5ddf8 +1a1d21aabfd6c5ddf8c5ddf8c5ddf8b9d0e98d9eb1667381262b308d9eb1 +9fb2c8c5ddf8636f7d677482c5ddf8c5ddf8131518b1c7dfc5ddf84a535d +3941486c7988202428434b54c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffeff5fd +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf87e8e9f4f59645b6672 +95a8bcc5ddf8c5ddf8c5ddf8c5ddf8b1c7df7a8899626e7bb7cee7c5ddf8 +c5ddf8707d8db7cee7c5ddf8c5ddf8c5ddf8b0c5dd626e7b626e7b626e7b +626e7b8190a2c5ddf894a6ba96a9bdc5ddf8c5ddf86c7988bbd2ecc5ddf8 +c5ddf891a2b6738190707d8d5a6571c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +eff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c8dff8ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8a3b7cebdd4eeb4c9e2343a4296a9bdc5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c8dff8ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffd0e3f9c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf87a899a282d33363c447d8d9ec3dbf6c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffd0e3f9 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +d0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +b4cae3a6bad1a6bad1c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8bbd2ecb6cce5 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8b4c9e2a6bad1a6bbd2c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c1d8f3b0c6dec5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8b8cfe8c2daf5c5ddf8c5ddf8c4dcf7b6cce5 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf88595a84f5964010101c1d8f3c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8758393 +4f5964c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf88292a44f5964000000 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8748292b9d0e9c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8697584c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8a6bad11e2226c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8bdd4ee24282dc1d8f3c5ddf8c5ddf8c5ddf8 +2b3036b1c7dfc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8030404c1d8f3c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +bbd2ecb6cce5c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c4dcf7 +000000c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8191c20abc0d7c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8000000c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c1d8f3b0c6de +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf86c798865717fc5ddf8c5ddf8c5ddf8 +c5ddf87a899a57616dc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c0d7f25b677321262a +202428768494c5ddf8c5ddf8c5ddf8030404c1d8f3c5ddf8c5ddf8c5ddf8 +7a899a262b301e21253d454dadc2d9c5ddf8c5ddf893a5b93c434b23272c +373e46bfd6f1c5ddf8c5ddf86673812c323824282d6d7b8ac5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf89cafc44c5560444d562c3137 +8494a6c5ddf8c5ddf8bed5ef59647021262a4b545fa3b7cec5ddf8c5ddf8 +b3c9e13d444c8190a2262b302a2f35b2c8e0c5ddf875839330363d23272c +5b6773c5ddf8c5ddf8b1c7df3e464e1c20233d444cb0c5ddc5ddf8b3c9e1 +424a53626e7b22272b5c6874c2daf5c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf839414866738123272c606c79b7cee7c5ddf8c5ddf8 +343a422a2f35697685c5ddf8c5ddf8b6cce53d444c2c32384d5661434c55 +3e464ebad1ebc0d7f22f353c626e7b24282d6d7b8abed5efc5ddf8c5ddf8 +c4dcf7000000c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf88fa1b44b555f444d568190a2c4dcf7 +c5ddf8c5ddf8c5ddf8c5ddf8c1d9f42d333964707e24282d6c7988bdd4ee +c5ddf8c4dcf7657280212529272c318696a9c5ddf8c5ddf8b7cee7505a65 +262b30292e3492a4b8c5ddf87d8d9e2a2f3505060625292e2a2f358a9bae +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8acc1d849525c +25292e2d3339a3b7cec5ddf86976852a2f350000002a2f352a2f359eb1c7 +c5ddf8c5ddf8515b668696a93941481b1f238190a2c5ddf85b66722a2f35 +434b54c5ddf8c5ddf8c5ddf88b9caf606c79434b54272c317d8c9dc5ddf8 +c5ddf8b0c5dd525c6824282d697584515b67c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8171a1dafc4dcc5ddf8c5ddf8 +c5ddf8c5ddf8bfd6f10c0d0fc0d7f2c5ddf8c5ddf8c5ddf8c5ddf88495a7 +899aadc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffeff5fdc5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf85c6874373e46 +a8bcd4bdd4ee92a3b7c5ddf8c5ddf8c5ddf8030404c1d8f3c5ddf8c5ddf8 +c5ddf898aabfb7cee7c1d9f46c7988363d45c5ddf8c5ddf82125299fb3c9 +c5ddf8a3b7cec1d9f4c5ddf89cafc52b3036bfd6f1c2daf5a3b6cdc5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf890a2b50000008b9caf +abc0d721262a9fb2c8c5ddf8545e6a434b54b5cbe496a9bd24282dc5ddf8 +c5ddf8aec3db0607084a545eaabfd6a4b8cfb7cde6b0c5dd1b1e22bbd2ec +c4dcf7a1b5cbc5ddf8c5ddf83a414955606bb7cee75b6773373e46c5ddf8 +adc3da0000007a8899b7cde6252a2f9baec3c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf81214174b545fb6cce556616c57616dc5ddf8 +c5ddf8c5ddf87583934f5964c5ddf8c5ddf8b2c8e00e1012b7cde60a0b0c +8ea0b3464e5896a9bdbed6f0000000616d7ab5cbe4424a53707e8dc5ddf8 +c5ddf8c4dcf7000000c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8454e580c0d0f0000000000000b0c0e +2d3238c1d9f4c5ddf8c5ddf8c5ddf8c1d8f30000005e6976b6cce5434c55 +6d7b8ac5ddf88495a71f2327a9bdd496a9bd0d0f11adc3dac5ddf8697584 +596470c4dcf7bad0eaabc0d7c5ddf8c5ddf8c5ddf8191c20abc0d7c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf84f5964 +72808fc5ddf8b3c9e1b2c8e0c5ddf8c5ddf8c5ddf8000000c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf830363d282d328ea0b3b7cee7a3b6cdc5ddf8c5ddf8 +a6bad11e2226c5ddf8c5ddf8c5ddf87a899a0d0e109fb3c9a8bcd40f1113 +c2daf5c5ddf83c434b677482b4cae33941482c3137c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8b7cde6090a0bc5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf81e2125a1b5cbc5ddf8c5ddf8c5ddf8c5ddf8 +3b424a454e57c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffeff5fd +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8191c20 +8fa1b4c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8030404c1d8f3c5ddf8 +c5ddf8c5ddf8bed5ef8ea0b35f6a774a535d191c20c5ddf8c5ddf8292e34 +545f6a98aabfc4dcf7c5ddf8c5ddf8a5b9d0121417768494adc3dac5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf890a2b5171a1d +c5ddf8c5ddf85a6571697685c5ddf8101315707e8d8b9caf899aad1c2023 +a9bed5c5ddf8aec3db000000aec3dbc5ddf8c5ddf8c5ddf8b7cde60d0f11 +6f7c8ca7bcd3c5ddf8c5ddf8c5ddf8060607a7bcd3c5ddf8adc2d9030303 +c1d9f4adc3da0d0e10c3dbf6c5ddf856616c6e7b8bc5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf812141795a7bbc5ddf8a2b6cc21262a +c5ddf8c5ddf8c5ddf87583934f5964c5ddf8c5ddf8b2c8e024282dc5ddf8 +1e2125acc1d85d68757d8c9dbed6f0000000afc4dcc5ddf88899ac3c434b +c5ddf8c5ddf8c4dcf7000000c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf88595a80c0d0f000000000000000000 +000000090a0c63707dc5ddf8c5ddf8c5ddf8c1d8f3000000acc1d8c5ddf8 +8b9cb0394047c5ddf8505a655c6874c5ddf8c5ddf832383f7a899ac5ddf8 +72808f2a2f358495a7b8cfe8c5ddf8c5ddf8c5ddf8c5ddf8191c20abc0d7 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +58636f3940478b9cb0bdd4eec5ddf8c5ddf8c5ddf8c5ddf8000000c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf830363d677482c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8a6bad11e2226c5ddf8c5ddf8c5ddf87a899a3d454dc5ddf8c5ddf8 +23272ca2b6ccc1d8f30a0c0db9d0e9c5ddf88190a22c3137c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf897a9be23272cc5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8383f468191a3c5ddf8c5ddf8c5ddf8 +c5ddf8b0c5ddb1c7dfc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +eff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +0d0e10a8bcd4c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8030404c1d8f3 +c5ddf8c5ddf8c5ddf8454e57515b6790a2b5808fa114171ac5ddf8c5ddf8 +b8cfe86c7a89171a1d212529bad1ebc5ddf8c5ddf89fb3c94e5863040505 +5f6a77c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf890a2b5 +282d32c5ddf8c5ddf86b7887515b66c5ddf80506065f6a77687583687583 +687583a9bed5c5ddf8aec3db14171ac5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +a9bdd458636f0607084a535dc5ddf8c0d7f2000000bad1ebc5ddf8bed5ef +000000bad0eaadc3da1d2024c5ddf8c5ddf85d6875677482c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8121417a6bad1c5ddf8b3c9e1 +0a0b0cc4dcf7c5ddf8c5ddf87583934f5964c5ddf8c5ddf8b2c8e02b3036 +c5ddf824282db3c9e1626e7b758393bed6f0000000bed6f0c5ddf899acc1 +22272bc5ddf8c5ddf8c4dcf7000000c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c8dff8ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffff9f9f9e7e7e7 +e6e6e6e5e5e5e4e4e4e2e2e2e1e1e1e0e0e0dfdfdfdedededddddddbdbdb +dadadad9d9d9d8d8d8d7d7d7d5d5d5d4d4d4d3d3d3d2d2d2d1d1d1d0d0d0 +cecececdcdcdcccccccbcbcbcacacac9c9c9c7c7c7a1b0c198aabf97a9be +96a9bd95a7bb94a6ba93a5b992a4b892a3b72b3036000000000000000000 +0000000000000000001f2327c5ddf8c5ddf8c5ddf8c1d8f3000000bcd3ed +c5ddf89cafc41f2327c5ddf8464e58707e8dc5ddf8c5ddf8444d566f7c8c +c5ddf8c4dcf7899aad363d450a0b0c8a9baec5ddf8c5ddf8c5ddf8191c20 +abc0d7c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c1d8f37e8e9f2b30361013159cafc5c5ddf8c5ddf8c5ddf8000000 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf830363d92a3b7c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8a6bad11e2226c5ddf8c5ddf8c5ddf87a899a505a65c5ddf8 +c5ddf82a2f359aadc2b7cde608090ac2daf5c5ddf88fa1b42c3137c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8a3b7ce181b1f +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf82d33398ea0b3c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf82f353c72808fc5ddf8c5ddf8c4dcf7c5ddf8c5ddf8c5ddf81e2226 +abc0d7c5ddf8c5ddf8c2daf50a0c0dbdd4eec5ddf8717f8e14171ac5ddf8 +c5ddf8c5ddf8c5ddf8b8cfe81f232791a2b6c5ddf8c5ddf8c5ddf8c5ddf8 +8e9fb216191cc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +90a2b5060607c1d9f4c5ddf8464e588393a5c5ddf8272c317e8e9fc5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8aec3db16191cc5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8a2b6cc060708c0d7f2c5ddf8171a1e8fa1b4c5ddf8 +96a9bd141619c5ddf8adc3da1d2024c5ddf8c5ddf85d6875677482c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf81214178190a2c5ddf8 +8e9fb23b424ac5ddf8c5ddf8c5ddf87583934f5964c5ddf8c5ddf8b2c8e0 +2b3036c5ddf824282db3c9e1626e7b758393bed6f00000009aadc2c5ddf8 +748292545f6ac5ddf8c5ddf8c5ddf8191c20b0c5ddc5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c8dff8ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffc0c0c0 +1a1a1a4141414242424343434444444545454747474848484949494a4a4a +4b4b4b4c4c4c4e4e4e4f4f4f505050515151525252545454555555565656 +5757575858585a5a5a5b5b5b5c5c5c5d5d5d5e5e5e5f5f5f4e565e4b545f +4c55604d56614e57624f5964505a65515b66515b67131518000000000000 +00000000000000000000000016191cc5ddf8c5ddf8c5ddf8c1d8f3000000 +97a9bec5ddf8768595515b67c5ddf8626e7b444d56c5ddf8c5ddf81b1f23 +8ea0b3c5ddf8c5ddf8c5ddf8c5ddf85b667249525cc5ddf8c5ddf8c5ddf8 +282d339db0c6c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c2daf5434c55626e7cc5ddf8c5ddf8c5ddf8 +0f1113b7cde6c5ddf8c5ddf8c5ddf8c5ddf830363d94a6bac5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8a6bad11e2226c5ddf8c5ddf8c5ddf87a899a505a65 +c5ddf8c5ddf82a2f359aadc2c5ddf8282d329cafc5c5ddf8636f7d2c3137 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c1d8f3 +050606c0d7f2c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8111316afc4dcc5ddf8 +c5ddf8c5ddf8c5ddf895a8bc8ea0b3c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf89aadc2131518474f595c6874515b67c5ddf8c5ddf8c5ddf8 +6c7a8925292e4f5964b4c9e2c5ddf8404851404851525c6830363d14171a +c5ddf8c2daf5292e3465717f5964701c2023c1d8f3c5ddf87e8e9f454e57 +6a7786363d455d6875c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf890a2b51214172c313748515b25292eb7cee7c5ddf894a6ba16191c +4b545f5f6a77272c31b7cee7c5ddf8aec3db16191cc5ddf8c5ddf8c5ddf8 +c5ddf892a4b83d454d6a7786424a53464e58c5ddf8c5ddf8788797101315 +545f6a131518768494c5ddf8adc3da1d2024c5ddf8c5ddf85d6875677482 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf812141723272c +545e6a1c20238797aac5ddf8a1b5cb5b6773363d4525292e5b67738a9bae +b2c8e02b3036c5ddf824282db3c9e1626e7b758393bed6f0030303282d32 +525c681c202399acc1c5ddf8c5ddf8c5ddf8687583262b304f5964b7cde6 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +c1c1c1676767ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffd0e3f9 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8667281060708 +00000000000000000000000002030349525cc5ddf8c5ddf8c5ddf8c1d8f3 +010101282d33535d691b1f2398aabfc5ddf8b1c7df14171a454e5730363d +2e343ac4dcf7c5ddf856616c545f6a6774822125298ea0b3c5ddf8c5ddf8 +c5ddf86c7a89252a2f5a65719db0c6c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8434c555b6672636f7d191c20a6bad1c5ddf8c5ddf8 +c5ddf8545e6a2e343a5b6773aabfd6c5ddf8c5ddf830363d94a6bac5ddf8 +c5ddf8c5ddf8bbd2ec5b67734e57620d0f115b6773707d8dc5ddf87a899a +505a65c5ddf8c5ddf82a2f359aadc2c5ddf88393a51d20243f474f2f343b +2c3137c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8333a4196a9bdc5ddf8c5ddf8c5ddf8c5ddf8a9bed51e2226c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8454e57373e46c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8b5cbe48696a98495a7bad0eac5ddf8c5ddf8 +c5ddf8c5ddf8b0c6de93a5b9bed5efc5ddf8c4dcf793a5b98c9db1bad0ea +98abc0c5ddf8c5ddf8a4b8cf7e8e9f93a5b9c1d8f3c5ddf8c5ddf8bed6f0 +92a3b77d8c9da8bcd4c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf890a2b5343a42a1b5cb8d9eb1c4dcf7c5ddf8c5ddf8c5ddf8 +b4cae38595a88191a3adc3dac5ddf8c5ddf8bfd6f199acc1c5ddf8c5ddf8 +c5ddf8c5ddf8c1d9f497a9be7c8b9ca1b5cbc5ddf8c5ddf8c5ddf8c5ddf8 +9fb3c97d8c9d9fb2c8c5ddf8c5ddf8bfd6f19baec3c5ddf8c5ddf8abc0d7 +adc3dac5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8121417 +a3b6cd8494a6b8cfe8c5ddf8c5ddf8b4cae393a5b993a5b993a5b993a5b9 +a9bdd4c0d7f29fb2c8c5ddf89cafc5c1d8f3acc1d8b1c7dfbed6f0060607 +afc4dc8595a8bed5efc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8b0c5dd93a5b9 +bfd6f1c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffc2c2c2656565ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +d0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8bfd6f1 +1c2024040505000000000000020202121416b6cce5c5ddf8c5ddf8c5ddf8 +c1d8f3030404b0c5dd8495a7bdd4eec5ddf8c5ddf8c5ddf8b5cbe48292a4 +8a9baec0d7f2c5ddf8c5ddf8b6cce58899ac8292a4b4cae3c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8b6cce594a6bab2c8e0c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8b0c6de8494a68798abbad0eac5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8b0c6de94a6bab8cfe8c5ddf8c5ddf89fb3c9b9d0e9 +c5ddf8c5ddf8c5ddf8c0d7f293a5b993a5b993a5b993a5b99db0c6c5ddf8 +b2c8e0a8bcd4c5ddf8c5ddf89eb1c7bad1ebc5ddf8c5ddf8bdd4eea0b4ca +8292a4515b67c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf893a5b9424a53c5ddf8c5ddf8c5ddf8c5ddf856616c7e8e9f +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf81f23278292a4c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf890a2b5343a42c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +121417b2c8e0c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8bed6f0 +060607c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffc4c4c4646464ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8bad0ea49525c131618111416404851b3c9e1c5ddf8c5ddf8c5ddf8 +c5ddf8c1d8f3030404c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf890a2b58899ac +8b9cb02a2f3590a2b5c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf857616dbed5efc5ddf8c5ddf8c4dcf7535d69 +c2daf5c5ddf8c5ddf8c5ddf8c5ddf8bad1eb3f474fc4dcf7c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8bfd6f1bbd2ec +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8a9bdd4788797c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf895a7bb6e7b8b6e7b8b6e7b8b6e7b8b738291c5ddf8 +c5ddf8657280bbd2ecc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c1d9f45f6b78c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffc5c5c5636363ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c3dbf65e6976c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf895a7bb6e7b8b +6e7b8b6e7b8b6e7b8b738291c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8a2b6cc +5c68745e6976a6bad1c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8434b542e343a +92a3b7c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffc6c6c6616161ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8b3c9e1141619 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffc8c8c8606060ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffeff5fdc5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf89eb1c7 +262b30c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffc9c9c95f5f5fffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8bdd4ee8899acb4c9e2c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffeff5fd +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +8d9eb1323940c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffcacaca5d5d5dffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8bcd3ed677482141619a9bdd4c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +eff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +7482922c31377d8d9ec5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c8dff8ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffcbcbcb5c5c5c +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8545f6a768595c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf88393a530363d717f8ec5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c8dff8ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffcdcdcd +5b5b5bffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffd0e3f9c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf85f6a776c7988c5ddf8 +c5ddf8c5ddf8c5ddf8bed5ef363d459baec3c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf88fa1b42f353cc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +cecece5a5a5affffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffd0e3f9 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf87482924b545f +c5ddf8c5ddf8c5ddf8c5ddf8bcd3ed11131690a2b5c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf89eb1c7262b30c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffcfcfcf585858ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +d0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8b6cce5 +282d322c3137b2c8e0c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8b6cce5121417c4dcf7c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffd1d1d1575757ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +8e9fb2272c319fb3c9c2daf5c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf84f59642d33398c9db1 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffd2d2d2565656ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8636f7d64707ec5ddf8c5ddf8c5ddf8c5ddf8c5ddf84b545f95a7bb +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8b5cbe4bcd3edc5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8bed5efb4cae3c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffd3d3d3545454ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf85e69766c7a89c5ddf8c5ddf8c5ddf8c5ddf8bfd6f1000000 +8797aac5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8474f597d8d9ec5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf88a9bae404851c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffd4d4d4535353ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8bbd2ec333a4191a2b6c5ddf8c5ddf8c5ddf8c5ddf893a5b9 +1e2125c2daf5c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffeff5fdc5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8b5cbe4bcd3edc5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf88a9bae404851c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffd6d6d6525252ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8b4cae33940475f6b78bfd6f1c5ddf8c5ddf8c5ddf8c5ddf8 +95a8bc95a7bbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffeff5fd +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8b2c8e0394148c5ddf8c5ddf8c5ddf83f474facc1d8c5ddf88a9bae +282d32202428626e7cc4dcf7c5ddf8aabfd62a2f352a2f358e9fb2c5ddf8 +c5ddf8c5ddf8a9bdd44a535d262b3057616d404851c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffd7d7d7505050ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +eff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8262b309baec3c5ddf8a3b6cd1e2226c5ddf8b1c7df +0a0c0d92a3b7abc0d7262b307f8fa0c5ddf8c5ddf8c5ddf8474f597d8d9e +c5ddf8c5ddf8c5ddf8282d327f8fa0afc4dc2a2f35404851c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c8dff8ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffd8d8d84f4f4f +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf86c7a8957616dc5ddf85f6a7765717fc5ddf8 +8393a5292e34c5ddf8c5ddf865717f47505ac5ddf8c5ddf8c5ddf8474f59 +7d8d9ec5ddf8c5ddf8b6cce50d0e10c4dcf7c5ddf86a7786404851c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c8dff8ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffdadada +4e4e4effffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffd0e3f9c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8b1c7df16191cc3dbf61b1f23abc0d7 +c5ddf87988983d454dc5ddf8c5ddf87786963c434bc5ddf8c5ddf8c5ddf8 +474f597d8d9ec5ddf8c5ddf8a2b6cc1b1f23c5ddf8c5ddf87d8c9d404851 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +dbdbdb4d4d4dffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffd0e3f9 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8343a426a77862c3238 +c5ddf8c5ddf895a7bb121417c5ddf8c5ddf84e58635b6773c5ddf8c5ddf8 +c5ddf8474f597d8d9ec5ddf8c5ddf8c4dcf7101315bad1ebc5ddf8545e6a +404851c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffdcdcdc4b4b4bffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +d0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf87b8a9b050606 +738291c5ddf8c5ddf8c5ddf83239402c313748515b141619adc3dac5ddf8 +8899ac5b67732125293a41495b6773a3b6cdc5ddf8616d7a25292e4c5560 +1c2023404851c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffdedede4a4a4affffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8bed5ef +93a5b9bbd2ecc5ddf8c5ddf8c5ddf8c1d8f38b9caf8191a3b4c9e2c5ddf8 +c5ddf8a9bdd493a5b993a5b993a5b993a5b9b4cae3c5ddf8c5ddf8a9bed5 +8899acb2c8e0a4b8cfc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffdfdfdf494949ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffe0e0e0474747ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8bad0eaaec3dbc5ddf8c5ddf8c5ddf8bed6f0b3c9e1 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c4dcf7b6cce5c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8b7cee7bad0eac5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +b8cfe8c1d9f4c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffe1e1e1464646ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffd1e4f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c6ddf8ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffeff5fdc5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf84e5762282d32414952c5ddf8c5ddf8c5ddf891a2b6 +333a41c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8697685 +c4dcf7c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf88595a857616dc5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8a2b6cc8b9cb0 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf85b6672697685c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf86e7b8b6e7b8bc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffff +fffffffffffffffffffffffffffffffffffff6f6f6f1f1f1ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffd7d7d7353535ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffe3effcc5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8d6e7faffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffeff5fd +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8bad0ea131518c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +bed6f0b3c9e1c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +020202c2daf5c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c4dcf7262b30abc0d7c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf87a899a +4a535dc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8b7cee7bad0eac5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8bad0ea1e2125bed6f0c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8 +ffffffffffffffffffffffffe7e7e7999999404040646464fcfcfcffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffc3c3c3151515ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffbfdffd6e7fac5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8d3e5faf4f8feffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +eff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8545e6a25292e0506062a2f35363c44c5ddf8c5ddf8 +4a545e2a2f35535d69c5ddf8c5ddf8c5ddf8c5ddf86774827d8d9e434c55 +1b1e226a7786c5ddf8adc2d94a535d25292e2c3238a2b6ccc5ddf86b7887 +2a2f350000002a2f352a2f359cafc5c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf82f353c74829223272c515b66bad0eac5ddf8a8bcd4 +363c441d20242b30368494a6c5ddf8a4b8cf424a53252a2f596470363c44 +4a545ec3dbf6c5ddf895a8bc32383f292e34768595c1d8f3c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf894a6ba31373ec5ddf8 +c5ddf8c5ddf8c5ddf88393a5363c4423272c49525cc5ddf8c5ddf82f343b +1a1d211012142a2f353e464ec5ddf8c5ddf8b1c7df3e464e7f8fa0252a2f +2a2f35b4c9e2bad1eb2a2f352a2f357d8d9ec5ddf8c5ddf8c5ddf8505a65 +7482922b30363d444ca6bad1c5ddf8c5ddf890a2b531373e363d455f6a77 +8a9baec5ddf8c5ddf8c5ddf848515b7d8c9dc5ddf8c5ddf8c5ddf8c5ddf8 +a7bcd3687583c3dbf6c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c8dff8ffffffd2d2d27c7c7c242424121212030303434343fcfcfcffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffc6c6c6131313 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffffffffafcfe +f6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafe +f6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafe +f6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafe +f6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafe +f6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafe +f6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafe +f6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafe +f6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafe +f6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafe +f6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafe +f6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafe +f6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafe +f6fafef6fafef6fafef6fafef6fafef6fafef6fafef8fbfeffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8a9bed51b1e22c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf891a2b6333a41c5ddf8c5ddf8c5ddf8c5ddf84d56611a1d21 +8292a4b9d0e99eb1c7c5ddf8515b67707d8dc5ddf8b4c9e2b1c7dfc5ddf8 +c5ddf8c5ddf8020202c2daf5c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf802020264707ebad0ea3a41498191a3c5ddf8 +adc3daa3b6cdc5ddf8a8bcd40a0b0cb1c7df9baec321262aaec3db000000 +a5b9d02f353cadc3daadc3da0d0e1092a4b8b8cfe84048518595a8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf86e7b8b515b66 +c5ddf8c5ddf8c5ddf8bdd4ee16191cb3c9e1c5ddf8a0b4cac5ddf8c5ddf8 +c5ddf87a899a4a535dc5ddf8c5ddf8c5ddf8c5ddf8acc1d80708094b545f +abc0d7a3b7ceb8cfe8c5ddf8c5ddf85b6672697685c5ddf8c5ddf8c5ddf8 +2f353c3f474fb7cde6626e7c535d69c5ddf8b5cbe41013159fb2c89cafc4 +0a0c0d768595c5ddf8c5ddf8c5ddf868758357616dc5ddf8c5ddf8c5ddf8 +c5ddf88595a8000000c1d8f3c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c1d8f3 +91a2b64b545d1717171313130303030000000808083a3a3af9f9f9ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffc9c9c9 +131313ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8a9bed51b1e22c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf891a2b6333a41c5ddf8c5ddf8c5ddf8c5ddf84d5661 +4a545ec5ddf8c5ddf8c5ddf8c5ddf85b6672373e468b9cafbdd4eec5ddf8 +c5ddf8c5ddf8c5ddf8020202c2daf5c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8020202b6cce5c5ddf8707e8d545f6a +c5ddf8c5ddf8a2b6cc6d7b8a55606b13151897a9be9baec33b424ac5ddf8 +08090ac1d9f4464e5893a5b972808f2b30368b9cb08a9bae5f6b7848515b +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf84e5863 +6b7887c5ddf8c5ddf8c5ddf8c1d9f4121417657280a0b4cac5ddf8c5ddf8 +c5ddf8c5ddf87a899a4a535dc5ddf8c5ddf8c5ddf8c5ddf8acc1d8000000 +b0c6dec5ddf8c5ddf8c5ddf8c5ddf8c5ddf85b6672697685c5ddf8c5ddf8 +c5ddf82f353c8899acc5ddf89fb2c8262b30c5ddf8808fa13f474fc5ddf8 +c5ddf8363c44768595c5ddf8c5ddf8c5ddf88292a4373e46c5ddf8c5ddf8 +c5ddf8c5ddf8bbd2eca6bad1c5ddf8c5ddf8c5ddf8b8cfe8667381282d32 +0a0b0c090a0b0000000000000000000000000404041e1e1e909090909090 +8b8b8b8686868282827d7d7d7878787373736e6e6e6969696464645f5f5f +5a5a5a5555555151514c4c4c4747474242423d3d3d3838383333332e2e2e +222222121212ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8a9bed51b1e22c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf891a2b6333a41c5ddf8c5ddf8c5ddf8c5ddf8 +4d5661768494c5ddf8c5ddf8c5ddf8c5ddf8c1d9f47f8fa02c3137101214 +9baec3c5ddf8c5ddf8c5ddf8020202c2daf5c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8050606c5ddf8c5ddf8768595 +4e5762c5ddf88d9eb1272c318292a499acc11e212592a3b79baec3424a53 +c5ddf8111316c5ddf84a545e8c9db16572802b3036687583687583687583 +7c8b9cc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +5b6773606c79c5ddf8c5ddf8c5ddf8c5ddf8b0c6de626e7b0d0e10333a41 +c5ddf8c5ddf8c5ddf87a899a4a535dc5ddf8c5ddf8c5ddf8c5ddf8acc1d8 +171a1dc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf85b6672697685c5ddf8 +c5ddf8c5ddf82f353c9baec3c5ddf8a5b9d01f2327c5ddf86d7b8a4e5863 +c5ddf8c5ddf8454e57768595c5ddf8c5ddf8c5ddf8778696444d56c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8bed6f072808f171a1d +0202030506060000000000000000000000000000000505051e1e1e8c8c8c +9696969b9b9ba0a0a0a5a5a5a9a9a9aeaeaeb3b3b3b8b8b8bdbdbdc2c2c2 +c6c6c6cbcbcbd0d0d0d5d5d5dadadadfdfdfe3e3e3e8e8e8edededf2f2f2 +f7f7f7e0e0e0444444ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8a9bed51b1e22 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf891a2b6333a41c5ddf8c5ddf8c5ddf8 +c5ddf84d5661778696c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c3dbf6 +454e57606c79c5ddf8c5ddf8c5ddf8111316b4cae3c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8050606c5ddf8c5ddf8 +7685954e5762c5ddf84d5661778696c5ddf8b7cde602020292a3b79baec3 +424a53c5ddf8111316c5ddf84a545e8c9db1899aad1d2024c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf87c8b9c454e57c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8aec3db +0d0e10adc3dac5ddf8c5ddf88a9bae3c434bc5ddf8c5ddf8c5ddf8c5ddf8 +acc1d8181b1fc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf85b6672697685 +c5ddf8c5ddf8c5ddf82f353c9baec3c5ddf8a5b9d01f2327c5ddf8a3b6cd +22272bc4dcf7c4dcf71a1d21768595c5ddf8c5ddf8c5ddf85b677365717f +c5ddf8c5ddf8c5ddf8c5ddf8b1c7df7a899abdd4eec5ddf8c5ddf8c5ddf8 +c5ddf8c1d8f396a9bd5964701d21251313130e0e0e000000000000080808 +323232f3f3f3ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffe5e5e5424242ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8a9bed5 +1b1e22c5ddf8c5ddf8c5ddf8b0c5dd5b6773434c55171a1e5b67737b8a9b +c5ddf8c5ddf84d5661778696c5ddf8c5ddf8c5ddf8c5ddf8454e575a6571 +64707e191c20a4b8cfc5ddf8c5ddf8c5ddf856616c2d33395b6773a9bed5 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8050606c5ddf8 +c5ddf87685954e5762c5ddf88798ab1e2226616d7a2a2f351a1d2192a3b7 +9baec3424a53c5ddf8111316c5ddf84a545e8c9db1c4dcf73d454d272c31 +626e7b48515b5f6b78c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8adc3da1e2125c4dcf7c5ddf8c5ddf8a7bcd3343a42687583 +4e58632f343bc5ddf8c5ddf8c5ddf8bdd4ee181b1f4a535d697685c5ddf8 +c5ddf8acc1d8181b1fc5ddf8c5ddf8c5ddf8c5ddf893a5b95b67732a2f35 +31373e5b677398aabfc5ddf82f353c9baec3c5ddf8a5b9d01f2327c5ddf8 +c5ddf847505a282d332c3137282d32768595c5ddf8c5ddf8c5ddf82e343a +99acc1c5ddf8c5ddf8c5ddf8c5ddf88fa1b4000000b2c8e0c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8f1f1f1b0b0b05d5d5d1b1b1b +1515150404042b2b2bf1f1f1ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffe8e8e83f3f3fffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +bed6f09aadc2c5ddf8c5ddf8c5ddf8bbd2ec93a5b993a5b993a5b993a5b9 +a2b6ccc5ddf8c5ddf8a7bcd3b1c7dfc5ddf8c5ddf8c5ddf8c5ddf8b0c6de +8495a78797aab9d0e9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8b1c7df94a6ba +b8cfe8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf895a7bb +c5ddf8c5ddf8b1c7dfa7bcd3c5ddf8c5ddf8acc1d88292a4afc4dca0b4ca +b8cfe8bad1eba4b8cfc5ddf898aabfc5ddf8a6bbd2b7cde6c5ddf8c5ddf8 +98abc07c8b9c93a5b9c1d8f3c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf84b545f8b9cafc5ddf8c5ddf8c3dbf69cafc5 +7d8c9d9baec3c3dbf6c5ddf8c5ddf8c5ddf8c5ddf8c3dbf69fb3c99aadc2 +c5ddf8c5ddf8bed6f09aadc2c5ddf8c5ddf8c5ddf8c5ddf8adc3da93a5b9 +93a5b993a5b993a5b9b0c5ddc5ddf89fb3c9bad1ebc5ddf8bdd4ee9cafc4 +c5ddf8c5ddf8c5ddf8aabfd6b1c7df3941489cafc5c5ddf8c5ddf8a0b4ca +343a42c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8697685383f46c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffff +ffffffe3e3e39d9d9d4a4a4a4c4c4cedededffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffeaeaea3d3d3dffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8a9bed56b7887c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf873829196a9bd7381901e2226c4dcf7c5ddf8c5ddf8 +7a899a9aadc2c5ddf8c5ddf8c5ddf8c5ddf8c5ddf85a65719eb1c7c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffff +fffffffffffffffffffffffffffffffffffff3f3f3ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffededed3b3b3bffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffeff5fdc5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf88b9caf6e7b8b6e7b8b6e7b8b6e7b8b7d8d9ec5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf87e8e9f525c68778696bad1ebc5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffefefef383838ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffeff5fd +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffff1f1f1363636ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffffffff9fcfe +e0edfbcde2f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9 +cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9 +cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9 +cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9 +cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9 +cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9 +cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9 +cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9 +cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9 +cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9 +cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9 +cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9 +cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9cce1f9d7e8faf2f7fd +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +eff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c8dff8ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffff4f4f4333333 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +d8e8fac5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +cce1f9feffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c8dff8ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffffffff6f6f6 +313131ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fafcfefafcfefafcfefafcfefafcfefafcfefafcfefafcfefafcfefafcfe +fafcfefafcfefafcfefafcfefafcfefafcfefafcfefafcfefafcfefafcfe +fafcfefafcfefafcfefafcfefafcfefafcfefafcfefafcfefafcfefafcfe +fafcfefafcfefafcfefafcfefafcfefafcfefafcfefafcfefafcfefafcfe +fafcfefafcfefafcfefafcfefafcfefafcfefafcfefafcfefafcfefafcfe +fafcfefafcfefafcfefafcfefafcfefafcfefafcfefafcfefafcfefafcfe +fafcfefafcfefafcfefafcfefafcfefafcfefafcfefafcfefafcfefafcfe +fafcfefafcfefafcfefafcfefafcfefafcfefafcfefafcfefafcfefafcfe +fafcfefafcfefafcfefafcfefafcfefafcfefafcfefafcfefafcfefafcfe +fafcfefafcfefafcfefafcfefafcfefafcfefafcfefafcfefafcfefafcfe +fafcfefafcfefafcfefafcfefafcfefafcfefafcfefafcfefafcfefafcfe +fafcfefafcfefafcfefafcfefafcfefafcfefafcfefafcfefafcfefafcfe +fafcfefafcfefafcfefafcfefafcfefafcfefafcfefafcfefefeffffffff +ffffffc6def8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8f1f7fdffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +f9f9f92f2f2fffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffeff5fd +d1e4f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c9e0f9 +e2eefbffffffc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8eff5fdffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffbfbfb2c2c2cffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffffffffefeff +cae0f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8f3f8fec5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8eff5fdffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffdfdfd2a2a2affffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +f2f7fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8e0edfbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8eff5fdffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff282828ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffff0f6fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8deecfbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8eff5fdffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff282828ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffff0f6fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8deecfbc5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8eff5fdffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff282828ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffff0f6fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8deecfbc5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8eff5fdffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffeff5fdc5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff282828ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffff0f6fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8deecfbc5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8eff5fd +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffeff5fd +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8b5cbe4bcd3edc5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8bed5efb4cae3c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff282828ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffff0f6fdc5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8deecfbc5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +eff5fdffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +eff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8474f597d8d9e +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf88a9bae404851c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c8dff8ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff282828 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffff0f6fdc5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8deecfb +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8eff5fdffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8b5cbe4 +bcd3edc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf88a9bae404851c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c8dff8ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +282828ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffff0f6fdc5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +deecfbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8eff5fdffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8b2c8e0394148c5ddf8c5ddf8c5ddf83f474f +acc1d8c5ddf88a9bae282d32202428626e7cc4dcf7c5ddf8aabfd62a2f35 +2a2f358e9fb2c5ddf8c5ddf8c5ddf8a9bdd44a535d262b3057616d404851 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff282828ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffff0f6fdc5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8bed5efa6bad1a6bad1bad1ebc5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8b9d0e9 +b9d0e9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c3dbf6aec3dbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8bdd4eea6bad1 +a6bad1bbd2ecc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8deecfbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8eff5fdffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8262b309baec3c5ddf8a3b6cd +1e2226c5ddf8b1c7df0a0c0d92a3b7abc0d7262b307f8fa0c5ddf8c5ddf8 +c5ddf8474f597d8d9ec5ddf8c5ddf8c5ddf8282d327f8fa0afc4dc2a2f35 +404851c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff282828ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffffffff0f6fd +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8aabfd64f59641a1d218393a5c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +64707e667381c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8b3c9e1111316c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8a7bcd3 +4f5964181b1f8798abc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8deecfbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8eff5fdffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf86c7a8957616dc5ddf8 +5f6a7765717fc5ddf88393a5292e34c5ddf8c5ddf865717f47505ac5ddf8 +c5ddf8c5ddf8474f597d8d9ec5ddf8c5ddf8b6cce50d0e10c4dcf7c5ddf8 +6a7786404851c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff282828ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +f0f6fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf84149528393a5c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf864707e667381c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c3dbf6aec3dbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf83d444c8798abc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8deecfbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf88899ac7482928494a6 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8bad0ea748292748292a3b7ce +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf897a9bea9bdd4c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf88797aa7482928696a9c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8eff5fdffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8b1c7df16191c +c3dbf61b1f23abc0d7c5ddf87988983d454dc5ddf8c5ddf87786963c434b +c5ddf8c5ddf8c5ddf8474f597d8d9ec5ddf8c5ddf8a2b6cc1b1f23c5ddf8 +c5ddf87d8c9d404851c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff282828ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffff0f6fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +8494a62a2f351b1f23444d56c5ddf8c5ddf8c5ddf84149528393a5c5ddf8 +c5ddf8c5ddf8a2b6cc333a411d20242c32388b9cafc5ddf8c5ddf8b3c9e1 +4d5661252a2f2b303698abc0c5ddf8c5ddf88c9db139404723272c3c434b +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8a3b7ce +414952292e346774826b7887c5ddf8c5ddf87f8fa02a2f35333a418797aa +c5ddf8c5ddf85c687472808f2e343a363d459eb1c7c5ddf8c5ddf898abc0 +383f4630363d49525c667381c5ddf8c4dcf76e7b8b262b303d444c93a5b9 +c5ddf8c5ddf8c5ddf8353b438d9eb12f353c2125299baec3c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8697685626e7b2b3036424a53a3b6cd +c5ddf8c5ddf865717f2a2f35394047c5ddf8c5ddf8c5ddf84c5560454e57 +282d33626e7b2c32389cafc4c5ddf855606b64707e252a2f4e5863adc2d9 +c5ddf8c5ddf8c5ddf83d444c8798abc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8deecfbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf892a3b7697584 +25292ec5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8bbd2ec8190a2363d45 +717f8ec5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf85b66728292a4c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf890a2b5657280292e34c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8eff5fdffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +343a426a77862c3238c5ddf8c5ddf895a7bb121417c5ddf8c5ddf84e5863 +5b6773c5ddf8c5ddf8c5ddf8474f597d8d9ec5ddf8c5ddf8c4dcf7101315 +bad1ebc5ddf8545e6a404851c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff282828ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffff0f6fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +99acc11416198fa1b4c2daf58b9cafc5ddf8c5ddf8c5ddf84149528393a5 +c5ddf8c5ddf8c5ddf8a9bed5a6bad1c5ddf8a2b6cc090a0bb8cfe8c5ddf8 +5f6a77626e7cc4dcf7b7cee7adc3dac5ddf8c2daf5191c20a9bed5c5ddf8 +9fb3c9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +1b1e228595a8adc2d922272b4d5661c5ddf892a3b7181b1fa2b6ccb0c5dd +262b30a9bdd4c5ddf83f474f333a41b4c9e2717f8e434c55c5ddf8bfd6f1 +1113169aadc2a1b5cb131518667381c5ddf8788797282d33abc0d7a7bcd3 +1b1f23bcd3edc5ddf8c5ddf80d0e103b424a9db0c6b0c5ddabc0d7c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8505a651f2327aabfd68d9eb1 +191c20c5ddf8c5ddf8c5ddf8b3c9e1111316c5ddf8c5ddf8c5ddf82a2f35 +8fa1b4414952515b668494a658626ec5ddf8363d4530363db1c7df768494 +323940c5ddf8c5ddf8c5ddf83d444c8798abc5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8deecfbc5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c4dcf7b0c5ddb8cfe8c5ddf8c5ddf8c5ddf8 +9fb3c925292ec5ddf8c5ddf8c5ddf8c5ddf8c5ddf8b4cae3b1c7dfc5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8bed5efafc4dcc4dcf7c5ddf8c5ddf8c5ddf8 +c5ddf8b4c9e2b9d0e9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c2daf5c1d9f4bed5efbdd4eec5ddf8c5ddf8c5ddf8c5ddf8 +c4dcf7b4c9e2c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8b8cfe8b5cbe4c5ddf8 +c5ddf8c5ddf8c1d9f4c2daf5bad1ebc1d8f3c5ddf8c5ddf8c5ddf8c5ddf8 +535d69717f8ec5ddf8c5ddf8c5ddf8c5ddf8c5ddf8bbd2ecbcd3edc5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8bfd6f1 +c4dcf7b7cde6c5ddf8c5ddf8c5ddf8c4dcf7bed6f0bed6f0c2daf5c5ddf8 +c5ddf8c3dbf6c1d9f4b4cae3c4dcf7b9d0e9c3dbf6c5ddf8c4dcf7c0d7f2 +c2daf5b8cfe8c5ddf8c5ddf8c5ddf8c5ddf89baec3292e34c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8eff5fdffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf87b8a9b050606738291c5ddf8c5ddf8c5ddf83239402c313748515b +141619adc3dac5ddf88899ac5b67732125293a41495b6773a3b6cdc5ddf8 +616d7a25292e4c55601c2023404851c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff282828ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffff0f6fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf857616d515b66c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8414952 +8393a5c5ddf8c5ddf8c5ddf8c4dcf79fb2c86b788755606b0e1012a1b5cb +c5ddf86875832f353c8798abbad1ebc5ddf8c5ddf8c5ddf81e21255c6874 +9baec3c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +a9bed516191cc5ddf8c5ddf85f6b784d5661c5ddf84e5863444d568b9cb0 +899aad474f596c7988c5ddf83f474f788797c5ddf8aec3db171a1dc5ddf8 +91a2b630363dc5ddf8c5ddf8444d56667381c5ddf8353b4357616d8b9caf +899aad353b438595a8c5ddf8c5ddf80d0e108b9cafc5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8505a6557616dc5ddf8 +c5ddf81b1e22a9bed5c5ddf8c5ddf8b3c9e1111316c5ddf8c5ddf8c5ddf8 +2a2f35acc1d85b67736e7b8b9baec33e464ec5ddf8363d45707e8dc5ddf8 +c1d8f30a0c0dbed5efc5ddf8c5ddf83d444c8798abc5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8deecfbc5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf89baec3171a1d23272c21262a7b8a9bc5ddf8 +c5ddf89fb3c925292ec5ddf8c5ddf8c5ddf8c5ddf8363c442c31372b3036 +212529a9bdd4c5ddf8c5ddf8505a652d3339383f46363c44c5ddf8c5ddf8 +b0c5dd2a2f35363d452b3036758393c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf86673812f343b1b1f231f23276c7a89c5ddf8c5ddf8 +96a9bd171a1d282d3331373e99acc1c5ddf8c5ddf84e576210121416191c +3d444cc1d9f4c5ddf84d5661333a411e21252024287e8e9fc5ddf8c5ddf8 +c5ddf8535d69717f8ec5ddf8c5ddf8c5ddf8c1d9f44a535d14171a282d32 +58636fc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8aec3db +0f11132a2f3522272b434c55b4cae3c5ddf8afc4dc30363d121417798898 +c5ddf8c5ddf8899aad1b1e2221262a2f353c2b30362c3137c5ddf895a7bb +1d202420242821262a505a65bed5efc5ddf8c5ddf89baec3292e34c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8eff5fdffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffeff5fdc5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8bed5ef93a5b9bbd2ecc5ddf8c5ddf8c5ddf8c1d8f38b9caf +8191a3b4c9e2c5ddf8c5ddf8a9bdd493a5b993a5b993a5b993a5b9b4cae3 +c5ddf8c5ddf8a9bed58899acb2c8e0a4b8cfc5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff282828ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffff0f6fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf84a545e6a7786c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +4149528393a5c5ddf8c5ddf8c5ddf88494a62c32388495a799acc116191c +9cafc4c5ddf8c3dbf68495a732383f0c0d0f92a3b7c5ddf8c5ddf8b5cbe4 +687583111316282d32c0d7f2c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf897a9be25292ec5ddf8c5ddf86e7b8b4d5661c5ddf8424a533d454d +6875836875836875838d9eb1c5ddf83f474f8b9cb0c5ddf8b4cae3101214 +c5ddf87b8a9b414952c5ddf8c5ddf857616d667381c5ddf8282d334b545f +68758368758368758398abc0c5ddf8c5ddf80d0e10b5cbe4c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8505a65687583 +c5ddf8c5ddf82b303690a2b5c5ddf8c5ddf8b3c9e1111316c5ddf8c5ddf8 +c5ddf82a2f35b2c8e0626e7b7482929fb3c9363d45c5ddf8363d458191a3 +c5ddf8c5ddf8111316aabfd6c5ddf8c5ddf83d444c8798abc5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8deecfbc5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c4dcf71b1f237d8c9dc5ddf8c5ddf8b3c9e1 +c5ddf8c5ddf89fb3c925292ec5ddf8c5ddf8c5ddf8c5ddf8b7cde6c5ddf8 +c5ddf864707e535d69c5ddf8afc4dc15181bc5ddf8c5ddf8bfd6f1c5ddf8 +c5ddf86572805f6a77c5ddf8c5ddf8bfd6f1c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf86673811e2226bed6f0bbd2ec14171ab8cfe8 +c1d8f316191c8ea0b3c5ddf89baec33b424ac5ddf891a2b6171a1ebcd3ed +c1d8f32c31377d8c9dc5ddf84d5661353b43c2daf5b2c8e0121417c4dcf7 +c5ddf8c5ddf8535d69717f8ec5ddf8c5ddf8c5ddf873819030363dc1d9f4 +c4dcf7373e469fb3c9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +aec3db00000096a9bdc5ddf8515b66738190c5ddf8c5ddf8c5ddf84b545f +798898c5ddf8c5ddf8899aad3f474facc1d8030303c3dbf6282d32b9d0e9 +95a7bb000000afc4dcc3dbf63940478c9db1c5ddf8c5ddf89baec3292e34 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8eff5fd +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffeff5fd +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff282828ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffff0f6fdc5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf86d7b8a343a42c5ddf8c5ddf8c4dcf7c5ddf8c5ddf8 +c5ddf85c68746d7b8ac5ddf8c5ddf8c5ddf8434b548191a3c5ddf8afc4dc +0000009cafc4c5ddf8c5ddf8c5ddf8c4dcf7515b67535d69c5ddf8c5ddf8 +c5ddf8c5ddf8b4cae3171a1d9db0c6c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c1d9f40d0f11bad1ebc5ddf8424a534d5661c5ddf8657280 +404750c5ddf8c5ddf8c5ddf8c5ddf8c5ddf83f474f8b9cb0c5ddf8b4cae3 +101214c5ddf8adc3da1c2023c5ddf8c5ddf82e343a667381c5ddf84b545f +5a6571c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf80d0e10b7cee7c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8505a65 +424a53c5ddf8c3dbf60d0f11bdd4eec5ddf8c5ddf8b3c9e1111316c5ddf8 +c5ddf8c5ddf82a2f35b2c8e0626e7b7482929fb3c9363d45c5ddf8363d45 +5c6874c5ddf8b2c8e0171a1dc5ddf8c5ddf8c5ddf857616d72808fc5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8deecfbc5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8aec3db070809bed6f0c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf89fb3c925292ec5ddf8c5ddf8c5ddf8c5ddf895a7bb +525c682c31371d2024404750c5ddf8c3dbf624282d3a4149738190bad1eb +c5ddf8c5ddf895a7bb171a1d515b668d9eb1c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf86673814a545ec5ddf8c5ddf83a4149 +8696a9a6bad10606075b667258636f57616d0a0c0dbed6f06b788747505a +c5ddf8c5ddf85d6875535d69c5ddf84d566164707ec5ddf8c5ddf8212529 +9fb3c9c5ddf8c5ddf8535d69717f8ec5ddf8c5ddf8c5ddf8424a53343a42 +5a657158626e2e343a64707ec5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8aec3db060607c1d9f4c5ddf88292a43e464ec5ddf8c5ddf8c5ddf8 +4b545f798898c5ddf8c5ddf8899aad515b66bed5ef131518c5ddf8363c44 +a2b6cc95a7bb1c2023c5ddf8c5ddf869758458626ec5ddf8c5ddf89baec3 +292e34c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +eff5fdffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +eff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8a9bdd4a6bad1b1c7dfc5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8b8cfe8c1d9f4c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c1d8f3b0c6dec5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8bfd6f1bad1ebc5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c8dff8ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff282828 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffff0f6fdc5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8bdd4ee282d332c3238626e7c2d3339c5ddf8 +c5ddf8c5ddf89fb2c81b1f234b545f8fa1b4c5ddf87e8e9f22272b606c79 +2b303616191c9cafc4c5ddf84e586357616d6572801e212598aabfc5ddf8 +b6cce52e343a66738155606b22272bc4dcf7c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf86a77861e2226373e462c32384d5661c5ddf8 +bad0ea252a2f343a42636f7d3d454d7d8d9ec5ddf83f474f8b9cb0c5ddf8 +b4cae3101214c5ddf8c5ddf83e464e353b433d444c181b1f667381c5ddf8 +acc1d81c20233e464e626e7c343a4295a7bbc5ddf8c5ddf80d0e10b7cee7 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +505a65171a1e474f592a2f35535d69c5ddf8c1d9f45b6773535d6908090a +5b6773697584c5ddf82a2f35b2c8e0626e7b7482929fb3c9363d45c5ddf8 +363d451b1f234e586322272b697685c5ddf8c5ddf8c5ddf89baec31b1f23 +4c556092a3b7c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8deecfb +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8aec3db070809bed6f0c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8a1b5cb23272cc5ddf8c5ddf8c5ddf8bed5ef +171a1d9cafc5c3dbf67382913d454dc5ddf8c5ddf8c3dbf68ea0b323272c +191c20c4dcf7c5ddf8c5ddf8b7cde66c7a89070809626e7cc5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf86673814a535dc5ddf8c5ddf8 +3a41498494a6a6bad10b0d0e98abc099acc199acc199acc1c1d9f46b7887 +474f59c5ddf8c5ddf85d6875535d69c5ddf84d5661636f7dc5ddf8c5ddf8 +2125299db0c6c5ddf8c5ddf8545e6a707e8dc5ddf8c5ddf8c5ddf8424a53 +58636f99acc199acc199acc1acc1d8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8aec3db060607c1d9f4c5ddf88292a43b424ac5ddf8c5ddf8 +c5ddf84b545f798898c5ddf8c5ddf8899aad545e6ac1d8f316191cc5ddf8 +3940479eb1c795a7bb1b1f23c5ddf8c5ddf869758455606bc5ddf8c5ddf8 +9cafc4282d33c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8eff5fdffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8596470333a41464e58c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf88c9db1a1b5cbc5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8bed5ef24282dc0d7f2c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8697584c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8a6bad11e2226 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8b4c9e22a2f35c4dcf7 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c8dff8fffffff5f5f5ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +282828ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffff0f6fdc5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c1d9f491a2b67d8d9ea9bdd4 +c5ddf8c5ddf8c5ddf8c5ddf8bed6f095a8bcaec3dbc5ddf8c5ddf8a9bdd4 +8393a5b1c7df9eb1c7bad1ebc5ddf8b4c9e28797aa8495a7b7cde6c5ddf8 +c5ddf8c5ddf8a0b4ca7d8c9d96a9bdc1d9f4c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8b4cae3a7bcd3626e7c738190 +c5ddf8c5ddf8c1d8f390a2b57c8b9c9cafc4c4dcf7c5ddf8a3b7ceb7cde6 +c5ddf8c1d8f398aabfc5ddf8c5ddf8c5ddf89baec393a5b9adc2d9adc3da +c5ddf8c5ddf8bcd3ed8b9cb07d8d9ea3b6cdc5ddf8c5ddf8c5ddf897a9be +c1d9f4c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8505a6572808f8b9cb0a3b7cec5ddf8c5ddf8c4dcf793a5b993a5b9 +93a5b993a5b999acc1c5ddf89eb1c7c0d7f2acc1d8b0c6debbd2eca1b5cb +c5ddf8363d458797aa8797aaadc3dac5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +bed5ef95a7bbb0c5ddc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +deecfbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c4dcf71b1f237d8c9d +c5ddf8c5ddf8b3c9e1c5ddf8c5ddf8bfd6f1111316bad0eac5ddf8c5ddf8 +a5b9d01e2125c5ddf8c0d7f232383f3d454dc5ddf8bcd3edbfd6f1c5ddf8 +bad0ea0d0f11bad1ebc5ddf8b6cce5c5ddf8c5ddf8768494474f59c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf86673811e2125bdd4ee +bad0ea141619b7cee7c1d8f316191c8b9cb0c5ddf8c5ddf8b1c7dfc5ddf8 +92a4b816191cbad0eabfd6f12a2f357e8e9fc5ddf84d5661323940c1d9f4 +b0c5dd111316c4dcf7c5ddf8c5ddf87d8c9d49525cc5ddf8c5ddf8c5ddf8 +73819030363dbed6f0c5ddf8c0d7f2b6cce5c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8aec3db00000093a5b9c5ddf84e586372808fc5ddf8 +c5ddf8c5ddf84b545f798898c5ddf8c5ddf8899aad545e6ac1d8f316191c +c5ddf83940479eb1c795a7bb000000acc1d8c2daf5363d458b9cb0c5ddf8 +c5ddf8bdd4ee111316bcd3edc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8eff5fdffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf87e8e9f464e58c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf84c5560788797c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf86e7b8b626e7cc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8000000c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c1d8f3 +b0c6dec5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf849525c +8798abc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +bed5ef8b9caf485059555555f0f0f0ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff292929ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffff0f6fdc5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf88292a48fa1b48292a41c2023 +afc4dcc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8505a65748292c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8363d458e9fb2c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8deecfbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf89cafc4 +1b1e2223272c24282d7c8b9cc5ddf8c5ddf8c5ddf8707e8d1e2226282d33 +c5ddf8c5ddf8454e57282d321b1f234a535d3d454dc5ddf8a1b5cb171a1e +383f46282d33657280c5ddf8c5ddf85f6b7821262a373e46292e349eb1c7 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf86673812d3339 +191c201e22266c7a89c5ddf8c5ddf897a9be191c20262b30252a2f394148 +c5ddf8c5ddf84e57620f111315181b3d444cc1d9f4c5ddf84d566131373e +1c20231f23277e8e9fc5ddf8c5ddf8c5ddf8b8cfe84047501b1e22697685 +c5ddf8c1d9f44e57620e101232383f1b1f2390a2b5c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8aec3db0e1012272c3121262a434c55b4cae3 +c5ddf8707d8d2a2f351012141a1d212a2f358ea0b3899aad545e6ac1d8f3 +16191cc5ddf83940479eb1c795a7bb1d20241d2024202428505a65bed5ef +c5ddf8c5ddf8c5ddf86c7a891e21252d3339c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8eff5fdffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf87e8e9f464e58c5ddf8 +c5ddf8c5ddf8c4dcf7444d561e222624282d616d7ac2daf5c5ddf8c5ddf8 +6673812c323824282d6d7b8ac5ddf8a6bad12a2f351012141a1d212a2f35 +626e7cc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8667381 +707d8d32383f32383f98aabfc5ddf8c5ddf855606b20242821262a545f6a +bed6f0c5ddf8434c55444d562c32385f6a772f343ba1b5cbc5ddf8b7cde6 +4d566121252956616cadc3dac5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8191c20adc2d9c5ddf8c5ddf8c5ddf8acc1d8 +49525c25292e2d3339a3b7cec5ddf86976852a2f350000002a2f352a2f35 +9eb1c7c5ddf8c5ddf8515b668696a93941481b1f238190a2c5ddf85a6571 +2a2f35434b54c5ddf8c5ddf8c5ddf88b9caf606c79434b54272c317d8c9d +c5ddf8c5ddf8b0c5dd525c6824282d697584525c68c5ddf8c5ddf8c5ddf8 +93a5b9323940c5ddf8c5ddf8c5ddf8c5ddf8c5ddf86d7b8aa0b4cac5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8adc2d9707d8d +292f340c0e0f0304041e2225f0f0f0ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff2b2b2bfdfdfdffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffffffff0f6fd +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf893a5b957616d687583 +b0c6dec5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8b0c5dd6e7b8b6e7b8b6e7b8b6e7b8b +6e7b8bafc4dcc5ddf88797aa9aadc2c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf87a8899a7bcd3c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8deecfbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8b1c7dfbbd2ecc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8b7cee7c1d8f3c5ddf8c5ddf8c5ddf8c5ddf8 +c1d9f4adc3dac2daf5c5ddf8c5ddf8c5ddf8c5ddf8bad0eab2c8e0c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8667381 +5e6976bed5efbdd4eec5ddf8c5ddf8c5ddf8c5ddf8c5ddf8b1c7dfb8cfe8 +c5ddf8c5ddf8c5ddf8c5ddf8b8cfe8b5cbe4c5ddf8c5ddf8c5ddf84d5661 +778696bad0eac1d8f3c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8bed6f0aec3dbc2daf5c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8aec3db16191cc4dcf7b7cde6c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf895a7bb2f353cc2daf5b8cfe8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8eff5fdffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf87e8e9f464e58 +c5ddf8c5ddf8c5ddf8c4dcf78ea0b3c2daf5b6cce52c32388190a2c5ddf8 +9cafc52b3036bfd6f1c2daf5a3b6cdc5ddf8c5ddf8c5ddf84c5560788797 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +4b545f2a2f35b0c6de7d8c9d373e46c5ddf8c5ddf88fa1b4c0d7f2bad1eb +3f474f697685c5ddf820242899acc1363d455b6773798898626e7cc5ddf8 +3a414956616cbad0ea8190a23a4149c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8b8cfe8070809c4dcf7c5ddf8c5ddf8c5ddf8 +4f596472808fc5ddf8b3c9e1b2c8e0c5ddf8c5ddf8c5ddf8000000c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf830363d282d328ea0b3b7cee7a3b6cdc5ddf8 +c5ddf8a6bad11e2226c5ddf8c5ddf8c5ddf87a88990d0e109fb3c9a7bcd3 +0f1113c2daf5c5ddf83c434b677482b4cae33941482c3137c5ddf8c5ddf8 +c5ddf8b2c8e00d0e10c5ddf8c5ddf8c5ddf8c5ddf8c5ddf80a0b0c768595 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c2daf595a8bc535d6815181b0e1011 +0505060000000202021f2327bcd2e9ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff2d2d2dfbfbfbffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +f0f6fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8deecfbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +6673815e6976c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +4d5661778696c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8aec3db16191cc5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf895a7bb2f353cc5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8eff5fdffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf87e8e9f +464e58c5ddf8c5ddf8c5ddf8c5ddf8b0c5dd7a899a57616d292e3464707e +c5ddf8a5b9d0121417768494adc3dac5ddf8c5ddf8c5ddf8c5ddf84c5560 +788797c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf84b545f6c7988c5ddf8bad1eb0a0c0dc5ddf8c5ddf8b4cae38190a2 +58636f333a414d5661c5ddf8202428b7cde6515b6679889890a2b549525c +bcd3ed0202028190a28b9caf8899ac111316bdd4eec5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf899acc1212529c5ddf8c5ddf8c5ddf8 +c5ddf858626e3940478b9cb0bdd4eec5ddf8c5ddf8c5ddf8c5ddf8000000 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf830363d677482c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8a6bad11e2226c5ddf8c5ddf8c5ddf87a88993d454dc5ddf8 +c5ddf823272ca2b6ccc1d8f30a0c0db9d0e9c5ddf88190a22c3137c5ddf8 +c5ddf8c5ddf8c5ddf8070809b3c9e1c5ddf8c5ddf8c5ddf8c5ddf8a8bcd4 +b9d0e9c5ddf8c5ddf8b5cbe4616d7a252a2f090a0b090a0b000000000000 +000000000000010101141619778696808f9fa1a1a1a0a0a09e9e9e9c9c9c +9a9a9a9898989797979595959393939191918f8f8f8e8e8e8c8c8c8a8a8a +8888888686868585858383838181817f7f7f7d7d7d7c7c7c7a7a7a787878 +767676747474737373717171141414f8f8f8ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffff0f6fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8deecfbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8aabfd6a8bcd4c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8a3b7ceafc4dcc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +8292a46e7b8b6e7b8b6e7b8b6e7b8b8696a9c5ddf8bed6f094a6bac5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8b7cee79baec3c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8eff5fdffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +7e8e9f464e58c5ddf8c5ddf8c5ddf8b8cfe816191c76849498aabf464e58 +5f6a77c5ddf8c5ddf89fb3c94e58630405055f6a77c5ddf8c5ddf8c5ddf8 +4c5560788797c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf84b545f7f8fa0c5ddf8c1d8f3030404c5ddf8c1d9f4191c20 +6f7c8c96a9bd58626e47505ac5ddf8202428bdd4ee58626e7f8fa095a8bc +414952b0c6de040505677482687583687583687583b6cce5c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8a6bad116191cc5ddf8c5ddf8 +c5ddf8c5ddf8c1d8f37d8d9e2a2f351013159cafc5c5ddf8c5ddf8c5ddf8 +000000c5ddf8c5ddf8c5ddf8c5ddf8c5ddf830363d92a3b7c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8a6bad11e2226c5ddf8c5ddf8c5ddf87a8899515b66 +c5ddf8c5ddf8292e349baec3b7cde608090ac2daf5c5ddf88fa1b42c3137 +c5ddf8c5ddf8c5ddf8c0d7f2030404bed5efc5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8bfd6f17a899a1f2328030304060708000000000000 +000000000000000000020303171a1d616d7b677480858585878787898989 +8b8b8b8c8c8c8e8e8e9090909292929494949595959797979999999b9b9b +9d9d9d9e9e9ea0a0a0a2a2a2a4a4a4a5a5a5a7a7a7a9a9a9abababadadad +aeaeaeb0b0b0b2b2b2b4b4b4b5b5b5b7b7b7fdfdfdffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffff0f6fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c3dbf6a2b6cc93a5b9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8deecfbc5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8eff5fdffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf899acc12f353cc5ddf8c5ddf8c5ddf8808fa1444d56c5ddf8c5ddf8 +262b305f6a77c5ddf8c5ddf8c5ddf8c5ddf88e9fb216191cc5ddf8c5ddf8 +c5ddf85b67736a7786c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf84b545f7f8fa0c5ddf8c1d8f3030404c5ddf897a9be +2d3339c5ddf8c5ddf83d454d47505ac5ddf8202428bdd4ee58626e7f8fa0 +95a8bc414952c4dcf70f111398aabfc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c1d9f4060607bed6f0 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c2daf5434b54626e7cc5ddf8c5ddf8 +c5ddf80f1113b7cde6c5ddf8c5ddf8c5ddf8c5ddf830363d94a6bac5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8a6bad11e2226c5ddf8c5ddf8c5ddf87a8899 +515b66c5ddf8c5ddf8292e349baec3c5ddf8272c319cafc5c5ddf8626e7c +2c3137c5ddf8c5ddf8c5ddf8a6bad11b1e22c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf88494a6a0b4cac5ddf8c5ddf8c5ddf8c5ddf8c2daf59aadc25c6874 +1e22260e10120a0b0d0000000000000607082d3339c3d8f1ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffff0f6fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf858636f373e46899aadc5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8deecfbc5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8eff5fdffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffeff5fdc5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c4dcf7282d333d454d6b7887c5ddf8b4c9e21214175e6976 +323940272c315f6a77c5ddf87e8e9f454e576a7786363d455d6875c5ddf8 +c5ddf8c5ddf899acc1191c20545e6a8292a4c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf84b545f7f8fa0c5ddf8c1d8f3030404c5ddf8 +c0d7f2171a1d5964703d444c292e3447505ac5ddf8202428bdd4ee58626e +7f8fa095a8bc414952c5ddf88190a215181b545e6a5a6571292e34c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8363c44 +94a6bac5ddf8c5ddf8c5ddf8434c555b6672636f7d191c20a6bad1c5ddf8 +c5ddf8c5ddf8545e6a2f343b5b6773aabfd6c5ddf8c5ddf830363d94a6ba +c5ddf8c5ddf8c5ddf8bad1eb5b67734d56610e10125b6773707d8dc5ddf8 +7a8899515b66c5ddf8c5ddf8292e349baec3c5ddf88393a51d20243f474f +2f343b2c3238c5ddf8c5ddf8c5ddf87988984f5964c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8141619687583c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8b8cfe88595a8424a531113150f11130202032c3036f8f8f8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffff0f6fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf821262aa3b7cec5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8deecfbc5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf88798ab596470adc3da +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8eff5fd +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffeff5fd +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf89fb2c89fb2c8c5ddf8c5ddf8b9d0e9 +8494a6a0b4caadc3daabc0d7c5ddf8bed6f092a3b77d8c9da8bcd4c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8bfd6f198abc0a6bad1c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8a6bbd2b4c9e2c5ddf8c4dcf795a7bb +c5ddf8c5ddf8bed5ef8797aa99acc1b3c9e1a6bad1c5ddf89cafc4c3dbf6 +a9bed5b4c9e2b9d0e9a4b8cfc5ddf8c5ddf8aec3db8191a38595a8b4c9e2 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +95a8bc404750c5ddf8c5ddf8c5ddf8b0c6de8494a68798abbad0eac5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8b0c6de94a6bab8cfe8c5ddf8c5ddf89fb3c9 +b9d0e9c5ddf8c5ddf8c5ddf8c0d7f293a5b993a5b993a5b993a5b99db0c6 +c5ddf8b2c8e0a8bcd4c5ddf8c5ddf89eb1c7bad1ebc5ddf8c5ddf8bdd4ee +a0b4ca8292a4515b67c5ddf8c5ddf8c5ddf8282d33acc1d8c5ddf8c5ddf8 +c5ddf8c5ddf8b4c9e2060607aec3dbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8a6bbd26d7a892e3339 +515151f5f5f5ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffff0f6fdc5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf816191cadc3dac5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8deecfbc5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8a8bcd41b1f2395a8bc +bfd6f1c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +eff5fdffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +eff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf858626ebdd4eec5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf890a2b5 +8899ac8b9cb02a2f3590a2b5c5ddf8c5ddf8adc3da677482c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf894a6ba64707ec5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c8dff8f9f9f9ecececffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffff0f6fdc5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8bbd2ec070809bfd6f1c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8deecfb +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf87988984c5560 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8eff5fdffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8abc0d7 +6e7b8b6e7b8b6e7b8b6e7b8b6e7b8bb4c9e2c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +a2b6cc5c68745e6976a6bad1c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c8dff8ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffff0f6fdc5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf87a899a171a1e64707ec5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +deecfbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf872808f +515b66c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8eff5fdffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffff0f6fdc5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8bad0ea7f8fa0141619c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8deecfbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8bed6f0 +414952707d8dc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8eff5fdffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffffffff0f6fd +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8101214 +b1c7dfc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8deecfbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8bbd2ec +14171a1b1e22b8cfe8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8eff5fdffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +f0f6fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +171a1eadc2d9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8deecfbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c4dcf748515b697584c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8eff5fdffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffff0f6fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf83e464e7a899ac4dcf7c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8deecfbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8738190505a65c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8eff5fdffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffff0f6fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf89cafc44e58635c6874c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8deecfbc5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf87a899a4a535dc5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8eff5fdffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffff0f6fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8deecfbc5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8abc0d7171a1e899aadbdd4eec5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8eff5fdffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffeff5fdc5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffff0f6fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8deecfbc5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf895a8bc6b7887b1c7df +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8eff5fd +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffeff5fd +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffff0f6fdc5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8deecfbc5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +eff5fdffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +eff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c8dff8ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffff0f6fdc5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf89cafc572808fc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf84d5661c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8deecfb +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8eff5fdffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c8dff8ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffff0f6fdc5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf89cafc572808fc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8050606c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +deecfbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8eff5fdffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +b5cbe4bcd3edc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8bed5efb4cae3 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffff0f6fdc5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf893a5b9 +bed5efc5ddf8c5ddf8abc0d7a6bad1c5ddf8c5ddf89cafc57d8d9ea2b6cc +c5ddf8c5ddf8c5ddf895a8bc8d9eb19fb3c9c5ddf8c5ddf8c5ddf8c5ddf8 +bcd3ed8495a7b1c7df050606c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8deecfbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf832383fabc0d7c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf86d7b8a758393c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8eff5fdffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8474f597d8d9ec5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf88a9bae +404851c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffffffff0f6fd +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +4048517f8fa0c5ddf8c5ddf83d454d8393a5c5ddf86f7c8c16191c56616c +1416197e8e9fc5ddf8c5ddf8707e8d424a53404750c5ddf8c5ddf8c5ddf8 +92a4b81e2125545f6a2a2f35030404c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8deecfbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf88696a9bad0ea +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8616d7a697685c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8eff5fdffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8b5cbe4bcd3edc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +8a9bae404851c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +f0f6fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf88798ab3b424ac5ddf8b9d0e9101214bed6f0c5ddf80d0e109aadc2 +c5ddf88e9fb21c2023c5ddf8c5ddf8c5ddf88495a7404750c5ddf8c5ddf8 +c5ddf84a545e7f8fa0c5ddf893a5b9020202c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8deecfbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf89db0c68190a2c5ddf8c5ddf8c1d8f35f6b78c2daf5 +c5ddf899acc1525c6856616ca6bbd2c5ddf8c5ddf89db0c65b67735b6773 +b5cbe4c5ddf8c5ddf8c5ddf8bad1eb687583626e7b5a6571697685c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8eff5fdffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8b2c8e0394148c5ddf8 +c5ddf8c5ddf83f474facc1d8c5ddf88a9bae282d32202428626e7cc4dcf7 +c5ddf8aabfd62a2f352a2f358e9fb2c5ddf8c5ddf8c5ddf8a9bdd44a535d +262b3057616d404851c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffff0f6fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c0d7f2121417b7cee77a899a4a545ec5ddf8b7cee7030404 +c1d8f3c5ddf8b5cbe4010101c1d9f4c5ddf8c5ddf88495a7404750c5ddf8 +c5ddf8c5ddf8181b1fa3b7cec5ddf8bad1eb030303c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8deecfbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8afc4dc141619c3dbf6c5ddf88b9caf363c44 +c5ddf8a5b9d0101214748292697685121417b7cde6c5ddf8b2c8e093a5b9 +15181ba7bcd3c5ddf8c5ddf8c3dbf6191c206a7786707d8d0d0e10697685 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8eff5fdffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8262b30 +9baec3c5ddf8a3b6cd1e2226c5ddf8b1c7df0a0c0d92a3b7abc0d7262b30 +7f8fa0c5ddf8c5ddf8c5ddf8474f597d8d9ec5ddf8c5ddf8c5ddf8282d32 +7f8fa0afc4dc2a2f35404851c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffff0f6fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf84f5964788797363c4491a2b6c5ddf8c0d7f2 +000000b0c6dec5ddf8a3b6cd0a0c0dc5ddf8c5ddf8c5ddf88495a7404750 +c5ddf8c5ddf8c5ddf832383f92a3b7c5ddf8a8bcd4020202c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8deecfbc5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf832383f91a2b6c5ddf8464e58 +7d8c9dc5ddf85f6b7847505ac5ddf8c5ddf831373e788797c5ddf8c5ddf8 +c5ddf81d2024a7bcd3c5ddf8c5ddf89cafc42a2f35c5ddf8c5ddf8363d45 +697685c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8eff5fdffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +6c7a8957616dc5ddf85f6a7765717fc5ddf88393a5292e34c5ddf8c5ddf8 +65717f47505ac5ddf8c5ddf8c5ddf8474f597d8d9ec5ddf8c5ddf8b6cce5 +0d0e10c4dcf7c5ddf86a7786404851c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffff0f6fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf895a8bc262b30171a1dc3dbf6c5ddf8 +c5ddf832383f596470b6cce5505a65434b54c5ddf8c3dbf6bed6f08190a2 +3d454dbed6f0c1d8f3c5ddf8667381464e58b5cbe455606b020202c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8deecfbc5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf87887974d5661bed5ef +111316bbd2ecc5ddf84e5863697685c5ddf8c5ddf8515b66636f7dc5ddf8 +c5ddf8c5ddf81d2024a7bcd3c5ddf8c5ddf874829247505ac5ddf8c5ddf8 +56616c697685c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8eff5fdffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffeff5fdc5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8b1c7df16191cc3dbf61b1f23abc0d7c5ddf87988983d454dc5ddf8 +c5ddf87786963c434bc5ddf8c5ddf8c5ddf8474f597d8d9ec5ddf8c5ddf8 +a2b6cc1b1f23c5ddf8c5ddf87d8c9d404851c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffff0f6fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c4dcf73d444c6d7b8ac5ddf8 +c5ddf8c5ddf8adc2d93a41491b1f23414952b4c9e2c5ddf89eb1c730363d +30363d30363d30363d657280c5ddf8bbd2ec68758323272c677482353b43 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8deecfbc5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8b9d0e9131518 +7e8e9f444d56c5ddf8c5ddf8616d7a474f59c5ddf8c5ddf830363d798898 +c5ddf8c5ddf8c5ddf81d2024a7bcd3c5ddf8c5ddf89db0c6292e34c5ddf8 +c5ddf8363c44697685c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8eff5fd +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffeff5fd +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8343a426a77862c3238c5ddf8c5ddf895a7bb121417 +c5ddf8c5ddf84e58635b6773c5ddf8c5ddf8c5ddf8474f597d8d9ec5ddf8 +c5ddf8c4dcf7101315bad1ebc5ddf8545e6a404851c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffff0f6fdc5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8deecfbc5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +4047501214178b9cafc5ddf8c5ddf8a6bbd20e101272808f667381111316 +b7cee7c5ddf899acc18d9eb114171a7887978d9eb1bed6f0c3dbf6181b1f +6875836c7a890c0d0f697685c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +eff5fdffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +eff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf87b8a9b050606738291c5ddf8c5ddf8c5ddf8 +3239402c313748515b141619adc3dac5ddf88899ac5b67732125293a4149 +5b6773a3b6cdc5ddf8616d7a25292e4c55601c2023404851c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c8dff8ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffff0f6fdc5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8deecfb +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf89db0c6636f7dc1d9f4c5ddf8c5ddf8c5ddf899acc1525c6856616c +a6bbd2c5ddf8c5ddf8778696626e7b626e7b626e7b626e7bb9d0e9c5ddf8 +bad1eb687583636f7d8d9eb197a9bec5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8eff5fdffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8bed5ef93a5b9bbd2ecc5ddf8c5ddf8 +c5ddf8c1d8f38b9caf8191a3b4c9e2c5ddf8c5ddf8a9bdd493a5b993a5b9 +93a5b993a5b9b4cae3c5ddf8c5ddf8a9bed58899acb2c8e0a4b8cfc5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c8dff8ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffff0f6fdc5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +deecfbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8eff5fdffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffff0f6fdc5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8deecfbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8eff5fdffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8bed5ef +b4cae3c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8bad1ebbfd6f1c5ddf8c5ddf8c5ddf8 +b5cbe4c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffffffff0f6fd +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8deecfbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8eff5fdffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +8a9bae404851c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c4dcf72a2f35b4c9e2c5ddf8c5ddf8 +c5ddf84048519cafc4c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +f0f6fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8b8cfe8a6bbd2c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf82f343bb4c9e2 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf893a5b9667381c5ddf8c5ddf8c5ddf890a2b5697584 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8deecfbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8eff5fdffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf88a9bae404851c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf88798ab49525cc5ddf8c5ddf8 +c5ddf8c5ddf896a9bd3a4149c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8a2b6ccafc4dcc5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffff0f6fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c3dbf6c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf88b9caf394148c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf81a1d21 +b0c6dec5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf830363da3b7cec5ddf8c5ddf8c5ddf8c1d8f3 +1f2327b8cfe8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8deecfbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8b7cde6c3dbf6c5ddf8c5ddf8c3dbf6b7cee7 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8eff5fdffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8b1c7df +545f6a23272c6975844e5863c5ddf8c5ddf897a9be323940282d33768494 +c0d7f2c5ddf87a899a6975843a41492b3036899aadc5ddf8c5ddf8a9bdd4 +4a535d262b3057616d404851c5ddf8c5ddf88798ab2c32382f353c8190a2 +c4dcf7c5ddf8c5ddf8535d698595a83a41491b1f237f8fa0c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf832394093a5b9c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf81b1e22abc0d7c5ddf8c5ddf8c5ddf8c5ddf8 +92a3b77c8b9cc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8b9d0e98495a73f474f0d0f11515b66c4dcf7 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffff0f6fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8a5b9d0262b300d0f110d0e10383f46b4cae3c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf896a9bd8797aa65717f677482bad0eac5ddf8c5ddf8 +c1d8f36c79884c5560738190c3dbf6c5ddf8c5ddf8abc0d76a77864a545e +6c7a89c5ddf8c5ddf86774824048511b1e225b6773616d7ac5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8adc2d958636f778696 +7c8b9caec3dbc5ddf8c5ddf88495a7515b668292a4c1d9f4c5ddf8bfd6f1 +65717f95a8bc525c688798abc4dcf7c5ddf8c5ddf8a3b7ce55606b8495a7 +1a1d21b0c6dec5ddf8c3dbf6798898515b668d9eb1c4dcf7c5ddf8c5ddf8 +a5b9d07c8b9c92a4b8515b66697584c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf898abc02f353cc5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8626e7b667381c5ddf8c5ddf8c5ddf8c5ddf8bfd6f199acc1bbd2ec +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8deecfbc5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8b6cce5272c31c4dcf7c5ddf8c5ddf8c3dbf6 +252a2fb9d0e9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8bdd4ee899aad6a7786bed6f0 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8eff5fdffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +404851626e7cb4cae33d444c272c31c5ddf8afc4dc0d0e1091a2b6b8cfe8 +434b548393a5c5ddf8657280191c20a8bcd496a9bd1d2024c5ddf8c5ddf8 +282d327f8fa0afc4dc2a2f35404851c5ddf89cafc51214179db0c6b3c9e1 +2f353c9cafc5c5ddf8c5ddf8323940262b308d9eb1b7cee7a2b6ccc5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf80d0e10b2c8e0 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf83941488595a8c5ddf8c5ddf8c5ddf8 +c5ddf857616d292e34c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf89fb3c9626e7b2125290e10120a0b0c04050549525cc4dcf7 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffff0f6fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8aabfd60e101200000000000000000002020216191cbdd4ee +c5ddf8c5ddf8c5ddf8c5ddf86c7a890c0d0f6e7b8b6c7988171a1ec2daf5 +c5ddf84a545e383f468798ab31373e5c6874c5ddf8c5ddf82a2f35798898 +9db0c66f7c8cc5ddf8c5ddf899acc16875832b303693a5b995a8bcc5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8a6bad116191c7c8b9c +56616c06070897a9bec5ddf86875832c31378899ac5b6773404750c5ddf8 +bad1eb0506064c5560899aad1d20249aadc2c5ddf88fa1b42125298494a6 +444d56040505b0c6dec5ddf84e58633941488b9cb04a545e596470c5ddf8 +c5ddf88899ac1b1f233941488292a4687583c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf86a778656616cc5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf88798ab394047c5ddf8c5ddf8c5ddf8c5ddf8acc1d8000000 +9aadc2c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8deecfbc5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf85f6a77738190c5ddf8c5ddf8c5ddf8 +c5ddf86d7b8a64707ec5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8a9bdd46c7a89272c31030303101315acc1d8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8eff5fdffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffeff5fdc5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c2daf50d0e10b5cbe4c5ddf88595a8272c31c5ddf8748292292e348b9cb0 +8a9bae616d7a454e57c5ddf8657280525c68c5ddf8c5ddf80f1113b6cce5 +b6cce50d0e10c4dcf7c5ddf86a7786404851c5ddf85b66723c434b8b9cb0 +899aad4f59645f6b78c5ddf8c5ddf832394065717fc5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8b3c9e1070809 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8545e6a657280c5ddf8c5ddf8 +c5ddf8c5ddf8b4c9e2adc2d9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8b8cfe8 +8393a53d454d0f11130f11130202020000000000000a0c0d4a545ec5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffff0f6fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8394148000000000000000000000000000000050606 +677482c5ddf8c5ddf8c5ddf8c5ddf86c7a8931373ec5ddf8c5ddf82d3339 +9baec3c3dbf6030404a6bad1c5ddf898abc0101315c5ddf8c2daf5101315 +8e9fb2c2daf5c5ddf8c5ddf8c5ddf8c5ddf88b9caf394148c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf86c7a8955606b +c5ddf8c4dcf70b0d0e97a9bec5ddf80d0e109aadc2bcd3edb9d0e91b1f23 +bed5efbad1eb000000b5cbe4c5ddf85c6874697685c5ddf8545e6a717f8e +c5ddf8b4cae3000000b0c6deb7cee7060607adc3dabbd2ecb0c5dd1e2226 +c5ddf8c5ddf88899ac070809bed6f0c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf849525c72808fc5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8a3b7ce171a1dc5ddf8c5ddf8c5ddf8c5ddf8bad1eb +748292b4c9e2c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8deecfbc5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf82f343b677482 +23272c677482bbd2ecc5ddf8c5ddf87d8c9d292e34353b438899acc5ddf8 +c5ddf8c5ddf8474f59899aad363d451d20248b9cafc5ddf898aabf3e464e +23272c363c44bbd2ecc5ddf8c1d9f45b67731f23272a2f3591a2b6c5ddf8 +c5ddf8464e58758393282d32434b54acc1d8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c3dbf60d0e10bad1ebc5ddf8c5ddf8 +c5ddf8c5ddf8b7cde6101214c5ddf8c5ddf8c5ddf8c5ddf8c5ddf87e8e9f +8fa1b4c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c0d7f28fa1b44c55601315180e101203040400000014171aacc1d8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8eff5fd +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffeff5fd +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8bad1eb060708c0d7f2c5ddf895a7bb272c31c5ddf8687583292e34 +6875836875836875837b8a9bc5ddf865728065717fc5ddf8c5ddf815181b +afc4dca2b6cc1b1f23c5ddf8c5ddf87d8c9d404851c5ddf84e5863373e46 +6875836875836875838797aac5ddf8c5ddf83239408fa1b4c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8bed5ef +030404c0d7f2c5ddf8c5ddf8c5ddf8c5ddf8c5ddf849525c72808fc5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8bfd6f1707d8d131518 +00000003030300000000000000000000000000000002020216191c434b54 +434b54434b54434b54434b54434b54434b54434b54434b54434b54434b54 +434b54434b54434b54434b54434b54434b54434b54434b54434b54434b54 +434b54434b54434b54434b54434b54434b54434b54434b54434b54434b54 +434b54434b54434b54434b54434b54434b54434b54434b54434b54434b54 +434b54434b54434b54434b54434b54434b54434b54434b54434b54434b54 +434b54434b54434b54434b54434b54434b54434b54434b54434b54444c54 +575757575757575757575757575757575757575757575757575757575757 +575757575757575757575757575757575757575757575757575757575757 +575757575757575757575757575757575757575757575757575757575757 +575757575757575757575757575757575757575757575757575757575757 +575757575757575757575757575757575757575757575757575757575757 +575757575757575757575757575757515456434b54434b54434b54434b54 +434b54434b54434b54434b54060607000000000000000000000000000000 +000000323940c5ddf8c5ddf8c5ddf8c5ddf86c7a894e5762c5ddf8c5ddf8 +4a535d717f8eb6cce5040505c4dcf7c5ddf8b8cfe8000000c1d9f4c5ddf8 +92a4b8363d450c0d0f58636fc5ddf8c5ddf8c5ddf88b9caf394148c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf847505a +738291c5ddf8c5ddf8282d3297a9bebcd3ed000000363d45363d45363d45 +363d45a6bbd2bad1eb101214c5ddf8c5ddf86a77865a6571c5ddf82d3339 +8ea0b3c5ddf8c5ddf80f1113b0c6dea2b6cc070809363d45363d45363d45 +363d45b9d0e9c5ddf88899ac353b43c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8474f59738291c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8a6bad115181bc5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8deecfbc5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8050606 +56616cb6cce54b545f64707ec5ddf88ea0b31a1d21a3b7ceaec3db25292e +acc1d8c5ddf8c5ddf823272c2f343b94a6bab5cbe4a5b9d0c5ddf8282d33 +98abc0c5ddf8a6bbd2bed6f0c5ddf87583932a2f35aec3db8e9fb20d0e10 +b7cee7c5ddf822272b49525cb9d0e956616c606c79c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8a9bdd416191cc5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8101214afc4dcc5ddf8c5ddf8c5ddf8c5ddf8 +2d3339535d69c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8afc4dc +7482922d33390d0e100c0d0f00000000000000000000000014171aacc1d8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c4dcf7c3dbf6 +c2daf5c1d9f4c1d8f3c0d7f2bfd6f1bed6f0bed5efbed5efbdd4eebcd3ed +bbd2ecbad1ebbad0eab9d0e9b8cfe8b7cee7b7cde6b6cce5b6cce5b5cbe4 +dbe1e8e9e9e9e8e8e8e7e7e7e6e6e6e5e5e5e4e4e4e3e3e3e2e2e2e2e2e2 +e1e1e1e0e0e0dfdfdfdedededddddddcdcdcdbdbdbdadadad9d9d9d8d8d8 +d8d8d8d7d7d7d6d6d6d5d5d5d4d4d4d3d3d3d2d2d2d1d1d1d0d0d0dbdbdb +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +eff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf82c323898aabfc5ddf8687583272c31c5ddf88b9cb0 +1b1e22c5ddf8c5ddf8c5ddf8c5ddf8c5ddf865728065717fc5ddf8c5ddf8 +15181bafc4dcc4dcf7101315bad1ebc5ddf8545e6a404851c5ddf872808f +333a41c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf832394092a3b7c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf81b1e22a6bbd2c5ddf8c5ddf8c5ddf8c5ddf8c5ddf82d333993a5b9 +c5ddf8c5ddf8c5ddf8c5ddf8a0b4ca8494a6c5ddf8c5ddf8c5ddf8c0d7f2 +7c8b9c3f474f1013150c0d0f0405050000000000000000000000000d0e10 +8797aa9fb3c99fb3c99fb3c99fb3c99fb3c99fb3c99fb3c99fb3c99fb3c9 +9fb3c99fb3c99fb3c99fb3c99fb3c99fb3c99fb3c99fb3c99fb3c99fb3c9 +9fb3c99fb3c99fb3c99fb3c99fb3c99fb3c99fb3c99fb3c99fb3c99fb3c9 +9fb3c99fb3c99fb3c99fb3c99fb3c99fb3c99fb3c99fb3c99fb3c99fb3c9 +9fb3c99fb3c99fb3c99fb3c99fb3c99fb3c99fb3c99fb3c99fb3c99fb3c9 +9fb3c99fb3c99fb3c99fb3c99fb3c99fb3c99fb3c99fb3c99fb3c99fb3c9 +a3b5c9cfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcf +cfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcf +cfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcf +cfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcf +cfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcf +cfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfc3c8cd9fb3c99fb3c99fb3c9 +9fb3c99fb3c99fb3c99fb3c99fb3c9181b1f000000000000000000000000 +00000000000047505ac5ddf8c5ddf8c5ddf8c5ddf86c7a8930363dc5ddf8 +c5ddf82c323898abc0c3dbf6040505a5b9d0c5ddf898aabf111316c5ddf8 +c5ddf8c5ddf8c5ddf893a5b90f11139fb3c9c5ddf8c5ddf891a2b6343a42 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +738291505a65c5ddf8c1d9f407080997a9bec5ddf80d0e109cafc4c5ddf8 +c5ddf8c5ddf8c5ddf8bad1eb101214c5ddf8c5ddf86a77865a6571c5ddf8 +56616c707e8dc5ddf8b4c9e2000000b0c6deb7cee7030303b3c9e1c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf88899ac3c434bc5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf868758358636f +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8899aad363c44c5ddf8c5ddf8c5ddf8 +c5ddf8c3dbf6acc1d8bed5efc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8deecfb +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +050606a2b6ccc5ddf895a7bb2f343bc5ddf84b545f474f598b9cb0899aad +444d566f7c8cc5ddf8c5ddf823272c748292c5ddf8c5ddf8c5ddf8c5ddf8 +31373e505a6595a8bcc3dbf6c5ddf8c5ddf84047506c7a89c5ddf8c5ddf8 +21262a8b9cafc5ddf822272b95a8bcc5ddf892a3b7333a41c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8899aad30363dc5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf82b30368fa1b4c5ddf8c5ddf8c5ddf8 +c5ddf8adc3dab3c9e1c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8b5cbe4515b67 +000000000000000000000000000000000000000000000000010101141719 +1e22261e22261e22261e22261e22261e22261e22261e22261e22261f2327 +20242821252921262a22272b23272c24282d25292e252a2f262b30272c31 +272c31282d32282d33292e342a2f352b30362c31372c32382d33392e343a +2f343b393b3d3e3e3e3f3f3f404040414141424242434343444444454545 +4646464747474848484848484949494a4a4a4b4b4b4c4c4c4d4d4d4e4e4e +4f4f4f5050505151515252525353535353535454545555555656564c4c4c +484848ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf88797aa1d20244047502f353c272c31c5ddf8 +c5ddf8404750262b30626e7b49525c5d6875c5ddf865728065717fc5ddf8 +c5ddf815181bafc4dcc5ddf8616d7a25292e4c55601c2023404851c5ddf8 +bed6f02c32382f353c636f7d414952738190c5ddf8c5ddf832394092a3b7 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf84f59647a899ac5ddf8c5ddf8c5ddf8c5ddf8bbd2ec171a1d +bbd2ecc5ddf8c5ddf8c5ddf8c5ddf8616d7a1b1e22c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8acc1d8707e8d2b30360d0f110d0e10000000 +000000101214a6bad1c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c8dff8ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffff0f6fdc5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf86a77860a0b0c000000000000 +0000000000000d0e1094a6bac5ddf8c5ddf8c5ddf8c5ddf86c7a890b0d0e +6b7887697685171a1dc2daf5c5ddf84c5560353b438696a92e343a5d6875 +c5ddf8bad0ea5f6b7898aabf8797aa171a1ebdd4eec5ddf8c5ddf8bed5ef +10121477869690a2b5c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8adc2d9181b1f657280454e5710121497a9bec5ddf8687583282d33 +8191a38e9fb2535d69c3dbf6bad1eb101214c5ddf8c5ddf86a77865a6571 +c5ddf88fa1b41e21258292a4414952040505b0c6dec5ddf84e5863363c44 +8899ac899aad5b6773c5ddf8c5ddf88899ac3c434bc5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf892a3b7 +363c44c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8657280606c79c5ddf8c5ddf8 +c5ddf8c5ddf8b8cfe80000008798abc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +deecfbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8050606b3c9e1c5ddf8a6bad116191cc5ddf83f474f3f474f687583 +6875836875838ea0b3c5ddf8c5ddf823272c9fb2c8c5ddf8c5ddf8c5ddf8 +c5ddf8bad0ea6f7c8c1a1d211e2125b6cce5c5ddf8363d458190a2c5ddf8 +c5ddf8343a427f8fa0c5ddf822272ba8bcd4c5ddf898aabf2c3238c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf896a9bd252a2f +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf82024289cafc4c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8b9d0e98595a8414952101315101214030303000000000000000000 +0d0f119cafc5c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8eff5fdffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +dfdfdf494949ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8bed5ef9fb3c98797aa4d5661 +c5ddf8c5ddf8c5ddf899acc17c8b9c92a4b8c1d8f3c5ddf8adc3daadc2d9 +c5ddf8c5ddf899acc1bfd6f1c5ddf8c5ddf8a9bed58899acb2c8e0a4b8cf +c5ddf8c5ddf8c3dbf693a5b97c8b9c98abc0c3dbf6c5ddf8c5ddf8a0b4ca +b8cfe8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8acc1d82a2f35c5ddf8c5ddf8c5ddf8c5ddf872808f +626e7cc5ddf8c5ddf8c5ddf8c5ddf8c5ddf83b424a667381c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8bfd6f18ea0b3 +4b545f1416190506060a0c0da6bad1c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffff0f6fdc5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c3dbf63a41490d0e10 +0000000101010e10125e6976c5ddf8c5ddf8c5ddf8c5ddf8c5ddf86c7a89 +525c68626e7c677482bad0eac5ddf8c5ddf8c1d8f36c79884c5560738190 +c3dbf6c5ddf8c1d8f36f7c8c4b545f65717fa3b6cdc5ddf8c5ddf8c5ddf8 +c5ddf8a8bcd4717f8e667381c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8bad1eb72808f93a5b925292eaec3dbc5ddf8c5ddf8 +899aad515b67515b67808fa1c5ddf8c0d7f26a7786c5ddf8c5ddf898aabf +8fa1b4c5ddf8c5ddf8a3b7ce55606b8797aa707d8dbad1ebc5ddf8c4dcf7 +7d8d9e4e586355606b8c9db1c5ddf8c5ddf8a6bbd28190a2c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8282d33aabfd6c5ddf8c5ddf8c5ddf8c3dbf6202428b3c9e1c5ddf8 +c5ddf8c5ddf8c5ddf89db0c6090a0bb4cae3c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8deecfbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf80506068e9fb2c5ddf88190a247505ac5ddf8626e7b434c55 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf823272ca1b5cbc5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8bad1eb25292e899aadc5ddf8525c68545f6a +c5ddf8c4dcf70d0e109fb2c8c5ddf822272ba8bcd4c5ddf898aabf2c3238 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8b7cde6 +0a0c0dc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c4dcf7060708bbd2ecc5ddf8 +c5ddf8c5ddf8c5ddf891a2b693a5b9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8a3b7ce68758325292e0e1012 +0c0d0f0000000a0b0c9cafc4c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8eff5fdffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffdddddd4a4a4affffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf892a4b88797aa8c9db12d3339 +8b9cb0c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8677482adc3dac5ddf8c5ddf8c5ddf8 +5c6874b8cfe8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf83d444cbbd2ecc5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8a9bed56e7b8b4c5560aec3dbc5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffffffff0f6fd +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +90a2b55b667264707e9fb2c8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +6c7a8958626ec5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c4dcf79db0c6c4dcf794a6ba262b30c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8899aad5f6b78c5ddf8c5ddf8c5ddf88e9fb25a6571c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf86a77865e6976c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8deecfbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8050606272c31545e6a1b1f2391a2b6c5ddf8b8cfe8 +24282d363c44636f7d3c434b808fa1c5ddf8c5ddf823272ca1b5cbc5ddf8 +c5ddf8c5ddf8c5ddf82b3036636f7d5b66721a1d21bed5efc5ddf8a6bbd2 +1013154a545e282d333d444cc5ddf8c5ddf822272ba8bcd4c5ddf898aabf +2c3238c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8262b30a4b8cfc5ddf8c5ddf8c5ddf8c5ddf89cafc52c3137c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8383f46444d56c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +bdd4ee8b9caf48515b10121408090a9aadc2c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8eff5fdffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffdcdcdc4b4b4bffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8a4b8cf5d68755d6875 +a4b8cfc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +f0f6fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8808fa1707d8dc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf88292a48190a28190a2 +8190a28190a2a2b6ccc5ddf8c3dbf63d444c25292e525c68a3b7cec5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c1d9f4c3dbf6c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8deecfbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8050606adc2d98495a7bbd2ecc5ddf8c5ddf8 +c5ddf8c1d8f38fa1b47d8c9d9cafc5c4dcf7c5ddf8c5ddf89cafc5bcd3ed +c5ddf8c5ddf8c5ddf8c5ddf8a6bad17f8fa091a2b6c0d7f2c5ddf8c5ddf8 +c5ddf8b0c6de8190a28d9eb1c2daf5c5ddf8c5ddf89cafc5bed5efc5ddf8 +bad0ea9fb2c8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf88696a94f5964c5ddf8c5ddf8c5ddf8c5ddf849525c8b9cb0 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf812141790a2b5c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8a9bed57d8c9dbdd4eec5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8eff5fdffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffdbdbdb4c4c4cffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffff0f6fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8deecfbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8050606bfd6f1c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c4dcf7535d69c2daf5c5ddf8c5ddf8c1d8f3545e6a +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8b0c6de48515bc5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8eff5fdffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffdadada4e4e4effffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffff0f6fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8deecfbc5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf85f6a77c2daf5c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8eff5fdffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffd9d9d94f4f4fffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffff0f6fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8b8cfe8c2daf5c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8deecfbc5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8eff5fdffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffd8d8d8505050ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffeff5fdc5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffff0f6fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf87e8e9f282d335b6773c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8deecfbc5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8eff5fd +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffd7d7d7515151ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffeff5fd +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffff0f6fdc5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8bad0ea131518c4dcf7c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8deecfbc5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c1d8f38797aab1c7dfc5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +eff5fdffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffd5d5d5525252 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +eff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c8dff8ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffff0f6fdc5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf80a0c0dc0d7f2c5ddf8c5ddf8 +c5ddf8c5ddf898abc0758393c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8deecfb +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c0d7f2697584171a1e9fb3c9 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8eff5fdffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffd4d4d4 +535353ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c8dff8ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffff0f6fdc5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8171a1dadc2d9c5ddf8 +c5ddf8c5ddf8c5ddf86673811a1d21c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +deecfbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf85f6a77 +6c7a89c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8eff5fdffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +d3d3d3545454ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffff0f6fdc5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8657280333a41 +8494a6c5ddf8c5ddf8c5ddf8b6cce5aabfd6c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8deecfbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +697584626e7bc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8363d4594a6bac5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8eff5fdffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffd2d2d2555555ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffffffff0f6fd +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf85c6874 +3d454d91a2b6c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8deecfbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf87e8e9f414952c5ddf8c5ddf8c5ddf8c5ddf8c5ddf81113168798ab +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8eff5fdffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffd1d1d1575757ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +f0f6fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +14171ab0c5ddc5ddf8c5ddf8c5ddf8c5ddf8a6bbd27d8d9ec5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8deecfbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8b9d0e92d33392a2f35abc0d7c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8eff5fdffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffd0d0d0585858ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8b5cbe4bcd3edc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8bed5efb4cae3c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffff0f6fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf80a0c0dc0d7f2c5ddf8c5ddf8c5ddf8c5ddf8717f8e0b0d0ec5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8deecfbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf896a9bd21262a9db0c6c1d9f4c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8eff5fdffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffcfcfcf595959ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8474f597d8d9ec5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf88a9bae404851c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffff0f6fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8b7cee714171ac5ddf8c5ddf8c5ddf8c5ddf8c5ddf84b545f57616d +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8deecfbc5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf86d7b8a5a6571c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8515b668fa1b4c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8eff5fdffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffcdcdcd5a5a5affffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8b5cbe4bcd3edc5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf88a9bae404851c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffff0f6fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf87887972c3137667381c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8444d56 +b4c9e2c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8deecfbc5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8677482626e7cc5ddf8c5ddf8c5ddf8 +c5ddf8c3dbf60607087d8c9dc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8eff5fdffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffcccccc5b5b5bffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffeff5fdc5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +b2c8e0394148c5ddf8c5ddf8c5ddf83f474facc1d8c5ddf88a9bae282d32 +202428626e7cc4dcf7c5ddf8aabfd62a2f352a2f358e9fb2c5ddf8c5ddf8 +c5ddf8a9bdd44a535d262b3057616d404851c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffff0f6fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8deecfbc5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8bdd4ee3c434b8798abc5ddf8c5ddf8 +c5ddf8c5ddf89cafc5171a1dc0d7f2c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8eff5fd +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffcbcbcb5c5c5cffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffeff5fd +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8262b309baec3c5ddf8a3b6cd1e2226c5ddf8b1c7df0a0c0d +92a3b7abc0d7262b307f8fa0c5ddf8c5ddf8c5ddf8474f597d8d9ec5ddf8 +c5ddf8c5ddf8282d327f8fa0afc4dc2a2f35404851c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffff0f6fdc5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8deecfbc5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8bcd3ed373e465d6875bbd2ecc5ddf8 +c5ddf8c5ddf8c5ddf89baec38fa1b4c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +eff5fdffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffcacaca5d5d5d +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +eff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf86c7a8957616dc5ddf85f6a7765717fc5ddf88393a5 +292e34c5ddf8c5ddf865717f47505ac5ddf8c5ddf8c5ddf8474f597d8d9e +c5ddf8c5ddf8b6cce50d0e10c4dcf7c5ddf86a7786404851c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c8dff8ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffff0f6fdc5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8deecfb +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8eff5fdffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffc9c9c9 +5f5f5fffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8b1c7df16191cc3dbf61b1f23abc0d7c5ddf8 +7988983d454dc5ddf8c5ddf87786963c434bc5ddf8c5ddf8c5ddf8474f59 +7d8d9ec5ddf8c5ddf8a2b6cc1b1f23c5ddf8c5ddf87d8c9d404851c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c8dff8ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffff0f6fdc5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +deecfbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8eff5fdffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +c8c8c8606060ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8343a426a77862c3238c5ddf8 +c5ddf895a7bb121417c5ddf8c5ddf84e58635b6773c5ddf8c5ddf8c5ddf8 +474f597d8d9ec5ddf8c5ddf8c4dcf7101315bad1ebc5ddf8545e6a404851 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffff0f6fdc5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8deecfbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8eff5fdffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffc7c7c7616161ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf87b8a9b050606738291 +c5ddf8c5ddf8c5ddf83239402c313748515b141619adc3dac5ddf88899ac +5b67732125293a41495b6773a3b6cdc5ddf8616d7a25292e4c55601c2023 +404851c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffffffff0f6fd +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8deecfbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8eff5fdffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffc5c5c5626262ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8bed5ef93a5b9 +bbd2ecc5ddf8c5ddf8c5ddf8c1d8f38b9caf8191a3b4c9e2c5ddf8c5ddf8 +a9bdd493a5b993a5b993a5b993a5b9b4cae3c5ddf8c5ddf8a9bed58899ac +b2c8e0a4b8cfc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +f0f6fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8deecfbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8eff5fdffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffc4c4c4636363ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffff0f6fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8deecfbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8eff5fdffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffc3c3c3646464ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8bed5efbdd4ee +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8adc2d9 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8b9d0e9c1d9f4c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffff0f6fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8deecfbc5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8eff5fdffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffc2c2c2656565ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf83d454d +9fb2c8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +050606c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8748292b9d0e9c5ddf8c5ddf8c5ddf8c5ddf8717f8e6c7988c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffff0f6fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8deecfbc5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8eff5fdffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffc1c1c1676767ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffeff5fdc5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8a0b4ca +30363dc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8050606c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8191c20abc0d7c5ddf8c5ddf8c5ddf8c5ddf8bbd2ec1d2024 +bed5efc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8a0b4ca64707e56616cbbd2ecc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffff2f7fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8e0edfbc5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8eff5fd +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffc0c0c0686868ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffeff5fd +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf87a899a262b301e21253d454dadc2d9c5ddf8c5ddf893a5b9 +323940343a42606c798696a9c5ddf8c2daf568758325292e40485198abc0 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +4c5560798898c5ddf8c5ddf8c5ddf8c1d9f458636f292e34262b308190a2 +c5ddf8c5ddf805060674829223272c515b66bad0eac5ddf8c4dcf7657280 +212529272c318797aac5ddf8c5ddf8c5ddf83f474f8b9caf333a411e2226 +92a4b87d8d9e2a2f3505060625292e2a2f358a9baec5ddf8c5ddf8c5ddf8 +4b545f7a899ac5ddf8c5ddf8c5ddf8c5ddf8a8bcd4687583c2daf5c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8bad0ea8495a7 +3e464f1012140304041b1f22b7cde6c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffcde1f9c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8f1f7fdc5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +eff5fdffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffbfbfbf696969 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +eff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf898aabfb7cee7c1d9f46c7988363d45c5ddf8b9d0e9 +1012149cafc59eb1c70d0e10717f8ec5ddf86d7b8a30363daec3dba3b7ce +1b1e22c1d8f3c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8262b3098abc0c5ddf8c5ddf8c5ddf88292a4414952c1d9f4bed6f0 +a6bbd2c5ddf8c5ddf802020264707ebad0ea3a41498191a3c5ddf88495a7 +202428a9bdd496a9bd0d0f11adc3dac5ddf8c5ddf8191c20343a4298aabf +b3c9e1a7bcd3c5ddf8c5ddf8191c20abc0d7c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf86a7786545f6ac5ddf8c5ddf8c5ddf8c5ddf88798ab000000bed6f0 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8a2b6cc63707d21252a0e0f11 +090a0c0000000203031d2125b7cde6c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c8dff8ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffeef5fdd0e3f9c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8cbe1f9e4effcffffff +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8eff5fdffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffbebebe +6a6a6affffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8bed5ef8ea0b35f6a774a535d191c20c5ddf8 +8595a83a4149c5ddf8c5ddf83b424a717f8ec5ddf82a2f355f6a778b9caf +899aad2d333990a2b5c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8070809b3c9e1c5ddf8c5ddf8c5ddf88b9cb01e21257d8d9e +b3c9e1c5ddf8c5ddf8c5ddf8020202b6cce5c5ddf8707e8d545f6ac5ddf8 +4f59645d6875c5ddf8c5ddf831373e7b8a9bc5ddf8c5ddf8191c207e8e9f +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8191c20abc0d7c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf88495a7353b43c5ddf8c5ddf8c5ddf8c5ddf8bbd2eca6bad1 +c4dcf7c5ddf8c5ddf8bbd2ec728090373d450d0f110c0e0f010202000000 +000000000000020202171a1e95a8bca0b4caa0b4ca9fb3c99fb2c89fb2c8 +9eb1c79db0c69db0c69cafc59cafc49cafc49baec39aadc29aadc299acc1 +98abc098abc098aabf98aabf97a9be96a9bd96a9bd95a8bc95a7bb95a7bb +94a6ba93a5b993a5b992a4b892a3b792a3b791a2b691a2b690a2b58fa1b4 +8fa1b48ea0b38e9fb28e9fb28d9eb18c9db18c9db18b9cb08b9caf8b9caf +8a9bae8c9caeb2b2b2b1b1b1b1b1b1b0b0b0afafafafafafaeaeaeadadad +adadadacacacababababababaaaaaaaaaaaaa9a9a9a8a8a8a8a8a8a7a7a7 +a6a6a6a6a6a6a5a5a5a4a4a4a4a4a4a3a3a3a2a2a2a2a2a2a1a1a1a1a1a1 +a0a0a0cdcdcdffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fcfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdff +fbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdff +fbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdff +fbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdff +fbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdff +fbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdff +fbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdff +fbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdff +fbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdff +fbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdff +fbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdff +fbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdff +fbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffbfdfffeffffffffff +ffffffcae0f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8f4f8feffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +bcbcbc6b6b6bffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8454e57515b6790a2b5808fa114171a +c5ddf873819049525cc5ddf8c5ddf84a535d717f8ec5ddf81e2125515b66 +6875836875836875839eb1c7c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8141619a9bdd4c5ddf8c5ddf8c5ddf8c5ddf895a7bb +434b54050606758393c5ddf8c5ddf8050606c5ddf8c5ddf87685954e5762 +c5ddf8464e58717f8ec5ddf8c5ddf8434c55707d8dc5ddf8c5ddf8191c20 +a9bdd4c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8191c20abc0d7c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf87a8899414952c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8b8cfe8616d7a090b0c010101010102000000000000 +000000000000000000030304202428424a53434b54434c55434c55444d56 +444d56454e57464e58464e58474f5947505a47505a48515b49525c49525c +4a535d4a545e4a545e4b545f4c55604c55604d56614d56614e57624e5863 +4e58634f5964505a65505a65515b66515b67515b67525c68535d69535d69 +545e6a545f6a545f6a55606b55606b56616c57616d57616d58626e58636f +58636f5964705c6672757575767676777777777777787878797979797979 +7a7a7a7a7a7a7b7b7b7c7c7c7c7c7c7d7d7d7e7e7e7e7e7e7f7f7f808080 +808080818181828282828282838383838383848484858585858585868686 +8787875d5d5d787878ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffe3effcc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8d0e4f9ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffbbbbbb6c6c6cffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c2daf50a0c0dbdd4eec5ddf8717f8e +14171ac5ddf8a7bcd31e2125c4dcf7c4dcf71e2226717f8ec5ddf8404851 +65717fc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8343a428d9eb1c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf87382912f353cc5ddf8c5ddf8050606c5ddf8c5ddf8768595 +4e5762c5ddf8626e7b454e57c5ddf8c5ddf81b1f238fa1b4c5ddf8c5ddf8 +191c20abc0d7c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8282d339db0c6c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf85e6976626e7cc5ddf8c5ddf8c5ddf8c5ddf8 +b3c9e17a899abbd2ecc5ddf8c5ddf8c5ddf8c5ddf8b2c8e0798899333a41 +0e10120e10120000000000000000000c0e106c7988c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffafafaf787878ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffeffffeef5fdddebfbdcebfbdcebfbdcebfbdcebfb +dcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfb +dcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfb +dcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfb +dcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfb +dcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfb +dcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfb +dcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfb +dcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfb +dcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfb +dcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfb +dcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfb +dcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfbdcebfb +dcebfbdcebfbe9f2fcfefeffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffbababa6d6d6dffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8404851404851525c68 +30363d14171ac5ddf8c5ddf84c5560272c312c3238282d3372808fc5ddf8 +a6bad11a1d21424a53626e7b30363d9fb2c8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8697584616d7ac5ddf8c5ddf8c5ddf8 +6976854d56616976852b3036768494c5ddf8c5ddf8050606c5ddf8c5ddf8 +7685954e5762c5ddf8b0c6de14171a454e572f353c2e343ac4dcf7c5ddf8 +c5ddf8191c20abc0d7c5ddf8c5ddf8c5ddf8c5ddf8c5ddf86c7988252a2f +5a65719db0c6c5ddf8c5ddf8c5ddf831373e97a9bec5ddf8c5ddf8c5ddf8 +c5ddf892a3b7000000b0c5ddc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c2daf598aabf57616d191d200f11130607080404056a7786c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffaeaeae797979ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffb9b9b96f6f6fffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c4dcf793a5b9 +8c9db1bad0ea98abc0c5ddf8c5ddf8c5ddf8abc0d7b0c6de3e464e97a9be +c5ddf8c5ddf8bad0ea8a9bae7e8e9fa6bad1c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8bad1eb202428c0d7f2c5ddf8 +c5ddf8bad1eb8d9eb17f8fa0afc4dcc5ddf8c5ddf8c5ddf895a7bbc5ddf8 +c5ddf8b1c7dfa7bcd3c5ddf8c5ddf8b5cbe48292a48a9baec0d7f2c5ddf8 +c5ddf8c5ddf89aadc2bed6f0c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +b6cce594a6bab2c8e0c5ddf8c5ddf8a3b6cd32383fc5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf86c7988363c44c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8b3c9e17a899a343b420a0b0c +6e7b8bc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffadadad7a7a7affffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffb8b8b8707070ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf875839395a8bc7583931c2023 +c3dbf6c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf87887979cafc5 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf87c8b9c98abc0c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf85c68749cafc4c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c2daf59aadc2b9d0e9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffadadad7b7b7bffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffb7b7b7717171ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf88191a3535d69758393 +b9d0e9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffacacac7b7b7bffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffb6b6b6727272ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffeff5fdc5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffababab7c7c7cffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffb4b4b4737373ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffeff5fd +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffababab7d7d7d +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffb3b3b3747474 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +eff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c8dff8ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffaaaaaa +7d7d7dffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffb2b2b2 +757575ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c8dff8ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +a9a9a97e7e7effffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +b1b1b1767676ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffa9a9a97f7f7fffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffafcfef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafe +f6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafe +f6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafe +f6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafe +f6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafe +f6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafe +f6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafe +f6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafe +f6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafe +f6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafe +f6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafe +f6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafe +f6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef6fafef8fbfe +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffb0b0b0787878ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffa8a8a87f7f7fffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +f9fcfed8e8fac6ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8d1e4f9f5f9feffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffafafaf797979ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffa7a7a7808080ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffe1edfbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8d8e8faffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffaeaeae7a7a7affffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffa7a7a7818181ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffd1e4f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c6ddf8ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffacacac7b7b7bffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffa6a6a6818181ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffababab7c7c7cffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffa5a5a5828282ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffaaaaaa7d7d7dffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffeff5fdc5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8b5cbe4bcd3edc5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8bed5efb4cae3c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffa5a5a5838383ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffa9a9a97e7e7effffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffeff5fd +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8474f597d8d9ec5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf88a9bae404851c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffa4a4a4838383 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffa8a8a8808080 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +eff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8b5cbe4bcd3ed +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf88a9bae404851c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c8dff8ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffa3a3a3 +848484ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffa7a7a7 +818181ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8b2c8e0394148c5ddf8c5ddf8c5ddf83f474facc1d8 +c5ddf88a9bae282d32202428626e7cc4dcf7c5ddf8aabfd62a2f352a2f35 +8e9fb2c5ddf8c5ddf8c5ddf8a9bdd44a535d262b3057616d404851c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c8dff8ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +a3a3a3858585ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffd0e3f9c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +a6a6a6828282ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8262b309baec3c5ddf8a3b6cd1e2226 +c5ddf8b1c7df0a0c0d92a3b7abc0d7262b307f8fa0c5ddf8c5ddf8c5ddf8 +474f597d8d9ec5ddf8c5ddf8c5ddf8282d327f8fa0afc4dc2a2f35404851 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffa2a2a2858585ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffd0e3f9 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffa4a4a4838383ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf86c7a8957616dc5ddf85f6a77 +65717fc5ddf88393a5292e34c5ddf8c5ddf865717f47505ac5ddf8c5ddf8 +c5ddf8474f597d8d9ec5ddf8c5ddf8b6cce50d0e10c4dcf7c5ddf86a7786 +404851c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffa1a1a1868686ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +d0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffa3a3a3848484ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8b1c7df16191cc3dbf6 +1b1f23abc0d7c5ddf87988983d454dc5ddf8c5ddf87786963c434bc5ddf8 +c5ddf8c5ddf8474f597d8d9ec5ddf8c5ddf8a2b6cc1b1f23c5ddf8c5ddf8 +7d8c9d404851c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffa0a0a0878787ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffa2a2a2858585ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8343a42 +6a77862c3238c5ddf8c5ddf895a7bb121417c5ddf8c5ddf84e58635b6773 +c5ddf8c5ddf8c5ddf8474f597d8d9ec5ddf8c5ddf8c4dcf7101315bad1eb +c5ddf8545e6a404851c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffa0a0a0878787ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf88495a77482928798abc5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf88495a7bed5efc5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8b0c5dd90a2b5c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8a1b5cb748292748292bcd3edc5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffa1a1a1868686ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +7b8a9b050606738291c5ddf8c5ddf8c5ddf83239402c313748515b141619 +adc3dac5ddf88899ac5b67732125293a41495b6773a3b6cdc5ddf8616d7a +25292e4c55601c2023404851c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff9f9f9f888888ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf88ea0b3626e7c2e343a +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8181b1fb2c8e0c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf85a6571a2b6cc +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf893a5b94a535d +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8a6bbd28190a20e1012aec3db +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffa0a0a0888888ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8bed5ef93a5b9bbd2ecc5ddf8c5ddf8c5ddf8c1d8f38b9caf8191a3 +b4c9e2c5ddf8c5ddf8a9bdd493a5b993a5b993a5b993a5b9b4cae3c5ddf8 +c5ddf8a9bed58899acb2c8e0a4b8cfc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff9e9e9e898989ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c4dcf7afc4dcb9d0e9c5ddf8c5ddf8c5ddf896a9bd +2e343ac5ddf8c5ddf8c5ddf8c5ddf8c5ddf8b3c9e1b3c9e1c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8bdd4eeb0c6dec5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +b2c8e0bad0eac5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8b9d0e9b4c9e2c5ddf8c5ddf8c5ddf8181b1fb2c8e0 +b7cee7c2daf5c5ddf8c5ddf8c5ddf8c5ddf8b7cde6b7cde6c5ddf8c5ddf8 +c5ddf8c5ddf8c0d7f2c4dcf7c1d9f4b0c5ddc5ddf8c3dbf6bed6f02f343b +8fa1b4bed6f0c2daf5c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c0d7f2c4dcf7b7cde6c5ddf8c5ddf8c5ddf8c5ddf8c0d7f2bed6f0 +c1d8f3c5ddf8c5ddf8c5ddf8bfd6f1bad1ebbed5efc1d9f4bbd2ecc5ddf8 +c5ddf8bfd6f1c5ddf8b6cce5c5ddf8c5ddf8c5ddf8c5ddf8c5ddf816191c +aec3dbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff9f9f9f898989ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffeff5fdc5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff9e9e9e8a8a8affffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf895a7bb131518252a2f2024288494a6c5ddf8c5ddf8 +96a9bd2e343ac5ddf8c5ddf8c5ddf8c5ddf82d33392d3339282d3325292e +aec3dbc5ddf8c5ddf847505a2f343b373e463d454dc5ddf8c5ddf8a9bdd4 +282d33373e46282d337d8d9ec5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c2daf5363c44323940323940525c68c5ddf8c5ddf8181b1f +47505a282d321b1f239eb1c7c5ddf8c4dcf7454e57131518131518444d56 +c4dcf7c5ddf8c5ddf830363d616d7a14161923272c67748292a3b730363d +0b0d0e25292e30363d7b8a9bc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8292e34353b4321262a282d3295a7bbc5ddf8c5ddf84b545f +22272b383f46c5ddf8c5ddf8c5ddf80d0e1032383f15181b3941481e2125 +a1b5cbc5ddf8101214363c4424282d31373ea3b6cdc5ddf8c5ddf8c5ddf8 +16191caec3dbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff9e9e9e8a8a8affffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffeff5fd +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8bdd4eebdd4eec5ddf8c5ddf8c5ddf8b6cce5 +c4dcf7c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff9d9d9d8a8a8a +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c0d7f214171a8797aac5ddf8c4dcf7b3c9e1c5ddf8 +c5ddf896a9bd2e343ac5ddf8c5ddf8c5ddf8c5ddf8b7cde6c5ddf8c5ddf8 +5a65715c6874c5ddf8a6bbd21e2125c5ddf8c5ddf8bfd6f1c5ddf8c5ddf8 +5c6874687583c5ddf8c5ddf8bfd6f1c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf88d9eb1373e46c5ddf8c5ddf8bfd6f1c5ddf8c5ddf8 +181b1f72808fc5ddf86976855e6976c5ddf88798ab1f2327bed5efbfd6f1 +24282d8696a9c5ddf8c5ddf830363d31373eb7cee7c5ddf8bcd3edc5ddf8 +c5ddf830363d94a6bac5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8292e3455606bc5ddf892a3b732383fc5ddf8c5ddf8 +c5ddf88c9db1383f46c5ddf8c5ddf8c5ddf8060607c2daf5272c318696a9 +697584788797c5ddf8101214707d8dc5ddf87887974c5560c5ddf8c5ddf8 +c5ddf816191caec3dbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff9c9c9c8b8b8b +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +eff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf88c9db1a1b5cbc5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf83b424aa1b5cbc5ddf8c5ddf8c5ddf8 +57616d8595a8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c8dff8ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff9c9c9c +8b8b8bffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8a4b8cf0d0f11c2daf5c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf896a9bd2e343ac5ddf8c5ddf8c5ddf8c5ddf890a2b5505a65 +2b30361b1e224a535dc5ddf8c0d7f21e22263d454d768494bcd3edc5ddf8 +c5ddf88c9db1171a1e535d6992a3b7c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8b2c8e0171a1e454e577e8e9fc1d8f3c5ddf8 +c5ddf8181b1fa9bdd4c5ddf88c9db1383f46c5ddf8616d7a515b66c5ddf8 +c5ddf8535d695d6875c5ddf8c5ddf830363d768494c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf830363d94a6bac5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8292e348798abc5ddf8bfd6f1090a0bbed5ef +c5ddf8c5ddf88c9db1383f46c5ddf8c5ddf8c5ddf814171ac5ddf8383f46 +98abc0768595616d7ac5ddf8101214a1b5cbc5ddf8a9bed5171a1dc5ddf8 +c5ddf8c5ddf816191caec3dbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff9b9b9b +8c8c8cffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf88899ac4e576258636f9baec3c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf84c5560788797c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf89eb1c7323940c5ddf8c5ddf8c5ddf8 +c5ddf8abc0d7262b30c4dcf7c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c8dff8ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +9c9c9c8c8c8cffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffd0e3f9c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8a4b8cf0d0f11c2daf5c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf897a9be2d3339c5ddf8c5ddf8c5ddf8b9d0e916191c +a0b4cac4dcf769768547505ac5ddf8c5ddf8c2daf58a9bae1e222621262a +c5ddf8c5ddf8c5ddf8b4cae36774820506066c7988c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8bfd6f17f8fa01416193b424a +c5ddf8c5ddf8181b1fb2c8e0c5ddf88e9fb2363d45c5ddf8626e7b515b66 +c5ddf8c5ddf8535d695d6875c5ddf8c5ddf830363d94a6bac5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf830363d94a6bac5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8292e348797aac5ddf8bfd6f108090a +bcd3edc5ddf8c5ddf88c9db1383f46c5ddf8c5ddf8c5ddf8171a1ec5ddf8 +3b424a9cafc47988985e6976c5ddf8101214a0b4cac5ddf8a9bdd414171a +c5ddf8c5ddf8c5ddf8171a1dadc3dac5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +9a9a9a8d8d8dffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c1d8f32d33390b0d0e0000000000000b0d0e +5b6672c5ddf8c5ddf8c5ddf8c5ddf84f596465717f25292e525c68afc4dc +c5ddf8c5ddf88a9bae282d32202428626e7cc4dcf7c5ddf8c5ddf8667381 +2c323824282d6d7b8ac5ddf8a6bad12a2f351012141a1d212a2f35626e7c +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8626e7b636f7d +282d3347505aa7bcd3c5ddf8c5ddf8a3b7ce39414825292e6c7988bbd2ec +c5ddf8c5ddf87988987381904f59641b1f2357616dc5ddf8b7cee7505a65 +262b30292e3492a4b8c5ddf8c5ddf88899ac272c3121252964707ec4dcf7 +c5ddf87887976976853941482b30368b9cafc5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf84a535d7c8b9cc5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf831373e94a6bac5ddf8c5ddf8c5ddf8c5ddf89cafc5 +717f8ec5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff9b9b9b8c8c8cffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffd0e3f9 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c0d7f214171a8797aac5ddf8 +c4dcf7b4c9e2c5ddf8c5ddf8bad1eb131518bdd4eec5ddf8c5ddf89cafc4 +272c31c5ddf8bed6f02a2f3547505ac5ddf8bad1ebc1d8f3c5ddf8b4c9e2 +0e1012c0d7f2c5ddf8b6cce5c5ddf8c5ddf86c7988505a65c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8b7cee7c3dbf6c5ddf89cafc5 +1f2327c5ddf8c5ddf8181b1fb2c8e0c5ddf88e9fb2363d45c5ddf8899aad +1e2125bcd3edbed5ef22272b8899acc5ddf8c5ddf830363d94a6bac5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf84d5661798898c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8292e34535d69c5ddf88ea0b3 +31373ec5ddf8c5ddf8c5ddf88c9db1383f46c5ddf8c5ddf8c5ddf8171a1e +c5ddf83b424a9cafc47988985e6976c5ddf81012146c7a89c5ddf8758393 +4a545ec5ddf8c5ddf8c5ddf84047508696a9c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff9999998e8e8effffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf85c6874070809000000000000000000 +0000000d0f1197a9bec5ddf8c5ddf8c5ddf82e343a363d45b4c9e26e7b8b +3a4149c5ddf8b1c7df0a0c0d92a3b7abc0d7262b307f8fa0c5ddf89cafc5 +2b3036bfd6f1c2daf5a3b6cdc5ddf8c5ddf8c5ddf84c5560788797c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8454e57 +262b30adc3da8494a623272cc5ddf8bbd2ec141619808fa1bbd2ec55606b +6c7988c5ddf8c5ddf864707e101214798898b8cfe89cafc4c5ddf8697584 +596470c4dcf7bad0eaabc0d7c5ddf8b0c5dd0a0c0d93a5b9aabfd625292e +8292a4c5ddf8626e7c1b1f23a9bdd494a6ba202428c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf824282d9baec3c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8515b666e7b8bc5ddf8c5ddf8c5ddf8c5ddf8 +6e7b8b121417c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff9a9a9a8d8d8dffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +d0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf895a8bc171a1d +262b3022272b8495a7c5ddf8c5ddf8c5ddf86976851d202431373ec5ddf8 +c5ddf83d444c2a2f351b1e2247505a47505ac5ddf899acc1181b1f394047 +282d326d7b8ac5ddf8c5ddf856616c24282d363d452b3036a5b9d0c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf88393a51b1e22394047 +272c318191a3c5ddf8c5ddf8181b1fb2c8e0c5ddf88e9fb2363d45c5ddf8 +c4dcf7454e57111316121417444d56c4dcf7c5ddf8c5ddf830363d94a6ba +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf899acc12d3339282d33788797c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8292e34323940202428 +272c3195a7bbc5ddf8a2b6cc2a2f351e21250c0d0f2a2f355b6773c5ddf8 +171a1ec5ddf83b424a9cafc47988985e6976c5ddf8101214333a4122272b +30363da2b6ccc5ddf8c5ddf8c5ddf898aabf292e341e21259db0c6c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff9898984343437979797b7b7b7c7c7c7e7e7e7f7f7f818181 +8282828484848686868787878989898a8a8a8c8c8c8d8d8d8f8f8f909090 +9292929494949595959797979898989a9a9a9b9b9b9d9d9d9e9e9ea0a0a0 +a1a1a1a3a3a3a5a5a5a6a6a69da1a78292a48494a68495a78696a98797aa +8899ac8a9bae8b9caf8c9db18d9eb18ea0b3101215000000000000000000 +0000000000000000004e5762c5ddf8c5ddf8c5ddf82e343a798898c5ddf8 +bcd3ed0b0d0ec1d9f48393a5292e34c5ddf8c5ddf865717f47505ac5ddf8 +a5b9d0121417768494adc3dac5ddf8c5ddf8c5ddf8c5ddf84c5560788797 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +454e57626e7bc5ddf8c5ddf8101315b4c9e28b9cb0181b1f8b9cb08a9bae +717f8e2f343bc5ddf8c5ddf864707e333a41c5ddf8c5ddf8c5ddf8c5ddf8 +72808f2b30368495a7b8cfe8c5ddf8c5ddf88190a22c3238c5ddf8c5ddf8 +626e7c4a535dc5ddf8626e7c545f6ac5ddf8c5ddf80d0e10b8cfe8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c4dcf7050606b6cce5 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf86b78874e5863c5ddf8c5ddf8c5ddf8 +c5ddf8b7cee7a9bdd4c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff9a9a9a8e8e8effffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8b0c6debcd3edc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8b7cde6c1d9f4c5ddf8c5ddf8c5ddf8c5ddf8c1d8f3 +adc3dac3dbf6c5ddf8c5ddf8c5ddf8c5ddf8b9d0e9b4c9e2c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8bed6f0 +aec3dbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8b7cde6b7cde6c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8292e349baec3 +b6cce5c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8101214b4cae3 +b5cbe4c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffdfdfdfafafafadadadabababaaaaaaa8a8a8a6a6a6 +a4a4a4a3a3a3a1a1a19f9f9f9e9e9e9c9c9c9a9a9a989898979797959595 +9393939292929090908e8e8e8c8c8c8b8b8b898989878787868686848484 +8282828181817f7f7f7d7d7d7b7b7b7275795c68745b66725a657158636f +57616d55606b545f6a535d69515b67515b664f5964060607000000000000 +0000000000000000000000003a4149c5ddf8c5ddf8c5ddf82e343a8a9bae +c5ddf8c5ddf80a0c0db2c8e07988983d454dc5ddf8c5ddf87786963c434b +c5ddf8c5ddf89fb3c94e58630405055f6a77c5ddf8c5ddf8c5ddf84c5560 +788797c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8454e57738190c5ddf8c5ddf82024289baec37f8fa01d2024687583 +687583687583707e8dc5ddf8c5ddf864707e5f6a77c5ddf8c5ddf8c5ddf8 +c5ddf8c4dcf7899aad363d450a0b0c8a9baec5ddf8768595404750c5ddf8 +c5ddf87482923e464ec5ddf8626e7c687583c5ddf8c5ddf8121417b2c8e0 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8101315 +abc0d7c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8606c795b6773c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff9999998e8e8effffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8292e34 +9baec3c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8101214 +b4cae3c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8343a42000000 +000000000000000000000000060708707e8dc5ddf8c5ddf8c5ddf82e343a +64707ec5ddf8a9bed51e2226c5ddf895a7bb121417c5ddf8c5ddf84e5863 +5b6773c5ddf8c5ddf8c5ddf8c5ddf88e9fb216191cc5ddf8c5ddf8c5ddf8 +5b67736a7786c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8454e574d5661c5ddf8bed5ef0d0f11c1d9f4a2b6cc0a0c0d +bed6f0c5ddf8c5ddf8c5ddf8c5ddf8c5ddf864707e606c79c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf85b667249525cc5ddf892a4b814171a +c5ddf8c5ddf84c55605e6976c5ddf8626e7c687583c5ddf8c5ddf8121417 +b2c8e0c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +32383f8fa1b4c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8444d567c8b9cc5ddf8 +c5ddf8c5ddf8c5ddf8a9bdd47b8a9bc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff9898988f8f8fffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf89fb2c86e7b8b6e7b8b6e7b8b6e7b8b6e7b8bc0d7f2c5ddf8 +99acc1b9d0e9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +92a4b8c0d7f2c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8a8bcd4 +0f11130000000000000000000506061d2024c0d7f2c5ddf8c5ddf8c5ddf8 +2e343a1d2024505a65202428707e8dc5ddf8c5ddf83239402c313748515b +141619adc3dac5ddf87e8e9f454e576a7786363d455d6875c5ddf8c5ddf8 +c5ddf899acc1191c20545e6a8292a4c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8454e57191c204a545e262b305c6874c5ddf8c5ddf8 +56616c1e21255f6a774f59644b545fc5ddf8c5ddf864707e606c79c5ddf8 +c5ddf8c5ddf8c5ddf855606b545f6a6774822125298ea0b3c5ddf8c4dcf7 +30363d2d333947505a14171aafc4dcc5ddf8626e7c687583c5ddf8c5ddf8 +121417b2c8e0c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8667381636f7dc5ddf8c5ddf8c5ddf8c5ddf8c3dbf61d2024adc3da +c5ddf8c5ddf8c5ddf8c5ddf8788797030404c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff989898909090ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffeff5fdc5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8a8bcd42c32380b0d0e10131549525cbad1ebc5ddf8c5ddf8c5ddf8 +c5ddf82e343a8d9eb18595a8b0c5ddc5ddf8c5ddf8c5ddf8c1d8f38b9caf +8191a3b4c9e2c5ddf8c5ddf8bed6f092a3b77d8c9da8bcd4c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8bfd6f198abc0a6bad1c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8454e577b8a9b899aada8bcd4c5ddf8c5ddf8 +c5ddf8c5ddf8a0b4ca7d8c9d8e9fb2bed5efc5ddf8c5ddf8adc2d9acc1d8 +c5ddf8c5ddf8c5ddf8c5ddf8b6cce58899ac8393a5b4cae3c5ddf8c5ddf8 +c5ddf8c0d7f28a9bae8191a3b4cae3c5ddf8c5ddf8adc2d9adc3dac5ddf8 +c5ddf898abc0c0d7f2c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8bad0ea202428c1d8f3c5ddf8c5ddf8c5ddf8899aad4b545f +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8525c684f5964c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff979797909090ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffeff5fd +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf82e343a96a9bdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8454e577f8fa0c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf87685959eb1c7c5ddf8c5ddf8c5ddf86a7786 +a9bed5c5ddf8c5ddf8c5ddf8c5ddf8c5ddf849525cafc4dcc5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff969696919191 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c4dcf78494a658626eb4c9e2c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +eff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +b6cce5c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8758393acc1d8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8abc0d76e7b8b +6e7b8b6e7b8b6e7b8b6e7b8bb4c9e2c5ddf88191a39fb3c9c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c8dff8ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff969696 +929292ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf89eb1c721262a97a9bec1d8f3 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8515b6623272c8ea0b3c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c8dff8ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +959595929292ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffd0e3f9c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf86f7c8c55606bc5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf87e8e9f4e5762c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff949494939393ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffd0e3f9 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf86875835b6672 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf892a3b7394047c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf87c8b9c92a3b7c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff949494949494ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +d0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8bdd4ee394047 +7a8899c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf89eb1c725292ec5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8282d3358626ec5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff939393949494ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8b4c9e2131518 +212529bcd3edc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c1d8f32f343b515b66a3b6cd +c5ddf8c5ddf8c5ddf8adc2d9b4c9e2c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff929292959595ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c3dbf63f474f738190c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8bfd6f1262b305f6b78 +a9bed5c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff919191969696ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf86976855a6571c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf89cafc5282d32 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf88fa1b495a7bbc5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff919191979797ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8707e8d545e6ac5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffeff5fdc5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf892a3b7 +394047c5ddf8c5ddf8c5ddf8c5ddf8c5ddf832394049525cc5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff909090979797ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8a2b6cc1d20248b9cafbfd6f1c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffeff5fd +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +7a899a515b66c5ddf8c5ddf8c5ddf8c5ddf8c4dcf70e101295a7bbc5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff8f8f8f989898 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf892a3b7697685b7cde6c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +eff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +49525c2c323895a7bbc5ddf8c5ddf8c5ddf8c5ddf8adc2d94c5560c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c8dff8ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff8f8f8f +999999ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c2daf5c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c8dff8ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +8e8e8e999999ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffd0e3f9c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff8d8d8d9a9a9affffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffd0e3f9 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff8d8d8d9b9b9bffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +d0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf88696a95c6874c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8bad1eba4b8cf +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff8c8c8c9b9b9bffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf87d8c9d4e5762 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf895a7bb +2f353cc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff8b8b8b9c9c9cffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8b6cce57482924b545f636f7dbad0eac5ddf87d8c9d +4e576275839357616da3b6cdc5ddf8c5ddf8c2daf5707d8d4b545f6e7b8b +c1d9f4c5ddf8c5ddf8abc0d776849498abc0535d69626e7cc3dbf66c7a89 +454e5716191c5b67735b6773c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff8b8b8b9d9d9dffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf84e57625e69769db0c67a899ab0c6dec5ddf8 +7d8c9d1012146d7b8a798898141619c5ddf8c5ddf855606b32383f8798ab +363d45515b67c5ddf8c5ddf895a7bb171a1e373e467f8fa0697685c0d7f2 +9cafc46f7c8c24282d93a5b993a5b9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffeff5fdc5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff8a8a8a9d9d9dffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf830363d707e8dbed5efc5ddf8c5ddf8 +c5ddf87d8c9d2f343bc5ddf8c5ddf81e2226a7bcd3c5ddf80b0d0e9cafc4 +c5ddf8a3b6cd070809c4dcf7c5ddf895a7bb020202b7cde6c5ddf8c5ddf8 +c5ddf8c5ddf895a7bb2f353cc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffeff5fdc5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff8989899e9e9effffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8a3b7ce434c550c0d0f454e57 +b9d0e9c5ddf87d8c9d4e5762c5ddf8c5ddf82c323898aabfc0d7f2000000 +bed5efc5ddf8c1d8f3000000b7cee7c5ddf895a7bb282d32c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf895a7bb2f353cc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffeff5fd +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c8dff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff8989899f9f9f +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8a6bbd2 +2024287c8b9cc5ddf87d8c9d4e5762c5ddf8c5ddf82c323898aabfc5ddf8 +0c0d0f9baec3c5ddf8a2b6cc08090ac5ddf8c5ddf895a7bb2f353cc5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf89baec32a2f35c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +eff5fdc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c8dff8ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff888888 +9f9f9fffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8616d7a92a3b7 +90a2b51e2226a6bbd2c5ddf87d8c9d4e5762c5ddf8c5ddf82c323898aabf +c5ddf856616c2f343b8696a9333a41535d69c5ddf8c5ddf895a7bb2f353c +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c1d9f41113167583938d9eb1c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffff3f8fec5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8cbe0f9ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +878787a0a0a0ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffd0e3f9c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf87e8e9f +4f59645b667295a8bcc5ddf8c5ddf8a1b5cb899aadc5ddf8c5ddf8798898 +aec3dbc5ddf8c2daf5707d8d4b545f6e7b8bc1d9f4c5ddf8c5ddf8adc2d9 +7a899ac5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8aabfd6738291626e7b +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffcfe3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8e2eefbffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff878787a1a1a1ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffd0e3f9 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffe6f0fcc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c8dff8fbfdffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff868686a1a1a1ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +d0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffebf3fdcfe3f9c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c6def8d8e8faf1f7fdffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff858585a2a2a2ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffffffff3f8fe +f2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fd +f2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fd +f2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fd +f2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fd +f2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fd +f2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fd +f2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fd +f2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fd +f2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fd +f2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fd +f2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fd +f2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fd +f2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fd +f2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fd +f2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fdf2f8fd +f2f8fdf2f8fdfbfcfeffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff848484a3a3a3ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff848484a3a3a3ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8bfd6f1b3c9e1c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8bfd6f1 +bbd2ecc5ddf8c5ddf8c5ddf8b8cfe8c1d9f4c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff838383a4a4a4ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8748292b9d0e9c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf894a6ba363d45c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8b9d0e9748292c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +525c688a9baec5ddf8c5ddf8c5ddf86f7c8c6e7b8bc5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff828282a5a5a5ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8a6bbd27d8c9d8ea0b3bbd2ec +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8191c20abc0d7c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf894a6ba363d45c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8acc1d8181b1fc5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +b0c6de22272bc4dcf7c5ddf8c5ddf8c5ddf8bad0ea1e2125bed6f0c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff828282a6a6a6 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c1d9f4444c560d0f110606070c0d0f +12151792a4b9c5ddf8c5ddf8c5ddf8c5ddf8c1d9f42d333964707e24282d +6c7988bdd4eec5ddf8c4dcf7657280212529272c318696a9c5ddf8c5ddf8 +b7cee7505a65262b30292e3492a4b8c5ddf87d8d9e2a2f3505060625292e +2a2f358a9baec5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +acc1d849525c25292e2d3339a3b7cec5ddf894a6ba333a41515b6624282d +6c7988c5ddf8c5ddf8b9d0e948515b1c2023343a42a5b9d0c5ddf8c5ddf8 +b1c7df3e464e7f8fa0262b302a2f35b4c9e255606b25292e0506062a2f35 +2a2f35b2c8e0c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8616d7a64707ec5ddf8c5ddf8c5ddf8c5ddf8c5ddf849525c7d8c9d +c5ddf8c5ddf8c5ddf8c5ddf8a7bcd3687583c3dbf6c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff818181 +a6a6a6ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8606b7808090a000000000000 +0000000000000f1113b4cae3c5ddf8c5ddf8c5ddf8c1d8f30000005e6976 +b6cce5434c556d7b8ac5ddf88495a71f2327a9bdd496a9bd0d0f11adc3da +c5ddf8697584596470c4dcf7bad0eaabc0d7c5ddf8c5ddf8c5ddf8191c20 +abc0d7c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf84f596472808fc5ddf8b3c9e1b2c8e0c5ddf894a6ba02020291a2b6 +b1c7df141619b4c9e2c5ddf8515b67434b54b6cce56f7c8c212529c4dcf7 +c5ddf8acc1d80708094b545fabc0d7a3b7ceb8cfe8c5ddf8acc1d8181b1f +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf83b424a8494a6c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8687583 +57616dc5ddf8c5ddf8c5ddf8c5ddf88595a8000000c1d8f3c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +808080a7a7a7ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffd0e3f9c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8121517000000000000 +000000000000000000030404738292c5ddf8c5ddf8c5ddf8c1d8f3000000 +acc1d8c5ddf88b9cb0394047c5ddf8505a655c6874c5ddf8c5ddf832383f +7a899ac5ddf872808f2a2f358495a7b8cfe8c5ddf8c5ddf8c5ddf8c5ddf8 +191c20abc0d7c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf858636f3940478b9cb0bdd4eec5ddf8c5ddf894a6ba24282d +c5ddf8c5ddf83d454d8798abc5ddf81c202390a2b5c5ddf8bfd6f1040505 +aec3dbc5ddf8acc1d8000000b0c6dec5ddf8c5ddf8c5ddf8c5ddf8acc1d8 +181b1fc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf81b1f239eb1c7c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +8393a5373e46c5ddf8c5ddf8c5ddf8c5ddf8bbd2eca6bad1c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff7f7f7f4343436464646161615f5f5f5c5c5c595959565656535353 +5050504d4d4d4b4b4b4848484545454242423f3f3f3c3c3c3a3a3a373737 +3434343131312e2e2e2b2b2b2929292828282828282828282828281f2326 +1e22261e22261e22261e22261e22261e22261e22261d2125010202000000 +000000000000000000000000000000525d68c5ddf8c5ddf8c5ddf8c1d8f3 +000000bcd3edc5ddf89cafc41f2327c5ddf8464e58707e8dc5ddf8c5ddf8 +444d566f7c8cc5ddf8c4dcf7899aad363d450a0b0c8a9baec5ddf8c5ddf8 +c5ddf8191c20abc0d7c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c1d8f37e8e9f2b30361013159cafc5c5ddf894a6ba +363d45c5ddf8c5ddf8434c558190a2c5ddf8131518a4b8cfc5ddf8c5ddf8 +101315a3b6cdc5ddf8acc1d8171a1dc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +acc1d8181b1fc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8282d3394a6bac5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8778696434c55c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffdededec1c1c1c4c4c4c7c7c7cacacacccccccfcfcfd2d2d2 +d5d5d5d8d8d8dbdbdbdddddde0e0e0e3e3e3e6e6e6e9e9e9ebebebeeeeee +f1f1f1f4f4f4f7f7f7f9f9f9fcfcfcffffffffffffffffffffffffffffff +d0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8171a1d +0000000000000000000000000000000608097f8fa0c5ddf8c5ddf8c5ddf8 +c1d8f300000097a9bec5ddf8768595515b67c5ddf8626e7b444d56c5ddf8 +c5ddf81b1f238ea0b3c5ddf8c5ddf8c5ddf8c5ddf85b667249525cc5ddf8 +c5ddf8c5ddf8282d339db0c6c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c2daf5434c55626e7cc5ddf8 +94a6ba363d45c5ddf8c5ddf8434c558190a2c5ddf82f343b788797c5ddf8 +adc3da050606bcd3edc5ddf8acc1d8181b1fc5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8b8cfe80f1113c3dbf6c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf849525c788797c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf85b677365717fc5ddf8c5ddf8c5ddf8c5ddf8b2c8e07a899a +bcd3edc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +7f8fa10a0c0d000000000000000000000000171a1ec0d7f2c5ddf8c5ddf8 +c5ddf8c1d8f3010101282d33535d691b1f2398aabfc5ddf8b1c7df14171a +454e5730363d2e343ac4dcf7c5ddf856616c545f6a6774822125298ea0b3 +c5ddf8c5ddf8c5ddf86c7a89252a2f5a65719db0c6c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8434c555b6672636f7d191c20a6bad1 +c5ddf894a6ba363d45c5ddf8c5ddf8434c558190a2c5ddf88c9db10e1012 +535d691a1d215f6b78c5ddf8c5ddf8acc1d8181b1fc5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf83b424a3941485b6773b8cfe8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf87d8d9e4c5560c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf82f343b99acc1c5ddf8c5ddf8c5ddf8c5ddf88fa1b4 +000000b2c8e0c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf87583940d0f110f11130f11132b3036b0c6dec5ddf8c5ddf8 +c5ddf8c5ddf8c1d8f3030404b0c5dd8495a7bdd4eec5ddf8c5ddf8c5ddf8 +b5cbe48292a48a9baec0d7f2c5ddf8c5ddf8b6cce58899ac8292a4b4cae3 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8b6cce594a6bab2c8e0c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8b0c6de8494a68798abbad0ea +c5ddf8c5ddf8b9d0e9a1b5cbc5ddf8c5ddf8a5b9d0b4c9e2c5ddf8c5ddf8 +a6bbd27d8d9e97a9bec5ddf8c5ddf8c5ddf8bed6f09aadc2c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8aabfd693a5b9bfd6f1c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c2daf522272bb6cce5 +c5ddf8c5ddf8c5ddf8a0b4ca343a42c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +697685383f46c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c4dcf7a9bed5b9d0e9c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c1d8f3030404c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf88797aa +8e9fb2c5ddf8c5ddf8c5ddf87a899a9aadc2c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf85a65719eb1c7c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c3dbf65e6976c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +95a7bb6e7b8b6e7b8b6e7b8b6e7b8b738291c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8bdd4ee8899acb4c9e2c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffd0e3f9c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8bcd3ed677482141619a9bdd4c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffd0e3f9 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8545f6a768595 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +d0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf85f6a77 +6c7988c5ddf8c5ddf8c5ddf8c5ddf8bed5ef363d459baec3c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +7482924b545fc5ddf8c5ddf8c5ddf8c5ddf8bcd3ed11131690a2b5c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8b6cce5282d322c3137b2c8e0c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf88e9fb2272c319fb3c9c2daf5c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8636f7d64707ec5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +4b545f95a7bbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf85e69766c7a89c5ddf8c5ddf8c5ddf8c5ddf8 +bfd6f10000008797aac5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8bbd2ec333a4191a2b6c5ddf8c5ddf8c5ddf8 +c5ddf893a5b91e2125c2daf5c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8b4cae33940475f6b78bfd6f1c5ddf8c5ddf8 +c5ddf8c5ddf895a8bc95a7bbc5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffd0e3f9c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffd0e3f9 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +d0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffd0e3f9c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffd2e5fac5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c7def8ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffe7f1fcc5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8d9e9fa +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffdfeffddebfb +c9dff8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8 +c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c5ddf8c7def8dceafb +f8fbfe + +[/Creator (html2ps version 1.0 beta5) /Author () /Keywords (xsd, xml, schema, c++, mapping, data, binding, parser, validation) /Subject () + /Title (C++/Parser Mapping Getting Started Guide) /DOCINFO pdfmark +/ND 1 D +/HN [(1) (1) (1) (1) (1) (1) (1) (1) (2) (3) (3) (4) (6) (8) (8) (9) (12) (13) +(14) (18) (18) (21) (24) (27) (27) (28) (28) (28) (35) (??) (37) (38) (39) +(40) (41) (42) (43) (45) (45) (46) (47) (47) (48) (49) (49) (55) (58) (63) +(??) (1) (1) (1) (1) (1) (2) (3) (3) (4) (6) (8) (8) (9) (12) (13) (14) +(18) (18) (21) (24) (27) (27) (28) (28) (28) (35) (37) (38) (39) (40) (41) +(42) (43) (45) (45) (46) (47) (47) (48) (49) (49) (55) (58) (63)] D +/h0 [()(Table of Contents)] D +/h1 [(1\240\240)(Preface)] D +/h2 [(1.1\240\240)(About This Document)] D +/h3 [(1.2\240\240)(More Information)] D +/h4 [(2\240\240)(1 Introduction)] D +/h5 [(2.1\240\240)(1.1 Mapping Overview)] D +/h6 [(2.2\240\240)(1.2 Benefits)] D +/h7 [(3\240\240)(2 Hello World Example)] D +/h8 [(3.1\240\240)(2.1 Writing XML Document and Schema)] D +/h9 [(3.2\240\240)(2.2 Translating Schema to C++)] D +/h10 [(3.3\240\240)(2.3 Implementing Application Logic)] D +/h11 [(3.4\240\240)(2.4 Compiling and Running)] D +/h12 [(4\240\240)(3 Parser Skeletons)] D +/h13 [(4.1\240\240)(3.1 Implementing the Gender Parser)] D +/h14 [(4.2\240\240)(3.2 Implementing the Person Parser)] D +/h15 [(4.3\240\240)(3.3 Implementing the People Parser)] D +/h16 [(4.4\240\240)(3.4 Connecting the Parsers Together)] D +/h17 [(5\240\240)(4 Type Maps)] D +/h18 [(5.1\240\240)(4.1 Object Model)] D +/h19 [(5.2\240\240)(4.2 Type Map File Format)] D +/h20 [(5.3\240\240)(4.3 Parser Implementations)] D +/h21 [(6\240\240)(5 Mapping Configuration)] D +/h22 [(6.1\240\240)(5.1 Character Type and Encoding)] D +/h23 [(6.2\240\240)(5.2 Underlying XML Parser)] D +/h24 [(6.3\240\240)(5.3 XML Schema Validation)] D +/h25 [(6.4\240\240)(5.4 Support for Polymorphism)] D +/h26 [(7\240\240)(6 Built-In XML Schema Type Parsers)] D +/h27 [(7.1\240\240)(6.1 QName Parser)] D +/h28 [(7.2\240\240)(6.2 NMTOKENS and IDREFS Parsers)] D +/h29 [(7.3\240\240)(6.3 base64Binary and hexBinary Parsers)] D +/h30 [(7.4\240\240)(6.4 Time Zone Representation)] D +/h31 [(7.5\240\240)(6.5 date Parser)] D +/h32 [(7.6\240\240)(6.6 dateTime Parser)] D +/h33 [(7.7\240\240)(6.7 duration Parser)] D +/h34 [(7.8\240\240)(6.8 gDay Parser)] D +/h35 [(7.9\240\240)(6.9 gMonth Parser)] D +/h36 [(7.10\240\240)(6.10 gMonthDay Parser)] D +/h37 [(7.11\240\240)(6.11 gYear Parser)] D +/h38 [(7.12\240\240)(6.12 gYearMonth Parser)] D +/h39 [(7.13\240\240)(6.13 time Parser)] D +/h40 [(8\240\240)(7 Document Parser and Error Handling)] D +/h41 [(8.1\240\240)(7.1 Xerces-C++ Document Parser)] D +/h42 [(8.2\240\240)(7.2 Expat Document Parser)] D +/h43 [(8.3\240\240)(7.3 Error Handling)] D +/h44 [(9\240\240)(Appendix A \236 Supported XML Schema Constructs)] D +/Hr [49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 +71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92]D +/HV [1 2 2 1 2 2 1 2 2 2 2 1 2 2 2 2 1 2 2 2 1 2 2 2 2 1 2 2 2 2 2 2 2 +2 2 2 2 2 2 1 2 2 2 1]D +/Cn [2 0 0 2 0 0 4 0 0 0 0 4 0 0 0 0 3 0 0 0 4 0 0 0 0 13 0 0 0 0 0 0 0 +0 0 0 0 0 0 3 0 0 0 0]D +Hr length 0 gt{[/PageMode /UseOutlines /DOCVIEW pdfmark}if +/Hn 1 D +0 1 Hr length 1 sub{ + /Bn E D [Cn Bn get dup 0 gt{/Count E HV Bn get Bl ge{neg}if}{pop}ie + /Dest Hr Bn get dup abs ST cvs cvn E 0 ge{(h)Hn ST cvs join cvx exec + dup 1 get E Nf{0 get E join}{pop}ie /Hn Hn 1 add D}{()}ie + /Title E dup length 255 gt{0 255 getinterval}if /OUT pdfmark}for +ZF /FN Fp D Ps 0 FS /WC Wf{( )}{<A1A1>}ie SW pop D +ET RC ZF +/Df f D +/R0 (http://www.codesynthesis.com/licenses/fdl-1.2.txt) D +/R1 (http://www.codesynthesis.com/projects/xsd/documentation/cxx/parser/guide/index.xhtml) D +/R2 (http://www.codesynthesis.com/projects/xsd/documentation/cxx/parser/guide/cxx-parser-guide.pdf) D +/R3 (http://www.codesynthesis.com/projects/xsd/documentation/cxx/parser/guide/cxx-parser-guide.ps) D +/R1 (http://www.codesynthesis.com/projects/xsd/documentation/xsd.xhtml) D +/R2 (http://www.codesynthesis.com/mailman/listinfo/xsd-users) D +/R3 (http://www.codesynthesis.com/pipermail/xsd-users/) D +/R4 (http://www.w3.org/TR/xmlschema-0/) D +/TS { + tables E get /table E D + table aload pop /rdesc E D /cdesc E D /tdesc E D + tdesc aload pop /capalg E D /caption E D /rules E D /frame E D /nfoot E D + /nhead E D /ncol E D /nrow E D /border E D /twid E D /units E D /talign E D + /flow E D /clear E D /tclass E D pop pop + /w W D /eps 0.1 D /OU f D /PL 1 D + /FN EF 21 get D EZ 21 get Ey 21 get FS + 0 1 1{ + /pass E D + 0 1 nrow{ + /irow E D + /cells rdesc irow get 6 get D + 0 1 ncol{ + /icol E D + /cell cells icol get D + cell 0 ne{ + cell aload pop /ang E D /CB E D pop pop pop + /DV E D /bot E D /top E D /right E D /left E D /nowrap E D /valign E D + /dp E D /align E D /rspan E D /cspan E D /cclass E D /ctype E D /cmax E D + /cmin E D /proc E D + rspan 0 eq{/rspan nrow irow sub 1 add D}if + cspan 0 eq{/cspan ncol icol sub 1 add D}if + pass 0 eq cspan 1 eq and pass 1 eq cspan 1 gt and or{ + /W 1e5 D /LL W D /PH 1 D + ctype 1 eq{() BD}if + RC align NA + AT 4 eq{/CD t D /DC dp D /LN 0 D /M1 0 D /M2 0 D}{/CD f D}ie + 0 0 M /LM 0 D proc exec BN + AT 4 eq{ + LN array astore cell 15 3 -1 roll put + cdesc icol get dup dup 5 get M1 lt{5 M1 put}{5 get /M1 E D}ie + dup 6 get M2 lt{6 M2 put}{6 get /M2 E D}ie + /LM M1 M2 add D + }if + /CD f D + ang 0 ne{/LM CP E pop neg D}if + /thiswid LM left add right add eps add D + /oldmin 0 D /oldmax 0 D + 0 1 cspan 1 sub{ + icol add cdesc E get dup 2 get /oldmax E oldmax add D + 1 get /oldmin E oldmin add D + }for + thiswid oldmax ge{ + 0 1 cspan 1 sub{ + icol add cdesc E get dup 2 E 2 get oldmax 0 eq + {pop thiswid cspan div}{thiswid mul oldmax div}ie + put + }for + }if + nowrap 1 eq{ + thiswid oldmin ge{ + 0 1 cspan 1 sub{ + icol add cdesc E get dup 1 E 1 get oldmin 0 eq + {pop thiswid cspan div}{thiswid mul oldmin div}ie + put + }for + }if + }{ + /W 0 D /LL W D /PH 2 D + ctype 1 eq{() ES () BD}if + 0 0 M /LM 0 D RC proc exec BN + /thiswid LM left add right add eps add D + thiswid oldmin ge{ + 0 1 cspan 1 sub{ + icol add cdesc E get dup 1 E 1 get oldmin 0 eq + {pop thiswid cspan div}{thiswid mul oldmin div}ie + put + }for + }if + }ie + ctype 1 eq{() ES}if + }if + }if + }for + }for + }for + /tmin 0 D /tmax 0 D + 0 1 ncol{ + cdesc E get dup 1 get E 2 get 2 copy gt{pop dup}if + tmax add /tmax E D tmin add /tmin E D + }for + twid 0 lt{twid neg IW gt{IW neg}{twid}ie /twid E D}if + tdesc 0 twid neg tmin 2 copy lt{E}if pop put + tdesc 1 twid neg tmax 2 copy lt{E}if pop put + /W w D /LL W D /OU t D /PH 0 D /PL 0 D +} D +/PT { + /PL PL 1 add D + tables E get /table E D Tm 21 get Ts mul BE + PL 2 ge{save}if + /SL SL 1 add D /FN EF 21 get D EZ 21 get Ey 21 get FS + table aload pop /rdesc E D /cdesc E D /tdesc E D + tdesc aload pop /capalg E D /caption E D /rules E D /frame E D /nfoot E D + /nhead E D /ncol E D /nrow E D /border E D /twid E D /units E D /talign E D + /flow E D /clear E D /tclass E D /tmax E D /tmin E D + /w W D /xo XO D /mr MR D /ll LL D /lg LG D /ai AI D /bc BC D /nr NR D /ar AR D + /tr TR D /ui UI D /ph PH D /a0 A0 D /pf PF D /at AT D /av AV D /al AL D + /Le LE D /la La D + talign 0 lt{/talign AL 0 gt{AV AL get}{A0 2 le{A0}{0}ie}ie D}if + ph 1 eq ph 2 eq or{ + NL ph 1 eq{tmax}{tmin}ie dup XO add LM gt{/LM E XO add D}{pop}ie LM E + }{ + /PH 3 D /LE 1e5 D RC %ZF + border 0 gt{/border 1 D}if + /twidth 0 D /avail W xo sub D + twid 0 eq{0 1 ncol{cdesc E get dup 2 get E 3 get dup 0 gt{div neg dup twid lt + {/twid E D}{pop}ie}{pop pop}ie}for}if + /twid twid dup 0 lt{neg avail 2 copy gt{E}if pop}{avail mul}ie D + /OK t D 0 1 ncol{cdesc E get dup 1 get E 3 get twid mul gt{/OK f D}if}for + 0 1 ncol{ + cdesc E get dup 1 get /colmin E D dup 3 get /cwid E twid mul D dup + tmax avail le{2 get}if + tmin avail le tmax avail gt and{ + dup 2 get E 1 get dup 3 1 roll sub avail tmin sub mul tmax tmin sub div add + }if + tmin avail gt{1 get}if + 0 E colmin cwid lt OK and{pop cwid}if dup /twidth E twidth add D put + }for + /OU f D CP + tmin twid le{ + 0 1 ncol{cdesc E get dup 0 get twidth div twid mul 0 E put}for + /twidth twid D + }if + CP printcap CP E pop sub /caphig E D pop + 0 1 1{ + /pass E D + 0 1 nrow{ + /irow E D + /cells rdesc irow get 6 get D + 0 1 ncol{ + /icol E D + /cell cells icol get D + cell 0 ne{ + cell aload pop /ang E D /CB E D pop pop pop + /DV E D /bot E D /top E D /right E D /left E D /nowrap E D /valign E D + /dp E D /align E D /rspan E D /cspan E D /cclass E D /ctype E D /cmax E D + /cmin E D /proc E D + rspan 0 eq{/rspan nrow irow sub 1 add D}if + cspan 0 eq{/cspan ncol icol sub 1 add D}if + /W 0 D + 0 1 cspan 1 sub{icol add cdesc E get 0 get /W E W add D}for + pass 0 eq rspan 1 eq and pass 1 eq rspan 1 gt and or{ + ctype 1 eq{() BD}if + /W W left sub right sub D /XO 0 D /EO 0 D SI + /A0 align D RC align NA + AT 4 eq{ + /DC dp D /DO 0 D /ID 1 D + 0 1 DV length 1 sub{DV E get dup DO gt{/DO E D}{pop}ie}for + /Lo DO DV 0 get sub D /L1 Lo D + }if + 0 0 M /BP t D /Fl t D /MF 0 D /FB 0 D + proc exec T not{/CI 0 D}if BN 0 FB neg R MF 0 eq{/MF CS D}if + CP /thishig E neg bot add top add CI add D pop + ang 0 ne{/thishig LM bot add top add D}if + cell 16 MF put cell 17 Ya put cell 18 thishig put + valign 4 eq{ + /below thishig Ya sub D + rdesc irow get dup dup 4 get Ya lt + {4 Ya put}{4 get /Ya E D}ie + dup 5 get below lt{5 below put}{5 get /below E D}ie + /thishig Ya below add D + }if + ctype 1 eq{()ES}if + /oldhig 0 D + 0 1 rspan 1 sub{ + irow add rdesc E get 0 get /oldhig E oldhig add D + }for + thishig oldhig ge{ + 0 1 rspan 1 sub{ + irow add rdesc E get dup 0 E 0 get oldhig 0 eq + {pop thishig rspan div}{thishig mul oldhig div}ie + put + }for + }if + }if + }if + }for + }for + }for M RC %ZF + /thight 0 D /racc 0 D /maxh 0 D /brk 0 D /rbeg nhead nfoot add D + 0 1 nrow{ + rdesc E get dup 0 get dup /thight E thight add D + brk 0 eq{/racc E D}{/racc E racc add D}ie + racc maxh gt{/maxh racc D}if 2 get /brk E D + }for + ph 3 ge{thight caphig add E}if + ph 0 eq ph 4 eq or{ + /PH 4 D /LE Le D /OU Ou D /yoff 0 D /headsz 0 D + 0 1 nhead 1 sub{rdesc E get 0 get headsz add /headsz E D}for + /footsz 0 D + 0 1 nfoot 1 sub{rdesc E nhead add get 0 get footsz add /footsz E D}for + /ahig LE BO add MI add D /maxh maxh headsz add footsz add D + /thight thight headsz add footsz add D + tmin avail gt maxh ahig gt or + {/Sf avail tmin div dup ahig maxh div gt{pop ahig maxh div}if D /SA t D} + {/Sf 1 D}ie + tclass 1 eq thight LE 15 sub gt and + {/SA t D LE 15 sub thight div dup Sf lt{/Sf E D}{pop}ie}if + SA{Sf Sf scale /ll ll Sf div D /xo xo Sf div D /LE LE Sf div D + /mr mr Sf div D /BO BO Sf div D /ahig ahig Sf div D}if + nhead nfoot add getwid + LE CP E pop add capalg 0 eq{caphig sub}if + bT{f}{dup thight lt thight ahig lt and}ie + E headsz sub footsz sub rwid lt or{NP}if + capalg 0 eq{printcap -8 SP}if + CP /ycur E D pop + printhead + rbeg 1 nrow{/row E D row + getwid + ycur yoff add rwid sub footsz sub LE add 0 lt + {nfoot 0 gt{printfoot}if Tf NP /rbeg irow1 D + Ba{MI /MI MI SA{Sf div}if D MI SP /MI E D}if + CP /ycur E D pop /yoff 0 D printhead}if + irow1 printrow + }for + printfoot /row row 1 add D Tf + 0 ycur yoff add M + capalg 1 eq{/EO 0 D SI -3 SP printcap}if + Sf 1 lt{1 Sf div dup scale /ll ll Sf mul D /xo xo Sf mul D /LE LE Sf mul D + /mr mr Sf mul D /BO BO Sf mul D /SA f D}if + /EO 0 D + }if + }ie + /W w D /XO xo D /MR mr D /LL ll D /LG lg D /AI ai D /BC bc D /NR nr D /AR ar D + /TR tr D /UI ui D /PH ph D /A0 a0 D /PF pf D /AT at D /AV av D /AL al D + /La la D + /SL SL 1 sub NN D /CF 0 D /FN 0 D SZ SL get FR SL get FS Wf not{()F2}if + PL 2 ge{Ms E restore Ms or /Ms E D PH 1 eq PH 2 eq or + {/LM E D}if PH 3 ge{/CI 0 D NL 0 E neg R}if + }if + /PL PL 1 sub D /CI 0 D /BP f D /PO f D () Bm 21 get Ts mul BE BL %CF CS SF +} D +/printcap{ + capalg 0 ge{ + SA{/W w Sf div D} + {talign 1 eq{/XO xo ll twidth sub 2 div add D}if + talign 2 eq{/XO xo ll twidth sub add D}if + /W XO twidth add D + }ie /XO xo D /LL W XO sub MR sub D + /PA f D /Fl capalg 0 eq D + 1 NA BL caption exec BN OA /PA t D + }if +} D +/getwid{ + /irow1 E D + /irow2 irow1 D + /rwid 0 D + {rdesc irow2 get dup 0 get rwid add /rwid E D 2 get 0 eq + {exit}{/irow2 irow2 1 add D}ie + }loop +} D +/printrow{ + /xoff ll twidth PL 2 ge{Sf div}if sub talign mul 2 div D + /xleft xoff xo add D + /irow E D + /cells rdesc irow get 6 get D + 0 1 ncol{ + /icol E D + /cell cells icol get D + cell 0 ne{ + cell aload pop /ang E D /CB E D /cvsize E D /above E D /fontsz E D + /DV E D /bot E D /top E D /right E D /left E D /nowrap E D /valign E D + /dp E D /align E D /rspan E D /cspan E D /cclass E D /ctype E D /cmax E D + /cmin E D /proc E D + rspan 0 eq{/rspan nrow irow sub 1 add D}if + cspan 0 eq{/cspan ncol icol sub 1 add D}if + /width 0 D + 0 1 cspan 1 sub{icol add cdesc E get 0 get /width E width add D}for + /rhight rdesc irow get 0 get D + /hight rhight D + 1 1 rspan 1 sub{irow add rdesc E get 0 get /hight E hight add D}for + /W xo xoff add width add right sub D + ang 0 ne{/W xo xoff add hight add right sub D}if + /EO xo xoff add left add D SI + Cf{ + gsave CB VC xo xoff add ycur yoff add M + 0 hight neg RL width 0 RL 0 hight RL width neg 0 RL fill + grestore + }if + ctype 1 eq{() BD}if + /A0 align D RC + AT 4 eq{ + /DC dp D /ID 1 D /DO cdesc icol get 5 get D /Lo DO DV 0 get sub D /L1 Lo D + }if + ang 0 ne{ + gsave ang 90 eq + {xoff ycur add hight cvsize sub 2 div sub ycur hight sub xoff sub} + {xoff ycur sub width add hight cvsize sub 2 div add ycur xoff add}ie + translate ang rotate + }if + valign 3 le{0 ycur yoff add top sub + hight cvsize sub valign 1 sub mul 2 div sub M} + {0 ycur yoff add top sub above add rdesc irow get 4 get sub M}ie + /PA f D /BP t D /Fl t D + BL proc exec BN + ang 0 ne{grestore}if + /PA t D + ctype 1 eq{() ES}if + }if + /xoff xoff cdesc icol get 0 get add D + }for + /yoff yoff rhight sub D +} D +/printhead {0 1 nhead 1 sub{printrow}for} D +/printfoot {nhead 1 nhead nfoot add 1 sub{printrow}for} D +/Tf { + OU{rules 2 ge{/yoff 0 D + gsave 0 Sg + [0 1 nhead 1 sub{}for rbeg 1 row 1 sub{}for nhead 1 nhead nfoot add 1 sub{}for]{ + /irow E D + /xoff ll twidth PL 2 ge{Sf div}if sub talign mul 2 div D + /cells rdesc irow get 6 get D + 0 1 ncol{ + /icol E D + /cell cells icol get D + cell 0 ne{ + /rspan cell 6 get D + /cspan cell 5 get D + rspan 0 eq{/rspan nrow irow sub 1 add D}if + cspan 0 eq{/cspan ncol icol sub 1 add D}if + /width 0 D + 0 1 cspan 1 sub{icol add cdesc E get 0 get /width E width add D}for + /rhight rdesc irow get 0 get D + /hight rhight D + 1 1 rspan 1 sub{irow add rdesc E get 0 get /hight E hight add D}for + xo xoff add width add ycur yoff add M + 0 hight neg icol cspan add 1 sub ncol lt + {cdesc icol 1 add get 4 get dup rules 3 le{1 eq}{pop t}ie + {1 eq{0.8}{0.3}ie + LW RL CP stroke M}{pop R}ie}{R}ie + irow nhead nfoot add 1 sub ne nfoot 0 eq or + {irow rspan add 1 sub nrow lt + {rdesc irow rspan add get 3 get}{nfoot 0 eq{0}{1}ie}ie + dup rules 2 mod 0 eq{1 eq}{pop t}ie + {1 eq irow rspan add nhead eq or irow rspan add row eq nfoot 0 gt and or + {0.8}{0.3}ie LW width neg 0 RL CP stroke M}{pop}ie}if + }if + /xoff xoff cdesc icol get 0 get add D + }for + /yoff yoff rhight sub D + }forall + grestore + /Ms t D + }if + frame 1 gt{ + gsave + 1 LW 0 Sg + xleft ycur M CP BB + 0 yoff frame 5 eq frame 7 ge or{RL}{R}ie + twidth 0 frame 3 eq frame 4 eq or frame 8 ge or{RL}{R}ie CP BB + 0 yoff neg frame 6 ge{RL}{R}ie + twidth neg 0 frame 2 eq frame 4 eq or frame 8 ge or{RL}{R}ie + closepath stroke + grestore + /Ms t D + }if + }if +} D +/tables [[[0 0 0 0 0 -1 0 0 1 56 2 0 0 9 5 {()} -1] + [[0 0 0 0 0 0 0][0 0 0 0 0 0 0][0 0 0 0 0 0 0]] + [[0 0 0 0 0 0 [[{()1 Sl()WB(XML Schema type)} 0 0 1 0 1 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB(Parser imple)HY(men)HY(ta)HY(tion)YH( in the )SM(xml_schema)ES( names)HY(pace)YH()} 0 0 1 0 1 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB(Parser return type + )} 0 0 1 0 1 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(anyType and anySim)HY(ple)HY(Type)YH( types + )} 0 0 1 0 3 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +0 +0 +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(anyType)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(any_type_pimpl)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(void)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(anySim)HY(ple)HY(Type)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(any_simple_type_pimpl)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(void)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(fixed-length inte)HY(gral)YH( types + )} 0 0 1 0 3 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +0 +0 +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(byte)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(byte_pimpl)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(signed\240char)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(unsigned)HY(Byte)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(unsigned_byte_pimpl)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(unsigned\240char)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(short)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(short_pimpl)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(short)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(unsigned)HY(Short)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(unsigned_short_pimpl)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(unsigned\240short)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(int)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(int_pimpl)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(int)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(unsignedInt)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(unsigned_int_pimpl)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(unsigned\240int)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(long)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(long_pimpl)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(long\240long)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(unsigned)HY(Long)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(unsigned_long_pimpl)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(unsigned\240long\240long)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(arbi)HY(trary)YH(-length inte)HY(gral)YH( types + )} 0 0 1 0 3 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +0 +0 +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(integer)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(integer_pimpl)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(long\240long)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(nonPos)HY(i)HY(tiveIn)HY(te)HY(ger)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(non_posi)HY(tive)YH(_integer_pimpl)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(long\240long)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(nonNeg)HY(a)HY(tiveIn)HY(te)HY(ger)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(non_nega)HY(tive)YH(_integer_pimpl)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(unsigned long\240long)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(posi)HY(tiveIn)HY(te)HY(ger)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(posi)HY(tive)YH(_integer_pimpl)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(unsigned long\240long)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(nega)HY(tiveIn)HY(te)HY(ger)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(nega)HY(tive)YH(_integer_pimpl)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(long\240long)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(boolean types + )} 0 0 1 0 3 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +0 +0 +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(boolean)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(boolean_pimpl)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(bool)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(fixed-preci)HY(sion)YH( float)HY(ing)YH(-point types + )} 0 0 1 0 3 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +0 +0 +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(float)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(float_pimpl)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(float)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(double)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(double_pimpl)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(double)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(arbi)HY(trary)YH(-preci)HY(sion)YH( float)HY(ing)YH(-point types + )} 0 0 1 0 3 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +0 +0 +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(decimal)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(decimal_pimpl)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(double)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(string-based types + )} 0 0 1 0 3 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +0 +0 +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(string)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(string_pimpl)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(std::string)ES( or )SM(std::wstring)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(normal)HY(ized)HY(String)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(normal)HY(ized)YH(_string_pimpl)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(std::string)ES( or )SM(std::wstring)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(token)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(token_pimpl)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(std::string)ES( or )SM(std::wstring)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(Name)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(name_pimpl)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(std::string)ES( or )SM(std::wstring)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(NMTOKEN)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(nmtoken_pimpl)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(std::string)ES( or )SM(std::wstring)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(NCName)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(ncname_pimpl)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(std::string)ES( or )SM(std::wstring)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(language)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(language_pimpl)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(std::string)ES( or )SM(std::wstring)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(qual)HY(i)HY(fied)YH( name + )} 0 0 1 0 3 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +0 +0 +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(QName)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(qname_pimpl)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(xml_schema::qname)ES()BR()0 30 1 A(Section 6.1, + ")SM(QName)ES( Parser")30 0 TN TL()Ec /AF f D( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(ID/IDREF types + )} 0 0 1 0 3 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +0 +0 +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(ID)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(id_pimpl)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(std::string)ES( or )SM(std::wstring)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(IDREF)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(idref_pimpl)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(std::string)ES( or )SM(std::wstring)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(list types + )} 0 0 1 0 3 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +0 +0 +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(NMTO)HY(KENS)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(nmto)HY(kens)YH(_pimpl)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(xml_schema::string_sequence)ES()BR()0 31 1 A(Section + 6.2, ")SM(NMTO)HY(KENS)YH()ES( and )SM(IDREFS)ES( Parsers")31 0 TN TL()Ec /AF f D( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(IDREFS)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(idrefs_pimpl)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(xml_schema::string_sequence)ES()BR()0 31 1 A(Section + 6.2, ")SM(NMTO)HY(KENS)YH()ES( and )SM(IDREFS)ES( Parsers")31 0 TN TL()Ec /AF f D( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(URI types + )} 0 0 1 0 3 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +0 +0 +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(anyURI)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(uri_pimpl)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(std::string)ES( or )SM(std::wstring)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(binary types + )} 0 0 1 0 3 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +0 +0 +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(base64Binary)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(base64_binary_pimpl)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(std::auto_ptr<xml_schema::buffer>)ES()BR( )0 32 1 A(Section 6.3, ")SM(base64Binary)ES( and + )SM(hexBi)HY(nary)YH()ES( Parsers")32 0 TN TL()Ec /AF f D( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(hexBi)HY(nary)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(hex_binary_pimpl)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(std::auto_ptr<xml_schema::buffer>)ES()BR( )0 32 1 A(Section 6.3, ")SM(base64Binary)ES( and + )SM(hexBi)HY(nary)YH()ES( Parsers")32 0 TN TL()Ec /AF f D( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(date/time types + )} 0 0 1 0 3 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +0 +0 +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(date)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(date_pimpl)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(xml_schema::date)ES()BR()0 34 1 A(Section 6.5, + ")SM(date)ES( Parser")34 0 TN TL()Ec /AF f D( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(date)HY(Time)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(date_time_pimpl)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(xml_schema::date_time)ES()BR()0 35 1 A(Section 6.6, + ")SM(date)HY(Time)YH()ES( Parser")35 0 TN TL()Ec /AF f D( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(dura)HY(tion)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(dura)HY(tion)YH(_pimpl)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(xml_schema::dura)HY(tion)YH()ES()BR()0 36 1 A(Section 6.7, + ")SM(dura)HY(tion)YH()ES( Parser")36 0 TN TL()Ec /AF f D( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(gDay)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(gday_pimpl)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(xml_schema::gday)ES()BR()0 37 1 A(Section 6.8, + ")SM(gDay)ES( Parser")37 0 TN TL()Ec /AF f D( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(gMonth)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(gmonth_pimpl)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(xml_schema::gmonth)ES()BR()0 38 1 A(Section 6.9, + ")SM(gMonth)ES( Parser")38 0 TN TL()Ec /AF f D( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(gMon)HY(th)HY(Day)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(gmonth_day_pimpl)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(xml_schema::gmonth_day)ES()BR()0 39 1 A(Section 6.10, + ")SM(gMon)HY(th)HY(Day)YH()ES( Parser")39 0 TN TL()Ec /AF f D( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(gYear)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(gyear_pimpl)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(xml_schema::gyear)ES()BR()0 40 1 A(Section 6.11, + ")SM(gYear)ES( Parser")40 0 TN TL()Ec /AF f D( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(gYear)HY(Month)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(gyear_month_pimpl)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(xml_schema::gyear_month)ES()BR()0 41 1 A(Section + 6.12, ")SM(gYear)HY(Month)YH()ES( Parser")41 0 TN TL()Ec /AF f D( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(time)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(time_pimpl)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(xml_schema::time)ES()BR()0 42 1 A(Section 6.13, + ")SM(time)ES( Parser")42 0 TN TL()Ec /AF f D( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +]] +[[0 0 0 0 0 -1 0 0 1 57 1 0 0 9 5 {()} -1] + [[0 0 0 0 0 0 0][0 0 0 0 0 0 0]] + [[0 0 0 0 0 0 [[{()1 Sl()WB(Construct)} 0 0 1 0 1 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB(Notes)} 0 0 1 0 1 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(Struc)HY(ture)YH()} 0 0 1 0 2 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +0 +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(element)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(attribute)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(any)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(anyAt)HY(tribute)YH()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(all)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(sequence)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(choice)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(complex type, empty content)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(complex type, mixed content)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(complex type, simple content exten)HY(sion)YH()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(complex type, simple content restric)HY(tion)YH()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB(Simple type facets are not vali)HY(dated)YH(.)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(complex type, complex content exten)HY(sion)YH()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(complex type, complex content restric)HY(tion)YH()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(list)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(Datatypes)} 0 0 1 0 2 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +0 +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(byte)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(unsigned)HY(Byte)YH()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(short)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(unsigned)HY(Short)YH()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(int)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(unsignedInt)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(long)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(unsigned)HY(Long)YH()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(integer)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(nonPos)HY(i)HY(tiveIn)HY(te)HY(ger)YH()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(nonNeg)HY(a)HY(tiveIn)HY(te)HY(ger)YH()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(posi)HY(tiveIn)HY(te)HY(ger)YH()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(nega)HY(tiveIn)HY(te)HY(ger)YH()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(boolean)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(float)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(double)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(decimal)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(string)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(normal)HY(ized)HY(String)YH()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(token)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(Name)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(NMTOKEN)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(NCName)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(language)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(anyURI)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(ID)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB(Iden)HY(tity)YH( constraint is not enforced.)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(IDREF)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB(Iden)HY(tity)YH( constraint is not enforced.)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(NMTO)HY(KENS)YH()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(IDREFS)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB(Iden)HY(tity)YH( constraint is not enforced.)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(QName)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(base64Binary)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(hexBi)HY(nary)YH()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(date)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(date)HY(Time)YH()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(dura)HY(tion)YH()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(gDay)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(gMonth)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(gMon)HY(th)HY(Day)YH()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(gYear)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(gYear)HY(Month)YH()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(time)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +]] +] D +0 1 1{TS}for RC ZF +/Ba f D /BO 0 D Bs +/UR (/home/boris/work/xsd/xsd/documentation/cxx/parser/guide/index.xhtml) D +/Ti (C++/Parser Mapping Getting Started Guide) D +/Au () D +/Df f D +/ME [] D +Pt +/BO 0 D TC /Ba f D Bs /AU f D /UR () D RC ZF + tH WB +ND 1 gt{Ts 3 mul Np 0()0 C()BD(C++/Parser Mapping Getting Started Guide)ES()0 1 TN()EA()BN}if +1 NH le{49(1\240\240)1 C(Preface)WB 3 Sn()49 1 TN()EA()BN}if +2 NH le{50(1.1\240\240)2 C(About)WB 4 Sn( This Docu)HY(ment)YH()50 1 TN()EA()BN}if +2 NH le{51(1.2\240\240)2 C(More)WB 5 Sn( Infor)HY(ma)HY(tion)YH()51 1 TN()EA()BN}if +1 NH le{52(2\240\240)1 C(1)WB 6 Sn( Intro)HY(duc)HY(tion)YH()52 1 TN()EA()BN}if +2 NH le{53(2.1\240\240)2 C(1.1)WB 7 Sn( Mapping Overview)53 1 TN()EA()BN}if +2 NH le{54(2.2\240\240)2 C(1.2)WB 8 Sn( Bene)HY(fits)YH()54 1 TN()EA()BN}if +1 NH le{55(3\240\240)1 C(2)WB 9 Sn( Hello World Example)55 1 TN()EA()BN}if +2 NH le{56(3.1\240\240)2 C(2.1)WB 10 Sn( Writing XML Docu)HY(ment)YH( and Schema)56 1 TN()EA()BN}if +2 NH le{57(3.2\240\240)2 C(2.2)WB 11 Sn( Trans)HY(lat)HY(ing)YH( Schema to C++)57 1 TN()EA()BN}if +2 NH le{58(3.3\240\240)2 C(2.3)WB 12 Sn( Imple)HY(ment)HY(ing)YH( Appli)HY(ca)HY(tion)YH( Logic)58 1 TN()EA()BN}if +2 NH le{59(3.4\240\240)2 C(2.4)WB 13 Sn( Compil)HY(ing)YH( and Running)59 1 TN()EA()BN}if +1 NH le{60(4\240\240)1 C(3)WB 14 Sn( Parser Skele)HY(tons)YH()60 1 TN()EA()BN}if +2 NH le{61(4.1\240\240)2 C(3.1)WB 15 Sn( Imple)HY(ment)HY(ing)YH( the Gender Parser)61 1 TN()EA()BN}if +2 NH le{62(4.2\240\240)2 C(3.2)WB 16 Sn( Imple)HY(ment)HY(ing)YH( the Person Parser)62 1 TN()EA()BN}if +2 NH le{63(4.3\240\240)2 C(3.3)WB 17 Sn( Imple)HY(ment)HY(ing)YH( the People Parser)63 1 TN()EA()BN}if +2 NH le{64(4.4\240\240)2 C(3.4)WB 18 Sn( Connect)HY(ing)YH( the Parsers Together)64 1 TN()EA()BN}if +1 NH le{65(5\240\240)1 C(4)WB 19 Sn( Type Maps)65 1 TN()EA()BN}if +2 NH le{66(5.1\240\240)2 C(4.1)WB 20 Sn( Object Model)66 1 TN()EA()BN}if +2 NH le{67(5.2\240\240)2 C(4.2)WB 21 Sn( Type Map File Format)67 1 TN()EA()BN}if +2 NH le{68(5.3\240\240)2 C(4.3)WB 22 Sn( Parser Imple)HY(men)HY(ta)HY(tions)YH()68 1 TN()EA()BN}if +1 NH le{69(6\240\240)1 C(5)WB 23 Sn( Mapping Config)HY(u)HY(ra)HY(tion)YH()69 1 TN()EA()BN}if +2 NH le{70(6.1\240\240)2 C(5.1)WB 24 Sn( Char)HY(ac)HY(ter)YH( Type and Encod)HY(ing)YH()70 1 TN()EA()BN}if +2 NH le{71(6.2\240\240)2 C(5.2)WB 25 Sn( Under)HY(ly)HY(ing)YH( XML Parser)71 1 TN()EA()BN}if +2 NH le{72(6.3\240\240)2 C(5.3)WB 26 Sn( XML Schema Vali)HY(da)HY(tion)YH()72 1 TN()EA()BN}if +2 NH le{73(6.4\240\240)2 C(5.4)WB 27 Sn( Support for Poly)HY(mor)HY(phism)YH()73 1 TN()EA()BN}if +1 NH le{74(7\240\240)1 C(6)WB 28 Sn( Built-In XML Schema Type Parsers)74 1 TN()EA()BN}if +2 NH le{75(7.1\240\240)2 C(6.1)WB 30 Sn( )SM(QName)ES( Parser)75 1 TN()EA()BN}if +2 NH le{76(7.2\240\240)2 C(6.2)WB 31 Sn( )SM(NMTO)HY(KENS)YH()ES( and )SM(IDREFS)ES( Parsers)76 1 TN()EA()BN}if +2 NH le{77(7.3\240\240)2 C(6.3)WB 32 Sn( )SM(base64Binary)ES( and )SM(hexBi)HY(nary)YH()ES( Parsers)77 1 TN()EA()BN}if +2 NH le{78(7.4\240\240)2 C(6.4)WB 33 Sn( Time Zone Repre)HY(sen)HY(ta)HY(tion)YH()78 1 TN()EA()BN}if +2 NH le{79(7.5\240\240)2 C(6.5)WB 34 Sn( )SM(date)ES( Parser)79 1 TN()EA()BN}if +2 NH le{80(7.6\240\240)2 C(6.6)WB 35 Sn( )SM(date)HY(Time)YH()ES( Parser)80 1 TN()EA()BN}if +2 NH le{81(7.7\240\240)2 C(6.7)WB 36 Sn( )SM(dura)HY(tion)YH()ES( Parser)81 1 TN()EA()BN}if +2 NH le{82(7.8\240\240)2 C(6.8)WB 37 Sn( )SM(gDay)ES( Parser)82 1 TN()EA()BN}if +2 NH le{83(7.9\240\240)2 C(6.9)WB 38 Sn( )SM(gMonth)ES( Parser)83 1 TN()EA()BN}if +2 NH le{84(7.10\240\240)2 C(6.10)WB 39 Sn( )SM(gMon)HY(th)HY(Day)YH()ES( Parser)84 1 TN()EA()BN}if +2 NH le{85(7.11\240\240)2 C(6.11)WB 40 Sn( )SM(gYear)ES( Parser)85 1 TN()EA()BN}if +2 NH le{86(7.12\240\240)2 C(6.12)WB 41 Sn( )SM(gYear)HY(Month)YH()ES( Parser)86 1 TN()EA()BN}if +2 NH le{87(7.13\240\240)2 C(6.13)WB 42 Sn( )SM(time)ES( Parser)87 1 TN()EA()BN}if +1 NH le{88(8\240\240)1 C(7)WB 43 Sn( Docu)HY(ment)YH( Parser and Error Handling)88 1 TN()EA()BN}if +2 NH le{89(8.1\240\240)2 C(7.1)WB 44 Sn( Xerces-C++ Docu)HY(ment)YH( Parser)89 1 TN()EA()BN}if +2 NH le{90(8.2\240\240)2 C(7.2)WB 45 Sn( Expat Docu)HY(ment)YH( Parser)90 1 TN()EA()BN}if +2 NH le{91(8.3\240\240)2 C(7.3)WB 46 Sn( Error Handling)91 1 TN()EA()BN}if +1 NH le{92(9\240\240)1 C(Appendix)WB 47 Sn( A \236 Supported XML Schema Constructs)92 1 TN()EA()BN}if +/OU t D /Cb Db D NP Ep ET +/Cb Db D /Ct [16#00 16#00 16#00] D /Cl [16#00 16#00 16#00] D /CL -1 D Ct Sc + +/Ba f D /BO 0 D Bs +/UR (/home/boris/work/xsd/xsd/documentation/cxx/parser/guide/index.xhtml) D +/Ti (C++/Parser Mapping Getting Started Guide) D +/Au () D +/Df f D +/ME [] D + +NP RC ZF +()1 Sl()WB 0 Sn( + +)BR()WB 1 Sn( )BR()WB 2 Sn( + + + )0 1 0 H(Preface)WB 49 Sn()WB 3 Sn()EA()EH( + + )0 2 1 H(About)WB 50 Sn()WB 4 Sn( This Docu)HY(ment)YH()EA()EH( + + )0 P(The goal of this docu)HY(ment)YH( is to provide you with an under)HY(stand)HY(ing)YH( of + the C++/Parser program)HY(ming)YH( model and allow you to effi)HY(ciently)YH( eval)HY(u)HY(ate)YH( + XSD against your project's tech)HY(ni)HY(cal)YH( require)HY(ments)YH(. As such, this + docu)HY(ment)YH( is intended for C++ devel)HY(op)HY(ers)YH( and soft)HY(ware)YH( archi)HY(tects)YH( + who are looking for an XML process)HY(ing)YH( solu)HY(tion)YH(. Prior expe)HY(ri)HY(ence)YH( + with XML and C++ is required to under)HY(stand)YH( this docu)HY(ment)YH(. Basic + under)HY(stand)HY(ing)YH( of XML Schema is advan)HY(ta)HY(geous)YH( but not expected + or required. + )EP( + + + )0 2 2 H(More)WB 51 Sn()WB 5 Sn( Infor)HY(ma)HY(tion)YH()EA()EH( + + )0 P(Beyond this guide, you may also find the follow)HY(ing)YH( sources of + infor)HY(ma)HY(tion)YH( useful:)EP( + + )UL( )-1 LI()R1 2 A(XSD + Compiler Command Line Manual)EA( + + )-1 LI(The )SM(exam)HY(ples)YH(/cxx/parser/)ES( direc)HY(tory)YH( in the XSD + distri)HY(bu)HY(tion)YH( contains a collec)HY(tion)YH( of exam)HY(ples)YH( and a README + file with an overview of each example. + + )-1 LI(The )SM(README)ES( file in the XSD distri)HY(bu)HY(tion)YH( explains + how to compile the exam)HY(ples)YH( on various plat)HY(forms)YH(. + + )-1 LI(The )R2 2 A(xsd-users)EA( + mailing list is the place to ask tech)HY(ni)HY(cal)YH( ques)HY(tions)YH( about XSD and the C++/Parser mapping. + Further)HY(more)YH(, the )R3 2 A(archives)EA( + may already have answers to some of your ques)HY(tions)YH(. + + )LU( + + + + )0 1 3 H(1)WB 52 Sn()WB 6 Sn( Intro)HY(duc)HY(tion)YH()EA()EH( + + )0 P(Welcome to CodeSyn)HY(the)HY(sis)YH( XSD and the C++/Parser mapping. XSD is a + cross-plat)HY(form)YH( W3C XML Schema to C++ data binding compiler. C++/Parser + is a W3C XML Schema to C++ mapping that repre)HY(sents)YH( an XML vocab)HY(u)HY(lary)YH( + as a set of parser skele)HY(tons)YH( which you can imple)HY(ment)YH( to perform XML + process)HY(ing)YH( as required by your appli)HY(ca)HY(tion)YH( logic. + )EP( + + )0 2 4 H(1.1)WB 53 Sn()WB 7 Sn( Mapping Overview)EA()EH( + + )0 P(The C++/Parser mapping provides event-driven, stream-oriented + XML parsing, XML Schema vali)HY(da)HY(tion)YH(, and C++ data binding. It was + specif)HY(i)HY(cally)YH( designed and opti)HY(mized)YH( for high perfor)HY(mance)YH( and + small foot)HY(print)YH(. Based on the static anal)HY(y)HY(sis)YH( of the schemas, XSD + gener)HY(ates)YH( compact, highly-opti)HY(mized)YH( hier)HY(ar)HY(chi)HY(cal)YH( state machines + that combine data extrac)HY(tion)YH(, vali)HY(da)HY(tion)YH(, and even dispatch)HY(ing)YH( + in a single step. As a result, the gener)HY(ated)YH( code is typi)HY(cally)YH( + 2-10 times faster than general-purpose vali)HY(dat)HY(ing)YH( XML parsers + while main)HY(tain)HY(ing)YH( the lowest static and dynamic memory foot)HY(prints)YH(. + )EP( + + )0 P(To speed up appli)HY(ca)HY(tion)YH( devel)HY(op)HY(ment)YH(, the C++/Parser mapping + can be instructed to gener)HY(ate)YH( sample parser imple)HY(men)HY(ta)HY(tions)YH( + and a test driver which can then be filled with the appli)HY(ca)HY(tion)YH( + logic code. The mapping also provides a wide range of + mech)HY(a)HY(nisms)YH( for control)HY(ling)YH( and customiz)HY(ing)YH( the gener)HY(ated)YH( code.)EP( + + )0 P(The next chapter shows how to create a simple appli)HY(ca)HY(tion)YH( that uses + the C++/Parser mapping to parse, vali)HY(date)YH(, and extract data from a + simple XML docu)HY(ment)YH(. The follow)HY(ing)YH( chap)HY(ters)YH( show how to + use the C++/Parser mapping in more detail.)EP( + + )0 2 5 H(1.2)WB 54 Sn()WB 8 Sn( Bene)HY(fits)YH()EA()EH( + + )0 P(Tradi)HY(tional)YH( XML access APIs such as Docu)HY(ment)YH( Object Model \201DOM\202 + or Simple API for XML \201SAX\202 have a number of draw)HY(backs)YH( that + make them less suit)HY(able)YH( for creat)HY(ing)YH( robust and main)HY(tain)HY(able)YH( + XML process)HY(ing)YH( appli)HY(ca)HY(tions)YH(. These draw)HY(backs)YH( include: + )EP( + + )UL( )-1 LI(Generic repre)HY(sen)HY(ta)HY(tion)YH( of XML in terms of elements, attributes, + and text forces an appli)HY(ca)HY(tion)YH( devel)HY(oper)YH( to write a substan)HY(tial)YH( + amount of bridg)HY(ing)YH( code that iden)HY(ti)HY(fies)YH( and trans)HY(forms)YH( pieces + of infor)HY(ma)HY(tion)YH( encoded in XML to a repre)HY(sen)HY(ta)HY(tion)YH( more suit)HY(able)YH( + for consump)HY(tion)YH( by the appli)HY(ca)HY(tion)YH( logic. + + )-1 LI(String-based flow control defers error detec)HY(tion)YH( to runtime. + It also reduces code read)HY(abil)HY(ity)YH( and main)HY(tain)HY(abil)HY(ity)YH(. + + )-1 LI(Lack of type safety because the data is repre)HY(sented)YH( + as text. + + )-1 LI(Result)HY(ing)YH( appli)HY(ca)HY(tions)YH( are hard to debug, change, and + main)HY(tain)YH(. + )LU( + + )0 P(In contrast, stat)HY(i)HY(cally)YH(-typed, vocab)HY(u)HY(lary)YH(-specific parser + skele)HY(tons)YH( produced by the C++/Parser mapping allow you to + operate in your domain terms instead of the generic elements, + attributes, and text. Static typing helps catch errors at + compile-time rather than at run-time. Auto)HY(matic)YH( code gener)HY(a)HY(tion)YH( + frees you for more inter)HY(est)HY(ing)YH( tasks \201such as doing some)HY(thing)YH( + useful with the infor)HY(ma)HY(tion)YH( stored in the XML docu)HY(ments)YH(\202 and + mini)HY(mizes)YH( the effort needed to adapt your appli)HY(ca)HY(tions)YH( to + changes in the docu)HY(ment)YH( struc)HY(ture)YH(. To summa)HY(rize)YH(, the C++/Parser + mapping has the follow)HY(ing)YH( key advan)HY(tages)YH( over generic XML + access APIs:)EP( + + )UL( )-1 LI()BD(Ease of use.)ES( The gener)HY(ated)YH( code hides all the complex)HY(ity)YH( + asso)HY(ci)HY(ated)YH( with recre)HY(at)HY(ing)YH( the docu)HY(ment)YH( struc)HY(ture)YH(, main)HY(tain)HY(ing)YH( the + dispatch state, and convert)HY(ing)YH( the data from the text repre)HY(sen)HY(ta)HY(tion)YH( + to data types suit)HY(able)YH( for manip)HY(u)HY(la)HY(tion)YH( by the appli)HY(ca)HY(tion)YH( logic. + Parser skele)HY(tons)YH( also provide a conve)HY(nient)YH( mech)HY(a)HY(nism)YH( for build)HY(ing)YH( + custom in-memory repre)HY(sen)HY(ta)HY(tions)YH(. + + )-1 LI()BD(Natural repre)HY(sen)HY(ta)HY(tion)YH(.)ES( The gener)HY(ated)YH( parser skele)HY(tons)YH( + imple)HY(ment)YH( parser call)HY(backs)YH( as virtual func)HY(tions)YH( with names + corre)HY(spond)HY(ing)YH( to elements and attributes in XML. As a result, + you process the XML data using your domain vocab)HY(u)HY(lary)YH( instead + of generic elements, attributes, and text. + + + )-1 LI()BD(Concise code.)ES( With a sepa)HY(rate)YH( parser skele)HY(ton)YH( for each + XML Schema type, the appli)HY(ca)HY(tion)YH( imple)HY(men)HY(ta)HY(tion)YH( is + simpler and thus easier to read and under)HY(stand)YH(. + + )-1 LI()BD(Safety.)ES( The XML data is deliv)HY(ered)YH( to parser call)HY(backs)YH( as + stat)HY(i)HY(cally)YH( typed objects. The parser call)HY(backs)YH( them)HY(selves)YH( are virtual + func)HY(tions)YH(. This helps catch program)HY(ming)YH( errors at compile-time + rather than at runtime. + + )-1 LI()BD(Main)HY(tain)HY(abil)HY(ity)YH(.)ES( Auto)HY(matic)YH( code gener)HY(a)HY(tion)YH( mini)HY(mizes)YH( the + effort needed to adapt the appli)HY(ca)HY(tion)YH( to changes in the + docu)HY(ment)YH( struc)HY(ture)YH(. With static typing, the C++ compiler + can pin-point the places in the appli)HY(ca)HY(tion)YH( code that need to be + changed. + + )-1 LI()BD(Effi)HY(ciency)YH(.)ES( The gener)HY(ated)YH( parser skele)HY(tons)YH( combine + data extrac)HY(tion)YH(, vali)HY(da)HY(tion)YH(, and even dispatch)HY(ing)YH( in a single + step. This makes them much more effi)HY(cient)YH( than tradi)HY(tional)YH( + archi)HY(tec)HY(tures)YH( with sepa)HY(rate)YH( stages for vali)HY(da)HY(tion)YH( and data + extrac)HY(tion)YH(/dispatch. + )LU( + + + + + )0 1 6 H(2)WB 55 Sn()WB 9 Sn( Hello World Example)EA()EH( + + )0 P(In this chapter we will examine how to parse a very simple XML + docu)HY(ment)YH( using the XSD-gener)HY(ated)YH( C++/Parser skele)HY(tons)YH(. + The code presented in this chapter is based on the )SM(hello)ES( + example which can be found in the )SM(exam)HY(ples)YH(/cxx/parser/)ES( + direc)HY(tory)YH( of the XSD distri)HY(bu)HY(tion)YH(.)EP( + + )0 2 7 H(2.1)WB 56 Sn()WB 10 Sn( Writing XML Docu)HY(ment)YH( and Schema)EA()EH( + + )0 P(First, we need to get an idea about the struc)HY(ture)YH( + of the XML docu)HY(ments)YH( we are going to process. Our + )SM(hello.xml)ES(, for example, could look like this:)EP( + + ) 10 28 PR(<?xml version="1.0"?> +<hello> + + <greeting>Hello</greeting> + + <name>sun</name> + <name>moon</name> + <name>world</name> + +</hello>)RP( + + )0 P(Then we can write a descrip)HY(tion)YH( of the above XML in the + XML Schema language and save it into )SM(hello.xsd)ES(:)EP( + + ) 13 70 PR(<?xml version="1.0"?> +<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> + + <xs:complexType name="hello"> + <xs:sequence> + <xs:element name="greeting" type="xs:string"/> + <xs:element name="name" type="xs:string" maxOccurs="unbounded"/> + </xs:sequence> + </xs:complexType> + + <xs:element name="hello" type="hello"/> + +</xs:schema>)RP( + + )0 P(Even if you are not famil)HY(iar)YH( with XML Schema, it + should be easy to connect decla)HY(ra)HY(tions)YH( in )SM(hello.xsd)ES( + to elements in )SM(hello.xml)ES(. The )SM(hello)ES( type + is defined as a sequence of the nested )SM(greet)HY(ing)YH()ES( and + )SM(name)ES( elements. Note that the term sequence in XML + Schema means that elements should appear in a partic)HY(u)HY(lar)YH( order + as opposed to appear)HY(ing)YH( multi)HY(ple)YH( times. The )SM(name)ES( + element has its )SM(maxOc)HY(curs)YH()ES( prop)HY(erty)YH( set to + )SM(unbounded)ES( which means it can appear multi)HY(ple)YH( times + in an XML docu)HY(ment)YH(. Finally, the glob)HY(ally)YH(-defined )SM(hello)ES( + element prescribes the root element for our vocab)HY(u)HY(lary)YH(. For an + easily-approach)HY(able)YH( intro)HY(duc)HY(tion)YH( to XML Schema refer to + )R4 2 A(XML Schema Part 0: + Primer)EA(.)EP( + + )0 P(The above schema is a spec)HY(i)HY(fi)HY(ca)HY(tion)YH( of our XML vocab)HY(u)HY(lary)YH(; it tells + every)HY(body)YH( what valid docu)HY(ments)YH( of our XML-based language should look + like. The next step is to compile this schema to gener)HY(ate)YH( + the object model and parsing func)HY(tions)YH(.)EP( + + )0 2 8 H(2.2)WB 57 Sn()WB 11 Sn( Trans)HY(lat)HY(ing)YH( Schema to C++)EA()EH( + + )0 P(Now we are ready to trans)HY(late)YH( our )SM(hello.xsd)ES( to C++ parser + skele)HY(tons)YH(. To do this we invoke the XSD compiler from a termi)HY(nal)YH( + \201UNIX\202 or a command prompt \201Windows\202: + )EP( + + ) 1 45 PR($ xsd cxx-parser --xml-parser expat hello.xsd)RP( + + )0 P(The )SM(--xml-parser)ES( option indi)HY(cates)YH( that we want to + use Expat as the under)HY(ly)HY(ing)YH( XML parser \201see )0 25 1 A(Section + 5.2, "Under)HY(ly)HY(ing)YH( XML Parser")25 0 TN TL()Ec /AF f D(\202. The XSD compiler produces two + C++ files: )SM(hello-pskel.hxx)ES( and )SM(hello-pskel.cxx)ES(. + The follow)HY(ing)YH( code frag)HY(ment)YH( is taken from )SM(hello-pskel.hxx)ES(; + it should give you an idea about what gets gener)HY(ated)YH(: + )EP( + + ) 32 60 PR(class hello_pskel +{ +public: + // Parser callbacks. Override them in your implementation. + // + virtual void + pre \201\202; + + virtual void + greeting \201const std::string&\202; + + virtual void + name \201const std::string&\202; + + virtual void + post_hello \201\202; + + // Parser construction API. + // + void + greeting_parser \201xml_schema::string_pskel&\202; + + void + name_parser \201xml_schema::string_pskel&\202; + + void + parsers \201xml_schema::string_pskel& /* greeting */, + xml_schema::string_pskel& /* name */\202; + +private: + ...)WR( +};)RP( + + )0 P(The first four member func)HY(tions)YH( shown above are called parser + call)HY(backs)YH(. You would normally over)HY(ride)YH( them in your imple)HY(men)HY(ta)HY(tion)YH( + of the parser to do some)HY(thing)YH( useful. Let's go through all of + them one by one.)EP( + + )0 P(The )SM(pre\201\202)ES( func)HY(tion)YH( is an initial)HY(iza)HY(tion)YH( call)HY(back)YH(. It is + called when a new element of type )SM(hello)ES( is about + to be parsed. You would normally use this func)HY(tion)YH( to allo)HY(cate)YH( a new + instance of the result)HY(ing)YH( type or clear accu)HY(mu)HY(la)HY(tors)YH( that are used + to gather infor)HY(ma)HY(tion)YH( during parsing. The default imple)HY(men)HY(ta)HY(tion)YH( + of this func)HY(tion)YH( does nothing.)EP( + + )0 P(The )SM(post_hello\201\202)ES( func)HY(tion)YH( is a final)HY(iza)HY(tion)YH( call)HY(back)YH(. Its + name is constructed by adding the parser skele)HY(ton)YH( name to the + )SM(post_)ES( prefix. The final)HY(iza)HY(tion)YH( call)HY(back)YH( is called when + parsing of the element is complete and the result, if any, should + be returned. Note that in our case the return type of + )SM(post_hello\201\202)ES( is )SM(void)ES( which means there + is nothing to return. More on parser return types later. + )EP( + + )0 P(You may be wonder)HY(ing)YH( why the final)HY(iza)HY(tion)YH( call)HY(back)YH( is called + )SM(post_hello\201\202)ES( instead of )SM(post\201\202)ES( just + like )SM(pre\201\202)ES(. The reason for this is that + final)HY(iza)HY(tion)YH( call)HY(backs)YH( can have differ)HY(ent)YH( return types and + result in func)HY(tion)YH( signa)HY(ture)YH( clashes across inher)HY(i)HY(tance)YH( + hier)HY(ar)HY(chies)YH(. To prevent this the signa)HY(tures)YH( of final)HY(iza)HY(tion)YH( + call)HY(backs)YH( are made unique by adding the type name to their names.)EP( + + )0 P(The )SM(greet)HY(ing)YH(\201\202)ES( and )SM(name\201\202)ES( func)HY(tions)YH( are + called when the )SM(greet)HY(ing)YH()ES( and )SM(name)ES( elements + have been parsed, respec)HY(tively)YH(. Their argu)HY(ments)YH( are of type + )SM(std::string)ES( and contain the data extracted from XML.)EP( + + )0 P(The last three func)HY(tions)YH( are for connect)HY(ing)YH( parsers to each other. + For example, there is a prede)HY(fined)YH( parser for built-in XML Schema type + )SM(string)ES( in the XSD runtime. We will be using + it to parse the contents of )SM(greet)HY(ing)YH()ES( and + )SM(name)ES( elements, as shown in the next section.)EP( + + )0 2 9 H(2.3)WB 58 Sn()WB 12 Sn( Imple)HY(ment)HY(ing)YH( Appli)HY(ca)HY(tion)YH( Logic)EA()EH( + + )0 P(At this point we have all the parts we need to do some)HY(thing)YH( useful + with the infor)HY(ma)HY(tion)YH( stored in our XML docu)HY(ment)YH(. The first step is + to imple)HY(ment)YH( the parser: + )EP( + + ) 21 60 PR(#include <iostream> +#include "hello-pskel.hxx" + +class hello_pimpl: public hello_pskel +{ +public: + virtual void + greeting \201const std::string& g\202 + { + greeting_ = g; + } + + virtual void + name \201const std::string& n\202 + { + std::cout << greeting_ << ", " << n << "!" << std::endl; + } + +private: + std::string greeting_; +};)RP( + + )0 P(We left both )SM(pre\201\202)ES( and )SM(post_hello\201\202)ES( with the + default imple)HY(men)HY(ta)HY(tions)YH(; we don't have anything to initial)HY(ize)YH( or + return. The rest is pretty straight)HY(for)HY(ward)YH(: we store the greet)HY(ing)YH( + in a member vari)HY(able)YH( and later, when parsing names, use it to + say hello.)EP( + + )0 P(An obser)HY(vant)YH( reader my ask what happens if the )SM(name)ES( + element comes before )SM(greet)HY(ing)YH()ES(? Don't we need to + make sure )SM(greet)HY(ing)YH(_)ES( was initial)HY(ized)YH( and report + an error other)HY(wise)YH(? The answer is no, we don't have to do + any of this. The )SM(hello_pskel)ES( parser skele)HY(ton)YH( + performs vali)HY(da)HY(tion)YH( of XML accord)HY(ing)YH( to the schema from which + it was gener)HY(ated)YH(. As a result, it will check the order + of the )SM(greet)HY(ing)YH()ES( and )SM(name)ES( elements + and report an error if it is violated.)EP( + + )0 P(Now it is time to put this parser imple)HY(men)HY(ta)HY(tion)YH( to work:)EP( + + ) 29 50 PR(using namespace std; + +int +main \201int argc, char* argv[]\202 +{ + try + { + // Construct the parser. + // + xml_schema::string_pimpl string_p; + hello_pimpl hello_p; + + hello_p.greeting_parser \201string_p\202; + hello_p.name_parser \201string_p\202; + + // Parse the XML instance. + // + xml_schema::document doc_p \201hello_p, "hello"\202; + + hello_p.pre \201\202; + doc_p.parse \201argv[1]\202; + hello_p.post_hello \201\202; + } + catch \201const xml_schema::exception& e\202 + { + cerr << e << endl; + return 1; + } +})RP( + + )0 P(The first part of this code snippet instan)HY(ti)HY(ates)YH( indi)HY(vid)HY(ual)YH( parsers + and assem)HY(bles)YH( them into a complete vocab)HY(u)HY(lary)YH( parser. + )SM(xml_schema::string_pimpl)ES( is an imple)HY(men)HY(ta)HY(tion)YH( of a parser + for built-in XML Schema type )SM(string)ES(. It is provided by + the XSD runtime along with parsers for other built-in types \201for + more infor)HY(ma)HY(tion)YH( on the built-in parsers see )0 28 1 A(Chapter 6, + "Built-In XML Schema Type Parsers")28 0 TN TL()Ec /AF f D(\202. We use )SM(string_pimpl)ES( + to parse the )SM(greet)HY(ing)YH()ES( and )SM(name)ES( elements as + indi)HY(cated)YH( by the calls to )SM(greet)HY(ing)YH(_parser\201\202)ES( and + )SM(name_parser\201\202)ES(. + )EP( + + )0 P(Then we instan)HY(ti)HY(ate)YH( a docu)HY(ment)YH( parser \201)SM(doc_p)ES(\202. The + first argu)HY(ment)YH( to its construc)HY(tor)YH( is the parser for + the root element \201)SM(hello_p)ES( in our case\202. The + second argu)HY(ment)YH( is the root element name. + )EP( + + )0 P(The final piece is the calls to )SM(pre\201\202)ES(, )SM(parse\201\202)ES(, + and )SM(post_hello\201\202)ES(. The call to )SM(parse\201\202)ES( + perform the actual XML parsing while the calls to )SM(pre\201\202)ES( and + )SM(post_hello\201\202)ES( make sure that the parser for the root + element can perform proper initial)HY(iza)HY(tion)YH( and cleanup.)EP( + + )0 P(While our parser imple)HY(men)HY(ta)HY(tion)YH( and test driver are pretty small and + easy to write by hand, for bigger XML vocab)HY(u)HY(lar)HY(ies)YH( it can be a + substan)HY(tial)YH( effort. To help with this task XSD can auto)HY(mat)HY(i)HY(cally)YH( + gener)HY(ate)YH( sample parser imple)HY(men)HY(ta)HY(tions)YH( and a test driver from your + schemas. You can request the gener)HY(a)HY(tion)YH( of a sample imple)HY(men)HY(ta)HY(tion)YH( with + empty func)HY(tion)YH( bodies by spec)HY(i)HY(fy)HY(ing)YH( the )SM(--gener)HY(ate)YH(-noop-impl)ES( + option. Or you can gener)HY(ate)YH( a sample imple)HY(men)HY(ta)HY(tion)YH( that prints the + data store in XML by using the )SM(--gener)HY(ate)YH(-print-impl)ES( + option. To request the gener)HY(a)HY(tion)YH( of a test driver you can use the + )SM(--gener)HY(ate)YH(-test-driver)ES( option. For more infor)HY(ma)HY(tion)YH( + on these options refer to the + )R1 2 A(XSD + Compiler Command Line Manual)EA(. The )SM('gener)HY(ated)YH(')ES( example + in the XSD distri)HY(bu)HY(tion)YH( shows the sample imple)HY(men)HY(ta)HY(tion)YH( gener)HY(a)HY(tion)YH( + feature in action.)EP( + + + )0 2 10 H(2.4)WB 59 Sn()WB 13 Sn( Compil)HY(ing)YH( and Running)EA()EH( + + )0 P(After saving all the parts from the previ)HY(ous)YH( section in + )SM(driver.cxx)ES(, we are ready to compile our first + appli)HY(ca)HY(tion)YH( and run it on the test XML docu)HY(ment)YH(. On a UNIX + system this can be done with the follow)HY(ing)YH( commands: + )EP( + + ) 6 48 PR($ c++ -I.../libxsd -c driver.cxx hello-pskel.cxx +$ c++ -o driver driver.o hello-pskel.o -lexpat +$ ./driver hello.xml +Hello, sun! +Hello, moon! +Hello, world!)RP( + + )0 P(Here )SM(.../libxsd)ES( repre)HY(sents)YH( the path to the + )SM(libxsd)ES( direc)HY(tory)YH( in the XSD distri)HY(bu)HY(tion)YH(. + We can also test the error handling. To test XML well-formed)HY(ness)YH( + check)HY(ing)YH(, we can try to parse )SM(hello-pskel.hxx)ES(:)EP( + + ) 2 52 PR($ ./driver hello-pskel.hxx +hello-pskel.hxx:1:0: not well-formed \201invalid token\202)RP( + + )0 P(We can also try to parse a valid XML but not from our + vocab)HY(u)HY(lary)YH(, for example )SM(hello.xsd)ES(:)EP( + + ) 3 50 PR($ ./driver hello.xsd +hello.xsd:2:0: expected element 'hello' instead of +'http://www.w3.org/2001/XMLSchema#schema')RP( + + + + + + )0 1 11 H(3)WB 60 Sn()WB 14 Sn( Parser Skele)HY(tons)YH()EA()EH( + + )0 P(As we have seen in the previ)HY(ous)YH( chapter, the XSD compiler gener)HY(ates)YH( + a parser skele)HY(ton)YH( class for each type defined in XML Schema. In + this chapter we will take a closer look at differ)HY(ent)YH( func)HY(tions)YH( + that comprise a parser skele)HY(ton)YH( as well as the way to connect + our imple)HY(men)HY(ta)HY(tions)YH( of these parser skele)HY(tons)YH( to create a complete + parser.)EP( + + )0 P(In this and subse)HY(quent)YH( chap)HY(ters)YH( we will use the follow)HY(ing)YH( schema + that describes a collec)HY(tion)YH( of person records. We save it in + )SM(people.xsd)ES(:)EP( + + ) 28 69 PR(<?xml version="1.0"?> +<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> + + <xs:simpleType name="gender"> + <xs:restriction base="xs:string"> + <xs:enumeration value="male"/> + <xs:enumeration value="female"/> + </xs:restriction> + </xs:simpleType> + + <xs:complexType name="person"> + <xs:sequence> + <xs:element name="first-name" type="xs:string"/> + <xs:element name="last-name" type="xs:string"/> + <xs:element name="gender" type="gender"/> + <xs:element name="age" type="xs:short"/> + </xs:sequence> + </xs:complexType> + + <xs:complexType name="people"> + <xs:sequence> + <xs:element name="person" type="person" maxOccurs="unbounded"/> + </xs:sequence> + </xs:complexType> + + <xs:element name="people" type="people"/> + +</xs:schema>)RP( + + )0 P(A sample XML instance to go along with this schema is saved + in )SM(people.xml)ES(:)EP( + + ) 15 33 PR(<?xml version="1.0"?> +<people> + <person> + <first-name>John</first-name> + <last-name>Doe</last-name> + <gender>male</gender> + <age>32</age> + </person> + <person> + <first-name>Jane</first-name> + <last-name>Doe</last-name> + <gender>female</gender> + <age>28</age> + </person> +</people>)RP( + + )0 P(Compil)HY(ing)YH( )SM(people.xsd)ES( with the XSD compiler results + in three parser skele)HY(tons)YH( being gener)HY(ated)YH(: )SM(gender_pskel)ES(, + )SM(person_pskel)ES(, and )SM(people_pskel)ES(. We are going + to examine and imple)HY(ment)YH( each of them in the subse)HY(quent)YH( sections.)EP( + + )0 2 12 H(3.1)WB 61 Sn()WB 15 Sn( Imple)HY(ment)HY(ing)YH( the Gender Parser)EA()EH( + + )0 P(The gener)HY(ated)YH( )SM(gender_pskel)ES( parser skele)HY(ton)YH( looks like + this:)EP( + + ) 11 60 PR(class gender_pskel: public virtual xml_schema::string_pskel +{ +public: + // Parser callbacks. Override them in your implementation. + // + virtual void + pre \201\202; + + virtual void + post_gender \201\202; +};)RP( + + )0 P(Notice that )SM(gender_pskel)ES( inher)HY(its)YH( from + )SM(xml_schema::string_skel)ES( which is a parser skele)HY(ton)YH( + for built-in XML Schema type )SM(string)ES( and is + prede)HY(fined)YH( in the XSD runtime library. This is an example + of the general rule that parser skele)HY(tons)YH( follow: if a type + in XML Schema inher)HY(its)YH( from another then there will be an + equiv)HY(a)HY(lent)YH( inher)HY(i)HY(tance)YH( between the corre)HY(spond)HY(ing)YH( parser + skele)HY(ton)YH( classes.)EP( + + )0 P(The )SM(pre\201\202)ES( and )SM(post_gender\201\202)ES( call)HY(backs)YH( + should look famil)HY(iar)YH( from the previ)HY(ous)YH( chapter. Let's now + imple)HY(ment)YH( the parser. Our imple)HY(men)HY(ta)HY(tion)YH( will simply print + the gender to )SM(cout)ES(:)EP( + + + ) 11 51 PR(class gender_pimpl: public gender_pskel, + public xml_schema::string_pimpl +{ +public: + virtual void + post_gender \201\202 + { + std::string s = post_string \201\202; + cout << "gender: " << s << endl; + } +};)RP( + + )0 P(While the code is quite short, there is a lot going on. First, + notice that we are inher)HY(it)HY(ing)YH( from )SM(gender_pskel)ES( )EM(and)ES( + from )SM(xml_schema::string_pimpl)ES(. We've encoun)HY(tered)YH( + )SM(xml_schema::string_pimpl)ES( already; it is an + imple)HY(men)HY(ta)HY(tion)YH( of the )SM(xml_schema::string_pskel)ES( parser + skele)HY(ton)YH( for built-in XML Schema type )SM(string)ES(.)EP( + + )0 P(This is another common theme in the C++/Parser program)HY(ming)YH( model: + reusing imple)HY(men)HY(ta)HY(tions)YH( of the base parsers in the derived ones with + the C++ mixin idiom. In our case, )SM(string_pimpl)ES( will + do all the dirty work of extract)HY(ing)YH( the data and we can just get + it at the end with the call to )SM(post_string\201\202)ES(.)EP( + + )0 P(In case you are curious, here is what + )SM(xml_schema::string_pskel)ES( and + )SM(xml_schema::string_pimpl)ES( look like:)EP( + + ) 25 49 PR(namespace xml_schema +{ + class string_pskel: public simple_content + { + public: + virtual std::string + post_string \201\202 = 0; + }; + + class string_pimpl: public virtual string_pskel + { + public: + virtual void + _pre \201\202; + + virtual void + _characters \201const xml_schema::ro_string&\202; + + virtual std::string + post_string \201\202; + + protected: + std::string str_; + }; +})RP( + + )0 P(There are three new pieces in this code that we haven't seen yet. + They are the )SM(simple_content)ES( class as well as + the )SM(_pre\201\202)ES( and )SM(_char)HY(ac)HY(ters)YH(\201\202)ES( func)HY(tions)YH(. + The )SM(simple_content)ES( class is defined in the XSD + runtime and is a base class for all parser skele)HY(tons)YH( that conform + to the simple content model in XML Schema. Types with the + simple content model cannot have nested elements\236only text + and attributes. There is also the )SM(complex_content)ES( + class which corre)HY(sponds)YH( to the complex content mode \201types with + nested elements, for example, )SM(person)ES( from + )SM(people.xsd)ES(\202.)EP( + + )0 P(The )SM(_pre\201\202)ES( func)HY(tion)YH( is a parser call)HY(back)YH(. Remem)HY(ber)YH( we + talked about the )SM(pre\201\202)ES( and )SM(post_*\201\202)ES( call)HY(backs)YH( + in the previ)HY(ous)YH( chapter? There are actu)HY(ally)YH( two more call)HY(backs)YH( + with similar roles: )SM(_pre\201\202)ES( and )SM(_post \201\202)ES(. + As a result, each parser skele)HY(ton)YH( has four special call)HY(backs)YH(:)EP( + + ) 11 15 PR( virtual void + pre \201\202; + + virtual void + _pre \201\202; + + virtual void + _post \201\202; + + virtual void + post_name \201\202;)RP( + + )0 P()SM(pre\201\202)ES( and )SM(_pre\201\202)ES( are initial)HY(iza)HY(tion)YH( + call)HY(backs)YH(. They get called in that order before a new instance of the type + is about to be parsed. The differ)HY(ence)YH( between )SM(pre\201\202)ES( and + )SM(_pre\201\202)ES( is conven)HY(tional)YH(: )SM(pre\201\202)ES( can + be completely over)HY(rid)HY(den)YH( by a derived parser. The derived + parser can also over)HY(ride)YH( )SM(_pre\201\202)ES( but has to always call + the orig)HY(i)HY(nal)YH( version. This allows you to parti)HY(tion)YH( initial)HY(iza)HY(tion)YH( + into customiz)HY(able)YH( and required parts.)EP( + + )0 P(Simi)HY(larly)YH(, )SM(_post\201\202)ES( and )SM(post_name\201\202)ES( are + final)HY(iza)HY(tion)YH( call)HY(backs)YH( with exactly the same seman)HY(tics)YH(: + )SM(post_name\201\202)ES( can be completely over)HY(rid)HY(den)YH( by the derived + parser while the orig)HY(i)HY(nal)YH( )SM(_post\201\202)ES( should always be called. + )EP( + + )0 P(The final bit we need to discuss in this section is the + )SM(_char)HY(ac)HY(ters)YH(\201\202)ES( func)HY(tion)YH(. As you might have guessed, it + is also a call)HY(back)YH(. A low-level one that deliv)HY(ers)YH( raw char)HY(ac)HY(ter)YH( content + for the type being parsed. You will seldom need to use this call)HY(back)YH( + directly. Using imple)HY(men)HY(ta)HY(tions)YH( for the built-in parsers provided by + the XSD runtime is usually a simpler and more conve)HY(nient)YH( + alter)HY(na)HY(tive)YH(.)EP( + + )0 P(At this point you might be wonder)HY(ing)YH( why some )SM(post_*\201\202)ES( + call)HY(backs)YH(, for example )SM(post_string\201\202)ES(, return some data + while others, for example )SM(post_gender\201\202)ES(, have + )SM(void)ES( as a return type. This is a valid concern + and it will be addressed in the next chapter.)EP( + + )0 2 13 H(3.2)WB 62 Sn()WB 16 Sn( Imple)HY(ment)HY(ing)YH( the Person Parser)EA()EH( + + )0 P(The gener)HY(ated)YH( )SM(person_pskel)ES( parser skele)HY(ton)YH( looks like + this:)EP( + + ) 43 60 PR(class person_pskel: public xml_schema::complex_content +{ +public: + // Parser callbacks. Override them in your implementation. + // + virtual void + pre \201\202; + + virtual void + first_name \201const std::string&\202; + + virtual void + last_name \201const std::string&\202; + + virtual void + gender \201\202; + + virtual void + age \201short\202; + + virtual void + post_person \201\202; + + // Parser construction API. + // + void + first_name_parser \201xml_schema::string_pskel&\202; + + void + last_name_parser \201xml_schema::string_pskel&\202; +)WR( + void + gender_parser \201gender_pskel&\202; + + void + age_parser \201xml_schema::short_pskel&\202; + + void + parsers \201xml_schema::string_pskel& /* first-name */, + xml_schema::string_pskel& /* last-name */, + gender_pskel& /* gender */, + xml_schema::short_pskel& /* age */\202; +};)RP( + + + )0 P(As you can see, we have a parser call)HY(back)YH( for each of the nested + elements found in the )SM(person)ES( XML Schema type. + The imple)HY(men)HY(ta)HY(tion)YH( of this parser is straight)HY(for)HY(ward)YH(:)EP( + + ) 21 39 PR(class person_pimpl: public person_pskel +{ +public: + virtual void + first_name \201const std::string& n\202 + { + cout << "first: " << f << endl; + } + + virtual void + last_name \201const std::string& l\202 + { + cout << "last: " << l << endl; + } + + virtual void + age \201short a\202 + { + cout << "age: " << a << endl; + } +};)RP( + + )0 P(Notice that we didn't over)HY(ride)YH( the )SM(gender\201\202)ES( call)HY(back)YH( + because all the print)HY(ing)YH( is done by )SM(gender_pimpl)ES(.)EP( + + + )0 2 14 H(3.3)WB 63 Sn()WB 17 Sn( Imple)HY(ment)HY(ing)YH( the People Parser)EA()EH( + + )0 P(The gener)HY(ated)YH( )SM(people_pskel)ES( parser skele)HY(ton)YH( looks like + this:)EP( + + ) 22 60 PR(class people_pskel: public xml_schema::complex_content +{ +public: + // Parser callbacks. Override them in your implementation. + // + virtual void + pre \201\202; + + virtual void + person \201\202; + + virtual void + post_people \201\202; + + // Parser construction API. + // + void + person_parser \201person_pskel&\202; + + void + parsers \201person_pskel& /* person */\202; +};)RP( + + )0 P(The )SM(person\201\202)ES( call)HY(back)YH( will be called after parsing each + )SM(person)ES( element. While )SM(person_pimpl)ES( does + all the print)HY(ing)YH(, one useful thing we can do in this call)HY(back)YH( is to + print an extra newline after each person record so that our + output is more read)HY(able)YH(:)EP( + + ) 9 39 PR(class people_pimpl: public people_pskel +{ +public: + virtual void + person \201\202 + { + cout << endl; + } +};)RP( + + )0 P(Now it is time to put every)HY(thing)YH( together.)EP( + + + )0 2 15 H(3.4)WB 64 Sn()WB 18 Sn( Connect)HY(ing)YH( the Parsers Together)EA()EH( + + )0 P(At this point we have all the indi)HY(vid)HY(ual)YH( parsers imple)HY(mented)YH( + and can proceed to assem)HY(ble)YH( them into a complete parser + for our XML vocab)HY(u)HY(lary)YH(. The first step is to instan)HY(ti)HY(ate)YH( + all the indi)HY(vid)HY(ual)YH( parsers that we will need:)EP( + + ) 6 34 PR(xml_schema::short_pimpl short_p; +xml_schema::string_pimpl string_p; + +gender_pimpl gender_p; +person_pimpl person_p; +people_pimpl people_p;)RP( + + )0 P(Notice that our schema uses two built-in XML Schema types: + )SM(string)ES( for the )SM(first-name)ES( and + )SM(last-name)ES( elements as well as )SM(short)ES( + for )SM(age)ES(. We will use prede)HY(fined)YH( parsers that + come with the XSD runtime to handle these types. The next + step is to connect all the indi)HY(vid)HY(ual)YH( parsers. We do this + with the help of func)HY(tions)YH( defined in the parser + skele)HY(tons)YH( and marked with the "Parser Construc)HY(tion)YH( API" + comment. One way to do it is to connect each indi)HY(vid)HY(ual)YH( + parser by calling the )SM(*_parser\201\202)ES( func)HY(tions)YH(:)EP( + + ) 6 38 PR(person_p.first_name_parser \201string_p\202; +person_p.last_name_parser \201string_p\202; +person_p.gender_parser \201gender_p\202; +person_p.age_parser \201short_p\202; + +people_p.person_parser \201person_p\202;)RP( + + )0 P(You might be wonder)HY(ing)YH( what happens if you do not provide + a parser by not calling one of the )SM(*_parser\201\202)ES( func)HY(tions)YH(. + In that case the corre)HY(spond)HY(ing)YH( XML content will be skipped, + includ)HY(ing)YH( vali)HY(da)HY(tion)YH(. This is an effi)HY(cient)YH( way to ignore parts + of the docu)HY(ment)YH( that you are not inter)HY(ested)YH( in.)EP( + + + )0 P(An alter)HY(na)HY(tive)YH(, shorter, way to connect the parsers is by using + the )SM(parsers\201\202)ES( func)HY(tions)YH( which connects all the parsers + for a given type at once:)EP( + + ) 2 57 PR(person_p.parsers \201string_p, string_p, gender_p, short_p\202; +people_p.parsers \201person_p\202;)RP( + + )0 P(The follow)HY(ing)YH( figure illus)HY(trates)YH( the result)HY(ing)YH( connec)HY(tions)YH(. Notice + the corre)HY(spon)HY(dence)YH( between return types of the )SM(post_*\201\202)ES( + func)HY(tions)YH( and argu)HY(ment)YH( types of element call)HY(backs)YH( that are connected + by the arrows.)EP( + + + )2 Al()BR()0 0 IM()Ea()BR( + + )0 P(The last step is the construc)HY(tion)YH( of the docu)HY(ment)YH( parser and + invo)HY(ca)HY(tion)YH( of the complete parser on our sample XML instance:)EP( + + ) 5 48 PR(xml_schema::document doc_p \201people_p, "people"\202; + +people_p.pre \201\202; +doc_p.parse \201"people.xml"\202; +people_p.post_people \201\202;)RP( + + )0 P(Let's consider )SM(xml_schema::docu)HY(ment)YH()ES( in + more detail. While the exact defi)HY(ni)HY(tion)YH( of this class + varies depend)HY(ing)YH( on the under)HY(ly)HY(ing)YH( parser selected, + here is the common part:)EP( + + ) 24 56 PR(namespace xml_schema +{ + class document + { + public: + document \201xml_schema::parser_base&, + const std::string& root_element_name, + bool polymorphic = false\202; + + document \201xml_schema::parser_base&, + const std::string& root_element_namespace, + const std::string& root_element_name, + bool polymorphic = false\202; + + void + parse \201const std::string& file\202; + + void + parse \201std::istream&\202; + + ... + + }; +})RP( + + )0 P()SM(xml_schema::docu)HY(ment)YH()ES( is a root parser for + the vocab)HY(u)HY(lary)YH(. The first argu)HY(ment)YH( to its construc)HY(tors)YH( is the + parser for the type of the root element \201)SM(people_impl)ES( + in our case\202. Because a type parser is only concerned with + the element's content and not with the element's name, we need + to specify the root element's name some)HY(where)YH(. That's + what is passed as the second and third argu)HY(ments)YH( to the + )SM(docu)HY(ment)YH()ES('s construc)HY(tors)YH(.)EP( + + )0 P(There are also two over)HY(loaded)YH( )SM(parse\201\202)ES( func)HY(tions)YH( + defined in the )SM(docu)HY(ment)YH()ES( class \201there are actu)HY(ally)YH( + more but the others are specific to the under)HY(ly)HY(ing)YH( XML parser\202. + The first version parses a local file iden)HY(ti)HY(fied)YH( by a name. The + second version reads the data from an input stream. For more + infor)HY(ma)HY(tion)YH( on the )SM(xml_schema::docu)HY(ment)YH()ES( class + refer to )0 43 1 A(Chapter 7, "Docu)HY(ment)YH( Parser and Error + Handling")43 0 TN TL()Ec /AF f D(.)EP( + + )0 P(Let's now consider a step-by-step list of actions that happen + as we parse through )SM(people.xml)ES(. The content of + )SM(people.xml)ES( is repeated below for conve)HY(nience)YH(.)EP( + + ) 15 33 PR(<?xml version="1.0"?> +<people> + <person> + <first-name>John</first-name> + <last-name>Doe</last-name> + <gender>male</gender> + <age>32</age> + </person> + <person> + <first-name>Jane</first-name> + <last-name>Doe</last-name> + <gender>female</gender> + <age>28</age> + </person> +</people>)RP( + + + )4 OL( )-1 LI()SM(people_p.pre\201\202)ES( is called from + )SM(main\201\202)ES(. We did not provide any imple)HY(men)HY(ta)HY(tion)YH( + for this call)HY(back)YH( so this call is a no-op. + + )-1 LI()SM(doc_p.parse\201"people.xml"\202)ES( is called from + )SM(main\201\202)ES(. The parser opens the file and starts + parsing its content. + + )-1 LI(The parser encoun)HY(ters)YH( the root element. )SM(doc_p)ES( + veri)HY(fies)YH( that the root element is correct and calls + )SM(_pre\201\202)ES( on )SM(people_p)ES( which is also + a no-op. Parsing is now dele)HY(gated)YH( to )SM(people_p)ES(. + + )-1 LI(The parser encoun)HY(ters)YH( the )SM(person)ES( element. + )SM(people_p)ES( deter)HY(mines)YH( that )SM(person_p)ES( + is respon)HY(si)HY(ble)YH( for parsing this element. )SM(pre\201\202)ES( + and )SM(_pre\201\202)ES( call)HY(backs)YH( are called on )SM(person_p)ES(. + Parsing is now dele)HY(gated)YH( to )SM(person_p)ES(. + + )-1 LI(The parser encoun)HY(ters)YH( the )SM(first-name)ES( element. + )SM(person_p)ES( deter)HY(mines)YH( that )SM(string_p)ES( + is respon)HY(si)HY(ble)YH( for parsing this element. )SM(pre\201\202)ES( + and )SM(_pre\201\202)ES( call)HY(backs)YH( are called on )SM(string_p)ES(. + Parsing is now dele)HY(gated)YH( to )SM(string_p)ES(. + + )-1 LI(The parser encoun)HY(ters)YH( char)HY(ac)HY(ter)YH( content consist)HY(ing)YH( of + )SM("John")ES(. The )SM(_char)HY(ac)HY(ters)YH(\201\202)ES( call)HY(back)YH( is + called on )SM(string_p)ES(. + + )-1 LI(The parser encoun)HY(ters)YH( the end of )SM(first-name)ES( + element. The )SM(_post\201\202)ES( and )SM(post_string\201\202)ES( + call)HY(backs)YH( are called on )SM(string_p)ES(. The + )SM(first_name\201\202)ES( call)HY(back)YH( is called on )SM(person_p)ES( + with the return value of )SM(post_string\201\202)ES(. The + )SM(first_name\201\202)ES( imple)HY(men)HY(ta)HY(tion)YH( prints + )SM("first: John")ES( to )SM(cout)ES(. + Parsing is now returned to )SM(person_p)ES(. + + )-1 LI(Steps anal)HY(o)HY(gous)YH( to 5-7 are performed for the )SM(last-name)ES(, + )SM(gender)ES(, and )SM(age)ES( elements. + + )-1 LI(The parser encoun)HY(ters)YH( the end of )SM(person)ES( + element. The )SM(_post\201\202)ES( and )SM(post_person\201\202)ES( + call)HY(backs)YH( are called on )SM(person_p)ES(. The + )SM(person\201\202)ES( call)HY(back)YH( is called on )SM(people_p)ES(. + The )SM(person\201\202)ES( imple)HY(men)HY(ta)HY(tion)YH( prints a new line + to )SM(cout)ES(. Parsing is now returned to + )SM(people_p)ES(. + + )-1 LI(Steps 4-9 are performed for the second )SM(person)ES( + element. + + )-1 LI(The parser encoun)HY(ters)YH( the end of )SM(people)ES( + element. The )SM(_post\201\202)ES( call)HY(back)YH( is called on + )SM(people_p)ES(. The )SM(doc_p.parse\201"people.xml"\202)ES( + call returns to )SM(main\201\202)ES(. + + )-1 LI()SM(people_p.post_people\201\202)ES( is called from + )SM(main\201\202)ES( which is a no-op. + + )LO( + + + + + + )0 1 16 H(4)WB 65 Sn()WB 19 Sn( Type Maps)EA()EH( + + )0 P(There are many useful things you can do inside parser call)HY(backs)YH( as they + are right now. There are, however, times when you want to prop)HY(a)HY(gate)YH( + some infor)HY(ma)HY(tion)YH( from one parser to another or to the caller of the + parser. One common task that would greatly benefit from such a + possi)HY(bil)HY(ity)YH( is build)HY(ing)YH( a tree-like in-memory object model of the + data stored in XML. During execu)HY(tion)YH(, each indi)HY(vid)HY(ual)YH( sub-parser + would create a sub-tree and return it to its )EM(parent)ES( parser + which can then incor)HY(po)HY(rate)YH( this sub-tree into the whole tree.)EP( + + )0 P(In this chapter we will discuss the mech)HY(a)HY(nisms)YH( offered by the + C++/Parser mapping for return)HY(ing)YH( infor)HY(ma)HY(tion)YH( from indi)HY(vid)HY(ual)YH( + parsers and see how to use them to build an object model + of our people vocab)HY(u)HY(lary)YH(.)EP( + + )0 2 17 H(4.1)WB 66 Sn()WB 20 Sn( Object Model)EA()EH( + + )0 P(An object model for our person record example could + look like this \201saved in the )SM(people.hxx)ES( file\202:)EP( + + ) 53 35 PR(#include <string> +#include <vector> + +enum gender +{ + male, + female +}; + +class person +{ +public: + person \201const std::string& first, + const std::string& last, + ::gender gender, + short age\202 + : first_ \201first\202, last_ \201last\202, + gender_ \201gender\202, age_ \201age\202 + { + } + + const std::string& + first \201\202 const + { + return first_; + } + + const std::string& + last \201\202 const + { + return last_;)WR( + } + + ::gender + gender \201\202 const + { + return gender_; + } + + short + age \201\202 const + { + return age_; + } + +private: + std::string first_; + std::string last_; + ::gender gender_; + short age_; +}; + +typedef std::vector<person> people;)RP( + + )0 P(While it is clear which parser is respon)HY(si)HY(ble)YH( for which part of + the object model, it is not exactly clear how, for + example, )SM(gender_pimpl)ES( will deliver )SM(gender)ES( + to )SM(person_pimpl)ES(. You might have noticed that + )SM(string_pimpl)ES( manages to deliver its value to the + )SM(first_name\201\202)ES( call)HY(back)YH( of )SM(person_pimpl)ES(. Let's + see how we can utilize the same mech)HY(a)HY(nism)YH( to prop)HY(a)HY(gate)YH( our + own data.)EP( + + )0 P(There is a way to tell the XSD compiler that you want to + exchange data between parsers. More precisely, for each + type defined in XML Schema, you can tell the compiler two things. + First, the return type of the )SM(post_*\201\202)ES( call)HY(back)YH( + in the parser skele)HY(ton)YH( gener)HY(ated)YH( for this type. And, second, + the argu)HY(ment)YH( type for call)HY(backs)YH( corre)HY(spond)HY(ing)YH( to elements and + attributes of this type. For example, for XML Schema type + )SM(gender)ES( we can specify the return type for + )SM(post_gender\201\202)ES( in the )SM(gender_pskel)ES( + skele)HY(ton)YH( and the argu)HY(ment)YH( type for the )SM(gender\201\202)ES( call)HY(back)YH( + in the )SM(person_pskel)ES( skele)HY(ton)YH(. As you might have guessed, + the gener)HY(ated)YH( code will then pass the return value from the + )SM(post_*\201\202)ES( call)HY(back)YH( as an argu)HY(ment)YH( to the element or + attribute call)HY(back)YH(.)EP( + + )0 P(The way to tell the XSD compiler about these XML Schema to + C++ mappings is with type map files. Here is a simple type + map for the )SM(gender)ES( type from the previ)HY(ous)YH( para)HY(graph)YH(:)EP( + + ) 2 25 PR(include "people.hxx"; +gender ::gender ::gender;)RP( + + )0 P(The first line indi)HY(cates)YH( that the gener)HY(ated)YH( code must include + )SM(people.hxx)ES( in order to get the defi)HY(ni)HY(tion)YH( for the + )SM(gender)ES( type. The second line spec)HY(i)HY(fies)YH( that both + argu)HY(ment)YH( and return types for the )SM(gender)ES( + XML Schema type should be the )SM(::gender)ES( C++ enum + \201we use fully-qual)HY(i)HY(fied)YH( C++ names to avoid name clashes\202. + The next section will describe the type map format in detail. + We save this type map in )SM(people.map)ES( and + then trans)HY(late)YH( our schemas with the )SM(--type-map)ES( + option to let the XSD compiler know about our type map:)EP( + + ) 1 49 PR($ xsd cxx-parser --type-map people.map people.xsd)RP( + + )0 P(If we now look at the gener)HY(ated)YH( )SM(people-pskel.hxx)ES(, + we will see the follow)HY(ing)YH( changes in the )SM(gender_pskel)ES( and + )SM(person_pskel)ES( skele)HY(tons)YH(:)EP( + + ) 17 59 PR(#include "people.hxx" + +class gender_pskel: public virtual xml_schema::string_pskel +{ + virtual ::gender + post_gender \201\202 = 0; + + ... +}; + +class person_pskel: public xml_schema::complex_content +{ + virtual void + gender \201::gender\202; + + ... +};)RP( + + )0 P(Notice that )SM(#include "people.hxx")ES( was added to + the gener)HY(ated)YH( header file from the type map to provide the + defi)HY(ni)HY(tion)YH( for the )SM(gender)ES( enum.)EP( + + )0 2 18 H(4.2)WB 67 Sn()WB 21 Sn( Type Map File Format)EA()EH( + + )0 P(Type map files are used to define a mapping between XML Schema + and C++ types. The compiler uses this infor)HY(ma)HY(tion)YH( + to deter)HY(mine)YH( return types of )SM(post_*\201\202)ES( + call)HY(backs)YH( in parser skele)HY(tons)YH( corre)HY(spond)HY(ing)YH( to XML Schema + types as well as argu)HY(ment)YH( types for call)HY(backs)YH( corre)HY(spond)HY(ing)YH( + to elements and attributes of these types.)EP( + + )0 P(The compiler has a set of prede)HY(fined)YH( mapping rules that map + the built-in XML Schema types to suit)HY(able)YH( C++ types \201discussed + below\202 and all other types to )SM(void)ES(. + By provid)HY(ing)YH( your own type maps you can over)HY(ride)YH( these prede)HY(fined)YH( + rules. The format of the type map file is presented below: + )EP( + + ) 5 58 PR(namespace <schema-namespace> [<cxx-namespace>] +{ + \201include <file-name>;\202* + \201[type] <schema-type> <cxx-ret-type> [<cxx-arg-type>];\202* +})RP( + + )0 P(Both )SM()I(<schema-names)HY(pace)YH(>)ES()ES( and + )SM()I(<schema-type>)ES()ES( are regex patterns while + )SM()I(<cxx-names)HY(pace)YH(>)ES()ES(, + )SM()I(<cxx-ret-type>)ES()ES(, and + )SM()I(<cxx-arg-type>)ES()ES( are regex pattern + substi)HY(tu)HY(tions)YH(. All names can be option)HY(ally)YH( enclosed in + )SM(" ")ES(, for example, to include white-spaces.)EP( + + )0 P()SM()I(<schema-names)HY(pace)YH(>)ES()ES( deter)HY(mines)YH( XML + Schema names)HY(pace)YH(. Optional )SM()I(<cxx-names)HY(pace)YH(>)ES()ES( + is prefixed to every C++ type name in this names)HY(pace)YH( decla)HY(ra)HY(tion)YH(. + )SM()I(<cxx-ret-type>)ES()ES( is a C++ type name that is + used as a return type for the )SM(post_*\201\202)ES( call)HY(back)YH(. + Optional )SM()I(<cxx-arg-type>)ES()ES( is an argu)HY(ment)YH( + type for call)HY(backs)YH( corre)HY(spond)HY(ing)YH( to elements and attributes + of this type. If )SM()I(<cxx-arg-type>)ES()ES( is not + spec)HY(i)HY(fied)YH(, it defaults to )SM()I(<cxx-ret-type>)ES()ES( + if )SM()I(<cxx-ret-type>)ES()ES( ends with )SM(*)ES( or + )SM(&)ES( \201that is, it is a pointer or a refer)HY(ence)YH(\202 and + )SM(const\240)I(<cxx-ret-type>)ES(&)ES( + other)HY(wise)YH(. + )SM()I(<file-name>)ES()ES( is a file name either in the + )SM(" ")ES( or )SM(< >)ES( format + and is added with the )SM(#include)ES( direc)HY(tive)YH( to + the gener)HY(ated)YH( code.)EP( + + )0 P(The )SM()BD(#)ES()ES( char)HY(ac)HY(ter)YH( starts a comment that ends + with a new line or end of file. To specify a name that contains + )SM()BD(#)ES()ES( enclose it in )SM()BD(" ")ES()ES(. + For example:)EP( + + ) 12 44 PR(namespace http://www.example.com/xmlns/my my +{ + include "my.hxx"; + + # Pass apples by value. + # + apple apple; + + # Pass oranges as pointers. + # + orange orange_t*; +})RP( + + )0 P(In the example above, for the + )SM(http://www.example.com/xmlns/my#orange)ES( + XML Schema type, the )SM(my::orange_t*)ES( C++ type will + be used as both return and argu)HY(ment)YH( types.)EP( + + )0 P(Several names)HY(pace)YH( decla)HY(ra)HY(tions)YH( can be spec)HY(i)HY(fied)YH( in a single + file. The names)HY(pace)YH( decla)HY(ra)HY(tion)YH( can also be completely + omitted to map types in a schema without a names)HY(pace)YH(. For + instance:)EP( + + ) 7 41 PR(include "my.hxx"; +apple apple; + +namespace http://www.example.com/xmlns/my +{ + orange "const orange_t*"; +})RP( + + )0 P(The compiler has a number of prede)HY(fined)YH( mapping rules for + the built-in XML Schema types which can be presented as the + follow)HY(ing)YH( map files. The string-based XML Schema types are + mapped to either )SM(std::string)ES( or + )SM(std::wstring)ES( depend)HY(ing)YH( on the char)HY(ac)HY(ter)YH( type + selected \201see )0 24 1 A( Section 5.1, "Char)HY(ac)HY(ter)YH( Type and + Encod)HY(ing)YH(")24 0 TN TL()Ec /AF f D( for more infor)HY(ma)HY(tion)YH(\202.)EP( + + ) 59 63 PR(namespace http://www.w3.org/2001/XMLSchema +{ + boolean bool bool; + + byte "signed char" "signed char"; + unsignedByte "unsigned char" "unsigned char"; + + short short short; + unsignedShort "unsigned short" "unsigned short"; + + int int int; + unsignedInt "unsigned int" "unsigned int"; + + long "long long" "long long"; + unsignedLong "unsigned long long" "unsigned long long"; + + integer "long long" "long long"; + + negativeInteger "long long" "long long"; + nonPositiveInteger "long long" "long long"; + + positiveInteger "unsigned long long" "unsigned long long"; + nonNegativeInteger "unsigned long long" "unsigned long long"; + + float float float; + double double double; + decimal double double; + + string std::string; + normalizedString std::string; + token std::string;)WR( + Name std::string; + NMTOKEN std::string; + NCName std::string; + ID std::string; + IDREF std::string; + language std::string; + anyURI std::string; + + NMTOKENS xml_schema::string_sequence; + IDREFS xml_schema::string_sequence; + + QName xml_schema::qname; + + base64Binary std::auto_ptr<xml_schema::buffer> + std::auto_ptr<xml_schema::buffer>; + hexBinary std::auto_ptr<xml_schema::buffer> + std::auto_ptr<xml_schema::buffer>; + + date xml_schema::date; + dateTime xml_schema::date_time; + duration xml_schema::duration; + gDay xml_schema::gday; + gMonth xml_schema::gmonth; + gMonthDay xml_schema::gmonth_day; + gYear xml_schema::gyear; + gYearMonth xml_schema::gyear_month; + time xml_schema::time; +})RP( + + )0 P(For more infor)HY(ma)HY(tion)YH( about the mapping of the built-in XML Schema types + to C++ types refer to )0 28 1 A(Chapter 6, "Built-In XML Schema Type + Parsers")28 0 TN TL()Ec /AF f D(. The last prede)HY(fined)YH( rule maps anything that wasn't + mapped by previ)HY(ous)YH( rules to )SM(void)ES(:)EP( + + ) 4 15 PR(namespace .* +{ + .* void void; +})RP( + + + )0 P(When you provide your own type maps with the + )SM(--type-map)ES( option, they are eval)HY(u)HY(ated)YH( first. This + allows you to selec)HY(tively)YH( over)HY(ride)YH( any of the prede)HY(fined)YH( rules. + Note also that if you change the mapping + of a built-in XML Schema type then it becomes your respon)HY(si)HY(bil)HY(ity)YH( + to provide the corre)HY(spond)HY(ing)YH( parser skele)HY(ton)YH( and imple)HY(men)HY(ta)HY(tion)YH( + in the )SM(xml_schema)ES( names)HY(pace)YH(. You can include the + custom defi)HY(ni)HY(tions)YH( into the gener)HY(ated)YH( header file using the + )SM(--hxx-prologue-*)ES( options.)EP( + + )0 2 19 H(4.3)WB 68 Sn()WB 22 Sn( Parser Imple)HY(men)HY(ta)HY(tions)YH()EA()EH( + + )0 P(With the knowl)HY(edge)YH( from the previ)HY(ous)YH( section, we can proceed + with creat)HY(ing)YH( a type map that maps types in the )SM(people.xsd)ES( + schema to our object model classes in + )SM(people.hxx)ES(. In fact, we already have the begin)HY(ning)YH( + of our type map file in )SM(people.map)ES(. Let's extend + it with the rest of the types:)EP( + + ) 5 25 PR(include "people.hxx"; + +gender ::gender ::gender; +person ::person; +people ::people;)RP( + + )0 P(There are a few things to note about this type map. We did not + provide the argu)HY(ment)YH( types for )SM(person)ES( and + )SM(people)ES( because the default constant refer)HY(ence)YH( is + exactly what we need. We also did not provide any mappings + for built-in XML Schema types )SM(string)ES( and + )SM(short)ES( because they are handled by the prede)HY(fined)YH( + rules and we are happy with the result. Note also that + all C++ types are fully qual)HY(i)HY(fied)YH(. This is done to avoid + poten)HY(tial)YH( name conflicts in the gener)HY(ated)YH( code. Now we can + recom)HY(pile)YH( our schema and move on to imple)HY(ment)HY(ing)YH( the parsers:)EP( + + ) 1 68 PR($ xsd cxx-parser --xml-parser expat --type-map people.map people.xsd)RP( + + )0 P(Here is the imple)HY(men)HY(ta)HY(tion)YH( of our three parsers in full. One + way to save typing when imple)HY(ment)HY(ing)YH( your own parsers is + to open the gener)HY(ated)YH( code and copy the signa)HY(tures)YH( of parser + call)HY(backs)YH( into your code. Or you could always auto gener)HY(ate)YH( the + sample imple)HY(men)HY(ta)HY(tions)YH( and fill them with your code.)EP( + + + ) 73 52 PR(#include "people-pskel.hxx" + +class gender_pimpl: public gender_pskel, + public xml_schema::string_pimpl +{ +public: + virtual ::gender + post_gender \201\202 + { + return post_string \201\202 == "male" ? male : female; + } +}; + +class person_pimpl: public person_pskel +{ +public: + virtual void + first_name \201const std::string& f\202 + { + first_ = f; + } + + virtual void + last_name \201const std::string& l\202 + { + last_ = l; + } + + virtual void + gender \201::gender g\202 + {)WR( + gender_ = g; + } + + virtual void + age \201short a\202 + { + age_ = a; + } + + virtual ::person + post_person \201\202 + { + return ::person \201first_, last_, gender_, age_\202; + } + +private: + std::string first_; + std::string last_; + ::gender gender_; + short age_; +}; + +class people_pimpl: public people_pskel +{ +public: + virtual void + person \201const ::person& p\202 + { + people_.push_back \201p\202; + })WR( + + virtual ::people + post_people \201\202 + { + ::people r; + r.swap \201people_\202; + return r; + } + +private: + ::people people_; +};)RP( + + )0 P(This code frag)HY(ment)YH( should look famil)HY(iar)YH( by now. Just note that + all the )SM(post_*\201\202)ES( call)HY(backs)YH( now have return types instead + of )SM(void)ES(. Here is the imple)HY(men)HY(ta)HY(tion)YH( of the test + driver for this example:)EP( + + ) 38 76 PR(#include <iostream> + +using namespace std; + +int +main \201int argc, char* argv[]\202 +{ + // Construct the parser. + // + xml_schema::short_pimpl short_p; + xml_schema::string_pimpl string_p; + + gender_pimpl gender_p; + person_pimpl person_p; + people_pimpl people_p; + + person_p.parsers \201string_p, string_p, gender_p, short_p\202; + people_p.parsers \201person_p\202; + + // Parse the document to obtain the object model. + // + xml_schema::document doc_p \201people_p, "people"\202; + + people_p.pre \201\202; + doc_p.parse \201argv[1]\202; + people ppl = people_p.post_people \201\202; + + // Print the object model. + // + for \201people::iterator i \201ppl.begin \201\202\202; i != ppl.end \201\202; ++i\202 + {)WR( + cout << "first: " << i->first \201\202 << endl + << "last: " << i->last \201\202 << endl + << "gender: " << \201i->gender \201\202 == male ? "male" : "female"\202 << endl + << "age: " << i->age \201\202 << endl + << endl; + } +})RP( + + )0 P(The parser creation and assem)HY(bly)YH( part is exactly the same as in + the previ)HY(ous)YH( chapter. The parsing part is a bit differ)HY(ent)YH(: + )SM(post_people\201\202)ES( now has a return value which is the + complete object model. We store it in the + )SM(ppl)ES( vari)HY(able)YH(. The last bit of the code simply iter)HY(ates)YH( + over the )SM(people)ES( vector and prints the infor)HY(ma)HY(tion)YH( + for each person. We save the last two code frag)HY(ments)YH( to + )SM(driver.cxx)ES( and proceed to compile and test + our new appli)HY(ca)HY(tion)YH(:)EP( + + + ) 12 49 PR($ c++ -I.../libxsd -c driver.cxx people-pskel.cxx +$ c++ -o driver driver.o people-pskel.o -lexpat +$ ./driver people.xml +first: John +last: Doe +gender: male +age: 32 + +first: Jane +last: Doe +gender: female +age: 28)RP( + + + + + + )0 1 20 H(5)WB 69 Sn()WB 23 Sn( Mapping Config)HY(u)HY(ra)HY(tion)YH()EA()EH( + + )0 P(The C++/Parser mapping has a number of config)HY(u)HY(ra)HY(tion)YH( param)HY(e)HY(ters)YH( that + deter)HY(mine)YH( the overall prop)HY(er)HY(ties)YH( and behav)HY(ior)YH( of the gener)HY(ated)YH( code. + Config)HY(u)HY(ra)HY(tion)YH( param)HY(e)HY(ters)YH( are spec)HY(i)HY(fied)YH( with the XSD command line + options and include the char)HY(ac)HY(ter)YH( type that is used by the gener)HY(ated)YH( + code, the under)HY(ly)HY(ing)YH( XML parser, whether the XML Schema vali)HY(da)HY(tion)YH( + is performed in the gener)HY(ated)YH( code, and support for XML Schema + poly)HY(mor)HY(phism)YH(. This chapter describes these config)HY(u)HY(ra)HY(tion)YH( + param)HY(e)HY(ters)YH( in more detail. For more ways to config)HY(ure)YH( the gener)HY(ated)YH( + code refer to the + )R1 2 A(XSD + Compiler Command Line Manual)EA(. + )EP( + + )0 2 21 H(5.1)WB 70 Sn()WB 24 Sn( Char)HY(ac)HY(ter)YH( Type and Encod)HY(ing)YH()EA()EH( + + )0 P(The C++/Parser mapping has built-in support for two char)HY(ac)HY(ter)YH( types: + )SM(char)ES( and )SM(wchar_t)ES(. You can select the + char)HY(ac)HY(ter)YH( type with the )SM(--char-type)ES( command line + option. The default char)HY(ac)HY(ter)YH( type is )SM(char)ES(. The + string-based built-in XML Schema types are returned as either + )SM(std::string)ES( or )SM(std::wstring)ES( depend)HY(ing)YH( + on the char)HY(ac)HY(ter)YH( type selected.)EP( + + )0 P(Another aspect of the mapping that depends on the char)HY(ac)HY(ter)YH( type + is char)HY(ac)HY(ter)YH( encod)HY(ing)YH(. For the )SM(char)ES( char)HY(ac)HY(ter)YH( type + the default encod)HY(ing)YH( is UTF-8. Other supported encod)HY(ings)YH( are + ISO-8859-1, Xerces-C++ Local Code Page \201LPC\202, as well as + custom encod)HY(ings)YH(. You can select which encod)HY(ing)YH( should be used + in the object model with the )SM(--char-encod)HY(ing)YH()ES( command + line option.)EP( + + )0 P(For the )SM(wchar_t)ES( char)HY(ac)HY(ter)YH( type the encod)HY(ing)YH( is + auto)HY(mat)HY(i)HY(cally)YH( selected between UTF-16 and UTF-32/UCS-4 depend)HY(ing)YH( + on the size of the )SM(wchar_t)ES( type. On some plat)HY(forms)YH( + \201for example, Windows with Visual C++ and AIX with IBM XL C++\202 + )SM(wchar_t)ES( is 2 bytes long. For these plat)HY(forms)YH( the + encod)HY(ing)YH( is UTF-16. On other plat)HY(forms)YH( )SM(wchar_t)ES( is 4 bytes + long and UTF-32/UCS-4 is used.)EP( + + )0 P(Note also that the char)HY(ac)HY(ter)YH( encod)HY(ing)YH( that is used in the object model + is inde)HY(pen)HY(dent)YH( of the encod)HY(ings)YH( used in input and output XML. In fact, + all three \201object mode, input XML, and output XML\202 can have differ)HY(ent)YH( + encod)HY(ings)YH(.)EP( + + )0 2 22 H(5.2)WB 71 Sn()WB 25 Sn( Under)HY(ly)HY(ing)YH( XML Parser)EA()EH( + + )0 P(The C++/Parser mapping can be used with either Xerces-C++ or Expat + as the under)HY(ly)HY(ing)YH( XML parser. You can select the XML parser with + the )SM(--xml-parser)ES( command line option. Valid values + for this option are )SM(xerces)ES( and )SM(expat)ES(. + The default XML parser is Xerces-C++.)EP( + + )0 P(The gener)HY(ated)YH( code is iden)HY(ti)HY(cal)YH( for both parsers except for the + )SM(xml_schema::docu)HY(ment)YH()ES( class in which some of the + )SM(parse\201\202)ES( func)HY(tions)YH( are parser-specific as described + in )0 43 1 A(Chapter 7, "Docu)HY(ment)YH( Parser and Error Handling")43 0 TN TL()Ec /AF f D(.)EP( + + + )0 2 23 H(5.3)WB 72 Sn()WB 26 Sn( XML Schema Vali)HY(da)HY(tion)YH()EA()EH( + + )0 P(The C++/Parser mapping provides support for vali)HY(dat)HY(ing)YH( a + commonly-used subset of W3C XML Schema in the gener)HY(ated)YH( code. + For the list of supported XML Schema constructs refer to + )0 47 1 A(Appendix A, "Supported XML Schema Constructs")47 0 TN TL()Ec /AF f D(.)EP( + + )0 P(By default vali)HY(da)HY(tion)YH( in the gener)HY(ated)YH( code is disabled if + the under)HY(ly)HY(ing)YH( XML parser is vali)HY(dat)HY(ing)YH( \201Xerces-C++\202 and + enabled other)HY(wise)YH( \201Expat\202. See )0 25 1 A(Section 5.2, + "Under)HY(ly)HY(ing)YH( XML Parser")25 0 TN TL()Ec /AF f D( for more infor)HY(ma)HY(tion)YH( about + the under)HY(ly)HY(ing)YH( XML parser. You can over)HY(ride)YH( the default + behav)HY(ior)YH( with the )SM(--gener)HY(ate)YH(-vali)HY(da)HY(tion)YH()ES( + and )SM(--suppress-vali)HY(da)HY(tion)YH()ES( command line options.)EP( + + + )0 2 24 H(5.4)WB 73 Sn()WB 27 Sn( Support for Poly)HY(mor)HY(phism)YH()EA()EH( + + )0 P(By default the XSD compiler gener)HY(ates)YH( non-poly)HY(mor)HY(phic)YH( code. If your + vocab)HY(u)HY(lary)YH( uses XML Schema poly)HY(mor)HY(phism)YH( in the form of )SM(xsi:type)ES( + and/or substi)HY(tu)HY(tion)YH( groups, then you will need to compile your schemas + with the )SM(--gener)HY(ate)YH(-poly)HY(mor)HY(phic)YH()ES( option to produce + poly)HY(mor)HY(phism)YH(-aware code as well as pass )SM(true)ES( as the last + argu)HY(ment)YH( to the )SM(xml_schema::docu)HY(ment)YH()ES('s construc)HY(tors)YH(.)EP( + + )0 P(When using the poly)HY(mor)HY(phism)YH(-aware gener)HY(ated)YH( code, you can specify + several parsers for a single element by passing a parser map + instead of an indi)HY(vid)HY(ual)YH( parser to the parser connec)HY(tion)YH( func)HY(tion)YH( + for the element. One of the parsers will then be looked up and used + depend)HY(ing)YH( on the )SM(xsi:type)ES( attribute value or an element + name from a substi)HY(tu)HY(tion)YH( group. Consider the follow)HY(ing)YH( schema as an + example:)EP( + + ) 44 62 PR(<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> + + <xs:complexType name="person"> + <xs:sequence> + <xs:element name="name" type="xs:string"/> + </xs:sequence> + </xs:complexType> + + <!-- substitution group root --> + <xs:element name="person" type="person"/> + + <xs:complexType name="superman"> + <xs:complexContent> + <xs:extension base="person"> + <xs:attribute name="can-fly" type="xs:boolean"/> + </xs:extension> + </xs:complexContent> + </xs:complexType> + + <xs:element name="superman" + type="superman" + substitutionGroup="person"/> + + <xs:complexType name="batman"> + <xs:complexContent> + <xs:extension base="superman"> + <xs:attribute name="wing-span" type="xs:unsignedInt"/> + </xs:extension> + </xs:complexContent> + </xs:complexType> +)WR( + <xs:element name="batman" + type="batman" + substitutionGroup="superman"/> + + <xs:complexType name="supermen"> + <xs:sequence> + <xs:element ref="person" maxOccurs="unbounded"/> + </xs:sequence> + </xs:complexType> + + <xs:element name="supermen" type="supermen"/> + +</xs:schema>)RP( + + )0 P(Conform)HY(ing)YH( XML docu)HY(ments)YH( can use the )SM(super)HY(man)YH()ES( + and )SM(batman)ES( types in place of the )SM(person)ES( + type either by spec)HY(i)HY(fy)HY(ing)YH( the type with the )SM(xsi:type)ES( + attributes or by using the elements from the substi)HY(tu)HY(tion)YH( + group, for instance:)EP( + + + ) 15 64 PR(<supermen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + + <person> + <name>John Doe</name> + </person> + + <superman can-fly="false"> + <name>James "007" Bond</name> + </superman> + + <superman can-fly="true" wing-span="10" xsi:type="batman"> + <name>Bruce Wayne</name> + </superman> + +</supermen>)RP( + + )0 P(To print the data stored in such XML docu)HY(ments)YH( we can imple)HY(ment)YH( + the parsers as follows:)EP( + + ) 79 52 PR(class person_pimpl: public virtual person_pskel +{ +public: + virtual void + pre \201\202 + { + cout << "starting to parse person" << endl; + } + + virtual void + name \201const std::string& v\202 + { + cout << "name: " << v << endl; + } + + virtual void + post_person \201\202 + { + cout << "finished parsing person" << endl; + } +}; + +class superman_pimpl: public virtual superman_pskel, + public person_pimpl +{ +public: + virtual void + pre \201\202 + { + cout << "starting to parse superman" << endl; + })WR( + + virtual void + can_fly \201bool v\202 + { + cout << "can-fly: " << v << endl; + } + + virtual void + post_person \201\202 + { + post_superman \201\202; + } + + virtual void + post_superman \201\202 + { + cout << "finished parsing superman" << endl + } +}; + +class batman_pimpl: public virtual batman_pskel, + public superman_pimpl +{ +public: + virtual void + pre \201\202 + { + cout << "starting to parse batman" << endl; + } +)WR( + virtual void + wing_span \201unsigned int v\202 + { + cout << "wing-span: " << v << endl; + } + + virtual void + post_superman \201\202 + { + post_batman \201\202; + } + + virtual void + post_batman \201\202 + { + cout << "finished parsing batman" << endl; + } +};)RP( + + )0 P(Note that because the derived type parsers \201)SM(super)HY(man)YH(_pskel)ES( + and )SM(batman_pskel)ES(\202 are called via the )SM(person_pskel)ES( + inter)HY(face)YH(, we have to over)HY(ride)YH( the )SM(post_person\201\202)ES( + virtual func)HY(tion)YH( in )SM(super)HY(man)YH(_pimpl)ES( to call + )SM(post_super)HY(man)YH(\201\202)ES( and the )SM(post_super)HY(man)YH(\201\202)ES( + virtual func)HY(tion)YH( in )SM(batman_pimpl)ES( to call + )SM(post_batman\201\202)ES(.)EP( + + )0 P(The follow)HY(ing)YH( code frag)HY(ment)YH( shows how to connect the parsers together. + Notice that for the )SM(person)ES( element in the )SM(super)HY(men)YH(_p)ES( + parser we specify a parser map instead of a specific parser and we pass + )SM(true)ES( as the last argu)HY(ment)YH( to the docu)HY(ment)YH( parser construc)HY(tor)YH( + to indi)HY(cate)YH( that we are parsing poten)HY(tially)YH(-poly)HY(mor)HY(phic)YH( XML docu)HY(ments)YH(:)EP( + + ) 39 64 PR(int +main \201int argc, char* argv[]\202 +{ + // Construct the parser. + // + xml_schema::string_pimpl string_p; + xml_schema::boolean_pimpl boolean_p; + xml_schema::unsigned_int_pimpl unsigned_int_p; + + person_pimpl person_p; + superman_pimpl superman_p; + batman_pimpl batman_p; + + xml_schema::parser_map_impl person_map; + supermen_pimpl supermen_p; + + person_p.parsers \201string_p\202; + superman_p.parsers \201string_p, boolean_p\202; + batman_p.parsers \201string_p, boolean_p, unsigned_int_p\202; + + // Here we are specifying a parser map which containes several + // parsers that can be used to parse the person element. + // + person_map.insert \201person_p\202; + person_map.insert \201superman_p\202; + person_map.insert \201batman_p\202; + + supermen_p.person_parser \201person_map\202; + + // Parse the XML document. The last argument to the document's + // constructor indicates that we are parsing polymorphic XML)WR( + // documents. + // + xml_schema::document doc_p \201supermen_p, "supermen", true\202; + + supermen_p.pre \201\202; + doc_p.parse \201argv[1]\202; + supermen_p.post_supermen \201\202; +})RP( + + )0 P(When poly)HY(mor)HY(phism)YH(-aware code is gener)HY(ated)YH(, each element's + )SM(*_parser\201\202)ES( func)HY(tion)YH( is over)HY(loaded)YH( to also accept + an object of the )SM(xml_schema::parser_map)ES( type. + For example, the )SM(super)HY(men)YH(_pskel)ES( class from the + above example looks like this:)EP( + + ) 21 63 PR(class supermen_pskel: public xml_schema::parser_complex_content +{ +public: + + ... + + // Parser construction API. + // + void + parsers \201person_pskel&\202; + + // Individual element parsers. + // + void + person_parser \201person_pskel&\202; + + void + person_parser \201const xml_schema::parser_map&\202; + + ... +};)RP( + + )0 P(Note that you can specify both the indi)HY(vid)HY(ual)YH( \201static\202 parser and + the parser map. The indi)HY(vid)HY(ual)YH( parser will be used when the static + element type and the dynamic type of the object being parsed are + the same. This is the case, for example, when there is no + )SM(xsi:type)ES( attribute and the element hasn't been + substi)HY(tuted)YH(. Because the indi)HY(vid)HY(ual)YH( parser for an element is + cached and no map lookup is neces)HY(sary)YH(, it makes sense to specify + both the indi)HY(vid)HY(ual)YH( parser and the parser map when most of the + objects being parsed are of the static type and optimal + perfor)HY(mance)YH( is impor)HY(tant)YH(. The follow)HY(ing)YH( code frag)HY(ment)YH( shows + how to change the above example to set both the indi)HY(vid)HY(ual)YH( + parser and the parser map:)EP( + + ) 13 40 PR(int +main \201int argc, char* argv[]\202 +{ + ... + + person_map.insert \201superman_p\202; + person_map.insert \201batman_p\202; + + supermen_p.person_parser \201person_p\202; + supermen_p.person_parser \201person_map\202; + + ... +})RP( + + + )0 P(The )SM(xml_schema::parser_map)ES( inter)HY(face)YH( and the + )SM(xml_schema::parser_map_impl)ES( default imple)HY(men)HY(ta)HY(tion)YH( + are presented below:)EP( + + ) 27 45 PR(namespace xml_schema +{ + class parser_map + { + public: + virtual parser_base* + find \201const ro_string* type\202 const = 0; + }; + + class parser_map_impl: public parser_map + { + public: + void + insert \201parser_base&\202; + + virtual parser_base* + find \201const ro_string* type\202 const; + + private: + parser_map_impl \201const parser_map_impl&\202; + + parser_map_impl& + operator= \201const parser_map_impl&\202; + + ... + }; +})RP( + + )0 P(The )SM(type)ES( argu)HY(ment)YH( in the )SM(find\201\202)ES( virtual + func)HY(tion)YH( is the type name and names)HY(pace)YH( from the xsi:type attribute + \201the names)HY(pace)YH( prefix is resolved to the actual XML names)HY(pace)YH(\202 + or the type of an element from the substi)HY(tu)HY(tion)YH( group in the form + )SM("<name>\240<names)HY(pace)YH(>")ES( with the space and the + names)HY(pace)YH( part absent if the type does not have a names)HY(pace)YH(. + You can obtain a parser's dynamic type in the same format + using the )SM(_dynamic_type\201\202)ES( func)HY(tion)YH(. The static + type can be obtained by calling the static )SM(_static_type\201\202)ES( + func)HY(tion)YH(, for example )SM(person_pskel::_static_type\201\202)ES(. + Both func)HY(tions)YH( return a C string \201)SM(const char*)ES( or + )SM(const wchar_t*)ES(, depend)HY(ing)YH( on the char)HY(ac)HY(ter)YH( type + used\202 which is valid for as long as the appli)HY(ca)HY(tion)YH( is running. + The follow)HY(ing)YH( example shows how we can imple)HY(ment)YH( our own parser + map using )SM(std::map)ES(:)EP( + + + ) 23 62 PR(#include <map> +#include <string> + +class parser_map: public xml_schema::parser_map +{ +public: + void + insert \201xml_schema::parser_base& p\202 + { + map_[p._dynamic_type \201\202] = &p; + } + + virtual xml_schema::parser_base* + find \201const xml_schema::ro_string* type\202 const + { + map::const_iterator i = map_.find \201type\202; + return i != map_.end \201\202 ? i->second : 0; + } + +private: + typedef std::map<std::string, xml_schema::parser_base*> map; + map map_; +};)RP( + + )0 P(Most of code presented in this section is taken from the + )SM(poly)HY(mor)HY(phism)YH()ES( example which can be found in the + )SM(exam)HY(ples)YH(/cxx/parser/)ES( direc)HY(tory)YH( of the XSD distri)HY(bu)HY(tion)YH(. + Handling of )SM(xsi:type)ES( and substi)HY(tu)HY(tion)YH( groups when used + on root elements requires a number of special actions as shown in + the )SM(poly)HY(root)YH()ES( example.)EP( + + + + + + )0 1 25 H(6)WB 74 Sn()WB 28 Sn( Built-In XML Schema Type Parsers)EA()EH( + + )0 P(The XSD runtime provides parser imple)HY(men)HY(ta)HY(tions)YH( for all built-in + XML Schema types as summa)HY(rized)YH( in the follow)HY(ing)YH( table. Decla)HY(ra)HY(tions)YH( + for these types are auto)HY(mat)HY(i)HY(cally)YH( included into each gener)HY(ated)YH( + header file. As a result you don't need to include any headers + to gain access to these parser imple)HY(men)HY(ta)HY(tions)YH(. Note that some + parsers return either )SM(std::string)ES( or + )SM(std::wstring)ES( depend)HY(ing)YH( on the char)HY(ac)HY(ter)YH( type selected.)EP( + + + )0 PT( + + )0 2 26 H(6.1)WB 75 Sn()WB 30 Sn( )SM(QName)ES( Parser)EA()EH( + + )0 P(The return type of the )SM(qname_pimpl)ES( parser imple)HY(men)HY(ta)HY(tion)YH( + is )SM(xml_schema::qname)ES( which repre)HY(sents)YH( an XML qual)HY(i)HY(fied)YH( + name. Its inter)HY(face)YH( is presented below. + Note that the )SM(std::string)ES( type in the inter)HY(face)YH( becomes + )SM(std::wstring)ES( if the selected char)HY(ac)HY(ter)YH( type is + )SM(wchar_t)ES(.)EP( + + ) 28 63 PR(namespace xml_schema +{ + class qname + { + public: + explicit + qname \201const std::string& name\202; + qname \201const std::string& prefix, const std::string& name\202; + + const std::string& + prefix \201\202 const; + + void + prefix \201const std::string&\202; + + const std::string& + name \201\202 const; + + void + name \201const std::string&\202; + }; + + bool + operator== \201const qname&, const qname&\202; + + bool + operator!= \201const qname&, const qname&\202; +})RP( + + + )0 2 27 H(6.2)WB 76 Sn()WB 31 Sn( )SM(NMTO)HY(KENS)YH()ES( and )SM(IDREFS)ES( Parsers)EA()EH( + + )0 P(The return type of the )SM(nmto)HY(kens)YH(_pimpl)ES( and + )SM(idrefs_pimpl)ES( parser imple)HY(men)HY(ta)HY(tions)YH( is + )SM(xml_schema::string_sequence)ES( which repre)HY(sents)YH( a + sequence of strings. Its inter)HY(face)YH( is presented below. + Note that the )SM(std::string)ES( type in the inter)HY(face)YH( becomes + )SM(std::wstring)ES( if the selected char)HY(ac)HY(ter)YH( type is + )SM(wchar_t)ES(.)EP( + + ) 21 62 PR(namespace xml_schema +{ + class string_sequence: public std::vector<std::string> + { + public: + string_sequence \201\202; + + explicit + string_sequence \201std::vector<std::string>::size_type n, + const std::string& x = std::string \201\202\202; + + template <typename I> + string_sequence \201const I& begin, const I& end\202; + }; + + bool + operator== \201const string_sequence&, const string_sequence&\202; + + bool + operator!= \201const string_sequence&, const string_sequence&\202; +})RP( + + + )0 2 28 H(6.3)WB 77 Sn()WB 32 Sn( )SM(base64Binary)ES( and )SM(hexBi)HY(nary)YH()ES( Parsers)EA()EH( + + )0 P(The return type of the )SM(base64_binary_pimpl)ES( and + )SM(hex_binary_pimpl)ES( parser imple)HY(men)HY(ta)HY(tions)YH( is + )SM(std::auto_ptr<xml_schema::buffer>)ES(. The + )SM(xml_schema::buffer)ES( type repre)HY(sents)YH( a binary buffer + and its inter)HY(face)YH( is presented below.)EP( + + ) 69 60 PR(namespace xml_schema +{ + class buffer + { + public: + typedef std::size_t size_t; + + class bounds {}; // Out of bounds exception. + + public: + explicit + buffer \201size_t size = 0\202; + buffer \201size_t size, size_t capacity\202; + buffer \201const void* data, size_t size\202; + buffer \201const void* data, size_t size, size_t capacity\202; + buffer \201void* data, + size_t size, + size_t capacity, + bool assume_ownership\202; + + public: + buffer \201const buffer&\202; + + buffer& + operator= \201const buffer&\202; + + void + swap \201buffer&\202; + + public: + size_t)WR( + capacity \201\202 const; + + bool + capacity \201size_t\202; + + public: + size_t + size \201\202 const; + + bool + size \201size_t\202; + + public: + const char* + data \201\202 const; + + char* + data \201\202; + + const char* + begin \201\202 const; + + char* + begin \201\202; + + const char* + end \201\202 const; + + char* + end \201\202;)WR( + }; + + bool + operator== \201const buffer&, const buffer&\202; + + bool + operator!= \201const buffer&, const buffer&\202; +})RP( + + )0 P(If the )SM(assume_owner)HY(ship)YH()ES( argu)HY(ment)YH( to the construc)HY(tor)YH( + is )SM(true)ES(, the instance assumes the owner)HY(ship)YH( of the + memory block pointed to by the )SM(data)ES( argu)HY(ment)YH( and will + even)HY(tu)HY(ally)YH( release it by calling )SM(oper)HY(a)HY(tor)YH( delete\201\202)ES(. The + )SM(capac)HY(ity)YH(\201\202)ES( and )SM(size\201\202)ES( modi)HY(fier)YH( func)HY(tions)YH( + return )SM(true)ES( if the under)HY(ly)HY(ing)YH( buffer has moved. + )EP( + + )0 P(The )SM(bounds)ES( excep)HY(tion)YH( is thrown if the construc)HY(tor)YH( + argu)HY(ments)YH( violate the )SM(\201size\240<=\240capac)HY(ity)YH(\202)ES( + constraint.)EP( + + + )0 2 29 H(6.4)WB 78 Sn()WB 33 Sn( Time Zone Repre)HY(sen)HY(ta)HY(tion)YH()EA()EH( + + )0 P(The )SM(date)ES(, )SM(date)HY(Time)YH()ES(, )SM(gDay)ES(, + )SM(gMonth)ES(, )SM(gMon)HY(th)HY(Day)YH()ES(, )SM(gYear)ES(, + )SM(gYear)HY(Month)YH()ES(, and )SM(time)ES( XML Schema built-in + types all include an optional time zone compo)HY(nent)YH(. The follow)HY(ing)YH( + )SM(xml_schema::time_zone)ES( base class is used to repre)HY(sent)YH( + this infor)HY(ma)HY(tion)YH(:)EP( + + ) 33 50 PR(namespace xml_schema +{ + class time_zone + { + public: + time_zone \201\202; + time_zone \201short hours, short minutes\202; + + bool + zone_present \201\202 const; + + void + zone_reset \201\202; + + short + zone_hours \201\202 const; + + void + zone_hours \201short\202; + + short + zone_minutes \201\202 const; + + void + zone_minutes \201short\202; + }; + + bool + operator== \201const time_zone&, const time_zone&\202; + + bool)WR( + operator!= \201const time_zone&, const time_zone&\202; +})RP( + + )0 P(The )SM(zone_present\201\202)ES( acces)HY(sor)YH( func)HY(tion)YH( returns )SM(true)ES( + if the time zone is spec)HY(i)HY(fied)YH(. The )SM(zone_reset\201\202)ES( modi)HY(fier)YH( + func)HY(tion)YH( resets the time zone object to the )EM(not spec)HY(i)HY(fied)YH()ES( + state. If the time zone offset is nega)HY(tive)YH( then both hours and + minutes compo)HY(nents)YH( are repre)HY(sented)YH( as nega)HY(tive)YH( inte)HY(gers)YH(.)EP( + + + )0 2 30 H(6.5)WB 79 Sn()WB 34 Sn( )SM(date)ES( Parser)EA()EH( + + )0 P(The return type of the )SM(date_pimpl)ES( parser imple)HY(men)HY(ta)HY(tion)YH( + is )SM(xml_schema::date)ES( which repre)HY(sents)YH( a year, a day, and a month + with an optional time zone. Its inter)HY(face)YH( is presented below. + For more infor)HY(ma)HY(tion)YH( on the base )SM(xml_schema::time_zone)ES( + class refer to )0 33 1 A(Section 6.4, "Time Zone + Repre)HY(sen)HY(ta)HY(tion)YH(")33 0 TN TL()Ec /AF f D(.)EP( + + ) 34 62 PR(namespace xml_schema +{ + class date + { + public: + date \201int year, unsigned short month, unsigned short day\202; + date \201int year, unsigned short month, unsigned short day, + short zone_hours, short zone_minutes\202; + + int + year \201\202 const; + + void + year \201int\202; + + unsigned short + month \201\202 const; + + void + month \201unsigned short\202; + + unsigned short + day \201\202 const; + + void + day \201unsigned short\202; + }; + + bool + operator== \201const date&, const date&\202; +)WR( + bool + operator!= \201const date&, const date&\202; +})RP( + + )0 2 31 H(6.6)WB 80 Sn()WB 35 Sn( )SM(date)HY(Time)YH()ES( Parser)EA()EH( + + )0 P(The return type of the )SM(date_time_pimpl)ES( parser imple)HY(men)HY(ta)HY(tion)YH( + is )SM(xml_schema::date_time)ES( which repre)HY(sents)YH( a year, a month, a day, + hours, minutes, and seconds with an optional time zone. Its inter)HY(face)YH( + is presented below. + For more infor)HY(ma)HY(tion)YH( on the base )SM(xml_schema::time_zone)ES( + class refer to )0 33 1 A(Section 6.4, "Time Zone + Repre)HY(sen)HY(ta)HY(tion)YH(")33 0 TN TL()Ec /AF f D(.)EP( + + ) 56 69 PR(namespace xml_schema +{ + class date_time + { + public: + date_time \201int year, unsigned short month, unsigned short day, + unsigned short hours, unsigned short minutes, + double seconds\202; + + date_time \201int year, unsigned short month, unsigned short day, + unsigned short hours, unsigned short minutes, + double seconds, short zone_hours, short zone_minutes\202; + + int + year \201\202 const; + + void + year \201int\202; + + unsigned short + month \201\202 const; + + void + month \201unsigned short\202; + + unsigned short + day \201\202 const; + + void + day \201unsigned short\202; +)WR( + unsigned short + hours \201\202 const; + + void + hours \201unsigned short\202; + + unsigned short + minutes \201\202 const; + + void + minutes \201unsigned short\202; + + double + seconds \201\202 const; + + void + seconds \201double\202; + }; + + bool + operator== \201const date_time&, const date_time&\202; + + bool + operator!= \201const date_time&, const date_time&\202; +})RP( + + )0 2 32 H(6.7)WB 81 Sn()WB 36 Sn( )SM(dura)HY(tion)YH()ES( Parser)EA()EH( + + )0 P(The return type of the )SM(dura)HY(tion)YH(_pimpl)ES( parser imple)HY(men)HY(ta)HY(tion)YH( + is )SM(xml_schema::dura)HY(tion)YH()ES( which repre)HY(sents)YH( a poten)HY(tially)YH( + nega)HY(tive)YH( dura)HY(tion)YH( in the form of years, months, days, hours, minutes, + and seconds. Its inter)HY(face)YH( is presented below.)EP( + + ) 58 73 PR(namespace xml_schema +{ + class duration + { + public: + duration \201bool negative, + unsigned int years, unsigned int months, unsigned int days, + unsigned int hours, unsigned int minutes, double seconds\202; + + bool + negative \201\202 const; + + void + negative \201bool\202; + + unsigned int + years \201\202 const; + + void + years \201unsigned int\202; + + unsigned int + months \201\202 const; + + void + months \201unsigned int\202; + + unsigned int + days \201\202 const; + + void)WR( + days \201unsigned int\202; + + unsigned int + hours \201\202 const; + + void + hours \201unsigned int\202; + + unsigned int + minutes \201\202 const; + + void + minutes \201unsigned int\202; + + double + seconds \201\202 const; + + void + seconds \201double\202; + }; + + bool + operator== \201const duration&, const duration&\202; + + bool + operator!= \201const duration&, const duration&\202; +})RP( + + + )0 2 33 H(6.8)WB 82 Sn()WB 37 Sn( )SM(gDay)ES( Parser)EA()EH( + + )0 P(The return type of the )SM(gday_pimpl)ES( parser imple)HY(men)HY(ta)HY(tion)YH( + is )SM(xml_schema::gday)ES( which repre)HY(sents)YH( a day of the month with + an optional time zone. Its inter)HY(face)YH( is presented below. + For more infor)HY(ma)HY(tion)YH( on the base )SM(xml_schema::time_zone)ES( + class refer to )0 33 1 A(Section 6.4, "Time Zone + Repre)HY(sen)HY(ta)HY(tion)YH(")33 0 TN TL()Ec /AF f D(.)EP( + + ) 22 68 PR(namespace xml_schema +{ + class gday + { + public: + explicit + gday \201unsigned short day\202; + gday \201unsigned short day, short zone_hours, short zone_minutes\202; + + unsigned short + day \201\202 const; + + void + day \201unsigned short\202; + }; + + bool + operator== \201const gday&, const gday&\202; + + bool + operator!= \201const gday&, const gday&\202; +})RP( + + )0 2 34 H(6.9)WB 83 Sn()WB 38 Sn( )SM(gMonth)ES( Parser)EA()EH( + + )0 P(The return type of the )SM(gmonth_pimpl)ES( parser imple)HY(men)HY(ta)HY(tion)YH( + is )SM(xml_schema::gmonth)ES( which repre)HY(sents)YH( a month of the year + with an optional time zone. Its inter)HY(face)YH( is presented below. + For more infor)HY(ma)HY(tion)YH( on the base )SM(xml_schema::time_zone)ES( + class refer to )0 33 1 A(Section 6.4, "Time Zone + Repre)HY(sen)HY(ta)HY(tion)YH(")33 0 TN TL()Ec /AF f D(.)EP( + + ) 22 72 PR(namespace xml_schema +{ + class gmonth + { + public: + explicit + gmonth \201unsigned short month\202; + gmonth \201unsigned short month, short zone_hours, short zone_minutes\202; + + unsigned short + month \201\202 const; + + void + month \201unsigned short\202; + }; + + bool + operator== \201const gmonth&, const gmonth&\202; + + bool + operator!= \201const gmonth&, const gmonth&\202; +})RP( + + )0 2 35 H(6.10)WB 84 Sn()WB 39 Sn( )SM(gMon)HY(th)HY(Day)YH()ES( Parser)EA()EH( + + )0 P(The return type of the )SM(gmonth_day_pimpl)ES( parser imple)HY(men)HY(ta)HY(tion)YH( + is )SM(xml_schema::gmonth_day)ES( which repre)HY(sents)YH( a day and a month + of the year with an optional time zone. Its inter)HY(face)YH( is presented below. + For more infor)HY(ma)HY(tion)YH( on the base )SM(xml_schema::time_zone)ES( + class refer to )0 33 1 A(Section 6.4, "Time Zone + Repre)HY(sen)HY(ta)HY(tion)YH(")33 0 TN TL()Ec /AF f D(.)EP( + + ) 28 58 PR(namespace xml_schema +{ + class gmonth_day + { + public: + gmonth_day \201unsigned short month, unsigned short day\202; + gmonth_day \201unsigned short month, unsigned short day, + short zone_hours, short zone_minutes\202; + + unsigned short + month \201\202 const; + + void + month \201unsigned short\202; + + unsigned short + day \201\202 const; + + void + day \201unsigned short\202; + }; + + bool + operator== \201const gmonth_day&, const gmonth_day&\202; + + bool + operator!= \201const gmonth_day&, const gmonth_day&\202; +})RP( + + )0 2 36 H(6.11)WB 85 Sn()WB 40 Sn( )SM(gYear)ES( Parser)EA()EH( + + )0 P(The return type of the )SM(gyear_pimpl)ES( parser imple)HY(men)HY(ta)HY(tion)YH( + is )SM(xml_schema::gyear)ES( which repre)HY(sents)YH( a year with + an optional time zone. Its inter)HY(face)YH( is presented below. + For more infor)HY(ma)HY(tion)YH( on the base )SM(xml_schema::time_zone)ES( + class refer to )0 33 1 A(Section 6.4, "Time Zone + Repre)HY(sen)HY(ta)HY(tion)YH(")33 0 TN TL()Ec /AF f D(.)EP( + + ) 22 59 PR(namespace xml_schema +{ + class gyear + { + public: + explicit + gyear \201int year\202; + gyear \201int year, short zone_hours, short zone_minutes\202; + + int + year \201\202 const; + + void + year \201int\202; + }; + + bool + operator== \201const gyear&, const gyear&\202; + + bool + operator!= \201const gyear&, const gyear&\202; +})RP( + + )0 2 37 H(6.12)WB 86 Sn()WB 41 Sn( )SM(gYear)HY(Month)YH()ES( Parser)EA()EH( + + )0 P(The return type of the )SM(gyear_month_pimpl)ES( parser imple)HY(men)HY(ta)HY(tion)YH( + is )SM(xml_schema::gyear_month)ES( which repre)HY(sents)YH( a year and a month + with an optional time zone. Its inter)HY(face)YH( is presented below. + For more infor)HY(ma)HY(tion)YH( on the base )SM(xml_schema::time_zone)ES( + class refer to )0 33 1 A(Section 6.4, "Time Zone + Repre)HY(sen)HY(ta)HY(tion)YH(")33 0 TN TL()Ec /AF f D(.)EP( + + ) 28 55 PR(namespace xml_schema +{ + class gyear_month + { + public: + gyear_month \201int year, unsigned short month\202; + gyear_month \201int year, unsigned short month, + short zone_hours, short zone_minutes\202; + + int + year \201\202 const; + + void + year \201int\202; + + unsigned short + month \201\202 const; + + void + month \201unsigned short\202; + }; + + bool + operator== \201const gyear_month&, const gyear_month&\202; + + bool + operator!= \201const gyear_month&, const gyear_month&\202; +})RP( + + + )0 2 38 H(6.13)WB 87 Sn()WB 42 Sn( )SM(time)ES( Parser)EA()EH( + + )0 P(The return type of the )SM(time_pimpl)ES( parser imple)HY(men)HY(ta)HY(tion)YH( + is )SM(xml_schema::time)ES( which repre)HY(sents)YH( hours, minutes, + and seconds with an optional time zone. Its inter)HY(face)YH( is presented below. + For more infor)HY(ma)HY(tion)YH( on the base )SM(xml_schema::time_zone)ES( + class refer to )0 33 1 A(Section 6.4, "Time Zone + Repre)HY(sen)HY(ta)HY(tion)YH(")33 0 TN TL()Ec /AF f D(.)EP( + + ) 34 72 PR(namespace xml_schema +{ + class time + { + public: + time \201unsigned short hours, unsigned short minutes, double seconds\202; + time \201unsigned short hours, unsigned short minutes, double seconds, + short zone_hours, short zone_minutes\202; + + unsigned short + hours \201\202 const; + + void + hours \201unsigned short\202; + + unsigned short + minutes \201\202 const; + + void + minutes \201unsigned short\202; + + double + seconds \201\202 const; + + void + seconds \201double\202; + }; + + bool + operator== \201const time&, const time&\202; +)WR( + bool + operator!= \201const time&, const time&\202; +})RP( + + + + + + )0 1 39 H(7)WB 88 Sn()WB 43 Sn( Docu)HY(ment)YH( Parser and Error Handling)EA()EH( + + )0 P(In this chapter we will discuss the )SM(xml_schema::docu)HY(ment)YH()ES( + type as well as the error handling mech)HY(a)HY(nisms)YH( provided by the mapping + in more detail. As mentioned in )0 18 1 A(Section 3.4, + "Connect)HY(ing)YH( the Parsers Together")18 0 TN TL()Ec /AF f D(, the inter)HY(face)YH( of + )SM(xml_schema::docu)HY(ment)YH()ES( depends on the under)HY(ly)HY(ing)YH( XML + parser selected \201)0 25 1 A(Section 5.2, "Under)HY(ly)HY(ing)YH( XML + Parser")25 0 TN TL()Ec /AF f D(\202. The follow)HY(ing)YH( sections describe the + )SM(docu)HY(ment)YH()ES( type inter)HY(face)YH( for Xerces-C++ and + Expat as under)HY(ly)HY(ing)YH( parsers.)EP( + + )0 2 40 H(7.1)WB 89 Sn()WB 44 Sn( Xerces-C++ Docu)HY(ment)YH( Parser)EA()EH( + + )0 P(When Xerces-C++ is used as the under)HY(ly)HY(ing)YH( XML parser, the + )SM(docu)HY(ment)YH()ES( type has the follow)HY(ing)YH( inter)HY(face)YH(. Note that + if the char)HY(ac)HY(ter)YH( type is )SM(wchar_t)ES(, then the string type + in the inter)HY(face)YH( becomes )SM(std::wstring)ES( + \201see )0 24 1 A(Section 5.1, "Char)HY(ac)HY(ter)YH( Type and Encod)HY(ing)YH(")24 0 TN TL()Ec /AF f D(\202.)EP( + + ) 248 72 PR(namespace xml_schema +{ + class parser_base; + class error_handler; + + class flags + { + public: + // Do not validate XML documents with the Xerces-C++ validator. + // + static const unsigned long dont_validate; + + // Do not initialize the Xerces-C++ runtime. + // + static const unsigned long dont_initialize; + + // Disable handling of subsequent imports for the same namespace + // in Xerces-C++ 3.1.0 and later. + // + static const unsigned long no_multiple_imports; + }; + + class properties + { + public: + // Add a location for a schema with a target namespace. + // + void + schema_location \201const std::string& namespace_, + const std::string& location\202; +)WR( + // Add a location for a schema without a target namespace. + // + void + no_namespace_schema_location \201const std::string& location\202; + }; + + class document + { + public: + document \201parser_base& root, + const std::string& root_element_name, + bool polymorphic = false\202; + + document \201parser_base& root, + const std::string& root_element_namespace, + const std::string& root_element_name, + bool polymorphic = false\202; + + public: + // Parse URI or a local file. + // + void + parse \201const std::string& uri, + flags = 0, + const properties& = properties \201\202\202; + + // Parse URI or a local file with a user-provided error_handler + // object. + // + void)WR( + parse \201const std::string& uri, + error_handler&, + flags = 0, + const properties& = properties \201\202\202; + + // Parse URI or a local file with a user-provided ErrorHandler + // object. Note that you must initialize the Xerces-C++ runtime + // before calling this function. + // + void + parse \201const std::string& uri, + xercesc::ErrorHandler&, + flags = 0, + const properties& = properties \201\202\202; + + // Parse URI or a local file using a user-provided SAX2XMLReader + // object. Note that you must initialize the Xerces-C++ runtime + // before calling this function. + // + void + parse \201const std::string& uri, + xercesc::SAX2XMLReader&, + flags = 0, + const properties& = properties \201\202\202; + + public: + // Parse std::istream. + // + void + parse \201std::istream&,)WR( + flags = 0, + const properties& = properties \201\202\202; + + // Parse std::istream with a user-provided error_handler object. + // + void + parse \201std::istream&, + error_handler&, + flags = 0, + const properties& = properties \201\202\202; + + // Parse std::istream with a user-provided ErrorHandler object. + // Note that you must initialize the Xerces-C++ runtime before + // calling this function. + // + void + parse \201std::istream&, + xercesc::ErrorHandler&, + flags = 0, + const properties& = properties \201\202\202; + + // Parse std::istream using a user-provided SAX2XMLReader object. + // Note that you must initialize the Xerces-C++ runtime before + // calling this function. + // + void + parse \201std::istream&, + xercesc::SAX2XMLReader&, + flags = 0, + const properties& = properties \201\202\202;)WR( + + public: + // Parse std::istream with a system id. + // + void + parse \201std::istream&, + const std::string& system_id, + flags = 0, + const properties& = properties \201\202\202; + + // Parse std::istream with a system id and a user-provided + // error_handler object. + // + void + parse \201std::istream&, + const std::string& system_id, + error_handler&, + flags = 0, + const properties& = properties \201\202\202; + + // Parse std::istream with a system id and a user-provided + // ErrorHandler object. Note that you must initialize the + // Xerces-C++ runtime before calling this function. + // + void + parse \201std::istream&, + const std::string& system_id, + xercesc::ErrorHandler&, + flags = 0, + const properties& = properties \201\202\202;)WR( + + // Parse std::istream with a system id using a user-provided + // SAX2XMLReader object. Note that you must initialize the + // Xerces-C++ runtime before calling this function. + // + void + parse \201std::istream&, + const std::string& system_id, + xercesc::SAX2XMLReader&, + flags = 0, + const properties& = properties \201\202\202; + + public: + // Parse std::istream with system and public ids. + // + void + parse \201std::istream&, + const std::string& system_id, + const std::string& public_id, + flags = 0, + const properties& = properties \201\202\202; + + // Parse std::istream with system and public ids and a user-provided + // error_handler object. + // + void + parse \201std::istream&, + const std::string& system_id, + const std::string& public_id, + error_handler&,)WR( + flags = 0, + const properties& = properties \201\202\202; + + // Parse std::istream with system and public ids and a user-provided + // ErrorHandler object. Note that you must initialize the Xerces-C++ + // runtime before calling this function. + // + void + parse \201std::istream&, + const std::string& system_id, + const std::string& public_id, + xercesc::ErrorHandler&, + flags = 0, + const properties& = properties \201\202\202; + + // Parse std::istream with system and public ids using a user- + // provided SAX2XMLReader object. Note that you must initialize + // the Xerces-C++ runtime before calling this function. + // + void + parse \201std::istream&, + const std::string& system_id, + const std::string& public_id, + xercesc::SAX2XMLReader&, + flags = 0, + const properties& = properties \201\202\202; + + public: + // Parse InputSource. Note that you must initialize the Xerces-C++ + // runtime before calling this function.)WR( + // + void + parse \201const xercesc::InputSource&, + flags = 0, + const properties& = properties \201\202\202; + + // Parse InputSource with a user-provided error_handler object. + // Note that you must initialize the Xerces-C++ runtime before + // calling this function. + // + void + parse \201const xercesc::InputSource&, + error_handler&, + flags = 0, + const properties& = properties \201\202\202; + + // Parse InputSource with a user-provided ErrorHandler object. + // Note that you must initialize the Xerces-C++ runtime before + // calling this function. + // + void + parse \201const xercesc::InputSource&, + xercesc::ErrorHandler&, + flags = 0, + const properties& = properties \201\202\202; + + // Parse InputSource using a user-provided SAX2XMLReader object. + // Note that you must initialize the Xerces-C++ runtime before + // calling this function. + //)WR( + void + parse \201const xercesc::InputSource&, + xercesc::SAX2XMLReader&, + flags = 0, + const properties& = properties \201\202\202; + }; +})RP( + + )0 P(The )SM(docu)HY(ment)YH()ES( class is a root parser for + the vocab)HY(u)HY(lary)YH(. The first argu)HY(ment)YH( to its construc)HY(tors)YH( is the + parser for the type of the root element. The )SM(parser_base)ES( + class is the base type for all parser skele)HY(tons)YH(. The second and + third argu)HY(ments)YH( to the )SM(docu)HY(ment)YH()ES('s construc)HY(tors)YH( are + the root element's name and names)HY(pace)YH(. The last argu)HY(ment)YH(, + )SM(poly)HY(mor)HY(phic)YH()ES(, spec)HY(i)HY(fies)YH( whether the XML docu)HY(ments)YH( + being parsed use poly)HY(mor)HY(phism)YH(. For more infor)HY(ma)HY(tion)YH( on support + for XML Schema poly)HY(mor)HY(phism)YH( in the C++/Parser mapping refer + to )0 27 1 A(Section 5.4, "Support for Poly)HY(mor)HY(phism)YH(")27 0 TN TL()Ec /AF f D(.)EP( + + )0 P(The rest of the )SM(docu)HY(ment)YH()ES( inter)HY(face)YH( consists of over)HY(loaded)YH( + )SM(parse\201\202)ES( func)HY(tions)YH(. The last two argu)HY(ments)YH( in each of these + func)HY(tions)YH( are )SM(flags)ES( and )SM(prop)HY(er)HY(ties)YH()ES(. The + )SM(flags)ES( argu)HY(ment)YH( allows you to modify the default behav)HY(ior)YH( + of the parsing func)HY(tions)YH(. The )SM(prop)HY(er)HY(ties)YH()ES( argu)HY(ment)YH( allows + you to over)HY(ride)YH( the schema loca)HY(tion)YH( attributes spec)HY(i)HY(fied)YH( in XML + docu)HY(ments)YH(. Note that the schema loca)HY(tion)YH( paths are rela)HY(tive)YH( to an + XML docu)HY(ment)YH( unless they are complete URIs. For example if you want + to use a local schema file then you will need to use a URI in the + form )SM(file:///abso)HY(lute)YH(/path/to/your/schema)ES(.)EP( + + )0 P(A number of over)HY(loaded)YH( )SM(parse\201\202)ES( func)HY(tions)YH( have the + )SM(system_id)ES( and )SM(public_id)ES( argu)HY(ments)YH(. The + system id is a )EM(system)ES( iden)HY(ti)HY(fier)YH( of the resources being + parsed \201for example, URI or a full file path\202. The public id is a + )EM(public)ES( iden)HY(ti)HY(fier)YH( of the resource \201for example, an + appli)HY(ca)HY(tion)YH(-specific name or a rela)HY(tive)YH( file path\202. The system id + is used to resolve rela)HY(tive)YH( paths \201for example, schema paths\202. In + diag)HY(nos)HY(tics)YH( messages the public id is used if it is avail)HY(able)YH(. + Other)HY(wise)YH( the system id is used.)EP( + + )0 P(The error handling mech)HY(a)HY(nisms)YH( employed by the )SM(docu)HY(ment)YH()ES( + parser are described in )0 46 1 A(Section 7.3, "Error + Handling")46 0 TN TL()Ec /AF f D(.)EP( + + )0 2 41 H(7.2)WB 90 Sn()WB 45 Sn( Expat Docu)HY(ment)YH( Parser)EA()EH( + + )0 P(When Expat is used as the under)HY(ly)HY(ing)YH( XML parser, the + )SM(docu)HY(ment)YH()ES( type has the follow)HY(ing)YH( inter)HY(face)YH(. Note that + if the char)HY(ac)HY(ter)YH( type is )SM(wchar_t)ES(, then the string type + in the inter)HY(face)YH( becomes )SM(std::wstring)ES( + \201see )0 24 1 A(Section 5.1, "Char)HY(ac)HY(ter)YH( Type and Encod)HY(ing)YH(")24 0 TN TL()Ec /AF f D(\202.)EP( + + ) 123 72 PR(namespace xml_schema +{ + class parser_base; + class error_handler; + + class document + { + public: + document \201parser_base&, + const std::string& root_element_name, + bool polymorphic = false\202; + + document \201parser_base&, + const std::string& root_element_namespace, + const std::string& root_element_name, + bool polymorphic = false\202; + + public: + // Parse a local file. The file is accessed with std::ifstream + // in binary mode. The std::ios_base::failure exception is used + // to report io errors \201badbit and failbit\202. + void + parse \201const std::string& file\202; + + // Parse a local file with a user-provided error_handler + // object. The file is accessed with std::ifstream in binary + // mode. The std::ios_base::failure exception is used to report + // io errors \201badbit and failbit\202. + // + void + parse \201const std::string& file, error_handler&\202;)WR( + + public: + // Parse std::istream. + // + void + parse \201std::istream&\202; + + // Parse std::istream with a user-provided error_handler object. + // + void + parse \201std::istream&, error_handler&\202; + + // Parse std::istream with a system id. + // + void + parse \201std::istream&, const std::string& system_id\202; + + // Parse std::istream with a system id and a user-provided + // error_handler object. + // + void + parse \201std::istream&, + const std::string& system_id, + error_handler&\202; + + // Parse std::istream with system and public ids. + // + void + parse \201std::istream&, + const std::string& system_id,)WR( + const std::string& public_id\202; + + // Parse std::istream with system and public ids and a user-provided + // error_handler object. + // + void + parse \201std::istream&, + const std::string& system_id, + const std::string& public_id, + error_handler&\202; + + public: + // Parse a chunk of input. You can call these functions multiple + // times with the last call having the last argument true. + // + void + parse \201const void* data, std::size_t size, bool last\202; + + void + parse \201const void* data, std::size_t size, bool last, + error_handler&\202; + + void + parse \201const void* data, std::size_t size, bool last, + const std::string& system_id\202; + + void + parse \201const void* data, std::size_t size, bool last, + const std::string& system_id, + error_handler&\202;)WR( + + void + parse \201const void* data, std::size_t size, bool last, + const std::string& system_id, + const std::string& public_id\202; + + void + parse \201const void* data, std::size_t size, bool last, + const std::string& system_id, + const std::string& public_id, + error_handler&\202; + + public: + // Low-level Expat-specific parsing API. + // + void + parse_begin \201XML_Parser\202; + + void + parse_begin \201XML_Parser, const std::string& public_id\202; + + void + parse_begin \201XML_Parser, error_handler&\202; + + void + parse_begin \201XML_Parser, + const std::string& public_id, + error_handler&\202; + void + parse_end \201\202;)WR( + }; +})RP( + + )0 P(The )SM(docu)HY(ment)YH()ES( class is a root parser for + the vocab)HY(u)HY(lary)YH(. The first argu)HY(ment)YH( to its construc)HY(tors)YH( is the + parser for the type of the root element. The )SM(parser_base)ES( + class is the base type for all parser skele)HY(tons)YH(. The second and + third argu)HY(ments)YH( to the )SM(docu)HY(ment)YH()ES('s construc)HY(tors)YH( are + the root element's name and names)HY(pace)YH(. The last argu)HY(ment)YH(, + )SM(poly)HY(mor)HY(phic)YH()ES(, spec)HY(i)HY(fies)YH( whether the XML docu)HY(ments)YH( + being parsed use poly)HY(mor)HY(phism)YH(. For more infor)HY(ma)HY(tion)YH( on support + for XML Schema poly)HY(mor)HY(phism)YH( in the C++/Parser mapping refer + to )0 27 1 A(Section 5.4, "Support for Poly)HY(mor)HY(phism)YH(")27 0 TN TL()Ec /AF f D(.)EP( + + )0 P(A number of over)HY(loaded)YH( )SM(parse\201\202)ES( func)HY(tions)YH( have the + )SM(system_id)ES( and )SM(public_id)ES( argu)HY(ments)YH(. The + system id is a )EM(system)ES( iden)HY(ti)HY(fier)YH( of the resources being + parsed \201for example, URI or a full file path\202. The public id is a + )EM(public)ES( iden)HY(ti)HY(fier)YH( of the resource \201for example, an + appli)HY(ca)HY(tion)YH(-specific name or a rela)HY(tive)YH( file path\202. The system id + is used to resolve rela)HY(tive)YH( paths. In diag)HY(nos)HY(tics)YH( messages the + public id is used if it is avail)HY(able)YH(. Other)HY(wise)YH( the system id + is used.)EP( + + )0 P(The )SM(parse_begin\201\202)ES( and )SM(parse_end\201\202)ES( func)HY(tions)YH( + present a low-level, Expat-specific parsing API for maximum control. + A typical use-case would look like this \201pseudo-code\202:)EP( + + ) 20 55 PR(xxx_pimpl root_p; +document doc_p \201root_p, "root"\202; + +root_p.pre \201\202; +doc_p.parse_begin \201xml_parser, "file.xml"\202; + +while \201more_data_to_parse\202 +{ + // Call XML_Parse or XML_ParseBuffer. + + if \201status == XML_STATUS_ERROR\202 + break; +} + +// Call parse_end even in case of an error to translate +// XML and Schema errors to exceptions or error_handler +// calls. +// +doc.parse_end \201\202; +result_type result \201root_p.post_xxx \201\202\202;)RP( + + )0 P(Note that if your vocab)HY(u)HY(lary)YH( uses XML names)HY(paces)YH(, the + )SM(XML_Parser)HY(Cre)HY(at)HY(eNS)YH(\201\202)ES( func)HY(tions)YH( should be used to create + the XML parser. Space \201)SM(XML_Char \201' '\202)ES(\202 should be used + as a sepa)HY(ra)HY(tor)YH( \201the second argu)HY(ment)YH( to )SM(XML_Parser)HY(Cre)HY(at)HY(eNS)YH(\201\202)ES(\202. + )EP( + + )0 P(The error handling mech)HY(a)HY(nisms)YH( employed by the )SM(docu)HY(ment)YH()ES( + parser are described in )0 46 1 A(Section 7.3, "Error + Handling")46 0 TN TL()Ec /AF f D(.)EP( + + + )0 2 42 H(7.3)WB 91 Sn()WB 46 Sn( Error Handling)EA()EH( + + )0 P(There are three cate)HY(gories)YH( of errors that can result from running + a parser on an XML docu)HY(ment)YH(: System, XML, and Appli)HY(ca)HY(tion)YH(. + The System cate)HY(gory)YH( contains memory allo)HY(ca)HY(tion)YH( and file/stream + oper)HY(a)HY(tion)YH( errors. The XML cate)HY(gory)YH( covers XML parsing and + well-formed)HY(ness)YH( check)HY(ing)YH( as well as XML Schema vali)HY(da)HY(tion)YH( errors. + Finally, the Appli)HY(ca)HY(tion)YH( cate)HY(gory)YH( is for appli)HY(ca)HY(tion)YH( logic errors + that you may want to prop)HY(a)HY(gate)YH( from parser imple)HY(men)HY(ta)HY(tions)YH( to the + caller of the parser. + )EP( + + )0 P(The System errors are mapped to the stan)HY(dard)YH( excep)HY(tions)YH(. The + out of memory condi)HY(tion)YH( is indi)HY(cated)YH( by throw)HY(ing)YH( an instance + of )SM(std::bad_alloc)ES(. The stream oper)HY(a)HY(tion)YH( errors + are reported either by throw)HY(ing)YH( an instance of + )SM(std::ios_base::failure)ES( if excep)HY(tions)YH( are enabled + or by setting the stream state.)EP( + + )0 P(Note that if you are parsing )SM(std::istream)ES( on + which excep)HY(tions)YH( are not enabled, then you will need to + check the stream state before calling the )SM(post\201\202)ES( + call)HY(back)YH(, as shown in the follow)HY(ing)YH( example:)EP( + + ) 24 50 PR(int +main \201int argc, char* argv[]\202 +{ + ... + + std::ifstream ifs \201argv[1]\202; + + if \201ifs.fail \201\202\202 + { + cerr << argv[1] << ": unable to open" << endl; + return 1; + } + + root_p.pre \201\202; + doc_p.parse \201ifs\202; + + if \201ifs.fail \201\202\202 + { + cerr << argv[1] << ": io failure" << endl; + return 1; + } + + result_type result \201root_p.post_xxx \201\202\202; +})RP( + + )0 P(The above example can be rewrit)HY(ten)YH( to use excep)HY(tions)YH( + as shown below:)EP( + + ) 21 68 PR(int +main \201int argc, char* argv[]\202 +{ + try + { + ... + + std::ifstream ifs; + ifs.exceptions \201std::ifstream::badbit | std::ifstream::failbit\202; + ifs.open \201argv[1]\202; + + root_p.pre \201\202; + doc_p.parse \201ifs\202; + result_type result \201root_p.post_xxx \201\202\202; + } + catch \201const std::ifstream::failure&\202 + { + cerr << argv[1] << ": unable to open or io failure" << endl; + return 1; + } +})RP( + + + )0 P(For report)HY(ing)YH( appli)HY(ca)HY(tion)YH( errors from parsing call)HY(backs)YH(, you + can throw any excep)HY(tions)YH( of your choice. They are prop)HY(a)HY(gated)YH( to + the caller of the parser without any alter)HY(ations)YH(.)EP( + + )0 P(The XML errors can be reported either by throw)HY(ing)YH( the + )SM(xml_schema::parsing)ES( excep)HY(tion)YH( or by a call)HY(back)YH( + to the )SM(xml_schema::error_handler)ES( object \201and + )SM(xercesc::ErrorHan)HY(dler)YH()ES( object in case of Xerces-C++\202.)EP( + + )0 P(The )SM(xml_schema::parsing)ES( excep)HY(tion)YH( contains + a list of warn)HY(ings)YH( and errors that were accu)HY(mu)HY(lated)YH( during + parsing. Note that this excep)HY(tion)YH( is thrown only if there + was an error. This makes it impos)HY(si)HY(ble)YH( to obtain warn)HY(ings)YH( + from an other)HY(wise)YH( success)HY(ful)YH( parsing using this mech)HY(a)HY(nism)YH(. + The follow)HY(ing)YH( listing shows the defi)HY(ni)HY(tion)YH( of + )SM(xml_schema::parsing)ES( excep)HY(tion)YH(. Note that if the + char)HY(ac)HY(ter)YH( type is )SM(wchar_t)ES(, then the string type + and output stream type in the defi)HY(ni)HY(tion)YH( become + )SM(std::wstring)ES( and )SM(std::wostream)ES(, + respec)HY(tively)YH( \201see )0 24 1 A(Section 5.1, "Char)HY(ac)HY(ter)YH( Type + and Encod)HY(ing)YH(")24 0 TN TL()Ec /AF f D(\202.)EP( + + ) 82 51 PR(namespace xml_schema +{ + class exception: public std::exception + { + protected: + virtual void + print \201std::ostream&\202 const = 0; + }; + + inline std::ostream& + operator<< \201std::ostream& os, const exception& e\202 + { + e.print \201os\202; + return os; + } + + + class severity + { + public: + enum value + { + warning, + error + }; + }; + + + class error + { + public:)WR( + error \201xml_schema::severity, + const std::string& id, + unsigned long line, + unsigned long column, + const std::string& message\202; + + xml_schema::severity + severity \201\202 const; + + const std::string& + id \201\202 const; + + unsigned long + line \201\202 const; + + unsigned long + column \201\202 const; + + const std::string& + message \201\202 const; + }; + + std::ostream& + operator<< \201std::ostream&, const error&\202; + + + class diagnostics: public std::vector<error> + { + }; +)WR( + std::ostream& + operator<< \201std::ostream&, const diagnostics&\202; + + + class parsing: public exception + { + public: + parsing \201\202; + parsing \201const xml_schema::diagnostics&\202; + + const xml_schema::diagnostics& + diagnostics \201\202 const; + + virtual const char* + what \201\202 const throw \201\202; + + protected: + virtual void + print \201std::ostream&\202 const; + }; +})RP( + + )0 P(The follow)HY(ing)YH( example shows how we can catch and print this + excep)HY(tion)YH(. The code will print diag)HY(nos)HY(tics)YH( messages one per line + in case of an error.)EP( + + ) 13 38 PR(int +main \201int argc, char* argv[]\202 +{ + try + { + // Parse. + } + catch \201const xml_schema::parsing& e\202 + { + cerr << e << endl; + return 1; + } +})RP( + + )0 P(With the )SM(error_handler)ES( approach the diag)HY(nos)HY(tics)YH( + messages are deliv)HY(ered)YH( as parsing progresses. The follow)HY(ing)YH( + listing presents the defi)HY(ni)HY(tion)YH( of the )SM(error_handler)ES( + inter)HY(face)YH(. Note that if the char)HY(ac)HY(ter)YH( type is )SM(wchar_t)ES(, + then the string type in the inter)HY(face)YH( becomes )SM(std::wstring)ES( + \201see )0 24 1 A(Section 5.1, "Char)HY(ac)HY(ter)YH( Type and Encod)HY(ing)YH(")24 0 TN TL()Ec /AF f D(\202.)EP( + + ) 24 44 PR(namespace xml_schema +{ + class error_handler + { + public: + class severity + { + public: + enum value + { + warning, + error, + fatal + }; + }; + + virtual bool + handle \201const std::string& id, + unsigned long line, + unsigned long column, + severity, + const std::string& message\202 = 0; + }; +})RP( + + )0 P(The return value of the )SM(handle\201\202)ES( func)HY(tion)YH( indi)HY(cates)YH( whether + parsing should continue if possi)HY(ble)YH(. The error with the fatal sever)HY(ity)YH( + level termi)HY(nates)YH( the parsing process regard)HY(less)YH( of the returned value. + At the end of the parsing process with an error that was reported via + the )SM(error_handler)ES( object, an empty + )SM(xml_schema::parsing)ES( excep)HY(tion)YH( is thrown to indi)HY(cate)YH( + the failure to the caller. You can alter this behav)HY(ior)YH( by throw)HY(ing)YH( + your own excep)HY(tion)YH( from the )SM(handle\201\202)ES( func)HY(tion)YH(.)EP( + + + + + + )0 1 43 H(Appendix)WB 92 Sn()WB 47 Sn( A \236 Supported XML Schema Constructs)EA()EH( + + )0 P(The C++/Parser mapping supports vali)HY(da)HY(tion)YH( of the follow)HY(ing)YH( W3C XML + Schema constructs in the gener)HY(ated)YH( code.)EP( + + + )1 PT( + + + )BR( +)BR( + +)WB NL +/TE t D NP TU PM 0 eq and{/Pn () D showpage}if end restore diff --git a/xsd/documentation/cxx/parser/guide/figure-1.png b/xsd/documentation/cxx/parser/guide/figure-1.png Binary files differnew file mode 100644 index 0000000..15d1723 --- /dev/null +++ b/xsd/documentation/cxx/parser/guide/figure-1.png diff --git a/xsd/documentation/cxx/parser/guide/figure-1.svg b/xsd/documentation/cxx/parser/guide/figure-1.svg new file mode 100644 index 0000000..d994a79 --- /dev/null +++ b/xsd/documentation/cxx/parser/guide/figure-1.svg @@ -0,0 +1,373 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://web.resource.org/cc/" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="744.09448819" + height="1052.3622047" + id="svg2" + sodipodi:version="0.32" + inkscape:version="0.44.1" + sodipodi:docbase="/tmp" + sodipodi:docname="figure-1.svg" + inkscape:export-filename="/home/boris/tmp/figure-1.png" + inkscape:export-xdpi="76.195885" + inkscape:export-ydpi="76.195885"> + <defs + id="defs4"> + <marker + inkscape:stockid="Arrow1Lend" + orient="auto" + refY="0.0" + refX="0.0" + id="Arrow1Lend" + style="overflow:visible;"> + <path + id="path2934" + d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z " + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none;" + transform="scale(0.8) rotate(180) translate(12.5,0)" /> + </marker> + <marker + inkscape:stockid="Dot_l" + orient="auto" + refY="0.0" + refX="0.0" + id="Dot_l" + style="overflow:visible"> + <path + id="path2875" + d="M -2.5,-1.0 C -2.5,1.7600000 -4.7400000,4.0 -7.5,4.0 C -10.260000,4.0 -12.5,1.7600000 -12.5,-1.0 C -12.5,-3.7600000 -10.260000,-6.0 -7.5,-6.0 C -4.7400000,-6.0 -2.5,-3.7600000 -2.5,-1.0 z " + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none;marker-end:none" + transform="scale(0.8) translate(7.4, 1)" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0.0" + refX="0.0" + id="Arrow1Mend" + style="overflow:visible;"> + <path + id="path2928" + d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z " + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none;" + transform="scale(0.4) rotate(180) translate(10,0)" /> + </marker> + <marker + inkscape:stockid="Dot_m" + orient="auto" + refY="0.0" + refX="0.0" + id="Dot_m" + style="overflow:visible"> + <path + id="path2872" + d="M -2.5,-1.0 C -2.5,1.7600000 -4.7400000,4.0 -7.5,4.0 C -10.260000,4.0 -12.5,1.7600000 -12.5,-1.0 C -12.5,-3.7600000 -10.260000,-6.0 -7.5,-6.0 C -4.7400000,-6.0 -2.5,-3.7600000 -2.5,-1.0 z " + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none;marker-end:none" + transform="scale(0.4) translate(7.4, 1)" /> + </marker> + <marker + inkscape:stockid="Arrow1Lstart" + orient="auto" + refY="0.0" + refX="0.0" + id="Arrow1Lstart" + style="overflow:visible"> + <path + id="path2937" + d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z " + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none" + transform="scale(0.8) translate(12.5,0)" /> + </marker> + <marker + inkscape:stockid="Arrow2Mend" + orient="auto" + refY="0.0" + refX="0.0" + id="Arrow2Mend" + style="overflow:visible;"> + <path + id="path2910" + style="font-size:12.0;fill-rule:evenodd;stroke-width:0.62500000;stroke-linejoin:round;" + d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z " + transform="scale(0.6) rotate(180) translate(0,0)" /> + </marker> + </defs> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + gridtolerance="10000" + guidetolerance="10" + objecttolerance="10" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="0.98994949" + inkscape:cx="328.23027" + inkscape:cy="733.01096" + inkscape:document-units="px" + inkscape:current-layer="layer1" + inkscape:window-width="1280" + inkscape:window-height="991" + inkscape:window-x="154" + inkscape:window-y="44" /> + <metadata + id="metadata7"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1"> + <g + id="g3902"> + <rect + y="194.64178" + x="24.142784" + height="106.2678" + width="149.70432" + id="rect1872" + style="fill:#c5ddf8;fill-opacity:1;fill-rule:evenodd;stroke:#c5ddf8;stroke-width:5.29799986;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> + <text + sodipodi:linespacing="125%" + id="text3038" + y="219.99649" + x="28.284279" + style="font-size:13px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;color:black;fill:black;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;font-family:Monospace" + xml:space="preserve"><tspan + y="219.99649" + x="28.284279" + id="tspan3064" + sodipodi:role="line">class people_pimpl</tspan><tspan + y="236.24649" + x="28.284279" + id="tspan3066" + sodipodi:role="line">{</tspan><tspan + y="252.49649" + x="28.284279" + id="tspan3068" + sodipodi:role="line"> void </tspan><tspan + y="268.74649" + x="28.284279" + id="tspan3070" + sodipodi:role="line"> person ();</tspan><tspan + y="284.99649" + x="28.284279" + id="tspan3072" + sodipodi:role="line">};</tspan></text> + </g> + <g + id="g3881"> + <rect + y="124.93772" + x="252.43373" + height="245.67592" + width="180.01601" + id="rect5750" + style="fill:#c5ddf8;fill-opacity:1;fill-rule:evenodd;stroke:#c5ddf8;stroke-width:9.12976837;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> + <text + sodipodi:linespacing="100%" + id="text5752" + y="148.27567" + x="257.5889" + style="font-size:13px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;color:black;fill:black;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;font-family:Monospace" + xml:space="preserve"><tspan + y="148.27567" + x="257.5889" + id="tspan5900" + sodipodi:role="line">class person_pimpl</tspan><tspan + y="161.27567" + x="257.5889" + id="tspan5902" + sodipodi:role="line">{</tspan><tspan + y="174.27567" + x="257.5889" + id="tspan5904" + sodipodi:role="line"> void</tspan><tspan + y="187.27567" + x="257.5889" + id="tspan5906" + sodipodi:role="line"> first_name (string);</tspan><tspan + y="200.27567" + x="257.5889" + id="tspan5908" + sodipodi:role="line" /><tspan + y="213.27567" + x="257.5889" + id="tspan5910" + sodipodi:role="line"> void</tspan><tspan + y="226.27567" + x="257.5889" + id="tspan5912" + sodipodi:role="line"> last_name (string);</tspan><tspan + y="239.27567" + x="257.5889" + id="tspan5914" + sodipodi:role="line" /><tspan + y="252.27567" + x="257.5889" + id="tspan5916" + sodipodi:role="line"> void</tspan><tspan + y="265.27567" + x="257.5889" + id="tspan5918" + sodipodi:role="line"> gender ();</tspan><tspan + y="278.27567" + x="257.5889" + id="tspan5920" + sodipodi:role="line" /><tspan + y="291.27567" + x="257.5889" + id="tspan5922" + sodipodi:role="line"> void</tspan><tspan + y="304.27567" + x="257.5889" + id="tspan5924" + sodipodi:role="line"> age (short);</tspan><tspan + y="317.27567" + x="257.5889" + id="tspan5926" + sodipodi:role="line"> </tspan><tspan + y="330.27567" + x="257.5889" + id="tspan5928" + sodipodi:role="line"> void</tspan><tspan + y="343.27567" + x="257.5889" + id="tspan5930" + sodipodi:role="line"> post_person ();</tspan><tspan + y="356.27567" + x="257.5889" + id="tspan5932" + sodipodi:role="line">};</tspan></text> + </g> + <g + id="g3845"> + <rect + y="77.741814" + x="506.28357" + height="99.610825" + width="151.1286" + id="rect5955" + style="fill:#c5ddf8;fill-opacity:1;fill-rule:evenodd;stroke:#c5ddf8;stroke-width:5.69227886;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> + <flowRoot + transform="translate(-5.050762,12.10153)" + style="font-size:13px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;font-family:Monospace" + id="flowRoot5957" + xml:space="preserve"><flowRegion + id="flowRegion5959"><rect + style="font-size:13px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;font-family:Monospace" + y="74.534515" + x="516.18793" + height="88.893425" + width="143.44167" + id="rect5961" /></flowRegion><flowPara + id="flowPara5965">class string_pimpl</flowPara><flowPara + id="flowPara5967">{</flowPara><flowPara + id="flowPara5969"> string</flowPara><flowPara + id="flowPara5971"> post_string ();</flowPara><flowPara + id="flowPara5973">};</flowPara><flowPara + id="flowPara5975" /></flowRoot> </g> + <g + id="g3857"> + <rect + style="fill:#c5ddf8;fill-opacity:1;fill-rule:evenodd;stroke:#c5ddf8;stroke-width:5.69227886;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect5977" + width="151.1286" + height="99.610825" + x="506.28357" + y="316.15808" /> + <flowRoot + xml:space="preserve" + id="flowRoot5979" + style="font-size:13px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;font-family:Monospace" + transform="translate(-5.050761,250.5178)" + inkscape:export-filename="/tmp/figure-1.png" + inkscape:export-xdpi="546.53815" + inkscape:export-ydpi="546.53815"><flowRegion + id="flowRegion5981"><rect + id="rect5983" + width="143.44167" + height="88.893425" + x="516.18793" + y="74.534515" + style="font-size:13px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;font-family:Monospace" /></flowRegion><flowPara + id="flowPara5985">class short_pimpl</flowPara><flowPara + id="flowPara5987">{</flowPara><flowPara + id="flowPara5989"> short</flowPara><flowPara + id="flowPara5991"> post_short ();</flowPara><flowPara + id="flowPara5993">};</flowPara><flowPara + id="flowPara5995" /></flowRoot> </g> + <g + id="g3869"> + <rect + style="fill:#c5ddf8;fill-opacity:1;fill-rule:evenodd;stroke:#c5ddf8;stroke-width:5.69227886;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect6023" + width="151.1286" + height="99.610825" + x="505.7785" + y="196.93977" /> + <flowRoot + xml:space="preserve" + id="flowRoot6025" + style="font-size:13px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;font-family:Monospace" + transform="translate(-5.555838,129.2792)"><flowRegion + id="flowRegion6027"><rect + id="rect6029" + width="143.44167" + height="88.893425" + x="516.18793" + y="74.534515" + style="font-size:13px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;font-family:Monospace" /></flowRegion><flowPara + id="flowPara6031">class gender_pimpl</flowPara><flowPara + id="flowPara6033">{</flowPara><flowPara + id="flowPara6035"> void</flowPara><flowPara + id="flowPara6037"> post_gender ();</flowPara><flowPara + id="flowPara6039">};</flowPara><flowPara + id="flowPara6041" /></flowRoot> </g> + <path + style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;marker-start:url(#Dot_l);marker-end:url(#Arrow1Lend)" + d="M 265.67011,339.69956 L 210.41811,339.34242 L 210.77124,264.14332 L 127.7843,264.4432" + id="path6051" + inkscape:connector-type="polyline" + sodipodi:nodetypes="cccs" /> + <path + sodipodi:nodetypes="cccc" + inkscape:connector-type="polyline" + id="path6077" + d="M 518.20825,383.6412 L 471.23616,384.14628 L 471.4887,300.55615 L 368.70568,300.80869" + style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-start:url(#Dot_l);marker-end:url(#Arrow1Lend);stroke-opacity:1;display:inline" /> + <path + style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-start:url(#Dot_l);marker-end:url(#Arrow1Lend);stroke-opacity:1;display:inline" + d="M 517.1981,262.42289 L 353.55339,262.42289" + id="path6081" + inkscape:connector-type="polyline" + sodipodi:nodetypes="cccs" /> + <path + style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-start:url(#Dot_l);marker-end:url(#Arrow1Lend);stroke-opacity:1;display:inline" + d="M 518.57143,145.93361 L 470.35714,146.14281 L 470.53572,183.07646 L 431.42857,183.79075" + id="path6089" + inkscape:connector-type="polyline" + sodipodi:nodetypes="cccc" /> + <path + style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-opacity:1;display:inline" + d="M 470.46175,178.43361 L 470.89286,222.36218 L 423.21428,222.71932" + id="path6091" + inkscape:connector-type="polyline" + sodipodi:nodetypes="ccc" /> + </g> +</svg> diff --git a/xsd/documentation/cxx/parser/guide/guide.html2ps b/xsd/documentation/cxx/parser/guide/guide.html2ps new file mode 100644 index 0000000..1021e9f --- /dev/null +++ b/xsd/documentation/cxx/parser/guide/guide.html2ps @@ -0,0 +1,65 @@ +@html2ps { + option { + toc: hb; + colour: 1; + hyphenate: 1; + titlepage: 1; + } + + datefmt: "%B %Y"; + + titlepage { + content: " +<div align=center> + <h1><big>C++/Parser Mapping</big></h1> + <h1><big>Getting Started Guide</big></h1> + <h1> </h1> + <h1> </h1> + <h1> </h1> + <h1> </h1> + <h1> </h1> + <h1> </h1> +</div> + <p>Copyright © 2005-2010 CODE SYNTHESIS TOOLS CC</p> + + <p>Permission is granted to copy, distribute and/or modify this + document under the terms of the + <a href='http://www.codesynthesis.com/licenses/fdl-1.2.txt'>GNU Free + Documentation License, version 1.2</a>; with no Invariant Sections, + no Front-Cover Texts and no Back-Cover Texts. + </p> + + <p>This document is available in the following formats: + <a href='http://www.codesynthesis.com/projects/xsd/documentation/cxx/parser/guide/index.xhtml'>XHTML</a>, + <a href='http://www.codesynthesis.com/projects/xsd/documentation/cxx/parser/guide/cxx-parser-guide.pdf'>PDF</a>, and + <a href='http://www.codesynthesis.com/projects/xsd/documentation/cxx/parser/guide/cxx-parser-guide.ps'>PostScript</a>.</p>"; + } + + toc { + indent: 2em; + } + + header { + odd-right: $H; + even-left: $H; + } + + footer { + odd-left: $D; + odd-center: $T; + odd-right: $N; + + even-left: $N; + even-center: $T; + even-right: $D; + } +} + +body { + font-size: 12pt; + text-align: justify; +} + +pre { + font-size: 10pt; +} diff --git a/xsd/documentation/cxx/parser/guide/index.xhtml b/xsd/documentation/cxx/parser/guide/index.xhtml new file mode 100644 index 0000000..b65bcfe --- /dev/null +++ b/xsd/documentation/cxx/parser/guide/index.xhtml @@ -0,0 +1,4141 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> + +<head> + <title>C++/Parser Mapping Getting Started Guide</title> + + <meta name="copyright" content="© 2005-2010 Code Synthesis Tools CC"/> + <meta name="keywords" content="xsd,xml,schema,c++,mapping,data,binding,parser,validation"/> + <meta name="description" content="C++/Parser Mapping Getting Started Guide"/> + + <link rel="stylesheet" type="text/css" href="../../../default.css" /> + +<style type="text/css"> + pre { + padding : 0 0 0 0em; + margin : 0em 0em 0em 0; + + font-size : 102% + } + + body { + min-width: 48em; + } + + h1 { + font-weight: bold; + font-size: 200%; + line-height: 1.2em; + } + + h2 { + font-weight : bold; + font-size : 150%; + + padding-top : 0.8em; + } + + h3 { + font-size : 140%; + padding-top : 0.8em; + } + + /* Adjust indentation for three levels. */ + #container { + max-width: 48em; + } + + #content { + padding: 0 0.1em 0 4em; + /*background-color: red;*/ + } + + #content h1 { + margin-left: -2.06em; + } + + #content h2 { + margin-left: -1.33em; + } + + /* Title page */ + + #titlepage { + padding: 2em 0 1em 0; + border-bottom: 1px solid black; + } + + #titlepage .title { + font-weight: bold; + font-size: 200%; + text-align: center; + } + + #titlepage #first-title { + padding: 1em 0 0.4em 0; + } + + #titlepage #second-title { + padding: 0.4em 0 2em 0; + } + + /* Lists */ + ul.list li { + padding-top : 0.3em; + padding-bottom : 0.3em; + } + + ol.steps { + padding-left : 1.8em; + } + + ol.steps li { + padding-top : 0.3em; + padding-bottom : 0.3em; + } + + + div.img { + text-align: center; + padding: 2em 0 2em 0; + } + + /* */ + dl dt { + padding : 0.8em 0 0 0; + } + + /* Built-in table */ + #builtin { + margin: 2em 0 2em 0; + + border-collapse : collapse; + border : 1px solid; + border-color : #000000; + + font-size : 11px; + line-height : 14px; + } + + #builtin th, #builtin td { + border: 1px solid; + padding : 0.9em 0.9em 0.7em 0.9em; + } + + #builtin th { + background : #cde8f6; + } + + #builtin td { + text-align: left; + } + + /* XML Schema features table. */ + #features { + margin: 2em 0 2em 0; + + border-collapse : collapse; + border : 1px solid; + border-color : #000000; + + font-size : 11px; + line-height : 14px; + } + + #features th, #features td { + border: 1px solid; + padding : 0.6em 0.6em 0.6em 0.6em; + } + + #features th { + background : #cde8f6; + } + + #features td { + text-align: left; + } + + + /* TOC */ + table.toc { + border-style : none; + border-collapse : separate; + border-spacing : 0; + + margin : 0.2em 0 0.2em 0; + padding : 0 0 0 0; + } + + table.toc tr { + padding : 0 0 0 0; + margin : 0 0 0 0; + } + + table.toc * td, table.toc * th { + border-style : none; + margin : 0 0 0 0; + vertical-align : top; + } + + table.toc * th { + font-weight : normal; + padding : 0em 0.1em 0em 0; + text-align : left; + white-space : nowrap; + } + + table.toc * table.toc th { + padding-left : 1em; + } + + table.toc * td { + padding : 0em 0 0em 0.7em; + text-align : left; + } +</style> + + +</head> + +<body> +<div id="container"> + <div id="content"> + + <div class="noprint"> + + <div id="titlepage"> + <div class="title" id="first-title">C++/Parser Mapping</div> + <div class="title" id="second-title">Getting Started Guide</div> + + <p>Copyright © 2005-2010 CODE SYNTHESIS TOOLS CC</p> + + <p>Permission is granted to copy, distribute and/or modify this + document under the terms of the + <a href="http://www.codesynthesis.com/licenses/fdl-1.2.txt">GNU Free + Documentation License, version 1.2</a>; with no Invariant Sections, + no Front-Cover Texts and no Back-Cover Texts. + </p> + + <p>This document is available in the following formats: + <a href="http://www.codesynthesis.com/projects/xsd/documentation/cxx/parser/guide/index.xhtml">XHTML</a>, + <a href="http://www.codesynthesis.com/projects/xsd/documentation/cxx/parser/guide/cxx-parser-guide.pdf">PDF</a>, and + <a href="http://www.codesynthesis.com/projects/xsd/documentation/cxx/parser/guide/cxx-parser-guide.ps">PostScript</a>.</p> + + </div> + + <h1>Table of Contents</h1> + + <table class="toc"> + <tr> + <th></th><td><a href="#0">Preface</a> + <table class="toc"> + <tr><th></th><td><a href="#0.1">About This Document</a></td></tr> + <tr><th></th><td><a href="#0.2">More Information</a></td></tr> + </table> + </td> + </tr> + + <tr> + <th>1</th><td><a href="#1">Introduction</a> + <table class="toc"> + <tr><th>1.1</th><td><a href="#1.1">Mapping Overview</a></td></tr> + <tr><th>1.2</th><td><a href="#1.2">Benefits</a></td></tr> + </table> + </td> + </tr> + + <tr> + <th>2</th><td><a href="#2">Hello World Example</a> + <table class="toc"> + <tr><th>2.1</th><td><a href="#2.1">Writing XML Document and Schema</a></td></tr> + <tr><th>2.2</th><td><a href="#2.2">Translating Schema to C++</a></td></tr> + <tr><th>2.3</th><td><a href="#2.3">Implementing Application Logic</a></td></tr> + <tr><th>2.4</th><td><a href="#2.4">Compiling and Running</a></td></tr> + </table> + </td> + </tr> + + <tr> + <th>3</th><td><a href="#3">Parser Skeletons</a> + <table class="toc"> + <tr><th>3.1</th><td><a href="#3.1">Implementing the Gender Parser</a></td></tr> + <tr><th>3.2</th><td><a href="#3.2">Implementing the Person Parser</a></td></tr> + <tr><th>3.3</th><td><a href="#3.3">Implementing the People Parser</a></td></tr> + <tr><th>3.4</th><td><a href="#3.4">Connecting the Parsers Together</a></td></tr> + </table> + </td> + </tr> + + <tr> + <th>4</th><td><a href="#4">Type Maps</a> + <table class="toc"> + <tr><th>4.1</th><td><a href="#4.1">Object Model</a></td></tr> + <tr><th>4.2</th><td><a href="#4.2">Type Map File Format</a></td></tr> + <tr><th>4.3</th><td><a href="#4.3">Parser Implementations</a></td></tr> + </table> + </td> + </tr> + + <tr> + <th>5</th><td><a href="#5">Mapping Configuration</a> + <table class="toc"> + <tr><th>5.1</th><td><a href="#5.1">Character Type and Encoding</a></td></tr> + <tr><th>5.2</th><td><a href="#5.2">Underlying XML Parser</a></td></tr> + <tr><th>5.3</th><td><a href="#5.3">XML Schema Validation</a></td></tr> + <tr><th>5.4</th><td><a href="#5.4">Support for Polymorphism</a></td></tr> + </table> + </td> + </tr> + + <tr> + <th>6</th><td><a href="#6">Built-In XML Schema Type Parsers</a> + <table class="toc"> + <tr><th>6.1</th><td><a href="#6.1"><code>QName</code> Parser</a></td></tr> + <tr><th>6.2</th><td><a href="#6.2"><code>NMTOKENS</code> and <code>IDREFS</code> Parsers</a></td></tr> + <tr><th>6.3</th><td><a href="#6.3"><code>base64Binary</code> and <code>hexBinary</code> Parsers</a></td></tr> + <tr><th>6.4</th><td><a href="#6.4">Time Zone Representation</a></td></tr> + <tr><th>6.5</th><td><a href="#6.5"><code>date</code> Parser</a></td></tr> + <tr><th>6.6</th><td><a href="#6.6"><code>dateTime</code> Parser</a></td></tr> + <tr><th>6.7</th><td><a href="#6.7"><code>duration</code> Parser</a></td></tr> + <tr><th>6.8</th><td><a href="#6.8"><code>gDay</code> Parser</a></td></tr> + <tr><th>6.9</th><td><a href="#6.9"><code>gMonth</code> Parser</a></td></tr> + <tr><th>6.10</th><td><a href="#6.10"><code>gMonthDay</code> Parser</a></td></tr> + <tr><th>6.11</th><td><a href="#6.11"><code>gYear</code> Parser</a></td></tr> + <tr><th>6.12</th><td><a href="#6.12"><code>gYearMonth</code> Parser</a></td></tr> + <tr><th>6.13</th><td><a href="#6.13"><code>time</code> Parser</a></td></tr> + </table> + </td> + </tr> + + <tr> + <th>7</th><td><a href="#7">Document Parser and Error Handling</a> + <table class="toc"> + <tr><th>7.1</th><td><a href="#7.1">Xerces-C++ Document Parser</a></td></tr> + <tr><th>7.2</th><td><a href="#7.2">Expat Document Parser</a></td></tr> + <tr><th>7.3</th><td><a href="#7.3">Error Handling</a></td></tr> + </table> + </td> + </tr> + + <tr> + <th></th><td><a href="#A">Appendix A — Supported XML Schema Constructs</a></td> + </tr> + + </table> + </div> + + <h1><a name="0">Preface</a></h1> + + <h2><a name="0.1">About This Document</a></h2> + + <p>The goal of this document is to provide you with an understanding of + the C++/Parser programming model and allow you to efficiently evaluate + XSD against your project's technical requirements. As such, this + document is intended for C++ developers and software architects + who are looking for an XML processing solution. Prior experience + with XML and C++ is required to understand this document. Basic + understanding of XML Schema is advantageous but not expected + or required. + </p> + + + <h2><a name="0.2">More Information</a></h2> + + <p>Beyond this guide, you may also find the following sources of + information useful:</p> + + <ul class="list"> + <li><a href="http://www.codesynthesis.com/projects/xsd/documentation/xsd.xhtml">XSD + Compiler Command Line Manual</a></li> + + <li>The <code>examples/cxx/parser/</code> directory in the XSD + distribution contains a collection of examples and a README + file with an overview of each example.</li> + + <li>The <code>README</code> file in the XSD distribution explains + how to compile the examples on various platforms.</li> + + <li>The <a href="http://www.codesynthesis.com/mailman/listinfo/xsd-users">xsd-users</a> + mailing list is the place to ask technical questions about XSD and the C++/Parser mapping. + Furthermore, the <a href="http://www.codesynthesis.com/pipermail/xsd-users/">archives</a> + may already have answers to some of your questions.</li> + + </ul> + + <!-- Introduction --> + + <h1><a name="1">1 Introduction</a></h1> + + <p>Welcome to CodeSynthesis XSD and the C++/Parser mapping. XSD is a + cross-platform W3C XML Schema to C++ data binding compiler. C++/Parser + is a W3C XML Schema to C++ mapping that represents an XML vocabulary + as a set of parser skeletons which you can implement to perform XML + processing as required by your application logic. + </p> + + <h2><a name="1.1">1.1 Mapping Overview</a></h2> + + <p>The C++/Parser mapping provides event-driven, stream-oriented + XML parsing, XML Schema validation, and C++ data binding. It was + specifically designed and optimized for high performance and + small footprint. Based on the static analysis of the schemas, XSD + generates compact, highly-optimized hierarchical state machines + that combine data extraction, validation, and even dispatching + in a single step. As a result, the generated code is typically + 2-10 times faster than general-purpose validating XML parsers + while maintaining the lowest static and dynamic memory footprints. + </p> + + <p>To speed up application development, the C++/Parser mapping + can be instructed to generate sample parser implementations + and a test driver which can then be filled with the application + logic code. The mapping also provides a wide range of + mechanisms for controlling and customizing the generated code.</p> + + <p>The next chapter shows how to create a simple application that uses + the C++/Parser mapping to parse, validate, and extract data from a + simple XML document. The following chapters show how to + use the C++/Parser mapping in more detail.</p> + + <h2><a name="1.2">1.2 Benefits</a></h2> + + <p>Traditional XML access APIs such as Document Object Model (DOM) + or Simple API for XML (SAX) have a number of drawbacks that + make them less suitable for creating robust and maintainable + XML processing applications. These drawbacks include: + </p> + + <ul class="list"> + <li>Generic representation of XML in terms of elements, attributes, + and text forces an application developer to write a substantial + amount of bridging code that identifies and transforms pieces + of information encoded in XML to a representation more suitable + for consumption by the application logic.</li> + + <li>String-based flow control defers error detection to runtime. + It also reduces code readability and maintainability.</li> + + <li>Lack of type safety because the data is represented + as text.</li> + + <li>Resulting applications are hard to debug, change, and + maintain.</li> + </ul> + + <p>In contrast, statically-typed, vocabulary-specific parser + skeletons produced by the C++/Parser mapping allow you to + operate in your domain terms instead of the generic elements, + attributes, and text. Static typing helps catch errors at + compile-time rather than at run-time. Automatic code generation + frees you for more interesting tasks (such as doing something + useful with the information stored in the XML documents) and + minimizes the effort needed to adapt your applications to + changes in the document structure. To summarize, the C++/Parser + mapping has the following key advantages over generic XML + access APIs:</p> + + <ul class="list"> + <li><b>Ease of use.</b> The generated code hides all the complexity + associated with recreating the document structure, maintaining the + dispatch state, and converting the data from the text representation + to data types suitable for manipulation by the application logic. + Parser skeletons also provide a convenient mechanism for building + custom in-memory representations.</li> + + <li><b>Natural representation.</b> The generated parser skeletons + implement parser callbacks as virtual functions with names + corresponding to elements and attributes in XML. As a result, + you process the XML data using your domain vocabulary instead + of generic elements, attributes, and text. + </li> + + <li><b>Concise code.</b> With a separate parser skeleton for each + XML Schema type, the application implementation is + simpler and thus easier to read and understand.</li> + + <li><b>Safety.</b> The XML data is delivered to parser callbacks as + statically typed objects. The parser callbacks themselves are virtual + functions. This helps catch programming errors at compile-time + rather than at runtime.</li> + + <li><b>Maintainability.</b> Automatic code generation minimizes the + effort needed to adapt the application to changes in the + document structure. With static typing, the C++ compiler + can pin-point the places in the application code that need to be + changed.</li> + + <li><b>Efficiency.</b> The generated parser skeletons combine + data extraction, validation, and even dispatching in a single + step. This makes them much more efficient than traditional + architectures with separate stages for validation and data + extraction/dispatch.</li> + </ul> + + <!-- Hello World Parser --> + + + <h1><a name="2">2 Hello World Example</a></h1> + + <p>In this chapter we will examine how to parse a very simple XML + document using the XSD-generated C++/Parser skeletons. + The code presented in this chapter is based on the <code>hello</code> + example which can be found in the <code>examples/cxx/parser/</code> + directory of the XSD distribution.</p> + + <h2><a name="2.1">2.1 Writing XML Document and Schema</a></h2> + + <p>First, we need to get an idea about the structure + of the XML documents we are going to process. Our + <code>hello.xml</code>, for example, could look like this:</p> + + <pre class="xml"> +<?xml version="1.0"?> +<hello> + + <greeting>Hello</greeting> + + <name>sun</name> + <name>moon</name> + <name>world</name> + +</hello> + </pre> + + <p>Then we can write a description of the above XML in the + XML Schema language and save it into <code>hello.xsd</code>:</p> + + <pre class="xml"> +<?xml version="1.0"?> +<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> + + <xs:complexType name="hello"> + <xs:sequence> + <xs:element name="greeting" type="xs:string"/> + <xs:element name="name" type="xs:string" maxOccurs="unbounded"/> + </xs:sequence> + </xs:complexType> + + <xs:element name="hello" type="hello"/> + +</xs:schema> + </pre> + + <p>Even if you are not familiar with XML Schema, it + should be easy to connect declarations in <code>hello.xsd</code> + to elements in <code>hello.xml</code>. The <code>hello</code> type + is defined as a sequence of the nested <code>greeting</code> and + <code>name</code> elements. Note that the term sequence in XML + Schema means that elements should appear in a particular order + as opposed to appearing multiple times. The <code>name</code> + element has its <code>maxOccurs</code> property set to + <code>unbounded</code> which means it can appear multiple times + in an XML document. Finally, the globally-defined <code>hello</code> + element prescribes the root element for our vocabulary. For an + easily-approachable introduction to XML Schema refer to + <a href="http://www.w3.org/TR/xmlschema-0/">XML Schema Part 0: + Primer</a>.</p> + + <p>The above schema is a specification of our XML vocabulary; it tells + everybody what valid documents of our XML-based language should look + like. The next step is to compile this schema to generate + the object model and parsing functions.</p> + + <h2><a name="2.2">2.2 Translating Schema to C++</a></h2> + + <p>Now we are ready to translate our <code>hello.xsd</code> to C++ parser + skeletons. To do this we invoke the XSD compiler from a terminal + (UNIX) or a command prompt (Windows): + </p> + + <pre class="terminal"> +$ xsd cxx-parser --xml-parser expat hello.xsd + </pre> + + <p>The <code>--xml-parser</code> option indicates that we want to + use Expat as the underlying XML parser (see <a href="#5.2">Section + 5.2, "Underlying XML Parser"</a>). The XSD compiler produces two + C++ files: <code>hello-pskel.hxx</code> and <code>hello-pskel.cxx</code>. + The following code fragment is taken from <code>hello-pskel.hxx</code>; + it should give you an idea about what gets generated: + </p> + + <pre class="c++"> +class hello_pskel +{ +public: + // Parser callbacks. Override them in your implementation. + // + virtual void + pre (); + + virtual void + greeting (const std::string&); + + virtual void + name (const std::string&); + + virtual void + post_hello (); + + // Parser construction API. + // + void + greeting_parser (xml_schema::string_pskel&); + + void + name_parser (xml_schema::string_pskel&); + + void + parsers (xml_schema::string_pskel& /* greeting */, + xml_schema::string_pskel& /* name */); + +private: + ... +}; + </pre> + + <p>The first four member functions shown above are called parser + callbacks. You would normally override them in your implementation + of the parser to do something useful. Let's go through all of + them one by one.</p> + + <p>The <code>pre()</code> function is an initialization callback. It is + called when a new element of type <code>hello</code> is about + to be parsed. You would normally use this function to allocate a new + instance of the resulting type or clear accumulators that are used + to gather information during parsing. The default implementation + of this function does nothing.</p> + + <p>The <code>post_hello()</code> function is a finalization callback. Its + name is constructed by adding the parser skeleton name to the + <code>post_</code> prefix. The finalization callback is called when + parsing of the element is complete and the result, if any, should + be returned. Note that in our case the return type of + <code>post_hello()</code> is <code>void</code> which means there + is nothing to return. More on parser return types later. + </p> + + <p>You may be wondering why the finalization callback is called + <code>post_hello()</code> instead of <code>post()</code> just + like <code>pre()</code>. The reason for this is that + finalization callbacks can have different return types and + result in function signature clashes across inheritance + hierarchies. To prevent this the signatures of finalization + callbacks are made unique by adding the type name to their names.</p> + + <p>The <code>greeting()</code> and <code>name()</code> functions are + called when the <code>greeting</code> and <code>name</code> elements + have been parsed, respectively. Their arguments are of type + <code>std::string</code> and contain the data extracted from XML.</p> + + <p>The last three functions are for connecting parsers to each other. + For example, there is a predefined parser for built-in XML Schema type + <code>string</code> in the XSD runtime. We will be using + it to parse the contents of <code>greeting</code> and + <code>name</code> elements, as shown in the next section.</p> + + <h2><a name="2.3">2.3 Implementing Application Logic</a></h2> + + <p>At this point we have all the parts we need to do something useful + with the information stored in our XML document. The first step is + to implement the parser: + </p> + + <pre class="c++"> +#include <iostream> +#include "hello-pskel.hxx" + +class hello_pimpl: public hello_pskel +{ +public: + virtual void + greeting (const std::string& g) + { + greeting_ = g; + } + + virtual void + name (const std::string& n) + { + std::cout << greeting_ << ", " << n << "!" << std::endl; + } + +private: + std::string greeting_; +}; + </pre> + + <p>We left both <code>pre()</code> and <code>post_hello()</code> with the + default implementations; we don't have anything to initialize or + return. The rest is pretty straightforward: we store the greeting + in a member variable and later, when parsing names, use it to + say hello.</p> + + <p>An observant reader my ask what happens if the <code>name</code> + element comes before <code>greeting</code>? Don't we need to + make sure <code>greeting_</code> was initialized and report + an error otherwise? The answer is no, we don't have to do + any of this. The <code>hello_pskel</code> parser skeleton + performs validation of XML according to the schema from which + it was generated. As a result, it will check the order + of the <code>greeting</code> and <code>name</code> elements + and report an error if it is violated.</p> + + <p>Now it is time to put this parser implementation to work:</p> + + <pre class="c++"> +using namespace std; + +int +main (int argc, char* argv[]) +{ + try + { + // Construct the parser. + // + xml_schema::string_pimpl string_p; + hello_pimpl hello_p; + + hello_p.greeting_parser (string_p); + hello_p.name_parser (string_p); + + // Parse the XML instance. + // + xml_schema::document doc_p (hello_p, "hello"); + + hello_p.pre (); + doc_p.parse (argv[1]); + hello_p.post_hello (); + } + catch (const xml_schema::exception& e) + { + cerr << e << endl; + return 1; + } +} + </pre> + + <p>The first part of this code snippet instantiates individual parsers + and assembles them into a complete vocabulary parser. + <code>xml_schema::string_pimpl</code> is an implementation of a parser + for built-in XML Schema type <code>string</code>. It is provided by + the XSD runtime along with parsers for other built-in types (for + more information on the built-in parsers see <a href="#6">Chapter 6, + "Built-In XML Schema Type Parsers"</a>). We use <code>string_pimpl</code> + to parse the <code>greeting</code> and <code>name</code> elements as + indicated by the calls to <code>greeting_parser()</code> and + <code>name_parser()</code>. + </p> + + <p>Then we instantiate a document parser (<code>doc_p</code>). The + first argument to its constructor is the parser for + the root element (<code>hello_p</code> in our case). The + second argument is the root element name. + </p> + + <p>The final piece is the calls to <code>pre()</code>, <code>parse()</code>, + and <code>post_hello()</code>. The call to <code>parse()</code> + perform the actual XML parsing while the calls to <code>pre()</code> and + <code>post_hello()</code> make sure that the parser for the root + element can perform proper initialization and cleanup.</p> + + <p>While our parser implementation and test driver are pretty small and + easy to write by hand, for bigger XML vocabularies it can be a + substantial effort. To help with this task XSD can automatically + generate sample parser implementations and a test driver from your + schemas. You can request the generation of a sample implementation with + empty function bodies by specifying the <code>--generate-noop-impl</code> + option. Or you can generate a sample implementation that prints the + data store in XML by using the <code>--generate-print-impl</code> + option. To request the generation of a test driver you can use the + <code>--generate-test-driver</code> option. For more information + on these options refer to the + <a href="http://www.codesynthesis.com/projects/xsd/documentation/xsd.xhtml">XSD + Compiler Command Line Manual</a>. The <code>'generated'</code> example + in the XSD distribution shows the sample implementation generation + feature in action.</p> + + + <h2><a name="2.4">2.4 Compiling and Running</a></h2> + + <p>After saving all the parts from the previous section in + <code>driver.cxx</code>, we are ready to compile our first + application and run it on the test XML document. On a UNIX + system this can be done with the following commands: + </p> + + <pre class="terminal"> +$ c++ -I.../libxsd -c driver.cxx hello-pskel.cxx +$ c++ -o driver driver.o hello-pskel.o -lexpat +$ ./driver hello.xml +Hello, sun! +Hello, moon! +Hello, world! + </pre> + + <p>Here <code>.../libxsd</code> represents the path to the + <code>libxsd</code> directory in the XSD distribution. + We can also test the error handling. To test XML well-formedness + checking, we can try to parse <code>hello-pskel.hxx</code>:</p> + + <pre class="terminal"> +$ ./driver hello-pskel.hxx +hello-pskel.hxx:1:0: not well-formed (invalid token) + </pre> + + <p>We can also try to parse a valid XML but not from our + vocabulary, for example <code>hello.xsd</code>:</p> + + <pre class="terminal"> +$ ./driver hello.xsd +hello.xsd:2:0: expected element 'hello' instead of +'http://www.w3.org/2001/XMLSchema#schema' + </pre> + + + <!-- Chapater 3 --> + + + <h1><a name="3">3 Parser Skeletons</a></h1> + + <p>As we have seen in the previous chapter, the XSD compiler generates + a parser skeleton class for each type defined in XML Schema. In + this chapter we will take a closer look at different functions + that comprise a parser skeleton as well as the way to connect + our implementations of these parser skeletons to create a complete + parser.</p> + + <p>In this and subsequent chapters we will use the following schema + that describes a collection of person records. We save it in + <code>people.xsd</code>:</p> + + <pre class="xml"> +<?xml version="1.0"?> +<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> + + <xs:simpleType name="gender"> + <xs:restriction base="xs:string"> + <xs:enumeration value="male"/> + <xs:enumeration value="female"/> + </xs:restriction> + </xs:simpleType> + + <xs:complexType name="person"> + <xs:sequence> + <xs:element name="first-name" type="xs:string"/> + <xs:element name="last-name" type="xs:string"/> + <xs:element name="gender" type="gender"/> + <xs:element name="age" type="xs:short"/> + </xs:sequence> + </xs:complexType> + + <xs:complexType name="people"> + <xs:sequence> + <xs:element name="person" type="person" maxOccurs="unbounded"/> + </xs:sequence> + </xs:complexType> + + <xs:element name="people" type="people"/> + +</xs:schema> + </pre> + + <p>A sample XML instance to go along with this schema is saved + in <code>people.xml</code>:</p> + + <pre class="xml"> +<?xml version="1.0"?> +<people> + <person> + <first-name>John</first-name> + <last-name>Doe</last-name> + <gender>male</gender> + <age>32</age> + </person> + <person> + <first-name>Jane</first-name> + <last-name>Doe</last-name> + <gender>female</gender> + <age>28</age> + </person> +</people> + </pre> + + <p>Compiling <code>people.xsd</code> with the XSD compiler results + in three parser skeletons being generated: <code>gender_pskel</code>, + <code>person_pskel</code>, and <code>people_pskel</code>. We are going + to examine and implement each of them in the subsequent sections.</p> + + <h2><a name="3.1">3.1 Implementing the Gender Parser</a></h2> + + <p>The generated <code>gender_pskel</code> parser skeleton looks like + this:</p> + + <pre class="c++"> +class gender_pskel: public virtual xml_schema::string_pskel +{ +public: + // Parser callbacks. Override them in your implementation. + // + virtual void + pre (); + + virtual void + post_gender (); +}; + </pre> + + <p>Notice that <code>gender_pskel</code> inherits from + <code>xml_schema::string_skel</code> which is a parser skeleton + for built-in XML Schema type <code>string</code> and is + predefined in the XSD runtime library. This is an example + of the general rule that parser skeletons follow: if a type + in XML Schema inherits from another then there will be an + equivalent inheritance between the corresponding parser + skeleton classes.</p> + + <p>The <code>pre()</code> and <code>post_gender()</code> callbacks + should look familiar from the previous chapter. Let's now + implement the parser. Our implementation will simply print + the gender to <code>cout</code>:</p> + + + <pre class="c++"> +class gender_pimpl: public gender_pskel, + public xml_schema::string_pimpl +{ +public: + virtual void + post_gender () + { + std::string s = post_string (); + cout << "gender: " << s << endl; + } +}; + </pre> + + <p>While the code is quite short, there is a lot going on. First, + notice that we are inheriting from <code>gender_pskel</code> <em>and</em> + from <code>xml_schema::string_pimpl</code>. We've encountered + <code>xml_schema::string_pimpl</code> already; it is an + implementation of the <code>xml_schema::string_pskel</code> parser + skeleton for built-in XML Schema type <code>string</code>.</p> + + <p>This is another common theme in the C++/Parser programming model: + reusing implementations of the base parsers in the derived ones with + the C++ mixin idiom. In our case, <code>string_pimpl</code> will + do all the dirty work of extracting the data and we can just get + it at the end with the call to <code>post_string()</code>.</p> + + <p>In case you are curious, here is what + <code>xml_schema::string_pskel</code> and + <code>xml_schema::string_pimpl</code> look like:</p> + + <pre class="c++"> +namespace xml_schema +{ + class string_pskel: public simple_content + { + public: + virtual std::string + post_string () = 0; + }; + + class string_pimpl: public virtual string_pskel + { + public: + virtual void + _pre (); + + virtual void + _characters (const xml_schema::ro_string&); + + virtual std::string + post_string (); + + protected: + std::string str_; + }; +} + </pre> + + <p>There are three new pieces in this code that we haven't seen yet. + They are the <code>simple_content</code> class as well as + the <code>_pre()</code> and <code>_characters()</code> functions. + The <code>simple_content</code> class is defined in the XSD + runtime and is a base class for all parser skeletons that conform + to the simple content model in XML Schema. Types with the + simple content model cannot have nested elements—only text + and attributes. There is also the <code>complex_content</code> + class which corresponds to the complex content mode (types with + nested elements, for example, <code>person</code> from + <code>people.xsd</code>).</p> + + <p>The <code>_pre()</code> function is a parser callback. Remember we + talked about the <code>pre()</code> and <code>post_*()</code> callbacks + in the previous chapter? There are actually two more callbacks + with similar roles: <code>_pre()</code> and <code>_post ()</code>. + As a result, each parser skeleton has four special callbacks:</p> + + <pre class="c++"> + virtual void + pre (); + + virtual void + _pre (); + + virtual void + _post (); + + virtual void + post_name (); + </pre> + + <p><code>pre()</code> and <code>_pre()</code> are initialization + callbacks. They get called in that order before a new instance of the type + is about to be parsed. The difference between <code>pre()</code> and + <code>_pre()</code> is conventional: <code>pre()</code> can + be completely overridden by a derived parser. The derived + parser can also override <code>_pre()</code> but has to always call + the original version. This allows you to partition initialization + into customizable and required parts.</p> + + <p>Similarly, <code>_post()</code> and <code>post_name()</code> are + finalization callbacks with exactly the same semantics: + <code>post_name()</code> can be completely overridden by the derived + parser while the original <code>_post()</code> should always be called. + </p> + + <p>The final bit we need to discuss in this section is the + <code>_characters()</code> function. As you might have guessed, it + is also a callback. A low-level one that delivers raw character content + for the type being parsed. You will seldom need to use this callback + directly. Using implementations for the built-in parsers provided by + the XSD runtime is usually a simpler and more convenient + alternative.</p> + + <p>At this point you might be wondering why some <code>post_*()</code> + callbacks, for example <code>post_string()</code>, return some data + while others, for example <code>post_gender()</code>, have + <code>void</code> as a return type. This is a valid concern + and it will be addressed in the next chapter.</p> + + <h2><a name="3.2">3.2 Implementing the Person Parser</a></h2> + + <p>The generated <code>person_pskel</code> parser skeleton looks like + this:</p> + + <pre class="c++"> +class person_pskel: public xml_schema::complex_content +{ +public: + // Parser callbacks. Override them in your implementation. + // + virtual void + pre (); + + virtual void + first_name (const std::string&); + + virtual void + last_name (const std::string&); + + virtual void + gender (); + + virtual void + age (short); + + virtual void + post_person (); + + // Parser construction API. + // + void + first_name_parser (xml_schema::string_pskel&); + + void + last_name_parser (xml_schema::string_pskel&); + + void + gender_parser (gender_pskel&); + + void + age_parser (xml_schema::short_pskel&); + + void + parsers (xml_schema::string_pskel& /* first-name */, + xml_schema::string_pskel& /* last-name */, + gender_pskel& /* gender */, + xml_schema::short_pskel& /* age */); +}; + </pre> + + + <p>As you can see, we have a parser callback for each of the nested + elements found in the <code>person</code> XML Schema type. + The implementation of this parser is straightforward:</p> + + <pre class="c++"> +class person_pimpl: public person_pskel +{ +public: + virtual void + first_name (const std::string& n) + { + cout << "first: " << f << endl; + } + + virtual void + last_name (const std::string& l) + { + cout << "last: " << l << endl; + } + + virtual void + age (short a) + { + cout << "age: " << a << endl; + } +}; + </pre> + + <p>Notice that we didn't override the <code>gender()</code> callback + because all the printing is done by <code>gender_pimpl</code>.</p> + + + <h2><a name="3.3">3.3 Implementing the People Parser</a></h2> + + <p>The generated <code>people_pskel</code> parser skeleton looks like + this:</p> + + <pre class="c++"> +class people_pskel: public xml_schema::complex_content +{ +public: + // Parser callbacks. Override them in your implementation. + // + virtual void + pre (); + + virtual void + person (); + + virtual void + post_people (); + + // Parser construction API. + // + void + person_parser (person_pskel&); + + void + parsers (person_pskel& /* person */); +}; + </pre> + + <p>The <code>person()</code> callback will be called after parsing each + <code>person</code> element. While <code>person_pimpl</code> does + all the printing, one useful thing we can do in this callback is to + print an extra newline after each person record so that our + output is more readable:</p> + + <pre class="c++"> +class people_pimpl: public people_pskel +{ +public: + virtual void + person () + { + cout << endl; + } +}; + </pre> + + <p>Now it is time to put everything together.</p> + + + <h2><a name="3.4">3.4 Connecting the Parsers Together</a></h2> + + <p>At this point we have all the individual parsers implemented + and can proceed to assemble them into a complete parser + for our XML vocabulary. The first step is to instantiate + all the individual parsers that we will need:</p> + + <pre class="c++"> +xml_schema::short_pimpl short_p; +xml_schema::string_pimpl string_p; + +gender_pimpl gender_p; +person_pimpl person_p; +people_pimpl people_p; + </pre> + + <p>Notice that our schema uses two built-in XML Schema types: + <code>string</code> for the <code>first-name</code> and + <code>last-name</code> elements as well as <code>short</code> + for <code>age</code>. We will use predefined parsers that + come with the XSD runtime to handle these types. The next + step is to connect all the individual parsers. We do this + with the help of functions defined in the parser + skeletons and marked with the "Parser Construction API" + comment. One way to do it is to connect each individual + parser by calling the <code>*_parser()</code> functions:</p> + + <pre class="c++"> +person_p.first_name_parser (string_p); +person_p.last_name_parser (string_p); +person_p.gender_parser (gender_p); +person_p.age_parser (short_p); + +people_p.person_parser (person_p); + </pre> + + <p>You might be wondering what happens if you do not provide + a parser by not calling one of the <code>*_parser()</code> functions. + In that case the corresponding XML content will be skipped, + including validation. This is an efficient way to ignore parts + of the document that you are not interested in.</p> + + + <p>An alternative, shorter, way to connect the parsers is by using + the <code>parsers()</code> functions which connects all the parsers + for a given type at once:</p> + + <pre class="c++"> +person_p.parsers (string_p, string_p, gender_p, short_p); +people_p.parsers (person_p); + </pre> + + <p>The following figure illustrates the resulting connections. Notice + the correspondence between return types of the <code>post_*()</code> + functions and argument types of element callbacks that are connected + by the arrows.</p> + + <!-- align=center is needed for html2ps --> + <div class="img" align="center"><img src="figure-1.png"/></div> + + <p>The last step is the construction of the document parser and + invocation of the complete parser on our sample XML instance:</p> + + <pre class="c++"> +xml_schema::document doc_p (people_p, "people"); + +people_p.pre (); +doc_p.parse ("people.xml"); +people_p.post_people (); + </pre> + + <p>Let's consider <code>xml_schema::document</code> in + more detail. While the exact definition of this class + varies depending on the underlying parser selected, + here is the common part:</p> + + <pre class="c++"> +namespace xml_schema +{ + class document + { + public: + document (xml_schema::parser_base&, + const std::string& root_element_name, + bool polymorphic = false); + + document (xml_schema::parser_base&, + const std::string& root_element_namespace, + const std::string& root_element_name, + bool polymorphic = false); + + void + parse (const std::string& file); + + void + parse (std::istream&); + + ... + + }; +} + </pre> + + <p><code>xml_schema::document</code> is a root parser for + the vocabulary. The first argument to its constructors is the + parser for the type of the root element (<code>people_impl</code> + in our case). Because a type parser is only concerned with + the element's content and not with the element's name, we need + to specify the root element's name somewhere. That's + what is passed as the second and third arguments to the + <code>document</code>'s constructors.</p> + + <p>There are also two overloaded <code>parse()</code> functions + defined in the <code>document</code> class (there are actually + more but the others are specific to the underlying XML parser). + The first version parses a local file identified by a name. The + second version reads the data from an input stream. For more + information on the <code>xml_schema::document</code> class + refer to <a href="#7">Chapter 7, "Document Parser and Error + Handling"</a>.</p> + + <p>Let's now consider a step-by-step list of actions that happen + as we parse through <code>people.xml</code>. The content of + <code>people.xml</code> is repeated below for convenience.</p> + + <pre class="xml"> +<?xml version="1.0"?> +<people> + <person> + <first-name>John</first-name> + <last-name>Doe</last-name> + <gender>male</gender> + <age>32</age> + </person> + <person> + <first-name>Jane</first-name> + <last-name>Doe</last-name> + <gender>female</gender> + <age>28</age> + </person> +</people> + </pre> + + + <ol class="steps"> + <li><code>people_p.pre()</code> is called from + <code>main()</code>. We did not provide any implementation + for this callback so this call is a no-op.</li> + + <li><code>doc_p.parse("people.xml")</code> is called from + <code>main()</code>. The parser opens the file and starts + parsing its content.</li> + + <li>The parser encounters the root element. <code>doc_p</code> + verifies that the root element is correct and calls + <code>_pre()</code> on <code>people_p</code> which is also + a no-op. Parsing is now delegated to <code>people_p</code>.</li> + + <li>The parser encounters the <code>person</code> element. + <code>people_p</code> determines that <code>person_p</code> + is responsible for parsing this element. <code>pre()</code> + and <code>_pre()</code> callbacks are called on <code>person_p</code>. + Parsing is now delegated to <code>person_p</code>.</li> + + <li>The parser encounters the <code>first-name</code> element. + <code>person_p</code> determines that <code>string_p</code> + is responsible for parsing this element. <code>pre()</code> + and <code>_pre()</code> callbacks are called on <code>string_p</code>. + Parsing is now delegated to <code>string_p</code>.</li> + + <li>The parser encounters character content consisting of + <code>"John"</code>. The <code>_characters()</code> callback is + called on <code>string_p</code>.</li> + + <li>The parser encounters the end of <code>first-name</code> + element. The <code>_post()</code> and <code>post_string()</code> + callbacks are called on <code>string_p</code>. The + <code>first_name()</code> callback is called on <code>person_p</code> + with the return value of <code>post_string()</code>. The + <code>first_name()</code> implementation prints + <code>"first: John"</code> to <code>cout</code>. + Parsing is now returned to <code>person_p</code>.</li> + + <li>Steps analogous to 5-7 are performed for the <code>last-name</code>, + <code>gender</code>, and <code>age</code> elements.</li> + + <li>The parser encounters the end of <code>person</code> + element. The <code>_post()</code> and <code>post_person()</code> + callbacks are called on <code>person_p</code>. The + <code>person()</code> callback is called on <code>people_p</code>. + The <code>person()</code> implementation prints a new line + to <code>cout</code>. Parsing is now returned to + <code>people_p</code>.</li> + + <li>Steps 4-9 are performed for the second <code>person</code> + element.</li> + + <li>The parser encounters the end of <code>people</code> + element. The <code>_post()</code> callback is called on + <code>people_p</code>. The <code>doc_p.parse("people.xml")</code> + call returns to <code>main()</code>.</li> + + <li><code>people_p.post_people()</code> is called from + <code>main()</code> which is a no-op.</li> + + </ol> + + + <!-- Chpater 4 --> + + + <h1><a name="4">4 Type Maps</a></h1> + + <p>There are many useful things you can do inside parser callbacks as they + are right now. There are, however, times when you want to propagate + some information from one parser to another or to the caller of the + parser. One common task that would greatly benefit from such a + possibility is building a tree-like in-memory object model of the + data stored in XML. During execution, each individual sub-parser + would create a sub-tree and return it to its <em>parent</em> parser + which can then incorporate this sub-tree into the whole tree.</p> + + <p>In this chapter we will discuss the mechanisms offered by the + C++/Parser mapping for returning information from individual + parsers and see how to use them to build an object model + of our people vocabulary.</p> + + <h2><a name="4.1">4.1 Object Model</a></h2> + + <p>An object model for our person record example could + look like this (saved in the <code>people.hxx</code> file):</p> + + <pre class="c++"> +#include <string> +#include <vector> + +enum gender +{ + male, + female +}; + +class person +{ +public: + person (const std::string& first, + const std::string& last, + ::gender gender, + short age) + : first_ (first), last_ (last), + gender_ (gender), age_ (age) + { + } + + const std::string& + first () const + { + return first_; + } + + const std::string& + last () const + { + return last_; + } + + ::gender + gender () const + { + return gender_; + } + + short + age () const + { + return age_; + } + +private: + std::string first_; + std::string last_; + ::gender gender_; + short age_; +}; + +typedef std::vector<person> people; + </pre> + + <p>While it is clear which parser is responsible for which part of + the object model, it is not exactly clear how, for + example, <code>gender_pimpl</code> will deliver <code>gender</code> + to <code>person_pimpl</code>. You might have noticed that + <code>string_pimpl</code> manages to deliver its value to the + <code>first_name()</code> callback of <code>person_pimpl</code>. Let's + see how we can utilize the same mechanism to propagate our + own data.</p> + + <p>There is a way to tell the XSD compiler that you want to + exchange data between parsers. More precisely, for each + type defined in XML Schema, you can tell the compiler two things. + First, the return type of the <code>post_*()</code> callback + in the parser skeleton generated for this type. And, second, + the argument type for callbacks corresponding to elements and + attributes of this type. For example, for XML Schema type + <code>gender</code> we can specify the return type for + <code>post_gender()</code> in the <code>gender_pskel</code> + skeleton and the argument type for the <code>gender()</code> callback + in the <code>person_pskel</code> skeleton. As you might have guessed, + the generated code will then pass the return value from the + <code>post_*()</code> callback as an argument to the element or + attribute callback.</p> + + <p>The way to tell the XSD compiler about these XML Schema to + C++ mappings is with type map files. Here is a simple type + map for the <code>gender</code> type from the previous paragraph:</p> + + <pre class="type-map"> +include "people.hxx"; +gender ::gender ::gender; + </pre> + + <p>The first line indicates that the generated code must include + <code>people.hxx</code> in order to get the definition for the + <code>gender</code> type. The second line specifies that both + argument and return types for the <code>gender</code> + XML Schema type should be the <code>::gender</code> C++ enum + (we use fully-qualified C++ names to avoid name clashes). + The next section will describe the type map format in detail. + We save this type map in <code>people.map</code> and + then translate our schemas with the <code>--type-map</code> + option to let the XSD compiler know about our type map:</p> + + <pre class="terminal"> +$ xsd cxx-parser --type-map people.map people.xsd + </pre> + + <p>If we now look at the generated <code>people-pskel.hxx</code>, + we will see the following changes in the <code>gender_pskel</code> and + <code>person_pskel</code> skeletons:</p> + + <pre class="c++"> +#include "people.hxx" + +class gender_pskel: public virtual xml_schema::string_pskel +{ + virtual ::gender + post_gender () = 0; + + ... +}; + +class person_pskel: public xml_schema::complex_content +{ + virtual void + gender (::gender); + + ... +}; + </pre> + + <p>Notice that <code>#include "people.hxx"</code> was added to + the generated header file from the type map to provide the + definition for the <code>gender</code> enum.</p> + + <h2><a name="4.2">4.2 Type Map File Format</a></h2> + + <p>Type map files are used to define a mapping between XML Schema + and C++ types. The compiler uses this information + to determine return types of <code>post_*()</code> + callbacks in parser skeletons corresponding to XML Schema + types as well as argument types for callbacks corresponding + to elements and attributes of these types.</p> + + <p>The compiler has a set of predefined mapping rules that map + the built-in XML Schema types to suitable C++ types (discussed + below) and all other types to <code>void</code>. + By providing your own type maps you can override these predefined + rules. The format of the type map file is presented below: + </p> + + <pre class="type-map"> +namespace <schema-namespace> [<cxx-namespace>] +{ + (include <file-name>;)* + ([type] <schema-type> <cxx-ret-type> [<cxx-arg-type>];)* +} + </pre> + + <p>Both <code><i><schema-namespace></i></code> and + <code><i><schema-type></i></code> are regex patterns while + <code><i><cxx-namespace></i></code>, + <code><i><cxx-ret-type></i></code>, and + <code><i><cxx-arg-type></i></code> are regex pattern + substitutions. All names can be optionally enclosed in + <code>" "</code>, for example, to include white-spaces.</p> + + <p><code><i><schema-namespace></i></code> determines XML + Schema namespace. Optional <code><i><cxx-namespace></i></code> + is prefixed to every C++ type name in this namespace declaration. + <code><i><cxx-ret-type></i></code> is a C++ type name that is + used as a return type for the <code>post_*()</code> callback. + Optional <code><i><cxx-arg-type></i></code> is an argument + type for callbacks corresponding to elements and attributes + of this type. If <code><i><cxx-arg-type></i></code> is not + specified, it defaults to <code><i><cxx-ret-type></i></code> + if <code><i><cxx-ret-type></i></code> ends with <code>*</code> or + <code>&</code> (that is, it is a pointer or a reference) and + <code>const <i><cxx-ret-type></i>&</code> + otherwise. + <code><i><file-name></i></code> is a file name either in the + <code>" "</code> or <code>< ></code> format + and is added with the <code>#include</code> directive to + the generated code.</p> + + <p>The <code><b>#</b></code> character starts a comment that ends + with a new line or end of file. To specify a name that contains + <code><b>#</b></code> enclose it in <code><b>" "</b></code>. + For example:</p> + + <pre> +namespace http://www.example.com/xmlns/my my +{ + include "my.hxx"; + + # Pass apples by value. + # + apple apple; + + # Pass oranges as pointers. + # + orange orange_t*; +} + </pre> + + <p>In the example above, for the + <code>http://www.example.com/xmlns/my#orange</code> + XML Schema type, the <code>my::orange_t*</code> C++ type will + be used as both return and argument types.</p> + + <p>Several namespace declarations can be specified in a single + file. The namespace declaration can also be completely + omitted to map types in a schema without a namespace. For + instance:</p> + + <pre class="type-map"> +include "my.hxx"; +apple apple; + +namespace http://www.example.com/xmlns/my +{ + orange "const orange_t*"; +} + </pre> + + <p>The compiler has a number of predefined mapping rules for + the built-in XML Schema types which can be presented as the + following map files. The string-based XML Schema types are + mapped to either <code>std::string</code> or + <code>std::wstring</code> depending on the character type + selected (see <a href="#5.1"> Section 5.1, "Character Type and + Encoding"</a> for more information).</p> + + <pre class="type-map"> +namespace http://www.w3.org/2001/XMLSchema +{ + boolean bool bool; + + byte "signed char" "signed char"; + unsignedByte "unsigned char" "unsigned char"; + + short short short; + unsignedShort "unsigned short" "unsigned short"; + + int int int; + unsignedInt "unsigned int" "unsigned int"; + + long "long long" "long long"; + unsignedLong "unsigned long long" "unsigned long long"; + + integer "long long" "long long"; + + negativeInteger "long long" "long long"; + nonPositiveInteger "long long" "long long"; + + positiveInteger "unsigned long long" "unsigned long long"; + nonNegativeInteger "unsigned long long" "unsigned long long"; + + float float float; + double double double; + decimal double double; + + string std::string; + normalizedString std::string; + token std::string; + Name std::string; + NMTOKEN std::string; + NCName std::string; + ID std::string; + IDREF std::string; + language std::string; + anyURI std::string; + + NMTOKENS xml_schema::string_sequence; + IDREFS xml_schema::string_sequence; + + QName xml_schema::qname; + + base64Binary std::auto_ptr<xml_schema::buffer> + std::auto_ptr<xml_schema::buffer>; + hexBinary std::auto_ptr<xml_schema::buffer> + std::auto_ptr<xml_schema::buffer>; + + date xml_schema::date; + dateTime xml_schema::date_time; + duration xml_schema::duration; + gDay xml_schema::gday; + gMonth xml_schema::gmonth; + gMonthDay xml_schema::gmonth_day; + gYear xml_schema::gyear; + gYearMonth xml_schema::gyear_month; + time xml_schema::time; +} + </pre> + + <p>For more information about the mapping of the built-in XML Schema types + to C++ types refer to <a href="#6">Chapter 6, "Built-In XML Schema Type + Parsers"</a>. The last predefined rule maps anything that wasn't + mapped by previous rules to <code>void</code>:</p> + + <pre class="type-map"> +namespace .* +{ + .* void void; +} + </pre> + + + <p>When you provide your own type maps with the + <code>--type-map</code> option, they are evaluated first. This + allows you to selectively override any of the predefined rules. + Note also that if you change the mapping + of a built-in XML Schema type then it becomes your responsibility + to provide the corresponding parser skeleton and implementation + in the <code>xml_schema</code> namespace. You can include the + custom definitions into the generated header file using the + <code>--hxx-prologue-*</code> options.</p> + + <h2><a name="4.3">4.3 Parser Implementations</a></h2> + + <p>With the knowledge from the previous section, we can proceed + with creating a type map that maps types in the <code>people.xsd</code> + schema to our object model classes in + <code>people.hxx</code>. In fact, we already have the beginning + of our type map file in <code>people.map</code>. Let's extend + it with the rest of the types:</p> + + <pre class="type-map"> +include "people.hxx"; + +gender ::gender ::gender; +person ::person; +people ::people; + </pre> + + <p>There are a few things to note about this type map. We did not + provide the argument types for <code>person</code> and + <code>people</code> because the default constant reference is + exactly what we need. We also did not provide any mappings + for built-in XML Schema types <code>string</code> and + <code>short</code> because they are handled by the predefined + rules and we are happy with the result. Note also that + all C++ types are fully qualified. This is done to avoid + potential name conflicts in the generated code. Now we can + recompile our schema and move on to implementing the parsers:</p> + + <pre class="terminal"> +$ xsd cxx-parser --xml-parser expat --type-map people.map people.xsd + </pre> + + <p>Here is the implementation of our three parsers in full. One + way to save typing when implementing your own parsers is + to open the generated code and copy the signatures of parser + callbacks into your code. Or you could always auto generate the + sample implementations and fill them with your code.</p> + + + <pre class="c++"> +#include "people-pskel.hxx" + +class gender_pimpl: public gender_pskel, + public xml_schema::string_pimpl +{ +public: + virtual ::gender + post_gender () + { + return post_string () == "male" ? male : female; + } +}; + +class person_pimpl: public person_pskel +{ +public: + virtual void + first_name (const std::string& f) + { + first_ = f; + } + + virtual void + last_name (const std::string& l) + { + last_ = l; + } + + virtual void + gender (::gender g) + { + gender_ = g; + } + + virtual void + age (short a) + { + age_ = a; + } + + virtual ::person + post_person () + { + return ::person (first_, last_, gender_, age_); + } + +private: + std::string first_; + std::string last_; + ::gender gender_; + short age_; +}; + +class people_pimpl: public people_pskel +{ +public: + virtual void + person (const ::person& p) + { + people_.push_back (p); + } + + virtual ::people + post_people () + { + ::people r; + r.swap (people_); + return r; + } + +private: + ::people people_; +}; + </pre> + + <p>This code fragment should look familiar by now. Just note that + all the <code>post_*()</code> callbacks now have return types instead + of <code>void</code>. Here is the implementation of the test + driver for this example:</p> + + <pre class="c++"> +#include <iostream> + +using namespace std; + +int +main (int argc, char* argv[]) +{ + // Construct the parser. + // + xml_schema::short_pimpl short_p; + xml_schema::string_pimpl string_p; + + gender_pimpl gender_p; + person_pimpl person_p; + people_pimpl people_p; + + person_p.parsers (string_p, string_p, gender_p, short_p); + people_p.parsers (person_p); + + // Parse the document to obtain the object model. + // + xml_schema::document doc_p (people_p, "people"); + + people_p.pre (); + doc_p.parse (argv[1]); + people ppl = people_p.post_people (); + + // Print the object model. + // + for (people::iterator i (ppl.begin ()); i != ppl.end (); ++i) + { + cout << "first: " << i->first () << endl + << "last: " << i->last () << endl + << "gender: " << (i->gender () == male ? "male" : "female") << endl + << "age: " << i->age () << endl + << endl; + } +} + </pre> + + <p>The parser creation and assembly part is exactly the same as in + the previous chapter. The parsing part is a bit different: + <code>post_people()</code> now has a return value which is the + complete object model. We store it in the + <code>ppl</code> variable. The last bit of the code simply iterates + over the <code>people</code> vector and prints the information + for each person. We save the last two code fragments to + <code>driver.cxx</code> and proceed to compile and test + our new application:</p> + + + <pre class="terminal"> +$ c++ -I.../libxsd -c driver.cxx people-pskel.cxx +$ c++ -o driver driver.o people-pskel.o -lexpat +$ ./driver people.xml +first: John +last: Doe +gender: male +age: 32 + +first: Jane +last: Doe +gender: female +age: 28 + </pre> + + + <!-- Mapping Configuration --> + + + <h1><a name="5">5 Mapping Configuration</a></h1> + + <p>The C++/Parser mapping has a number of configuration parameters that + determine the overall properties and behavior of the generated code. + Configuration parameters are specified with the XSD command line + options and include the character type that is used by the generated + code, the underlying XML parser, whether the XML Schema validation + is performed in the generated code, and support for XML Schema + polymorphism. This chapter describes these configuration + parameters in more detail. For more ways to configure the generated + code refer to the + <a href="http://www.codesynthesis.com/projects/xsd/documentation/xsd.xhtml">XSD + Compiler Command Line Manual</a>. + </p> + + <h2><a name="5.1">5.1 Character Type and Encoding</a></h2> + + <p>The C++/Parser mapping has built-in support for two character types: + <code>char</code> and <code>wchar_t</code>. You can select the + character type with the <code>--char-type</code> command line + option. The default character type is <code>char</code>. The + string-based built-in XML Schema types are returned as either + <code>std::string</code> or <code>std::wstring</code> depending + on the character type selected.</p> + + <p>Another aspect of the mapping that depends on the character type + is character encoding. For the <code>char</code> character type + the default encoding is UTF-8. Other supported encodings are + ISO-8859-1, Xerces-C++ Local Code Page (LPC), as well as + custom encodings. You can select which encoding should be used + in the object model with the <code>--char-encoding</code> command + line option.</p> + + <p>For the <code>wchar_t</code> character type the encoding is + automatically selected between UTF-16 and UTF-32/UCS-4 depending + on the size of the <code>wchar_t</code> type. On some platforms + (for example, Windows with Visual C++ and AIX with IBM XL C++) + <code>wchar_t</code> is 2 bytes long. For these platforms the + encoding is UTF-16. On other platforms <code>wchar_t</code> is 4 bytes + long and UTF-32/UCS-4 is used.</p> + + <p>Note also that the character encoding that is used in the object model + is independent of the encodings used in input and output XML. In fact, + all three (object mode, input XML, and output XML) can have different + encodings.</p> + + <h2><a name="5.2">5.2 Underlying XML Parser</a></h2> + + <p>The C++/Parser mapping can be used with either Xerces-C++ or Expat + as the underlying XML parser. You can select the XML parser with + the <code>--xml-parser</code> command line option. Valid values + for this option are <code>xerces</code> and <code>expat</code>. + The default XML parser is Xerces-C++.</p> + + <p>The generated code is identical for both parsers except for the + <code>xml_schema::document</code> class in which some of the + <code>parse()</code> functions are parser-specific as described + in <a href="#7">Chapter 7, "Document Parser and Error Handling"</a>.</p> + + + <h2><a name="5.3">5.3 XML Schema Validation</a></h2> + + <p>The C++/Parser mapping provides support for validating a + commonly-used subset of W3C XML Schema in the generated code. + For the list of supported XML Schema constructs refer to + <a href="#A">Appendix A, "Supported XML Schema Constructs"</a>.</p> + + <p>By default validation in the generated code is disabled if + the underlying XML parser is validating (Xerces-C++) and + enabled otherwise (Expat). See <a href="#5.2">Section 5.2, + "Underlying XML Parser"</a> for more information about + the underlying XML parser. You can override the default + behavior with the <code>--generate-validation</code> + and <code>--suppress-validation</code> command line options.</p> + + + <h2><a name="5.4">5.4 Support for Polymorphism</a></h2> + + <p>By default the XSD compiler generates non-polymorphic code. If your + vocabulary uses XML Schema polymorphism in the form of <code>xsi:type</code> + and/or substitution groups, then you will need to compile your schemas + with the <code>--generate-polymorphic</code> option to produce + polymorphism-aware code as well as pass <code>true</code> as the last + argument to the <code>xml_schema::document</code>'s constructors.</p> + + <p>When using the polymorphism-aware generated code, you can specify + several parsers for a single element by passing a parser map + instead of an individual parser to the parser connection function + for the element. One of the parsers will then be looked up and used + depending on the <code>xsi:type</code> attribute value or an element + name from a substitution group. Consider the following schema as an + example:</p> + + <pre class="xml"> +<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> + + <xs:complexType name="person"> + <xs:sequence> + <xs:element name="name" type="xs:string"/> + </xs:sequence> + </xs:complexType> + + <!-- substitution group root --> + <xs:element name="person" type="person"/> + + <xs:complexType name="superman"> + <xs:complexContent> + <xs:extension base="person"> + <xs:attribute name="can-fly" type="xs:boolean"/> + </xs:extension> + </xs:complexContent> + </xs:complexType> + + <xs:element name="superman" + type="superman" + substitutionGroup="person"/> + + <xs:complexType name="batman"> + <xs:complexContent> + <xs:extension base="superman"> + <xs:attribute name="wing-span" type="xs:unsignedInt"/> + </xs:extension> + </xs:complexContent> + </xs:complexType> + + <xs:element name="batman" + type="batman" + substitutionGroup="superman"/> + + <xs:complexType name="supermen"> + <xs:sequence> + <xs:element ref="person" maxOccurs="unbounded"/> + </xs:sequence> + </xs:complexType> + + <xs:element name="supermen" type="supermen"/> + +</xs:schema> + </pre> + + <p>Conforming XML documents can use the <code>superman</code> + and <code>batman</code> types in place of the <code>person</code> + type either by specifying the type with the <code>xsi:type</code> + attributes or by using the elements from the substitution + group, for instance:</p> + + + <pre class="xml"> +<supermen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + + <person> + <name>John Doe</name> + </person> + + <superman can-fly="false"> + <name>James "007" Bond</name> + </superman> + + <superman can-fly="true" wing-span="10" xsi:type="batman"> + <name>Bruce Wayne</name> + </superman> + +</supermen> + </pre> + + <p>To print the data stored in such XML documents we can implement + the parsers as follows:</p> + + <pre class="c++"> +class person_pimpl: public virtual person_pskel +{ +public: + virtual void + pre () + { + cout << "starting to parse person" << endl; + } + + virtual void + name (const std::string& v) + { + cout << "name: " << v << endl; + } + + virtual void + post_person () + { + cout << "finished parsing person" << endl; + } +}; + +class superman_pimpl: public virtual superman_pskel, + public person_pimpl +{ +public: + virtual void + pre () + { + cout << "starting to parse superman" << endl; + } + + virtual void + can_fly (bool v) + { + cout << "can-fly: " << v << endl; + } + + virtual void + post_person () + { + post_superman (); + } + + virtual void + post_superman () + { + cout << "finished parsing superman" << endl + } +}; + +class batman_pimpl: public virtual batman_pskel, + public superman_pimpl +{ +public: + virtual void + pre () + { + cout << "starting to parse batman" << endl; + } + + virtual void + wing_span (unsigned int v) + { + cout << "wing-span: " << v << endl; + } + + virtual void + post_superman () + { + post_batman (); + } + + virtual void + post_batman () + { + cout << "finished parsing batman" << endl; + } +}; + </pre> + + <p>Note that because the derived type parsers (<code>superman_pskel</code> + and <code>batman_pskel</code>) are called via the <code>person_pskel</code> + interface, we have to override the <code>post_person()</code> + virtual function in <code>superman_pimpl</code> to call + <code>post_superman()</code> and the <code>post_superman()</code> + virtual function in <code>batman_pimpl</code> to call + <code>post_batman()</code>.</p> + + <p>The following code fragment shows how to connect the parsers together. + Notice that for the <code>person</code> element in the <code>supermen_p</code> + parser we specify a parser map instead of a specific parser and we pass + <code>true</code> as the last argument to the document parser constructor + to indicate that we are parsing potentially-polymorphic XML documents:</p> + + <pre class="c++"> +int +main (int argc, char* argv[]) +{ + // Construct the parser. + // + xml_schema::string_pimpl string_p; + xml_schema::boolean_pimpl boolean_p; + xml_schema::unsigned_int_pimpl unsigned_int_p; + + person_pimpl person_p; + superman_pimpl superman_p; + batman_pimpl batman_p; + + xml_schema::parser_map_impl person_map; + supermen_pimpl supermen_p; + + person_p.parsers (string_p); + superman_p.parsers (string_p, boolean_p); + batman_p.parsers (string_p, boolean_p, unsigned_int_p); + + // Here we are specifying a parser map which containes several + // parsers that can be used to parse the person element. + // + person_map.insert (person_p); + person_map.insert (superman_p); + person_map.insert (batman_p); + + supermen_p.person_parser (person_map); + + // Parse the XML document. The last argument to the document's + // constructor indicates that we are parsing polymorphic XML + // documents. + // + xml_schema::document doc_p (supermen_p, "supermen", true); + + supermen_p.pre (); + doc_p.parse (argv[1]); + supermen_p.post_supermen (); +} + </pre> + + <p>When polymorphism-aware code is generated, each element's + <code>*_parser()</code> function is overloaded to also accept + an object of the <code>xml_schema::parser_map</code> type. + For example, the <code>supermen_pskel</code> class from the + above example looks like this:</p> + + <pre class="c++"> +class supermen_pskel: public xml_schema::parser_complex_content +{ +public: + + ... + + // Parser construction API. + // + void + parsers (person_pskel&); + + // Individual element parsers. + // + void + person_parser (person_pskel&); + + void + person_parser (const xml_schema::parser_map&); + + ... +}; + </pre> + + <p>Note that you can specify both the individual (static) parser and + the parser map. The individual parser will be used when the static + element type and the dynamic type of the object being parsed are + the same. This is the case, for example, when there is no + <code>xsi:type</code> attribute and the element hasn't been + substituted. Because the individual parser for an element is + cached and no map lookup is necessary, it makes sense to specify + both the individual parser and the parser map when most of the + objects being parsed are of the static type and optimal + performance is important. The following code fragment shows + how to change the above example to set both the individual + parser and the parser map:</p> + + <pre class="c++"> +int +main (int argc, char* argv[]) +{ + ... + + person_map.insert (superman_p); + person_map.insert (batman_p); + + supermen_p.person_parser (person_p); + supermen_p.person_parser (person_map); + + ... +} + </pre> + + + <p>The <code>xml_schema::parser_map</code> interface and the + <code>xml_schema::parser_map_impl</code> default implementation + are presented below:</p> + + <pre class="c++"> +namespace xml_schema +{ + class parser_map + { + public: + virtual parser_base* + find (const ro_string* type) const = 0; + }; + + class parser_map_impl: public parser_map + { + public: + void + insert (parser_base&); + + virtual parser_base* + find (const ro_string* type) const; + + private: + parser_map_impl (const parser_map_impl&); + + parser_map_impl& + operator= (const parser_map_impl&); + + ... + }; +} + </pre> + + <p>The <code>type</code> argument in the <code>find()</code> virtual + function is the type name and namespace from the xsi:type attribute + (the namespace prefix is resolved to the actual XML namespace) + or the type of an element from the substitution group in the form + <code>"<name> <namespace>"</code> with the space and the + namespace part absent if the type does not have a namespace. + You can obtain a parser's dynamic type in the same format + using the <code>_dynamic_type()</code> function. The static + type can be obtained by calling the static <code>_static_type()</code> + function, for example <code>person_pskel::_static_type()</code>. + Both functions return a C string (<code>const char*</code> or + <code>const wchar_t*</code>, depending on the character type + used) which is valid for as long as the application is running. + The following example shows how we can implement our own parser + map using <code>std::map</code>:</p> + + + <pre class="c++"> +#include <map> +#include <string> + +class parser_map: public xml_schema::parser_map +{ +public: + void + insert (xml_schema::parser_base& p) + { + map_[p._dynamic_type ()] = &p; + } + + virtual xml_schema::parser_base* + find (const xml_schema::ro_string* type) const + { + map::const_iterator i = map_.find (type); + return i != map_.end () ? i->second : 0; + } + +private: + typedef std::map<std::string, xml_schema::parser_base*> map; + map map_; +}; + </pre> + + <p>Most of code presented in this section is taken from the + <code>polymorphism</code> example which can be found in the + <code>examples/cxx/parser/</code> directory of the XSD distribution. + Handling of <code>xsi:type</code> and substitution groups when used + on root elements requires a number of special actions as shown in + the <code>polyroot</code> example.</p> + + + <!-- Built-in XML Schema Type Parsers --> + + + <h1><a name="6">6 Built-In XML Schema Type Parsers</a></h1> + + <p>The XSD runtime provides parser implementations for all built-in + XML Schema types as summarized in the following table. Declarations + for these types are automatically included into each generated + header file. As a result you don't need to include any headers + to gain access to these parser implementations. Note that some + parsers return either <code>std::string</code> or + <code>std::wstring</code> depending on the character type selected.</p> + + <!-- border="1" is necessary for html2ps --> + <table id="builtin" border="1"> + <tr> + <th>XML Schema type</th> + <th>Parser implementation in the <code>xml_schema</code> namespace</th> + <th>Parser return type</th> + </tr> + + <tr> + <th colspan="3">anyType and anySimpleType types</th> + </tr> + <tr> + <td><code>anyType</code></td> + <td><code>any_type_pimpl</code></td> + <td><code>void</code></td> + </tr> + <tr> + <td><code>anySimpleType</code></td> + <td><code>any_simple_type_pimpl</code></td> + <td><code>void</code></td> + </tr> + + <tr> + <th colspan="3">fixed-length integral types</th> + </tr> + <!-- 8-bit --> + <tr> + <td><code>byte</code></td> + <td><code>byte_pimpl</code></td> + <td><code>signed char</code></td> + </tr> + <tr> + <td><code>unsignedByte</code></td> + <td><code>unsigned_byte_pimpl</code></td> + <td><code>unsigned char</code></td> + </tr> + + <!-- 16-bit --> + <tr> + <td><code>short</code></td> + <td><code>short_pimpl</code></td> + <td><code>short</code></td> + </tr> + <tr> + <td><code>unsignedShort</code></td> + <td><code>unsigned_short_pimpl</code></td> + <td><code>unsigned short</code></td> + </tr> + + <!-- 32-bit --> + <tr> + <td><code>int</code></td> + <td><code>int_pimpl</code></td> + <td><code>int</code></td> + </tr> + <tr> + <td><code>unsignedInt</code></td> + <td><code>unsigned_int_pimpl</code></td> + <td><code>unsigned int</code></td> + </tr> + + <!-- 64-bit --> + <tr> + <td><code>long</code></td> + <td><code>long_pimpl</code></td> + <td><code>long long</code></td> + </tr> + <tr> + <td><code>unsignedLong</code></td> + <td><code>unsigned_long_pimpl</code></td> + <td><code>unsigned long long</code></td> + </tr> + + <tr> + <th colspan="3">arbitrary-length integral types</th> + </tr> + <tr> + <td><code>integer</code></td> + <td><code>integer_pimpl</code></td> + <td><code>long long</code></td> + </tr> + <tr> + <td><code>nonPositiveInteger</code></td> + <td><code>non_positive_integer_pimpl</code></td> + <td><code>long long</code></td> + </tr> + <tr> + <td><code>nonNegativeInteger</code></td> + <td><code>non_negative_integer_pimpl</code></td> + <td><code>unsigned long long</code></td> + </tr> + <tr> + <td><code>positiveInteger</code></td> + <td><code>positive_integer_pimpl</code></td> + <td><code>unsigned long long</code></td> + </tr> + <tr> + <td><code>negativeInteger</code></td> + <td><code>negative_integer_pimpl</code></td> + <td><code>long long</code></td> + </tr> + + <tr> + <th colspan="3">boolean types</th> + </tr> + <tr> + <td><code>boolean</code></td> + <td><code>boolean_pimpl</code></td> + <td><code>bool</code></td> + </tr> + + <tr> + <th colspan="3">fixed-precision floating-point types</th> + </tr> + <tr> + <td><code>float</code></td> + <td><code>float_pimpl</code></td> + <td><code>float</code></td> + </tr> + <tr> + <td><code>double</code></td> + <td><code>double_pimpl</code></td> + <td><code>double</code></td> + </tr> + + <tr> + <th colspan="3">arbitrary-precision floating-point types</th> + </tr> + <tr> + <td><code>decimal</code></td> + <td><code>decimal_pimpl</code></td> + <td><code>double</code></td> + </tr> + + <tr> + <th colspan="3">string-based types</th> + </tr> + <tr> + <td><code>string</code></td> + <td><code>string_pimpl</code></td> + <td><code>std::string</code> or <code>std::wstring</code></td> + </tr> + <tr> + <td><code>normalizedString</code></td> + <td><code>normalized_string_pimpl</code></td> + <td><code>std::string</code> or <code>std::wstring</code></td> + </tr> + <tr> + <td><code>token</code></td> + <td><code>token_pimpl</code></td> + <td><code>std::string</code> or <code>std::wstring</code></td> + </tr> + <tr> + <td><code>Name</code></td> + <td><code>name_pimpl</code></td> + <td><code>std::string</code> or <code>std::wstring</code></td> + </tr> + <tr> + <td><code>NMTOKEN</code></td> + <td><code>nmtoken_pimpl</code></td> + <td><code>std::string</code> or <code>std::wstring</code></td> + </tr> + <tr> + <td><code>NCName</code></td> + <td><code>ncname_pimpl</code></td> + <td><code>std::string</code> or <code>std::wstring</code></td> + </tr> + + <tr> + <td><code>language</code></td> + <td><code>language_pimpl</code></td> + <td><code>std::string</code> or <code>std::wstring</code></td> + </tr> + + <tr> + <th colspan="3">qualified name</th> + </tr> + <tr> + <td><code>QName</code></td> + <td><code>qname_pimpl</code></td> + <td><code>xml_schema::qname</code><br/><a href="#6.1">Section 6.1, + "<code>QName</code> Parser"</a></td> + </tr> + + <tr> + <th colspan="3">ID/IDREF types</th> + </tr> + <tr> + <td><code>ID</code></td> + <td><code>id_pimpl</code></td> + <td><code>std::string</code> or <code>std::wstring</code></td> + </tr> + <tr> + <td><code>IDREF</code></td> + <td><code>idref_pimpl</code></td> + <td><code>std::string</code> or <code>std::wstring</code></td> + </tr> + + <tr> + <th colspan="3">list types</th> + </tr> + <tr> + <td><code>NMTOKENS</code></td> + <td><code>nmtokens_pimpl</code></td> + <td><code>xml_schema::string_sequence</code><br/><a href="#6.2">Section + 6.2, "<code>NMTOKENS</code> and <code>IDREFS</code> Parsers"</a></td> + </tr> + <tr> + <td><code>IDREFS</code></td> + <td><code>idrefs_pimpl</code></td> + <td><code>xml_schema::string_sequence</code><br/><a href="#6.2">Section + 6.2, "<code>NMTOKENS</code> and <code>IDREFS</code> Parsers"</a></td> + </tr> + + <tr> + <th colspan="3">URI types</th> + </tr> + <tr> + <td><code>anyURI</code></td> + <td><code>uri_pimpl</code></td> + <td><code>std::string</code> or <code>std::wstring</code></td> + </tr> + + <tr> + <th colspan="3">binary types</th> + </tr> + <tr> + <td><code>base64Binary</code></td> + <td><code>base64_binary_pimpl</code></td> + <td><code>std::auto_ptr<xml_schema::buffer></code><br/> + <a href="#6.3">Section 6.3, "<code>base64Binary</code> and + <code>hexBinary</code> Parsers"</a></td> + </tr> + <tr> + <td><code>hexBinary</code></td> + <td><code>hex_binary_pimpl</code></td> + <td><code>std::auto_ptr<xml_schema::buffer></code><br/> + <a href="#6.3">Section 6.3, "<code>base64Binary</code> and + <code>hexBinary</code> Parsers"</a></td> + </tr> + + <tr> + <th colspan="3">date/time types</th> + </tr> + <tr> + <td><code>date</code></td> + <td><code>date_pimpl</code></td> + <td><code>xml_schema::date</code><br/><a href="#6.5">Section 6.5, + "<code>date</code> Parser"</a></td> + </tr> + <tr> + <td><code>dateTime</code></td> + <td><code>date_time_pimpl</code></td> + <td><code>xml_schema::date_time</code><br/><a href="#6.6">Section 6.6, + "<code>dateTime</code> Parser"</a></td> + </tr> + <tr> + <td><code>duration</code></td> + <td><code>duration_pimpl</code></td> + <td><code>xml_schema::duration</code><br/><a href="#6.7">Section 6.7, + "<code>duration</code> Parser"</a></td> + </tr> + <tr> + <td><code>gDay</code></td> + <td><code>gday_pimpl</code></td> + <td><code>xml_schema::gday</code><br/><a href="#6.8">Section 6.8, + "<code>gDay</code> Parser"</a></td> + </tr> + <tr> + <td><code>gMonth</code></td> + <td><code>gmonth_pimpl</code></td> + <td><code>xml_schema::gmonth</code><br/><a href="#6.9">Section 6.9, + "<code>gMonth</code> Parser"</a></td> + </tr> + <tr> + <td><code>gMonthDay</code></td> + <td><code>gmonth_day_pimpl</code></td> + <td><code>xml_schema::gmonth_day</code><br/><a href="#6.10">Section 6.10, + "<code>gMonthDay</code> Parser"</a></td> + </tr> + <tr> + <td><code>gYear</code></td> + <td><code>gyear_pimpl</code></td> + <td><code>xml_schema::gyear</code><br/><a href="#6.11">Section 6.11, + "<code>gYear</code> Parser"</a></td> + </tr> + <tr> + <td><code>gYearMonth</code></td> + <td><code>gyear_month_pimpl</code></td> + <td><code>xml_schema::gyear_month</code><br/><a href="#6.12">Section + 6.12, "<code>gYearMonth</code> Parser"</a></td> + </tr> + <tr> + <td><code>time</code></td> + <td><code>time_pimpl</code></td> + <td><code>xml_schema::time</code><br/><a href="#6.13">Section 6.13, + "<code>time</code> Parser"</a></td> + </tr> + + </table> + + <h2><a name="6.1">6.1 <code>QName</code> Parser</a></h2> + + <p>The return type of the <code>qname_pimpl</code> parser implementation + is <code>xml_schema::qname</code> which represents an XML qualified + name. Its interface is presented below. + Note that the <code>std::string</code> type in the interface becomes + <code>std::wstring</code> if the selected character type is + <code>wchar_t</code>.</p> + + <pre class="c++"> +namespace xml_schema +{ + class qname + { + public: + explicit + qname (const std::string& name); + qname (const std::string& prefix, const std::string& name); + + const std::string& + prefix () const; + + void + prefix (const std::string&); + + const std::string& + name () const; + + void + name (const std::string&); + }; + + bool + operator== (const qname&, const qname&); + + bool + operator!= (const qname&, const qname&); +} + </pre> + + + <h2><a name="6.2">6.2 <code>NMTOKENS</code> and <code>IDREFS</code> Parsers</a></h2> + + <p>The return type of the <code>nmtokens_pimpl</code> and + <code>idrefs_pimpl</code> parser implementations is + <code>xml_schema::string_sequence</code> which represents a + sequence of strings. Its interface is presented below. + Note that the <code>std::string</code> type in the interface becomes + <code>std::wstring</code> if the selected character type is + <code>wchar_t</code>.</p> + + <pre class="c++"> +namespace xml_schema +{ + class string_sequence: public std::vector<std::string> + { + public: + string_sequence (); + + explicit + string_sequence (std::vector<std::string>::size_type n, + const std::string& x = std::string ()); + + template <typename I> + string_sequence (const I& begin, const I& end); + }; + + bool + operator== (const string_sequence&, const string_sequence&); + + bool + operator!= (const string_sequence&, const string_sequence&); +} + </pre> + + + <h2><a name="6.3">6.3 <code>base64Binary</code> and <code>hexBinary</code> Parsers</a></h2> + + <p>The return type of the <code>base64_binary_pimpl</code> and + <code>hex_binary_pimpl</code> parser implementations is + <code>std::auto_ptr<xml_schema::buffer></code>. The + <code>xml_schema::buffer</code> type represents a binary buffer + and its interface is presented below.</p> + + <pre class="c++"> +namespace xml_schema +{ + class buffer + { + public: + typedef std::size_t size_t; + + class bounds {}; // Out of bounds exception. + + public: + explicit + buffer (size_t size = 0); + buffer (size_t size, size_t capacity); + buffer (const void* data, size_t size); + buffer (const void* data, size_t size, size_t capacity); + buffer (void* data, + size_t size, + size_t capacity, + bool assume_ownership); + + public: + buffer (const buffer&); + + buffer& + operator= (const buffer&); + + void + swap (buffer&); + + public: + size_t + capacity () const; + + bool + capacity (size_t); + + public: + size_t + size () const; + + bool + size (size_t); + + public: + const char* + data () const; + + char* + data (); + + const char* + begin () const; + + char* + begin (); + + const char* + end () const; + + char* + end (); + }; + + bool + operator== (const buffer&, const buffer&); + + bool + operator!= (const buffer&, const buffer&); +} + </pre> + + <p>If the <code>assume_ownership</code> argument to the constructor + is <code>true</code>, the instance assumes the ownership of the + memory block pointed to by the <code>data</code> argument and will + eventually release it by calling <code>operator delete()</code>. The + <code>capacity()</code> and <code>size()</code> modifier functions + return <code>true</code> if the underlying buffer has moved. + </p> + + <p>The <code>bounds</code> exception is thrown if the constructor + arguments violate the <code>(size <= capacity)</code> + constraint.</p> + + + <h2><a name="6.4">6.4 Time Zone Representation</a></h2> + + <p>The <code>date</code>, <code>dateTime</code>, <code>gDay</code>, + <code>gMonth</code>, <code>gMonthDay</code>, <code>gYear</code>, + <code>gYearMonth</code>, and <code>time</code> XML Schema built-in + types all include an optional time zone component. The following + <code>xml_schema::time_zone</code> base class is used to represent + this information:</p> + + <pre class="c++"> +namespace xml_schema +{ + class time_zone + { + public: + time_zone (); + time_zone (short hours, short minutes); + + bool + zone_present () const; + + void + zone_reset (); + + short + zone_hours () const; + + void + zone_hours (short); + + short + zone_minutes () const; + + void + zone_minutes (short); + }; + + bool + operator== (const time_zone&, const time_zone&); + + bool + operator!= (const time_zone&, const time_zone&); +} + </pre> + + <p>The <code>zone_present()</code> accessor function returns <code>true</code> + if the time zone is specified. The <code>zone_reset()</code> modifier + function resets the time zone object to the <em>not specified</em> + state. If the time zone offset is negative then both hours and + minutes components are represented as negative integers.</p> + + + <h2><a name="6.5">6.5 <code>date</code> Parser</a></h2> + + <p>The return type of the <code>date_pimpl</code> parser implementation + is <code>xml_schema::date</code> which represents a year, a day, and a month + with an optional time zone. Its interface is presented below. + For more information on the base <code>xml_schema::time_zone</code> + class refer to <a href="#6.4">Section 6.4, "Time Zone + Representation"</a>.</p> + + <pre class="c++"> +namespace xml_schema +{ + class date + { + public: + date (int year, unsigned short month, unsigned short day); + date (int year, unsigned short month, unsigned short day, + short zone_hours, short zone_minutes); + + int + year () const; + + void + year (int); + + unsigned short + month () const; + + void + month (unsigned short); + + unsigned short + day () const; + + void + day (unsigned short); + }; + + bool + operator== (const date&, const date&); + + bool + operator!= (const date&, const date&); +} + </pre> + + <h2><a name="6.6">6.6 <code>dateTime</code> Parser</a></h2> + + <p>The return type of the <code>date_time_pimpl</code> parser implementation + is <code>xml_schema::date_time</code> which represents a year, a month, a day, + hours, minutes, and seconds with an optional time zone. Its interface + is presented below. + For more information on the base <code>xml_schema::time_zone</code> + class refer to <a href="#6.4">Section 6.4, "Time Zone + Representation"</a>.</p> + + <pre class="c++"> +namespace xml_schema +{ + class date_time + { + public: + date_time (int year, unsigned short month, unsigned short day, + unsigned short hours, unsigned short minutes, + double seconds); + + date_time (int year, unsigned short month, unsigned short day, + unsigned short hours, unsigned short minutes, + double seconds, short zone_hours, short zone_minutes); + + int + year () const; + + void + year (int); + + unsigned short + month () const; + + void + month (unsigned short); + + unsigned short + day () const; + + void + day (unsigned short); + + unsigned short + hours () const; + + void + hours (unsigned short); + + unsigned short + minutes () const; + + void + minutes (unsigned short); + + double + seconds () const; + + void + seconds (double); + }; + + bool + operator== (const date_time&, const date_time&); + + bool + operator!= (const date_time&, const date_time&); +} + </pre> + + <h2><a name="6.7">6.7 <code>duration</code> Parser</a></h2> + + <p>The return type of the <code>duration_pimpl</code> parser implementation + is <code>xml_schema::duration</code> which represents a potentially + negative duration in the form of years, months, days, hours, minutes, + and seconds. Its interface is presented below.</p> + + <pre class="c++"> +namespace xml_schema +{ + class duration + { + public: + duration (bool negative, + unsigned int years, unsigned int months, unsigned int days, + unsigned int hours, unsigned int minutes, double seconds); + + bool + negative () const; + + void + negative (bool); + + unsigned int + years () const; + + void + years (unsigned int); + + unsigned int + months () const; + + void + months (unsigned int); + + unsigned int + days () const; + + void + days (unsigned int); + + unsigned int + hours () const; + + void + hours (unsigned int); + + unsigned int + minutes () const; + + void + minutes (unsigned int); + + double + seconds () const; + + void + seconds (double); + }; + + bool + operator== (const duration&, const duration&); + + bool + operator!= (const duration&, const duration&); +} + </pre> + + + <h2><a name="6.8">6.8 <code>gDay</code> Parser</a></h2> + + <p>The return type of the <code>gday_pimpl</code> parser implementation + is <code>xml_schema::gday</code> which represents a day of the month with + an optional time zone. Its interface is presented below. + For more information on the base <code>xml_schema::time_zone</code> + class refer to <a href="#6.4">Section 6.4, "Time Zone + Representation"</a>.</p> + + <pre class="c++"> +namespace xml_schema +{ + class gday + { + public: + explicit + gday (unsigned short day); + gday (unsigned short day, short zone_hours, short zone_minutes); + + unsigned short + day () const; + + void + day (unsigned short); + }; + + bool + operator== (const gday&, const gday&); + + bool + operator!= (const gday&, const gday&); +} + </pre> + + <h2><a name="6.9">6.9 <code>gMonth</code> Parser</a></h2> + + <p>The return type of the <code>gmonth_pimpl</code> parser implementation + is <code>xml_schema::gmonth</code> which represents a month of the year + with an optional time zone. Its interface is presented below. + For more information on the base <code>xml_schema::time_zone</code> + class refer to <a href="#6.4">Section 6.4, "Time Zone + Representation"</a>.</p> + + <pre class="c++"> +namespace xml_schema +{ + class gmonth + { + public: + explicit + gmonth (unsigned short month); + gmonth (unsigned short month, short zone_hours, short zone_minutes); + + unsigned short + month () const; + + void + month (unsigned short); + }; + + bool + operator== (const gmonth&, const gmonth&); + + bool + operator!= (const gmonth&, const gmonth&); +} + </pre> + + <h2><a name="6.10">6.10 <code>gMonthDay</code> Parser</a></h2> + + <p>The return type of the <code>gmonth_day_pimpl</code> parser implementation + is <code>xml_schema::gmonth_day</code> which represents a day and a month + of the year with an optional time zone. Its interface is presented below. + For more information on the base <code>xml_schema::time_zone</code> + class refer to <a href="#6.4">Section 6.4, "Time Zone + Representation"</a>.</p> + + <pre class="c++"> +namespace xml_schema +{ + class gmonth_day + { + public: + gmonth_day (unsigned short month, unsigned short day); + gmonth_day (unsigned short month, unsigned short day, + short zone_hours, short zone_minutes); + + unsigned short + month () const; + + void + month (unsigned short); + + unsigned short + day () const; + + void + day (unsigned short); + }; + + bool + operator== (const gmonth_day&, const gmonth_day&); + + bool + operator!= (const gmonth_day&, const gmonth_day&); +} + </pre> + + <h2><a name="6.11">6.11 <code>gYear</code> Parser</a></h2> + + <p>The return type of the <code>gyear_pimpl</code> parser implementation + is <code>xml_schema::gyear</code> which represents a year with + an optional time zone. Its interface is presented below. + For more information on the base <code>xml_schema::time_zone</code> + class refer to <a href="#6.4">Section 6.4, "Time Zone + Representation"</a>.</p> + + <pre class="c++"> +namespace xml_schema +{ + class gyear + { + public: + explicit + gyear (int year); + gyear (int year, short zone_hours, short zone_minutes); + + int + year () const; + + void + year (int); + }; + + bool + operator== (const gyear&, const gyear&); + + bool + operator!= (const gyear&, const gyear&); +} + </pre> + + <h2><a name="6.12">6.12 <code>gYearMonth</code> Parser</a></h2> + + <p>The return type of the <code>gyear_month_pimpl</code> parser implementation + is <code>xml_schema::gyear_month</code> which represents a year and a month + with an optional time zone. Its interface is presented below. + For more information on the base <code>xml_schema::time_zone</code> + class refer to <a href="#6.4">Section 6.4, "Time Zone + Representation"</a>.</p> + + <pre class="c++"> +namespace xml_schema +{ + class gyear_month + { + public: + gyear_month (int year, unsigned short month); + gyear_month (int year, unsigned short month, + short zone_hours, short zone_minutes); + + int + year () const; + + void + year (int); + + unsigned short + month () const; + + void + month (unsigned short); + }; + + bool + operator== (const gyear_month&, const gyear_month&); + + bool + operator!= (const gyear_month&, const gyear_month&); +} + </pre> + + + <h2><a name="6.13">6.13 <code>time</code> Parser</a></h2> + + <p>The return type of the <code>time_pimpl</code> parser implementation + is <code>xml_schema::time</code> which represents hours, minutes, + and seconds with an optional time zone. Its interface is presented below. + For more information on the base <code>xml_schema::time_zone</code> + class refer to <a href="#6.4">Section 6.4, "Time Zone + Representation"</a>.</p> + + <pre class="c++"> +namespace xml_schema +{ + class time + { + public: + time (unsigned short hours, unsigned short minutes, double seconds); + time (unsigned short hours, unsigned short minutes, double seconds, + short zone_hours, short zone_minutes); + + unsigned short + hours () const; + + void + hours (unsigned short); + + unsigned short + minutes () const; + + void + minutes (unsigned short); + + double + seconds () const; + + void + seconds (double); + }; + + bool + operator== (const time&, const time&); + + bool + operator!= (const time&, const time&); +} + </pre> + + + <!-- Error Handling --> + + + <h1><a name="7">7 Document Parser and Error Handling</a></h1> + + <p>In this chapter we will discuss the <code>xml_schema::document</code> + type as well as the error handling mechanisms provided by the mapping + in more detail. As mentioned in <a href="#3.4">Section 3.4, + "Connecting the Parsers Together"</a>, the interface of + <code>xml_schema::document</code> depends on the underlying XML + parser selected (<a href="#5.2">Section 5.2, "Underlying XML + Parser"</a>). The following sections describe the + <code>document</code> type interface for Xerces-C++ and + Expat as underlying parsers.</p> + + <h2><a name="7.1">7.1 Xerces-C++ Document Parser</a></h2> + + <p>When Xerces-C++ is used as the underlying XML parser, the + <code>document</code> type has the following interface. Note that + if the character type is <code>wchar_t</code>, then the string type + in the interface becomes <code>std::wstring</code> + (see <a href="#5.1">Section 5.1, "Character Type and Encoding"</a>).</p> + + <pre class="c++"> +namespace xml_schema +{ + class parser_base; + class error_handler; + + class flags + { + public: + // Do not validate XML documents with the Xerces-C++ validator. + // + static const unsigned long dont_validate; + + // Do not initialize the Xerces-C++ runtime. + // + static const unsigned long dont_initialize; + + // Disable handling of subsequent imports for the same namespace + // in Xerces-C++ 3.1.0 and later. + // + static const unsigned long no_multiple_imports; + }; + + class properties + { + public: + // Add a location for a schema with a target namespace. + // + void + schema_location (const std::string& namespace_, + const std::string& location); + + // Add a location for a schema without a target namespace. + // + void + no_namespace_schema_location (const std::string& location); + }; + + class document + { + public: + document (parser_base& root, + const std::string& root_element_name, + bool polymorphic = false); + + document (parser_base& root, + const std::string& root_element_namespace, + const std::string& root_element_name, + bool polymorphic = false); + + public: + // Parse URI or a local file. + // + void + parse (const std::string& uri, + flags = 0, + const properties& = properties ()); + + // Parse URI or a local file with a user-provided error_handler + // object. + // + void + parse (const std::string& uri, + error_handler&, + flags = 0, + const properties& = properties ()); + + // Parse URI or a local file with a user-provided ErrorHandler + // object. Note that you must initialize the Xerces-C++ runtime + // before calling this function. + // + void + parse (const std::string& uri, + xercesc::ErrorHandler&, + flags = 0, + const properties& = properties ()); + + // Parse URI or a local file using a user-provided SAX2XMLReader + // object. Note that you must initialize the Xerces-C++ runtime + // before calling this function. + // + void + parse (const std::string& uri, + xercesc::SAX2XMLReader&, + flags = 0, + const properties& = properties ()); + + public: + // Parse std::istream. + // + void + parse (std::istream&, + flags = 0, + const properties& = properties ()); + + // Parse std::istream with a user-provided error_handler object. + // + void + parse (std::istream&, + error_handler&, + flags = 0, + const properties& = properties ()); + + // Parse std::istream with a user-provided ErrorHandler object. + // Note that you must initialize the Xerces-C++ runtime before + // calling this function. + // + void + parse (std::istream&, + xercesc::ErrorHandler&, + flags = 0, + const properties& = properties ()); + + // Parse std::istream using a user-provided SAX2XMLReader object. + // Note that you must initialize the Xerces-C++ runtime before + // calling this function. + // + void + parse (std::istream&, + xercesc::SAX2XMLReader&, + flags = 0, + const properties& = properties ()); + + public: + // Parse std::istream with a system id. + // + void + parse (std::istream&, + const std::string& system_id, + flags = 0, + const properties& = properties ()); + + // Parse std::istream with a system id and a user-provided + // error_handler object. + // + void + parse (std::istream&, + const std::string& system_id, + error_handler&, + flags = 0, + const properties& = properties ()); + + // Parse std::istream with a system id and a user-provided + // ErrorHandler object. Note that you must initialize the + // Xerces-C++ runtime before calling this function. + // + void + parse (std::istream&, + const std::string& system_id, + xercesc::ErrorHandler&, + flags = 0, + const properties& = properties ()); + + // Parse std::istream with a system id using a user-provided + // SAX2XMLReader object. Note that you must initialize the + // Xerces-C++ runtime before calling this function. + // + void + parse (std::istream&, + const std::string& system_id, + xercesc::SAX2XMLReader&, + flags = 0, + const properties& = properties ()); + + public: + // Parse std::istream with system and public ids. + // + void + parse (std::istream&, + const std::string& system_id, + const std::string& public_id, + flags = 0, + const properties& = properties ()); + + // Parse std::istream with system and public ids and a user-provided + // error_handler object. + // + void + parse (std::istream&, + const std::string& system_id, + const std::string& public_id, + error_handler&, + flags = 0, + const properties& = properties ()); + + // Parse std::istream with system and public ids and a user-provided + // ErrorHandler object. Note that you must initialize the Xerces-C++ + // runtime before calling this function. + // + void + parse (std::istream&, + const std::string& system_id, + const std::string& public_id, + xercesc::ErrorHandler&, + flags = 0, + const properties& = properties ()); + + // Parse std::istream with system and public ids using a user- + // provided SAX2XMLReader object. Note that you must initialize + // the Xerces-C++ runtime before calling this function. + // + void + parse (std::istream&, + const std::string& system_id, + const std::string& public_id, + xercesc::SAX2XMLReader&, + flags = 0, + const properties& = properties ()); + + public: + // Parse InputSource. Note that you must initialize the Xerces-C++ + // runtime before calling this function. + // + void + parse (const xercesc::InputSource&, + flags = 0, + const properties& = properties ()); + + // Parse InputSource with a user-provided error_handler object. + // Note that you must initialize the Xerces-C++ runtime before + // calling this function. + // + void + parse (const xercesc::InputSource&, + error_handler&, + flags = 0, + const properties& = properties ()); + + // Parse InputSource with a user-provided ErrorHandler object. + // Note that you must initialize the Xerces-C++ runtime before + // calling this function. + // + void + parse (const xercesc::InputSource&, + xercesc::ErrorHandler&, + flags = 0, + const properties& = properties ()); + + // Parse InputSource using a user-provided SAX2XMLReader object. + // Note that you must initialize the Xerces-C++ runtime before + // calling this function. + // + void + parse (const xercesc::InputSource&, + xercesc::SAX2XMLReader&, + flags = 0, + const properties& = properties ()); + }; +} + </pre> + + <p>The <code>document</code> class is a root parser for + the vocabulary. The first argument to its constructors is the + parser for the type of the root element. The <code>parser_base</code> + class is the base type for all parser skeletons. The second and + third arguments to the <code>document</code>'s constructors are + the root element's name and namespace. The last argument, + <code>polymorphic</code>, specifies whether the XML documents + being parsed use polymorphism. For more information on support + for XML Schema polymorphism in the C++/Parser mapping refer + to <a href="#5.4">Section 5.4, "Support for Polymorphism"</a>.</p> + + <p>The rest of the <code>document</code> interface consists of overloaded + <code>parse()</code> functions. The last two arguments in each of these + functions are <code>flags</code> and <code>properties</code>. The + <code>flags</code> argument allows you to modify the default behavior + of the parsing functions. The <code>properties</code> argument allows + you to override the schema location attributes specified in XML + documents. Note that the schema location paths are relative to an + XML document unless they are complete URIs. For example if you want + to use a local schema file then you will need to use a URI in the + form <code>file:///absolute/path/to/your/schema</code>.</p> + + <p>A number of overloaded <code>parse()</code> functions have the + <code>system_id</code> and <code>public_id</code> arguments. The + system id is a <em>system</em> identifier of the resources being + parsed (for example, URI or a full file path). The public id is a + <em>public</em> identifier of the resource (for example, an + application-specific name or a relative file path). The system id + is used to resolve relative paths (for example, schema paths). In + diagnostics messages the public id is used if it is available. + Otherwise the system id is used.</p> + + <p>The error handling mechanisms employed by the <code>document</code> + parser are described in <a href="#7.3">Section 7.3, "Error + Handling"</a>.</p> + + <h2><a name="7.2">7.2 Expat Document Parser</a></h2> + + <p>When Expat is used as the underlying XML parser, the + <code>document</code> type has the following interface. Note that + if the character type is <code>wchar_t</code>, then the string type + in the interface becomes <code>std::wstring</code> + (see <a href="#5.1">Section 5.1, "Character Type and Encoding"</a>).</p> + + <pre class="c++"> +namespace xml_schema +{ + class parser_base; + class error_handler; + + class document + { + public: + document (parser_base&, + const std::string& root_element_name, + bool polymorphic = false); + + document (parser_base&, + const std::string& root_element_namespace, + const std::string& root_element_name, + bool polymorphic = false); + + public: + // Parse a local file. The file is accessed with std::ifstream + // in binary mode. The std::ios_base::failure exception is used + // to report io errors (badbit and failbit). + void + parse (const std::string& file); + + // Parse a local file with a user-provided error_handler + // object. The file is accessed with std::ifstream in binary + // mode. The std::ios_base::failure exception is used to report + // io errors (badbit and failbit). + // + void + parse (const std::string& file, error_handler&); + + public: + // Parse std::istream. + // + void + parse (std::istream&); + + // Parse std::istream with a user-provided error_handler object. + // + void + parse (std::istream&, error_handler&); + + // Parse std::istream with a system id. + // + void + parse (std::istream&, const std::string& system_id); + + // Parse std::istream with a system id and a user-provided + // error_handler object. + // + void + parse (std::istream&, + const std::string& system_id, + error_handler&); + + // Parse std::istream with system and public ids. + // + void + parse (std::istream&, + const std::string& system_id, + const std::string& public_id); + + // Parse std::istream with system and public ids and a user-provided + // error_handler object. + // + void + parse (std::istream&, + const std::string& system_id, + const std::string& public_id, + error_handler&); + + public: + // Parse a chunk of input. You can call these functions multiple + // times with the last call having the last argument true. + // + void + parse (const void* data, std::size_t size, bool last); + + void + parse (const void* data, std::size_t size, bool last, + error_handler&); + + void + parse (const void* data, std::size_t size, bool last, + const std::string& system_id); + + void + parse (const void* data, std::size_t size, bool last, + const std::string& system_id, + error_handler&); + + void + parse (const void* data, std::size_t size, bool last, + const std::string& system_id, + const std::string& public_id); + + void + parse (const void* data, std::size_t size, bool last, + const std::string& system_id, + const std::string& public_id, + error_handler&); + + public: + // Low-level Expat-specific parsing API. + // + void + parse_begin (XML_Parser); + + void + parse_begin (XML_Parser, const std::string& public_id); + + void + parse_begin (XML_Parser, error_handler&); + + void + parse_begin (XML_Parser, + const std::string& public_id, + error_handler&); + void + parse_end (); + }; +} + </pre> + + <p>The <code>document</code> class is a root parser for + the vocabulary. The first argument to its constructors is the + parser for the type of the root element. The <code>parser_base</code> + class is the base type for all parser skeletons. The second and + third arguments to the <code>document</code>'s constructors are + the root element's name and namespace. The last argument, + <code>polymorphic</code>, specifies whether the XML documents + being parsed use polymorphism. For more information on support + for XML Schema polymorphism in the C++/Parser mapping refer + to <a href="#5.4">Section 5.4, "Support for Polymorphism"</a>.</p> + + <p>A number of overloaded <code>parse()</code> functions have the + <code>system_id</code> and <code>public_id</code> arguments. The + system id is a <em>system</em> identifier of the resources being + parsed (for example, URI or a full file path). The public id is a + <em>public</em> identifier of the resource (for example, an + application-specific name or a relative file path). The system id + is used to resolve relative paths. In diagnostics messages the + public id is used if it is available. Otherwise the system id + is used.</p> + + <p>The <code>parse_begin()</code> and <code>parse_end()</code> functions + present a low-level, Expat-specific parsing API for maximum control. + A typical use-case would look like this (pseudo-code):</p> + + <pre class="c++"> +xxx_pimpl root_p; +document doc_p (root_p, "root"); + +root_p.pre (); +doc_p.parse_begin (xml_parser, "file.xml"); + +while (more_data_to_parse) +{ + // Call XML_Parse or XML_ParseBuffer. + + if (status == XML_STATUS_ERROR) + break; +} + +// Call parse_end even in case of an error to translate +// XML and Schema errors to exceptions or error_handler +// calls. +// +doc.parse_end (); +result_type result (root_p.post_xxx ()); + </pre> + + <p>Note that if your vocabulary uses XML namespaces, the + <code>XML_ParserCreateNS()</code> functions should be used to create + the XML parser. Space (<code>XML_Char (' ')</code>) should be used + as a separator (the second argument to <code>XML_ParserCreateNS()</code>). + </p> + + <p>The error handling mechanisms employed by the <code>document</code> + parser are described in <a href="#7.3">Section 7.3, "Error + Handling"</a>.</p> + + + <h2><a name="7.3">7.3 Error Handling</a></h2> + + <p>There are three categories of errors that can result from running + a parser on an XML document: System, XML, and Application. + The System category contains memory allocation and file/stream + operation errors. The XML category covers XML parsing and + well-formedness checking as well as XML Schema validation errors. + Finally, the Application category is for application logic errors + that you may want to propagate from parser implementations to the + caller of the parser. + </p> + + <p>The System errors are mapped to the standard exceptions. The + out of memory condition is indicated by throwing an instance + of <code>std::bad_alloc</code>. The stream operation errors + are reported either by throwing an instance of + <code>std::ios_base::failure</code> if exceptions are enabled + or by setting the stream state.</p> + + <p>Note that if you are parsing <code>std::istream</code> on + which exceptions are not enabled, then you will need to + check the stream state before calling the <code>post()</code> + callback, as shown in the following example:</p> + + <pre class="c++"> +int +main (int argc, char* argv[]) +{ + ... + + std::ifstream ifs (argv[1]); + + if (ifs.fail ()) + { + cerr << argv[1] << ": unable to open" << endl; + return 1; + } + + root_p.pre (); + doc_p.parse (ifs); + + if (ifs.fail ()) + { + cerr << argv[1] << ": io failure" << endl; + return 1; + } + + result_type result (root_p.post_xxx ()); +} + </pre> + + <p>The above example can be rewritten to use exceptions + as shown below:</p> + + <pre class="c++"> +int +main (int argc, char* argv[]) +{ + try + { + ... + + std::ifstream ifs; + ifs.exceptions (std::ifstream::badbit | std::ifstream::failbit); + ifs.open (argv[1]); + + root_p.pre (); + doc_p.parse (ifs); + result_type result (root_p.post_xxx ()); + } + catch (const std::ifstream::failure&) + { + cerr << argv[1] << ": unable to open or io failure" << endl; + return 1; + } +} + </pre> + + + <p>For reporting application errors from parsing callbacks, you + can throw any exceptions of your choice. They are propagated to + the caller of the parser without any alterations.</p> + + <p>The XML errors can be reported either by throwing the + <code>xml_schema::parsing</code> exception or by a callback + to the <code>xml_schema::error_handler</code> object (and + <code>xercesc::ErrorHandler</code> object in case of Xerces-C++).</p> + + <p>The <code>xml_schema::parsing</code> exception contains + a list of warnings and errors that were accumulated during + parsing. Note that this exception is thrown only if there + was an error. This makes it impossible to obtain warnings + from an otherwise successful parsing using this mechanism. + The following listing shows the definition of + <code>xml_schema::parsing</code> exception. Note that if the + character type is <code>wchar_t</code>, then the string type + and output stream type in the definition become + <code>std::wstring</code> and <code>std::wostream</code>, + respectively (see <a href="#5.1">Section 5.1, "Character Type + and Encoding"</a>).</p> + + <pre class="c++"> +namespace xml_schema +{ + class exception: public std::exception + { + protected: + virtual void + print (std::ostream&) const = 0; + }; + + inline std::ostream& + operator<< (std::ostream& os, const exception& e) + { + e.print (os); + return os; + } + + + class severity + { + public: + enum value + { + warning, + error + }; + }; + + + class error + { + public: + error (xml_schema::severity, + const std::string& id, + unsigned long line, + unsigned long column, + const std::string& message); + + xml_schema::severity + severity () const; + + const std::string& + id () const; + + unsigned long + line () const; + + unsigned long + column () const; + + const std::string& + message () const; + }; + + std::ostream& + operator<< (std::ostream&, const error&); + + + class diagnostics: public std::vector<error> + { + }; + + std::ostream& + operator<< (std::ostream&, const diagnostics&); + + + class parsing: public exception + { + public: + parsing (); + parsing (const xml_schema::diagnostics&); + + const xml_schema::diagnostics& + diagnostics () const; + + virtual const char* + what () const throw (); + + protected: + virtual void + print (std::ostream&) const; + }; +} + </pre> + + <p>The following example shows how we can catch and print this + exception. The code will print diagnostics messages one per line + in case of an error.</p> + + <pre class="c++"> +int +main (int argc, char* argv[]) +{ + try + { + // Parse. + } + catch (const xml_schema::parsing& e) + { + cerr << e << endl; + return 1; + } +} + </pre> + + <p>With the <code>error_handler</code> approach the diagnostics + messages are delivered as parsing progresses. The following + listing presents the definition of the <code>error_handler</code> + interface. Note that if the character type is <code>wchar_t</code>, + then the string type in the interface becomes <code>std::wstring</code> + (see <a href="#5.1">Section 5.1, "Character Type and Encoding"</a>).</p> + + <pre class="c++"> +namespace xml_schema +{ + class error_handler + { + public: + class severity + { + public: + enum value + { + warning, + error, + fatal + }; + }; + + virtual bool + handle (const std::string& id, + unsigned long line, + unsigned long column, + severity, + const std::string& message) = 0; + }; +} + </pre> + + <p>The return value of the <code>handle()</code> function indicates whether + parsing should continue if possible. The error with the fatal severity + level terminates the parsing process regardless of the returned value. + At the end of the parsing process with an error that was reported via + the <code>error_handler</code> object, an empty + <code>xml_schema::parsing</code> exception is thrown to indicate + the failure to the caller. You can alter this behavior by throwing + your own exception from the <code>handle()</code> function.</p> + + + <!-- Appendix A --> + + + <h1><a name="A">Appendix A — Supported XML Schema Constructs</a></h1> + + <p>The C++/Parser mapping supports validation of the following W3C XML + Schema constructs in the generated code.</p> + + <!-- border="1" is necessary for html2ps --> + <table id="features" border="1"> + <tr><th>Construct</th><th>Notes</th></tr> + <tr><th colspan="2">Structure</th></tr> + + <tr><td>element</td><td></td></tr> + <tr><td>attribute</td><td></td></tr> + + <tr><td>any</td><td></td></tr> + <tr><td>anyAttribute</td><td></td></tr> + + <tr><td>all</td><td></td></tr> + <tr><td>sequence</td><td></td></tr> + <tr><td>choice</td><td></td></tr> + + <tr><td>complex type, empty content</td><td></td></tr> + <tr><td>complex type, mixed content</td><td></td></tr> + <tr><td>complex type, simple content extension</td><td></td></tr> + <tr><td>complex type, simple content restriction</td> + <td>Simple type facets are not validated.</td></tr> + <tr><td>complex type, complex content extension</td><td></td></tr> + <tr><td>complex type, complex content restriction</td><td></td></tr> + + <tr><td>list</td><td></td></tr> + + <tr><th colspan="2">Datatypes</th></tr> + + <tr><td>byte</td><td></td></tr> + <tr><td>unsignedByte</td><td></td></tr> + <tr><td>short</td><td></td></tr> + <tr><td>unsignedShort</td><td></td></tr> + <tr><td>int</td><td></td></tr> + <tr><td>unsignedInt</td><td></td></tr> + <tr><td>long</td><td></td></tr> + <tr><td>unsignedLong</td><td></td></tr> + <tr><td>integer</td><td></td></tr> + <tr><td>nonPositiveInteger</td><td></td></tr> + <tr><td>nonNegativeInteger</td><td></td></tr> + <tr><td>positiveInteger</td><td></td></tr> + <tr><td>negativeInteger</td><td></td></tr> + + <tr><td>boolean</td><td></td></tr> + + <tr><td>float</td><td></td></tr> + <tr><td>double</td><td></td></tr> + <tr><td>decimal</td><td></td></tr> + + <tr><td>string</td><td></td></tr> + <tr><td>normalizedString</td><td></td></tr> + <tr><td>token</td><td></td></tr> + <tr><td>Name</td><td></td></tr> + <tr><td>NMTOKEN</td><td></td></tr> + <tr><td>NCName</td><td></td></tr> + <tr><td>language</td><td></td></tr> + <tr><td>anyURI</td><td></td></tr> + + <tr><td>ID</td><td>Identity constraint is not enforced.</td></tr> + <tr><td>IDREF</td><td>Identity constraint is not enforced.</td></tr> + + <tr><td>NMTOKENS</td><td></td></tr> + <tr><td>IDREFS</td><td>Identity constraint is not enforced.</td></tr> + + <tr><td>QName</td><td></td></tr> + + <tr><td>base64Binary</td><td></td></tr> + <tr><td>hexBinary</td><td></td></tr> + + <tr><td>date</td><td></td></tr> + <tr><td>dateTime</td><td></td></tr> + <tr><td>duration</td><td></td></tr> + <tr><td>gDay</td><td></td></tr> + <tr><td>gMonth</td><td></td></tr> + <tr><td>gMonthDay</td><td></td></tr> + <tr><td>gYear</td><td></td></tr> + <tr><td>gYearMonth</td><td></td></tr> + <tr><td>time</td><td></td></tr> + </table> + + + </div> +</div> + +</body> +</html> diff --git a/xsd/documentation/cxx/parser/guide/makefile b/xsd/documentation/cxx/parser/guide/makefile new file mode 100644 index 0000000..f78a9f9 --- /dev/null +++ b/xsd/documentation/cxx/parser/guide/makefile @@ -0,0 +1,55 @@ +# file : documentation/cxx/parser/guide/makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../../build/bootstrap.make + +default := $(out_base)/ +install := $(out_base)/.install +dist := $(out_base)/.dist +dist-win := $(out_base)/.dist-win +cleandoc := $(out_base)/.cleandoc + +# Build. +# +$(default): $(out_base)/cxx-parser-guide.ps $(out_base)/cxx-parser-guide.pdf + +$(out_base)/cxx-parser-guide.ps: $(src_base)/index.xhtml \ + $(src_base)/figure-1.png \ + $(src_base)/guide.html2ps \ + | $(out_base)/. + $(call message,html2ps $<,html2ps -f $(src_base)/guide.html2ps -o $@ $<) + +$(out_base)/cxx-parser-guide.pdf: $(out_base)/cxx-parser-guide.ps | $(out_base)/. + $(call message,ps2pdf $<,ps2pdf14 $< $@) + +# Install & Dist. +# +$(install): path := $(subst $(src_root)/documentation/,,$(src_base)) +$(dist): path := $(subst $(src_root)/,,$(src_base)) + +$(install): $(out_base)/cxx-parser-guide.ps $(out_base)/cxx-parser-guide.pdf + $(call install-data,$(src_base)/figure-1.png,$(install_doc_dir)/xsd/$(path)/figure-1.png) + $(call install-data,$(src_base)/index.xhtml,$(install_doc_dir)/xsd/$(path)/index.xhtml) + $(call install-data,$(out_base)/cxx-parser-guide.ps,$(install_doc_dir)/xsd/$(path)/cxx-parser-guide.ps) + $(call install-data,$(out_base)/cxx-parser-guide.pdf,$(install_doc_dir)/xsd/$(path)/cxx-parser-guide.pdf) + +$(dist): $(out_base)/cxx-parser-guide.ps $(out_base)/cxx-parser-guide.pdf + $(call install-data,$(src_base)/figure-1.png,$(dist_prefix)/$(path)/figure-1.png) + $(call install-data,$(src_base)/index.xhtml,$(dist_prefix)/$(path)/index.xhtml) + $(call install-data,$(out_base)/cxx-parser-guide.ps,$(dist_prefix)/$(path)/cxx-parser-guide.ps) + $(call install-data,$(out_base)/cxx-parser-guide.pdf,$(dist_prefix)/$(path)/cxx-parser-guide.pdf) + +$(dist-win): $(dist) + + +# Clean +# +$(cleandoc): + $(call message,rm $$1,rm -f $$1,$(out_base)/cxx-parser-guide.ps) + $(call message,rm $$1,rm -f $$1,$(out_base)/cxx-parser-guide.pdf) + +# How to. +# +$(call include,$(bld_root)/install.make) diff --git a/xsd/documentation/cxx/parser/makefile b/xsd/documentation/cxx/parser/makefile new file mode 100644 index 0000000..c0394dc --- /dev/null +++ b/xsd/documentation/cxx/parser/makefile @@ -0,0 +1,22 @@ +# file : documentation/cxx/parser/makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../build/bootstrap.make + +docs := guide + +default := $(out_base)/ +install := $(out_base)/.install +dist := $(out_base)/.dist +dist-win := $(out_base)/.dist-win +cleandoc := $(out_base)/.cleandoc + +$(default): $(addprefix $(out_base)/,$(addsuffix /,$(docs))) +$(install): $(addprefix $(out_base)/,$(addsuffix /.install,$(docs))) +$(dist): $(addprefix $(out_base)/,$(addsuffix /.dist,$(docs))) +$(dist-win): $(addprefix $(out_base)/,$(addsuffix /.dist-win,$(docs))) +$(cleandoc): $(addprefix $(out_base)/,$(addsuffix /.cleandoc,$(docs))) + +$(foreach m,$(docs),$(call import,$(src_base)/$m/makefile)) diff --git a/xsd/documentation/cxx/tree/dbxml/driver.cxx b/xsd/documentation/cxx/tree/dbxml/driver.cxx new file mode 100644 index 0000000..56cbb4a --- /dev/null +++ b/xsd/documentation/cxx/tree/dbxml/driver.cxx @@ -0,0 +1,175 @@ +// file : examples/cxx/tree/dbxml/driver.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : not copyrighted - public domain + +#include <memory> // std::auto_ptr +#include <string> +#include <cassert> +#include <iostream> + +#include <dbxml/DbXml.hpp> + +#include "library.hxx" + +using std::cerr; +using std::endl; +using std::string; +using std::auto_ptr; + +using namespace DbXml; +using namespace xsd::cxx; // for xml::string + +void +print_document (const string& desc, + XmlContainer container, + const string& name) +{ + XmlDocument doc (container.getDocument (name)); + + string content; + doc.getContent (content); + + cerr << endl + << desc << endl + << content << endl; +} + +int +main () +{ + try + { + using namespace library; + using xml_schema::date; + + XmlManager manager; + + { + XmlContainer container (manager.createContainer ("new.bdbxml")); + + XmlUpdateContext update_context (manager.createUpdateContext ()); + + XmlQueryContext context (manager.createQueryContext ()); + context.setNamespace ("lib", "http://www.codesynthesis.com/library"); + + + // Create a new document from an object model. + // + { + // Create a new catalog with one book. + // + catalog c; + + book b (20530902, // ISBN + "The Elements of Style", // Title + genre::reference, // Genre + "ES"); // ID + + author strunk ("William Strunk, Jr.", date (1869, 7, 1)); + strunk.died (date (1946, 9, 26)); + + b.author ().push_back (strunk); + c.book ().push_back (b); + + + // Create a new XML document. + // + XmlDocument doc (manager.createDocument ()); + doc.setName ("new.xml"); + + + // Obtain its DOM representation and add the root element. + // + xercesc::DOMDocument& dom_doc (*doc.getContentAsDOM ()); + + dom_doc.appendChild ( + dom_doc.createElementNS ( + xml::string ("http://www.codesynthesis.com/library").c_str (), + xml::string ("lib:catalog").c_str ())); + + + // Serialize the object model to the XML document. Also avoid + // re-initializing the Xerces-C++ runtime since XmlManager has + // it initialized. + // + catalog_ (dom_doc, c, xml_schema::flags::dont_initialize); + + + // Place the document into the container. + // + container.putDocument (doc, update_context); + + print_document ("after create:", container, "new.xml"); + } + + // Create an object model from a document in DB. + // + { + // Resolve the document in the container. + // + XmlDocument doc (container.getDocument ("new.xml")); + + + // Create the object model from the document's DOM. Also avoid + // re-initializing the Xerces-C++ runtime since XmlManager has + // it initialized. + // + auto_ptr<catalog> c (catalog_ (*doc.getContentAsDOM (), + xml_schema::flags::dont_initialize)); + + cerr << *c << endl; + } + + + // Lookup a document fragment. + // + + string query ("collection('new.bdbxml')/lib:catalog/book[@id='ES']"); + + // Find "The Elements of Style". + // + XmlValue v; + XmlResults results (manager.query (query, context)); + + if (results.next (v)) + { + // Create an object model from the document fragment. + // + auto_ptr<book> b ( + new book ( + *static_cast<xercesc::DOMElement*> (v.asNode ()))); + + cerr << *b << endl; + + + // Add another author, change the availability status. + // + author white ("E.B. White", date (1899, 7, 11)); + white.died (date (1985, 10, 1)); + + b->author ().push_back (white); + b->available (false); + + + // Update the document fragment from the object model. + // + *static_cast<xercesc::DOMElement*> (v.asNode ()) << *b; + + + // Update the document in the container. + // + XmlDocument doc (v.asDocument ()); + container.updateDocument (doc, update_context); + } + + print_document ("after update:", container, "new.xml"); + } + + manager.removeContainer ("new.bdbxml"); + } + catch (const std::exception& e) + { + cerr << e.what () << endl; + return 1; + } +} diff --git a/xsd/documentation/cxx/tree/dbxml/index.xhtml b/xsd/documentation/cxx/tree/dbxml/index.xhtml new file mode 100644 index 0000000..adfeb24 --- /dev/null +++ b/xsd/documentation/cxx/tree/dbxml/index.xhtml @@ -0,0 +1,348 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> + +<head> + <title>C++/Tree Mapping and Berkeley DB XML Integration Guide</title> + + <meta name="copyright" content="© 2006-2010 Code Synthesis Tools CC"/> + <meta name="keywords" content="xsd,xml,schema,c++,mapping,data,binding,berkeley,db,dbxml"/> + <meta name="description" content="C++/Tree Mapping and Berkeley DB XML Integration Guide"/> + + <link rel="stylesheet" type="text/css" href="../../../default.css" /> + +<style type="text/css"> + pre { + background : #cde8f6; + + padding : 0 0 0 1em; + margin : 2em 0em 2em 0; + + } + + h1 {padding-top: 1em;} + +</style> +</head> + +<body> +<div id="container"> + <div id="content"> + + <h1>Introduction</h1> + + <p>This guide shows how to integrate the + <a href="http://www.codesynthesis.com/products/xsd/c++/tree/">C++/Tree</a> + mapping generated by + <a href="http://www.codesynthesis.com/products/xsd/">CodeSynthesis XSD</a> + with + <a href="http://www.oracle.com/database/berkeley-db/xml/index.html">Berkeley DB XML</a>. + + Berkeley DB XML is an embedded XML database which allows efficient + storage and query of XML instance documents. + + CodeSynthesis XSD is a W3C XML Schema to C++ data binding compiler. + + The C++/Tree mapping allows you to manipulate the data stored in XML + using objects that semantically correspond to your application + domain rather than dealing with direct representations of XML. + + For an introduction to + the Berkeley DB XML refer to the + <a href="http://www.oracle.com/database/berkeley-db/xml/index.html">Berkeley DB XML + Getting Started Guide</a>. + For an introduction to the C++/Tree mapping refer to + the <a href="../guide/">C++/Tree Mapping Getting Started Guide</a>. + </p> + + + <p>This guide describes the following four operations:</p> + + <ul> + <li>Create a new document in DB from an object model</li> + <li>Create an object model from a document in DB</li> + <li>Create an object model from a document fragment in DB</li> + <li>Update a document fragment in DB from an object model</li> + </ul> + + <p>Our examples will be based on simple XML for book library. The XML + Schema definition for the library is in + <a href="./library.xsd">library.xsd</a> and is compiled by XSD + to obtain <code>library.hxx</code> and <code>library.cxx</code>. + All C++ code fragments that are presented in this guide are available + as a single program in <a href="./driver.cxx">driver.cxx</a>. + The complete example is available in the + <code>examples/cxx/tree/dbxml</code> directory of the XSD distribution.</p> + + <p>Note that due to the incomplete DOM API implementation provided by DB + XML (as of version 2.3.10), the generated code and your application + should be compiled with the <code>DBXML_DOM</code> macro defined in + order to avoid using unsupported parts of the API. + </p> + + <p>A sample XML document for the library schema is presented below:</p> + + <pre> +<lib:catalog xmlns:lib="http://www.codesynthesis.com/library"> + <book available="true" id="ES"> + <isbn>20530902</isbn> + <title>The Elements of Style</title> + <genre>reference</genre> + + <author> + <name>William Strunk, Jr.</name> + <born>1869-07-01</born> + <died>1946-09-26</died> + </author> + + <author> + <name>E.B. White</name> + <born>1899-07-11</born> + <died>1985-10-01</died> + </author> + </book> +</lib:catalog> + </pre> + + <h1>Create Document from Object Model</h1> + + <p>In this step, we will programmatically create a book catalog + with one book, save it into an <code>XmlDocument</code> object + using one of the serialization functions generated by XSD ( + <code>catalog_</code> in our case), and store the + <code>XmlDocument</code> object as a new document in the + DB container:</p> + + <pre> +XmlManager manager; +XmlContainer container (manager.createContainer ("new.bdbxml")); +XmlUpdateContext update_context (manager.createUpdateContext ()); +XmlQueryContext context (manager.createQueryContext ()); +context.setNamespace ("lib", "http://www.codesynthesis.com/library"); + +// Create a new catalog with one book. +// +catalog c; + +book b (20530902, // ISBN + title ("The Elements of Style"), // Title + genre::reference, // Genre + "ES"); // ID + +author strunk ("William Strunk, Jr.", date (1869, 7, 1)); +strunk.died (date (1946, 9, 26)); + +b.author ().push_back (strunk); +c.book ().push_back (b); + +// Create a new XML document. +// +XmlDocument doc (manager.createDocument ()); +doc.setName ("new.xml"); + +// Obtain its DOM representation and add the root element. +// +xercesc::DOMDocument& dom_doc (*doc.getContentAsDOM ()); + +dom_doc.appendChild ( + dom_doc.createElementNS ( + xml::string ("http://www.codesynthesis.com/library").c_str (), + xml::string ("lib:catalog").c_str ())); + +// Serialize the object model to the XML document. Also avoid +// re-initializing the Xerces-C++ runtime since XmlManager has +// it initialized. +// +catalog_ (dom_doc, c, xml_schema::flags::dont_initialize); + +// Place the document into the container. +// +container.putDocument (doc, update_context); + </pre> + + <p>If we now resolve the <code>new.xml</code> in the container and + print its content, we will get:</p> + + <pre> +<lib:catalog xmlns:lib="http://www.codesynthesis.com/library"> + <book available="true" id="ES"> + <isbn>20530902</isbn> + <title>The Elements of Style</title> + <genre>reference</genre> + <author> + <name>William Strunk, Jr.</name> + <born>1869-07-01</born> + <died>1946-09-26</died> + </author> + </book> +</lib:catalog> + </pre> + + <h1>Create Object Model from Document</h1> + + <p>Creating an object model from a document is a matter + of obtaining <code>XmlDocument</code> object and passing its DOM + representation to one of the parsing functions generated by XSD + (<code>catalog_</code> in our case): + </p> + + <pre> +// Resolve the document in the container. +// +XmlDocument doc (container.getDocument ("new.xml")); + +// Create the object model from the document's DOM. Also avoid +// re-initializing the Xerces-C++ runtime since XmlManager has +// it initialized. +// +auto_ptr<catalog> c (catalog_ (*doc.getContentAsDOM (), + xml_schema::flags::dont_initialize)); + +cerr << *c << endl; + </pre> + + <p>This code fragment prints:</p> + + <pre> +book: +isbn: 20530902 +title: The Elements of Style +genre: reference +author: +name: William Strunk, Jr. +born: 1869-07-01 +died: 1946-09-26 +available: 1 +id: ES + </pre> + + <h1>Create Object Model from Document Fragment</h1> + + <p>The following code fragment looks up the book with id <code>"ES"</code> + using XQuery. It then creates a <code>book</code> object from the + resulting <code>XmlValue</code>:</p> + + <pre> +string query ("collection('new.bdbxml')/lib:catalog/book[@id='ES']"); + +// Find "The Elements of Style". +// +XmlValue v; +XmlResults results (manager.query (query, context)); + +if (results.next (v)) +{ + // Create an object model from the document fragment. + // + auto_ptr<book> b ( + new book ( + *static_cast<xercesc::DOMElement*> (v.asNode ()))); + + cerr << *b << endl; +} + </pre> + +<p>This code fragment prints:</p> + + <pre> +isbn: 20530902 +title: The Elements of Style +genre: reference +author: +name: William Strunk, Jr. +born: 1869-07-01 +died: 1946-09-26 +available: 1 +id: ES + </pre> + + <p>Note that we had to perform a <code>static_cast</code> from + <code>xercesc::DOMNode</code> + returned by the <code>XmlValue::asNode</code> member function to + <code>xercesc::DOMElement</code>. This is safe since we know + that in our schema books are represented as XML elements.</p> + + <h1>Update Document Fragment from Object Model</h1> + + <p>Analogous to the create case, the following code fragment looks + up the book with id <code>"ES"</code> using XQuery. It then creates + a <code>book</code> object from the resulting <code>XmlValue</code>, + adds another author, changes the availability status, and saves + the changes back to the <code>XmlValue</code> object: + </p> + + <pre> +string query ("collection('new.bdbxml')/lib:catalog/book[@id='ES']"); + +// Find "The Elements of Style". +// +XmlValue v; +XmlResults results (manager.query (query, context)); + +if (results.next (v)) +{ + // Create an object model from the document fragment. + // + auto_ptr<book> b ( + new book ( + *static_cast<xercesc::DOMElement*> (v.asNode ()))); + + // Add another author, change the availability status. + // + author white ("E.B. White", date (1899, 7, 11)); + white.died (date (1985, 10, 1)); + + b->author ().push_back (white); + b->available (false); + + // Update the document fragment from the object model. + // + *static_cast<xercesc::DOMElement*> (v.asNode ()) << *b; + + // Update the document in the container. + // + XmlDocument doc (v.asDocument ()); + container.updateDocument (doc, update_context); +} + </pre> + + <p>If we now resolve the <code>new.xml</code> in the container and + print its content, we will get:</p> + + <pre> +<lib:catalog xmlns:lib="http://www.codesynthesis.com/library"> + <book available="false" id="ES"> + <isbn>20530902</isbn> + <title>The Elements of Style</title> + <genre>reference</genre> + <author> + <name>William Strunk, Jr.</name> + <born>1869-07-01</born> + <died>1946-09-26</died> + </author> + <author> + <name>E.B. White</name> + <born>1899-07-11</born> + <died>1985-10-01</died> + </author> + </book> +</lib:catalog> + </pre> + + </div> + <div id="footer"> + ©2006-2010 <a href="http://www.codesynthesis.com">CODE SYNTHESIS TOOLS CC</a> + + <div id="terms"> + Permission is granted to copy, distribute and/or modify this + document under the terms of the + <a href="http://www.codesynthesis.com/licenses/fdl-1.2.txt">GNU Free + Documentation License, version 1.2</a>; with no Invariant Sections, + no Front-Cover Texts and no Back-Cover Texts. + </div> + </div> + +</div> + +</body> +</html> diff --git a/xsd/documentation/cxx/tree/dbxml/library.xsd b/xsd/documentation/cxx/tree/dbxml/library.xsd new file mode 100644 index 0000000..c71c312 --- /dev/null +++ b/xsd/documentation/cxx/tree/dbxml/library.xsd @@ -0,0 +1,75 @@ +<?xml version="1.0"?> + +<!-- + +file : examples/cxx/tree/dbxml/library.xsd +author : Boris Kolpackov <boris@codesynthesis.com> +copyright : not copyrighted - public domain + +--> + +<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns:xse="http://www.codesynthesis.com/xmlns/xml-schema-extension" + xmlns:lib="http://www.codesynthesis.com/library" + targetNamespace="http://www.codesynthesis.com/library"> + + <xsd:simpleType name="isbn"> + <xsd:restriction base="xsd:unsignedInt"/> + </xsd:simpleType> + + + <xsd:complexType name="title"> + <xsd:simpleContent> + <xsd:extension base="xsd:string"> + <xsd:attribute name="lang" type="xsd:language"/> + </xsd:extension> + </xsd:simpleContent> + </xsd:complexType> + + <xsd:simpleType name="genre"> + <xsd:restriction base="xsd:string"> + <xsd:enumeration value="romance"/> + <xsd:enumeration value="fiction"/> + <xsd:enumeration value="horror"/> + <xsd:enumeration value="history"/> + <xsd:enumeration value="philosophy"/> + <xsd:enumeration value="reference"/> + </xsd:restriction> + </xsd:simpleType> + + <xsd:complexType name="person"> + <xsd:sequence> + <xsd:element name="name" type="xsd:string"/> + <xsd:element name="born" type="xsd:date"/> + <xsd:element name="died" type="xsd:date" minOccurs="0"/> + </xsd:sequence> + </xsd:complexType> + + <xsd:complexType name="author"> + <xsd:complexContent> + <xsd:extension base="lib:person"> + <xsd:attribute name="recommends" type="xsd:IDREF" xse:refType="lib:book"/> + </xsd:extension> + </xsd:complexContent> + </xsd:complexType> + + <xsd:complexType name="book"> + <xsd:sequence> + <xsd:element name="isbn" type="lib:isbn"/> + <xsd:element name="title" type="lib:title"/> + <xsd:element name="genre" type="lib:genre"/> + <xsd:element name="author" type="lib:author" maxOccurs="unbounded"/> + </xsd:sequence> + <xsd:attribute name="available" type="xsd:boolean" default="true"/> + <xsd:attribute name="id" type="xsd:ID" use="required"/> + </xsd:complexType> + + <xsd:complexType name="catalog"> + <xsd:sequence> + <xsd:element name="book" type="lib:book" maxOccurs="unbounded"/> + </xsd:sequence> + </xsd:complexType> + + <xsd:element name="catalog" type="lib:catalog"/> + +</xsd:schema> diff --git a/xsd/documentation/cxx/tree/guide/cxx-tree-guide.pdf b/xsd/documentation/cxx/tree/guide/cxx-tree-guide.pdf Binary files differnew file mode 100644 index 0000000..03d94fd --- /dev/null +++ b/xsd/documentation/cxx/tree/guide/cxx-tree-guide.pdf diff --git a/xsd/documentation/cxx/tree/guide/cxx-tree-guide.ps b/xsd/documentation/cxx/tree/guide/cxx-tree-guide.ps new file mode 100644 index 0000000..de3f351 --- /dev/null +++ b/xsd/documentation/cxx/tree/guide/cxx-tree-guide.ps @@ -0,0 +1,3470 @@ +%!PS +%%Title: C++/Tree Mapping Getting Started Guide +%%Creator: html2ps version 1.0 beta5 +%%EndComments +save +2000 dict begin +/d {bind def} bind def +/D {def} d +/t true D +/f false D +/FL [/Times-Roman +/Times-Italic +/Times-Bold +/Times-BoldItalic +/Courier +/Courier-Oblique +/Courier-Bold +/Courier-BoldOblique +/Helvetica +/Helvetica-Oblique +/Helvetica-Bold +/Helvetica-BoldOblique] D +/WF t D +/WI 0 D +/F 1 D +/IW 471 F div D +/IL 621 F div D +/PS 791 D +/EF [0 1 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 2 2] D +/EZ [12 10 19 17 15 13 12 11 12 12 12 12 12 12 12 12 12 12 12 12 12 12 8 8] D +/Ey [0 0 2 2 2 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] D +/EG [-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1] D +/Tm [1 1 0.8 0.8 0.8 0.8 0.8 0.8 0 0 0 0 0 0 0.5 1 1 1 1 0 0 1.3 0 0] D +/Bm [1 1 0.5 0.5 0.5 0.5 0.5 0.5 0 0 0 0 0 0 0.5 1 1 1 1 0 0 1 0 0] D +/Lm [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 2 2 0 0 2 0 0 0] D +/Rm [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0] D +/EU [-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 0 0] D +/NO f D +/YY [[{()}{ h }][{ h }{()}][{()}{()}]] D +/ZZ [[{ (April 2010) }{ Pn }][{ Pn }{ (April 2010) }][{ Ti }{ Ti }]] D +/Ts EZ 0 get D +/TU f D +/Xp t D +/AU f D +/SN 0 D +/Cf t D +/Tp t D +/Fe f D +/TI 2 Ts mul D +/Fm 14 D +/xL 71 D +/xR 71 D +/yL 706 D +/yR 706 D +/Wl 471 F div D +/Wr 471 F div D +/hL 621 F div D +/hR 621 F div D +/FE {newpath Fm neg Fm M CP BB IW Fm add Fm L IW Fm add IL Fm add neg L CP BB + Fm neg IL Fm add neg L closepath} D +/LA {PM 0 eq{/IW Wl D /IL hL D}{/IW Wr D /IL hR D}ie /W IW D /LL W D /LS W D + TU PM 0 eq and{IW 56 F div add SA{Sf div}if 0 translate} + {PM 0 eq{xL yL}{xR yR}ie translate F SA{Sf mul}if dup scale + CS CF FS Cf{CA CL get VC}if /Bb f D}ie 0 0 M + TF not Tc or {Cf{gsave SA{1 Sf div dup scale}if Cb VC FE fill grestore}if}if}D +/Pi 0 Ts mul D +/SG [0.8 1 1] D +/Ab 15 D +/J 0 D +/Tc t D +/NH 6 D +/Nf f D +/Pa f D +/LH 1.2 D +/XR f D +/Xr {/pN E D ( [p ) WB pN WB (] )WB} D +/Db [16#FF 16#FF 16#FF] D +/Dt [16#00 16#00 16#00] D +/eA f D +/Fi f D +/bT f D +/Lc t D +/Dl [16#00 16#00 16#00] D +/LX f D +/Br 0.25 D +/IA ([IMAGE]) D +/DS {/PF f D()WB NL NP()pop RC ZF} D +/Gb f D +/Mb t D +/Hc [16#00 16#00 16#00] D +/Bl 3 D +/MI -15.6 D +/DX (DRAFT) D +/Di 0 D +/Tt 113.385826771654 D +/Th { ( +) 2 Al()BR ( + ) 0 1 -1 H()4 FZ (C++/Tree Mapping) ES()EH ( + ) 0 1 -1 H()4 FZ (Getting Started Guide) ES()EH ( + ) 0 1 -1 H ( ) EH ( + ) 0 1 -1 H ( ) EH ( + ) 0 1 -1 H ( ) EH ( + ) 0 1 -1 H ( ) EH ( + ) 0 1 -1 H ( ) EH ( + ) 0 1 -1 H ( ) EH ( +) Ea()BR ( + ) 0 P (Copyright © 2005-2010 CODE SYNTHESIS TOOLS CC) EP ( + + ) 0 P (Permission is granted to copy, distribute and/or modify this + document under the terms of the + ) R0 2 A (GNU Free + Documentation License, version 1.2) EA (; with no Invariant Sections, + no Front-Cover Texts and no Back-Cover Texts. + ) EP ( + + ) 0 P (This document is available in the following formats: + ) R1 2 A (XHTML) EA (, + ) R2 2 A (PDF) EA (, and + ) R3 2 A (PostScript) EA (.) EP()} D +/tH {()0 1 -1 H (Table of Contents) EH()} D +/FD 2 D +/Dy 2 D +/cD [16#F0 16#F0 16#F0] D +/FW 0.6 D +/FU [16#00 16#00 16#00] D +/ET {/RM f D /A0 3 D /PN SN D /OU t D /Ou t D /W IW D /LL W D D1 + Ms not TP and{Ip}if /TF f D} D + +%-- End of variable part -- +/MySymbol 10 dict dup begin + /FontType 3 D /FontMatrix [.001 0 0 .001 0 0 ] D /FontBBox [25 -10 600 600] D + /Encoding 256 array D 0 1 255{Encoding exch /.notdef put}for + Encoding (e) 0 get /euro put + /Metrics 2 dict D Metrics begin + /.notdef 0 D + /euro 651 D + end + /BBox 2 dict D BBox begin + /.notdef [0 0 0 0] D + /euro [25 -10 600 600] D + end + /CharacterDefs 2 dict D CharacterDefs begin + /.notdef {} D + /euro{newpath 114 600 moveto 631 600 lineto 464 200 lineto 573 200 lineto + 573 0 lineto -94 0 lineto 31 300 lineto -10 300 lineto closepath clip + 50 setlinewidth newpath 656 300 moveto 381 300 275 0 360 arc stroke + -19 350 moveto 600 0 rlineto -19 250 moveto 600 0 rlineto stroke}d + end + /BuildChar{0 begin + /char E D /fontdict E D /charname fontdict /Encoding get char get D + fontdict begin + Metrics charname get 0 BBox charname get aload pop setcachedevice + CharacterDefs charname get exec + end + end}D + /BuildChar load 0 3 dict put /UniqueID 1 D +end +definefont pop + +/Cd {aload length 2 idiv dup dict begin {D} repeat currentdict end} D +/EX {EC cvx exec} D +/DU {} d +/BB {pop pop}d +/ie {ifelse} d +/E {exch} d +/M {moveto} d +/R {rmoveto} d +/L {lineto} d +/RL {rlineto} d +/CP {currentpoint} d +/SW {stringwidth} d +/GI {getinterval} d +/PI {putinterval} d +/Sg {setgray} d +/LW {setlinewidth} d +/S {dup () ne OU and{0 Co R AT 3 eq LB and HF not and A1 0 ne A2 0 ne or and + {A2 0 32 A1 0 6 -1 roll awidthshow}{show}ie 0 Co neg R}{pop}ie + OU PH 3 eq or{/Ms t D}if} D +/U {OU{gsave CP currentfont /FontInfo get /UnderlinePosition get + 0 E currentfont /FontMatrix get dtransform E pop add newpath M dup SW pop + CJ 0 RL stroke grestore}if} D +/B {OU Br 0 gt and{CP Ts neg Ts .33 mul R gsave 0 Sg + CP newpath Ts Br mul 0 360 arc closepath UI 2 mod 0 eq{stroke}{fill}ie + grestore M CP E Ts Br 1 add mul sub E BB /Ms t D}if}D +/NP {Ms TP not or PA and OU and{TP{OR}if f1{mF k2 /mF E D /YC 0 D}if + TP TU not PM 0 eq or and{showpage}if DU Ip TE not{LA}if 0.6 LW + /CI 0 D /TP t D /Hs f D /hl 6 D /Hv 6 D /HI hi D /Ms f D}if Bs XO BO M} D +/Np {LE sub CP E pop gt PL 0 eq and{NP}if}D +/Ip {/PN PN 1 add D /Pn RM{1}{4}ie PN Ns D /PM PN SN sub 2 mod D} D +/GP {E dup 3 -1 roll get PN 1 add 2 mod get dup type /integertype eq + {get 0 get}{E pop}ie}d +/Fc {dup 2 GP exec SW pop /S1 E D dup 1 GP exec SW pop /S2 E D 0 GP exec SW + pop /S3 E D S1 0 gt{S2 2 mul S1 add S3 2 mul S1 add 2 copy lt{E}if pop}{0}ie + S2 S3 add 2 copy lt{E}if pop IW .9 mul div dup 1 gt{1 E div}{pop 1}ie}D +/OR {Df{Sd}if tp not{gsave SA{1 Sf div dup scale}if Fe{Cf{FU VC}if FW LW + 1 setlinejoin FE stroke}if /YO {60 F div dup 40 gt{pop 40}if}D /cs CS D + /cf CF D /CF 0 D /pf PF D /PF f D /Fn FN D /At AT D /AT 0 D /FN EF Hf 1 add + get D Fz Fs FS ZZ Fc Fz mul Fs FS EU Hf 1 add get dup type /arraytype eq + Cf and{VC}{pop 0 Sg}ie IW IL neg YO sub M ZZ 1 GP exec dup SW pop neg 0 R Sh + 0 IL neg YO sub M ZZ 0 GP exec Sh ZZ 2 GP exec dup SW pop IW E sub 2 div + IL neg YO sub M Sh Fz Fs FS NO{/AW IW Pn SW pop sub D AW 2 div IL neg YO sub + S1 0 gt S2 AW .45 mul gt or S3 AW .45 mul gt or{Fz 2 mul sub}if M Pn Sh}if + EU Hf get dup type /arraytype eq Cf and{VC}{pop 0 Sg}ie YY Fc /FN EF Hf get D + Hz mul HS FS IW YO M YY 1 GP exec dup SW pop neg 0 R Sh 0 YO M YY 0 GP exec Sh + YY 2 GP exec dup SW pop IW E sub 2 div YO M Sh /FN Fn D /AT At D t Pb XO SZ + SL get neg R /PF pf D grestore /CF 0 D cs cf FS}if}D +/Sh {dup () ne{CP Hz 4 div sub BB show CP CS add BB}{pop}ie}D +/Pb {/OU E D /Ou OU D /PB t D 0 0 M Ba{/Sa save D /BP t D /Fl t D RC /PL 0 D + /PH 0 D /W IW D /LE IL .7 mul D /EO 0 D SI ZF /YA 0 D /BO 0 D /C1 () D + BA 0 Ts neg R Bb{Xl Yl Xh Yh}if Bb CP Sa restore M + {/Yh E D /Xh E D /Yl E D /Xl E D}if /Fl t D}if + BL /OU t D /HM f D /Ou t D /PB f D} D +/Bs {/BP Ba not D}D +/reencodeISO { + dup dup findfont dup length dict begin{1 index /FID ne{D}{pop pop}ie}forall + /Encoding ISOLatin1Encoding D currentdict end definefont} D +/ISOLatin1Encoding [ +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright +/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash +/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon +/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N +/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright +/asciicircum/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m +/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/space/exclamdown/cent/sterling/currency/yen/brokenbar +/section/dieresis/copyright/ordfeminine/guillemotleft/logicalnot +/hyphen/registered/macron/degree/plusminus/twosuperior/threesuperior +/acute/mu/paragraph/periodcentered/cedilla/onesuperior/ordmasculine +/guillemotright/onequarter/onehalf/threequarters/questiondown +/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla +/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex +/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis +/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute +/Thorn/germandbls/agrave/aacute/acircumflex/atilde/adieresis +/aring/ae/ccedilla/egrave/eacute/ecircumflex/edieresis/igrave +/iacute/icircumflex/idieresis/eth/ntilde/ograve/oacute/ocircumflex +/otilde/odieresis/divide/oslash/ugrave/uacute/ucircumflex/udieresis +/yacute/thorn/ydieresis +] D +[128/backslash 129/parenleft 130/parenright 141/circumflex 142/tilde +143/perthousand 144/dagger 145/daggerdbl 146/Ydieresis 147/scaron 148/Scaron +149/oe 150/OE 151/guilsinglleft 152/guilsinglright 153/quotesinglbase +154/quotedblbase 155/quotedblleft 156/quotedblright 157/endash 158/emdash +159/trademark] +aload length 2 idiv 1 1 3 -1 roll{pop ISOLatin1Encoding 3 1 roll put}for +/colorimage where{pop}{ + /colorimage { + pop pop /Pr E D {/Cv Pr D /Gr Cv length 3 idiv string D 0 1 Gr length 1 sub + {Gr E dup /i E 3 mul D Cv i get 0.299 mul Cv i 1 add get 0.587 mul add + Cv i 2 add get 0.114 mul add cvi put}for Gr} image} D +}ie +/pdfmark where{pop}{userdict /pdfmark /cleartomark load put}ie +WF{FL{reencodeISO D}forall}{4 1 FL length 1 sub{FL E get reencodeISO D}for}ie +/Symbol dup dup findfont dup length dict begin + {1 index /FID ne{D}{pop pop}ie}forall /Encoding [Encoding aload pop] + dup 128 /therefore put D currentdict end definefont D + +/SF {/CS E D SZ SL CS put FO SL FN put /YI CS LH neg mul D dup ST cvs ( ) join + CS ST cvs join C1 E join ( NF ) join /C1 E D CS NF /Wf WF FN 0 gt or D + /BW Wf{( ) SW pop}{0}ie D}D +/NF {/cS E D /cF E D cF 0 ge{FL cF get}{cF -1 eq{/Symbol}{/MySymbol}ie}ie + findfont cS scalefont setfont} D +/FS {CF or /CF E D FR SL CF put CF CF 0 ge{FN 4 mul add}if E SF} D +/PC {SH /BP f D fin not GL not and{NL}if /HM t D /LL LS D} D +/BS {/TX E D Wf{/fin f D /CW 0 D /LK 0 D /SC 0 D + /RT TX D {RT ( ) search{/NW E D pop /RT E D /WH NW SW pop D CW WH add LL gt + {TX SC LK SC sub 1 sub NN GI GL{SH cF cS OC + 2 copy cS ne E cF ne or{NF}{pop pop}ie}{PC /CW WH BW add D}ie + /SC LK D} + {GL{JC}if + /CW CW WH add BW add D /HM t D}ie /GL f D /Ph f D + /LK LK NW length 1 add add D}{pop exit}ie}loop + /fin t D TX SC LK SC sub GI SH RT () ne{GL not{CC}if}if + /LC TX length D /WH RT SW pop D CW WH add Hy{HC SW pop add}if LL gt + {RT GL{SH cF cS OC 2 copy cS ne E cF ne or{NF}{pop pop}ie + Hy{/Ph t D}if /LL LS D}{NL /LL LS D SH}ie} + {RT PC Hy{CC}if /Ph Ph Hy or D}ie RT () ne{/GL t D /HM t D}if} + {TX SW pop LL le{TX SH}{/NW () D 0 2 TX length 1 sub + {/CW E D TX 0 CW GI dup SW pop LL gt{pop NW SH /HM t D NL/LL W XO sub MR sub D + /CW CW 2 sub NN D /TX TX CW TX length CW sub GI D TX BS exit} + {/NW E D}ie}for}ie}ie /HM t D}D +/CC {C0 length 0 gt{JC}if /C0 [C1 L1 YA YB Mf NS NB TB AF Bw] D + /C1 () D /L0 L1 D /YA 0 D /YB 0 D /Mf 0 D /NS 0 D /NB 0 D}D +/JC {C0 aload length 0 gt{pop pop pop NB add /NB E D NS add /NS E D + dup Mf gt{/Mf E D}{pop}ie dup YB gt{/YB E D}{pop}ie + dup YA gt{/YA E D}{pop}ie pop C1 join /C1 E D /C0 [] D}if}D +/OC {C0 length 0 gt{C1 L1 L0 sub YA YB Mf NS NB TB AF Bw GL C0 aload pop + /Bw E D /AF E D /TB E D /NB E D /NS E D /Mf E D /YB E D /YA E D /C0 [] D + /L1 E D /C1 E D Ph{HC SH}if NL /GL E D /Bw E D /AF E D /TB E D /NB E D /NS E D + /Mf E D /YB E D /YA E D /L1 E D /LL W L1 sub XO sub MR sub WH sub D /CW 0 D + C1 E join /C1 E D}if}D +/BT {/LB t D dup length string copy RS dup dup () ne E ( ) ne and + {/CI 0 D /LS LL D /LL W L1 sub XO sub MR sub D BS} + {dup ( ) eq{/GL f D}if dup () eq L1 0 eq or{pop}{SH /BP f D /Ph f D}ie}ie + /LB f D} D +/BL {CP E pop XO E M} D +/NL {JC /GL f D /SK W XO sub MR sub L1 sub TB{Bw add}if D + /YA LF{Mf HM Fl not and PF or{LH mul}if}{0 /LF t D}ie YA 2 copy lt{E}if pop D + C1 () ne{/FB YB Mf SA{Sf mul}if 4 div 2 copy lt{E}if pop D}if Fl{/Ya YA D}if + CP E pop YA sub YB sub LE neg lt Fl not and PB not and{NP}if NT TL BL + OU PF not and PB or{/RE L1 TB{Bw sub}if + W XO sub MR sub div YA YB add LE BO add div 2 copy lt{E}if pop D + RE 1 gt{BL 1 RE div dup scale}if}if + AT 2 le{SK AT mul 2 div YA neg R}if + AT 3 eq{0 YA neg R TB{/NB NB 1 sub D /NS NS 1 sub D}if /NB NB 1 sub NN D + /A3 NS 6 mul NB add D NS NB add 0 eq + {/A1 0 D /A2 0 D} + {NS 0 eq{/A1 SK NB div dup J gt{pop 0}if D /A2 0 D}{J A3 mul SK lt + {/A1 J D /A2 SK J NB mul sub NS div dup Ab gt{/A1 0 D pop 0}if D} + {/A1 SK A3 div D /A2 A1 6 mul D}ie}ie}ie /A1 A1 NN D /A2 A2 NN D}if + AT 4 eq{0 YA neg R PH 2 le{PD 0 lt{/PD L1 D}if PD M1 gt{/M1 PD D}if + L1 PD sub M2 gt{/M2 L1 PD sub D}if}{DV ID 1 sub get 0 ge{Lo 0 R}if}ie}if + F0 cF ne Cs cS ne or{F0 Cs NF}if + /ms Ms D /Ms f D CP FB sub + C1 cvx exec XO EO sub L1 add TB{BW sub}if dup LM gt{/LM E D}{pop}ie + PH 0 eq PH 4 eq or Ms and{HF not{/PO t D /AH t D}if + BB CP YA add E AT 3 eq LB and{A1 sub}if TB{BW sub}if E BB} + {pop pop}ie Ms HM PH 3 eq and or{/BP f D /Fl f D}if + /Lo 0 D /L1 0 D /F0 cF D /Cs cS D BP not{0 YB NN neg R}if + OU f1 and mF not and{k2 /f1 f D}if + OU PF not and PB or{RE 1 gt{RE dup scale}if}if /Ms ms Ms or D + /C1 AF{(Cp )}{()}ie D /YA 0 D /YB 0 D BL + AT 4 eq LB not and PH 3 ge and + {ID DV length lt{DV ID get dup 0 ge{DO E sub /Lo E D /L1 Lo D}{pop}ie + /ID ID 1 add D}if}if /T t D CD{/LN LN 1 add D PD}if + /PD -1 D /NS 0 D /NB 0 D /TB f D /Ph f D /Mf 0 D /HM f D} D +/RS {/TM E D /CN 0 D TM{10 eq{TM CN ( ) PI}if /CN CN 1 add D}forall + /CN 0 D /BK HM EN and{0}{1}ie D TM + {dup 32 ne{TM CN 3 2 roll put /CN CN 1 add D /BK 0 D} + {pop BK 0 eq{TM CN 32 put /CN CN 1 add D}if /BK 1 D}ie}forall + TM 0 CN GI dup dup () ne E ( ) ne and + {dup CN 1 sub get 32 eq{/EN f D}{/EN t D}ie}if} D +/join {2 copy length E length add string dup 4 2 roll 2 index 0 3 index + PI E length E PI}d +/WR {(\n) search{dup () ne BP not or + {Li 4 le CP E pop YI Li mul add LE add 0 lt and PL 0 eq and{NP}if + SH NL pop /Li Li 1 sub D WR}{pop pop WR}ie}{SH}ie /CI 0 D /BP f D} D +/SH {dup dup () ne E ( ) ne and PF or CS Mf gt and{/Mf CS D}if + T not Wf and{( ) E join /T t D}if dup BP{/MF CS D}if + AT 3 eq{2 copy length dup 0 gt{/NB E NB add D + {( ) search{/NS NS 1 add D pop pop}{pop exit}ie}loop}{pop pop}ie}if + CD PD 0 lt and{dup DC search{SW pop /PD E L1 add D pop pop}{pop}ie}if + 0 Np dup SW pop L1 add /L1 E D dup () ne + {C1 (\() join E join (\)) join AU AF and UF or Wf and{( U ) join}if + sF{( s ) join}if ( S ) join + /C1 E D dup length 1 sub get 32 eq /TB E D /Bw BW D}{pop pop}ie} D +/BG {AI LG BC add add 0 eq} D +/ON {OU{Ty AR AI NN get dup 1 add Ln Ns Ty 2 mod 0 eq{(. )}{(\) )}ie join + dup SW pop neg 0 R CP E 0 lt{0 E M}{pop}ie CP BB show /Ms t D}if} D +/Ln {AR AI 3 -1 roll put}D +/SP {dup CI lt BP not and{dup CI sub 0 E R /CI E D}{pop}ie} D +/BN {PF{WR /HM f D}{BT NL}ie} D +/NN {dup 0 lt{pop 0}if} D +/h {(h) HI ST cvs join cvx exec dup 1 get E Nf{0 get E join}{pop}ie} D +/H {/fn FN D /Hi E 1 add D 1 sub /HL E D /H2 HL 2 add D /GS EZ H2 get D + E Tm H2 get GS mul BE dup 0 gt{1 sub}{pop EG H2 get dup 0 lt{pop AT}if}ie NA + WW Np /SL SL 1 add D /FN EF H2 get D GS Ey H2 get FS + EU H2 get Sc Hs not HL Hl lt and Hs HL hl lt and or Hi 0 eq or + {/HI Hi D /Hs t D /hl HL D /Hv HL D}if HL Hl lt{/hi Hi D}if + Nf HI 0 gt and{(h) Hi ST cvs join cvx exec 0 get WB}if + /HF t D /AH f D /PO f D} D +/EH {Bm H2 get GS mul BE OA /SL SL 1 sub NN D /CF 0 D /FN fn D + SZ SL get FR SL get FS /HF f D /GS Ts D ()Ec} D +/P {E PF{WR}{PO{EP}{BN}ie Ts 4 mul Np AE not{Tm 0 get Ts mul neg SP}if + dup 0 ge AH and{Pi Pd}if}ie 1 sub dup 0 lt{pop AV AL get}if /AT E D /PO t D} D +/EP {PF{WR}{BN Ts 4 mul Np}ie AE not{Bm 0 get Ts mul neg SP}if + /AT AV AL get D /PO f D} D +/BE {E PO{EP}{BN}ie Ts 4 mul Np neg SP} D +/HR {/Aw W EO sub D /RW E dup 0 gt{Aw mul}{neg}ie dup Aw gt{pop Aw}if D /RZ E D + E BN Ts neg SP 1 sub 2 div Aw RW sub mul EO add CP E pop M PF{0 Ps neg R}if + 0 Np OU{gsave RZ LW Cf{Hc VC}{0 Sg}ie CP BB RW 0 RL CP BB stroke grestore}if + /CI 0 D /BP f D PF not{Ts neg SP}if /Ms t D} D +/AD {I NL EG 14 get dup 0 lt{pop AT}if NA /AE t D Tm 14 get Ts mul neg SP + Cf{EU 14 get dup -1 eq{pop CA CL get}if Sc}if} D +/DA {BN ()ES OA /AE f D ()Ec Bm 14 get Ts mul neg SP} D +/PR {/MW E D /Li E D Tm 1 get Ps mul BE 0 NA /FN Fp D /PF t D SI /SL SL 1 add D + /CF 0 D Ps CS mul Ts div MW WC mul CS mul Ts div dup LL gt PL 0 eq and + {LL div div}{pop}ie Ey 1 get FS CP E pop LE add YI neg div cvi dup Li lt + AH and{4 lt YI Li mul 5 mul LE add 0 gt or PL 0 eq and{NP}if}{pop}ie + EU 1 get Sc /GS Ps D}D +/RP {WR NL () /PF f D SI /FN 0 D ES Bm 1 get Ps mul neg SP OA /GS Ts D} D +/SI {/XO Lm 15 get BC NN mul Lm 16 get AI UI sub NN mul add + Lm 17 get UI NN mul add Lm 20 get LG NN mul add Ts mul + PF{Lm 1 get Ps mul add}if EO add D + /MR Rm 15 get BC NN mul Rm 16 get AI UI sub NN mul add + Rm 17 get UI NN mul add Rm 20 get LG NN mul add Ts mul + PF{Rm 1 get Ps mul add}if D /LL W XO sub MR sub D} D +/DT {/cC E D BN /LG LG 1 sub D SI /LG LG 1 add D WW 2 div Np BL} D +/DD {WB Cc 0 eq cC 0 eq and L1 0 eq or Lm 20 get Ts mul L1 sub TB{BW add}if + Ts 2 div lt or NL /LF E D SI BL /cC 0 D} D +/DL {Dc LG Cc put /Cc E D BG{Tm 18 get Ts mul BE}{BN}ie /LG LG 1 add D BL} D +/LD {BN LG 0 gt{/LG LG 1 sub D}if /Cc Dc LG get D SI + BG{()Bm 18 get Ts mul BE}if BL} D +/UL {BG{Tm 17 get Ts mul BE}{BN}ie NR AI NN 0 put /UI UI 1 add D + /AI AI 1 add D SI BL} D +/LU {BN /UI UI 1 sub D /AI AI 1 sub D SI BG{()Bm 17 get Ts mul BE}if BL} D +/OL {E BG{Tm 16 get Ts mul BE}{BN}ie TR AI NN Ty put /Ty E D NR AI NN 1 put + /AI AI 1 add D SI BL 1 Ln} D +/LO {BN /AI AI 1 sub D /Ty TR AI get D SI BG{()Bm 16 get Ts mul BE}if BL} D +/LI {E BN -1 SP /BP f D /CI 0 D 0 Np NR AI 1 sub NN get 1 eq + {dup dup 0 gt E 4 le and{/Ty E D}{pop}ie + /L1 L1 Ty AR AI NN get Ns SW pop XO sub dup 0 lt{pop 0}if add D ( ON )} + {pop ( B )}ie C1 E join /C1 E D CS Mf gt{/Mf CS D}if BL} D +/BQ {Tm 15 get Ts mul BE /BC BC 1 add D SI BL} D +/QB {Bm 15 get Ts mul BE /BC BC 1 sub D SI BL} D +/Al {E EP 1 sub dup 0 lt{pop AV AL get}if NA} D +/Ea {EP OA} D +/WB {PF{WR}{BT}ie} D +/F1 {WB /FN 0 D CS 0 FS} D +/F2 {WB /FN WI D CS 0 FS} D +/HY {/Hy t D WB /Hy f D} D +/YH {WB} D +/A {/LT E D LT 1 eq{/RN E D}if /Lh E D WB /C1 C1 ( Cp ) join D + Lc AF not and{Cl Sc}if /AF t D} D +/EA {Lc AF and{Ec}{WB}ie TL Pa AF and Lh 0 ne and + {( \() Lh join (\)) join /AF f D WB}if /AF f D} D +/TL {C1 ( Tl ) apa /C1 E D} d +/apa {AF OU and Lh 0 ne LT 1 eq or and{LT 1 eq{RN ( /) E ST cvs join} + {(\() Lh join (\)) join}ie E join join}{pop}ie} d +/Cp {/Xc CP /Yc E D D} D +/SS {Cf{dup 0 ge{EU E get dup -1 eq{pop CA CL get}if}{pop CA CL get}ie Sc} + {pop}ie SZ SL get /SL SL 1 add D} D +/I {WB 8 SS 1 FS} D +/EM {WB 8 SS /CF CF 1 xor D 0 FS} D +/BD {WB 9 SS 2 FS} D +/TT {WB 10 SS /FN Fp D 0 FS} D +/KB {WB 11 SS /FN Fp D 2 FS} D +/CT {WB 12 SS 1 FS} D +/SM {WB 13 SS /FN Fp D 0 FS} D +/Q {/QL QL 1 add D QO QL 2 mod get La get join WB} D +/EQ {QC QL 2 mod get La get join WB /QL QL 1 sub D} D +/RO {WB -1 SS /CF 0 D 0 FS} D +/SY {WB -1 SS -1 FS} D +/MY {WB -1 SS -2 FS} D +/ES {WB /SL SL 1 sub NN D /CF 0 D /FN FO SL get D SZ SL get FR SL get FS ()Ec}D +/FZ {3 sub 1.2 E exp GS mul E WB TL /C1 C1 ( Cp ) join D /SL SL 1 add D 0 FS} D +/Ef {WB TL ()ES /C1 C1 ( Cp ) join D} D +/BZ {dup /Bf E D FZ}D +/Sc {dup -1 ne Cf and{/CL CL 1 add D dup 0 eq{pop [0 0 0]}if + dup CA E CL E put VS ( VC ) join C1 E join /C1 E D}{pop}ie} D +/Ec {WB Cf{/CL CL 1 sub NN D CA CL get VS ( VC ) join C1 E join /C1 E D}if} D +/VS {dup type /arraytype eq{([) E {ST cvs join ( ) join}forall (]) join}if} D +/VC {{255 div}forall setrgbcolor} D +/Sl {dup type /integertype ne{Ds}if /La E D WB}d +/UN {WB /UF t D} D +/NU {WB /UF f D} D +/SE {WB /sF t D} D +/XE {WB /sF f D} D +/sM {/C1 C1 ( k1 ) join D}d +/eM {/C1 C1 ( k2 ) join D}d +/k1 {/YC CP E pop Ts add D /mF t D /f1 t D}d +/k2 {gsave 3 LW -9 CP E pop Ts 0.2 mul sub M -9 YC L stroke grestore /mF f D}d +/Ac {/AC E D WB}d +/Ca {eA{( \()join AC join(\) )join}if WB}d +/s {OU{gsave 0 CS .25 mul R dup SW pop CJ 0 RL stroke grestore}if}D +/CJ {AT 3 eq LB and{E dup dup length 1 sub A1 mul E + {( ) search{pop pop E A2 add E}{pop exit}ie}loop 3 -1 roll add + W CP pop sub 2 copy gt{E}if pop}if}D +/So {/Co E D} D +/SO {C1 Yo ST cvs join ( So ) join /C1 E D (j) SW pop 2 div Pd} D +/Se {E WB CS E div Pd}D +/Pd {dup type /stringtype eq{SW pop}if dup /L1 E L1 add D + ST cvs ( 0 R ) join C1 E join /C1 E D} D +/Sp {0.35 CO} D +/Sb {-0.2 CO} D +/CO {OV Io Yo put /Yo E CS mul Yo add D /Io Io 1 add D -1.5 Io mul 3 add FZ SO + CS Yo add dup YA gt{/YA E D}{pop}ie + Yo neg dup YB gt{/YB E D}{pop}ie} D +/Es {ES /Io Io 1 sub NN D /Yo OV Io get D SO} D +/SB {/N2 0 D 0 1 NI{/N E D{IX N2 get 0 lt{/N2 N2 1 add D}{exit}ie}loop + /K WS N get FC N get mul D /NY AY N2 get D /BV NY array D + 0 1 NY 1 sub{/TM K string D currentfile TM readhexstring pop pop BV E TM put} + for BM N BV put /N2 N2 1 add D}for} D +/IC [{/MA E D /MB 0 D}{2 div /MA E D /MB MA D}{/MB E CS sub D /MA CS D} + {pop /MA YS AB mul D /MB 1 AB sub YS mul D}{pop /MA 0 D /MB 0 D}] D +/IP {BV N get /N N 1 add D} D +/II {/K E D IX K get 0 lt{/EC E D}if /TY E D + TY 4 eq{/Y E D /X E D}if TY 3 eq{/AB E D}if + /XW AX K get D /YW AY K get D /IS SG IT K get get D /XS XW IS mul D + /YS YW IS mul D YS IC TY get exec /MA MA Fl not{3 add}if D} D +/IM {II /ty TY D /xs XS D /ys YS D /ya YA D /yb YB D /ma MA D /mb MB D /k K D + /ec EC D /BP f D /CI 0 D WB TL L1 xs add dup XO add MR add W gt + {pop /ma ma Fl{3 add}if D NL /YA ma D /YB mb D /YS ys D /L1 xs D} + {/L1 E D ma YA gt{/YA ma D}if mb YB gt{/YB mb D}if}ie /TB f D + OU{CP E pop YS sub LE neg lt Fl not and PB not and{NP /YA ma D /YB mb D}if + /BP f D ty ST cvs ( ) join IX k get 0 lt{(\() join ec join (\) ) join}if + k ST cvs join ty 3 eq{AB ST cvs ( ) join E join}if + ty 4 eq{X ST cvs ( ) join Y ST cvs join ( ) join E join}if C1 E join + ( DI ) join FP 2 eq FP 1 eq AF and or{( FM ) join}if + ( Il Cp ) apa /C1 E D /EN f D}if /HM t D /T f D} D +/DI {II /Xc CP /Yc E D D /YN YW neg D /HM t D /CI 0 D /K2 IX K get D gsave + TY 4 eq{OX X IS mul add OY FY add YS sub Y IS mul sub} + {/FY YS D CP MB sub 2 copy /OY E D /OX E D}ie + translate K2 0 ge{/DP AZ K2 get D /BV BM K2 get D XS YS scale /N 0 D XW YW DP + [XW 0 0 YN 0 YW] {IP} FC K2 get 1 eq{image}{f 3 colorimage}ie} + {EX}ie grestore XS 0 R /Ms t D} D +/FM {gsave 0 Sg CP MB sub translate XS neg 0 M 0 YS RL XS 0 RL 0 YS neg RL + XS neg 0 RL stroke grestore} D +/NA {/AT E D /AL AL 1 add D AV AL AT put} D +/OA {AL 0 gt{/AL AL 1 sub D /AT AV AL get D}if} D +/D1 {/BR {CP E pop E BN Mb{CP E pop eq{0 YI R}if}{pop}ie} D + /Sn {OU{C1 E ST cvs join ( Ld ) join /C1 E D}{pop}ie} D} D +/D1 {/BR {BN} D /Sn {OU {C1 E ST cvs join ( Ld ) join /C1 E D} {pop} ie} D} D +/TC {/TF t D /ML 0 D HN{SW pop dup ML gt{/ML E D}{pop}ie}forall NP /RM RM not D + RC /OU Tc D Ep /PN 0 D Ms not TP and{Ip}if /W IW ML sub Ts sub D + /A0 0 D TH{/BR {( ) join BT} D /Sn {pop} D /Au () D}if} D +/TN {0 eq{E EA PF HF or not XR and{HN E get Xr}{pop}ie} + {OU{Tn 0 ge{() BN}if /Tn E D}{pop}ie WB}ie} D +/NT {OU LB not and Tn 0 ge and{PL 0 eq{Ms not{CS CF FS}if CP dup + /y E YA sub D W 9 sub CS -1.8 mul XO L1 add 2 add{y M (.) show}for + HN Tn get dup SW pop IW E sub y M show CP BB M}if /Tn -1 D}if} D +/Ld {/DN E D HN DN Pn put [/View [/XYZ -4 Fl{PS}{CP YA add US E pop}ie null] + /Dest DN ST cvs cvn /DEST pdfmark} D +/C {ND 1 eq{1 sub}if TI mul /XO E D NL Nf not{pop()}if 0 3 -1 roll 1 A} D +/OP {BP not{NP}if PN 2 mod 0 eq{/Ms t D NP}if}D +/Ep {Xp PN 2 mod 0 eq and OU and{/Pn (-) D showpage /PM 1 D LA}if}D +/Dg [73 86 88 76 67 68 77] D +/Rd [0 [1 1 0][2 1 0][3 1 0][2 1 1][1 1 1][2 2 1][3 3 1][4 4 1][2 1 2]] D +/Ns {/m E D /c E 32 mul D /j m 1000 idiv D /p j 12 add string D + c 96 le m 0 gt and{c 32 le {/i 0 D /d 77 D /l 100 D /m m j 1000 mul sub D + j -1 1 {pop p i d c add put /i i 1 add D}for + 4 -2 0 {/j E D /n m l idiv D /m m n l mul sub D /d Dg j get D + n 0 gt {/x Rd n get D x 0 get -1 1 {pop p i d c add put /i i 1 add D}for + p i x 1 get sub Dg x 2 get j add get c add put}if /l l 10 idiv D + }for p 0 i GI} + {/i ST length 1 sub D m {1 sub dup 0 ge{dup 26 mod c add 1 add + ST i 3 -1 roll put 26 idiv dup 0 eq{pop exit}if}if /i i 1 sub D}loop + ST i ST length i sub GI}ie} + {m p cvs}ie} D +/US {matrix currentmatrix matrix defaultmatrix matrix invertmatrix + matrix concatmatrix transform} D +/GB {Gb{US}if}D +/Tl {/Rn E D Xc CP pop ne{ + [/Rect [Xc 1 sub Yc cS 0.25 mul sub GB CP E 1 add E cS 0.85 mul add GB] + /Subtype /Link /Border [0 0 Cf Lc and LX and AU or{0}{1}ie] Rn type + /nametype eq {/Dest Rn}{/Action [/Subtype /URI /URI Rn] Cd}ie + /ANN pdfmark}if} D +/Il {/Rn E D [/Rect [Xc Yc GB Xc XS add Yc YS add GB] /Subtype /Link + /Border [0 0 0] Rn type /nametype eq{/Dest Rn} + {/Action [/Subtype /URI /URI Rn] Cd}ie /ANN pdfmark} D +/XP {[{/Z Bz 2 div D Z 0 R Z Z RL Z neg Z RL Z neg Z neg RL Z Z neg RL + Fi cH 1 eq and{fill}if} {Bz 0 RL 0 Bz RL Bz neg 0 RL 0 Bz neg RL + Fi cH 1 eq and{fill}if} {0 -5 R Bz 0 RL 0 21 RL Bz neg 0 RL 0 -21 RL}]} D +/MS {/Sm E D WB}D +/O {BN()0 Sm BX} D +/BX {/Bt E D Bt 2 lt{/Ch E D CS 0.8 mul}{11 mul}ie W XO sub MR sub + 2 copy gt{E}if pop /HZ E D Bt 2 eq{Fi not{pop()}if ( )E join /Ft E D TT + /PF t D /MW 1 D /Li 1 D /Fw Ft SW pop D Fw HZ gt{/HZ Fw 8 add D}if + HZ ST cvs( )join}{WB Ch ST cvs( )join}ie L1 HZ add XO add MR add W gt{NL}if + Bt 2 eq{Ft ES Fw neg HM{CS sub}if Pd}if Bt ST cvs join( Bx )join + Bt 2 eq HM and{CS Pd}if C1 E join /C1 E D /L1 L1 HZ add D /T f D + ( ) Pd /PF f D Bt 2 lt{YA CS .8 mul lt{/YA CS .8 mul D}if} + {YB 5 lt{/YB 5 D}if YA 21 lt{/YA 21 D}if}ie /CI 0 D} D +/Bx {dup 2 eq{E /Bz E D}{E /cH E D /Bz CS .8 mul D}ie + OU {gsave 0 Sg XP E get exec stroke grestore}{pop}ie Bz 0 R /Ms t D}D +/SD {FD 4 mul Dy add DZ NF newpath 0 0 M DX t charpath pathbbox + 3 -1 roll sub /DY E D E dup /X1 E D sub WM mul WX DY mul add WM DG mul E div + /DF E D /DR WX DF mul DY mul WM div 2 div D} d +/Sd {gsave 0 IL Di mul neg translate IL IW atan Di 0 eq{neg}if rotate + FD 4 mul Dy add DZ NF DR X1 sub DY 2 div neg M cD VC DX show grestore} d +/Pt {/tp t D Tp{NP /Pn (TP) D 0 Tt neg R Th BN NP Ep ET RC ZF}if /tp f D} D +/RC {/AI 0 D /LG 0 D /BC 0 D /UI 0 D /PF f D /Cc 0 D /cC 0 D /Dc 10 array D + /NR [0 1 9{pop 0}for] D /La Ds D /AR 10 array D /TR 10 array D /AV 30 array D + SI /AL -1 D /AT A0 D AT NA /OV 9 array D /Yo 0 D /Co 0 D /Io 0 D /Hy f D + /Ph f D /CL -1 D Ct Sc}D +/ZF {/FR [0 1 30{pop 0}for] D /SZ [0 1 30{pop 0}for] D /FO [0 1 30{pop 0}for] D + /SL 0 D /CF 0 D /FN 0 D 0 Ts SF}D +/QO [[(\234)(\233)(\253\240)(\232)(\273)(\253)][(')(`)(\253\240)(\231)(\273)(\253)]] D +/QC [[(\234)(\234)(\240\273)(\233)(\253)(\273)][(')(')(\240\273)(`)(\253)(\273)]] D +/Hf EF length 2 sub D +/Hz EZ Hf get D +/HS Ey Hf get D +/Fz EZ Hf 1 add get D +/Fs Ey Hf 1 add get D +/LE IL D +/Ps EZ 1 get D +/Fp EF 1 get D +/XO 0 D +/YI 0 D +/CI 0 D +/FP 0 D +/WW Ts 7 mul D +/Mf 0 D +/YA 0 D +/YB 0 D +/Cs Ts D +/GS Ts D +/F0 0 D +/NS 0 D +/NB 0 D +/N 0 D +/C0 [] D +/C1 () D +/Lo 0 D +/L1 0 D +/LM 0 D +/PH 0 D +/EC 0 D +/Lh 0 D +/LT 0 D +/CH 1 string D +/ST 16 string D +/CA 9 array D +/HC (\255) D +/HM f D +/PF f D +/EN f D +/TB f D +/UF f D +/sF f D +/AE f D +/AF f D +/BP t D +/CD f D +/PA t D +/GL f D +/T t D +/HF f D +/AH f D +/SA f D +/PB f D +/f1 f D +/mF f D +/OX 0 D +/OY 0 D +/FY 0 D +/EO 0 D +/FB 0 D +/PL 0 D +/Bw 0 D +/PD -1 D +/TP f D +/tp f D +/TH t D +/Ty 4 D +/Tn -1 D +/Fl t D +/LB t D +/PM 1 D +/Ms f D +/Ba f D +/Bb f D +/Hl 3 D +/hl 6 D +/Hv 6 D +/Hs f D +/HI 0 D +/hi 0 D +/PO t D +/TE f D +/LF t D +/BO 0 D +/Sm 1 D +/Bf 3 D +/A1 0 D +/A2 0 D +/Ds 1 D +/QL -1 D +/Cb Db D +/Ct Dt D +/Cl Dl D +[/Creator (html2ps version 1.0 beta5) /Author () /Keywords (xsd, xml, schema, c++, mapping, data, binding, parsing, serialization, validation) /Subject () + /Title (C++/Tree Mapping Getting Started Guide) /DOCINFO pdfmark +/ND 1 D +/HN [(1) (1) (1) (1) (1) (1) (1) (2) (2) (3) (3) (5) (6) (7) (8) (11) (13) (15) +(16) (16) (16) (17) (17) (20) (22) (24) (26) (29) (??) (31) (32) (34) (36) +(37) (38) (1) (1) (1) (1) (2) (2) (3) (3) (5) (6) (7) (8) (11) (13) (15) +(16) (16) (16) (17) (17) (20) (22) (24) (26) (29) (31) (32) (34) (36) (37) +(38)] D +/h0 [()(Table of Contents)] D +/h1 [(1\240\240)(Preface)] D +/h2 [(1.1\240\240)(About This Document)] D +/h3 [(1.2\240\240)(More Information)] D +/h4 [(2\240\240)(1 Introduction)] D +/h5 [(2.1\240\240)(1.1 Mapping Overview)] D +/h6 [(2.2\240\240)(1.2 Benefits)] D +/h7 [(3\240\240)(2 Hello World Example)] D +/h8 [(3.1\240\240)(2.1 Writing XML Document and Schema)] D +/h9 [(3.2\240\240)(2.2 Translating Schema to C++)] D +/h10 [(3.3\240\240)(2.3 Implementing Application Logic)] D +/h11 [(3.4\240\240)(2.4 Compiling and Running)] D +/h12 [(3.5\240\240)(2.5 Adding Serialization)] D +/h13 [(3.6\240\240)(2.6 Selecting Naming Convention)] D +/h14 [(3.7\240\240)(2.7 Generating Documentation)] D +/h15 [(4\240\240)(3 Overall Mapping Configuration)] D +/h16 [(4.1\240\240)(3.1 Character Type and Encoding)] D +/h17 [(4.2\240\240)(3.2 Support for Polymorphism)] D +/h18 [(4.3\240\240)(3.3 Namespace Mapping)] D +/h19 [(4.4\240\240)(3.4 Thread Safety)] D +/h20 [(5\240\240)(4 Working with Object Models)] D +/h21 [(5.1\240\240)(4.1 Attribute and Element Cardinalities)] D +/h22 [(5.2\240\240)(4.2 Accessing the Object Model)] D +/h23 [(5.3\240\240)(4.3 Modifying the Object Model)] D +/h24 [(5.4\240\240)(4.4 Creating the Object Model from Scratch)] D +/h25 [(5.5\240\240)(4.5 Mapping for the Built-in XML Schema Types)] D +/h26 [(6\240\240)(5 Parsing)] D +/h27 [(6.1\240\240)(5.1 XML Schema Validation and Searching)] D +/h28 [(6.2\240\240)(5.2 Error Handling)] D +/h29 [(7\240\240)(6 Serialization)] D +/h30 [(7.1\240\240)(6.1 Namespace and Schema Information)] D +/h31 [(7.2\240\240)(6.2 Error Handling)] D +/Hr [35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 +57 58 59 60 61 62 63 64 65]D +/HV [1 2 2 1 2 2 1 2 2 2 2 2 2 2 1 2 2 2 2 1 2 2 2 2 2 1 2 2 1 2 2]D +/Cn [2 0 0 2 0 0 7 0 0 0 0 0 0 0 4 0 0 0 0 5 0 0 0 0 0 2 0 0 2 0 0]D +Hr length 0 gt{[/PageMode /UseOutlines /DOCVIEW pdfmark}if +/Hn 1 D +0 1 Hr length 1 sub{ + /Bn E D [Cn Bn get dup 0 gt{/Count E HV Bn get Bl ge{neg}if}{pop}ie + /Dest Hr Bn get dup abs ST cvs cvn E 0 ge{(h)Hn ST cvs join cvx exec + dup 1 get E Nf{0 get E join}{pop}ie /Hn Hn 1 add D}{()}ie + /Title E dup length 255 gt{0 255 getinterval}if /OUT pdfmark}for +ZF /FN Fp D Ps 0 FS /WC Wf{( )}{<A1A1>}ie SW pop D +ET RC ZF +/Df f D +/R0 (http://www.codesynthesis.com/licenses/fdl-1.2.txt) D +/R1 (http://www.codesynthesis.com/projects/xsd/documentation/cxx/tree/guide/index.xhtml) D +/R2 (http://www.codesynthesis.com/projects/xsd/documentation/cxx/tree/guide/cxx-parser-guide.pdf) D +/R3 (http://www.codesynthesis.com/projects/xsd/documentation/cxx/tree/guide/cxx-parser-guide.ps) D +/R1 (http://www.codesynthesis.com/projects/xsd/documentation/cxx/tree/manual/) D +/R2 (http://wiki.codesynthesis.com/Tree/Customization_guide) D +/R3 (http://www.codesynthesis.com/projects/xsd/documentation/cxx/tree/dbxml/) D +/R4 (http://wiki.codesynthesis.com/Tree/FAQ) D +/R5 (http://www.codesynthesis.com/projects/xsd/documentation/xsd.xhtml) D +/R6 (http://www.codesynthesis.com/mailman/listinfo/xsd-users) D +/R7 (http://www.codesynthesis.com/pipermail/xsd-users/) D +/R8 (http://www.w3.org/TR/xmlschema-0/) D +/R9 (http://www.doxygen.org/) D +/R10 (http://www.codesynthesis.com/projects/xsd/documentation/cxx/tree/hello/html/annotated.html) D +/R11 (http://www.codesynthesis.com/projects/xsd/documentation/cxx/tree/manual/#2.11) D +/R12 (http://www.codesynthesis.com/projects/xsd/documentation/cxx/tree/manual/#2.8) D +/R13 (http://www.codesynthesis.com/projects/xsd/documentation/cxx/tree/manual/#2.5) D +/R14 (http://www.codesynthesis.com/projects/xsd/documentation/cxx/tree/manual/#2.9) D +/R15 (http://www.codesynthesis.com/projects/xsd/documentation/cxx/tree/manual/#3) D +/R16 (http://www.codesynthesis.com/projects/xsd/documentation/cxx/tree/manual/#3.3) D +/R17 (http://www.codesynthesis.com/projects/xsd/documentation/cxx/tree/manual/#4) D +/R18 (http://www.codesynthesis.com/projects/xsd/documentation/cxx/tree/manual/#4.4) D +/TS { + tables E get /table E D + table aload pop /rdesc E D /cdesc E D /tdesc E D + tdesc aload pop /capalg E D /caption E D /rules E D /frame E D /nfoot E D + /nhead E D /ncol E D /nrow E D /border E D /twid E D /units E D /talign E D + /flow E D /clear E D /tclass E D pop pop + /w W D /eps 0.1 D /OU f D /PL 1 D + /FN EF 21 get D EZ 21 get Ey 21 get FS + 0 1 1{ + /pass E D + 0 1 nrow{ + /irow E D + /cells rdesc irow get 6 get D + 0 1 ncol{ + /icol E D + /cell cells icol get D + cell 0 ne{ + cell aload pop /ang E D /CB E D pop pop pop + /DV E D /bot E D /top E D /right E D /left E D /nowrap E D /valign E D + /dp E D /align E D /rspan E D /cspan E D /cclass E D /ctype E D /cmax E D + /cmin E D /proc E D + rspan 0 eq{/rspan nrow irow sub 1 add D}if + cspan 0 eq{/cspan ncol icol sub 1 add D}if + pass 0 eq cspan 1 eq and pass 1 eq cspan 1 gt and or{ + /W 1e5 D /LL W D /PH 1 D + ctype 1 eq{() BD}if + RC align NA + AT 4 eq{/CD t D /DC dp D /LN 0 D /M1 0 D /M2 0 D}{/CD f D}ie + 0 0 M /LM 0 D proc exec BN + AT 4 eq{ + LN array astore cell 15 3 -1 roll put + cdesc icol get dup dup 5 get M1 lt{5 M1 put}{5 get /M1 E D}ie + dup 6 get M2 lt{6 M2 put}{6 get /M2 E D}ie + /LM M1 M2 add D + }if + /CD f D + ang 0 ne{/LM CP E pop neg D}if + /thiswid LM left add right add eps add D + /oldmin 0 D /oldmax 0 D + 0 1 cspan 1 sub{ + icol add cdesc E get dup 2 get /oldmax E oldmax add D + 1 get /oldmin E oldmin add D + }for + thiswid oldmax ge{ + 0 1 cspan 1 sub{ + icol add cdesc E get dup 2 E 2 get oldmax 0 eq + {pop thiswid cspan div}{thiswid mul oldmax div}ie + put + }for + }if + nowrap 1 eq{ + thiswid oldmin ge{ + 0 1 cspan 1 sub{ + icol add cdesc E get dup 1 E 1 get oldmin 0 eq + {pop thiswid cspan div}{thiswid mul oldmin div}ie + put + }for + }if + }{ + /W 0 D /LL W D /PH 2 D + ctype 1 eq{() ES () BD}if + 0 0 M /LM 0 D RC proc exec BN + /thiswid LM left add right add eps add D + thiswid oldmin ge{ + 0 1 cspan 1 sub{ + icol add cdesc E get dup 1 E 1 get oldmin 0 eq + {pop thiswid cspan div}{thiswid mul oldmin div}ie + put + }for + }if + }ie + ctype 1 eq{() ES}if + }if + }if + }for + }for + }for + /tmin 0 D /tmax 0 D + 0 1 ncol{ + cdesc E get dup 1 get E 2 get 2 copy gt{pop dup}if + tmax add /tmax E D tmin add /tmin E D + }for + twid 0 lt{twid neg IW gt{IW neg}{twid}ie /twid E D}if + tdesc 0 twid neg tmin 2 copy lt{E}if pop put + tdesc 1 twid neg tmax 2 copy lt{E}if pop put + /W w D /LL W D /OU t D /PH 0 D /PL 0 D +} D +/PT { + /PL PL 1 add D + tables E get /table E D Tm 21 get Ts mul BE + PL 2 ge{save}if + /SL SL 1 add D /FN EF 21 get D EZ 21 get Ey 21 get FS + table aload pop /rdesc E D /cdesc E D /tdesc E D + tdesc aload pop /capalg E D /caption E D /rules E D /frame E D /nfoot E D + /nhead E D /ncol E D /nrow E D /border E D /twid E D /units E D /talign E D + /flow E D /clear E D /tclass E D /tmax E D /tmin E D + /w W D /xo XO D /mr MR D /ll LL D /lg LG D /ai AI D /bc BC D /nr NR D /ar AR D + /tr TR D /ui UI D /ph PH D /a0 A0 D /pf PF D /at AT D /av AV D /al AL D + /Le LE D /la La D + talign 0 lt{/talign AL 0 gt{AV AL get}{A0 2 le{A0}{0}ie}ie D}if + ph 1 eq ph 2 eq or{ + NL ph 1 eq{tmax}{tmin}ie dup XO add LM gt{/LM E XO add D}{pop}ie LM E + }{ + /PH 3 D /LE 1e5 D RC %ZF + border 0 gt{/border 1 D}if + /twidth 0 D /avail W xo sub D + twid 0 eq{0 1 ncol{cdesc E get dup 2 get E 3 get dup 0 gt{div neg dup twid lt + {/twid E D}{pop}ie}{pop pop}ie}for}if + /twid twid dup 0 lt{neg avail 2 copy gt{E}if pop}{avail mul}ie D + /OK t D 0 1 ncol{cdesc E get dup 1 get E 3 get twid mul gt{/OK f D}if}for + 0 1 ncol{ + cdesc E get dup 1 get /colmin E D dup 3 get /cwid E twid mul D dup + tmax avail le{2 get}if + tmin avail le tmax avail gt and{ + dup 2 get E 1 get dup 3 1 roll sub avail tmin sub mul tmax tmin sub div add + }if + tmin avail gt{1 get}if + 0 E colmin cwid lt OK and{pop cwid}if dup /twidth E twidth add D put + }for + /OU f D CP + tmin twid le{ + 0 1 ncol{cdesc E get dup 0 get twidth div twid mul 0 E put}for + /twidth twid D + }if + CP printcap CP E pop sub /caphig E D pop + 0 1 1{ + /pass E D + 0 1 nrow{ + /irow E D + /cells rdesc irow get 6 get D + 0 1 ncol{ + /icol E D + /cell cells icol get D + cell 0 ne{ + cell aload pop /ang E D /CB E D pop pop pop + /DV E D /bot E D /top E D /right E D /left E D /nowrap E D /valign E D + /dp E D /align E D /rspan E D /cspan E D /cclass E D /ctype E D /cmax E D + /cmin E D /proc E D + rspan 0 eq{/rspan nrow irow sub 1 add D}if + cspan 0 eq{/cspan ncol icol sub 1 add D}if + /W 0 D + 0 1 cspan 1 sub{icol add cdesc E get 0 get /W E W add D}for + pass 0 eq rspan 1 eq and pass 1 eq rspan 1 gt and or{ + ctype 1 eq{() BD}if + /W W left sub right sub D /XO 0 D /EO 0 D SI + /A0 align D RC align NA + AT 4 eq{ + /DC dp D /DO 0 D /ID 1 D + 0 1 DV length 1 sub{DV E get dup DO gt{/DO E D}{pop}ie}for + /Lo DO DV 0 get sub D /L1 Lo D + }if + 0 0 M /BP t D /Fl t D /MF 0 D /FB 0 D + proc exec T not{/CI 0 D}if BN 0 FB neg R MF 0 eq{/MF CS D}if + CP /thishig E neg bot add top add CI add D pop + ang 0 ne{/thishig LM bot add top add D}if + cell 16 MF put cell 17 Ya put cell 18 thishig put + valign 4 eq{ + /below thishig Ya sub D + rdesc irow get dup dup 4 get Ya lt + {4 Ya put}{4 get /Ya E D}ie + dup 5 get below lt{5 below put}{5 get /below E D}ie + /thishig Ya below add D + }if + ctype 1 eq{()ES}if + /oldhig 0 D + 0 1 rspan 1 sub{ + irow add rdesc E get 0 get /oldhig E oldhig add D + }for + thishig oldhig ge{ + 0 1 rspan 1 sub{ + irow add rdesc E get dup 0 E 0 get oldhig 0 eq + {pop thishig rspan div}{thishig mul oldhig div}ie + put + }for + }if + }if + }if + }for + }for + }for M RC %ZF + /thight 0 D /racc 0 D /maxh 0 D /brk 0 D /rbeg nhead nfoot add D + 0 1 nrow{ + rdesc E get dup 0 get dup /thight E thight add D + brk 0 eq{/racc E D}{/racc E racc add D}ie + racc maxh gt{/maxh racc D}if 2 get /brk E D + }for + ph 3 ge{thight caphig add E}if + ph 0 eq ph 4 eq or{ + /PH 4 D /LE Le D /OU Ou D /yoff 0 D /headsz 0 D + 0 1 nhead 1 sub{rdesc E get 0 get headsz add /headsz E D}for + /footsz 0 D + 0 1 nfoot 1 sub{rdesc E nhead add get 0 get footsz add /footsz E D}for + /ahig LE BO add MI add D /maxh maxh headsz add footsz add D + /thight thight headsz add footsz add D + tmin avail gt maxh ahig gt or + {/Sf avail tmin div dup ahig maxh div gt{pop ahig maxh div}if D /SA t D} + {/Sf 1 D}ie + tclass 1 eq thight LE 15 sub gt and + {/SA t D LE 15 sub thight div dup Sf lt{/Sf E D}{pop}ie}if + SA{Sf Sf scale /ll ll Sf div D /xo xo Sf div D /LE LE Sf div D + /mr mr Sf div D /BO BO Sf div D /ahig ahig Sf div D}if + nhead nfoot add getwid + LE CP E pop add capalg 0 eq{caphig sub}if + bT{f}{dup thight lt thight ahig lt and}ie + E headsz sub footsz sub rwid lt or{NP}if + capalg 0 eq{printcap -8 SP}if + CP /ycur E D pop + printhead + rbeg 1 nrow{/row E D row + getwid + ycur yoff add rwid sub footsz sub LE add 0 lt + {nfoot 0 gt{printfoot}if Tf NP /rbeg irow1 D + Ba{MI /MI MI SA{Sf div}if D MI SP /MI E D}if + CP /ycur E D pop /yoff 0 D printhead}if + irow1 printrow + }for + printfoot /row row 1 add D Tf + 0 ycur yoff add M + capalg 1 eq{/EO 0 D SI -3 SP printcap}if + Sf 1 lt{1 Sf div dup scale /ll ll Sf mul D /xo xo Sf mul D /LE LE Sf mul D + /mr mr Sf mul D /BO BO Sf mul D /SA f D}if + /EO 0 D + }if + }ie + /W w D /XO xo D /MR mr D /LL ll D /LG lg D /AI ai D /BC bc D /NR nr D /AR ar D + /TR tr D /UI ui D /PH ph D /A0 a0 D /PF pf D /AT at D /AV av D /AL al D + /La la D + /SL SL 1 sub NN D /CF 0 D /FN 0 D SZ SL get FR SL get FS Wf not{()F2}if + PL 2 ge{Ms E restore Ms or /Ms E D PH 1 eq PH 2 eq or + {/LM E D}if PH 3 ge{/CI 0 D NL 0 E neg R}if + }if + /PL PL 1 sub D /CI 0 D /BP f D /PO f D () Bm 21 get Ts mul BE BL %CF CS SF +} D +/printcap{ + capalg 0 ge{ + SA{/W w Sf div D} + {talign 1 eq{/XO xo ll twidth sub 2 div add D}if + talign 2 eq{/XO xo ll twidth sub add D}if + /W XO twidth add D + }ie /XO xo D /LL W XO sub MR sub D + /PA f D /Fl capalg 0 eq D + 1 NA BL caption exec BN OA /PA t D + }if +} D +/getwid{ + /irow1 E D + /irow2 irow1 D + /rwid 0 D + {rdesc irow2 get dup 0 get rwid add /rwid E D 2 get 0 eq + {exit}{/irow2 irow2 1 add D}ie + }loop +} D +/printrow{ + /xoff ll twidth PL 2 ge{Sf div}if sub talign mul 2 div D + /xleft xoff xo add D + /irow E D + /cells rdesc irow get 6 get D + 0 1 ncol{ + /icol E D + /cell cells icol get D + cell 0 ne{ + cell aload pop /ang E D /CB E D /cvsize E D /above E D /fontsz E D + /DV E D /bot E D /top E D /right E D /left E D /nowrap E D /valign E D + /dp E D /align E D /rspan E D /cspan E D /cclass E D /ctype E D /cmax E D + /cmin E D /proc E D + rspan 0 eq{/rspan nrow irow sub 1 add D}if + cspan 0 eq{/cspan ncol icol sub 1 add D}if + /width 0 D + 0 1 cspan 1 sub{icol add cdesc E get 0 get /width E width add D}for + /rhight rdesc irow get 0 get D + /hight rhight D + 1 1 rspan 1 sub{irow add rdesc E get 0 get /hight E hight add D}for + /W xo xoff add width add right sub D + ang 0 ne{/W xo xoff add hight add right sub D}if + /EO xo xoff add left add D SI + Cf{ + gsave CB VC xo xoff add ycur yoff add M + 0 hight neg RL width 0 RL 0 hight RL width neg 0 RL fill + grestore + }if + ctype 1 eq{() BD}if + /A0 align D RC + AT 4 eq{ + /DC dp D /ID 1 D /DO cdesc icol get 5 get D /Lo DO DV 0 get sub D /L1 Lo D + }if + ang 0 ne{ + gsave ang 90 eq + {xoff ycur add hight cvsize sub 2 div sub ycur hight sub xoff sub} + {xoff ycur sub width add hight cvsize sub 2 div add ycur xoff add}ie + translate ang rotate + }if + valign 3 le{0 ycur yoff add top sub + hight cvsize sub valign 1 sub mul 2 div sub M} + {0 ycur yoff add top sub above add rdesc irow get 4 get sub M}ie + /PA f D /BP t D /Fl t D + BL proc exec BN + ang 0 ne{grestore}if + /PA t D + ctype 1 eq{() ES}if + }if + /xoff xoff cdesc icol get 0 get add D + }for + /yoff yoff rhight sub D +} D +/printhead {0 1 nhead 1 sub{printrow}for} D +/printfoot {nhead 1 nhead nfoot add 1 sub{printrow}for} D +/Tf { + OU{rules 2 ge{/yoff 0 D + gsave 0 Sg + [0 1 nhead 1 sub{}for rbeg 1 row 1 sub{}for nhead 1 nhead nfoot add 1 sub{}for]{ + /irow E D + /xoff ll twidth PL 2 ge{Sf div}if sub talign mul 2 div D + /cells rdesc irow get 6 get D + 0 1 ncol{ + /icol E D + /cell cells icol get D + cell 0 ne{ + /rspan cell 6 get D + /cspan cell 5 get D + rspan 0 eq{/rspan nrow irow sub 1 add D}if + cspan 0 eq{/cspan ncol icol sub 1 add D}if + /width 0 D + 0 1 cspan 1 sub{icol add cdesc E get 0 get /width E width add D}for + /rhight rdesc irow get 0 get D + /hight rhight D + 1 1 rspan 1 sub{irow add rdesc E get 0 get /hight E hight add D}for + xo xoff add width add ycur yoff add M + 0 hight neg icol cspan add 1 sub ncol lt + {cdesc icol 1 add get 4 get dup rules 3 le{1 eq}{pop t}ie + {1 eq{0.8}{0.3}ie + LW RL CP stroke M}{pop R}ie}{R}ie + irow nhead nfoot add 1 sub ne nfoot 0 eq or + {irow rspan add 1 sub nrow lt + {rdesc irow rspan add get 3 get}{nfoot 0 eq{0}{1}ie}ie + dup rules 2 mod 0 eq{1 eq}{pop t}ie + {1 eq irow rspan add nhead eq or irow rspan add row eq nfoot 0 gt and or + {0.8}{0.3}ie LW width neg 0 RL CP stroke M}{pop}ie}if + }if + /xoff xoff cdesc icol get 0 get add D + }for + /yoff yoff rhight sub D + }forall + grestore + /Ms t D + }if + frame 1 gt{ + gsave + 1 LW 0 Sg + xleft ycur M CP BB + 0 yoff frame 5 eq frame 7 ge or{RL}{R}ie + twidth 0 frame 3 eq frame 4 eq or frame 8 ge or{RL}{R}ie CP BB + 0 yoff neg frame 6 ge{RL}{R}ie + twidth neg 0 frame 2 eq frame 4 eq or frame 8 ge or{RL}{R}ie + closepath stroke + grestore + /Ms t D + }if + }if +} D +/tables [[[0 0 0 0 0 -1 0 0 1 55 2 0 0 9 5 {()} -1] + [[0 0 0 0 0 0 0][0 0 0 0 0 0 0][0 0 0 0 0 0 0]] + [[0 0 0 0 0 0 [[{()1 Sl()WB(XML Schema type)} 0 0 1 0 1 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB(Alias in the )SM(xml_schema)ES( names)HY(pace)YH()} 0 0 1 0 1 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB(C++ type + )} 0 0 1 0 1 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(fixed-length inte)HY(gral)YH( types + )} 0 0 1 0 3 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +0 +0 +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(byte)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(byte)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(signed\240char)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(unsigned)HY(Byte)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(unsigned_byte)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(unsigned\240char)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(short)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(short_)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(short)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(unsigned)HY(Short)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(unsigned_short)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(unsigned\240short)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(int)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(int_)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(int)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(unsignedInt)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(unsigned_int)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(unsigned\240int)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(long)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(long_)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(long\240long)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(unsigned)HY(Long)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(unsigned_long)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(unsigned\240long\240long)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(arbi)HY(trary)YH(-length inte)HY(gral)YH( types + )} 0 0 1 0 3 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +0 +0 +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(integer)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(integer)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(long\240long)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(nonPos)HY(i)HY(tiveIn)HY(te)HY(ger)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(non_posi)HY(tive)YH(_integer)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(long\240long)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(nonNeg)HY(a)HY(tiveIn)HY(te)HY(ger)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(non_nega)HY(tive)YH(_integer)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(unsigned long\240long)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(posi)HY(tiveIn)HY(te)HY(ger)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(posi)HY(tive)YH(_integer)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(unsigned long\240long)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(nega)HY(tiveIn)HY(te)HY(ger)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(nega)HY(tive)YH(_integer)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(long\240long)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(boolean types + )} 0 0 1 0 3 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +0 +0 +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(boolean)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(boolean)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(bool)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(fixed-preci)HY(sion)YH( float)HY(ing)YH(-point types + )} 0 0 1 0 3 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +0 +0 +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(float)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(float_)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(float)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(double)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(double_)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(double)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(arbi)HY(trary)YH(-preci)HY(sion)YH( float)HY(ing)YH(-point types + )} 0 0 1 0 3 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +0 +0 +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(decimal)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(decimal)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(double)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(string types + )} 0 0 1 0 3 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +0 +0 +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(string)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(string)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB(type derived from )SM(std::basic_string)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(normal)HY(ized)HY(String)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(normal)HY(ized)YH(_string)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB(type derived from )SM(string)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(token)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(token)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB(type\240derived\240from\240)SM(normal)HY(ized)YH(_string)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(Name)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(name)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB(type derived from )SM(token)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(NMTOKEN)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(nmtoken)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB(type derived from )SM(token)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(NMTO)HY(KENS)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(nmto)HY(kens)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB(type derived from )SM(sequence<nmtoken>)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(NCName)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(ncname)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB(type derived from )SM(name)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(language)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(language)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB(type derived from )SM(token)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(qual)HY(i)HY(fied)YH( name + )} 0 0 1 0 3 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +0 +0 +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(QName)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(qname)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(xml_schema::qname)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(ID/IDREF types + )} 0 0 1 0 3 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +0 +0 +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(ID)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(id)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB(type derived from )SM(ncname)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(IDREF)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(idref)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB(type derived from )SM(ncname)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(IDREFS)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(idrefs)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB(type derived from )SM(sequence<idref>)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(URI types + )} 0 0 1 0 3 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +0 +0 +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(anyURI)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(uri)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB(type derived from )SM(std::basic_string)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(binary types + )} 0 0 1 0 3 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +0 +0 +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(base64Binary)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(base64_binary)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(xml_schema::base64_binary)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(hexBi)HY(nary)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(hex_binary)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(xml_schema::hex_binary)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(date/time types + )} 0 0 1 0 3 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +0 +0 +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(date)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(date)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(xml_schema::date)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(date)HY(Time)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(date_time)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(xml_schema::date_time)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(dura)HY(tion)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(dura)HY(tion)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(xml_schema::dura)HY(tion)YH()ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(gDay)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(gday)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(xml_schema::gday)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(gMonth)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(gmonth)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(xml_schema::gmonth)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(gMon)HY(th)HY(Day)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(gmonth_day)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(xml_schema::gmonth_day)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(gYear)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(gyear)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(xml_schema::gyear)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(gYear)HY(Month)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(gyear_month)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(xml_schema::gyear_month)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(time)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(time)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(xml_schema::time)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(entity types + )} 0 0 1 0 3 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +0 +0 +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(ENTITY)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(entity)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB(type derived from )SM(name)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(ENTI)HY(TIES)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(enti)HY(ties)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB(type derived from )SM(sequence<entity>)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +]] +] D +0 1 0{TS}for RC ZF +/Ba f D /BO 0 D Bs +/UR (/home/boris/work/xsd/xsd/documentation/cxx/tree/guide/index.xhtml) D +/Ti (C++/Tree Mapping Getting Started Guide) D +/Au () D +/Df f D +/ME [] D +Pt +/BO 0 D TC /Ba f D Bs /AU f D /UR () D RC ZF + tH WB +ND 1 gt{Ts 3 mul Np 0()0 C()BD(C++/Tree Mapping Getting Started Guide)ES()0 1 TN()EA()BN}if +1 NH le{35(1\240\240)1 C(Preface)WB 3 Sn()35 1 TN()EA()BN}if +2 NH le{36(1.1\240\240)2 C(About)WB 4 Sn( This Docu)HY(ment)YH()36 1 TN()EA()BN}if +2 NH le{37(1.2\240\240)2 C(More)WB 5 Sn( Infor)HY(ma)HY(tion)YH()37 1 TN()EA()BN}if +1 NH le{38(2\240\240)1 C(1)WB 6 Sn( Intro)HY(duc)HY(tion)YH()38 1 TN()EA()BN}if +2 NH le{39(2.1\240\240)2 C(1.1)WB 7 Sn( Mapping Overview)39 1 TN()EA()BN}if +2 NH le{40(2.2\240\240)2 C(1.2)WB 8 Sn( Bene)HY(fits)YH()40 1 TN()EA()BN}if +1 NH le{41(3\240\240)1 C(2)WB 9 Sn( Hello World Example)41 1 TN()EA()BN}if +2 NH le{42(3.1\240\240)2 C(2.1)WB 10 Sn( Writing XML Docu)HY(ment)YH( and Schema)42 1 TN()EA()BN}if +2 NH le{43(3.2\240\240)2 C(2.2)WB 11 Sn( Trans)HY(lat)HY(ing)YH( Schema to C++)43 1 TN()EA()BN}if +2 NH le{44(3.3\240\240)2 C(2.3)WB 12 Sn( Imple)HY(ment)HY(ing)YH( Appli)HY(ca)HY(tion)YH( Logic)44 1 TN()EA()BN}if +2 NH le{45(3.4\240\240)2 C(2.4)WB 13 Sn( Compil)HY(ing)YH( and Running)45 1 TN()EA()BN}if +2 NH le{46(3.5\240\240)2 C(2.5)WB 14 Sn( Adding Seri)HY(al)HY(iza)HY(tion)YH()46 1 TN()EA()BN}if +2 NH le{47(3.6\240\240)2 C(2.6)WB 15 Sn( Select)HY(ing)YH( Naming Conven)HY(tion)YH()47 1 TN()EA()BN}if +2 NH le{48(3.7\240\240)2 C(2.7)WB 16 Sn( Gener)HY(at)HY(ing)YH( Docu)HY(men)HY(ta)HY(tion)YH()48 1 TN()EA()BN}if +1 NH le{49(4\240\240)1 C(3)WB 17 Sn( Overall Mapping Config)HY(u)HY(ra)HY(tion)YH()49 1 TN()EA()BN}if +2 NH le{50(4.1\240\240)2 C(3.1)WB 18 Sn( Char)HY(ac)HY(ter)YH( Type and Encod)HY(ing)YH()50 1 TN()EA()BN}if +2 NH le{51(4.2\240\240)2 C(3.2)WB 19 Sn( Support for Poly)HY(mor)HY(phism)YH()51 1 TN()EA()BN}if +2 NH le{52(4.3\240\240)2 C(3.3)WB 20 Sn( Names)HY(pace)YH( Mapping)52 1 TN()EA()BN}if +2 NH le{53(4.4\240\240)2 C(3.4)WB 21 Sn( Thread Safety)53 1 TN()EA()BN}if +1 NH le{54(5\240\240)1 C(4)WB 22 Sn( Working with Object Models)54 1 TN()EA()BN}if +2 NH le{55(5.1\240\240)2 C(4.1)WB 23 Sn( Attribute and Element Cardi)HY(nal)HY(i)HY(ties)YH()55 1 TN()EA()BN}if +2 NH le{56(5.2\240\240)2 C(4.2)WB 24 Sn( Access)HY(ing)YH( the Object Model)56 1 TN()EA()BN}if +2 NH le{57(5.3\240\240)2 C(4.3)WB 25 Sn( Modi)HY(fy)HY(ing)YH( the Object Model)57 1 TN()EA()BN}if +2 NH le{58(5.4\240\240)2 C(4.4)WB 26 Sn( Creat)HY(ing)YH( the Object Model from Scratch)58 1 TN()EA()BN}if +2 NH le{59(5.5\240\240)2 C(4.5)WB 27 Sn( Mapping for the Built-in XML Schema Types)59 1 TN()EA()BN}if +1 NH le{60(6\240\240)1 C(5)WB 29 Sn( Parsing)60 1 TN()EA()BN}if +2 NH le{61(6.1\240\240)2 C(5.1)WB 30 Sn( XML Schema Vali)HY(da)HY(tion)YH( and Search)HY(ing)YH()61 1 TN()EA()BN}if +2 NH le{62(6.2\240\240)2 C(5.2)WB 31 Sn( Error Handling)62 1 TN()EA()BN}if +1 NH le{63(7\240\240)1 C(6)WB 32 Sn( Seri)HY(al)HY(iza)HY(tion)YH()63 1 TN()EA()BN}if +2 NH le{64(7.1\240\240)2 C(6.1)WB 33 Sn( Names)HY(pace)YH( and Schema Infor)HY(ma)HY(tion)YH()64 1 TN()EA()BN}if +2 NH le{65(7.2\240\240)2 C(6.2)WB 34 Sn( Error Handling)65 1 TN()EA()BN}if +/OU t D /Cb Db D NP Ep ET +/Cb Db D /Ct [16#00 16#00 16#00] D /Cl [16#00 16#00 16#00] D /CL -1 D Ct Sc + +/Ba f D /BO 0 D Bs +/UR (/home/boris/work/xsd/xsd/documentation/cxx/tree/guide/index.xhtml) D +/Ti (C++/Tree Mapping Getting Started Guide) D +/Au () D +/Df f D +/ME [] D + +NP RC ZF +()1 Sl()WB 0 Sn( + +)BR()WB 1 Sn( )BR()WB 2 Sn( + + + )0 1 0 H(Preface)WB 35 Sn()WB 3 Sn()EA()EH( + + )0 2 1 H(About)WB 36 Sn()WB 4 Sn( This Docu)HY(ment)YH()EA()EH( + + )0 P(The goal of this docu)HY(ment)YH( is to provide you with an under)HY(stand)HY(ing)YH( of + the C++/Tree program)HY(ming)YH( model and allow you to effi)HY(ciently)YH( eval)HY(u)HY(ate)YH( + XSD against your project's tech)HY(ni)HY(cal)YH( require)HY(ments)YH(. As such, this + docu)HY(ment)YH( is intended for C++ devel)HY(op)HY(ers)YH( and soft)HY(ware)YH( archi)HY(tects)YH( + who are looking for an XML process)HY(ing)YH( solu)HY(tion)YH(. For a more in-depth + descrip)HY(tion)YH( of the C++/Tree mapping refer to the + )R1 2 A(C++/Tree + Mapping User Manual)EA(.)EP( + + )0 P(Prior expe)HY(ri)HY(ence)YH( with XML and C++ is required to under)HY(stand)YH( this + docu)HY(ment)YH(. Basic under)HY(stand)HY(ing)YH( of XML Schema is advan)HY(ta)HY(geous)YH( but + not expected or required. + )EP( + + + )0 2 2 H(More)WB 37 Sn()WB 5 Sn( Infor)HY(ma)HY(tion)YH()EA()EH( + + )0 P(Beyond this guide, you may also find the follow)HY(ing)YH( sources of + infor)HY(ma)HY(tion)YH( useful:)EP( + + )UL( )-1 LI()R1 2 A(C++/Tree + Mapping User Manual)EA( + + )-1 LI()R2 2 A(C++/Tree + Mapping Customiza)HY(tion)YH( Guide)EA( + + )-1 LI()R3 2 A(C++/Tree + Mapping and Berke)HY(ley)YH( DB XML Inte)HY(gra)HY(tion)YH( Guide)EA( + + )-1 LI()R4 2 A(C++/Tree + Mapping Frequently Asked Ques)HY(tions)YH( \201FAQ\202)EA( + + )-1 LI()R5 2 A(XSD + Compiler Command Line Manual)EA( + + )-1 LI(The )SM(exam)HY(ples)YH(/cxx/tree/)ES( direc)HY(tory)YH( in the XSD + distri)HY(bu)HY(tion)YH( contains a collec)HY(tion)YH( of exam)HY(ples)YH( and a README + file with an overview of each example. + + )-1 LI(The )SM(README)ES( file in the XSD distri)HY(bu)HY(tion)YH( explains + how to compile the exam)HY(ples)YH( on various plat)HY(forms)YH(. + + )-1 LI(The )R6 2 A(xsd-users)EA( + mailing list is the place to ask tech)HY(ni)HY(cal)YH( ques)HY(tions)YH( about XSD and the C++/Parser mapping. + Further)HY(more)YH(, the )R7 2 A(archives)EA( + may already have answers to some of your ques)HY(tions)YH(. + + )LU( + + + + )0 1 3 H(1)WB 38 Sn()WB 6 Sn( Intro)HY(duc)HY(tion)YH()EA()EH( + + )0 P(Welcome to CodeSyn)HY(the)HY(sis)YH( XSD and the C++/Tree mapping. XSD is a + cross-plat)HY(form)YH( W3C XML Schema to C++ data binding compiler. C++/Tree + is a W3C XML Schema to C++ mapping that repre)HY(sents)YH( the data stored + in XML as a stat)HY(i)HY(cally)YH(-typed, vocab)HY(u)HY(lary)YH(-specific object model. + )EP( + + )0 2 4 H(1.1)WB 39 Sn()WB 7 Sn( Mapping Overview)EA()EH( + + )0 P(Based on a formal descrip)HY(tion)YH( of an XML vocab)HY(u)HY(lary)YH( \201schema\202, the + C++/Tree mapping produces a tree-like data struc)HY(ture)YH( suit)HY(able)YH( for + in-memory process)HY(ing)YH(. The core of the mapping consists of C++ + classes that consti)HY(tute)YH( the object model and are derived from + types defined in XML Schema as well as XML parsing and + seri)HY(al)HY(iza)HY(tion)YH( code.)EP( + + )0 P(Besides the core features, C++/Tree provide a number of addi)HY(tional)YH( + mapping elements that can be useful in some appli)HY(ca)HY(tions)YH(. These + include seri)HY(al)HY(iza)HY(tion)YH( and extrac)HY(tion)YH( to/from formats others than + XML, such as unstruc)HY(tured)YH( text \201useful for debug)HY(ging)YH(\202 and binary + repre)HY(sen)HY(ta)HY(tions)YH( such as XDR and CDR for high-speed data process)HY(ing)YH(, + inte)HY(gra)HY(tion)YH( with XML databases such as Berke)HY(ley)YH( DB XML, and auto)HY(matic)YH( + docu)HY(men)HY(ta)HY(tion)YH( gener)HY(a)HY(tion)YH(. The C++/Tree mapping also provides a wide + range of mech)HY(a)HY(nisms)YH( for control)HY(ling)YH( and customiz)HY(ing)YH( the gener)HY(ated)YH( + code.)EP( + + )0 P(A typical appli)HY(ca)HY(tion)YH( that uses C++/Tree for XML process)HY(ing)YH( usually + performs the follow)HY(ing)YH( three steps: it first reads \201parses\202 an XML + docu)HY(ment)YH( to an in-memory object model, it then performs some useful + compu)HY(ta)HY(tions)YH( on that object model which may involve modi)HY(fi)HY(ca)HY(tion)YH( + of the model, and finally it may write \201seri)HY(al)HY(ize)YH(\202 the modi)HY(fied)YH( + object model back to XML.)EP( + + )0 P(The next chapter presents a simple appli)HY(ca)HY(tion)YH( that performs these + three steps. The follow)HY(ing)YH( chap)HY(ters)YH( show how to use the C++/Tree + mapping in more detail.)EP( + + )0 2 5 H(1.2)WB 40 Sn()WB 8 Sn( Bene)HY(fits)YH()EA()EH( + + )0 P(Tradi)HY(tional)YH( XML access APIs such as Docu)HY(ment)YH( Object Model \201DOM\202 + or Simple API for XML \201SAX\202 have a number of draw)HY(backs)YH( that + make them less suit)HY(able)YH( for creat)HY(ing)YH( robust and main)HY(tain)HY(able)YH( + XML process)HY(ing)YH( appli)HY(ca)HY(tions)YH(. These draw)HY(backs)YH( include: + )EP( + + )UL( )-1 LI(Generic repre)HY(sen)HY(ta)HY(tion)YH( of XML in terms of elements, attributes, + and text forces an appli)HY(ca)HY(tion)YH( devel)HY(oper)YH( to write a substan)HY(tial)YH( + amount of bridg)HY(ing)YH( code that iden)HY(ti)HY(fies)YH( and trans)HY(forms)YH( pieces + of infor)HY(ma)HY(tion)YH( encoded in XML to a repre)HY(sen)HY(ta)HY(tion)YH( more suit)HY(able)YH( + for consump)HY(tion)YH( by the appli)HY(ca)HY(tion)YH( logic. + + )-1 LI(String-based flow control defers error detec)HY(tion)YH( to runtime. + It also reduces code read)HY(abil)HY(ity)YH( and main)HY(tain)HY(abil)HY(ity)YH(. + + )-1 LI(Lack of type safety because the data is repre)HY(sented)YH( as text. + + )-1 LI(Result)HY(ing)YH( appli)HY(ca)HY(tions)YH( are hard to debug, change, and + main)HY(tain)YH(. + )LU( + + )0 P(In contrast, stat)HY(i)HY(cally)YH(-typed, vocab)HY(u)HY(lary)YH(-specific object model + produced by the C++/Tree mapping allows you to operate in your + domain terms instead of the generic elements, attributes, and + text. Static typing helps catch errors at compile-time rather + than at run-time. Auto)HY(matic)YH( code gener)HY(a)HY(tion)YH( frees you for more + inter)HY(est)HY(ing)YH( tasks \201such as doing some)HY(thing)YH( useful with the + infor)HY(ma)HY(tion)YH( stored in the XML docu)HY(ments)YH(\202 and mini)HY(mizes)YH( the + effort needed to adapt your appli)HY(ca)HY(tions)YH( to changes in the + docu)HY(ment)YH( struc)HY(ture)YH(. To summa)HY(rize)YH(, the C++/Tree object model has + the follow)HY(ing)YH( key advan)HY(tages)YH( over generic XML access APIs:)EP( + + )UL( )-1 LI()BD(Ease of use.)ES( The gener)HY(ated)YH( code hides all the complex)HY(ity)YH( + asso)HY(ci)HY(ated)YH( with parsing and seri)HY(al)HY(iz)HY(ing)YH( XML. This includes navi)HY(gat)HY(ing)YH( + the struc)HY(ture)YH( and convert)HY(ing)YH( between the text repre)HY(sen)HY(ta)HY(tion)YH( and + data types suit)HY(able)YH( for manip)HY(u)HY(la)HY(tion)YH( by the appli)HY(ca)HY(tion)YH( + logic. + + )-1 LI()BD(Natural repre)HY(sen)HY(ta)HY(tion)YH(.)ES( The object repre)HY(sen)HY(ta)HY(tion)YH( allows + you to access the XML data using your domain vocab)HY(u)HY(lary)YH( instead + of generic elements, attributes, and text. + + )-1 LI()BD(Concise code.)ES( With the object repre)HY(sen)HY(ta)HY(tion)YH( the + appli)HY(ca)HY(tion)YH( imple)HY(men)HY(ta)HY(tion)YH( is simpler and thus easier + to read and under)HY(stand)YH(. + + )-1 LI()BD(Safety.)ES( The gener)HY(ated)YH( object model is stat)HY(i)HY(cally)YH( + typed and uses func)HY(tions)YH( instead of strings to access the + infor)HY(ma)HY(tion)YH(. This helps catch program)HY(ming)YH( errors at compile-time + rather than at runtime. + + )-1 LI()BD(Main)HY(tain)HY(abil)HY(ity)YH(.)ES( Auto)HY(matic)YH( code gener)HY(a)HY(tion)YH( mini)HY(mizes)YH( the + effort needed to adapt the appli)HY(ca)HY(tion)YH( to changes in the + docu)HY(ment)YH( struc)HY(ture)YH(. With static typing, the C++ compiler + can pin-point the places in the client code that need to be + changed. + + )-1 LI()BD(Compat)HY(i)HY(bil)HY(ity)YH(.)ES( Sequences of elements are repre)HY(sented)YH( in + the object model as contain)HY(ers)YH( conform)HY(ing)YH( to the stan)HY(dard)YH( C++ + sequence require)HY(ments)YH(. This makes it possi)HY(ble)YH( to use stan)HY(dard)YH( + C++ algo)HY(rithms)YH( on the object repre)HY(sen)HY(ta)HY(tion)YH( and frees you from + learn)HY(ing)YH( yet another container inter)HY(face)YH(, as is the case with + DOM. + + )-1 LI()BD(Effi)HY(ciency)YH(.)ES( If the appli)HY(ca)HY(tion)YH( makes repet)HY(i)HY(tive)YH( use + of the data extracted from XML, then the C++/Tree object model + is more effi)HY(cient)YH( because the navi)HY(ga)HY(tion)YH( is performed using + func)HY(tion)YH( calls rather than string compar)HY(isons)YH( and the XML + data is extracted only once. Further)HY(more)YH(, the runtime memory + usage is reduced due to more effi)HY(cient)YH( data storage + \201for instance, storing numeric data as inte)HY(gers)YH( instead of + strings\202 as well as the static knowl)HY(edge)YH( of cardi)HY(nal)HY(ity)YH( + constraints. + )LU( + + + + + + )0 1 6 H(2)WB 41 Sn()WB 9 Sn( Hello World Example)EA()EH( + + )0 P(In this chapter we will examine how to parse, access, modify, and + seri)HY(al)HY(ize)YH( a very simple XML docu)HY(ment)YH( using the XSD-gener)HY(ated)YH( + C++/Tree object model. The code presented in this chapter is + based on the )SM(hello)ES( example which can be found in + the )SM(exam)HY(ples)YH(/cxx/tree/)ES( direc)HY(tory)YH( of the XSD + distri)HY(bu)HY(tion)YH(.)EP( + + )0 2 7 H(2.1)WB 42 Sn()WB 10 Sn( Writing XML Docu)HY(ment)YH( and Schema)EA()EH( + + )0 P(First, we need to get an idea about the struc)HY(ture)YH( + of the XML docu)HY(ments)YH( we are going to process. Our + )SM(hello.xml)ES(, for example, could look like this:)EP( + + ) 10 28 PR(<?xml version="1.0"?> +<hello> + + <greeting>Hello</greeting> + + <name>sun</name> + <name>moon</name> + <name>world</name> + +</hello>)RP( + + )0 P(Then we can write a descrip)HY(tion)YH( of the above XML in the + XML Schema language and save it into )SM(hello.xsd)ES(:)EP( + + ) 13 70 PR(<?xml version="1.0"?> +<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> + + <xs:complexType name="hello_t"> + <xs:sequence> + <xs:element name="greeting" type="xs:string"/> + <xs:element name="name" type="xs:string" maxOccurs="unbounded"/> + </xs:sequence> + </xs:complexType> + + <xs:element name="hello" type="hello_t"/> + +</xs:schema>)RP( + + )0 P(Even if you are not famil)HY(iar)YH( with XML Schema, it + should be easy to connect decla)HY(ra)HY(tions)YH( in )SM(hello.xsd)ES( + to elements in )SM(hello.xml)ES(. The )SM(hello_t)ES( type + is defined as a sequence of the nested )SM(greet)HY(ing)YH()ES( and + )SM(name)ES( elements. Note that the term sequence in XML + Schema means that elements should appear in a partic)HY(u)HY(lar)YH( order + as opposed to appear)HY(ing)YH( multi)HY(ple)YH( times. The )SM(name)ES( + element has its )SM(maxOc)HY(curs)YH()ES( prop)HY(erty)YH( set to + )SM(unbounded)ES( which means it can appear multi)HY(ple)YH( times + in an XML docu)HY(ment)YH(. Finally, the glob)HY(ally)YH(-defined )SM(hello)ES( + element prescribes the root element for our vocab)HY(u)HY(lary)YH(. For an + easily-approach)HY(able)YH( intro)HY(duc)HY(tion)YH( to XML Schema refer to + )R8 2 A(XML Schema Part 0: + Primer)EA(.)EP( + + )0 P(The above schema is a spec)HY(i)HY(fi)HY(ca)HY(tion)YH( of our XML vocab)HY(u)HY(lary)YH(; it tells + every)HY(body)YH( what valid docu)HY(ments)YH( of our XML-based language should look + like. We can also update our )SM(hello.xml)ES( to include the + infor)HY(ma)HY(tion)YH( about the schema so that XML parsers can vali)HY(date)YH( + our docu)HY(ment)YH(:)EP( + + ) 11 60 PR(<?xml version="1.0"?> +<hello xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="hello.xsd"> + + <greeting>Hello</greeting> + + <name>sun</name> + <name>moon</name> + <name>world</name> + +</hello>)RP( + + + )0 P(The next step is to compile the schema to gener)HY(ate)YH( the object + model and parsing func)HY(tions)YH(.)EP( + + )0 2 8 H(2.2)WB 43 Sn()WB 11 Sn( Trans)HY(lat)HY(ing)YH( Schema to C++)EA()EH( + + )0 P(Now we are ready to trans)HY(late)YH( our )SM(hello.xsd)ES( to C++. + To do this we invoke the XSD compiler from a termi)HY(nal)YH( \201UNIX\202 or + a command prompt \201Windows\202: + )EP( + + ) 1 24 PR($ xsd cxx-tree hello.xsd)RP( + + )0 P(The XSD compiler produces two C++ files: )SM(hello.hxx)ES( and + )SM(hello.cxx)ES(. The follow)HY(ing)YH( code frag)HY(ment)YH( is taken from + )SM(hello.hxx)ES(; it should give you an idea about what gets + gener)HY(ated)YH(: + )EP( + + ) 45 60 PR(class hello_t +{ +public: + // greeting + // + typedef xml_schema::string greeting_type; + + const greeting_type& + greeting \201\202 const; + + greeting_type& + greeting \201\202; + + void + greeting \201const greeting_type& x\202; + + // name + // + typedef xml_schema::string name_type; + typedef xsd::sequence<name_type> name_sequence; + typedef name_sequence::iterator name_iterator; + typedef name_sequence::const_iterator name_const_iterator; + + const name_sequence& + name \201\202 const; + + name_sequence& + name \201\202; + + void + name \201const name_sequence& s\202;)WR( + + // Constructor. + // + hello_t \201const greeting_type&\202; + + ... + +}; + +std::auto_ptr<hello_t> +hello \201const std::string& uri\202; + +std::auto_ptr<hello_t> +hello \201std::istream&\202;)RP( + + )0 P(The )SM(hello_t)ES( C++ class corre)HY(sponds)YH( to the + )SM(hello_t)ES( XML Schema type. For each element + in this type a set of C++ type defi)HY(ni)HY(tions)YH( as well as + acces)HY(sor)YH( and modi)HY(fier)YH( func)HY(tions)YH( are gener)HY(ated)YH( inside the + )SM(hello_t)ES( class. Note that the type defi)HY(ni)HY(tions)YH( + and member func)HY(tions)YH( for the )SM(greet)HY(ing)YH()ES( and + )SM(name)ES( elements are differ)HY(ent)YH( because of the + cardi)HY(nal)HY(ity)YH( differ)HY(ences)YH( between these two elements + \201)SM(greet)HY(ing)YH()ES( is a required single element and + )SM(name)ES( is a sequence of elements\202.)EP( + + )0 P(The )SM(xml_schema::string)ES( type used in the type + defi)HY(ni)HY(tions)YH( is a C++ class provided by the XSD runtime + that corre)HY(sponds)YH( to built-in XML Schema type + )SM(string)ES(. The )SM(xml_schema::string)ES( + is based on )SM(std::string)ES( and can be used as + such. Simi)HY(larly)YH(, the )SM(sequence)ES( class template + that is used in the )SM(name_sequence)ES( type + defi)HY(ni)HY(tion)YH( is based on and has the same inter)HY(face)YH( as + )SM(std::vector)ES(. The mapping between the built-in + XML Schema types and C++ types is described in more detail in + )0 27 1 A(Section 4.5, "Mapping for the Built-in XML Schema + Types")27 0 TN TL()Ec /AF f D(. The )SM(hello_t)ES( class also includes a + construc)HY(tor)YH( with an initial)HY(izer)YH( for the required + )SM(greet)HY(ing)YH()ES( element as its argu)HY(ment)YH(.)EP( + + )0 P(The )SM(hello)ES( over)HY(loaded)YH( global func)HY(tions)YH( corre)HY(spond)YH( + to the )SM(hello)ES( global element in XML Schema. A + global element in XML Schema is a valid docu)HY(ment)YH( root. + By default XSD gener)HY(ated)YH( a set of parsing func)HY(tions)YH( for each + global element defined in XML Schema \201this can be over)HY(rid)HY(den)YH( + with the )SM(--root-element-*)ES( options\202. For more + infor)HY(ma)HY(tion)YH( on parsing func)HY(tions)YH( see )0 29 1 A(Chapter 5, + "Parsing")29 0 TN TL()Ec /AF f D(.)EP( + + )0 2 9 H(2.3)WB 44 Sn()WB 12 Sn( Imple)HY(ment)HY(ing)YH( Appli)HY(ca)HY(tion)YH( Logic)EA()EH( + + )0 P(At this point we have all the parts we need to do some)HY(thing)YH( useful + with the infor)HY(ma)HY(tion)YH( stored in our XML docu)HY(ment)YH(: + )EP( + + ) 25 62 PR(#include <iostream> +#include "hello.hxx" + +using namespace std; + +int +main \201int argc, char* argv[]\202 +{ + try + { + auto_ptr<hello_t> h \201hello \201argv[1]\202\202; + + for \201hello_t::name_const_iterator i \201h->name \201\202.begin \201\202\202; + i != h->name \201\202.end \201\202; + ++i\202 + { + cerr << h->greeting \201\202 << ", " << *i << "!" << endl; + } + } + catch \201const xml_schema::exception& e\202 + { + cerr << e << endl; + return 1; + } +})RP( + + )0 P(The first part of our appli)HY(ca)HY(tion)YH( calls one of the parsing + func)HY(tions)YH( to parser an XML file spec)HY(i)HY(fied)YH( in the command line. + We then use the returned object model to iterate over names + and print a greet)HY(ing)YH( line for each of them. Finally, we + catch and print the )SM(xml_schema::excep)HY(tion)YH()ES( + excep)HY(tion)YH( in case some)HY(thing)YH( goes wrong. This excep)HY(tion)YH( + is the root of the excep)HY(tion)YH( hier)HY(ar)HY(chy)YH( used by the + XSD-gener)HY(ated)YH( code. + )EP( + + + )0 2 10 H(2.4)WB 45 Sn()WB 13 Sn( Compil)HY(ing)YH( and Running)EA()EH( + + )0 P(After saving our appli)HY(ca)HY(tion)YH( from the previ)HY(ous)YH( section in + )SM(driver.cxx)ES(, we are ready to compile our first + program and run it on the test XML docu)HY(ment)YH(. On a UNIX + system this can be done with the follow)HY(ing)YH( commands: + )EP( + + ) 6 43 PR($ c++ -I.../libxsd -c driver.cxx hello.cxx +$ c++ -o driver driver.o hello.o -lxerces-c +$ ./driver hello.xml +Hello, sun! +Hello, moon! +Hello, world!)RP( + + )0 P(Here )SM(.../libxsd)ES( repre)HY(sents)YH( the path to the + )SM(libxsd)ES( direc)HY(tory)YH( in the XSD distri)HY(bu)HY(tion)YH(. + Note also that we are required to link our appli)HY(ca)HY(tion)YH( + with the Xerces-C++ library because the gener)HY(ated)YH( code + uses it as the under)HY(ly)HY(ing)YH( XML parser.)EP( + + )0 2 11 H(2.5)WB 46 Sn()WB 14 Sn( Adding Seri)HY(al)HY(iza)HY(tion)YH()EA()EH( + + )0 P(While parsing and access)HY(ing)YH( the XML data may be every)HY(thing)YH( + you need, there are appli)HY(ca)HY(tions)YH( that require creat)HY(ing)YH( new + or modi)HY(fy)HY(ing)YH( exist)HY(ing)YH( XML docu)HY(ments)YH(. By default XSD does + not produce seri)HY(al)HY(iza)HY(tion)YH( code. We will need to request + it with the )SM(--gener)HY(ate)YH(-seri)HY(al)HY(iza)HY(tion)YH()ES( options:)EP( + + ) 1 49 PR($ xsd cxx-tree --generate-serialization hello.xsd)RP( + + )0 P(If we now examine the gener)HY(ated)YH( )SM(hello.hxx)ES( file, + we will find a set of over)HY(loaded)YH( seri)HY(al)HY(iza)HY(tion)YH( func)HY(tions)YH(, + includ)HY(ing)YH( the follow)HY(ing)YH( version:)EP( + + ) 5 45 PR(void +hello \201std::ostream&, + const hello_t&, + const xml_schema::namespace_infomap& = + xml_schema::namespace_infomap \201\202\202; +)RP( + + )0 P(Just like with parsing func)HY(tions)YH(, XSD gener)HY(ates)YH( seri)HY(al)HY(iza)HY(tion)YH( + func)HY(tions)YH( for each global element unless instructed other)HY(wise)YH( + with one of the )SM(--root-element-*)ES( options. For more + infor)HY(ma)HY(tion)YH( on seri)HY(al)HY(iza)HY(tion)YH( func)HY(tions)YH( see )0 32 1 A(Chapter 6, + "Seri)HY(al)HY(iza)HY(tion)YH(")32 0 TN TL()Ec /AF f D(.)EP( + + )0 P(We first examine an appli)HY(ca)HY(tion)YH( that modi)HY(fies)YH( an exist)HY(ing)YH( + object model and seri)HY(al)HY(izes)YH( it back to XML:)EP( + + ) 34 50 PR(#include <iostream> +#include "hello.hxx" + +using namespace std; + +int +main \201int argc, char* argv[]\202 +{ + try + { + auto_ptr<hello_t> h \201hello \201argv[1]\202\202; + + // Change the greeting phrase. + // + h->greeting \201"Hi"\202; + + // Add another entry to the name sequence. + // + h->name \201\202.push_back \201"mars"\202; + + // Serialize the modified object model to XML. + // + xml_schema::namespace_infomap map; + map[""].name = ""; + map[""].schema = "hello.xsd"; + + hello \201cout, *h, map\202; + } + catch \201const xml_schema::exception& e\202 + { + cerr << e << endl;)WR( + return 1; + } +})RP( + + )0 P(First, our appli)HY(ca)HY(tion)YH( parses an XML docu)HY(ment)YH( and obtains its + object model as in the previ)HY(ous)YH( example. Then it changes the + greet)HY(ing)YH( string and adds another entry to the list of names. + Finally, it seri)HY(al)HY(izes)YH( the object model back to XML by calling + the seri)HY(al)HY(iza)HY(tion)YH( func)HY(tion)YH(.)EP( + + )0 P(The first argu)HY(ment)YH( we pass to the seri)HY(al)HY(iza)HY(tion)YH( func)HY(tion)YH( is + )SM(cout)ES( which results in the XML being written to + the stan)HY(dard)YH( output for us to inspect. We could have also + written the result to a file or memory buffer by creat)HY(ing)YH( an + instance of )SM(std::ofstream)ES( or )SM(std::ostringstream)ES( + and passing it instead of )SM(cout)ES(. The second argu)HY(ment)YH( is the + object model we want to seri)HY(al)HY(ize)YH(. The final argu)HY(ment)YH( is an optional + names)HY(pace)YH( infor)HY(ma)HY(tion)YH( map for our vocab)HY(u)HY(lary)YH(. It captures infor)HY(ma)HY(tion)YH( + such as names)HY(paces)YH(, names)HY(pace)YH( prefixes to which they should be mapped, + and schemas asso)HY(ci)HY(ated)YH( with these names)HY(paces)YH(. If we don't provide + this argu)HY(ment)YH( then generic names)HY(pace)YH( prefixes \201)SM(p1)ES(, + )SM(p2)ES(, etc.\202 will be auto)HY(mat)HY(i)HY(cally)YH( assigned to XML names)HY(paces)YH( + and no schema infor)HY(ma)HY(tion)YH( will be added to the result)HY(ing)YH( docu)HY(ment)YH( + \201see )0 32 1 A(Chapter 6, "Seri)HY(al)HY(iza)HY(tion)YH(")32 0 TN TL()Ec /AF f D( for details\202. + In our case, the prefix \201map key\202 and names)HY(pace)YH( name are empty + because our vocab)HY(u)HY(lary)YH( does not use XML names)HY(paces)YH(.)EP( + + )0 P(If we now compile and run this appli)HY(ca)HY(tion)YH( we will see the + output as shown in the follow)HY(ing)YH( listing:)EP( + + ) 12 60 PR(<?xml version="1.0"?> +<hello xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="hello.xsd"> + + <greeting>Hi</greeting> + + <name>sun</name> + <name>moon</name> + <name>world</name> + <name>mars</name> + +</hello>)RP( + + )0 P(We can also create and seri)HY(al)HY(ize)YH( an object model from scratch + as shown in the follow)HY(ing)YH( example:)EP( + + ) 33 43 PR(#include <iostream> +#include <fstream> +#include "hello.hxx" + +using namespace std; + +int +main \201int argc, char* argv[]\202 +{ + try + { + hello_t h \201"Hi"\202; + + hello_t::name_sequence& ns \201h.name \201\202\202; + + ns.push_back \201"Jane"\202; + ns.push_back \201"John"\202; + + // Serialize the object model to XML. + // + xml_schema::namespace_infomap map; + map[""].name = ""; + map[""].schema = "hello.xsd"; + + std::ofstream ofs \201argv[1]\202; + hello \201ofs, h, map\202; + } + catch \201const xml_schema::exception& e\202 + { + cerr << e << endl; + return 1;)WR( + } +})RP( + + )0 P(In this example we used the gener)HY(ated)YH( construc)HY(tor)YH( to create + an instance of type )SM(hello_t)ES(. To reduce typing, + we obtained a refer)HY(ence)YH( to the name sequence which we then + used to add a few names. The seri)HY(al)HY(iza)HY(tion)YH( part is iden)HY(ti)HY(cal)YH( + to the previ)HY(ous)YH( example except this time we are writing to + a file. If we compile and run this program, it produces the + follow)HY(ing)YH( XML file:)EP( + + ) 10 60 PR(<?xml version="1.0"?> +<hello xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="hello.xsd"> + + <greeting>Hi</greeting> + + <name>Jane</name> + <name>John</name> + +</hello>)RP( + + )0 2 12 H(2.6)WB 47 Sn()WB 15 Sn( Select)HY(ing)YH( Naming Conven)HY(tion)YH()EA()EH( + + )0 P(By default XSD uses the so-called K&R \201Kernighan and Ritchie\202 + iden)HY(ti)HY(fier)YH( naming conven)HY(tion)YH( in the gener)HY(ated)YH( code. In this + conven)HY(tion)YH( both type and func)HY(tion)YH( names are in lower case and + words are sepa)HY(rated)YH( by under)HY(scores)YH(. If your appli)HY(ca)HY(tion)YH( code or + schemas use a differ)HY(ent)YH( nota)HY(tion)YH(, you may want to change the + naming conven)HY(tion)YH( used in the gener)HY(ated)YH( code for consis)HY(tency)YH(. + XSD supports a set of widely-used naming conven)HY(tions)YH( + that you can select with the )SM(--type-naming)ES( and + )SM(--func)HY(tion)YH(-naming)ES( options. You can also further + refine one of the prede)HY(fined)YH( conven)HY(tions)YH( or create a completely + custom naming scheme by using the )SM(--*-regex)ES( options.)EP( + + )0 P(As an example, let's assume that our "Hello World" appli)HY(ca)HY(tion)YH( + uses the so-called upper-camel-case naming conven)HY(tion)YH( for types + \201that is, each word in a type name is capi)HY(tal)HY(ized)YH(\202 and the K&R + conven)HY(tion)YH( for func)HY(tion)YH( names. Since K&R is the default + conven)HY(tion)YH( for both type and func)HY(tion)YH( names, we only need to + change the type naming scheme:)EP( + + ) 1 42 PR($ xsd cxx-tree --type-naming ucc hello.xsd)RP( + + )0 P(The )SM(ucc)ES( argu)HY(ment)YH( to the )SM(--type-naming)ES( + options stands for upper-camel-case. If we now examine the + gener)HY(ated)YH( )SM(hello.hxx)ES(, we will see the follow)HY(ing)YH( + changes compared to the decla)HY(ra)HY(tions)YH( shown in the previ)HY(ous)YH( + sections:)EP( + + ) 45 57 PR(class Hello_t +{ +public: + // greeting + // + typedef xml_schema::String GreetingType; + + const GreetingType& + greeting \201\202 const; + + GreetingType& + greeting \201\202; + + void + greeting \201const GreetingType& x\202; + + // name + // + typedef xml_schema::String NameType; + typedef xsd::sequence<NameType> NameSequence; + typedef NameSequence::iterator NameIterator; + typedef NameSequence::const_iterator NameConstIterator; + + const NameSequence& + name \201\202 const; + + NameSequence& + name \201\202; + + void + name \201const NameSequence& s\202;)WR( + + // Constructor. + // + Hello_t \201const GreetingType&\202; + + ... + +}; + +std::auto_ptr<Hello_t> +hello \201const std::string& uri\202; + +std::auto_ptr<Hello_t> +hello \201std::istream&\202;)RP( + + )0 P(Notice that the type names in the )SM(xml_schema)ES( names)HY(pace)YH(, + for example )SM(xml_schema::String)ES(, now also use the + upper-camel-case naming conven)HY(tion)YH(. The only thing that we may + be unhappy about in the above code is the )SM(_t)ES( + suffix in )SM(Hello_t)ES(. If we are not in a posi)HY(tion)YH( + to change the schema, we can )EM(touch-up)ES( the )SM(ucc)ES( + conven)HY(tion)YH( with a custom trans)HY(la)HY(tion)YH( rule using the + )SM(--type-regex)ES( option:)EP( + + ) 1 72 PR($ xsd cxx-tree --type-naming ucc --type-regex '/ \201.+\202_t/\200u$1/' hello.xsd)RP( + + )0 P(This results in the follow)HY(ing)YH( changes to the gener)HY(ated)YH( code:)EP( + + ) 45 57 PR(class Hello +{ +public: + // greeting + // + typedef xml_schema::String GreetingType; + + const GreetingType& + greeting \201\202 const; + + GreetingType& + greeting \201\202; + + void + greeting \201const GreetingType& x\202; + + // name + // + typedef xml_schema::String NameType; + typedef xsd::sequence<NameType> NameSequence; + typedef NameSequence::iterator NameIterator; + typedef NameSequence::const_iterator NameConstIterator; + + const NameSequence& + name \201\202 const; + + NameSequence& + name \201\202; + + void + name \201const NameSequence& s\202;)WR( + + // Constructor. + // + Hello \201const GreetingType&\202; + + ... + +}; + +std::auto_ptr<Hello> +hello \201const std::string& uri\202; + +std::auto_ptr<Hello> +hello \201std::istream&\202;)RP( + + )0 P(For more detailed infor)HY(ma)HY(tion)YH( on the )SM(--type-naming)ES(, + )SM(--func)HY(tion)YH(-naming)ES(, )SM(--type-regex)ES(, and + other )SM(--*-regex)ES( options refer to the NAMING + CONVEN)HY(TION)YH( section in the )R5 2 A(XSD + Compiler Command Line Manual)EA(.)EP( + + )0 2 13 H(2.7)WB 48 Sn()WB 16 Sn( Gener)HY(at)HY(ing)YH( Docu)HY(men)HY(ta)HY(tion)YH()EA()EH( + + )0 P(While our object model is quite simple, real-world vocab)HY(u)HY(lar)HY(ies)YH( + can be quite complex with hundreds of types, elements, and + attributes. For such vocab)HY(u)HY(lar)HY(ies)YH( figur)HY(ing)YH( out which types + provide which member func)HY(tions)YH( by study)HY(ing)YH( the gener)HY(ated)YH( + source code or schemas can be a daunt)HY(ing)YH( task. To provide + appli)HY(ca)HY(tion)YH( devel)HY(op)HY(ers)YH( with a more acces)HY(si)HY(ble)YH( way of + under)HY(stand)HY(ing)YH( the gener)HY(ated)YH( object models, the XSD compiler + can be instructed to produce source code with docu)HY(men)HY(ta)HY(tion)YH( + comments in the Doxygen format. Then the source code can be + processed with the )R9 2 A(Doxygen)EA( + docu)HY(men)HY(ta)HY(tion)YH( system to extract this infor)HY(ma)HY(tion)YH( and produce + docu)HY(men)HY(ta)HY(tion)YH( in various formats. + )EP( + + )0 P(In this section we will see how to gener)HY(ate)YH( docu)HY(men)HY(ta)HY(tion)YH( + for our "Hello World" vocab)HY(u)HY(lary)YH(. To show)HY(case)YH( the full power + of the XSD docu)HY(men)HY(ta)HY(tion)YH( facil)HY(i)HY(ties)YH(, we will first docu)HY(ment)YH( + our schema. The XSD compiler will then trans)HY(fer)YH( + this infor)HY(ma)HY(tion)YH( from the schema to the gener)HY(ated)YH( code and + then to the object model docu)HY(men)HY(ta)HY(tion)YH(. Note that the + docu)HY(men)HY(ta)HY(tion)YH( in the schema is not required for XSD to + gener)HY(ate)YH( useful docu)HY(men)HY(ta)HY(tion)YH(. Below you will find + our )SM(hello.xsd)ES( with added docu)HY(men)HY(ta)HY(tion)YH(:)EP( + + ) 43 69 PR(<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> + + <xs:complexType name="hello_t"> + + <xs:annotation> + <xs:documentation> + The hello_t type consists of a greeting phrase and a + collection of names to which this greeting applies. + </xs:documentation> + </xs:annotation> + + <xs:sequence> + + <xs:element name="greeting" type="xs:string"> + <xs:annotation> + <xs:documentation> + The greeting element contains the greeting phrase + for this hello object. + </xs:documentation> + </xs:annotation> + </xs:element> + + <xs:element name="name" type="xs:string" maxOccurs="unbounded"> + <xs:annotation> + <xs:documentation> + The name elements contains names to be greeted. + </xs:documentation> + </xs:annotation> + </xs:element> + + </xs:sequence>)WR( + </xs:complexType> + + <xs:element name="hello" type="hello_t"> + <xs:annotation> + <xs:documentation> + The hello element is a root of the Hello XML vocabulary. + Every conforming document should start with this element. + </xs:documentation> + </xs:annotation> + </xs:element> + +</xs:schema>)RP( + + )0 P(The first step in obtain)HY(ing)YH( the docu)HY(men)HY(ta)HY(tion)YH( is to recom)HY(pile)YH( + our schema with the )SM(--gener)HY(ate)YH(-doxygen)ES( option:)EP( + + ) 1 68 PR($ xsd cxx-tree --generate-serialization --generate-doxygen hello.xsd)RP( + + )0 P(Now the gener)HY(ated)YH( )SM(hello.hxx)ES( file contains comments + in the Doxygen format. The next step is to process this file + with the Doxygen docu)HY(men)HY(ta)HY(tion)YH( system. If your project does + not use Doxygen then you first need to create a config)HY(u)HY(ra)HY(tion)YH( + file for your project:)EP( + + ) 1 26 PR($ doxygen -g hello.doxygen)RP( + + )0 P(You only need to perform this step once. Now we can gener)HY(ate)YH( + the docu)HY(men)HY(ta)HY(tion)YH( by execut)HY(ing)YH( the follow)HY(ing)YH( command in the + direc)HY(tory)YH( with the gener)HY(ated)YH( source code:)EP( + + ) 1 23 PR($ doxygen hello.doxygen)RP( + + )0 P(While the gener)HY(ated)YH( docu)HY(men)HY(ta)HY(tion)YH( can be useful as is, we can + go one step further and link \201using the Doxygen tags mech)HY(a)HY(nism)YH(\202 + the docu)HY(men)HY(ta)HY(tion)YH( for our object model with the docu)HY(men)HY(ta)HY(tion)YH( + for the XSD runtime library which defines C++ classes for the + built-in XML Schema types. This way we can seam)HY(lessly)YH( browse + between docu)HY(men)HY(ta)HY(tion)YH( for the )SM(hello_t)ES( class which + is gener)HY(ated)YH( by the XSD compiler and the )SM(xml_schema::string)ES( + class which is defined in the XSD runtime library. The Doxygen + config)HY(u)HY(ra)HY(tion)YH( file for the XSD runtime is provided with the XSD + distri)HY(bu)HY(tion)YH(.)EP( + + )0 P(You can view the result of the steps described in this section + on the )R10 2 A(Hello + Example Docu)HY(men)HY(ta)HY(tion)YH()EA( page.)EP( + + + + + )0 1 14 H(3)WB 49 Sn()WB 17 Sn( Overall Mapping Config)HY(u)HY(ra)HY(tion)YH()EA()EH( + + )0 P(The C++/Tree mapping has a number of config)HY(u)HY(ra)HY(tion)YH( param)HY(e)HY(ters)YH( that + deter)HY(mine)YH( the overall prop)HY(er)HY(ties)YH( and behav)HY(ior)YH( of the gener)HY(ated)YH( code. + Config)HY(u)HY(ra)HY(tion)YH( param)HY(e)HY(ters)YH( are spec)HY(i)HY(fied)YH( with the XSD command line + options. This chapter describes config)HY(u)HY(ra)HY(tion)YH( aspects that are most + commonly encoun)HY(tered)YH( by appli)HY(ca)HY(tion)YH( devel)HY(op)HY(ers)YH(. These include: + the char)HY(ac)HY(ter)YH( type that is used by the gener)HY(ated)YH( code, handling of + vocab)HY(u)HY(lar)HY(ies)YH( that use XML Schema poly)HY(mor)HY(phism)YH(, XML Schema to C++ + names)HY(pace)YH( mapping, and thread safety. For more ways to config)HY(ure)YH( + the gener)HY(ated)YH( code refer to the + )R5 2 A(XSD + Compiler Command Line Manual)EA(. + )EP( + + )0 2 15 H(3.1)WB 50 Sn()WB 18 Sn( Char)HY(ac)HY(ter)YH( Type and Encod)HY(ing)YH()EA()EH( + + )0 P(The C++/Tree mapping has built-in support for two char)HY(ac)HY(ter)YH( types: + )SM(char)ES( and )SM(wchar_t)ES(. You can select the + char)HY(ac)HY(ter)YH( type with the )SM(--char-type)ES( command line + option. The default char)HY(ac)HY(ter)YH( type is )SM(char)ES(. The + char)HY(ac)HY(ter)YH( type affects all string and string-based types that + are used in the mapping. These include the string-based built-in + XML Schema types, excep)HY(tion)YH( types, stream types, etc.)EP( + + )0 P(Another aspect of the mapping that depends on the char)HY(ac)HY(ter)YH( type + is char)HY(ac)HY(ter)YH( encod)HY(ing)YH(. For the )SM(char)ES( char)HY(ac)HY(ter)YH( type + the default encod)HY(ing)YH( is UTF-8. Other supported encod)HY(ings)YH( are + ISO-8859-1, Xerces-C++ Local Code Page \201LPC\202, as well as + custom encod)HY(ings)YH(. You can select which encod)HY(ing)YH( should be used + in the object model with the )SM(--char-encod)HY(ing)YH()ES( command + line option.)EP( + + )0 P(For the )SM(wchar_t)ES( char)HY(ac)HY(ter)YH( type the encod)HY(ing)YH( is + auto)HY(mat)HY(i)HY(cally)YH( selected between UTF-16 and UTF-32/UCS-4 depend)HY(ing)YH( + on the size of the )SM(wchar_t)ES( type. On some plat)HY(forms)YH( + \201for example, Windows with Visual C++ and AIX with IBM XL C++\202 + )SM(wchar_t)ES( is 2 bytes long. For these plat)HY(forms)YH( the + encod)HY(ing)YH( is UTF-16. On other plat)HY(forms)YH( )SM(wchar_t)ES( is 4 bytes + long and UTF-32/UCS-4 is used.)EP( + + )0 P(Note also that the char)HY(ac)HY(ter)YH( encod)HY(ing)YH( that is used in the object model + is inde)HY(pen)HY(dent)YH( of the encod)HY(ings)YH( used in input and output XML. In fact, + all three \201object mode, input XML, and output XML\202 can have differ)HY(ent)YH( + encod)HY(ings)YH(.)EP( + + )0 2 16 H(3.2)WB 51 Sn()WB 19 Sn( Support for Poly)HY(mor)HY(phism)YH()EA()EH( + + )0 P(By default XSD gener)HY(ates)YH( non-poly)HY(mor)HY(phic)YH( code. If your vocab)HY(u)HY(lary)YH( + uses XML Schema poly)HY(mor)HY(phism)YH( in the form of )SM(xsi:type)ES( + and/or substi)HY(tu)HY(tion)YH( groups, then you will need to compile + your schemas with the )SM(--gener)HY(ate)YH(-poly)HY(mor)HY(phic)YH()ES( option + to produce poly)HY(mor)HY(phism)YH(-aware code. For more infor)HY(ma)HY(tion)YH( on + working with poly)HY(mor)HY(phic)YH( object models, refer to + )R11 2 A(Section 2.11, + "Mapping for )SM(xsi:type)ES( and Substi)HY(tu)HY(tion)YH( Groups")EA( in + the C++/Tree Mapping User Manual.)EP( + + )0 2 17 H(3.3)WB 52 Sn()WB 20 Sn( Names)HY(pace)YH( Mapping)EA()EH( + + )0 P(XSD maps XML names)HY(paces)YH( spec)HY(i)HY(fied)YH( in the )SM(target)HY(Names)HY(pace)YH()ES( + attribute in XML Schema to one or more nested C++ names)HY(paces)YH(. By + default, a names)HY(pace)YH( URI is mapped to a sequence of C++ names)HY(pace)YH( + names by remov)HY(ing)YH( the proto)HY(col)YH( and host parts and split)HY(ting)YH( the + rest into a sequence of names with )SM('/')ES( as the name + sepa)HY(ra)HY(tor)YH(.)EP( + + )0 P(The default mapping of names)HY(pace)YH( URIs to C++ names)HY(paces)YH( + can be altered using the )SM(--names)HY(pace)YH(-map)ES( and + )SM(--names)HY(pace)YH(-regex)ES( compiler options. For example, + to map names)HY(pace)YH( URI )SM(http://www.codesyn)HY(the)HY(sis)YH(.com/my)ES( to + C++ names)HY(pace)YH( )SM(cs::my)ES(, we can use the follow)HY(ing)YH( option:)EP( + + ) 1 54 PR(--namespace-map http://www.codesynthesis.com/my=cs::my)RP( + + )0 P(A vocab)HY(u)HY(lary)YH( without a names)HY(pace)YH( is mapped to the global scope. This + also can be altered with the above options by using an empty name + for the XML names)HY(pace)YH(:)EP( + + ) 1 19 PR(--namespace-map =cs)RP( + + )0 2 18 H(3.4)WB 53 Sn()WB 21 Sn( Thread Safety)EA()EH( + + )0 P(XSD-gener)HY(ated)YH( code is thread-safe in the sense that you can + use differ)HY(ent)YH( instan)HY(ti)HY(a)HY(tions)YH( of the object model in several + threads concur)HY(rently)YH(. This is possi)HY(ble)YH( due to the gener)HY(ated)YH( + code not relying on any writable global vari)HY(ables)YH(. If you need + to share the same object between several threads then you will + need to provide some form of synchro)HY(niza)HY(tion)YH(. One approach would + be to use the gener)HY(ated)YH( code customiza)HY(tion)YH( mech)HY(a)HY(nisms)YH( to embed + synchro)HY(niza)HY(tion)YH( prim)HY(i)HY(tives)YH( into the gener)HY(ated)YH( C++ classes. For more + infor)HY(ma)HY(tion)YH( on gener)HY(ated)YH( code customiza)HY(tion)YH( refer to the + )R2 2 A(C++/Tree + Mapping Customiza)HY(tion)YH( Guide)EA(.)EP( + + )0 P(If you also would like to call parsing and/or seri)HY(al)HY(iza)HY(tion)YH( + func)HY(tions)YH( from several threads poten)HY(tially)YH( concur)HY(rently)YH(, then + you will need to make sure the Xerces-C++ runtime is initial)HY(ized)YH( + and termi)HY(nated)YH( only once. The easiest way to do this is to + initial)HY(ize)YH(/termi)HY(nate)YH( Xerces-C++ from )SM(main\201\202)ES( when + there are no threads yet/anymore:)EP( + + ) 13 56 PR(#include <xercesc/util/PlatformUtils.hpp> + +int +main \201\202 +{ + xercesc::XMLPlatformUtils::Initialize \201\202; + + { + // Start/terminate threads and parse/serialize here. + } + + xercesc::XMLPlatformUtils::Terminate \201\202; +})RP( + + )0 P(Because you initial)HY(ize)YH( the Xerces-C++ runtime your)HY(self)YH( you should + also pass the )SM(xml_schema::flags::dont_initial)HY(ize)YH()ES( flag + to parsing and seri)HY(al)HY(iza)HY(tion)YH( func)HY(tions)YH(. See )0 29 1 A(Chapter 5, + "Parsing")29 0 TN TL()Ec /AF f D( and )0 32 1 A(Chapter 6, "Seri)HY(al)HY(iza)HY(tion)YH(")32 0 TN TL()Ec /AF f D( for + more infor)HY(ma)HY(tion)YH(.)EP( + + + + + + )0 1 19 H(4)WB 54 Sn()WB 22 Sn( Working with Object Models)EA()EH( + + )0 P(As we have seen in the previ)HY(ous)YH( chap)HY(ters)YH(, the XSD compiler gener)HY(ates)YH( + a C++ class for each type defined in XML Schema. Together these classes + consti)HY(tute)YH( an object model for an XML vocab)HY(u)HY(lary)YH(. In this chapter we + will take a closer look at differ)HY(ent)YH( elements that comprise an + object model class as well as how to create, access, and modify + object models.)EP( + + )0 P(In this and subse)HY(quent)YH( chap)HY(ters)YH( we will use the follow)HY(ing)YH( schema + that describes a collec)HY(tion)YH( of person records. We save it in + )SM(people.xsd)ES(:)EP( + + ) 30 71 PR(<?xml version="1.0"?> +<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> + + <xs:simpleType name="gender_t"> + <xs:restriction base="xs:string"> + <xs:enumeration value="male"/> + <xs:enumeration value="female"/> + </xs:restriction> + </xs:simpleType> + + <xs:complexType name="person_t"> + <xs:sequence> + <xs:element name="first-name" type="xs:string"/> + <xs:element name="middle-name" type="xs:string" minOccurs="0"/> + <xs:element name="last-name" type="xs:string"/> + <xs:element name="gender" type="gender_t"/> + <xs:element name="age" type="xs:short"/> + </xs:sequence> + <xs:attribute name="id" type="xs:unsignedInt" use="required"/> + </xs:complexType> + + <xs:complexType name="people_t"> + <xs:sequence> + <xs:element name="person" type="person_t" maxOccurs="unbounded"/> + </xs:sequence> + </xs:complexType> + + <xs:element name="people" type="people_t"/> + +</xs:schema>)RP( + + )0 P(A sample XML instance to go along with this schema is saved + in )SM(people.xml)ES(:)EP( + + ) 20 61 PR(<?xml version="1.0"?> +<people xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="people.xsd"> + + <person id="1"> + <first-name>John</first-name> + <last-name>Doe</last-name> + <gender>male</gender> + <age>32</age> + </person> + + <person id="2"> + <first-name>Jane</first-name> + <middle-name>Mary</middle-name> + <last-name>Doe</last-name> + <gender>female</gender> + <age>28</age> + </person> + +</people>)RP( + + )0 P(Compil)HY(ing)YH( )SM(people.xsd)ES( with the XSD compiler results + in three gener)HY(ated)YH( C++ classes: )SM(gender_t)ES(, + )SM(person_t)ES(, and )SM(people_t)ES(. + The )SM(gender_t)ES( class is modelled after the C++ + )SM(enum)ES( type. Its defi)HY(ni)HY(tion)YH( is presented below:)EP( + + ) 17 41 PR(class gender_t: public xml_schema::string +{ +public: + enum value + { + male, + female + }; + + gender_t \201value\202; + gender_t \201const xml_schema::string&\202; + + gender_t& + operator= \201value\202; + + operator value \201\202 const; +};)RP( + + )0 P(The follow)HY(ing)YH( listing shows how we can use this type:)EP( + + ) 19 41 PR(gender_t m \201gender_t::male\202; +gender_t f \201"female"\202; + +if \201m == "female" || f == gender_t::male\202 +{ + ... +} + +switch \201m\202 +{ +case gender_t::male: + { + ... + } +case gender_t::female: + { + ... + } +})RP( + + )0 P(The other two classes will be exam)HY(ined)YH( in detail in the subse)HY(quent)YH( + sections.)EP( + + )0 2 20 H(4.1)WB 55 Sn()WB 23 Sn( Attribute and Element Cardi)HY(nal)HY(i)HY(ties)YH()EA()EH( + + )0 P(As we have seen in the previ)HY(ous)YH( chap)HY(ters)YH(, XSD gener)HY(ates)YH( a differ)HY(ent)YH( + set of type defi)HY(ni)HY(tions)YH( and member func)HY(tions)YH( for elements with + differ)HY(ent)YH( cardi)HY(nal)HY(i)HY(ties)YH(. The C++/Tree mapping divides all the possi)HY(ble)YH( + element and attribute cardi)HY(nal)HY(i)HY(ties)YH( into three cardi)HY(nal)HY(ity)YH( classes: + )EM(one)ES(, )EM(optional)ES(, and )EM(sequence)ES(.)EP( + + )0 P(The )EM(one)ES( cardi)HY(nal)HY(ity)YH( class covers all elements that should + occur exactly once as well as required attributes. In our + example, the )SM(first-name)ES(, )SM(last-name)ES(, + )SM(gender)ES(, and )SM(age)ES( elements as well as + the )SM(id)ES( attribute belong to this cardi)HY(nal)HY(ity)YH( class. + The follow)HY(ing)YH( code frag)HY(ment)YH( shows type defi)HY(ni)HY(tions)YH( as well as the + acces)HY(sor)YH( and modi)HY(fier)YH( func)HY(tions)YH( that are gener)HY(ated)YH( for the + )SM(gender)ES( element in the )SM(person_t)ES( class:)EP( + + ) 15 31 PR(class person_t +{ + // gender + // + typedef gender_t gender_type; + + const gender_type& + gender \201\202 const; + + gender_type& + gender \201\202; + + void + gender \201const gender_type&\202; +};)RP( + + )0 P(The )SM(gender_type)ES( type is an alias for the element's type. + The first two acces)HY(sor)YH( func)HY(tions)YH( return read-only \201constant\202 and + read-write refer)HY(ences)YH( to the element's value, respec)HY(tively)YH(. The + modi)HY(fier)YH( func)HY(tion)YH( sets the new value for the element.)EP( + + )0 P(The )EM(optional)ES( cardi)HY(nal)HY(ity)YH( class covers all elements that + can occur zero or one time as well as optional attributes. In our + example, the )SM(middle-name)ES( element belongs to this + cardi)HY(nal)HY(ity)YH( class. The follow)HY(ing)YH( code frag)HY(ment)YH( shows the type + defi)HY(ni)HY(tions)YH( as well as the acces)HY(sor)YH( and modi)HY(fier)YH( func)HY(tions)YH( that + are gener)HY(ated)YH( for this element in the )SM(person_t)ES( class:)EP( + + ) 19 63 PR(class person_t +{ + // middle-name + // + typedef xml_schema::string middle_name_type; + typedef xsd::optional<middle_name_type> middle_name_optional; + + const middle_name_optional& + middle_name \201\202 const; + + middle_name_optional& + middle_name \201\202; + + void + middle_name \201const middle_name_type&\202; + + void + middle_name \201const middle_name_optional&\202; +};)RP( + + )0 P(As with the )SM(gender)ES( element, )SM(middle_name_type)ES( + is an alias for the element's type. The )SM(middle_name_optional)ES( + type is a container for the element's optional value. It can be queried + for the pres)HY(ence)YH( of the value using the )SM(present\201\202)ES( func)HY(tion)YH(. + The value itself can be retrieved using the )SM(get\201\202)ES( + acces)HY(sor)YH( and set using the )SM(set\201\202)ES( modi)HY(fier)YH(. The container + can be reverted to the value not present state with the call to the + )SM(reset\201\202)ES( func)HY(tion)YH(. The follow)HY(ing)YH( example shows how we + can use this container:)EP( + + ) 9 42 PR(person_t::middle_name_optional n \201"John"\202; + +if \201n.preset \201\202\202 +{ + cout << n.get \201\202 << endl; +} + +n.set \201"Jane"\202; +n.reset \201\202;)RP( + + + )0 P(Unlike the )EM(one)ES( cardi)HY(nal)HY(ity)YH( class, the acces)HY(sor)YH( func)HY(tions)YH( + for the )EM(optional)ES( class return read-only \201constant\202 and + read-write refer)HY(ences)YH( to the container instead of the element's + value directly. The modi)HY(fier)YH( func)HY(tions)YH( set the new value for the + element.)EP( + + )0 P(Finally, the )EM(sequence)ES( cardi)HY(nal)HY(ity)YH( class covers all elements + that can occur more than once. In our example, the + )SM(person)ES( element in the )SM(people_t)ES( type + belongs to this cardi)HY(nal)HY(ity)YH( class. The follow)HY(ing)YH( code frag)HY(ment)YH( shows + the type defi)HY(ni)HY(tions)YH( as well as the acces)HY(sor)YH( and modi)HY(fier)YH( func)HY(tions)YH( + that are gener)HY(ated)YH( for this element in the )SM(people_t)ES( + class:)EP( + + ) 18 64 PR(class people_t +{ + // person + // + typedef person_t person_type; + typedef xsd::sequence<person_type> person_sequence; + typedef person_sequence::iterator person_iterator; + typedef person_sequence::const_iterator person_const_iterator; + + const person_sequence& + person \201\202 const; + + person_sequence& + person \201\202; + + void + person \201const person_sequence&\202; +};)RP( + + )0 P(Iden)HY(ti)HY(cal)YH( to the other cardi)HY(nal)HY(ity)YH( classes, )SM(person_type)ES( + is an alias for the element's type. The )SM(person_sequence)ES( + type is a sequence container for the element's values. It is based + on and has the same inter)HY(face)YH( as )SM(std::vector)ES( and + there)HY(fore)YH( can be used in similar ways. The )SM(person_iter)HY(a)HY(tor)YH()ES( + and )SM(person_const_iter)HY(a)HY(tor)YH()ES( types are read-only + \201constant\202 and read-write iter)HY(a)HY(tors)YH( for the )SM(person_sequence)ES( + container.)EP( + + )0 P(Similar to the )EM(optional)ES( cardi)HY(nal)HY(ity)YH( class, the + acces)HY(sor)YH( func)HY(tions)YH( for the )EM(sequence)ES( class return + read-only \201constant\202 and read-write refer)HY(ences)YH( to the sequence + container. The modi)HY(fier)YH( func)HY(tions)YH( copies the entries from + the passed sequence.)EP( + + )0 P(For complex schemas with many levels of nested compos)HY(i)HY(tors)YH( + \201)SM(xs:choice)ES( and )SM(xs:sequence)ES(\202 it can + be hard to deduce the cardi)HY(nal)HY(ity)YH( class of a partic)HY(u)HY(lar)YH( element. + The gener)HY(ated)YH( Doxygen docu)HY(men)HY(ta)HY(tion)YH( can greatly help with + this task. For each element and attribute the docu)HY(men)HY(ta)HY(tion)YH( + clearly iden)HY(ti)HY(fies)YH( its cardi)HY(nal)HY(ity)YH( class. Alter)HY(na)HY(tively)YH(, you + can study the gener)HY(ated)YH( header files to find out the cardi)HY(nal)HY(ity)YH( + class of a partic)HY(u)HY(lar)YH( attribute or element. In the next sections + we will examine how to access and modify infor)HY(ma)HY(tion)YH( stored in + an object model using acces)HY(sor)YH( and modi)HY(fier)YH( func)HY(tions)YH( described + in this section.)EP( + + + )0 2 21 H(4.2)WB 56 Sn()WB 24 Sn( Access)HY(ing)YH( the Object Model)EA()EH( + + )0 P(In this section we will learn how to get to the infor)HY(ma)HY(tion)YH( + stored in the object model for our person records vocab)HY(u)HY(lary)YH(. + The follow)HY(ing)YH( appli)HY(ca)HY(tion)YH( accesses and prints the contents + of the )SM(people.xml)ES( file:)EP( + + ) 36 70 PR(#include <iostream> +#include "people.hxx" + +using namespace std; + +int +main \201\202 +{ + auto_ptr<people_t> ppl \201people \201"people.xml"\202\202; + + // Iterate over individual person records. + // + people_t::person_sequence& ps \201ppl->person \201\202\202; + + for \201people_t::person_iterator i \201ps.begin \201\202\202; i != ps.end \201\202; ++i\202 + { + person_t& p \201*i\202; + + // Print names: first-name and last-name are required elements, + // middle-name is optional. + // + cout << "name: " << p.first_name \201\202 << " "; + + if \201p.middle_name \201\202.present \201\202\202 + cout << p.middle_name \201\202.get \201\202 << " "; + + cout << p.last_name \201\202 << endl; + + // Print gender, age, and id which are all required. + // + cout << "gender: " << p.gender \201\202 << endl)WR( + << "age: " << p.age \201\202 << endl + << "id: " << p.id \201\202 << endl + << endl; + } +})RP( + + )0 P(This code shows common patterns of access)HY(ing)YH( elements and attributes + with differ)HY(ent)YH( cardi)HY(nal)HY(ity)YH( classes. For the sequence element + \201)SM(person)ES( in )SM(people_t)ES(\202 we first obtain a + refer)HY(ence)YH( to the container and then iterate over indi)HY(vid)HY(ual)YH( + records. The values of elements and attributes with the + )EM(one)ES( cardi)HY(nal)HY(ity)YH( class \201)SM(first-name)ES(, + )SM(last-name)ES(, )SM(gender)ES(, )SM(age)ES(, + and )SM(id)ES(\202 can be obtained directly by calling the + corre)HY(spond)HY(ing)YH( acces)HY(sor)YH( func)HY(tions)YH(. For the optional element + )SM(middle-name)ES( we first check if the value is present + and only then call )SM(get\201\202)ES( to retrieve it.)EP( + + )0 P(Note that when we want to reduce typing by creat)HY(ing)YH( a vari)HY(able)YH( + repre)HY(sent)HY(ing)YH( a frag)HY(ment)YH( of the object model that we are currently + working with \201)SM(ps)ES( and )SM(p)ES( above\202, we obtain + a refer)HY(ence)YH( to that frag)HY(ment)YH( instead of making a poten)HY(tially)YH( + expen)HY(sive)YH( copy. This is gener)HY(ally)YH( a good rule to follow when + creat)HY(ing)YH( high-perfor)HY(mance)YH( appli)HY(ca)HY(tions)YH(.)EP( + + )0 P(If we run the above appli)HY(ca)HY(tion)YH( on our sample + )SM(people.xml)ES(, the output looks as follows:)EP( + + ) 9 21 PR(name: John Doe +gender: male +age: 32 +id: 1 + +name: Jane Mary Doe +gender: female +age: 28 +id: 2)RP( + + + )0 2 22 H(4.3)WB 57 Sn()WB 25 Sn( Modi)HY(fy)HY(ing)YH( the Object Model)EA()EH( + + )0 P(In this section we will learn how to modify the infor)HY(ma)HY(tion)YH( + stored in the object model for our person records vocab)HY(u)HY(lary)YH(. + The follow)HY(ing)YH( appli)HY(ca)HY(tion)YH( changes the contents of the + )SM(people.xml)ES( file:)EP( + + ) 43 70 PR(#include <iostream> +#include "people.hxx" + +using namespace std; + +int +main \201\202 +{ + auto_ptr<people_t> ppl \201people \201"people.xml"\202\202; + + // Iterate over individual person records and increment + // the age. + // + people_t::person_sequence& ps \201ppl->person \201\202\202; + + for \201people_t::person_iterator i \201ps.begin \201\202\202; i != ps.end \201\202; ++i\202 + { + // Alternative way: i->age \201\202++; + // + i->age \201i->age \201\202 + 1\202; + } + + // Add middle-name to the first record and remove it from + // the second. + // + person_t& john \201ps[0]\202; + person_t& jane \201ps[1]\202; + + john.middle_name \201"Mary"\202; + jane.middle_name \201\202.reset \201\202; +)WR( + // Add another John record. + // + ps.push_back \201john\202; + + // Serialize the modified object model to XML. + // + xml_schema::namespace_infomap map; + map[""].name = ""; + map[""].schema = "people.xsd"; + + people \201cout, *ppl, map\202; +})RP( + + )0 P(The first modi)HY(fi)HY(ca)HY(tion)YH( the above appli)HY(ca)HY(tion)YH( performs is iter)HY(at)HY(ing)YH( + over person records and incre)HY(ment)HY(ing)YH( the age value. This code + frag)HY(ment)YH( shows how to modify the value of a required attribute + or element. The next modi)HY(fi)HY(ca)HY(tion)YH( shows how to set a new value + for the optional )SM(middle-name)ES( element as well + as clear its value. Finally the example adds a copy of the + John Doe record to the )SM(person)ES( element sequence.)EP( + + )0 P(Note that in this case using refer)HY(ences)YH( for the )SM(ps)ES(, + )SM(john)ES(, and )SM(jane)ES( vari)HY(ables)YH( is no longer + a perfor)HY(mance)YH( improve)HY(ment)YH( but a require)HY(ment)YH( for the appli)HY(ca)HY(tion)YH( + to func)HY(tion)YH( correctly. If we hadn't used refer)HY(ences)YH(, all our changes + would have been made on copies without affect)HY(ing)YH( the object model.)EP( + + )0 P(If we run the above appli)HY(ca)HY(tion)YH( on our sample )SM(people.xml)ES(, + the output looks as follows:)EP( + + ) 28 61 PR(<?xml version="1.0"?> +<people xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="people.xsd"> + + <person id="1"> + <first-name>John</first-name> + <middle-name>Mary</middle-name> + <last-name>Doe</last-name> + <gender>male</gender> + <age>33</age> + </person> + + <person id="2"> + <first-name>Jane</first-name> + <last-name>Doe</last-name> + <gender>female</gender> + <age>29</age> + </person> + + <person id="1"> + <first-name>John</first-name> + <middle-name>Mary</middle-name> + <last-name>Doe</last-name> + <gender>male</gender> + <age>33</age> + </person> + +</people>)RP( + + + )0 2 23 H(4.4)WB 58 Sn()WB 26 Sn( Creat)HY(ing)YH( the Object Model from Scratch)EA()EH( + + )0 P(In this section we will learn how to create a new object model + for our person records vocab)HY(u)HY(lary)YH(. The follow)HY(ing)YH( appli)HY(ca)HY(tion)YH( + recre)HY(ates)YH( the content of the orig)HY(i)HY(nal)YH( )SM(people.xml)ES( + file:)EP( + + ) 42 48 PR(#include <iostream> +#include "people.hxx" + +using namespace std; + +int +main \201\202 +{ + people_t ppl; + people_t::person_sequence& ps \201ppl.person \201\202\202; + + // Add the John Doe record. + // + ps.push_back \201 + person_t \201"John", // first-name + "Doe", // last-name + gender_t::male, // gender + 32, // age + 1\202\202; + + // Add the Jane Doe record. + // + ps.push_back \201 + person_t \201"Jane", // first-name + "Doe", // last-name + gender_t::female, // gender + 28, // age + 2\202\202; // id + + // Add middle name to the Jane Doe record. + //)WR( + person_t& jane \201ps.back \201\202\202; + jane.middle_name \201"Mary"\202; + + // Serialize the object model to XML. + // + xml_schema::namespace_infomap map; + map[""].name = ""; + map[""].schema = "people.xsd"; + + people \201cout, ppl, map\202; +})RP( + + )0 P(The only new part in the above appli)HY(ca)HY(tion)YH( is the calls + to the )SM(people_t)ES( and )SM(person_t)ES( + construc)HY(tors)YH(. As a general rule, for each C++ class + XSD gener)HY(ates)YH( a construc)HY(tor)YH( with initial)HY(iz)HY(ers)YH( + for each element and attribute belong)HY(ing)YH( to the )EM(one)ES( + cardi)HY(nal)HY(ity)YH( class. For our vocab)HY(u)HY(lary)YH(, the follow)HY(ing)YH( + construc)HY(tors)YH( are gener)HY(ated)YH(:)EP( + + ) 13 35 PR(class person_t +{ + person_t \201const first_name_type&, + const last_name_type&, + const gender_type&, + const age_type&, + const id_type&\202; +}; + +class people_t +{ + people_t \201\202; +};)RP( + + )0 P(Note also that we set the )SM(middle-name)ES( element + on the Jane Doe record by obtain)HY(ing)YH( a refer)HY(ence)YH( to that record + in the object model and setting the )SM(middle-name)ES( + value on it. This is a general rule that should be followed + in order to obtain the best perfor)HY(mance)YH(: if possi)HY(ble)YH(, + direct modi)HY(fi)HY(ca)HY(tions)YH( to the object model should be preferred + to modi)HY(fi)HY(ca)HY(tions)YH( on tempo)HY(raries)YH( with subse)HY(quent)YH( copying. The + follow)HY(ing)YH( code frag)HY(ment)YH( shows a seman)HY(ti)HY(cally)YH( equiv)HY(a)HY(lent)YH( but + slightly slower version:)EP( + + ) 11 46 PR(// Add the Jane Doe record. +// +person_t jane \201"Jane", // first-name + "Doe", // last-name + gender_t::female, // gender + 28, // age + 2\202; // id + +jane.middle_name \201"Mary"\202; + +ps.push_back \201jane\202;)RP( + + )0 P(We can also go one step further to reduce copying and improve + the perfor)HY(mance)YH( of our appli)HY(ca)HY(tion)YH( by using the non-copying + )SM(push_back\201\202)ES( func)HY(tion)YH( which assumes owner)HY(ship)YH( + of the passed objects:)EP( + + ) 19 47 PR(// Add the John Doe record. +// +auto_ptr<person_t> john_p \201 + new person_t \201"John", // first-name + "Doe", // last-name + gender_t::male, // gender + 32, // age + 1\202\202; +ps.push_back \201john_p\202; // assumes ownership + +// Add the Jane Doe record. +// +auto_ptr<person_t> jane_p \201 + new person_t \201"Jane", // first-name + "Doe", // last-name + gender_t::female, // gender + 28, // age + 2\202\202; // id +ps.push_back \201jane_p\202; // assumes ownership)RP( + + )0 P(For more infor)HY(ma)HY(tion)YH( on the non-copying modi)HY(fier)YH( func)HY(tions)YH( refer to + )R12 2 A(Section + 2.8, "Mapping for Local Elements and Attributes")EA( in the C++/Tree Mapping + User Manual. The above appli)HY(ca)HY(tion)YH( produces the follow)HY(ing)YH( output:)EP( + + ) 20 61 PR(<?xml version="1.0" ?> +<people xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="people.xsd"> + + <person id="1"> + <first-name>John</first-name> + <last-name>Doe</last-name> + <gender>male</gender> + <age>32</age> + </person> + + <person id="2"> + <first-name>Jane</first-name> + <middle-name>Mary</middle-name> + <last-name>Doe</last-name> + <gender>female</gender> + <age>28</age> + </person> + +</people>)RP( + + )0 2 24 H(4.5)WB 59 Sn()WB 27 Sn( Mapping for the Built-in XML Schema Types)EA()EH( + + )0 P(Our person record vocab)HY(u)HY(lary)YH( uses several built-in XML Schema + types: )SM(string)ES(, )SM(short)ES(, and + )SM(unsignedInt)ES(. Until now we haven't talked about + the mapping of built-in XML Schema types to C++ types and how + to work with them. This section provides an overview + of the built-in types. For more detailed infor)HY(ma)HY(tion)YH( refer + to )R13 2 A(Section + 2.5, "Mapping for Built-in Data Types")EA( in the C++/Tree Mapping + User Manual.)EP( + + )0 P(In XML Schema, built-in types are defined in the XML Schema names)HY(pace)YH(. + By default, the C++/Tree mapping maps this names)HY(pace)YH( to C++ + names)HY(pace)YH( )SM(xml_schema)ES( \201this mapping can be altered + with the )SM(--names)HY(pace)YH(-map)ES( option\202. The follow)HY(ing)YH( table + summa)HY(rizes)YH( the mapping of XML Schema built-in types to C++ types:)EP( + + + )0 PT( + + )0 P(As you can see from the table above a number of built-in + XML Schema types are mapped to funda)HY(men)HY(tal)YH( C++ types such + as )SM(int)ES( or )SM(bool)ES(. All string-based + XML Schema types are mapped to C++ types that are derived + from either )SM(std::string)ES( or + )SM(std::wstring)ES(, depend)HY(ing)YH( on the char)HY(ac)HY(ter)YH( + type selected. For access and modi)HY(fi)HY(ca)HY(tion)YH( purposes these + types can be treated as )SM(std::string)ES(. A number + of built-in types, such as )SM(qname)ES(, the binary + types, and the date/time types do not have suit)HY(able)YH( + funda)HY(men)HY(tal)YH( or stan)HY(dard)YH( C++ types to map to. As a result, + these types are imple)HY(mented)YH( from scratch in the XSD runtime. + For more infor)HY(ma)HY(tion)YH( on their inter)HY(faces)YH( refer to + )R13 2 A(Section + 2.5, "Mapping for Built-in Data Types")EA( in the C++/Tree Mapping + User Manual.)EP( + + + + + + )0 1 25 H(5)WB 60 Sn()WB 29 Sn( Parsing)EA()EH( + + )0 P(We have already seen how to parse XML to an object model in this guide + before. In this chapter we will discuss the parsing topic in more + detail.)EP( + + )0 P(By default, the C++/Tree mapping provides a total of 14 over)HY(loaded)YH( + parsing func)HY(tions)YH(. They differ in the input methods used to + read XML as well as the error report)HY(ing)YH( mech)HY(a)HY(nisms)YH(. It is also possi)HY(ble)YH( + to gener)HY(ate)YH( types for root elements instead of parsing and seri)HY(al)HY(iza)HY(tion)YH( + func)HY(tions)YH(. This may be useful if your XML vocab)HY(u)HY(lary)YH( has multi)HY(ple)YH( + root elements. For more infor)HY(ma)HY(tion)YH( on element types refer to + )R14 2 A(Section + 2.9, "Mapping for Global Elements")EA( in the C++/Tree Mapping User + Manual.)EP( + + + )0 P(In this section we will discuss the most commonly used versions of + the parsing func)HY(tions)YH(. For a compre)HY(hen)HY(sive)YH( descrip)HY(tion)YH( of parsing + refer to )R15 2 A(Chapter + 3, "Parsing")EA( in the C++/Tree Mapping User Manual. For the )SM(people)ES( + global element from our person record vocab)HY(u)HY(lary)YH(, we will concen)HY(trate)YH( + on the follow)HY(ing)YH( three parsing func)HY(tions)YH(:)EP( + + ) 15 71 PR(std::auto_ptr<people_t> +people \201const std::string& uri, + xml_schema::flags f = 0, + const xml_schema::properties& p = xml_schema::properties \201\202\202; + +std::auto_ptr<people_t> +people \201std::istream& is, + xml_schema::flags f = 0, + const xml_schema::properties& p = xml_schema::properties \201\202\202; + +std::auto_ptr<people_t> +people \201std::istream& is, + const std::string& resource_id, + xml_schema::flags f = 0, + const xml_schema::properties& p = ::xml_schema::properties \201\202\202;)RP( + + )0 P(The first func)HY(tion)YH( parses a local file or a URI. We have already + used this parsing func)HY(tion)YH( in the previ)HY(ous)YH( chap)HY(ters)YH(. The second + and third func)HY(tions)YH( read XML from a stan)HY(dard)YH( input stream. The + last func)HY(tion)YH( also requires a resource id. This id is used to + iden)HY(tify)YH( the XML docu)HY(ment)YH( being parser in diag)HY(nos)HY(tics)YH( messages + as well as to resolve rela)HY(tive)YH( paths to other docu)HY(ments)YH( \201for example, + schemas\202 that might be refer)HY(enced)YH( from the XML docu)HY(ment)YH(.)EP( + + )0 P(The last two argu)HY(ments)YH( to all three parsing func)HY(tions)YH( are parsing + flags and prop)HY(er)HY(ties)YH(. The flags argu)HY(ment)YH( provides a number of ways + to fine-tune the parsing process. The prop)HY(er)HY(ties)YH( argu)HY(ment)YH( allows + to pass addi)HY(tional)YH( infor)HY(ma)HY(tion)YH( to the parsing func)HY(tions)YH(. We will + use these two argu)HY(ments)YH( in )0 30 1 A(Section 5.1, "XML Schema + Vali)HY(da)HY(tion)YH( and Search)HY(ing)YH(")30 0 TN TL()Ec /AF f D( below. The follow)HY(ing)YH( example shows + how we can use the above parsing func)HY(tions)YH(:)EP( + + ) 17 65 PR(using std::auto_ptr; + +// Parse a local file or URI. +// +auto_ptr<people_t> p1 \201people \201"people.xml"\202\202; +auto_ptr<people_t> p2 \201people \201"http://example.com/people.xml"\202\202; + +// Parse a local file via ifstream. +// +std::ifstream ifs \201"people.xml"\202; +auto_ptr<people_t> p3 \201people \201ifs, "people.xml"\202\202; + +// Parse an XML string. +// +std::string str \201"..."\202; // XML in a string. +std::istringstream iss \201str\202; +auto_ptr<people_t> p4 \201people \201iss\202\202;)RP( + + + )0 2 26 H(5.1)WB 61 Sn()WB 30 Sn( XML Schema Vali)HY(da)HY(tion)YH( and Search)HY(ing)YH()EA()EH( + + )0 P(The C++/Tree mapping relies on the under)HY(ly)HY(ing)YH( Xerces-C++ XML + parser for full XML docu)HY(ment)YH( vali)HY(da)HY(tion)YH(. The XML Schema + vali)HY(da)HY(tion)YH( is enabled by default and can be disabled by + passing the )SM(xml_schema::flags::dont_vali)HY(date)YH()ES( + flag to the parsing func)HY(tions)YH(, for example:)EP( + + ) 2 59 PR(auto_ptr<people_t> p \201 + people \201"people.xml", xml_schema::flags::dont_validate\202\202;)RP( + + )0 P(Even when XML Schema vali)HY(da)HY(tion)YH( is disabled, the gener)HY(ated)YH( + code still performs a number of checks to prevent + construc)HY(tion)YH( of an incon)HY(sis)HY(tent)YH( object model \201for example, an + object model with missing required attributes or elements\202.)EP( + + )0 P(When XML Schema vali)HY(da)HY(tion)YH( is enabled, the XML parser needs + to locate a schema to vali)HY(date)YH( against. There are several + methods to provide the schema loca)HY(tion)YH( infor)HY(ma)HY(tion)YH( to the + parser. The easiest and most commonly used method is to + specify schema loca)HY(tions)YH( in the XML docu)HY(ment)YH( itself + with the )SM(schemaLo)HY(ca)HY(tion)YH()ES( or + )SM(noNames)HY(paceSchemaLo)HY(ca)HY(tion)YH()ES( attributes, for example:)EP( + + ) 4 74 PR(<?xml version="1.0" ?> +<people xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="people.xsd" + xsi:schemaLocation="http://www.w3.org/XML/1998/namespace xml.xsd">)RP( + + )0 P(As you might have noticed, we used this method in all the sample XML + docu)HY(ments)YH( presented in this guide up until now. Note that the + schema loca)HY(tions)YH( spec)HY(i)HY(fied)YH( with these two attributes are rela)HY(tive)YH( + to the docu)HY(ment)YH('s path unless they are abso)HY(lute)YH( URIs \201that is + start with )SM(http://)ES(, )SM(file://)ES(, etc.\202. + In partic)HY(u)HY(lar)YH(, if you specify just file names as your schema + loca)HY(tions)YH(, as we did above, then the schemas should reside in + the same direc)HY(tory)YH( as the XML docu)HY(ment)YH( itself.)EP( + + )0 P(Another method of provid)HY(ing)YH( the schema loca)HY(tion)YH( infor)HY(ma)HY(tion)YH( + is via the )SM(xml_schema::prop)HY(er)HY(ties)YH()ES( argu)HY(ment)YH(, as + shown in the follow)HY(ing)YH( example:)EP( + + ) 5 74 PR(xml_schema::properties props; +props.no_namespace_schema_location \201"people.xsd"\202; +props.schema_location \201"http://www.w3.org/XML/1998/namespace", "xml.xsd"\202; + +auto_ptr<people_t> p \201people \201"people.xml", 0, props\202\202;)RP( + + )0 P(The schema loca)HY(tions)YH( provided with this method over)HY(rides)YH( + those spec)HY(i)HY(fied)YH( in the XML docu)HY(ment)YH(. As with the previ)HY(ous)YH( + method, the schema loca)HY(tions)YH( spec)HY(i)HY(fied)YH( this way are + rela)HY(tive)YH( to the docu)HY(ment)YH('s path unless they are abso)HY(lute)YH( URIs. + In partic)HY(u)HY(lar)YH(, if you want to use local schemas that are + not related to the docu)HY(ment)YH( being parsed, then you will + need to use the )SM(file://)ES( URI. The follow)HY(ing)YH( + example shows how to use schemas that reside in the current + working direc)HY(tory)YH(:)EP( + + ) 19 55 PR(#include <unistd.h> // getcwd +#include <limits.h> // PATH_MAX + +char cwd[PATH_MAX]; +if \201getcwd \201cwd, PATH_MAX\202 == 0\202 +{ + // Buffer too small? +} + +xml_schema::properties props; + +props.no_namespace_schema_location \201 + "file:///" + std::string \201cwd\202 + "people.xsd"\202; + +props.schema_location \201 + "http://www.w3.org/XML/1998/namespace", + "file:///" + std::string \201cwd\202 + "xml.xsd"\202; + +auto_ptr<people_t> p \201people \201"people.xml", 0, props\202\202;)RP( + + )0 P(A third method is the most useful if you are plan)HY(ning)YH( to parse + several XML docu)HY(ments)YH( of the same vocab)HY(u)HY(lary)YH(. In that case + it may be bene)HY(fi)HY(cial)YH( to pre-parse and cache the schemas in + the XML parser which can then be used to parse all docu)HY(ments)YH( + without re-parsing the schemas. For more infor)HY(ma)HY(tion)YH( on + this method refer to the )SM(caching)ES( example in the + )SM(exam)HY(ples)YH(/cxx/tree/)ES( direc)HY(tory)YH( of the XSD + distri)HY(bu)HY(tion)YH(. It is also possi)HY(ble)YH( to convert the schemas into + a pre-compiled binary repre)HY(sen)HY(ta)HY(tion)YH( and embed this repre)HY(sen)HY(ta)HY(tion)YH( + directly into the appli)HY(ca)HY(tion)YH( executable. With this approach your + appli)HY(ca)HY(tion)YH( can perform XML Schema vali)HY(da)HY(tion)YH( without depend)HY(ing)YH( on + any exter)HY(nal)YH( schema files. For more infor)HY(ma)HY(tion)YH( on how to achieve + this refer to the )SM(embed)HY(ded)YH()ES( example in the + )SM(exam)HY(ples)YH(/cxx/tree/)ES( direc)HY(tory)YH( of the XSD distri)HY(bu)HY(tion)YH(.)EP( + + )0 P(When the XML parser cannot locate a schema for the + XML docu)HY(ment)YH(, the vali)HY(da)HY(tion)YH( fails and XML docu)HY(ment)YH( + elements and attributes for which schema defi)HY(ni)HY(tions)YH( could + not be located are reported in the diag)HY(nos)HY(tics)YH(. For + example, if we remove the )SM(noNames)HY(paceSchemaLo)HY(ca)HY(tion)YH()ES( + attribute in )SM(people.xml)ES( from the previ)HY(ous)YH( chapter, + then we will get the follow)HY(ing)YH( diag)HY(nos)HY(tics)YH( if we try to parse + this file with vali)HY(da)HY(tion)YH( enabled:)EP( + + ) 8 74 PR(people.xml:2:63 error: no declaration found for element 'people' +people.xml:4:18 error: no declaration found for element 'person' +people.xml:4:18 error: attribute 'id' is not declared for element 'person' +people.xml:5:17 error: no declaration found for element 'first-name' +people.xml:6:18 error: no declaration found for element 'middle-name' +people.xml:7:16 error: no declaration found for element 'last-name' +people.xml:8:13 error: no declaration found for element 'gender' +people.xml:9:10 error: no declaration found for element 'age')RP( + + )0 2 27 H(5.2)WB 62 Sn()WB 31 Sn( Error Handling)EA()EH( + + )0 P(The parsing func)HY(tions)YH( offer a number of ways to handle error condi)HY(tions)YH( + with the C++ excep)HY(tions)YH( being the most commonly used mech)HY(a)HY(nism)YH(. All + C++/Tree excep)HY(tions)YH( derive from common base )SM(xml_schema::excep)HY(tion)YH()ES( + which in turn derives from )SM(std::excep)HY(tion)YH()ES(. The easiest + way to uniformly handle all possi)HY(ble)YH( C++/Tree excep)HY(tions)YH( and print + detailed infor)HY(ma)HY(tion)YH( about the error is to catch and print + )SM(xml_schema::excep)HY(tion)YH()ES(, as shown in the follow)HY(ing)YH( + example:)EP( + + ) 8 47 PR(try +{ + auto_ptr<people_t> p \201people \201"people.xml"\202\202; +} +catch \201const xml_schema::exception& e\202 +{ + cerr << e << endl; +})RP( + + )0 P(Each indi)HY(vid)HY(ual)YH( C++/Tree excep)HY(tion)YH( also allows you to obtain + error details program)HY(mat)HY(i)HY(cally)YH(. For example, the + )SM(xml_schema::parsing)ES( excep)HY(tion)YH( is thrown when + the XML parsing and vali)HY(da)HY(tion)YH( in the under)HY(ly)HY(ing)YH( XML parser + fails. It encap)HY(su)HY(lates)YH( various diag)HY(nos)HY(tics)YH( infor)HY(ma)HY(tion)YH( + such as the file name, line and column numbers, as well as the + error or warning message for each entry. For more infor)HY(ma)HY(tion)YH( + about this and other excep)HY(tions)YH( that can be thrown during + parsing, refer to + )R16 2 A(Section + 3.3, "Error Handling")EA( in the C++/Tree Mapping + User Manual.)EP( + + )0 P(Note that if you are parsing )SM(std::istream)ES( on which + excep)HY(tions)YH( are not enabled, then you will need to check the + stream state after the call to the parsing func)HY(tion)YH( in order + to detect any possi)HY(ble)YH( stream fail)HY(ures)YH(, for example:)EP( + + ) 15 50 PR(std::ifstream ifs \201"people.xml"\202; + +if \201ifs.fail \201\202\202 +{ + cerr << "people.xml: unable to open" << endl; + return 1; +} + +auto_ptr<people_t> p \201people \201ifs, "people.xml"\202\202; + +if \201ifs.fail \201\202\202 +{ + cerr << "people.xml: read error" << endl; + return 1; +})RP( + + )0 P(The above example can be rewrit)HY(ten)YH( to use excep)HY(tions)YH( as + shown below:)EP( + + ) 13 66 PR(try +{ + std::ifstream ifs; + ifs.exceptions \201std::ifstream::badbit | std::ifstream::failbit\202; + ifs.open \201"people.xml"\202; + + auto_ptr<people_t> p \201people \201ifs, "people.xml"\202\202; +} +catch \201const std::ifstream::failure&\202 +{ + cerr << "people.xml: unable to open or read error" << endl; + return 1; +})RP( + + + + + + )0 1 28 H(6)WB 63 Sn()WB 32 Sn( Seri)HY(al)HY(iza)HY(tion)YH()EA()EH( + + )0 P(We have already seen how to seri)HY(al)HY(ize)YH( an object model back to XML + in this guide before. In this chapter we will discuss the + seri)HY(al)HY(iza)HY(tion)YH( topic in more detail.)EP( + + )0 P(By default, the C++/Tree mapping provides a total of 8 over)HY(loaded)YH( + seri)HY(al)HY(iza)HY(tion)YH( func)HY(tions)YH(. They differ in the output methods used to write + XML as well as the error report)HY(ing)YH( mech)HY(a)HY(nisms)YH(. It is also possi)HY(ble)YH( to + gener)HY(ate)YH( types for root elements instead of parsing and seri)HY(al)HY(iza)HY(tion)YH( + func)HY(tions)YH(. This may be useful if your XML vocab)HY(u)HY(lary)YH( has multi)HY(ple)YH( + root elements. For more infor)HY(ma)HY(tion)YH( on element types refer to + )R14 2 A(Section + 2.9, "Mapping for Global Elements")EA( in the C++/Tree Mapping User + Manual.)EP( + + + )0 P(In this section we will discuss the most commonly + used version of seri)HY(al)HY(iza)HY(tion)YH( func)HY(tions)YH(. For a compre)HY(hen)HY(sive)YH( descrip)HY(tion)YH( + of seri)HY(al)HY(iza)HY(tion)YH( refer to + )R17 2 A(Chapter + 4, "Seri)HY(al)HY(iza)HY(tion)YH(")EA( in the C++/Tree Mapping User Manual. For the + )SM(people)ES( global element from our person record vocab)HY(u)HY(lary)YH(, + we will concen)HY(trate)YH( on the follow)HY(ing)YH( seri)HY(al)HY(iza)HY(tion)YH( func)HY(tion)YH(:)EP( + + ) 7 50 PR(void +people \201std::ostream& os, + const people_t& x, + const xml_schema::namespace_infomap& map = + xml_schema::namespace_infomap \201\202, + const std::string& encoding = "UTF-8", + xml_schema::flags f = 0\202;)RP( + + )0 P(This func)HY(tion)YH( seri)HY(al)HY(izes)YH( the object model passed as the second + argu)HY(ment)YH( to the stan)HY(dard)YH( output stream passed as the first + argu)HY(ment)YH(. The third argu)HY(ment)YH( is a names)HY(pace)YH( infor)HY(ma)HY(tion)YH( map + which we will discuss in more detail in the next section. + The fourth argu)HY(ment)YH( is a char)HY(ac)HY(ter)YH( encod)HY(ing)YH( that the result)HY(ing)YH( + XML docu)HY(ment)YH( should be in. Possi)HY(ble)YH( valid values for this + argu)HY(ment)YH( are "US-ASCII", "ISO8859-1", "UTF-8", "UTF-16BE", + "UTF-16LE", "UCS-4BE", and "UCS-4LE". Finally, the flags + argu)HY(ment)YH( allows fine-tuning of the seri)HY(al)HY(iza)HY(tion)YH( process. + The follow)HY(ing)YH( example shows how we can use the above seri)HY(al)HY(iza)HY(tion)YH( + func)HY(tion)YH(:)EP( + + ) 19 34 PR(people_t& p = ... + +xml_schema::namespace_infomap map; +map[""].schema = "people.xsd"; + +// Serialize to stdout. +// +people \201std::cout, p, map\202; + +// Serialize to a file. +// +std::ofstream ofs \201"people.xml"\202; +people \201ofs, p, map\202; + +// Serialize to a string. +// +std::ostringstream oss; +people \201oss, p, map\202; +std::string xml \201oss.str \201\202\202;)RP( + + + )0 2 29 H(6.1)WB 64 Sn()WB 33 Sn( Names)HY(pace)YH( and Schema Infor)HY(ma)HY(tion)YH()EA()EH( + + )0 P(While XML seri)HY(al)HY(iza)HY(tion)YH( can be done just from the object + model alone, it is often desir)HY(able)YH( to assign mean)HY(ing)HY(ful)YH( + prefixes to XML names)HY(paces)YH( used in the vocab)HY(u)HY(lary)YH( as + well as to provide the schema loca)HY(tion)YH( infor)HY(ma)HY(tion)YH(. + This is accom)HY(plished)YH( by passing the names)HY(pace)YH( infor)HY(ma)HY(tion)YH( + map to the seri)HY(al)HY(iza)HY(tion)YH( func)HY(tion)YH(. The key in this map is + a names)HY(pace)YH( prefix that should be assigned to an XML names)HY(pace)YH( + spec)HY(i)HY(fied)YH( in the )SM(name)ES( vari)HY(able)YH( of the + map value. You can also assign an optional schema loca)HY(tion)YH( for + this names)HY(pace)YH( in the )SM(schema)ES( vari)HY(able)YH(. Based + on each key-value entry in this map, the seri)HY(al)HY(iza)HY(tion)YH( + func)HY(tion)YH( adds two attributes to the result)HY(ing)YH( XML docu)HY(ment)YH(: + the names)HY(pace)YH(-prefix mapping attribute and schema loca)HY(tion)YH( + attribute. The empty prefix indi)HY(cates)YH( that the names)HY(pace)YH( + should be mapped without a prefix. For example, the follow)HY(ing)YH( + map:)EP( + + ) 7 55 PR(xml_schema::namespace_infomap map; + +map[""].name = "http://www.example.com/example"; +map[""].schema = "example.xsd"; + +map["x"].name = "http://www.w3.org/XML/1998/namespace"; +map["x"].schema = "xml.xsd";)RP( + + )0 P(Results in the follow)HY(ing)YH( XML docu)HY(ment)YH(:)EP( + + ) 7 68 PR(<?xml version="1.0" ?> +<example + xmlns="http://www.example.com/example" + xmlns:x="http://www.w3.org/XML/1998/namespace" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.example.com/example example.xsd + http://www.w3.org/XML/1998/namespace xml.xsd">)RP( + + )0 P(The empty names)HY(pace)YH( indi)HY(cates)YH( that the vocab)HY(u)HY(lary)YH( has no target + names)HY(pace)YH(. For example, the follow)HY(ing)YH( map results in only the + )SM(noNames)HY(paceSchemaLo)HY(ca)HY(tion)YH()ES( attribute being added:)EP( + + ) 4 34 PR(xml_schema::namespace_infomap map; + +map[""].name = ""; +map[""].schema = "example.xsd";)RP( + + )0 2 30 H(6.2)WB 65 Sn()WB 34 Sn( Error Handling)EA()EH( + + )0 P(Similar to the parsing func)HY(tions)YH(, the seri)HY(al)HY(iza)HY(tion)YH( func)HY(tions)YH( offer a + number of ways to handle error condi)HY(tions)YH( with the C++ excep)HY(tions)YH( being + the most commonly used mech)HY(a)HY(nisms)YH(. As with parsing, the easiest way to + uniformly handle all possi)HY(ble)YH( seri)HY(al)HY(iza)HY(tion)YH( excep)HY(tions)YH( and print + detailed infor)HY(ma)HY(tion)YH( about the error is to catch and print + )SM(xml_schema::excep)HY(tion)YH()ES(:)EP( + + ) 13 38 PR(try +{ + people_t& p = ... + + xml_schema::namespace_infomap map; + map[""].schema = "people.xsd"; + + people \201std::cout, p, map\202\202; +} +catch \201const xml_schema::exception& e\202 +{ + cerr << e << endl; +})RP( + + )0 P(The most commonly encoun)HY(tered)YH( seri)HY(al)HY(iza)HY(tion)YH( excep)HY(tion)YH( is + )SM(xml_schema::seri)HY(al)HY(iza)HY(tion)YH()ES(. It is thrown + when the XML seri)HY(al)HY(iza)HY(tion)YH( in the under)HY(ly)HY(ing)YH( XML writer + fails. It encap)HY(su)HY(lates)YH( various diag)HY(nos)HY(tics)YH( infor)HY(ma)HY(tion)YH( + such as the file name, line and column numbers, as well as the + error or warning message for each entry. For more infor)HY(ma)HY(tion)YH( + about this and other excep)HY(tions)YH( that can be thrown during + seri)HY(al)HY(iza)HY(tion)YH(, refer to + )R18 2 A(Section + 4.4, "Error Handling")EA( in the C++/Tree Mapping + User Manual.)EP( + + )0 P(Note that if you are seri)HY(al)HY(iz)HY(ing)YH( to )SM(std::ostream)ES( on + which excep)HY(tions)YH( are not enabled, then you will need to check the + stream state after the call to the seri)HY(al)HY(iza)HY(tion)YH( func)HY(tion)YH( in order + to detect any possi)HY(ble)YH( stream fail)HY(ures)YH(, for example:)EP( + + ) 15 47 PR(std::ofstream ofs \201"people.xml"\202; + +if \201ofs.fail \201\202\202 +{ + cerr << "people.xml: unable to open" << endl; + return 1; +} + +people \201ofs, p, map\202\202; + +if \201ofs.fail \201\202\202 +{ + cerr << "people.xml: write error" << endl; + return 1; +})RP( + + )0 P(The above example can be rewrit)HY(ten)YH( to use excep)HY(tions)YH( as + shown below:)EP( + + ) 13 66 PR(try +{ + std::ofstream ofs; + ofs.exceptions \201std::ofstream::badbit | std::ofstream::failbit\202; + ofs.open \201"people.xml"\202; + + people \201ofs, p, map\202\202; +} +catch \201const std::ofstream::failure&\202 +{ + cerr << "people.xml: unable to open or write error" << endl; + return 1; +})RP( + + )BR( +)BR( + +)WB NL +/TE t D NP TU PM 0 eq and{/Pn () D showpage}if end restore diff --git a/xsd/documentation/cxx/tree/guide/guide.html2ps b/xsd/documentation/cxx/tree/guide/guide.html2ps new file mode 100644 index 0000000..30a4e3d --- /dev/null +++ b/xsd/documentation/cxx/tree/guide/guide.html2ps @@ -0,0 +1,65 @@ +@html2ps { + option { + toc: hb; + colour: 1; + hyphenate: 1; + titlepage: 1; + } + + datefmt: "%B %Y"; + + titlepage { + content: " +<div align=center> + <h1><big>C++/Tree Mapping</big></h1> + <h1><big>Getting Started Guide</big></h1> + <h1> </h1> + <h1> </h1> + <h1> </h1> + <h1> </h1> + <h1> </h1> + <h1> </h1> +</div> + <p>Copyright © 2005-2010 CODE SYNTHESIS TOOLS CC</p> + + <p>Permission is granted to copy, distribute and/or modify this + document under the terms of the + <a href='http://www.codesynthesis.com/licenses/fdl-1.2.txt'>GNU Free + Documentation License, version 1.2</a>; with no Invariant Sections, + no Front-Cover Texts and no Back-Cover Texts. + </p> + + <p>This document is available in the following formats: + <a href='http://www.codesynthesis.com/projects/xsd/documentation/cxx/tree/guide/index.xhtml'>XHTML</a>, + <a href='http://www.codesynthesis.com/projects/xsd/documentation/cxx/tree/guide/cxx-parser-guide.pdf'>PDF</a>, and + <a href='http://www.codesynthesis.com/projects/xsd/documentation/cxx/tree/guide/cxx-parser-guide.ps'>PostScript</a>.</p>"; + } + + toc { + indent: 2em; + } + + header { + odd-right: $H; + even-left: $H; + } + + footer { + odd-left: $D; + odd-center: $T; + odd-right: $N; + + even-left: $N; + even-center: $T; + even-right: $D; + } +} + +body { + font-size: 12pt; + text-align: justify; +} + +pre { + font-size: 10pt; +} diff --git a/xsd/documentation/cxx/tree/guide/index.xhtml b/xsd/documentation/cxx/tree/guide/index.xhtml new file mode 100644 index 0000000..476e7ea --- /dev/null +++ b/xsd/documentation/cxx/tree/guide/index.xhtml @@ -0,0 +1,2690 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> + +<head> + <title>C++/Tree Mapping Getting Started Guide</title> + + <meta name="copyright" content="© 2005-2010 Code Synthesis Tools CC"/> + <meta name="keywords" content="xsd,xml,schema,c++,mapping,data,binding,parsing,serialization,validation"/> + <meta name="description" content="C++/Tree Mapping Getting Started Guide"/> + + <link rel="stylesheet" type="text/css" href="../../../default.css" /> + +<style type="text/css"> + pre { + padding : 0 0 0 0em; + margin : 0em 0em 0em 0; + + font-size : 102% + } + + body { + min-width: 48em; + } + + h1 { + font-weight: bold; + font-size: 200%; + line-height: 1.2em; + } + + h2 { + font-weight : bold; + font-size : 150%; + + padding-top : 0.8em; + } + + h3 { + font-size : 140%; + padding-top : 0.8em; + } + + /* Adjust indentation for three levels. */ + #container { + max-width: 48em; + } + + #content { + padding: 0 0.1em 0 4em; + /*background-color: red;*/ + } + + #content h1 { + margin-left: -2.06em; + } + + #content h2 { + margin-left: -1.33em; + } + + /* Title page */ + + #titlepage { + padding: 2em 0 1em 0; + border-bottom: 1px solid black; + } + + #titlepage .title { + font-weight: bold; + font-size: 200%; + text-align: center; + } + + #titlepage #first-title { + padding: 1em 0 0.4em 0; + } + + #titlepage #second-title { + padding: 0.4em 0 2em 0; + } + + /* Lists */ + ul.list li { + padding-top : 0.3em; + padding-bottom : 0.3em; + } + + div.img { + text-align: center; + padding: 2em 0 2em 0; + } + + /* */ + dl dt { + padding : 0.8em 0 0 0; + } + + /* Built-in table */ + #builtin { + margin: 2em 0 2em 0; + + border-collapse : collapse; + border : 1px solid; + border-color : #000000; + + font-size : 11px; + line-height : 14px; + } + + #builtin th, #builtin td { + border: 1px solid; + padding : 0.9em 0.9em 0.7em 0.9em; + } + + #builtin th { + background : #cde8f6; + } + + #builtin td { + text-align: left; + } + + /* TOC */ + table.toc { + border-style : none; + border-collapse : separate; + border-spacing : 0; + + margin : 0.2em 0 0.2em 0; + padding : 0 0 0 0; + } + + table.toc tr { + padding : 0 0 0 0; + margin : 0 0 0 0; + } + + table.toc * td, table.toc * th { + border-style : none; + margin : 0 0 0 0; + vertical-align : top; + } + + table.toc * th { + font-weight : normal; + padding : 0em 0.1em 0em 0; + text-align : left; + white-space : nowrap; + } + + table.toc * table.toc th { + padding-left : 1em; + } + + table.toc * td { + padding : 0em 0 0em 0.7em; + text-align : left; + } +</style> + + +</head> + +<body> +<div id="container"> + <div id="content"> + + <div class="noprint"> + + <div id="titlepage"> + <div class="title" id="first-title">C++/Tree Mapping</div> + <div class="title" id="second-title">Getting Started Guide</div> + + <p>Copyright © 2005-2010 CODE SYNTHESIS TOOLS CC</p> + + <p>Permission is granted to copy, distribute and/or modify this + document under the terms of the + <a href="http://www.codesynthesis.com/licenses/fdl-1.2.txt">GNU Free + Documentation License, version 1.2</a>; with no Invariant Sections, + no Front-Cover Texts and no Back-Cover Texts. + </p> + + <p>This document is available in the following formats: + <a href="http://www.codesynthesis.com/projects/xsd/documentation/cxx/tree/guide/index.xhtml">XHTML</a>, + <a href="http://www.codesynthesis.com/projects/xsd/documentation/cxx/tree/guide/cxx-tree-guide.pdf">PDF</a>, and + <a href="http://www.codesynthesis.com/projects/xsd/documentation/cxx/tree/guide/cxx-tree-guide.ps">PostScript</a>.</p> + + </div> + + <h1>Table of Contents</h1> + + <table class="toc"> + <tr> + <th></th><td><a href="#0">Preface</a> + <table class="toc"> + <tr><th></th><td><a href="#0.1">About This Document</a></td></tr> + <tr><th></th><td><a href="#0.2">More Information</a></td></tr> + </table> + </td> + </tr> + + <tr> + <th>1</th><td><a href="#1">Introduction</a> + <table class="toc"> + <tr><th>1.1</th><td><a href="#1.1">Mapping Overview</a></td></tr> + <tr><th>1.2</th><td><a href="#1.2">Benefits</a></td></tr> + </table> + </td> + </tr> + + <tr> + <th>2</th><td><a href="#2">Hello World Example</a> + <table class="toc"> + <tr><th>2.1</th><td><a href="#2.1">Writing XML Document and Schema</a></td></tr> + <tr><th>2.2</th><td><a href="#2.2">Translating Schema to C++</a></td></tr> + <tr><th>2.3</th><td><a href="#2.3">Implementing Application Logic</a></td></tr> + <tr><th>2.4</th><td><a href="#2.4">Compiling and Running</a></td></tr> + <tr><th>2.5</th><td><a href="#2.5">Adding Serialization</a></td></tr> + <tr><th>2.6</th><td><a href="#2.6">Selecting Naming Convention</a></td></tr> + <tr><th>2.7</th><td><a href="#2.7">Generating Documentation</a></td></tr> + </table> + </td> + </tr> + + <tr> + <th>3</th><td><a href="#3">Overall Mapping Configuration</a> + <table class="toc"> + <tr><th>3.1</th><td><a href="#3.1">Character Type and Encoding</a></td></tr> + <tr><th>3.2</th><td><a href="#3.2">Support for Polymorphism </a></td></tr> + <tr><th>3.3</th><td><a href="#3.3">Namespace Mapping</a></td></tr> + <tr><th>3.4</th><td><a href="#3.4">Thread Safety</a></td></tr> + </table> + </td> + </tr> + + <tr> + <th>4</th><td><a href="#4">Working with Object Models</a> + <table class="toc"> + <tr><th>4.1</th><td><a href="#4.1">Attribute and Element Cardinalities</a></td></tr> + <tr><th>4.2</th><td><a href="#4.2">Accessing the Object Model</a></td></tr> + <tr><th>4.3</th><td><a href="#4.3">Modifying the Object Model</a></td></tr> + <tr><th>4.4</th><td><a href="#4.4">Creating the Object Model from Scratch</a></td></tr> + <tr><th>4.5</th><td><a href="#4.5">Mapping for the Built-in XML Schema Types</a></td></tr> + </table> + </td> + </tr> + + <tr> + <th>5</th><td><a href="#5">Parsing</a> + <table class="toc"> + <tr><th>5.1</th><td><a href="#5.1">XML Schema Validation and Searching</a></td></tr> + <tr><th>5.2</th><td><a href="#5.2">Error Handling</a></td></tr> + </table> + </td> + </tr> + + <tr> + <th>6</th><td><a href="#6">Serialization</a> + <table class="toc"> + <tr><th>6.1</th><td><a href="#6.1">Namespace and Schema Information</a></td></tr> + <tr><th>6.2</th><td><a href="#6.2">Error Handling</a></td></tr> + </table> + </td> + </tr> + + </table> + </div> + + <h1><a name="0">Preface</a></h1> + + <h2><a name="0.1">About This Document</a></h2> + + <p>The goal of this document is to provide you with an understanding of + the C++/Tree programming model and allow you to efficiently evaluate + XSD against your project's technical requirements. As such, this + document is intended for C++ developers and software architects + who are looking for an XML processing solution. For a more in-depth + description of the C++/Tree mapping refer to the + <a href="http://www.codesynthesis.com/projects/xsd/documentation/cxx/tree/manual/">C++/Tree + Mapping User Manual</a>.</p> + + <p>Prior experience with XML and C++ is required to understand this + document. Basic understanding of XML Schema is advantageous but + not expected or required. + </p> + + + <h2><a name="0.2">More Information</a></h2> + + <p>Beyond this guide, you may also find the following sources of + information useful:</p> + + <ul class="list"> + <li><a href="http://www.codesynthesis.com/projects/xsd/documentation/cxx/tree/manual/">C++/Tree + Mapping User Manual</a></li> + + <li><a href="http://wiki.codesynthesis.com/Tree/Customization_guide">C++/Tree + Mapping Customization Guide</a></li> + + <li><a href="http://www.codesynthesis.com/projects/xsd/documentation/cxx/tree/dbxml/">C++/Tree + Mapping and Berkeley DB XML Integration Guide</a></li> + + <li><a href="http://wiki.codesynthesis.com/Tree/FAQ">C++/Tree + Mapping Frequently Asked Questions (FAQ)</a></li> + + <li><a href="http://www.codesynthesis.com/projects/xsd/documentation/xsd.xhtml">XSD + Compiler Command Line Manual</a></li> + + <li>The <code>examples/cxx/tree/</code> directory in the XSD + distribution contains a collection of examples and a README + file with an overview of each example.</li> + + <li>The <code>README</code> file in the XSD distribution explains + how to compile the examples on various platforms.</li> + + <li>The <a href="http://www.codesynthesis.com/mailman/listinfo/xsd-users">xsd-users</a> + mailing list is the place to ask technical questions about XSD and the C++/Parser mapping. + Furthermore, the <a href="http://www.codesynthesis.com/pipermail/xsd-users/">archives</a> + may already have answers to some of your questions.</li> + + </ul> + + <!-- Introduction --> + + <h1><a name="1">1 Introduction</a></h1> + + <p>Welcome to CodeSynthesis XSD and the C++/Tree mapping. XSD is a + cross-platform W3C XML Schema to C++ data binding compiler. C++/Tree + is a W3C XML Schema to C++ mapping that represents the data stored + in XML as a statically-typed, vocabulary-specific object model. + </p> + + <h2><a name="1.1">1.1 Mapping Overview</a></h2> + + <p>Based on a formal description of an XML vocabulary (schema), the + C++/Tree mapping produces a tree-like data structure suitable for + in-memory processing. The core of the mapping consists of C++ + classes that constitute the object model and are derived from + types defined in XML Schema as well as XML parsing and + serialization code.</p> + + <p>Besides the core features, C++/Tree provide a number of additional + mapping elements that can be useful in some applications. These + include serialization and extraction to/from formats others than + XML, such as unstructured text (useful for debugging) and binary + representations such as XDR and CDR for high-speed data processing, + integration with XML databases such as Berkeley DB XML, and automatic + documentation generation. The C++/Tree mapping also provides a wide + range of mechanisms for controlling and customizing the generated + code.</p> + + <p>A typical application that uses C++/Tree for XML processing usually + performs the following three steps: it first reads (parses) an XML + document to an in-memory object model, it then performs some useful + computations on that object model which may involve modification + of the model, and finally it may write (serialize) the modified + object model back to XML.</p> + + <p>The next chapter presents a simple application that performs these + three steps. The following chapters show how to use the C++/Tree + mapping in more detail.</p> + + <h2><a name="1.2">1.2 Benefits</a></h2> + + <p>Traditional XML access APIs such as Document Object Model (DOM) + or Simple API for XML (SAX) have a number of drawbacks that + make them less suitable for creating robust and maintainable + XML processing applications. These drawbacks include: + </p> + + <ul class="list"> + <li>Generic representation of XML in terms of elements, attributes, + and text forces an application developer to write a substantial + amount of bridging code that identifies and transforms pieces + of information encoded in XML to a representation more suitable + for consumption by the application logic.</li> + + <li>String-based flow control defers error detection to runtime. + It also reduces code readability and maintainability.</li> + + <li>Lack of type safety because the data is represented as text.</li> + + <li>Resulting applications are hard to debug, change, and + maintain.</li> + </ul> + + <p>In contrast, statically-typed, vocabulary-specific object model + produced by the C++/Tree mapping allows you to operate in your + domain terms instead of the generic elements, attributes, and + text. Static typing helps catch errors at compile-time rather + than at run-time. Automatic code generation frees you for more + interesting tasks (such as doing something useful with the + information stored in the XML documents) and minimizes the + effort needed to adapt your applications to changes in the + document structure. To summarize, the C++/Tree object model has + the following key advantages over generic XML access APIs:</p> + + <ul class="list"> + <li><b>Ease of use.</b> The generated code hides all the complexity + associated with parsing and serializing XML. This includes navigating + the structure and converting between the text representation and + data types suitable for manipulation by the application + logic.</li> + + <li><b>Natural representation.</b> The object representation allows + you to access the XML data using your domain vocabulary instead + of generic elements, attributes, and text.</li> + + <li><b>Concise code.</b> With the object representation the + application implementation is simpler and thus easier + to read and understand.</li> + + <li><b>Safety.</b> The generated object model is statically + typed and uses functions instead of strings to access the + information. This helps catch programming errors at compile-time + rather than at runtime.</li> + + <li><b>Maintainability.</b> Automatic code generation minimizes the + effort needed to adapt the application to changes in the + document structure. With static typing, the C++ compiler + can pin-point the places in the client code that need to be + changed.</li> + + <li><b>Compatibility.</b> Sequences of elements are represented in + the object model as containers conforming to the standard C++ + sequence requirements. This makes it possible to use standard + C++ algorithms on the object representation and frees you from + learning yet another container interface, as is the case with + DOM.</li> + + <li><b>Efficiency.</b> If the application makes repetitive use + of the data extracted from XML, then the C++/Tree object model + is more efficient because the navigation is performed using + function calls rather than string comparisons and the XML + data is extracted only once. Furthermore, the runtime memory + usage is reduced due to more efficient data storage + (for instance, storing numeric data as integers instead of + strings) as well as the static knowledge of cardinality + constraints.</li> + </ul> + + + <!-- Hello World Parser --> + + + <h1><a name="2">2 Hello World Example</a></h1> + + <p>In this chapter we will examine how to parse, access, modify, and + serialize a very simple XML document using the XSD-generated + C++/Tree object model. The code presented in this chapter is + based on the <code>hello</code> example which can be found in + the <code>examples/cxx/tree/</code> directory of the XSD + distribution.</p> + + <h2><a name="2.1">2.1 Writing XML Document and Schema</a></h2> + + <p>First, we need to get an idea about the structure + of the XML documents we are going to process. Our + <code>hello.xml</code>, for example, could look like this:</p> + + <pre class="xml"> +<?xml version="1.0"?> +<hello> + + <greeting>Hello</greeting> + + <name>sun</name> + <name>moon</name> + <name>world</name> + +</hello> + </pre> + + <p>Then we can write a description of the above XML in the + XML Schema language and save it into <code>hello.xsd</code>:</p> + + <pre class="xml"> +<?xml version="1.0"?> +<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> + + <xs:complexType name="hello_t"> + <xs:sequence> + <xs:element name="greeting" type="xs:string"/> + <xs:element name="name" type="xs:string" maxOccurs="unbounded"/> + </xs:sequence> + </xs:complexType> + + <xs:element name="hello" type="hello_t"/> + +</xs:schema> + </pre> + + <p>Even if you are not familiar with XML Schema, it + should be easy to connect declarations in <code>hello.xsd</code> + to elements in <code>hello.xml</code>. The <code>hello_t</code> type + is defined as a sequence of the nested <code>greeting</code> and + <code>name</code> elements. Note that the term sequence in XML + Schema means that elements should appear in a particular order + as opposed to appearing multiple times. The <code>name</code> + element has its <code>maxOccurs</code> property set to + <code>unbounded</code> which means it can appear multiple times + in an XML document. Finally, the globally-defined <code>hello</code> + element prescribes the root element for our vocabulary. For an + easily-approachable introduction to XML Schema refer to + <a href="http://www.w3.org/TR/xmlschema-0/">XML Schema Part 0: + Primer</a>.</p> + + <p>The above schema is a specification of our XML vocabulary; it tells + everybody what valid documents of our XML-based language should look + like. We can also update our <code>hello.xml</code> to include the + information about the schema so that XML parsers can validate + our document:</p> + + <pre class="xml"> +<?xml version="1.0"?> +<hello xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="hello.xsd"> + + <greeting>Hello</greeting> + + <name>sun</name> + <name>moon</name> + <name>world</name> + +</hello> + </pre> + + + <p>The next step is to compile the schema to generate the object + model and parsing functions.</p> + + <h2><a name="2.2">2.2 Translating Schema to C++</a></h2> + + <p>Now we are ready to translate our <code>hello.xsd</code> to C++. + To do this we invoke the XSD compiler from a terminal (UNIX) or + a command prompt (Windows): + </p> + + <pre class="terminal"> +$ xsd cxx-tree hello.xsd + </pre> + + <p>The XSD compiler produces two C++ files: <code>hello.hxx</code> and + <code>hello.cxx</code>. The following code fragment is taken from + <code>hello.hxx</code>; it should give you an idea about what gets + generated: + </p> + + <pre class="c++"> +class hello_t +{ +public: + // greeting + // + typedef xml_schema::string greeting_type; + + const greeting_type& + greeting () const; + + greeting_type& + greeting (); + + void + greeting (const greeting_type& x); + + // name + // + typedef xml_schema::string name_type; + typedef xsd::sequence<name_type> name_sequence; + typedef name_sequence::iterator name_iterator; + typedef name_sequence::const_iterator name_const_iterator; + + const name_sequence& + name () const; + + name_sequence& + name (); + + void + name (const name_sequence& s); + + // Constructor. + // + hello_t (const greeting_type&); + + ... + +}; + +std::auto_ptr<hello_t> +hello (const std::string& uri); + +std::auto_ptr<hello_t> +hello (std::istream&); + </pre> + + <p>The <code>hello_t</code> C++ class corresponds to the + <code>hello_t</code> XML Schema type. For each element + in this type a set of C++ type definitions as well as + accessor and modifier functions are generated inside the + <code>hello_t</code> class. Note that the type definitions + and member functions for the <code>greeting</code> and + <code>name</code> elements are different because of the + cardinality differences between these two elements + (<code>greeting</code> is a required single element and + <code>name</code> is a sequence of elements).</p> + + <p>The <code>xml_schema::string</code> type used in the type + definitions is a C++ class provided by the XSD runtime + that corresponds to built-in XML Schema type + <code>string</code>. The <code>xml_schema::string</code> + is based on <code>std::string</code> and can be used as + such. Similarly, the <code>sequence</code> class template + that is used in the <code>name_sequence</code> type + definition is based on and has the same interface as + <code>std::vector</code>. The mapping between the built-in + XML Schema types and C++ types is described in more detail in + <a href="#4.5">Section 4.5, "Mapping for the Built-in XML Schema + Types"</a>. The <code>hello_t</code> class also includes a + constructor with an initializer for the required + <code>greeting</code> element as its argument.</p> + + <p>The <code>hello</code> overloaded global functions correspond + to the <code>hello</code> global element in XML Schema. A + global element in XML Schema is a valid document root. + By default XSD generated a set of parsing functions for each + global element defined in XML Schema (this can be overridden + with the <code>--root-element-*</code> options). For more + information on parsing functions see <a href="#5">Chapter 5, + "Parsing"</a>.</p> + + <h2><a name="2.3">2.3 Implementing Application Logic</a></h2> + + <p>At this point we have all the parts we need to do something useful + with the information stored in our XML document: + </p> + + <pre class="c++"> +#include <iostream> +#include "hello.hxx" + +using namespace std; + +int +main (int argc, char* argv[]) +{ + try + { + auto_ptr<hello_t> h (hello (argv[1])); + + for (hello_t::name_const_iterator i (h->name ().begin ()); + i != h->name ().end (); + ++i) + { + cerr << h->greeting () << ", " << *i << "!" << endl; + } + } + catch (const xml_schema::exception& e) + { + cerr << e << endl; + return 1; + } +} + </pre> + + <p>The first part of our application calls one of the parsing + functions to parser an XML file specified in the command line. + We then use the returned object model to iterate over names + and print a greeting line for each of them. Finally, we + catch and print the <code>xml_schema::exception</code> + exception in case something goes wrong. This exception + is the root of the exception hierarchy used by the + XSD-generated code. + </p> + + + <h2><a name="2.4">2.4 Compiling and Running</a></h2> + + <p>After saving our application from the previous section in + <code>driver.cxx</code>, we are ready to compile our first + program and run it on the test XML document. On a UNIX + system this can be done with the following commands: + </p> + + <pre class="terminal"> +$ c++ -I.../libxsd -c driver.cxx hello.cxx +$ c++ -o driver driver.o hello.o -lxerces-c +$ ./driver hello.xml +Hello, sun! +Hello, moon! +Hello, world! + </pre> + + <p>Here <code>.../libxsd</code> represents the path to the + <code>libxsd</code> directory in the XSD distribution. + Note also that we are required to link our application + with the Xerces-C++ library because the generated code + uses it as the underlying XML parser.</p> + + <h2><a name="2.5">2.5 Adding Serialization</a></h2> + + <p>While parsing and accessing the XML data may be everything + you need, there are applications that require creating new + or modifying existing XML documents. By default XSD does + not produce serialization code. We will need to request + it with the <code>--generate-serialization</code> options:</p> + + <pre class="terminal"> +$ xsd cxx-tree --generate-serialization hello.xsd + </pre> + + <p>If we now examine the generated <code>hello.hxx</code> file, + we will find a set of overloaded serialization functions, + including the following version:</p> + + <pre class="c++"> +void +hello (std::ostream&, + const hello_t&, + const xml_schema::namespace_infomap& = + xml_schema::namespace_infomap ()); + + </pre> + + <p>Just like with parsing functions, XSD generates serialization + functions for each global element unless instructed otherwise + with one of the <code>--root-element-*</code> options. For more + information on serialization functions see <a href="#6">Chapter 6, + "Serialization"</a>.</p> + + <p>We first examine an application that modifies an existing + object model and serializes it back to XML:</p> + + <pre class="c++"> +#include <iostream> +#include "hello.hxx" + +using namespace std; + +int +main (int argc, char* argv[]) +{ + try + { + auto_ptr<hello_t> h (hello (argv[1])); + + // Change the greeting phrase. + // + h->greeting ("Hi"); + + // Add another entry to the name sequence. + // + h->name ().push_back ("mars"); + + // Serialize the modified object model to XML. + // + xml_schema::namespace_infomap map; + map[""].name = ""; + map[""].schema = "hello.xsd"; + + hello (cout, *h, map); + } + catch (const xml_schema::exception& e) + { + cerr << e << endl; + return 1; + } +} + </pre> + + <p>First, our application parses an XML document and obtains its + object model as in the previous example. Then it changes the + greeting string and adds another entry to the list of names. + Finally, it serializes the object model back to XML by calling + the serialization function.</p> + + <p>The first argument we pass to the serialization function is + <code>cout</code> which results in the XML being written to + the standard output for us to inspect. We could have also + written the result to a file or memory buffer by creating an + instance of <code>std::ofstream</code> or <code>std::ostringstream</code> + and passing it instead of <code>cout</code>. The second argument is the + object model we want to serialize. The final argument is an optional + namespace information map for our vocabulary. It captures information + such as namespaces, namespace prefixes to which they should be mapped, + and schemas associated with these namespaces. If we don't provide + this argument then generic namespace prefixes (<code>p1</code>, + <code>p2</code>, etc.) will be automatically assigned to XML namespaces + and no schema information will be added to the resulting document + (see <a href="#6">Chapter 6, "Serialization"</a> for details). + In our case, the prefix (map key) and namespace name are empty + because our vocabulary does not use XML namespaces.</p> + + <p>If we now compile and run this application we will see the + output as shown in the following listing:</p> + + <pre class="xml"> +<?xml version="1.0"?> +<hello xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="hello.xsd"> + + <greeting>Hi</greeting> + + <name>sun</name> + <name>moon</name> + <name>world</name> + <name>mars</name> + +</hello> + </pre> + + <p>We can also create and serialize an object model from scratch + as shown in the following example:</p> + + <pre class="c++"> +#include <iostream> +#include <fstream> +#include "hello.hxx" + +using namespace std; + +int +main (int argc, char* argv[]) +{ + try + { + hello_t h ("Hi"); + + hello_t::name_sequence& ns (h.name ()); + + ns.push_back ("Jane"); + ns.push_back ("John"); + + // Serialize the object model to XML. + // + xml_schema::namespace_infomap map; + map[""].name = ""; + map[""].schema = "hello.xsd"; + + std::ofstream ofs (argv[1]); + hello (ofs, h, map); + } + catch (const xml_schema::exception& e) + { + cerr << e << endl; + return 1; + } +} + </pre> + + <p>In this example we used the generated constructor to create + an instance of type <code>hello_t</code>. To reduce typing, + we obtained a reference to the name sequence which we then + used to add a few names. The serialization part is identical + to the previous example except this time we are writing to + a file. If we compile and run this program, it produces the + following XML file:</p> + + <pre class="xml"> +<?xml version="1.0"?> +<hello xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="hello.xsd"> + + <greeting>Hi</greeting> + + <name>Jane</name> + <name>John</name> + +</hello> + </pre> + + <h2><a name="2.6">2.6 Selecting Naming Convention</a></h2> + + <p>By default XSD uses the so-called K&R (Kernighan and Ritchie) + identifier naming convention in the generated code. In this + convention both type and function names are in lower case and + words are separated by underscores. If your application code or + schemas use a different notation, you may want to change the + naming convention used in the generated code for consistency. + XSD supports a set of widely-used naming conventions + that you can select with the <code>--type-naming</code> and + <code>--function-naming</code> options. You can also further + refine one of the predefined conventions or create a completely + custom naming scheme by using the <code>--*-regex</code> options.</p> + + <p>As an example, let's assume that our "Hello World" application + uses the so-called upper-camel-case naming convention for types + (that is, each word in a type name is capitalized) and the K&R + convention for function names. Since K&R is the default + convention for both type and function names, we only need to + change the type naming scheme:</p> + + <pre class="terminal"> +$ xsd cxx-tree --type-naming ucc hello.xsd + </pre> + + <p>The <code>ucc</code> argument to the <code>--type-naming</code> + options stands for upper-camel-case. If we now examine the + generated <code>hello.hxx</code>, we will see the following + changes compared to the declarations shown in the previous + sections:</p> + + <pre class="c++"> +class Hello_t +{ +public: + // greeting + // + typedef xml_schema::String GreetingType; + + const GreetingType& + greeting () const; + + GreetingType& + greeting (); + + void + greeting (const GreetingType& x); + + // name + // + typedef xml_schema::String NameType; + typedef xsd::sequence<NameType> NameSequence; + typedef NameSequence::iterator NameIterator; + typedef NameSequence::const_iterator NameConstIterator; + + const NameSequence& + name () const; + + NameSequence& + name (); + + void + name (const NameSequence& s); + + // Constructor. + // + Hello_t (const GreetingType&); + + ... + +}; + +std::auto_ptr<Hello_t> +hello (const std::string& uri); + +std::auto_ptr<Hello_t> +hello (std::istream&); + </pre> + + <p>Notice that the type names in the <code>xml_schema</code> namespace, + for example <code>xml_schema::String</code>, now also use the + upper-camel-case naming convention. The only thing that we may + be unhappy about in the above code is the <code>_t</code> + suffix in <code>Hello_t</code>. If we are not in a position + to change the schema, we can <em>touch-up</em> the <code>ucc</code> + convention with a custom translation rule using the + <code>--type-regex</code> option:</p> + + <pre class="terminal"> +$ xsd cxx-tree --type-naming ucc --type-regex '/ (.+)_t/\u$1/' hello.xsd + </pre> + + <p>This results in the following changes to the generated code:</p> + + <pre class="c++"> +class Hello +{ +public: + // greeting + // + typedef xml_schema::String GreetingType; + + const GreetingType& + greeting () const; + + GreetingType& + greeting (); + + void + greeting (const GreetingType& x); + + // name + // + typedef xml_schema::String NameType; + typedef xsd::sequence<NameType> NameSequence; + typedef NameSequence::iterator NameIterator; + typedef NameSequence::const_iterator NameConstIterator; + + const NameSequence& + name () const; + + NameSequence& + name (); + + void + name (const NameSequence& s); + + // Constructor. + // + Hello (const GreetingType&); + + ... + +}; + +std::auto_ptr<Hello> +hello (const std::string& uri); + +std::auto_ptr<Hello> +hello (std::istream&); + </pre> + + <p>For more detailed information on the <code>--type-naming</code>, + <code>--function-naming</code>, <code>--type-regex</code>, and + other <code>--*-regex</code> options refer to the NAMING + CONVENTION section in the <a href="http://www.codesynthesis.com/projects/xsd/documentation/xsd.xhtml">XSD + Compiler Command Line Manual</a>.</p> + + <h2><a name="2.7">2.7 Generating Documentation</a></h2> + + <p>While our object model is quite simple, real-world vocabularies + can be quite complex with hundreds of types, elements, and + attributes. For such vocabularies figuring out which types + provide which member functions by studying the generated + source code or schemas can be a daunting task. To provide + application developers with a more accessible way of + understanding the generated object models, the XSD compiler + can be instructed to produce source code with documentation + comments in the Doxygen format. Then the source code can be + processed with the <a href="http://www.doxygen.org">Doxygen</a> + documentation system to extract this information and produce + documentation in various formats. + </p> + + <p>In this section we will see how to generate documentation + for our "Hello World" vocabulary. To showcase the full power + of the XSD documentation facilities, we will first document + our schema. The XSD compiler will then transfer + this information from the schema to the generated code and + then to the object model documentation. Note that the + documentation in the schema is not required for XSD to + generate useful documentation. Below you will find + our <code>hello.xsd</code> with added documentation:</p> + + <pre class="xml"> +<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> + + <xs:complexType name="hello_t"> + + <xs:annotation> + <xs:documentation> + The hello_t type consists of a greeting phrase and a + collection of names to which this greeting applies. + </xs:documentation> + </xs:annotation> + + <xs:sequence> + + <xs:element name="greeting" type="xs:string"> + <xs:annotation> + <xs:documentation> + The greeting element contains the greeting phrase + for this hello object. + </xs:documentation> + </xs:annotation> + </xs:element> + + <xs:element name="name" type="xs:string" maxOccurs="unbounded"> + <xs:annotation> + <xs:documentation> + The name elements contains names to be greeted. + </xs:documentation> + </xs:annotation> + </xs:element> + + </xs:sequence> + </xs:complexType> + + <xs:element name="hello" type="hello_t"> + <xs:annotation> + <xs:documentation> + The hello element is a root of the Hello XML vocabulary. + Every conforming document should start with this element. + </xs:documentation> + </xs:annotation> + </xs:element> + +</xs:schema> + </pre> + + <p>The first step in obtaining the documentation is to recompile + our schema with the <code>--generate-doxygen</code> option:</p> + + <pre class="terminal"> +$ xsd cxx-tree --generate-serialization --generate-doxygen hello.xsd + </pre> + + <p>Now the generated <code>hello.hxx</code> file contains comments + in the Doxygen format. The next step is to process this file + with the Doxygen documentation system. If your project does + not use Doxygen then you first need to create a configuration + file for your project:</p> + + <pre class="terminal"> +$ doxygen -g hello.doxygen + </pre> + + <p>You only need to perform this step once. Now we can generate + the documentation by executing the following command in the + directory with the generated source code:</p> + + <pre class="terminal"> +$ doxygen hello.doxygen + </pre> + + <p>While the generated documentation can be useful as is, we can + go one step further and link (using the Doxygen tags mechanism) + the documentation for our object model with the documentation + for the XSD runtime library which defines C++ classes for the + built-in XML Schema types. This way we can seamlessly browse + between documentation for the <code>hello_t</code> class which + is generated by the XSD compiler and the <code>xml_schema::string</code> + class which is defined in the XSD runtime library. The Doxygen + configuration file for the XSD runtime is provided with the XSD + distribution.</p> + + <p>You can view the result of the steps described in this section + on the <a href="http://www.codesynthesis.com/projects/xsd/documentation/cxx/tree/hello/html/annotated.html">Hello + Example Documentation</a> page.</p> + + <!-- Chapater 3 --> + + + <h1><a name="3">3 Overall Mapping Configuration</a></h1> + + <p>The C++/Tree mapping has a number of configuration parameters that + determine the overall properties and behavior of the generated code. + Configuration parameters are specified with the XSD command line + options. This chapter describes configuration aspects that are most + commonly encountered by application developers. These include: + the character type that is used by the generated code, handling of + vocabularies that use XML Schema polymorphism, XML Schema to C++ + namespace mapping, and thread safety. For more ways to configure + the generated code refer to the + <a href="http://www.codesynthesis.com/projects/xsd/documentation/xsd.xhtml">XSD + Compiler Command Line Manual</a>. + </p> + + <h2><a name="3.1">3.1 Character Type and Encoding</a></h2> + + <p>The C++/Tree mapping has built-in support for two character types: + <code>char</code> and <code>wchar_t</code>. You can select the + character type with the <code>--char-type</code> command line + option. The default character type is <code>char</code>. The + character type affects all string and string-based types that + are used in the mapping. These include the string-based built-in + XML Schema types, exception types, stream types, etc.</p> + + <p>Another aspect of the mapping that depends on the character type + is character encoding. For the <code>char</code> character type + the default encoding is UTF-8. Other supported encodings are + ISO-8859-1, Xerces-C++ Local Code Page (LPC), as well as + custom encodings. You can select which encoding should be used + in the object model with the <code>--char-encoding</code> command + line option.</p> + + <p>For the <code>wchar_t</code> character type the encoding is + automatically selected between UTF-16 and UTF-32/UCS-4 depending + on the size of the <code>wchar_t</code> type. On some platforms + (for example, Windows with Visual C++ and AIX with IBM XL C++) + <code>wchar_t</code> is 2 bytes long. For these platforms the + encoding is UTF-16. On other platforms <code>wchar_t</code> is 4 bytes + long and UTF-32/UCS-4 is used.</p> + + <p>Note also that the character encoding that is used in the object model + is independent of the encodings used in input and output XML. In fact, + all three (object mode, input XML, and output XML) can have different + encodings.</p> + + <h2><a name="3.2">3.2 Support for Polymorphism</a></h2> + + <p>By default XSD generates non-polymorphic code. If your vocabulary + uses XML Schema polymorphism in the form of <code>xsi:type</code> + and/or substitution groups, then you will need to compile + your schemas with the <code>--generate-polymorphic</code> option + to produce polymorphism-aware code. For more information on + working with polymorphic object models, refer to + <a href="http://www.codesynthesis.com/projects/xsd/documentation/cxx/tree/manual/#2.11">Section 2.11, + "Mapping for <code>xsi:type</code> and Substitution Groups"</a> in + the C++/Tree Mapping User Manual.</p> + + <h2><a name="3.3">3.3 Namespace Mapping</a></h2> + + <p>XSD maps XML namespaces specified in the <code>targetNamespace</code> + attribute in XML Schema to one or more nested C++ namespaces. By + default, a namespace URI is mapped to a sequence of C++ namespace + names by removing the protocol and host parts and splitting the + rest into a sequence of names with <code>'/'</code> as the name + separator.</p> + + <p>The default mapping of namespace URIs to C++ namespaces + can be altered using the <code>--namespace-map</code> and + <code>--namespace-regex</code> compiler options. For example, + to map namespace URI <code>http://www.codesynthesis.com/my</code> to + C++ namespace <code>cs::my</code>, we can use the following option:</p> + + <pre class="terminal"> +--namespace-map http://www.codesynthesis.com/my=cs::my + </pre> + + <p>A vocabulary without a namespace is mapped to the global scope. This + also can be altered with the above options by using an empty name + for the XML namespace:</p> + + <pre class="terminal"> +--namespace-map =cs + </pre> + + <h2><a name="3.4">3.4 Thread Safety</a></h2> + + <p>XSD-generated code is thread-safe in the sense that you can + use different instantiations of the object model in several + threads concurrently. This is possible due to the generated + code not relying on any writable global variables. If you need + to share the same object between several threads then you will + need to provide some form of synchronization. One approach would + be to use the generated code customization mechanisms to embed + synchronization primitives into the generated C++ classes. For more + information on generated code customization refer to the + <a href="http://wiki.codesynthesis.com/Tree/Customization_guide">C++/Tree + Mapping Customization Guide</a>.</p> + + <p>If you also would like to call parsing and/or serialization + functions from several threads potentially concurrently, then + you will need to make sure the Xerces-C++ runtime is initialized + and terminated only once. The easiest way to do this is to + initialize/terminate Xerces-C++ from <code>main()</code> when + there are no threads yet/anymore:</p> + + <pre class="c++"> +#include <xercesc/util/PlatformUtils.hpp> + +int +main () +{ + xercesc::XMLPlatformUtils::Initialize (); + + { + // Start/terminate threads and parse/serialize here. + } + + xercesc::XMLPlatformUtils::Terminate (); +} + </pre> + + <p>Because you initialize the Xerces-C++ runtime yourself you should + also pass the <code>xml_schema::flags::dont_initialize</code> flag + to parsing and serialization functions. See <a href="#5">Chapter 5, + "Parsing"</a> and <a href="#6">Chapter 6, "Serialization"</a> for + more information.</p> + + + <!-- Chapater 4 --> + + + <h1><a name="4">4 Working with Object Models</a></h1> + + <p>As we have seen in the previous chapters, the XSD compiler generates + a C++ class for each type defined in XML Schema. Together these classes + constitute an object model for an XML vocabulary. In this chapter we + will take a closer look at different elements that comprise an + object model class as well as how to create, access, and modify + object models.</p> + + <p>In this and subsequent chapters we will use the following schema + that describes a collection of person records. We save it in + <code>people.xsd</code>:</p> + + <pre class="xml"> +<?xml version="1.0"?> +<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> + + <xs:simpleType name="gender_t"> + <xs:restriction base="xs:string"> + <xs:enumeration value="male"/> + <xs:enumeration value="female"/> + </xs:restriction> + </xs:simpleType> + + <xs:complexType name="person_t"> + <xs:sequence> + <xs:element name="first-name" type="xs:string"/> + <xs:element name="middle-name" type="xs:string" minOccurs="0"/> + <xs:element name="last-name" type="xs:string"/> + <xs:element name="gender" type="gender_t"/> + <xs:element name="age" type="xs:short"/> + </xs:sequence> + <xs:attribute name="id" type="xs:unsignedInt" use="required"/> + </xs:complexType> + + <xs:complexType name="people_t"> + <xs:sequence> + <xs:element name="person" type="person_t" maxOccurs="unbounded"/> + </xs:sequence> + </xs:complexType> + + <xs:element name="people" type="people_t"/> + +</xs:schema> + </pre> + + <p>A sample XML instance to go along with this schema is saved + in <code>people.xml</code>:</p> + + <pre class="xml"> +<?xml version="1.0"?> +<people xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="people.xsd"> + + <person id="1"> + <first-name>John</first-name> + <last-name>Doe</last-name> + <gender>male</gender> + <age>32</age> + </person> + + <person id="2"> + <first-name>Jane</first-name> + <middle-name>Mary</middle-name> + <last-name>Doe</last-name> + <gender>female</gender> + <age>28</age> + </person> + +</people> + </pre> + + <p>Compiling <code>people.xsd</code> with the XSD compiler results + in three generated C++ classes: <code>gender_t</code>, + <code>person_t</code>, and <code>people_t</code>. + The <code>gender_t</code> class is modelled after the C++ + <code>enum</code> type. Its definition is presented below:</p> + + <pre class="c++"> +class gender_t: public xml_schema::string +{ +public: + enum value + { + male, + female + }; + + gender_t (value); + gender_t (const xml_schema::string&); + + gender_t& + operator= (value); + + operator value () const; +}; + </pre> + + <p>The following listing shows how we can use this type:</p> + + <pre class="c++"> +gender_t m (gender_t::male); +gender_t f ("female"); + +if (m == "female" || f == gender_t::male) +{ + ... +} + +switch (m) +{ +case gender_t::male: + { + ... + } +case gender_t::female: + { + ... + } +} + </pre> + + <p>The other two classes will be examined in detail in the subsequent + sections.</p> + + <h2><a name="4.1">4.1 Attribute and Element Cardinalities</a></h2> + + <p>As we have seen in the previous chapters, XSD generates a different + set of type definitions and member functions for elements with + different cardinalities. The C++/Tree mapping divides all the possible + element and attribute cardinalities into three cardinality classes: + <em>one</em>, <em>optional</em>, and <em>sequence</em>.</p> + + <p>The <em>one</em> cardinality class covers all elements that should + occur exactly once as well as required attributes. In our + example, the <code>first-name</code>, <code>last-name</code>, + <code>gender</code>, and <code>age</code> elements as well as + the <code>id</code> attribute belong to this cardinality class. + The following code fragment shows type definitions as well as the + accessor and modifier functions that are generated for the + <code>gender</code> element in the <code>person_t</code> class:</p> + + <pre class="c++"> +class person_t +{ + // gender + // + typedef gender_t gender_type; + + const gender_type& + gender () const; + + gender_type& + gender (); + + void + gender (const gender_type&); +}; + </pre> + + <p>The <code>gender_type</code> type is an alias for the element's type. + The first two accessor functions return read-only (constant) and + read-write references to the element's value, respectively. The + modifier function sets the new value for the element.</p> + + <p>The <em>optional</em> cardinality class covers all elements that + can occur zero or one time as well as optional attributes. In our + example, the <code>middle-name</code> element belongs to this + cardinality class. The following code fragment shows the type + definitions as well as the accessor and modifier functions that + are generated for this element in the <code>person_t</code> class:</p> + + <pre class="c++"> +class person_t +{ + // middle-name + // + typedef xml_schema::string middle_name_type; + typedef xsd::optional<middle_name_type> middle_name_optional; + + const middle_name_optional& + middle_name () const; + + middle_name_optional& + middle_name (); + + void + middle_name (const middle_name_type&); + + void + middle_name (const middle_name_optional&); +}; + </pre> + + <p>As with the <code>gender</code> element, <code>middle_name_type</code> + is an alias for the element's type. The <code>middle_name_optional</code> + type is a container for the element's optional value. It can be queried + for the presence of the value using the <code>present()</code> function. + The value itself can be retrieved using the <code>get()</code> + accessor and set using the <code>set()</code> modifier. The container + can be reverted to the value not present state with the call to the + <code>reset()</code> function. The following example shows how we + can use this container:</p> + + <pre class="c++"> +person_t::middle_name_optional n ("John"); + +if (n.preset ()) +{ + cout << n.get () << endl; +} + +n.set ("Jane"); +n.reset (); + </pre> + + + <p>Unlike the <em>one</em> cardinality class, the accessor functions + for the <em>optional</em> class return read-only (constant) and + read-write references to the container instead of the element's + value directly. The modifier functions set the new value for the + element.</p> + + <p>Finally, the <em>sequence</em> cardinality class covers all elements + that can occur more than once. In our example, the + <code>person</code> element in the <code>people_t</code> type + belongs to this cardinality class. The following code fragment shows + the type definitions as well as the accessor and modifier functions + that are generated for this element in the <code>people_t</code> + class:</p> + + <pre class="c++"> +class people_t +{ + // person + // + typedef person_t person_type; + typedef xsd::sequence<person_type> person_sequence; + typedef person_sequence::iterator person_iterator; + typedef person_sequence::const_iterator person_const_iterator; + + const person_sequence& + person () const; + + person_sequence& + person (); + + void + person (const person_sequence&); +}; + </pre> + + <p>Identical to the other cardinality classes, <code>person_type</code> + is an alias for the element's type. The <code>person_sequence</code> + type is a sequence container for the element's values. It is based + on and has the same interface as <code>std::vector</code> and + therefore can be used in similar ways. The <code>person_iterator</code> + and <code>person_const_iterator</code> types are read-only + (constant) and read-write iterators for the <code>person_sequence</code> + container.</p> + + <p>Similar to the <em>optional</em> cardinality class, the + accessor functions for the <em>sequence</em> class return + read-only (constant) and read-write references to the sequence + container. The modifier functions copies the entries from + the passed sequence.</p> + + <p>For complex schemas with many levels of nested compositors + (<code>xs:choice</code> and <code>xs:sequence</code>) it can + be hard to deduce the cardinality class of a particular element. + The generated Doxygen documentation can greatly help with + this task. For each element and attribute the documentation + clearly identifies its cardinality class. Alternatively, you + can study the generated header files to find out the cardinality + class of a particular attribute or element. In the next sections + we will examine how to access and modify information stored in + an object model using accessor and modifier functions described + in this section.</p> + + + <h2><a name="4.2">4.2 Accessing the Object Model</a></h2> + + <p>In this section we will learn how to get to the information + stored in the object model for our person records vocabulary. + The following application accesses and prints the contents + of the <code>people.xml</code> file:</p> + + <pre class="c++"> +#include <iostream> +#include "people.hxx" + +using namespace std; + +int +main () +{ + auto_ptr<people_t> ppl (people ("people.xml")); + + // Iterate over individual person records. + // + people_t::person_sequence& ps (ppl->person ()); + + for (people_t::person_iterator i (ps.begin ()); i != ps.end (); ++i) + { + person_t& p (*i); + + // Print names: first-name and last-name are required elements, + // middle-name is optional. + // + cout << "name: " << p.first_name () << " "; + + if (p.middle_name ().present ()) + cout << p.middle_name ().get () << " "; + + cout << p.last_name () << endl; + + // Print gender, age, and id which are all required. + // + cout << "gender: " << p.gender () << endl + << "age: " << p.age () << endl + << "id: " << p.id () << endl + << endl; + } +} + </pre> + + <p>This code shows common patterns of accessing elements and attributes + with different cardinality classes. For the sequence element + (<code>person</code> in <code>people_t</code>) we first obtain a + reference to the container and then iterate over individual + records. The values of elements and attributes with the + <em>one</em> cardinality class (<code>first-name</code>, + <code>last-name</code>, <code>gender</code>, <code>age</code>, + and <code>id</code>) can be obtained directly by calling the + corresponding accessor functions. For the optional element + <code>middle-name</code> we first check if the value is present + and only then call <code>get()</code> to retrieve it.</p> + + <p>Note that when we want to reduce typing by creating a variable + representing a fragment of the object model that we are currently + working with (<code>ps</code> and <code>p</code> above), we obtain + a reference to that fragment instead of making a potentially + expensive copy. This is generally a good rule to follow when + creating high-performance applications.</p> + + <p>If we run the above application on our sample + <code>people.xml</code>, the output looks as follows:</p> + + <pre class="terminal"> +name: John Doe +gender: male +age: 32 +id: 1 + +name: Jane Mary Doe +gender: female +age: 28 +id: 2 + </pre> + + + <h2><a name="4.3">4.3 Modifying the Object Model</a></h2> + + <p>In this section we will learn how to modify the information + stored in the object model for our person records vocabulary. + The following application changes the contents of the + <code>people.xml</code> file:</p> + + <pre class="c++"> +#include <iostream> +#include "people.hxx" + +using namespace std; + +int +main () +{ + auto_ptr<people_t> ppl (people ("people.xml")); + + // Iterate over individual person records and increment + // the age. + // + people_t::person_sequence& ps (ppl->person ()); + + for (people_t::person_iterator i (ps.begin ()); i != ps.end (); ++i) + { + // Alternative way: i->age ()++; + // + i->age (i->age () + 1); + } + + // Add middle-name to the first record and remove it from + // the second. + // + person_t& john (ps[0]); + person_t& jane (ps[1]); + + john.middle_name ("Mary"); + jane.middle_name ().reset (); + + // Add another John record. + // + ps.push_back (john); + + // Serialize the modified object model to XML. + // + xml_schema::namespace_infomap map; + map[""].name = ""; + map[""].schema = "people.xsd"; + + people (cout, *ppl, map); +} + </pre> + + <p>The first modification the above application performs is iterating + over person records and incrementing the age value. This code + fragment shows how to modify the value of a required attribute + or element. The next modification shows how to set a new value + for the optional <code>middle-name</code> element as well + as clear its value. Finally the example adds a copy of the + John Doe record to the <code>person</code> element sequence.</p> + + <p>Note that in this case using references for the <code>ps</code>, + <code>john</code>, and <code>jane</code> variables is no longer + a performance improvement but a requirement for the application + to function correctly. If we hadn't used references, all our changes + would have been made on copies without affecting the object model.</p> + + <p>If we run the above application on our sample <code>people.xml</code>, + the output looks as follows:</p> + + <pre class="xml"> +<?xml version="1.0"?> +<people xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="people.xsd"> + + <person id="1"> + <first-name>John</first-name> + <middle-name>Mary</middle-name> + <last-name>Doe</last-name> + <gender>male</gender> + <age>33</age> + </person> + + <person id="2"> + <first-name>Jane</first-name> + <last-name>Doe</last-name> + <gender>female</gender> + <age>29</age> + </person> + + <person id="1"> + <first-name>John</first-name> + <middle-name>Mary</middle-name> + <last-name>Doe</last-name> + <gender>male</gender> + <age>33</age> + </person> + +</people> + </pre> + + + <h2><a name="4.4">4.4 Creating the Object Model from Scratch</a></h2> + + <p>In this section we will learn how to create a new object model + for our person records vocabulary. The following application + recreates the content of the original <code>people.xml</code> + file:</p> + + <pre class="c++"> +#include <iostream> +#include "people.hxx" + +using namespace std; + +int +main () +{ + people_t ppl; + people_t::person_sequence& ps (ppl.person ()); + + // Add the John Doe record. + // + ps.push_back ( + person_t ("John", // first-name + "Doe", // last-name + gender_t::male, // gender + 32, // age + 1)); + + // Add the Jane Doe record. + // + ps.push_back ( + person_t ("Jane", // first-name + "Doe", // last-name + gender_t::female, // gender + 28, // age + 2)); // id + + // Add middle name to the Jane Doe record. + // + person_t& jane (ps.back ()); + jane.middle_name ("Mary"); + + // Serialize the object model to XML. + // + xml_schema::namespace_infomap map; + map[""].name = ""; + map[""].schema = "people.xsd"; + + people (cout, ppl, map); +} + </pre> + + <p>The only new part in the above application is the calls + to the <code>people_t</code> and <code>person_t</code> + constructors. As a general rule, for each C++ class + XSD generates a constructor with initializers + for each element and attribute belonging to the <em>one</em> + cardinality class. For our vocabulary, the following + constructors are generated:</p> + + <pre class="c++"> +class person_t +{ + person_t (const first_name_type&, + const last_name_type&, + const gender_type&, + const age_type&, + const id_type&); +}; + +class people_t +{ + people_t (); +}; + </pre> + + <p>Note also that we set the <code>middle-name</code> element + on the Jane Doe record by obtaining a reference to that record + in the object model and setting the <code>middle-name</code> + value on it. This is a general rule that should be followed + in order to obtain the best performance: if possible, + direct modifications to the object model should be preferred + to modifications on temporaries with subsequent copying. The + following code fragment shows a semantically equivalent but + slightly slower version:</p> + + <pre class="c++"> +// Add the Jane Doe record. +// +person_t jane ("Jane", // first-name + "Doe", // last-name + gender_t::female, // gender + 28, // age + 2); // id + +jane.middle_name ("Mary"); + +ps.push_back (jane); + </pre> + + <p>We can also go one step further to reduce copying and improve + the performance of our application by using the non-copying + <code>push_back()</code> function which assumes ownership + of the passed objects:</p> + + <pre class="c++"> +// Add the John Doe record. +// +auto_ptr<person_t> john_p ( + new person_t ("John", // first-name + "Doe", // last-name + gender_t::male, // gender + 32, // age + 1)); +ps.push_back (john_p); // assumes ownership + +// Add the Jane Doe record. +// +auto_ptr<person_t> jane_p ( + new person_t ("Jane", // first-name + "Doe", // last-name + gender_t::female, // gender + 28, // age + 2)); // id +ps.push_back (jane_p); // assumes ownership + </pre> + + <p>For more information on the non-copying modifier functions refer to + <a href="http://www.codesynthesis.com/projects/xsd/documentation/cxx/tree/manual/#2.8">Section + 2.8, "Mapping for Local Elements and Attributes"</a> in the C++/Tree Mapping + User Manual. The above application produces the following output:</p> + + <pre class="xml"> +<?xml version="1.0" ?> +<people xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="people.xsd"> + + <person id="1"> + <first-name>John</first-name> + <last-name>Doe</last-name> + <gender>male</gender> + <age>32</age> + </person> + + <person id="2"> + <first-name>Jane</first-name> + <middle-name>Mary</middle-name> + <last-name>Doe</last-name> + <gender>female</gender> + <age>28</age> + </person> + +</people> + </pre> + + <h2><a name="4.5">4.5 Mapping for the Built-in XML Schema Types</a></h2> + + <p>Our person record vocabulary uses several built-in XML Schema + types: <code>string</code>, <code>short</code>, and + <code>unsignedInt</code>. Until now we haven't talked about + the mapping of built-in XML Schema types to C++ types and how + to work with them. This section provides an overview + of the built-in types. For more detailed information refer + to <a href="http://www.codesynthesis.com/projects/xsd/documentation/cxx/tree/manual/#2.5">Section + 2.5, "Mapping for Built-in Data Types"</a> in the C++/Tree Mapping + User Manual.</p> + + <p>In XML Schema, built-in types are defined in the XML Schema namespace. + By default, the C++/Tree mapping maps this namespace to C++ + namespace <code>xml_schema</code> (this mapping can be altered + with the <code>--namespace-map</code> option). The following table + summarizes the mapping of XML Schema built-in types to C++ types:</p> + + <!-- border="1" is necessary for html2ps --> + <table id="builtin" border="1"> + <tr> + <th>XML Schema type</th> + <th>Alias in the <code>xml_schema</code> namespace</th> + <th>C++ type</th> + </tr> + + <tr> + <th colspan="3">fixed-length integral types</th> + </tr> + <!-- 8-bit --> + <tr> + <td><code>byte</code></td> + <td><code>byte</code></td> + <td><code>signed char</code></td> + </tr> + <tr> + <td><code>unsignedByte</code></td> + <td><code>unsigned_byte</code></td> + <td><code>unsigned char</code></td> + </tr> + + <!-- 16-bit --> + <tr> + <td><code>short</code></td> + <td><code>short_</code></td> + <td><code>short</code></td> + </tr> + <tr> + <td><code>unsignedShort</code></td> + <td><code>unsigned_short</code></td> + <td><code>unsigned short</code></td> + </tr> + + <!-- 32-bit --> + <tr> + <td><code>int</code></td> + <td><code>int_</code></td> + <td><code>int</code></td> + </tr> + <tr> + <td><code>unsignedInt</code></td> + <td><code>unsigned_int</code></td> + <td><code>unsigned int</code></td> + </tr> + + <!-- 64-bit --> + <tr> + <td><code>long</code></td> + <td><code>long_</code></td> + <td><code>long long</code></td> + </tr> + <tr> + <td><code>unsignedLong</code></td> + <td><code>unsigned_long</code></td> + <td><code>unsigned long long</code></td> + </tr> + + <tr> + <th colspan="3">arbitrary-length integral types</th> + </tr> + <tr> + <td><code>integer</code></td> + <td><code>integer</code></td> + <td><code>long long</code></td> + </tr> + <tr> + <td><code>nonPositiveInteger</code></td> + <td><code>non_positive_integer</code></td> + <td><code>long long</code></td> + </tr> + <tr> + <td><code>nonNegativeInteger</code></td> + <td><code>non_negative_integer</code></td> + <td><code>unsigned long long</code></td> + </tr> + <tr> + <td><code>positiveInteger</code></td> + <td><code>positive_integer</code></td> + <td><code>unsigned long long</code></td> + </tr> + <tr> + <td><code>negativeInteger</code></td> + <td><code>negative_integer</code></td> + <td><code>long long</code></td> + </tr> + + <tr> + <th colspan="3">boolean types</th> + </tr> + <tr> + <td><code>boolean</code></td> + <td><code>boolean</code></td> + <td><code>bool</code></td> + </tr> + + <tr> + <th colspan="3">fixed-precision floating-point types</th> + </tr> + <tr> + <td><code>float</code></td> + <td><code>float_</code></td> + <td><code>float</code></td> + </tr> + <tr> + <td><code>double</code></td> + <td><code>double_</code></td> + <td><code>double</code></td> + </tr> + + <tr> + <th colspan="3">arbitrary-precision floating-point types</th> + </tr> + <tr> + <td><code>decimal</code></td> + <td><code>decimal</code></td> + <td><code>double</code></td> + </tr> + + <tr> + <th colspan="3">string types</th> + </tr> + <tr> + <td><code>string</code></td> + <td><code>string</code></td> + <td>type derived from <code>std::basic_string</code></td> + </tr> + <tr> + <td><code>normalizedString</code></td> + <td><code>normalized_string</code></td> + <td>type derived from <code>string</code></td> + </tr> + <tr> + <td><code>token</code></td> + <td><code>token</code></td> + <td>type derived from <code>normalized_string</code></td> + </tr> + <tr> + <td><code>Name</code></td> + <td><code>name</code></td> + <td>type derived from <code>token</code></td> + </tr> + <tr> + <td><code>NMTOKEN</code></td> + <td><code>nmtoken</code></td> + <td>type derived from <code>token</code></td> + </tr> + <tr> + <td><code>NMTOKENS</code></td> + <td><code>nmtokens</code></td> + <td>type derived from <code>sequence<nmtoken></code></td> + </tr> + <tr> + <td><code>NCName</code></td> + <td><code>ncname</code></td> + <td>type derived from <code>name</code></td> + </tr> + <tr> + <td><code>language</code></td> + <td><code>language</code></td> + <td>type derived from <code>token</code></td> + </tr> + + <tr> + <th colspan="3">qualified name</th> + </tr> + <tr> + <td><code>QName</code></td> + <td><code>qname</code></td> + <td><code>xml_schema::qname</code></td> + </tr> + + <tr> + <th colspan="3">ID/IDREF types</th> + </tr> + <tr> + <td><code>ID</code></td> + <td><code>id</code></td> + <td>type derived from <code>ncname</code></td> + </tr> + <tr> + <td><code>IDREF</code></td> + <td><code>idref</code></td> + <td>type derived from <code>ncname</code></td> + </tr> + <tr> + <td><code>IDREFS</code></td> + <td><code>idrefs</code></td> + <td>type derived from <code>sequence<idref></code></td> + </tr> + + <tr> + <th colspan="3">URI types</th> + </tr> + <tr> + <td><code>anyURI</code></td> + <td><code>uri</code></td> + <td>type derived from <code>std::basic_string</code></td> + </tr> + + <tr> + <th colspan="3">binary types</th> + </tr> + <tr> + <td><code>base64Binary</code></td> + <td><code>base64_binary</code></td> + <td><code>xml_schema::base64_binary</code></td> + </tr> + <tr> + <td><code>hexBinary</code></td> + <td><code>hex_binary</code></td> + <td><code>xml_schema::hex_binary</code></td> + </tr> + + <tr> + <th colspan="3">date/time types</th> + </tr> + <tr> + <td><code>date</code></td> + <td><code>date</code></td> + <td><code>xml_schema::date</code></td> + </tr> + <tr> + <td><code>dateTime</code></td> + <td><code>date_time</code></td> + <td><code>xml_schema::date_time</code></td> + </tr> + <tr> + <td><code>duration</code></td> + <td><code>duration</code></td> + <td><code>xml_schema::duration</code></td> + </tr> + <tr> + <td><code>gDay</code></td> + <td><code>gday</code></td> + <td><code>xml_schema::gday</code></td> + </tr> + <tr> + <td><code>gMonth</code></td> + <td><code>gmonth</code></td> + <td><code>xml_schema::gmonth</code></td> + </tr> + <tr> + <td><code>gMonthDay</code></td> + <td><code>gmonth_day</code></td> + <td><code>xml_schema::gmonth_day</code></td> + </tr> + <tr> + <td><code>gYear</code></td> + <td><code>gyear</code></td> + <td><code>xml_schema::gyear</code></td> + </tr> + <tr> + <td><code>gYearMonth</code></td> + <td><code>gyear_month</code></td> + <td><code>xml_schema::gyear_month</code></td> + </tr> + <tr> + <td><code>time</code></td> + <td><code>time</code></td> + <td><code>xml_schema::time</code></td> + </tr> + + <tr> + <th colspan="3">entity types</th> + </tr> + <tr> + <td><code>ENTITY</code></td> + <td><code>entity</code></td> + <td>type derived from <code>name</code></td> + </tr> + <tr> + <td><code>ENTITIES</code></td> + <td><code>entities</code></td> + <td>type derived from <code>sequence<entity></code></td> + </tr> + </table> + + <p>As you can see from the table above a number of built-in + XML Schema types are mapped to fundamental C++ types such + as <code>int</code> or <code>bool</code>. All string-based + XML Schema types are mapped to C++ types that are derived + from either <code>std::string</code> or + <code>std::wstring</code>, depending on the character + type selected. For access and modification purposes these + types can be treated as <code>std::string</code>. A number + of built-in types, such as <code>qname</code>, the binary + types, and the date/time types do not have suitable + fundamental or standard C++ types to map to. As a result, + these types are implemented from scratch in the XSD runtime. + For more information on their interfaces refer to + <a href="http://www.codesynthesis.com/projects/xsd/documentation/cxx/tree/manual/#2.5">Section + 2.5, "Mapping for Built-in Data Types"</a> in the C++/Tree Mapping + User Manual.</p> + + + <!-- Chapater 5 --> + + + <h1><a name="5">5 Parsing</a></h1> + + <p>We have already seen how to parse XML to an object model in this guide + before. In this chapter we will discuss the parsing topic in more + detail.</p> + + <p>By default, the C++/Tree mapping provides a total of 14 overloaded + parsing functions. They differ in the input methods used to + read XML as well as the error reporting mechanisms. It is also possible + to generate types for root elements instead of parsing and serialization + functions. This may be useful if your XML vocabulary has multiple + root elements. For more information on element types refer to + <a href="http://www.codesynthesis.com/projects/xsd/documentation/cxx/tree/manual/#2.9">Section + 2.9, "Mapping for Global Elements"</a> in the C++/Tree Mapping User + Manual.</p> + + + <p>In this section we will discuss the most commonly used versions of + the parsing functions. For a comprehensive description of parsing + refer to <a href="http://www.codesynthesis.com/projects/xsd/documentation/cxx/tree/manual/#3">Chapter + 3, "Parsing"</a> in the C++/Tree Mapping User Manual. For the <code>people</code> + global element from our person record vocabulary, we will concentrate + on the following three parsing functions:</p> + + <pre class="c++"> +std::auto_ptr<people_t> +people (const std::string& uri, + xml_schema::flags f = 0, + const xml_schema::properties& p = xml_schema::properties ()); + +std::auto_ptr<people_t> +people (std::istream& is, + xml_schema::flags f = 0, + const xml_schema::properties& p = xml_schema::properties ()); + +std::auto_ptr<people_t> +people (std::istream& is, + const std::string& resource_id, + xml_schema::flags f = 0, + const xml_schema::properties& p = ::xml_schema::properties ()); + </pre> + + <p>The first function parses a local file or a URI. We have already + used this parsing function in the previous chapters. The second + and third functions read XML from a standard input stream. The + last function also requires a resource id. This id is used to + identify the XML document being parser in diagnostics messages + as well as to resolve relative paths to other documents (for example, + schemas) that might be referenced from the XML document.</p> + + <p>The last two arguments to all three parsing functions are parsing + flags and properties. The flags argument provides a number of ways + to fine-tune the parsing process. The properties argument allows + to pass additional information to the parsing functions. We will + use these two arguments in <a href="#5.1">Section 5.1, "XML Schema + Validation and Searching"</a> below. The following example shows + how we can use the above parsing functions:</p> + + <pre class="c++"> +using std::auto_ptr; + +// Parse a local file or URI. +// +auto_ptr<people_t> p1 (people ("people.xml")); +auto_ptr<people_t> p2 (people ("http://example.com/people.xml")); + +// Parse a local file via ifstream. +// +std::ifstream ifs ("people.xml"); +auto_ptr<people_t> p3 (people (ifs, "people.xml")); + +// Parse an XML string. +// +std::string str ("..."); // XML in a string. +std::istringstream iss (str); +auto_ptr<people_t> p4 (people (iss)); + </pre> + + + <h2><a name="5.1">5.1 XML Schema Validation and Searching</a></h2> + + <p>The C++/Tree mapping relies on the underlying Xerces-C++ XML + parser for full XML document validation. The XML Schema + validation is enabled by default and can be disabled by + passing the <code>xml_schema::flags::dont_validate</code> + flag to the parsing functions, for example:</p> + + <pre class="c++"> +auto_ptr<people_t> p ( + people ("people.xml", xml_schema::flags::dont_validate)); + </pre> + + <p>Even when XML Schema validation is disabled, the generated + code still performs a number of checks to prevent + construction of an inconsistent object model (for example, an + object model with missing required attributes or elements).</p> + + <p>When XML Schema validation is enabled, the XML parser needs + to locate a schema to validate against. There are several + methods to provide the schema location information to the + parser. The easiest and most commonly used method is to + specify schema locations in the XML document itself + with the <code>schemaLocation</code> or + <code>noNamespaceSchemaLocation</code> attributes, for example:</p> + + <pre class="xml"> +<?xml version="1.0" ?> +<people xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="people.xsd" + xsi:schemaLocation="http://www.w3.org/XML/1998/namespace xml.xsd"> + </pre> + + <p>As you might have noticed, we used this method in all the sample XML + documents presented in this guide up until now. Note that the + schema locations specified with these two attributes are relative + to the document's path unless they are absolute URIs (that is + start with <code>http://</code>, <code>file://</code>, etc.). + In particular, if you specify just file names as your schema + locations, as we did above, then the schemas should reside in + the same directory as the XML document itself.</p> + + <p>Another method of providing the schema location information + is via the <code>xml_schema::properties</code> argument, as + shown in the following example:</p> + + <pre class="c++"> +xml_schema::properties props; +props.no_namespace_schema_location ("people.xsd"); +props.schema_location ("http://www.w3.org/XML/1998/namespace", "xml.xsd"); + +auto_ptr<people_t> p (people ("people.xml", 0, props)); + </pre> + + <p>The schema locations provided with this method overrides + those specified in the XML document. As with the previous + method, the schema locations specified this way are + relative to the document's path unless they are absolute URIs. + In particular, if you want to use local schemas that are + not related to the document being parsed, then you will + need to use the <code>file://</code> URI. The following + example shows how to use schemas that reside in the current + working directory:</p> + + <pre class="c++"> +#include <unistd.h> // getcwd +#include <limits.h> // PATH_MAX + +char cwd[PATH_MAX]; +if (getcwd (cwd, PATH_MAX) == 0) +{ + // Buffer too small? +} + +xml_schema::properties props; + +props.no_namespace_schema_location ( + "file:///" + std::string (cwd) + "people.xsd"); + +props.schema_location ( + "http://www.w3.org/XML/1998/namespace", + "file:///" + std::string (cwd) + "xml.xsd"); + +auto_ptr<people_t> p (people ("people.xml", 0, props)); + </pre> + + <p>A third method is the most useful if you are planning to parse + several XML documents of the same vocabulary. In that case + it may be beneficial to pre-parse and cache the schemas in + the XML parser which can then be used to parse all documents + without re-parsing the schemas. For more information on + this method refer to the <code>caching</code> example in the + <code>examples/cxx/tree/</code> directory of the XSD + distribution. It is also possible to convert the schemas into + a pre-compiled binary representation and embed this representation + directly into the application executable. With this approach your + application can perform XML Schema validation without depending on + any external schema files. For more information on how to achieve + this refer to the <code>embedded</code> example in the + <code>examples/cxx/tree/</code> directory of the XSD distribution.</p> + + <p>When the XML parser cannot locate a schema for the + XML document, the validation fails and XML document + elements and attributes for which schema definitions could + not be located are reported in the diagnostics. For + example, if we remove the <code>noNamespaceSchemaLocation</code> + attribute in <code>people.xml</code> from the previous chapter, + then we will get the following diagnostics if we try to parse + this file with validation enabled:</p> + + <pre class="terminal"> +people.xml:2:63 error: no declaration found for element 'people' +people.xml:4:18 error: no declaration found for element 'person' +people.xml:4:18 error: attribute 'id' is not declared for element 'person' +people.xml:5:17 error: no declaration found for element 'first-name' +people.xml:6:18 error: no declaration found for element 'middle-name' +people.xml:7:16 error: no declaration found for element 'last-name' +people.xml:8:13 error: no declaration found for element 'gender' +people.xml:9:10 error: no declaration found for element 'age' + </pre> + + <h2><a name="5.2">5.2 Error Handling</a></h2> + + <p>The parsing functions offer a number of ways to handle error conditions + with the C++ exceptions being the most commonly used mechanism. All + C++/Tree exceptions derive from common base <code>xml_schema::exception</code> + which in turn derives from <code>std::exception</code>. The easiest + way to uniformly handle all possible C++/Tree exceptions and print + detailed information about the error is to catch and print + <code>xml_schema::exception</code>, as shown in the following + example:</p> + + <pre class="c++"> +try +{ + auto_ptr<people_t> p (people ("people.xml")); +} +catch (const xml_schema::exception& e) +{ + cerr << e << endl; +} + </pre> + + <p>Each individual C++/Tree exception also allows you to obtain + error details programmatically. For example, the + <code>xml_schema::parsing</code> exception is thrown when + the XML parsing and validation in the underlying XML parser + fails. It encapsulates various diagnostics information + such as the file name, line and column numbers, as well as the + error or warning message for each entry. For more information + about this and other exceptions that can be thrown during + parsing, refer to + <a href="http://www.codesynthesis.com/projects/xsd/documentation/cxx/tree/manual/#3.3">Section + 3.3, "Error Handling"</a> in the C++/Tree Mapping + User Manual.</p> + + <p>Note that if you are parsing <code>std::istream</code> on which + exceptions are not enabled, then you will need to check the + stream state after the call to the parsing function in order + to detect any possible stream failures, for example:</p> + + <pre class="c++"> +std::ifstream ifs ("people.xml"); + +if (ifs.fail ()) +{ + cerr << "people.xml: unable to open" << endl; + return 1; +} + +auto_ptr<people_t> p (people (ifs, "people.xml")); + +if (ifs.fail ()) +{ + cerr << "people.xml: read error" << endl; + return 1; +} + </pre> + + <p>The above example can be rewritten to use exceptions as + shown below:</p> + + <pre class="c++"> +try +{ + std::ifstream ifs; + ifs.exceptions (std::ifstream::badbit | std::ifstream::failbit); + ifs.open ("people.xml"); + + auto_ptr<people_t> p (people (ifs, "people.xml")); +} +catch (const std::ifstream::failure&) +{ + cerr << "people.xml: unable to open or read error" << endl; + return 1; +} + </pre> + + + <!-- Chapater 6 --> + + + <h1><a name="6">6 Serialization</a></h1> + + <p>We have already seen how to serialize an object model back to XML + in this guide before. In this chapter we will discuss the + serialization topic in more detail.</p> + + <p>By default, the C++/Tree mapping provides a total of 8 overloaded + serialization functions. They differ in the output methods used to write + XML as well as the error reporting mechanisms. It is also possible to + generate types for root elements instead of parsing and serialization + functions. This may be useful if your XML vocabulary has multiple + root elements. For more information on element types refer to + <a href="http://www.codesynthesis.com/projects/xsd/documentation/cxx/tree/manual/#2.9">Section + 2.9, "Mapping for Global Elements"</a> in the C++/Tree Mapping User + Manual.</p> + + + <p>In this section we will discuss the most commonly + used version of serialization functions. For a comprehensive description + of serialization refer to + <a href="http://www.codesynthesis.com/projects/xsd/documentation/cxx/tree/manual/#4">Chapter + 4, "Serialization"</a> in the C++/Tree Mapping User Manual. For the + <code>people</code> global element from our person record vocabulary, + we will concentrate on the following serialization function:</p> + + <pre class="c++"> +void +people (std::ostream& os, + const people_t& x, + const xml_schema::namespace_infomap& map = + xml_schema::namespace_infomap (), + const std::string& encoding = "UTF-8", + xml_schema::flags f = 0); + </pre> + + <p>This function serializes the object model passed as the second + argument to the standard output stream passed as the first + argument. The third argument is a namespace information map + which we will discuss in more detail in the next section. + The fourth argument is a character encoding that the resulting + XML document should be in. Possible valid values for this + argument are "US-ASCII", "ISO8859-1", "UTF-8", "UTF-16BE", + "UTF-16LE", "UCS-4BE", and "UCS-4LE". Finally, the flags + argument allows fine-tuning of the serialization process. + The following example shows how we can use the above serialization + function:</p> + + <pre class="c++"> +people_t& p = ... + +xml_schema::namespace_infomap map; +map[""].schema = "people.xsd"; + +// Serialize to stdout. +// +people (std::cout, p, map); + +// Serialize to a file. +// +std::ofstream ofs ("people.xml"); +people (ofs, p, map); + +// Serialize to a string. +// +std::ostringstream oss; +people (oss, p, map); +std::string xml (oss.str ()); + </pre> + + + <h2><a name="6.1">6.1 Namespace and Schema Information</a></h2> + + <p>While XML serialization can be done just from the object + model alone, it is often desirable to assign meaningful + prefixes to XML namespaces used in the vocabulary as + well as to provide the schema location information. + This is accomplished by passing the namespace information + map to the serialization function. The key in this map is + a namespace prefix that should be assigned to an XML namespace + specified in the <code>name</code> variable of the + map value. You can also assign an optional schema location for + this namespace in the <code>schema</code> variable. Based + on each key-value entry in this map, the serialization + function adds two attributes to the resulting XML document: + the namespace-prefix mapping attribute and schema location + attribute. The empty prefix indicates that the namespace + should be mapped without a prefix. For example, the following + map:</p> + + <pre class="c++"> +xml_schema::namespace_infomap map; + +map[""].name = "http://www.example.com/example"; +map[""].schema = "example.xsd"; + +map["x"].name = "http://www.w3.org/XML/1998/namespace"; +map["x"].schema = "xml.xsd"; + </pre> + + <p>Results in the following XML document:</p> + + <pre class="xml"> +<?xml version="1.0" ?> +<example + xmlns="http://www.example.com/example" + xmlns:x="http://www.w3.org/XML/1998/namespace" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.example.com/example example.xsd + http://www.w3.org/XML/1998/namespace xml.xsd"> + </pre> + + <p>The empty namespace indicates that the vocabulary has no target + namespace. For example, the following map results in only the + <code>noNamespaceSchemaLocation</code> attribute being added:</p> + + <pre class="c++"> +xml_schema::namespace_infomap map; + +map[""].name = ""; +map[""].schema = "example.xsd"; + </pre> + + <h2><a name="6.2">6.2 Error Handling</a></h2> + + <p>Similar to the parsing functions, the serialization functions offer a + number of ways to handle error conditions with the C++ exceptions being + the most commonly used mechanisms. As with parsing, the easiest way to + uniformly handle all possible serialization exceptions and print + detailed information about the error is to catch and print + <code>xml_schema::exception</code>:</p> + + <pre class="c++"> +try +{ + people_t& p = ... + + xml_schema::namespace_infomap map; + map[""].schema = "people.xsd"; + + people (std::cout, p, map)); +} +catch (const xml_schema::exception& e) +{ + cerr << e << endl; +} + </pre> + + <p>The most commonly encountered serialization exception is + <code>xml_schema::serialization</code>. It is thrown + when the XML serialization in the underlying XML writer + fails. It encapsulates various diagnostics information + such as the file name, line and column numbers, as well as the + error or warning message for each entry. For more information + about this and other exceptions that can be thrown during + serialization, refer to + <a href="http://www.codesynthesis.com/projects/xsd/documentation/cxx/tree/manual/#4.4">Section + 4.4, "Error Handling"</a> in the C++/Tree Mapping + User Manual.</p> + + <p>Note that if you are serializing to <code>std::ostream</code> on + which exceptions are not enabled, then you will need to check the + stream state after the call to the serialization function in order + to detect any possible stream failures, for example:</p> + + <pre class="c++"> +std::ofstream ofs ("people.xml"); + +if (ofs.fail ()) +{ + cerr << "people.xml: unable to open" << endl; + return 1; +} + +people (ofs, p, map)); + +if (ofs.fail ()) +{ + cerr << "people.xml: write error" << endl; + return 1; +} + </pre> + + <p>The above example can be rewritten to use exceptions as + shown below:</p> + + <pre class="c++"> +try +{ + std::ofstream ofs; + ofs.exceptions (std::ofstream::badbit | std::ofstream::failbit); + ofs.open ("people.xml"); + + people (ofs, p, map)); +} +catch (const std::ofstream::failure&) +{ + cerr << "people.xml: unable to open or write error" << endl; + return 1; +} + </pre> + + </div> +</div> + +</body> +</html> diff --git a/xsd/documentation/cxx/tree/guide/makefile b/xsd/documentation/cxx/tree/guide/makefile new file mode 100644 index 0000000..521a095 --- /dev/null +++ b/xsd/documentation/cxx/tree/guide/makefile @@ -0,0 +1,53 @@ +# file : documentation/cxx/tree/guide/makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../../build/bootstrap.make + +default := $(out_base)/ +install := $(out_base)/.install +dist := $(out_base)/.dist +dist-win := $(out_base)/.dist-win +cleandoc := $(out_base)/.cleandoc + +# Build. +# +$(default): $(out_base)/cxx-tree-guide.ps $(out_base)/cxx-tree-guide.pdf + + +$(out_base)/cxx-tree-guide.ps: $(src_base)/index.xhtml \ + $(src_base)/guide.html2ps \ + | $(out_base)/. + $(call message,html2ps $<,html2ps -f $(src_base)/guide.html2ps -o $@ $<) + +$(out_base)/cxx-tree-guide.pdf: $(out_base)/cxx-tree-guide.ps | $(out_base)/. + $(call message,ps2pdf $<,ps2pdf14 $< $@) + +# Install & Dist. +# +$(install): path := $(subst $(src_root)/documentation/,,$(src_base)) +$(dist): path := $(subst $(src_root)/,,$(src_base)) + +$(install): $(out_base)/cxx-tree-guide.ps $(out_base)/cxx-tree-guide.pdf + $(call install-data,$(src_base)/index.xhtml,$(install_doc_dir)/xsd/$(path)/index.xhtml) + $(call install-data,$(out_base)/cxx-tree-guide.ps,$(install_doc_dir)/xsd/$(path)/cxx-tree-guide.ps) + $(call install-data,$(out_base)/cxx-tree-guide.pdf,$(install_doc_dir)/xsd/$(path)/cxx-tree-guide.pdf) + +$(dist): $(out_base)/cxx-tree-guide.ps $(out_base)/cxx-tree-guide.pdf + $(call install-data,$(src_base)/index.xhtml,$(dist_prefix)/$(path)/index.xhtml) + $(call install-data,$(out_base)/cxx-tree-guide.ps,$(dist_prefix)/$(path)/cxx-tree-guide.ps) + $(call install-data,$(out_base)/cxx-tree-guide.pdf,$(dist_prefix)/$(path)/cxx-tree-guide.pdf) + +$(dist-win): $(dist) + + +# Clean +# +$(cleandoc): + $(call message,rm $$1,rm -f $$1,$(out_base)/cxx-tree-guide.ps) + $(call message,rm $$1,rm -f $$1,$(out_base)/cxx-tree-guide.pdf) + +# How to. +# +$(call include,$(bld_root)/install.make) diff --git a/xsd/documentation/cxx/tree/makefile b/xsd/documentation/cxx/tree/makefile new file mode 100644 index 0000000..1d444fa --- /dev/null +++ b/xsd/documentation/cxx/tree/makefile @@ -0,0 +1,44 @@ +# file : documentation/cxx/tree/makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../build/bootstrap.make + +docs := guide manual + +default := $(out_base)/ +install := $(out_base)/.install +dist := $(out_base)/.dist +dist-win := $(out_base)/.dist-win +cleandoc := $(out_base)/.cleandoc + +# Build. +# +$(default): $(addprefix $(out_base)/,$(addsuffix /,$(docs))) + +# Install & Dist. +# +dist-common := $(out_base)/.dist-common + +$(install): path := $(subst $(src_root)/documentation/,,$(src_base)) +$(dist-common): path := $(subst $(src_root)/,,$(src_base)) + +$(install): $(addprefix $(out_base)/,$(addsuffix /.install,$(docs))) + $(call install-dir,$(src_base)/dbxml,$(install_doc_dir)/xsd/$(path)/dbxml) + $(call install-dir,$(src_base)/reference,$(install_doc_dir)/xsd/$(path)/reference) + +$(dist-common): + $(call install-dir,$(src_base)/dbxml,$(dist_prefix)/$(path)/dbxml) + $(call install-dir,$(src_base)/reference,$(dist_prefix)/$(path)/reference) + +$(dist): $(dist-common) $(addprefix $(out_base)/,$(addsuffix /.dist,$(docs))) +$(dist-win): $(dist-common) $(addprefix $(out_base)/,$(addsuffix /.dist-win,$(docs))) + +# Clean. +# +$(cleandoc): $(addprefix $(out_base)/,$(addsuffix /.cleandoc,$(docs))) + +$(call include,$(bld_root)/install.make) + +$(foreach m,$(docs),$(call import,$(src_base)/$m/makefile)) diff --git a/xsd/documentation/cxx/tree/manual/cxx-tree-manual.pdf b/xsd/documentation/cxx/tree/manual/cxx-tree-manual.pdf Binary files differnew file mode 100644 index 0000000..b340c2a --- /dev/null +++ b/xsd/documentation/cxx/tree/manual/cxx-tree-manual.pdf diff --git a/xsd/documentation/cxx/tree/manual/cxx-tree-manual.ps b/xsd/documentation/cxx/tree/manual/cxx-tree-manual.ps new file mode 100644 index 0000000..2c43453 --- /dev/null +++ b/xsd/documentation/cxx/tree/manual/cxx-tree-manual.ps @@ -0,0 +1,6630 @@ +%!PS +%%Title: C++/Tree Mapping User Manual +%%Creator: html2ps version 1.0 beta5 +%%EndComments +save +2000 dict begin +/d {bind def} bind def +/D {def} d +/t true D +/f false D +/FL [/Times-Roman +/Times-Italic +/Times-Bold +/Times-BoldItalic +/Courier +/Courier-Oblique +/Courier-Bold +/Courier-BoldOblique +/Helvetica +/Helvetica-Oblique +/Helvetica-Bold +/Helvetica-BoldOblique] D +/WF t D +/WI 0 D +/F 1 D +/IW 471 F div D +/IL 621 F div D +/PS 791 D +/EF [0 1 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 2 2] D +/EZ [12 10 19 17 15 13 12 11 12 12 12 12 12 12 12 12 12 12 12 12 12 12 8 8] D +/Ey [0 0 2 2 2 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] D +/EG [-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1] D +/Tm [1 1 0.8 0.8 0.8 0.8 0.8 0.8 0 0 0 0 0 0 0.5 1 1 1 1 0 0 1.3 0 0] D +/Bm [1 1 0.5 0.5 0.5 0.5 0.5 0.5 0 0 0 0 0 0 0.5 1 1 1 1 0 0 1 0 0] D +/Lm [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 2 2 0 0 2 0 0 0] D +/Rm [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0] D +/EU [-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 0 0] D +/NO f D +/YY [[{()}{ h }][{ h }{()}][{()}{()}]] D +/ZZ [[{ (April 2010) }{ Pn }][{ Pn }{ (April 2010) }][{ Ti(, v)join ME 0 get join }{ Ti(, v)join ME 0 get join }]] D +/Ts EZ 0 get D +/TU f D +/Xp t D +/AU f D +/SN 0 D +/Cf t D +/Tp t D +/Fe f D +/TI 2 Ts mul D +/Fm 14 D +/xL 71 D +/xR 71 D +/yL 706 D +/yR 706 D +/Wl 471 F div D +/Wr 471 F div D +/hL 621 F div D +/hR 621 F div D +/FE {newpath Fm neg Fm M CP BB IW Fm add Fm L IW Fm add IL Fm add neg L CP BB + Fm neg IL Fm add neg L closepath} D +/LA {PM 0 eq{/IW Wl D /IL hL D}{/IW Wr D /IL hR D}ie /W IW D /LL W D /LS W D + TU PM 0 eq and{IW 56 F div add SA{Sf div}if 0 translate} + {PM 0 eq{xL yL}{xR yR}ie translate F SA{Sf mul}if dup scale + CS CF FS Cf{CA CL get VC}if /Bb f D}ie 0 0 M + TF not Tc or {Cf{gsave SA{1 Sf div dup scale}if Cb VC FE fill grestore}if}if}D +/Pi 0 Ts mul D +/SG [0.8 1 1] D +/Ab 15 D +/J 0 D +/Tc t D +/NH 6 D +/Nf f D +/Pa f D +/LH 1.2 D +/XR f D +/Xr {/pN E D ( [p ) WB pN WB (] )WB} D +/Db [16#FF 16#FF 16#FF] D +/Dt [16#00 16#00 16#00] D +/eA f D +/Fi f D +/bT f D +/Lc t D +/Dl [16#00 16#00 16#00] D +/LX f D +/Br 0.25 D +/IA ([IMAGE]) D +/DS {/PF f D()WB NL NP()pop RC ZF} D +/Gb f D +/Mb t D +/Hc [16#00 16#00 16#00] D +/Bl 3 D +/MI -15.6 D +/DX (DRAFT) D +/Di 0 D +/Tt 113.385826771654 D +/Th { ( +) 2 Al()BR ( + ) 0 1 -1 H()4 FZ (C++/Tree Mapping User Manual) ES()EH ( + ) 0 1 -1 H ( ) EH ( + ) 0 1 -1 H ( ) EH ( + ) 0 1 -1 H ( ) EH ( + ) 0 1 -1 H ( ) EH ( + ) 0 1 -1 H ( ) EH ( + ) 0 1 -1 H ( ) EH ( + ) 0 1 -1 H ( ) EH ( +) Ea()BR ( + ) 0 P (Revision ) ME 0 get join( April 2010)join EP ( + ) 0 P (Copyright © 2005-2010 CODE SYNTHESIS TOOLS CC) EP ( + + ) 0 P (Permission is granted to copy, distribute and/or modify this + document under the terms of the + ) R0 2 A (GNU Free + Documentation License, version 1.2) EA (; with no Invariant Sections, + no Front-Cover Texts and no Back-Cover Texts. + ) EP ( + + ) 0 P (This document is available in the following formats: + ) R1 2 A (XHTML) EA (, + ) R2 2 A (PDF) EA (, and + ) R3 2 A (PostScript) EA (.) EP()} D +/tH {()0 1 -1 H (Table of Contents) EH()} D +/FD 2 D +/Dy 2 D +/cD [16#F0 16#F0 16#F0] D +/FW 0.6 D +/FU [16#00 16#00 16#00] D +/ET {/RM f D /A0 3 D /PN SN D /OU t D /Ou t D /W IW D /LL W D D1 + Ms not TP and{Ip}if /TF f D} D + +%-- End of variable part -- +/MySymbol 10 dict dup begin + /FontType 3 D /FontMatrix [.001 0 0 .001 0 0 ] D /FontBBox [25 -10 600 600] D + /Encoding 256 array D 0 1 255{Encoding exch /.notdef put}for + Encoding (e) 0 get /euro put + /Metrics 2 dict D Metrics begin + /.notdef 0 D + /euro 651 D + end + /BBox 2 dict D BBox begin + /.notdef [0 0 0 0] D + /euro [25 -10 600 600] D + end + /CharacterDefs 2 dict D CharacterDefs begin + /.notdef {} D + /euro{newpath 114 600 moveto 631 600 lineto 464 200 lineto 573 200 lineto + 573 0 lineto -94 0 lineto 31 300 lineto -10 300 lineto closepath clip + 50 setlinewidth newpath 656 300 moveto 381 300 275 0 360 arc stroke + -19 350 moveto 600 0 rlineto -19 250 moveto 600 0 rlineto stroke}d + end + /BuildChar{0 begin + /char E D /fontdict E D /charname fontdict /Encoding get char get D + fontdict begin + Metrics charname get 0 BBox charname get aload pop setcachedevice + CharacterDefs charname get exec + end + end}D + /BuildChar load 0 3 dict put /UniqueID 1 D +end +definefont pop + +/Cd {aload length 2 idiv dup dict begin {D} repeat currentdict end} D +/EX {EC cvx exec} D +/DU {} d +/BB {pop pop}d +/ie {ifelse} d +/E {exch} d +/M {moveto} d +/R {rmoveto} d +/L {lineto} d +/RL {rlineto} d +/CP {currentpoint} d +/SW {stringwidth} d +/GI {getinterval} d +/PI {putinterval} d +/Sg {setgray} d +/LW {setlinewidth} d +/S {dup () ne OU and{0 Co R AT 3 eq LB and HF not and A1 0 ne A2 0 ne or and + {A2 0 32 A1 0 6 -1 roll awidthshow}{show}ie 0 Co neg R}{pop}ie + OU PH 3 eq or{/Ms t D}if} D +/U {OU{gsave CP currentfont /FontInfo get /UnderlinePosition get + 0 E currentfont /FontMatrix get dtransform E pop add newpath M dup SW pop + CJ 0 RL stroke grestore}if} D +/B {OU Br 0 gt and{CP Ts neg Ts .33 mul R gsave 0 Sg + CP newpath Ts Br mul 0 360 arc closepath UI 2 mod 0 eq{stroke}{fill}ie + grestore M CP E Ts Br 1 add mul sub E BB /Ms t D}if}D +/NP {Ms TP not or PA and OU and{TP{OR}if f1{mF k2 /mF E D /YC 0 D}if + TP TU not PM 0 eq or and{showpage}if DU Ip TE not{LA}if 0.6 LW + /CI 0 D /TP t D /Hs f D /hl 6 D /Hv 6 D /HI hi D /Ms f D}if Bs XO BO M} D +/Np {LE sub CP E pop gt PL 0 eq and{NP}if}D +/Ip {/PN PN 1 add D /Pn RM{1}{4}ie PN Ns D /PM PN SN sub 2 mod D} D +/GP {E dup 3 -1 roll get PN 1 add 2 mod get dup type /integertype eq + {get 0 get}{E pop}ie}d +/Fc {dup 2 GP exec SW pop /S1 E D dup 1 GP exec SW pop /S2 E D 0 GP exec SW + pop /S3 E D S1 0 gt{S2 2 mul S1 add S3 2 mul S1 add 2 copy lt{E}if pop}{0}ie + S2 S3 add 2 copy lt{E}if pop IW .9 mul div dup 1 gt{1 E div}{pop 1}ie}D +/OR {Df{Sd}if tp not{gsave SA{1 Sf div dup scale}if Fe{Cf{FU VC}if FW LW + 1 setlinejoin FE stroke}if /YO {60 F div dup 40 gt{pop 40}if}D /cs CS D + /cf CF D /CF 0 D /pf PF D /PF f D /Fn FN D /At AT D /AT 0 D /FN EF Hf 1 add + get D Fz Fs FS ZZ Fc Fz mul Fs FS EU Hf 1 add get dup type /arraytype eq + Cf and{VC}{pop 0 Sg}ie IW IL neg YO sub M ZZ 1 GP exec dup SW pop neg 0 R Sh + 0 IL neg YO sub M ZZ 0 GP exec Sh ZZ 2 GP exec dup SW pop IW E sub 2 div + IL neg YO sub M Sh Fz Fs FS NO{/AW IW Pn SW pop sub D AW 2 div IL neg YO sub + S1 0 gt S2 AW .45 mul gt or S3 AW .45 mul gt or{Fz 2 mul sub}if M Pn Sh}if + EU Hf get dup type /arraytype eq Cf and{VC}{pop 0 Sg}ie YY Fc /FN EF Hf get D + Hz mul HS FS IW YO M YY 1 GP exec dup SW pop neg 0 R Sh 0 YO M YY 0 GP exec Sh + YY 2 GP exec dup SW pop IW E sub 2 div YO M Sh /FN Fn D /AT At D t Pb XO SZ + SL get neg R /PF pf D grestore /CF 0 D cs cf FS}if}D +/Sh {dup () ne{CP Hz 4 div sub BB show CP CS add BB}{pop}ie}D +/Pb {/OU E D /Ou OU D /PB t D 0 0 M Ba{/Sa save D /BP t D /Fl t D RC /PL 0 D + /PH 0 D /W IW D /LE IL .7 mul D /EO 0 D SI ZF /YA 0 D /BO 0 D /C1 () D + BA 0 Ts neg R Bb{Xl Yl Xh Yh}if Bb CP Sa restore M + {/Yh E D /Xh E D /Yl E D /Xl E D}if /Fl t D}if + BL /OU t D /HM f D /Ou t D /PB f D} D +/Bs {/BP Ba not D}D +/reencodeISO { + dup dup findfont dup length dict begin{1 index /FID ne{D}{pop pop}ie}forall + /Encoding ISOLatin1Encoding D currentdict end definefont} D +/ISOLatin1Encoding [ +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright +/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash +/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon +/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N +/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright +/asciicircum/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m +/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/space/exclamdown/cent/sterling/currency/yen/brokenbar +/section/dieresis/copyright/ordfeminine/guillemotleft/logicalnot +/hyphen/registered/macron/degree/plusminus/twosuperior/threesuperior +/acute/mu/paragraph/periodcentered/cedilla/onesuperior/ordmasculine +/guillemotright/onequarter/onehalf/threequarters/questiondown +/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla +/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex +/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis +/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute +/Thorn/germandbls/agrave/aacute/acircumflex/atilde/adieresis +/aring/ae/ccedilla/egrave/eacute/ecircumflex/edieresis/igrave +/iacute/icircumflex/idieresis/eth/ntilde/ograve/oacute/ocircumflex +/otilde/odieresis/divide/oslash/ugrave/uacute/ucircumflex/udieresis +/yacute/thorn/ydieresis +] D +[128/backslash 129/parenleft 130/parenright 141/circumflex 142/tilde +143/perthousand 144/dagger 145/daggerdbl 146/Ydieresis 147/scaron 148/Scaron +149/oe 150/OE 151/guilsinglleft 152/guilsinglright 153/quotesinglbase +154/quotedblbase 155/quotedblleft 156/quotedblright 157/endash 158/emdash +159/trademark] +aload length 2 idiv 1 1 3 -1 roll{pop ISOLatin1Encoding 3 1 roll put}for +/colorimage where{pop}{ + /colorimage { + pop pop /Pr E D {/Cv Pr D /Gr Cv length 3 idiv string D 0 1 Gr length 1 sub + {Gr E dup /i E 3 mul D Cv i get 0.299 mul Cv i 1 add get 0.587 mul add + Cv i 2 add get 0.114 mul add cvi put}for Gr} image} D +}ie +/pdfmark where{pop}{userdict /pdfmark /cleartomark load put}ie +WF{FL{reencodeISO D}forall}{4 1 FL length 1 sub{FL E get reencodeISO D}for}ie +/Symbol dup dup findfont dup length dict begin + {1 index /FID ne{D}{pop pop}ie}forall /Encoding [Encoding aload pop] + dup 128 /therefore put D currentdict end definefont D + +/SF {/CS E D SZ SL CS put FO SL FN put /YI CS LH neg mul D dup ST cvs ( ) join + CS ST cvs join C1 E join ( NF ) join /C1 E D CS NF /Wf WF FN 0 gt or D + /BW Wf{( ) SW pop}{0}ie D}D +/NF {/cS E D /cF E D cF 0 ge{FL cF get}{cF -1 eq{/Symbol}{/MySymbol}ie}ie + findfont cS scalefont setfont} D +/FS {CF or /CF E D FR SL CF put CF CF 0 ge{FN 4 mul add}if E SF} D +/PC {SH /BP f D fin not GL not and{NL}if /HM t D /LL LS D} D +/BS {/TX E D Wf{/fin f D /CW 0 D /LK 0 D /SC 0 D + /RT TX D {RT ( ) search{/NW E D pop /RT E D /WH NW SW pop D CW WH add LL gt + {TX SC LK SC sub 1 sub NN GI GL{SH cF cS OC + 2 copy cS ne E cF ne or{NF}{pop pop}ie}{PC /CW WH BW add D}ie + /SC LK D} + {GL{JC}if + /CW CW WH add BW add D /HM t D}ie /GL f D /Ph f D + /LK LK NW length 1 add add D}{pop exit}ie}loop + /fin t D TX SC LK SC sub GI SH RT () ne{GL not{CC}if}if + /LC TX length D /WH RT SW pop D CW WH add Hy{HC SW pop add}if LL gt + {RT GL{SH cF cS OC 2 copy cS ne E cF ne or{NF}{pop pop}ie + Hy{/Ph t D}if /LL LS D}{NL /LL LS D SH}ie} + {RT PC Hy{CC}if /Ph Ph Hy or D}ie RT () ne{/GL t D /HM t D}if} + {TX SW pop LL le{TX SH}{/NW () D 0 2 TX length 1 sub + {/CW E D TX 0 CW GI dup SW pop LL gt{pop NW SH /HM t D NL/LL W XO sub MR sub D + /CW CW 2 sub NN D /TX TX CW TX length CW sub GI D TX BS exit} + {/NW E D}ie}for}ie}ie /HM t D}D +/CC {C0 length 0 gt{JC}if /C0 [C1 L1 YA YB Mf NS NB TB AF Bw] D + /C1 () D /L0 L1 D /YA 0 D /YB 0 D /Mf 0 D /NS 0 D /NB 0 D}D +/JC {C0 aload length 0 gt{pop pop pop NB add /NB E D NS add /NS E D + dup Mf gt{/Mf E D}{pop}ie dup YB gt{/YB E D}{pop}ie + dup YA gt{/YA E D}{pop}ie pop C1 join /C1 E D /C0 [] D}if}D +/OC {C0 length 0 gt{C1 L1 L0 sub YA YB Mf NS NB TB AF Bw GL C0 aload pop + /Bw E D /AF E D /TB E D /NB E D /NS E D /Mf E D /YB E D /YA E D /C0 [] D + /L1 E D /C1 E D Ph{HC SH}if NL /GL E D /Bw E D /AF E D /TB E D /NB E D /NS E D + /Mf E D /YB E D /YA E D /L1 E D /LL W L1 sub XO sub MR sub WH sub D /CW 0 D + C1 E join /C1 E D}if}D +/BT {/LB t D dup length string copy RS dup dup () ne E ( ) ne and + {/CI 0 D /LS LL D /LL W L1 sub XO sub MR sub D BS} + {dup ( ) eq{/GL f D}if dup () eq L1 0 eq or{pop}{SH /BP f D /Ph f D}ie}ie + /LB f D} D +/BL {CP E pop XO E M} D +/NL {JC /GL f D /SK W XO sub MR sub L1 sub TB{Bw add}if D + /YA LF{Mf HM Fl not and PF or{LH mul}if}{0 /LF t D}ie YA 2 copy lt{E}if pop D + C1 () ne{/FB YB Mf SA{Sf mul}if 4 div 2 copy lt{E}if pop D}if Fl{/Ya YA D}if + CP E pop YA sub YB sub LE neg lt Fl not and PB not and{NP}if NT TL BL + OU PF not and PB or{/RE L1 TB{Bw sub}if + W XO sub MR sub div YA YB add LE BO add div 2 copy lt{E}if pop D + RE 1 gt{BL 1 RE div dup scale}if}if + AT 2 le{SK AT mul 2 div YA neg R}if + AT 3 eq{0 YA neg R TB{/NB NB 1 sub D /NS NS 1 sub D}if /NB NB 1 sub NN D + /A3 NS 6 mul NB add D NS NB add 0 eq + {/A1 0 D /A2 0 D} + {NS 0 eq{/A1 SK NB div dup J gt{pop 0}if D /A2 0 D}{J A3 mul SK lt + {/A1 J D /A2 SK J NB mul sub NS div dup Ab gt{/A1 0 D pop 0}if D} + {/A1 SK A3 div D /A2 A1 6 mul D}ie}ie}ie /A1 A1 NN D /A2 A2 NN D}if + AT 4 eq{0 YA neg R PH 2 le{PD 0 lt{/PD L1 D}if PD M1 gt{/M1 PD D}if + L1 PD sub M2 gt{/M2 L1 PD sub D}if}{DV ID 1 sub get 0 ge{Lo 0 R}if}ie}if + F0 cF ne Cs cS ne or{F0 Cs NF}if + /ms Ms D /Ms f D CP FB sub + C1 cvx exec XO EO sub L1 add TB{BW sub}if dup LM gt{/LM E D}{pop}ie + PH 0 eq PH 4 eq or Ms and{HF not{/PO t D /AH t D}if + BB CP YA add E AT 3 eq LB and{A1 sub}if TB{BW sub}if E BB} + {pop pop}ie Ms HM PH 3 eq and or{/BP f D /Fl f D}if + /Lo 0 D /L1 0 D /F0 cF D /Cs cS D BP not{0 YB NN neg R}if + OU f1 and mF not and{k2 /f1 f D}if + OU PF not and PB or{RE 1 gt{RE dup scale}if}if /Ms ms Ms or D + /C1 AF{(Cp )}{()}ie D /YA 0 D /YB 0 D BL + AT 4 eq LB not and PH 3 ge and + {ID DV length lt{DV ID get dup 0 ge{DO E sub /Lo E D /L1 Lo D}{pop}ie + /ID ID 1 add D}if}if /T t D CD{/LN LN 1 add D PD}if + /PD -1 D /NS 0 D /NB 0 D /TB f D /Ph f D /Mf 0 D /HM f D} D +/RS {/TM E D /CN 0 D TM{10 eq{TM CN ( ) PI}if /CN CN 1 add D}forall + /CN 0 D /BK HM EN and{0}{1}ie D TM + {dup 32 ne{TM CN 3 2 roll put /CN CN 1 add D /BK 0 D} + {pop BK 0 eq{TM CN 32 put /CN CN 1 add D}if /BK 1 D}ie}forall + TM 0 CN GI dup dup () ne E ( ) ne and + {dup CN 1 sub get 32 eq{/EN f D}{/EN t D}ie}if} D +/join {2 copy length E length add string dup 4 2 roll 2 index 0 3 index + PI E length E PI}d +/WR {(\n) search{dup () ne BP not or + {Li 4 le CP E pop YI Li mul add LE add 0 lt and PL 0 eq and{NP}if + SH NL pop /Li Li 1 sub D WR}{pop pop WR}ie}{SH}ie /CI 0 D /BP f D} D +/SH {dup dup () ne E ( ) ne and PF or CS Mf gt and{/Mf CS D}if + T not Wf and{( ) E join /T t D}if dup BP{/MF CS D}if + AT 3 eq{2 copy length dup 0 gt{/NB E NB add D + {( ) search{/NS NS 1 add D pop pop}{pop exit}ie}loop}{pop pop}ie}if + CD PD 0 lt and{dup DC search{SW pop /PD E L1 add D pop pop}{pop}ie}if + 0 Np dup SW pop L1 add /L1 E D dup () ne + {C1 (\() join E join (\)) join AU AF and UF or Wf and{( U ) join}if + sF{( s ) join}if ( S ) join + /C1 E D dup length 1 sub get 32 eq /TB E D /Bw BW D}{pop pop}ie} D +/BG {AI LG BC add add 0 eq} D +/ON {OU{Ty AR AI NN get dup 1 add Ln Ns Ty 2 mod 0 eq{(. )}{(\) )}ie join + dup SW pop neg 0 R CP E 0 lt{0 E M}{pop}ie CP BB show /Ms t D}if} D +/Ln {AR AI 3 -1 roll put}D +/SP {dup CI lt BP not and{dup CI sub 0 E R /CI E D}{pop}ie} D +/BN {PF{WR /HM f D}{BT NL}ie} D +/NN {dup 0 lt{pop 0}if} D +/h {(h) HI ST cvs join cvx exec dup 1 get E Nf{0 get E join}{pop}ie} D +/H {/fn FN D /Hi E 1 add D 1 sub /HL E D /H2 HL 2 add D /GS EZ H2 get D + E Tm H2 get GS mul BE dup 0 gt{1 sub}{pop EG H2 get dup 0 lt{pop AT}if}ie NA + WW Np /SL SL 1 add D /FN EF H2 get D GS Ey H2 get FS + EU H2 get Sc Hs not HL Hl lt and Hs HL hl lt and or Hi 0 eq or + {/HI Hi D /Hs t D /hl HL D /Hv HL D}if HL Hl lt{/hi Hi D}if + Nf HI 0 gt and{(h) Hi ST cvs join cvx exec 0 get WB}if + /HF t D /AH f D /PO f D} D +/EH {Bm H2 get GS mul BE OA /SL SL 1 sub NN D /CF 0 D /FN fn D + SZ SL get FR SL get FS /HF f D /GS Ts D ()Ec} D +/P {E PF{WR}{PO{EP}{BN}ie Ts 4 mul Np AE not{Tm 0 get Ts mul neg SP}if + dup 0 ge AH and{Pi Pd}if}ie 1 sub dup 0 lt{pop AV AL get}if /AT E D /PO t D} D +/EP {PF{WR}{BN Ts 4 mul Np}ie AE not{Bm 0 get Ts mul neg SP}if + /AT AV AL get D /PO f D} D +/BE {E PO{EP}{BN}ie Ts 4 mul Np neg SP} D +/HR {/Aw W EO sub D /RW E dup 0 gt{Aw mul}{neg}ie dup Aw gt{pop Aw}if D /RZ E D + E BN Ts neg SP 1 sub 2 div Aw RW sub mul EO add CP E pop M PF{0 Ps neg R}if + 0 Np OU{gsave RZ LW Cf{Hc VC}{0 Sg}ie CP BB RW 0 RL CP BB stroke grestore}if + /CI 0 D /BP f D PF not{Ts neg SP}if /Ms t D} D +/AD {I NL EG 14 get dup 0 lt{pop AT}if NA /AE t D Tm 14 get Ts mul neg SP + Cf{EU 14 get dup -1 eq{pop CA CL get}if Sc}if} D +/DA {BN ()ES OA /AE f D ()Ec Bm 14 get Ts mul neg SP} D +/PR {/MW E D /Li E D Tm 1 get Ps mul BE 0 NA /FN Fp D /PF t D SI /SL SL 1 add D + /CF 0 D Ps CS mul Ts div MW WC mul CS mul Ts div dup LL gt PL 0 eq and + {LL div div}{pop}ie Ey 1 get FS CP E pop LE add YI neg div cvi dup Li lt + AH and{4 lt YI Li mul 5 mul LE add 0 gt or PL 0 eq and{NP}if}{pop}ie + EU 1 get Sc /GS Ps D}D +/RP {WR NL () /PF f D SI /FN 0 D ES Bm 1 get Ps mul neg SP OA /GS Ts D} D +/SI {/XO Lm 15 get BC NN mul Lm 16 get AI UI sub NN mul add + Lm 17 get UI NN mul add Lm 20 get LG NN mul add Ts mul + PF{Lm 1 get Ps mul add}if EO add D + /MR Rm 15 get BC NN mul Rm 16 get AI UI sub NN mul add + Rm 17 get UI NN mul add Rm 20 get LG NN mul add Ts mul + PF{Rm 1 get Ps mul add}if D /LL W XO sub MR sub D} D +/DT {/cC E D BN /LG LG 1 sub D SI /LG LG 1 add D WW 2 div Np BL} D +/DD {WB Cc 0 eq cC 0 eq and L1 0 eq or Lm 20 get Ts mul L1 sub TB{BW add}if + Ts 2 div lt or NL /LF E D SI BL /cC 0 D} D +/DL {Dc LG Cc put /Cc E D BG{Tm 18 get Ts mul BE}{BN}ie /LG LG 1 add D BL} D +/LD {BN LG 0 gt{/LG LG 1 sub D}if /Cc Dc LG get D SI + BG{()Bm 18 get Ts mul BE}if BL} D +/UL {BG{Tm 17 get Ts mul BE}{BN}ie NR AI NN 0 put /UI UI 1 add D + /AI AI 1 add D SI BL} D +/LU {BN /UI UI 1 sub D /AI AI 1 sub D SI BG{()Bm 17 get Ts mul BE}if BL} D +/OL {E BG{Tm 16 get Ts mul BE}{BN}ie TR AI NN Ty put /Ty E D NR AI NN 1 put + /AI AI 1 add D SI BL 1 Ln} D +/LO {BN /AI AI 1 sub D /Ty TR AI get D SI BG{()Bm 16 get Ts mul BE}if BL} D +/LI {E BN -1 SP /BP f D /CI 0 D 0 Np NR AI 1 sub NN get 1 eq + {dup dup 0 gt E 4 le and{/Ty E D}{pop}ie + /L1 L1 Ty AR AI NN get Ns SW pop XO sub dup 0 lt{pop 0}if add D ( ON )} + {pop ( B )}ie C1 E join /C1 E D CS Mf gt{/Mf CS D}if BL} D +/BQ {Tm 15 get Ts mul BE /BC BC 1 add D SI BL} D +/QB {Bm 15 get Ts mul BE /BC BC 1 sub D SI BL} D +/Al {E EP 1 sub dup 0 lt{pop AV AL get}if NA} D +/Ea {EP OA} D +/WB {PF{WR}{BT}ie} D +/F1 {WB /FN 0 D CS 0 FS} D +/F2 {WB /FN WI D CS 0 FS} D +/HY {/Hy t D WB /Hy f D} D +/YH {WB} D +/A {/LT E D LT 1 eq{/RN E D}if /Lh E D WB /C1 C1 ( Cp ) join D + Lc AF not and{Cl Sc}if /AF t D} D +/EA {Lc AF and{Ec}{WB}ie TL Pa AF and Lh 0 ne and + {( \() Lh join (\)) join /AF f D WB}if /AF f D} D +/TL {C1 ( Tl ) apa /C1 E D} d +/apa {AF OU and Lh 0 ne LT 1 eq or and{LT 1 eq{RN ( /) E ST cvs join} + {(\() Lh join (\)) join}ie E join join}{pop}ie} d +/Cp {/Xc CP /Yc E D D} D +/SS {Cf{dup 0 ge{EU E get dup -1 eq{pop CA CL get}if}{pop CA CL get}ie Sc} + {pop}ie SZ SL get /SL SL 1 add D} D +/I {WB 8 SS 1 FS} D +/EM {WB 8 SS /CF CF 1 xor D 0 FS} D +/BD {WB 9 SS 2 FS} D +/TT {WB 10 SS /FN Fp D 0 FS} D +/KB {WB 11 SS /FN Fp D 2 FS} D +/CT {WB 12 SS 1 FS} D +/SM {WB 13 SS /FN Fp D 0 FS} D +/Q {/QL QL 1 add D QO QL 2 mod get La get join WB} D +/EQ {QC QL 2 mod get La get join WB /QL QL 1 sub D} D +/RO {WB -1 SS /CF 0 D 0 FS} D +/SY {WB -1 SS -1 FS} D +/MY {WB -1 SS -2 FS} D +/ES {WB /SL SL 1 sub NN D /CF 0 D /FN FO SL get D SZ SL get FR SL get FS ()Ec}D +/FZ {3 sub 1.2 E exp GS mul E WB TL /C1 C1 ( Cp ) join D /SL SL 1 add D 0 FS} D +/Ef {WB TL ()ES /C1 C1 ( Cp ) join D} D +/BZ {dup /Bf E D FZ}D +/Sc {dup -1 ne Cf and{/CL CL 1 add D dup 0 eq{pop [0 0 0]}if + dup CA E CL E put VS ( VC ) join C1 E join /C1 E D}{pop}ie} D +/Ec {WB Cf{/CL CL 1 sub NN D CA CL get VS ( VC ) join C1 E join /C1 E D}if} D +/VS {dup type /arraytype eq{([) E {ST cvs join ( ) join}forall (]) join}if} D +/VC {{255 div}forall setrgbcolor} D +/Sl {dup type /integertype ne{Ds}if /La E D WB}d +/UN {WB /UF t D} D +/NU {WB /UF f D} D +/SE {WB /sF t D} D +/XE {WB /sF f D} D +/sM {/C1 C1 ( k1 ) join D}d +/eM {/C1 C1 ( k2 ) join D}d +/k1 {/YC CP E pop Ts add D /mF t D /f1 t D}d +/k2 {gsave 3 LW -9 CP E pop Ts 0.2 mul sub M -9 YC L stroke grestore /mF f D}d +/Ac {/AC E D WB}d +/Ca {eA{( \()join AC join(\) )join}if WB}d +/s {OU{gsave 0 CS .25 mul R dup SW pop CJ 0 RL stroke grestore}if}D +/CJ {AT 3 eq LB and{E dup dup length 1 sub A1 mul E + {( ) search{pop pop E A2 add E}{pop exit}ie}loop 3 -1 roll add + W CP pop sub 2 copy gt{E}if pop}if}D +/So {/Co E D} D +/SO {C1 Yo ST cvs join ( So ) join /C1 E D (j) SW pop 2 div Pd} D +/Se {E WB CS E div Pd}D +/Pd {dup type /stringtype eq{SW pop}if dup /L1 E L1 add D + ST cvs ( 0 R ) join C1 E join /C1 E D} D +/Sp {0.35 CO} D +/Sb {-0.2 CO} D +/CO {OV Io Yo put /Yo E CS mul Yo add D /Io Io 1 add D -1.5 Io mul 3 add FZ SO + CS Yo add dup YA gt{/YA E D}{pop}ie + Yo neg dup YB gt{/YB E D}{pop}ie} D +/Es {ES /Io Io 1 sub NN D /Yo OV Io get D SO} D +/SB {/N2 0 D 0 1 NI{/N E D{IX N2 get 0 lt{/N2 N2 1 add D}{exit}ie}loop + /K WS N get FC N get mul D /NY AY N2 get D /BV NY array D + 0 1 NY 1 sub{/TM K string D currentfile TM readhexstring pop pop BV E TM put} + for BM N BV put /N2 N2 1 add D}for} D +/IC [{/MA E D /MB 0 D}{2 div /MA E D /MB MA D}{/MB E CS sub D /MA CS D} + {pop /MA YS AB mul D /MB 1 AB sub YS mul D}{pop /MA 0 D /MB 0 D}] D +/IP {BV N get /N N 1 add D} D +/II {/K E D IX K get 0 lt{/EC E D}if /TY E D + TY 4 eq{/Y E D /X E D}if TY 3 eq{/AB E D}if + /XW AX K get D /YW AY K get D /IS SG IT K get get D /XS XW IS mul D + /YS YW IS mul D YS IC TY get exec /MA MA Fl not{3 add}if D} D +/IM {II /ty TY D /xs XS D /ys YS D /ya YA D /yb YB D /ma MA D /mb MB D /k K D + /ec EC D /BP f D /CI 0 D WB TL L1 xs add dup XO add MR add W gt + {pop /ma ma Fl{3 add}if D NL /YA ma D /YB mb D /YS ys D /L1 xs D} + {/L1 E D ma YA gt{/YA ma D}if mb YB gt{/YB mb D}if}ie /TB f D + OU{CP E pop YS sub LE neg lt Fl not and PB not and{NP /YA ma D /YB mb D}if + /BP f D ty ST cvs ( ) join IX k get 0 lt{(\() join ec join (\) ) join}if + k ST cvs join ty 3 eq{AB ST cvs ( ) join E join}if + ty 4 eq{X ST cvs ( ) join Y ST cvs join ( ) join E join}if C1 E join + ( DI ) join FP 2 eq FP 1 eq AF and or{( FM ) join}if + ( Il Cp ) apa /C1 E D /EN f D}if /HM t D /T f D} D +/DI {II /Xc CP /Yc E D D /YN YW neg D /HM t D /CI 0 D /K2 IX K get D gsave + TY 4 eq{OX X IS mul add OY FY add YS sub Y IS mul sub} + {/FY YS D CP MB sub 2 copy /OY E D /OX E D}ie + translate K2 0 ge{/DP AZ K2 get D /BV BM K2 get D XS YS scale /N 0 D XW YW DP + [XW 0 0 YN 0 YW] {IP} FC K2 get 1 eq{image}{f 3 colorimage}ie} + {EX}ie grestore XS 0 R /Ms t D} D +/FM {gsave 0 Sg CP MB sub translate XS neg 0 M 0 YS RL XS 0 RL 0 YS neg RL + XS neg 0 RL stroke grestore} D +/NA {/AT E D /AL AL 1 add D AV AL AT put} D +/OA {AL 0 gt{/AL AL 1 sub D /AT AV AL get D}if} D +/D1 {/BR {CP E pop E BN Mb{CP E pop eq{0 YI R}if}{pop}ie} D + /Sn {OU{C1 E ST cvs join ( Ld ) join /C1 E D}{pop}ie} D} D +/D1 {/BR {BN} D /Sn {OU {C1 E ST cvs join ( Ld ) join /C1 E D} {pop} ie} D} D +/TC {/TF t D /ML 0 D HN{SW pop dup ML gt{/ML E D}{pop}ie}forall NP /RM RM not D + RC /OU Tc D Ep /PN 0 D Ms not TP and{Ip}if /W IW ML sub Ts sub D + /A0 0 D TH{/BR {( ) join BT} D /Sn {pop} D /Au () D}if} D +/TN {0 eq{E EA PF HF or not XR and{HN E get Xr}{pop}ie} + {OU{Tn 0 ge{() BN}if /Tn E D}{pop}ie WB}ie} D +/NT {OU LB not and Tn 0 ge and{PL 0 eq{Ms not{CS CF FS}if CP dup + /y E YA sub D W 9 sub CS -1.8 mul XO L1 add 2 add{y M (.) show}for + HN Tn get dup SW pop IW E sub y M show CP BB M}if /Tn -1 D}if} D +/Ld {/DN E D HN DN Pn put [/View [/XYZ -4 Fl{PS}{CP YA add US E pop}ie null] + /Dest DN ST cvs cvn /DEST pdfmark} D +/C {ND 1 eq{1 sub}if TI mul /XO E D NL Nf not{pop()}if 0 3 -1 roll 1 A} D +/OP {BP not{NP}if PN 2 mod 0 eq{/Ms t D NP}if}D +/Ep {Xp PN 2 mod 0 eq and OU and{/Pn (-) D showpage /PM 1 D LA}if}D +/Dg [73 86 88 76 67 68 77] D +/Rd [0 [1 1 0][2 1 0][3 1 0][2 1 1][1 1 1][2 2 1][3 3 1][4 4 1][2 1 2]] D +/Ns {/m E D /c E 32 mul D /j m 1000 idiv D /p j 12 add string D + c 96 le m 0 gt and{c 32 le {/i 0 D /d 77 D /l 100 D /m m j 1000 mul sub D + j -1 1 {pop p i d c add put /i i 1 add D}for + 4 -2 0 {/j E D /n m l idiv D /m m n l mul sub D /d Dg j get D + n 0 gt {/x Rd n get D x 0 get -1 1 {pop p i d c add put /i i 1 add D}for + p i x 1 get sub Dg x 2 get j add get c add put}if /l l 10 idiv D + }for p 0 i GI} + {/i ST length 1 sub D m {1 sub dup 0 ge{dup 26 mod c add 1 add + ST i 3 -1 roll put 26 idiv dup 0 eq{pop exit}if}if /i i 1 sub D}loop + ST i ST length i sub GI}ie} + {m p cvs}ie} D +/US {matrix currentmatrix matrix defaultmatrix matrix invertmatrix + matrix concatmatrix transform} D +/GB {Gb{US}if}D +/Tl {/Rn E D Xc CP pop ne{ + [/Rect [Xc 1 sub Yc cS 0.25 mul sub GB CP E 1 add E cS 0.85 mul add GB] + /Subtype /Link /Border [0 0 Cf Lc and LX and AU or{0}{1}ie] Rn type + /nametype eq {/Dest Rn}{/Action [/Subtype /URI /URI Rn] Cd}ie + /ANN pdfmark}if} D +/Il {/Rn E D [/Rect [Xc Yc GB Xc XS add Yc YS add GB] /Subtype /Link + /Border [0 0 0] Rn type /nametype eq{/Dest Rn} + {/Action [/Subtype /URI /URI Rn] Cd}ie /ANN pdfmark} D +/XP {[{/Z Bz 2 div D Z 0 R Z Z RL Z neg Z RL Z neg Z neg RL Z Z neg RL + Fi cH 1 eq and{fill}if} {Bz 0 RL 0 Bz RL Bz neg 0 RL 0 Bz neg RL + Fi cH 1 eq and{fill}if} {0 -5 R Bz 0 RL 0 21 RL Bz neg 0 RL 0 -21 RL}]} D +/MS {/Sm E D WB}D +/O {BN()0 Sm BX} D +/BX {/Bt E D Bt 2 lt{/Ch E D CS 0.8 mul}{11 mul}ie W XO sub MR sub + 2 copy gt{E}if pop /HZ E D Bt 2 eq{Fi not{pop()}if ( )E join /Ft E D TT + /PF t D /MW 1 D /Li 1 D /Fw Ft SW pop D Fw HZ gt{/HZ Fw 8 add D}if + HZ ST cvs( )join}{WB Ch ST cvs( )join}ie L1 HZ add XO add MR add W gt{NL}if + Bt 2 eq{Ft ES Fw neg HM{CS sub}if Pd}if Bt ST cvs join( Bx )join + Bt 2 eq HM and{CS Pd}if C1 E join /C1 E D /L1 L1 HZ add D /T f D + ( ) Pd /PF f D Bt 2 lt{YA CS .8 mul lt{/YA CS .8 mul D}if} + {YB 5 lt{/YB 5 D}if YA 21 lt{/YA 21 D}if}ie /CI 0 D} D +/Bx {dup 2 eq{E /Bz E D}{E /cH E D /Bz CS .8 mul D}ie + OU {gsave 0 Sg XP E get exec stroke grestore}{pop}ie Bz 0 R /Ms t D}D +/SD {FD 4 mul Dy add DZ NF newpath 0 0 M DX t charpath pathbbox + 3 -1 roll sub /DY E D E dup /X1 E D sub WM mul WX DY mul add WM DG mul E div + /DF E D /DR WX DF mul DY mul WM div 2 div D} d +/Sd {gsave 0 IL Di mul neg translate IL IW atan Di 0 eq{neg}if rotate + FD 4 mul Dy add DZ NF DR X1 sub DY 2 div neg M cD VC DX show grestore} d +/Pt {/tp t D Tp{NP /Pn (TP) D 0 Tt neg R Th BN NP Ep ET RC ZF}if /tp f D} D +/RC {/AI 0 D /LG 0 D /BC 0 D /UI 0 D /PF f D /Cc 0 D /cC 0 D /Dc 10 array D + /NR [0 1 9{pop 0}for] D /La Ds D /AR 10 array D /TR 10 array D /AV 30 array D + SI /AL -1 D /AT A0 D AT NA /OV 9 array D /Yo 0 D /Co 0 D /Io 0 D /Hy f D + /Ph f D /CL -1 D Ct Sc}D +/ZF {/FR [0 1 30{pop 0}for] D /SZ [0 1 30{pop 0}for] D /FO [0 1 30{pop 0}for] D + /SL 0 D /CF 0 D /FN 0 D 0 Ts SF}D +/QO [[(\234)(\233)(\253\240)(\232)(\273)(\253)][(')(`)(\253\240)(\231)(\273)(\253)]] D +/QC [[(\234)(\234)(\240\273)(\233)(\253)(\273)][(')(')(\240\273)(`)(\253)(\273)]] D +/Hf EF length 2 sub D +/Hz EZ Hf get D +/HS Ey Hf get D +/Fz EZ Hf 1 add get D +/Fs Ey Hf 1 add get D +/LE IL D +/Ps EZ 1 get D +/Fp EF 1 get D +/XO 0 D +/YI 0 D +/CI 0 D +/FP 0 D +/WW Ts 7 mul D +/Mf 0 D +/YA 0 D +/YB 0 D +/Cs Ts D +/GS Ts D +/F0 0 D +/NS 0 D +/NB 0 D +/N 0 D +/C0 [] D +/C1 () D +/Lo 0 D +/L1 0 D +/LM 0 D +/PH 0 D +/EC 0 D +/Lh 0 D +/LT 0 D +/CH 1 string D +/ST 16 string D +/CA 9 array D +/HC (\255) D +/HM f D +/PF f D +/EN f D +/TB f D +/UF f D +/sF f D +/AE f D +/AF f D +/BP t D +/CD f D +/PA t D +/GL f D +/T t D +/HF f D +/AH f D +/SA f D +/PB f D +/f1 f D +/mF f D +/OX 0 D +/OY 0 D +/FY 0 D +/EO 0 D +/FB 0 D +/PL 0 D +/Bw 0 D +/PD -1 D +/TP f D +/tp f D +/TH t D +/Ty 4 D +/Tn -1 D +/Fl t D +/LB t D +/PM 1 D +/Ms f D +/Ba f D +/Bb f D +/Hl 3 D +/hl 6 D +/Hv 6 D +/Hs f D +/HI 0 D +/hi 0 D +/PO t D +/TE f D +/LF t D +/BO 0 D +/Sm 1 D +/Bf 3 D +/A1 0 D +/A2 0 D +/Ds 1 D +/QL -1 D +/Cb Db D +/Ct Dt D +/Cl Dl D +[/Creator (html2ps version 1.0 beta5) /Author () /Keywords (xsd, xml, schema, c++, mapping, data, binding, tree, serialization, guide, manual, examples) /Subject () + /Title (C++/Tree Mapping User Manual) /DOCINFO pdfmark +/ND 1 D +/HN [(1) (1) (1) (1) (1) (1) (1) (2) (2) (2) (3) (3) (3) (4) (5) (5) (5) (5) +(6) (6) (7) (??) (9) (10) (11) (11) (12) (14) (17) (18) (19) (21) (22) (23) +(24) (24) (25) (26) (27) (28) (28) (30) (31) (31) (35) (35) (35) (37) (39) +(43) (45) (46) (48) (50) (50) (53) (54) (56) (59) (64) (69) (69) (72) (72) +(73) (75) (76) (76) (77) (78) (78) (78) (79) (79) (80) (80) (80) (81) (81) +(83) (83) (85) (86) (86) (87) (87) (87) (88) (89) (90) (90) (92) (93) (??) +(1) (1) (1) (1) (2) (2) (2) (3) (3) (3) (4) (5) (5) (5) (5) (6) (6) (7) +(9) (10) (11) (11) (12) (14) (17) (18) (19) (21) (22) (23) (24) (24) (25) +(26) (27) (28) (28) (30) (31) (31) (35) (35) (35) (37) (39) (43) (45) (46) +(48) (50) (50) (53) (54) (56) (59) (64) (69) (69) (72) (72) (73) (75) (76) +(76) (77) (78) (78) (78) (79) (79) (80) (80) (80) (81) (81) (83) (83) (85) +(86) (86) (87) (87) (87) (88) (89) (90) (90) (92) (93)] D +/h0 [()(Table of Contents)] D +/h1 [(1\240\240)(Preface)] D +/h2 [(1.1\240\240)(About This Document)] D +/h3 [(1.2\240\240)(More Information)] D +/h4 [(2\240\240)(1 Introduction)] D +/h5 [(3\240\240)(2 C++/Tree Mapping)] D +/h6 [(3.1\240\240)(2.1 Preliminary Information)] D +/h7 [(3.1.1\240\240)(2.1.1 Identifiers)] D +/h8 [(3.1.2\240\240)(2.1.2 Character Type and Encoding)] D +/h9 [(3.1.3\240\240)(2.1.3 XML Schema Namespace)] D +/h10 [(3.1.4\240\240)(2.1.4 Anonymous Types)] D +/h11 [(3.2\240\240)(2.2 Error Handling)] D +/h12 [(3.2.1\240\240)(2.2.1 xml_schema::duplicate_id)] D +/h13 [(3.3\240\240)(2.3 Mapping for import and include)] D +/h14 [(3.3.1\240\240)(2.3.1 Import)] D +/h15 [(3.3.2\240\240)(2.3.2 Inclusion with Target Namespace)] D +/h16 [(3.3.3\240\240)(2.3.3 Inclusion without Target Namespace)] D +/h17 [(3.4\240\240)(2.4 Mapping for Namespaces)] D +/h18 [(3.5\240\240)(2.5 Mapping for Built-in Data Types)] D +/h19 [(3.5.1\240\240)(2.5.1 Inheritance from Built-in Data Types)] D +/h20 [(3.5.2\240\240)(2.5.2 Mapping for anyType)] D +/h21 [(3.5.3\240\240)(2.5.3 Mapping for anySimpleType)] D +/h22 [(3.5.4\240\240)(2.5.4 Mapping for QName)] D +/h23 [(3.5.5\240\240)(2.5.5 Mapping for IDREF)] D +/h24 [(3.5.6\240\240)(2.5.6 Mapping for base64Binary and hexBinary)] D +/h25 [(3.6\240\240)(2.5.7 Time Zone Representation)] D +/h26 [(3.7\240\240)(2.5.8 Mapping for date)] D +/h27 [(3.8\240\240)(2.5.9 Mapping for dateTime)] D +/h28 [(3.9\240\240)(2.5.10 Mapping for duration)] D +/h29 [(3.10\240\240)(2.5.11 Mapping for gDay)] D +/h30 [(3.11\240\240)(2.5.12 Mapping for gMonth)] D +/h31 [(3.12\240\240)(2.5.13 Mapping for gMonthDay)] D +/h32 [(3.13\240\240)(2.5.14 Mapping for gYear)] D +/h33 [(3.14\240\240)(2.5.15 Mapping for gYearMonth)] D +/h34 [(3.15\240\240)(2.5.16 Mapping for time)] D +/h35 [(3.16\240\240)(2.6 Mapping for Simple Types)] D +/h36 [(3.16.1\240\240)(2.6.1 Mapping for Derivation by Restriction)] D +/h37 [(3.16.2\240\240)(2.6.2 Mapping for Enumerations)] D +/h38 [(3.16.3\240\240)(2.6.3 Mapping for Derivation by List)] D +/h39 [(3.16.4\240\240)(2.6.4 Mapping for Derivation by Union)] D +/h40 [(3.17\240\240)(2.7 Mapping for Complex Types)] D +/h41 [(3.17.1\240\240)(2.7.1 Mapping for Derivation by Extension)] D +/h42 [(3.17.2\240\240)(2.7.2 Mapping for Derivation by Restriction)] D +/h43 [(3.18\240\240)(2.8 Mapping for Local Elements and Attributes)] D +/h44 [(3.18.1\240\240)(2.8.1 Mapping for Members with the One Cardinality Class)] D +/h45 [(3.18.2\240\240)(2.8.2 Mapping for Members with the Optional Cardinality Class)] D +/h46 [(3.18.3\240\240)(2.8.3 Mapping for Members with the Sequence Cardinality Class)] D +/h47 [(3.19\240\240)(2.9 Mapping for Global Elements)] D +/h48 [(3.19.1\240\240)(2.9.1 Element Types)] D +/h49 [(3.19.2\240\240)(2.9.2 Element Map)] D +/h50 [(3.20\240\240)(2.10 Mapping for Global Attributes)] D +/h51 [(3.21\240\240)(2.11 Mapping for xsi:type and Substitution Groups)] D +/h52 [(3.22\240\240)(2.12 Mapping for any and anyAttribute)] D +/h53 [(3.22.1\240\240)(2.12.1 Mapping for any with the One Cardinality Class)] D +/h54 [(3.22.2\240\240)(2.12.2 Mapping for any with the Optional Cardinality Class)] D +/h55 [(3.22.3\240\240)(2.12.3 Mapping for any with the Sequence Cardinality Class)] D +/h56 [(3.22.4\240\240)(2.12.4 Mapping for anyAttribute)] D +/h57 [(3.23\240\240)(2.13 Mapping for Mixed Content Models)] D +/h58 [(4\240\240)(3 Parsing)] D +/h59 [(4.1\240\240)(3.1 Initializing the Xerces-C++ Runtime)] D +/h60 [(4.2\240\240)(3.2 Flags and Properties)] D +/h61 [(4.3\240\240)(3.3 Error Handling)] D +/h62 [(4.3.1\240\240)(3.3.1 xml_schema::parsing)] D +/h63 [(4.3.2\240\240)(3.3.2 xml_schema::expected_element)] D +/h64 [(4.3.3\240\240)(3.3.3 xml_schema::unexpected_element)] D +/h65 [(4.3.4\240\240)(3.3.4 xml_schema::expected_attribute)] D +/h66 [(4.3.5\240\240)(3.3.5 xml_schema::unexpected_enumerator)] D +/h67 [(4.3.6\240\240)(3.3.6 xml_schema::expected_text_content)] D +/h68 [(4.3.7\240\240)(3.3.7 xml_schema::no_type_info)] D +/h69 [(4.3.8\240\240)(3.3.8 xml_schema::not_derived)] D +/h70 [(4.3.9\240\240)(3.3.9 xml_schema::no_prefix_mapping)] D +/h71 [(4.4\240\240)(3.4 Reading from a Local File or URI)] D +/h72 [(4.5\240\240)(3.5 Reading from std::istream)] D +/h73 [(4.6\240\240)(3.6 Reading from xercesc::InputSource)] D +/h74 [(4.7\240\240)(3.7 Reading from DOM)] D +/h75 [(5\240\240)(4 Serialization)] D +/h76 [(5.1\240\240)(4.1 Initializing the Xerces-C++ Runtime)] D +/h77 [(5.2\240\240)(4.2 Namespace Infomap and Character Encoding)] D +/h78 [(5.3\240\240)(4.3 Flags)] D +/h79 [(5.4\240\240)(4.4 Error Handling)] D +/h80 [(5.4.1\240\240)(4.4.1 xml_schema::serialization)] D +/h81 [(5.4.2\240\240)(4.4.2 xml_schema::unexpected_element)] D +/h82 [(5.4.3\240\240)(4.4.3 xml_schema::no_type_info)] D +/h83 [(5.5\240\240)(4.5 Serializing to std::ostream)] D +/h84 [(5.6\240\240)(4.6 Serializing to xercesc::XMLFormatTarget)] D +/h85 [(5.7\240\240)(4.7 Serializing to DOM)] D +/h86 [(6\240\240)(5 Additional Functionality)] D +/h87 [(6.1\240\240)(5.1 DOM Association)] D +/h88 [(6.2\240\240)(5.2 Binary Serialization)] D +/h89 [(7\240\240)(Appendix A \236 Default and Fixed Values)] D +/Hr [94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 +112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 +130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 +148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 +166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182]D +/HV [1 2 2 1 1 2 3 3 3 3 2 3 2 3 3 3 2 2 3 3 3 3 3 3 2 2 2 2 2 2 2 2 2 +2 2 3 3 3 3 2 3 3 2 3 3 3 2 3 3 2 2 2 3 3 3 3 2 1 2 2 2 3 3 3 3 3 3 3 3 +3 2 2 2 2 1 2 2 2 2 3 3 3 2 2 2 1 2 2 1]D +/Cn [2 0 0 0 23 4 0 0 0 0 1 0 3 0 0 0 0 6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 4 0 0 0 0 2 0 0 3 0 0 0 2 0 0 0 0 4 0 0 0 0 0 7 0 0 9 0 0 0 0 0 0 0 0 +0 0 0 0 0 7 0 0 0 3 0 0 0 0 0 0 2 0 0 0]D +Hr length 0 gt{[/PageMode /UseOutlines /DOCVIEW pdfmark}if +/Hn 1 D +0 1 Hr length 1 sub{ + /Bn E D [Cn Bn get dup 0 gt{/Count E HV Bn get Bl ge{neg}if}{pop}ie + /Dest Hr Bn get dup abs ST cvs cvn E 0 ge{(h)Hn ST cvs join cvx exec + dup 1 get E Nf{0 get E join}{pop}ie /Hn Hn 1 add D}{()}ie + /Title E dup length 255 gt{0 255 getinterval}if /OUT pdfmark}for +ZF /FN Fp D Ps 0 FS /WC Wf{( )}{<A1A1>}ie SW pop D +ET RC ZF +/Df f D +/R0 (http://www.codesynthesis.com/licenses/fdl-1.2.txt) D +/R1 (http://www.codesynthesis.com/projects/xsd/documentation/cxx/tree/manual/index.xhtml) D +/R2 (http://www.codesynthesis.com/projects/xsd/documentation/cxx/tree/manual/cxx-tree-manual.pdf) D +/R3 (http://www.codesynthesis.com/projects/xsd/documentation/cxx/tree/manual/cxx-tree-manual.ps) D +/R1 (http://www.codesynthesis.com/products/xsd) D +/R2 (http://codesynthesis.com/projects/xsd/documentation/cxx/tree/manual/index.xhtml) D +/R3 (http://codesynthesis.com/projects/xsd/documentation/cxx/tree/manual/cxx-tree-manual.pdf) D +/R4 (http://codesynthesis.com/projects/xsd/documentation/cxx/tree/manual/cxx-tree-manual.ps) D +/R5 (http://www.codesynthesis.com/projects/xsd/documentation/cxx/tree/guide/) D +/R6 (http://wiki.codesynthesis.com/Tree/Customization_guide) D +/R7 (http://www.codesynthesis.com/projects/xsd/documentation/cxx/tree/dbxml/) D +/R8 (http://wiki.codesynthesis.com/Tree/FAQ) D +/R9 (http://www.codesynthesis.com/projects/xsd/documentation/xsd.xhtml) D +/R10 (http://www.codesynthesis.com/mailman/listinfo/xsd-users) D +/R11 (http://www.codesynthesis.com/pipermail/xsd-users/) D +/R12 (http://en.wikipedia.org/wiki/Character_code) D +/TS { + tables E get /table E D + table aload pop /rdesc E D /cdesc E D /tdesc E D + tdesc aload pop /capalg E D /caption E D /rules E D /frame E D /nfoot E D + /nhead E D /ncol E D /nrow E D /border E D /twid E D /units E D /talign E D + /flow E D /clear E D /tclass E D pop pop + /w W D /eps 0.1 D /OU f D /PL 1 D + /FN EF 21 get D EZ 21 get Ey 21 get FS + 0 1 1{ + /pass E D + 0 1 nrow{ + /irow E D + /cells rdesc irow get 6 get D + 0 1 ncol{ + /icol E D + /cell cells icol get D + cell 0 ne{ + cell aload pop /ang E D /CB E D pop pop pop + /DV E D /bot E D /top E D /right E D /left E D /nowrap E D /valign E D + /dp E D /align E D /rspan E D /cspan E D /cclass E D /ctype E D /cmax E D + /cmin E D /proc E D + rspan 0 eq{/rspan nrow irow sub 1 add D}if + cspan 0 eq{/cspan ncol icol sub 1 add D}if + pass 0 eq cspan 1 eq and pass 1 eq cspan 1 gt and or{ + /W 1e5 D /LL W D /PH 1 D + ctype 1 eq{() BD}if + RC align NA + AT 4 eq{/CD t D /DC dp D /LN 0 D /M1 0 D /M2 0 D}{/CD f D}ie + 0 0 M /LM 0 D proc exec BN + AT 4 eq{ + LN array astore cell 15 3 -1 roll put + cdesc icol get dup dup 5 get M1 lt{5 M1 put}{5 get /M1 E D}ie + dup 6 get M2 lt{6 M2 put}{6 get /M2 E D}ie + /LM M1 M2 add D + }if + /CD f D + ang 0 ne{/LM CP E pop neg D}if + /thiswid LM left add right add eps add D + /oldmin 0 D /oldmax 0 D + 0 1 cspan 1 sub{ + icol add cdesc E get dup 2 get /oldmax E oldmax add D + 1 get /oldmin E oldmin add D + }for + thiswid oldmax ge{ + 0 1 cspan 1 sub{ + icol add cdesc E get dup 2 E 2 get oldmax 0 eq + {pop thiswid cspan div}{thiswid mul oldmax div}ie + put + }for + }if + nowrap 1 eq{ + thiswid oldmin ge{ + 0 1 cspan 1 sub{ + icol add cdesc E get dup 1 E 1 get oldmin 0 eq + {pop thiswid cspan div}{thiswid mul oldmin div}ie + put + }for + }if + }{ + /W 0 D /LL W D /PH 2 D + ctype 1 eq{() ES () BD}if + 0 0 M /LM 0 D RC proc exec BN + /thiswid LM left add right add eps add D + thiswid oldmin ge{ + 0 1 cspan 1 sub{ + icol add cdesc E get dup 1 E 1 get oldmin 0 eq + {pop thiswid cspan div}{thiswid mul oldmin div}ie + put + }for + }if + }ie + ctype 1 eq{() ES}if + }if + }if + }for + }for + }for + /tmin 0 D /tmax 0 D + 0 1 ncol{ + cdesc E get dup 1 get E 2 get 2 copy gt{pop dup}if + tmax add /tmax E D tmin add /tmin E D + }for + twid 0 lt{twid neg IW gt{IW neg}{twid}ie /twid E D}if + tdesc 0 twid neg tmin 2 copy lt{E}if pop put + tdesc 1 twid neg tmax 2 copy lt{E}if pop put + /W w D /LL W D /OU t D /PH 0 D /PL 0 D +} D +/PT { + /PL PL 1 add D + tables E get /table E D Tm 21 get Ts mul BE + PL 2 ge{save}if + /SL SL 1 add D /FN EF 21 get D EZ 21 get Ey 21 get FS + table aload pop /rdesc E D /cdesc E D /tdesc E D + tdesc aload pop /capalg E D /caption E D /rules E D /frame E D /nfoot E D + /nhead E D /ncol E D /nrow E D /border E D /twid E D /units E D /talign E D + /flow E D /clear E D /tclass E D /tmax E D /tmin E D + /w W D /xo XO D /mr MR D /ll LL D /lg LG D /ai AI D /bc BC D /nr NR D /ar AR D + /tr TR D /ui UI D /ph PH D /a0 A0 D /pf PF D /at AT D /av AV D /al AL D + /Le LE D /la La D + talign 0 lt{/talign AL 0 gt{AV AL get}{A0 2 le{A0}{0}ie}ie D}if + ph 1 eq ph 2 eq or{ + NL ph 1 eq{tmax}{tmin}ie dup XO add LM gt{/LM E XO add D}{pop}ie LM E + }{ + /PH 3 D /LE 1e5 D RC %ZF + border 0 gt{/border 1 D}if + /twidth 0 D /avail W xo sub D + twid 0 eq{0 1 ncol{cdesc E get dup 2 get E 3 get dup 0 gt{div neg dup twid lt + {/twid E D}{pop}ie}{pop pop}ie}for}if + /twid twid dup 0 lt{neg avail 2 copy gt{E}if pop}{avail mul}ie D + /OK t D 0 1 ncol{cdesc E get dup 1 get E 3 get twid mul gt{/OK f D}if}for + 0 1 ncol{ + cdesc E get dup 1 get /colmin E D dup 3 get /cwid E twid mul D dup + tmax avail le{2 get}if + tmin avail le tmax avail gt and{ + dup 2 get E 1 get dup 3 1 roll sub avail tmin sub mul tmax tmin sub div add + }if + tmin avail gt{1 get}if + 0 E colmin cwid lt OK and{pop cwid}if dup /twidth E twidth add D put + }for + /OU f D CP + tmin twid le{ + 0 1 ncol{cdesc E get dup 0 get twidth div twid mul 0 E put}for + /twidth twid D + }if + CP printcap CP E pop sub /caphig E D pop + 0 1 1{ + /pass E D + 0 1 nrow{ + /irow E D + /cells rdesc irow get 6 get D + 0 1 ncol{ + /icol E D + /cell cells icol get D + cell 0 ne{ + cell aload pop /ang E D /CB E D pop pop pop + /DV E D /bot E D /top E D /right E D /left E D /nowrap E D /valign E D + /dp E D /align E D /rspan E D /cspan E D /cclass E D /ctype E D /cmax E D + /cmin E D /proc E D + rspan 0 eq{/rspan nrow irow sub 1 add D}if + cspan 0 eq{/cspan ncol icol sub 1 add D}if + /W 0 D + 0 1 cspan 1 sub{icol add cdesc E get 0 get /W E W add D}for + pass 0 eq rspan 1 eq and pass 1 eq rspan 1 gt and or{ + ctype 1 eq{() BD}if + /W W left sub right sub D /XO 0 D /EO 0 D SI + /A0 align D RC align NA + AT 4 eq{ + /DC dp D /DO 0 D /ID 1 D + 0 1 DV length 1 sub{DV E get dup DO gt{/DO E D}{pop}ie}for + /Lo DO DV 0 get sub D /L1 Lo D + }if + 0 0 M /BP t D /Fl t D /MF 0 D /FB 0 D + proc exec T not{/CI 0 D}if BN 0 FB neg R MF 0 eq{/MF CS D}if + CP /thishig E neg bot add top add CI add D pop + ang 0 ne{/thishig LM bot add top add D}if + cell 16 MF put cell 17 Ya put cell 18 thishig put + valign 4 eq{ + /below thishig Ya sub D + rdesc irow get dup dup 4 get Ya lt + {4 Ya put}{4 get /Ya E D}ie + dup 5 get below lt{5 below put}{5 get /below E D}ie + /thishig Ya below add D + }if + ctype 1 eq{()ES}if + /oldhig 0 D + 0 1 rspan 1 sub{ + irow add rdesc E get 0 get /oldhig E oldhig add D + }for + thishig oldhig ge{ + 0 1 rspan 1 sub{ + irow add rdesc E get dup 0 E 0 get oldhig 0 eq + {pop thishig rspan div}{thishig mul oldhig div}ie + put + }for + }if + }if + }if + }for + }for + }for M RC %ZF + /thight 0 D /racc 0 D /maxh 0 D /brk 0 D /rbeg nhead nfoot add D + 0 1 nrow{ + rdesc E get dup 0 get dup /thight E thight add D + brk 0 eq{/racc E D}{/racc E racc add D}ie + racc maxh gt{/maxh racc D}if 2 get /brk E D + }for + ph 3 ge{thight caphig add E}if + ph 0 eq ph 4 eq or{ + /PH 4 D /LE Le D /OU Ou D /yoff 0 D /headsz 0 D + 0 1 nhead 1 sub{rdesc E get 0 get headsz add /headsz E D}for + /footsz 0 D + 0 1 nfoot 1 sub{rdesc E nhead add get 0 get footsz add /footsz E D}for + /ahig LE BO add MI add D /maxh maxh headsz add footsz add D + /thight thight headsz add footsz add D + tmin avail gt maxh ahig gt or + {/Sf avail tmin div dup ahig maxh div gt{pop ahig maxh div}if D /SA t D} + {/Sf 1 D}ie + tclass 1 eq thight LE 15 sub gt and + {/SA t D LE 15 sub thight div dup Sf lt{/Sf E D}{pop}ie}if + SA{Sf Sf scale /ll ll Sf div D /xo xo Sf div D /LE LE Sf div D + /mr mr Sf div D /BO BO Sf div D /ahig ahig Sf div D}if + nhead nfoot add getwid + LE CP E pop add capalg 0 eq{caphig sub}if + bT{f}{dup thight lt thight ahig lt and}ie + E headsz sub footsz sub rwid lt or{NP}if + capalg 0 eq{printcap -8 SP}if + CP /ycur E D pop + printhead + rbeg 1 nrow{/row E D row + getwid + ycur yoff add rwid sub footsz sub LE add 0 lt + {nfoot 0 gt{printfoot}if Tf NP /rbeg irow1 D + Ba{MI /MI MI SA{Sf div}if D MI SP /MI E D}if + CP /ycur E D pop /yoff 0 D printhead}if + irow1 printrow + }for + printfoot /row row 1 add D Tf + 0 ycur yoff add M + capalg 1 eq{/EO 0 D SI -3 SP printcap}if + Sf 1 lt{1 Sf div dup scale /ll ll Sf mul D /xo xo Sf mul D /LE LE Sf mul D + /mr mr Sf mul D /BO BO Sf mul D /SA f D}if + /EO 0 D + }if + }ie + /W w D /XO xo D /MR mr D /LL ll D /LG lg D /AI ai D /BC bc D /NR nr D /AR ar D + /TR tr D /UI ui D /PH ph D /A0 a0 D /PF pf D /AT at D /AV av D /AL al D + /La la D + /SL SL 1 sub NN D /CF 0 D /FN 0 D SZ SL get FR SL get FS Wf not{()F2}if + PL 2 ge{Ms E restore Ms or /Ms E D PH 1 eq PH 2 eq or + {/LM E D}if PH 3 ge{/CI 0 D NL 0 E neg R}if + }if + /PL PL 1 sub D /CI 0 D /BP f D /PO f D () Bm 21 get Ts mul BE BL %CF CS SF +} D +/printcap{ + capalg 0 ge{ + SA{/W w Sf div D} + {talign 1 eq{/XO xo ll twidth sub 2 div add D}if + talign 2 eq{/XO xo ll twidth sub add D}if + /W XO twidth add D + }ie /XO xo D /LL W XO sub MR sub D + /PA f D /Fl capalg 0 eq D + 1 NA BL caption exec BN OA /PA t D + }if +} D +/getwid{ + /irow1 E D + /irow2 irow1 D + /rwid 0 D + {rdesc irow2 get dup 0 get rwid add /rwid E D 2 get 0 eq + {exit}{/irow2 irow2 1 add D}ie + }loop +} D +/printrow{ + /xoff ll twidth PL 2 ge{Sf div}if sub talign mul 2 div D + /xleft xoff xo add D + /irow E D + /cells rdesc irow get 6 get D + 0 1 ncol{ + /icol E D + /cell cells icol get D + cell 0 ne{ + cell aload pop /ang E D /CB E D /cvsize E D /above E D /fontsz E D + /DV E D /bot E D /top E D /right E D /left E D /nowrap E D /valign E D + /dp E D /align E D /rspan E D /cspan E D /cclass E D /ctype E D /cmax E D + /cmin E D /proc E D + rspan 0 eq{/rspan nrow irow sub 1 add D}if + cspan 0 eq{/cspan ncol icol sub 1 add D}if + /width 0 D + 0 1 cspan 1 sub{icol add cdesc E get 0 get /width E width add D}for + /rhight rdesc irow get 0 get D + /hight rhight D + 1 1 rspan 1 sub{irow add rdesc E get 0 get /hight E hight add D}for + /W xo xoff add width add right sub D + ang 0 ne{/W xo xoff add hight add right sub D}if + /EO xo xoff add left add D SI + Cf{ + gsave CB VC xo xoff add ycur yoff add M + 0 hight neg RL width 0 RL 0 hight RL width neg 0 RL fill + grestore + }if + ctype 1 eq{() BD}if + /A0 align D RC + AT 4 eq{ + /DC dp D /ID 1 D /DO cdesc icol get 5 get D /Lo DO DV 0 get sub D /L1 Lo D + }if + ang 0 ne{ + gsave ang 90 eq + {xoff ycur add hight cvsize sub 2 div sub ycur hight sub xoff sub} + {xoff ycur sub width add hight cvsize sub 2 div add ycur xoff add}ie + translate ang rotate + }if + valign 3 le{0 ycur yoff add top sub + hight cvsize sub valign 1 sub mul 2 div sub M} + {0 ycur yoff add top sub above add rdesc irow get 4 get sub M}ie + /PA f D /BP t D /Fl t D + BL proc exec BN + ang 0 ne{grestore}if + /PA t D + ctype 1 eq{() ES}if + }if + /xoff xoff cdesc icol get 0 get add D + }for + /yoff yoff rhight sub D +} D +/printhead {0 1 nhead 1 sub{printrow}for} D +/printfoot {nhead 1 nhead nfoot add 1 sub{printrow}for} D +/Tf { + OU{rules 2 ge{/yoff 0 D + gsave 0 Sg + [0 1 nhead 1 sub{}for rbeg 1 row 1 sub{}for nhead 1 nhead nfoot add 1 sub{}for]{ + /irow E D + /xoff ll twidth PL 2 ge{Sf div}if sub talign mul 2 div D + /cells rdesc irow get 6 get D + 0 1 ncol{ + /icol E D + /cell cells icol get D + cell 0 ne{ + /rspan cell 6 get D + /cspan cell 5 get D + rspan 0 eq{/rspan nrow irow sub 1 add D}if + cspan 0 eq{/cspan ncol icol sub 1 add D}if + /width 0 D + 0 1 cspan 1 sub{icol add cdesc E get 0 get /width E width add D}for + /rhight rdesc irow get 0 get D + /hight rhight D + 1 1 rspan 1 sub{irow add rdesc E get 0 get /hight E hight add D}for + xo xoff add width add ycur yoff add M + 0 hight neg icol cspan add 1 sub ncol lt + {cdesc icol 1 add get 4 get dup rules 3 le{1 eq}{pop t}ie + {1 eq{0.8}{0.3}ie + LW RL CP stroke M}{pop R}ie}{R}ie + irow nhead nfoot add 1 sub ne nfoot 0 eq or + {irow rspan add 1 sub nrow lt + {rdesc irow rspan add get 3 get}{nfoot 0 eq{0}{1}ie}ie + dup rules 2 mod 0 eq{1 eq}{pop t}ie + {1 eq irow rspan add nhead eq or irow rspan add row eq nfoot 0 gt and or + {0.8}{0.3}ie LW width neg 0 RL CP stroke M}{pop}ie}if + }if + /xoff xoff cdesc icol get 0 get add D + }for + /yoff yoff rhight sub D + }forall + grestore + /Ms t D + }if + frame 1 gt{ + gsave + 1 LW 0 Sg + xleft ycur M CP BB + 0 yoff frame 5 eq frame 7 ge or{RL}{R}ie + twidth 0 frame 3 eq frame 4 eq or frame 8 ge or{RL}{R}ie CP BB + 0 yoff neg frame 6 ge{RL}{R}ie + twidth neg 0 frame 2 eq frame 4 eq or frame 8 ge or{RL}{R}ie + closepath stroke + grestore + /Ms t D + }if + }if +} D +/tables [[[0 0 0 0 0 -1 0 0 1 58 2 0 0 9 5 {()} -1] + [[0 0 0 0 0 0 0][0 0 0 0 0 0 0][0 0 0 0 0 0 0]] + [[0 0 0 0 0 0 [[{()1 Sl()WB(XML Schema type)} 0 0 1 0 1 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB(Alias in the )SM(xml_schema)ES( names)HY(pace)YH()} 0 0 1 0 1 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB(C++ type + )} 0 0 1 0 1 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(anyType and anySim)HY(ple)HY(Type)YH( types + )} 0 0 1 0 3 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +0 +0 +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(anyType)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(type)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()0 23 1 A(Section 2.5.2, "Mapping for )SM(anyType)ES(")23 0 TN TL()Ec /AF f D( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(anySim)HY(ple)HY(Type)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(simple_type)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()0 24 1 A(Section 2.5.3, "Mapping for )SM(anySim)HY(ple)HY(Type)YH()ES(")24 0 TN TL()Ec /AF f D( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(fixed-length inte)HY(gral)YH( types + )} 0 0 1 0 3 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +0 +0 +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(byte)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(byte)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(signed\240char)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(unsigned)HY(Byte)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(unsigned_byte)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(unsigned\240char)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(short)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(short_)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(short)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(unsigned)HY(Short)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(unsigned_short)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(unsigned\240short)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(int)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(int_)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(int)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(unsignedInt)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(unsigned_int)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(unsigned\240int)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(long)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(long_)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(long\240long)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(unsigned)HY(Long)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(unsigned_long)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(unsigned\240long\240long)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(arbi)HY(trary)YH(-length inte)HY(gral)YH( types + )} 0 0 1 0 3 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +0 +0 +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(integer)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(integer)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(long\240long)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(nonPos)HY(i)HY(tiveIn)HY(te)HY(ger)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(non_posi)HY(tive)YH(_integer)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(long\240long)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(nonNeg)HY(a)HY(tiveIn)HY(te)HY(ger)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(non_nega)HY(tive)YH(_integer)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(unsigned long\240long)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(posi)HY(tiveIn)HY(te)HY(ger)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(posi)HY(tive)YH(_integer)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(unsigned long\240long)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(nega)HY(tiveIn)HY(te)HY(ger)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(nega)HY(tive)YH(_integer)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(long\240long)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(boolean types + )} 0 0 1 0 3 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +0 +0 +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(boolean)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(boolean)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(bool)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(fixed-preci)HY(sion)YH( float)HY(ing)YH(-point types + )} 0 0 1 0 3 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +0 +0 +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(float)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(float_)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(float)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(double)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(double_)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(double)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(arbi)HY(trary)YH(-preci)HY(sion)YH( float)HY(ing)YH(-point types + )} 0 0 1 0 3 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +0 +0 +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(decimal)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(decimal)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(double)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(string types + )} 0 0 1 0 3 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +0 +0 +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(string)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(string)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB(type derived from )SM(std::basic_string)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(normal)HY(ized)HY(String)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(normal)HY(ized)YH(_string)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB(type derived from )SM(string)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(token)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(token)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB(type\240derived\240from\240)SM(normal)HY(ized)YH(_string)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(Name)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(name)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB(type derived from )SM(token)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(NMTOKEN)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(nmtoken)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB(type derived from )SM(token)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(NMTO)HY(KENS)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(nmto)HY(kens)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB(type derived from )SM(sequence<nmtoken>)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(NCName)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(ncname)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB(type derived from )SM(name)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(language)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(language)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB(type derived from )SM(token)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(qual)HY(i)HY(fied)YH( name + )} 0 0 1 0 3 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +0 +0 +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(QName)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(qname)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()0 25 1 A(Section 2.5.4, "Mapping for )SM(QName)ES(")25 0 TN TL()Ec /AF f D( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(ID/IDREF types + )} 0 0 1 0 3 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +0 +0 +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(ID)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(id)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB(type derived from )SM(ncname)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(IDREF)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(idref)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()0 26 1 A(Section 2.5.5, "Mapping for )SM(IDREF)ES(")26 0 TN TL()Ec /AF f D( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(IDREFS)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(idrefs)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB(type derived from )SM(sequence<idref>)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(URI types + )} 0 0 1 0 3 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +0 +0 +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(anyURI)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(uri)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB(type derived from )SM(std::basic_string)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(binary types + )} 0 0 1 0 3 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +0 +0 +]] +[0 0 1 0 0 0 [[{()1 Sl()WB()SM(base64Binary)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(base64_binary)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()0 27 1 A(Section 2.5.6, "Mapping for + )SM(base64Binary)ES( and )SM(hexBi)HY(nary)YH()ES(")27 0 TN TL()Ec /AF f D( + )} 0 0 0 0 1 2 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(hexBi)HY(nary)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(hex_binary)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +0 +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(date/time types + )} 0 0 1 0 3 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +0 +0 +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(date)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(date)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()0 29 1 A(Section 2.5.8, "Mapping for + )SM(date)ES(")29 0 TN TL()Ec /AF f D( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(date)HY(Time)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(date_time)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()0 30 1 A(Section 2.5.9, "Mapping for + )SM(date)HY(Time)YH()ES(")30 0 TN TL()Ec /AF f D( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(dura)HY(tion)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(dura)HY(tion)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()0 31 1 A(Section 2.5.10, "Mapping for + )SM(dura)HY(tion)YH()ES(")31 0 TN TL()Ec /AF f D( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(gDay)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(gday)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()0 32 1 A(Section 2.5.11, "Mapping for + )SM(gDay)ES(")32 0 TN TL()Ec /AF f D( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(gMonth)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(gmonth)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()0 33 1 A(Section 2.5.12, "Mapping for + )SM(gMonth)ES(")33 0 TN TL()Ec /AF f D( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(gMon)HY(th)HY(Day)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(gmonth_day)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()0 34 1 A(Section 2.5.13, "Mapping for + )SM(gMon)HY(th)HY(Day)YH()ES(")34 0 TN TL()Ec /AF f D( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(gYear)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(gyear)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()0 35 1 A(Section 2.5.14, "Mapping for + )SM(gYear)ES(")35 0 TN TL()Ec /AF f D( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(gYear)HY(Month)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(gyear_month)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()0 36 1 A(Section 2.5.15, "Mapping for + )SM(gYear)HY(Month)YH()ES(")36 0 TN TL()Ec /AF f D( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(time)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(time)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()0 37 1 A(Section 2.5.16, "Mapping for + )SM(time)ES(")37 0 TN TL()Ec /AF f D( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB(entity types + )} 0 0 1 0 3 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +0 +0 +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(ENTITY)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(entity)ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB(type derived from )SM(name)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 0 0 0 0 [[{()1 Sl()WB()SM(ENTI)HY(TIES)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()SM(enti)HY(ties)YH()ES()} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB(type derived from )SM(sequence<entity>)ES( + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +]] +[[0 0 0 0 0 -1 0 0 1 8 5 0 0 9 5 {()} -1] + [[0 0 0 0 0 0 0][0 0 0 0 0 0 0][0 0 0 0 0 0 0][0 0 0 0 0 0 0][0 0 0 0 0 0 0][0 0 0 0 0 0 0]] + [[0 0 0 0 0 0 [[{()1 Sl()WB()} 0 0 1 0 1 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB()} 0 0 1 0 1 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB(default)} 0 0 1 0 2 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +0 +[{()1 Sl()WB(fixed + )} 0 0 1 0 2 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +0 +]] +[0 0 1 0 0 0 [[{()1 Sl()WB(element)} 0 0 1 0 1 4 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB(not present)} 0 0 1 0 1 2 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB(optional)} 0 0 1 0 1 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB(required)} 0 0 1 0 1 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB(optional)} 0 0 1 0 1 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB(required + )} 0 0 1 0 1 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 1 0 0 0 [0 +0 +[{()1 Sl()WB(not present)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB(invalid instance)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB(not present)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB(invalid instance + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 1 0 0 0 [0 +[{()1 Sl()WB(empty)} 0 0 1 0 1 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB(default value is used)} 0 0 0 0 2 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +0 +[{()1 Sl()WB(fixed value is used + )} 0 0 0 0 2 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +0 +]] +[0 0 0 0 0 0 [0 +[{()1 Sl()WB(value)} 0 0 1 0 1 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB(value is used)} 0 0 0 0 2 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +0 +[{()1 Sl()WB(value is used provided it's the same as fixed + )} 0 0 0 0 2 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +0 +]] +[0 0 1 0 0 0 [[{()1 Sl()WB(attribute)} 0 0 1 0 1 4 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB(not present)} 0 0 1 0 1 2 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB(optional)} 0 0 1 0 1 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB(required)} 0 0 1 0 1 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB(optional)} 0 0 1 0 1 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB(required + )} 0 0 1 0 1 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 1 0 0 0 [0 +0 +[{()1 Sl()WB(default value is used)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB(invalid schema)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB(fixed value is used)} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB(invalid instance + )} 0 0 0 0 1 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +]] +[0 0 1 0 0 0 [0 +[{()1 Sl()WB(empty)} 0 0 1 0 1 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB(empty value is used)} 0 0 0 0 2 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +0 +[{()1 Sl()WB(empty value is used provided it's the same as fixed + )} 0 0 0 0 2 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +0 +]] +[0 0 0 0 0 0 [0 +[{()1 Sl()WB(value)} 0 0 1 0 1 1 1 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +[{()1 Sl()WB(value is used)} 0 0 0 0 2 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +0 +[{()1 Sl()WB(value is used provided it's the same as fixed + )} 0 0 0 0 2 1 0 (.) 2 0 4 4 2 6 0 0 0 0 Db 0 ] +0 +]] +]] +] D +0 1 1{TS}for RC ZF +/Ba f D /BO 0 D Bs +/UR (/home/boris/work/xsd/xsd/documentation/cxx/tree/manual/index.xhtml) D +/Ti (C++/Tree Mapping User Manual) D +/Au () D +/Df f D +/ME [(2.3.0)] D +Pt +/BO 0 D TC /Ba f D Bs /AU f D /UR () D RC ZF + tH WB +ND 1 gt{Ts 3 mul Np 0()0 C()BD(C++/Tree Mapping User Manual)ES()0 1 TN()EA()BN}if +1 NH le{94(1\240\240)1 C(Preface)WB 3 Sn()94 1 TN()EA()BN}if +2 NH le{95(1.1\240\240)2 C(About)WB 4 Sn( This Docu)HY(ment)YH()95 1 TN()EA()BN}if +2 NH le{96(1.2\240\240)2 C(More)WB 5 Sn( Infor)HY(ma)HY(tion)YH()96 1 TN()EA()BN}if +1 NH le{97(2\240\240)1 C(1)WB 6 Sn( Intro)HY(duc)HY(tion)YH()97 1 TN()EA()BN}if +1 NH le{98(3\240\240)1 C(2)WB 7 Sn( C++/Tree Mapping)98 1 TN()EA()BN}if +2 NH le{99(3.1\240\240)2 C(2.1)WB 8 Sn( Prelim)HY(i)HY(nary)YH( Infor)HY(ma)HY(tion)YH()99 1 TN()EA()BN}if +3 NH le{100(3.1.1\240\240)3 C(2.1.1)WB 9 Sn( Iden)HY(ti)HY(fiers)YH()100 1 TN()EA()BN}if +3 NH le{101(3.1.2\240\240)3 C(2.1.2)WB 10 Sn( Char)HY(ac)HY(ter)YH( Type and Encod)HY(ing)YH()101 1 TN()EA()BN}if +3 NH le{102(3.1.3\240\240)3 C(2.1.3)WB 11 Sn( XML Schema Names)HY(pace)YH()102 1 TN()EA()BN}if +3 NH le{103(3.1.4\240\240)3 C(2.1.4)WB 12 Sn( Anony)HY(mous)YH( Types)103 1 TN()EA()BN}if +2 NH le{104(3.2\240\240)2 C(2.2)WB 13 Sn( Error Handling)104 1 TN()EA()BN}if +3 NH le{105(3.2.1\240\240)3 C(2.2.1)WB 14 Sn( )SM(xml_schema::dupli)HY(cate)YH(_id)ES()105 1 TN()EA()BN}if +2 NH le{106(3.3\240\240)2 C(2.3)WB 15 Sn( Mapping for )SM(import)ES( and )SM(include)ES()106 1 TN()EA()BN}if +3 NH le{107(3.3.1\240\240)3 C(2.3.1)WB 16 Sn( Import)107 1 TN()EA()BN}if +3 NH le{108(3.3.2\240\240)3 C(2.3.2)WB 17 Sn( Inclu)HY(sion)YH( with Target Names)HY(pace)YH()108 1 TN()EA()BN}if +3 NH le{109(3.3.3\240\240)3 C(2.3.3)WB 18 Sn( Inclu)HY(sion)YH( without Target Names)HY(pace)YH()109 1 TN()EA()BN}if +2 NH le{110(3.4\240\240)2 C(2.4)WB 19 Sn( Mapping for Names)HY(paces)YH()110 1 TN()EA()BN}if +2 NH le{111(3.5\240\240)2 C(2.5)WB 20 Sn( Mapping for Built-in Data Types)111 1 TN()EA()BN}if +3 NH le{112(3.5.1\240\240)3 C(2.5.1)WB 22 Sn( Inher)HY(i)HY(tance)YH( from Built-in Data Types)112 1 TN()EA()BN}if +3 NH le{113(3.5.2\240\240)3 C(2.5.2)WB 23 Sn( Mapping for )SM(anyType)ES()113 1 TN()EA()BN}if +3 NH le{114(3.5.3\240\240)3 C(2.5.3)WB 24 Sn( Mapping for )SM(anySim)HY(ple)HY(Type)YH()ES()114 1 TN()EA()BN}if +3 NH le{115(3.5.4\240\240)3 C(2.5.4)WB 25 Sn( Mapping for )SM(QName)ES()115 1 TN()EA()BN}if +3 NH le{116(3.5.5\240\240)3 C(2.5.5)WB 26 Sn( Mapping for )SM(IDREF)ES()116 1 TN()EA()BN}if +3 NH le{117(3.5.6\240\240)3 C(2.5.6)WB 27 Sn( Mapping for )SM(base64Binary)ES( and + )SM(hexBi)HY(nary)YH()ES()117 1 TN()EA()BN}if +2 NH le{118(3.6\240\240)2 C(2.5.7)WB 28 Sn( Time Zone Repre)HY(sen)HY(ta)HY(tion)YH()118 1 TN()EA()BN}if +2 NH le{119(3.7\240\240)2 C(2.5.8)WB 29 Sn( Mapping for )SM(date)ES()119 1 TN()EA()BN}if +2 NH le{120(3.8\240\240)2 C(2.5.9)WB 30 Sn( Mapping for )SM(date)HY(Time)YH()ES()120 1 TN()EA()BN}if +2 NH le{121(3.9\240\240)2 C(2.5.10)WB 31 Sn( Mapping for )SM(dura)HY(tion)YH()ES()121 1 TN()EA()BN}if +2 NH le{122(3.10\240\240)2 C(2.5.11)WB 32 Sn( Mapping for )SM(gDay)ES()122 1 TN()EA()BN}if +2 NH le{123(3.11\240\240)2 C(2.5.12)WB 33 Sn( Mapping for )SM(gMonth)ES()123 1 TN()EA()BN}if +2 NH le{124(3.12\240\240)2 C(2.5.13)WB 34 Sn( Mapping for )SM(gMon)HY(th)HY(Day)YH()ES()124 1 TN()EA()BN}if +2 NH le{125(3.13\240\240)2 C(2.5.14)WB 35 Sn( Mapping for )SM(gYear)ES()125 1 TN()EA()BN}if +2 NH le{126(3.14\240\240)2 C(2.5.15)WB 36 Sn( Mapping for )SM(gYear)HY(Month)YH()ES()126 1 TN()EA()BN}if +2 NH le{127(3.15\240\240)2 C(2.5.16)WB 37 Sn( Mapping for )SM(time)ES()127 1 TN()EA()BN}if +2 NH le{128(3.16\240\240)2 C(2.6)WB 38 Sn( Mapping for Simple Types)128 1 TN()EA()BN}if +3 NH le{129(3.16.1\240\240)3 C(2.6.1)WB 39 Sn( Mapping for Deriva)HY(tion)YH( by Restric)HY(tion)YH()129 1 TN()EA()BN}if +3 NH le{130(3.16.2\240\240)3 C(2.6.2)WB 40 Sn( Mapping for Enumer)HY(a)HY(tions)YH()130 1 TN()EA()BN}if +3 NH le{131(3.16.3\240\240)3 C(2.6.3)WB 41 Sn( Mapping for Deriva)HY(tion)YH( by List)131 1 TN()EA()BN}if +3 NH le{132(3.16.4\240\240)3 C(2.6.4)WB 42 Sn( Mapping for Deriva)HY(tion)YH( by Union)132 1 TN()EA()BN}if +2 NH le{133(3.17\240\240)2 C(2.7)WB 43 Sn( Mapping for Complex Types)133 1 TN()EA()BN}if +3 NH le{134(3.17.1\240\240)3 C(2.7.1)WB 44 Sn( Mapping for Deriva)HY(tion)YH( by Exten)HY(sion)YH()134 1 TN()EA()BN}if +3 NH le{135(3.17.2\240\240)3 C(2.7.2)WB 45 Sn( Mapping for Deriva)HY(tion)YH( by Restric)HY(tion)YH()135 1 TN()EA()BN}if +2 NH le{136(3.18\240\240)2 C(2.8)WB 46 Sn( Mapping for Local Elements and Attributes)136 1 TN()EA()BN}if +3 NH le{137(3.18.1\240\240)3 C(2.8.1)WB 47 Sn( Mapping for Members with the One Cardi)HY(nal)HY(ity)YH( Class)137 1 TN()EA()BN}if +3 NH le{138(3.18.2\240\240)3 C(2.8.2)WB 48 Sn( Mapping for Members with the Optional Cardi)HY(nal)HY(ity)YH( Class)138 1 TN()EA()BN}if +3 NH le{139(3.18.3\240\240)3 C(2.8.3)WB 49 Sn( Mapping for Members with the Sequence Cardi)HY(nal)HY(ity)YH( Class)139 1 TN()EA()BN}if +2 NH le{140(3.19\240\240)2 C(2.9)WB 50 Sn( Mapping for Global Elements)140 1 TN()EA()BN}if +3 NH le{141(3.19.1\240\240)3 C(2.9.1)WB 51 Sn( Element Types)141 1 TN()EA()BN}if +3 NH le{142(3.19.2\240\240)3 C(2.9.2)WB 52 Sn( Element Map)142 1 TN()EA()BN}if +2 NH le{143(3.20\240\240)2 C(2.10)WB 53 Sn( Mapping for Global Attributes)143 1 TN()EA()BN}if +2 NH le{144(3.21\240\240)2 C(2.11)WB 54 Sn( Mapping for )SM(xsi:type)ES( and Substi)HY(tu)HY(tion)YH( + Groups)144 1 TN()EA()BN}if +2 NH le{145(3.22\240\240)2 C(2.12)WB 55 Sn( Mapping for )SM(any)ES( and )SM(anyAt)HY(tribute)YH()ES()145 1 TN()EA()BN}if +3 NH le{146(3.22.1\240\240)3 C(2.12.1)WB 56 Sn( Mapping for )SM(any)ES( with the One Cardi)HY(nal)HY(ity)YH( Class)146 1 TN()EA()BN}if +3 NH le{147(3.22.2\240\240)3 C(2.12.2)WB 57 Sn( Mapping for )SM(any)ES( with the Optional Cardi)HY(nal)HY(ity)YH( Class)147 1 TN()EA()BN}if +3 NH le{148(3.22.3\240\240)3 C(2.12.3)WB 58 Sn( Mapping for )SM(any)ES( with the Sequence Cardi)HY(nal)HY(ity)YH( Class)148 1 TN()EA()BN}if +3 NH le{149(3.22.4\240\240)3 C(2.12.4)WB 59 Sn( Mapping for )SM(anyAt)HY(tribute)YH()ES()149 1 TN()EA()BN}if +2 NH le{150(3.23\240\240)2 C(2.13)WB 60 Sn( Mapping for Mixed Content Models)150 1 TN()EA()BN}if +1 NH le{151(4\240\240)1 C(3)WB 61 Sn( Parsing)151 1 TN()EA()BN}if +2 NH le{152(4.1\240\240)2 C(3.1)WB 62 Sn( Initial)HY(iz)HY(ing)YH( the Xerces-C++ Runtime)152 1 TN()EA()BN}if +2 NH le{153(4.2\240\240)2 C(3.2)WB 63 Sn( Flags and Prop)HY(er)HY(ties)YH()153 1 TN()EA()BN}if +2 NH le{154(4.3\240\240)2 C(3.3)WB 64 Sn( Error Handling)154 1 TN()EA()BN}if +3 NH le{155(4.3.1\240\240)3 C(3.3.1)WB 65 Sn( )SM(xml_schema::parsing)ES()155 1 TN()EA()BN}if +3 NH le{156(4.3.2\240\240)3 C(3.3.2)WB 66 Sn( )SM(xml_schema::expected_element)ES()156 1 TN()EA()BN}if +3 NH le{157(4.3.3\240\240)3 C(3.3.3)WB 67 Sn( )SM(xml_schema::unex)HY(pected)YH(_element)ES()157 1 TN()EA()BN}if +3 NH le{158(4.3.4\240\240)3 C(3.3.4)WB 68 Sn( )SM(xml_schema::expected_attribute)ES()158 1 TN()EA()BN}if +3 NH le{159(4.3.5\240\240)3 C(3.3.5)WB 69 Sn( )SM(xml_schema::unex)HY(pected)YH(_enumer)HY(a)HY(tor)YH()ES()159 1 TN()EA()BN}if +3 NH le{160(4.3.6\240\240)3 C(3.3.6)WB 70 Sn( )SM(xml_schema::expected_text_content)ES()160 1 TN()EA()BN}if +3 NH le{161(4.3.7\240\240)3 C(3.3.7)WB 71 Sn( )SM(xml_schema::no_type_info)ES()161 1 TN()EA()BN}if +3 NH le{162(4.3.8\240\240)3 C(3.3.8)WB 72 Sn( )SM(xml_schema::not_derived)ES()162 1 TN()EA()BN}if +3 NH le{163(4.3.9\240\240)3 C(3.3.9)WB 73 Sn( )SM(xml_schema::no_prefix_mapping)ES()163 1 TN()EA()BN}if +2 NH le{164(4.4\240\240)2 C(3.4)WB 74 Sn( Reading from a Local File or URI)164 1 TN()EA()BN}if +2 NH le{165(4.5\240\240)2 C(3.5)WB 75 Sn( Reading from )SM(std::istream)ES()165 1 TN()EA()BN}if +2 NH le{166(4.6\240\240)2 C(3.6)WB 76 Sn( Reading from )SM(xercesc::Input)HY(Source)YH()ES()166 1 TN()EA()BN}if +2 NH le{167(4.7\240\240)2 C(3.7)WB 77 Sn( Reading from DOM)167 1 TN()EA()BN}if +1 NH le{168(5\240\240)1 C(4)WB 78 Sn( Seri)HY(al)HY(iza)HY(tion)YH()168 1 TN()EA()BN}if +2 NH le{169(5.1\240\240)2 C(4.1)WB 79 Sn( Initial)HY(iz)HY(ing)YH( the Xerces-C++ Runtime)169 1 TN()EA()BN}if +2 NH le{170(5.2\240\240)2 C(4.2)WB 80 Sn( Names)HY(pace)YH( Infomap and Char)HY(ac)HY(ter)YH( Encod)HY(ing)YH()170 1 TN()EA()BN}if +2 NH le{171(5.3\240\240)2 C(4.3)WB 81 Sn( Flags)171 1 TN()EA()BN}if +2 NH le{172(5.4\240\240)2 C(4.4)WB 82 Sn( Error Handling)172 1 TN()EA()BN}if +3 NH le{173(5.4.1\240\240)3 C(4.4.1)WB 83 Sn( )SM(xml_schema::seri)HY(al)HY(iza)HY(tion)YH()ES()173 1 TN()EA()BN}if +3 NH le{174(5.4.2\240\240)3 C(4.4.2)WB 84 Sn( )SM(xml_schema::unex)HY(pected)YH(_element)ES()174 1 TN()EA()BN}if +3 NH le{175(5.4.3\240\240)3 C(4.4.3)WB 85 Sn( )SM(xml_schema::no_type_info)ES()175 1 TN()EA()BN}if +2 NH le{176(5.5\240\240)2 C(4.5)WB 86 Sn( Seri)HY(al)HY(iz)HY(ing)YH( to )SM(std::ostream)ES()176 1 TN()EA()BN}if +2 NH le{177(5.6\240\240)2 C(4.6)WB 87 Sn( Seri)HY(al)HY(iz)HY(ing)YH( to )SM(xercesc::XMLFor)HY(mat)HY(Tar)HY(get)YH()ES()177 1 TN()EA()BN}if +2 NH le{178(5.7\240\240)2 C(4.7)WB 88 Sn( Seri)HY(al)HY(iz)HY(ing)YH( to DOM)178 1 TN()EA()BN}if +1 NH le{179(6\240\240)1 C(5)WB 89 Sn( Addi)HY(tional)YH( Func)HY(tion)HY(al)HY(ity)YH()179 1 TN()EA()BN}if +2 NH le{180(6.1\240\240)2 C(5.1)WB 90 Sn( DOM Asso)HY(ci)HY(a)HY(tion)YH()180 1 TN()EA()BN}if +2 NH le{181(6.2\240\240)2 C(5.2)WB 91 Sn( Binary Seri)HY(al)HY(iza)HY(tion)YH()181 1 TN()EA()BN}if +1 NH le{182(7\240\240)1 C(Appendix)WB 92 Sn( A \236 Default and Fixed Values)182 1 TN()EA()BN}if +/OU t D /Cb Db D NP Ep ET +/Cb Db D /Ct [16#00 16#00 16#00] D /Cl [16#00 16#00 16#00] D /CL -1 D Ct Sc + +/Ba f D /BO 0 D Bs +/UR (/home/boris/work/xsd/xsd/documentation/cxx/tree/manual/index.xhtml) D +/Ti (C++/Tree Mapping User Manual) D +/Au () D +/Df f D +/ME [(2.3.0)] D + +NP RC ZF +()1 Sl()WB 0 Sn( + +)BR()WB 1 Sn( )BR()WB 2 Sn( + + + )0 1 0 H(Preface)WB 94 Sn()WB 3 Sn()EA()EH( + + )0 2 1 H(About)WB 95 Sn()WB 4 Sn( This Docu)HY(ment)YH()EA()EH( + + )0 P(This docu)HY(ment)YH( describes the mapping of W3C XML Schema + to the C++ program)HY(ming)YH( language as imple)HY(mented)YH( by + )R1 2 A(CodeSyn)HY(the)HY(sis)YH( + XSD)EA( - an XML Schema to C++ data binding compiler. The mapping + repre)HY(sents)YH( infor)HY(ma)HY(tion)YH( stored in XML instance docu)HY(ments)YH( as a + stat)HY(i)HY(cally)YH(-typed, tree-like in-memory data struc)HY(ture)YH( and is + called C++/Tree. + )EP( + + )0 P(Revi)HY(sion)YH( 2.3.0)BR( + This revi)HY(sion)YH( of the manual describes the C++/Tree + mapping as imple)HY(mented)YH( by CodeSyn)HY(the)HY(sis)YH( XSD version 3.3.0. + )EP( + + )0 P(This docu)HY(ment)YH( is avail)HY(able)YH( in the follow)HY(ing)YH( formats: + )R2 2 A(XHTML)EA(, + )R3 2 A(PDF)EA(, and + )R4 2 A(PostScript)EA(.)EP( + + )0 2 2 H(More)WB 96 Sn()WB 5 Sn( Infor)HY(ma)HY(tion)YH()EA()EH( + + )0 P(Beyond this manual, you may also find the follow)HY(ing)YH( sources of + infor)HY(ma)HY(tion)YH( useful:)EP( + + )UL( )-1 LI()R5 2 A(C++/Tree + Mapping Getting Started Guide)EA( + + )-1 LI()R6 2 A(C++/Tree + Mapping Customiza)HY(tion)YH( Guide)EA( + + )-1 LI()R7 2 A(C++/Tree + Mapping and Berke)HY(ley)YH( DB XML Inte)HY(gra)HY(tion)YH( Guide)EA( + + )-1 LI()R8 2 A(C++/Tree + Mapping Frequently Asked Ques)HY(tions)YH( \201FAQ\202)EA( + + )-1 LI()R9 2 A(XSD + Compiler Command Line Manual)EA( + + )-1 LI(The )SM(exam)HY(ples)YH(/cxx/tree/)ES( direc)HY(tory)YH( in the XSD + distri)HY(bu)HY(tion)YH( contains a collec)HY(tion)YH( of exam)HY(ples)YH( and a README + file with an overview of each example. + + )-1 LI(The )SM(README)ES( file in the XSD distri)HY(bu)HY(tion)YH( explains + how to compile the exam)HY(ples)YH( on various plat)HY(forms)YH(. + + )-1 LI(The )R10 2 A(xsd-users)EA( + mailing list is a place to ask ques)HY(tions)YH(. Further)HY(more)YH( the + )R11 2 A(archives)EA( + may already have answers to some of your ques)HY(tions)YH(. + + )LU( + + + )0 1 3 H(1)WB 97 Sn()WB 6 Sn( Intro)HY(duc)HY(tion)YH()EA()EH( + + )0 P(C++/Tree is a W3C XML Schema to C++ mapping that repre)HY(sents)YH( the + data stored in XML as a stat)HY(i)HY(cally)YH(-typed, vocab)HY(u)HY(lary)YH(-specific + object model. Based on a formal descrip)HY(tion)YH( of an XML vocab)HY(u)HY(lary)YH( + \201schema\202, the C++/Tree mapping produces a tree-like data struc)HY(ture)YH( + suit)HY(able)YH( for in-memory process)HY(ing)YH( as well as XML parsing and + seri)HY(al)HY(iza)HY(tion)YH( code.)EP( + + )0 P(A typical appli)HY(ca)HY(tion)YH( that processes XML docu)HY(ments)YH( usually + performs the follow)HY(ing)YH( three steps: it first reads \201parses\202 an XML + instance docu)HY(ment)YH( to an object model, it then performs + some useful compu)HY(ta)HY(tions)YH( on that model which may involve + modi)HY(fi)HY(ca)HY(tion)YH( of the model, and finally it may write \201seri)HY(al)HY(ize)YH(\202 + the modi)HY(fied)YH( object model back to XML. + )EP( + + )0 P(The C++/Tree mapping consists of C++ types that repre)HY(sent)YH( the + given vocab)HY(u)HY(lary)YH( \201)0 7 1 A(Chapter 2, "C++/Tree Mapping")7 0 TN TL()Ec /AF f D(\202, + a set of parsing func)HY(tions)YH( that convert XML docu)HY(ments)YH( to + a tree-like in-memory data struc)HY(ture)YH( \201)0 61 1 A(Chapter 3, + "Parsing")61 0 TN TL()Ec /AF f D(\202, and a set of seri)HY(al)HY(iza)HY(tion)YH( func)HY(tions)YH( that convert + the object model back to XML \201)0 78 1 A(Chapter 4, + "Seri)HY(al)HY(iza)HY(tion)YH(")78 0 TN TL()Ec /AF f D(\202. Further)HY(more)YH(, the mapping provides a number + of addi)HY(tional)YH( features, such as DOM asso)HY(ci)HY(a)HY(tion)YH( and binary + seri)HY(al)HY(iza)HY(tion)YH(, that can be useful in some appli)HY(ca)HY(tions)YH( + \201)0 89 1 A(Chapter 5, "Addi)HY(tional)YH( Func)HY(tion)HY(al)HY(ity)YH(")89 0 TN TL()Ec /AF f D(\202. + )EP( + + + + + + )0 1 4 H(2)WB 98 Sn()WB 7 Sn( C++/Tree Mapping)EA()EH( + + )0 2 5 H(2.1)WB 99 Sn()WB 8 Sn( Prelim)HY(i)HY(nary)YH( Infor)HY(ma)HY(tion)YH()EA()EH( + + )0 3 6 H(2.1.1)WB 100 Sn()WB 9 Sn( Iden)HY(ti)HY(fiers)YH()EA()EH( + + )0 P(XML Schema names may happen to be reserved C++ keywords or contain + char)HY(ac)HY(ters)YH( that are illegal in C++ iden)HY(ti)HY(fiers)YH(. To avoid C++ compi)HY(la)HY(tion)YH( + prob)HY(lems)YH(, such names are changed \201escaped\202 when mapped to C++. If an + XML Schema name is a C++ keyword, the "_" suffix is added to it. All + char)HY(ac)HY(ter)YH( of an XML Schema name that are not allowed in C++ iden)HY(ti)HY(fiers)YH( + are replaced with "_". + )EP( + + )0 P(For example, XML Schema name )SM(try)ES( will be mapped to + C++ iden)HY(ti)HY(fier)YH( )SM(try_)ES(. Simi)HY(larly)YH(, XML Schema name + )SM(strange.na-me)ES( will be mapped to C++ iden)HY(ti)HY(fier)YH( + )SM(strange_na_me)ES(. + )EP( + + )0 P(Further)HY(more)YH(, conflicts between type names and func)HY(tion)YH( names in the + same scope are resolved using name escap)HY(ing)YH(. Such conflicts include + both a global element \201which is mapped to a set of parsing and/or + seri)HY(al)HY(iza)HY(tion)YH( func)HY(tions)YH( or element types, see )0 50 1 A(Section + 2.9, "Mapping for Global Elements")50 0 TN TL()Ec /AF f D(\202 and a global type sharing the + same name as well as a local element or attribute inside a type having + the same name as the type itself.)EP( + + )0 P(For example, if we had a global type )SM(catalog)ES( + and a global element with the same name then the type would be + mapped to a C++ class with name )SM(catalog)ES( while the + parsing func)HY(tions)YH( corre)HY(spond)HY(ing)YH( to the global element would have + their names escaped as )SM(catalog_)ES(. + )EP( + + )0 P(By default the mapping uses the so-called K&R \201Kernighan and + Ritchie\202 iden)HY(ti)HY(fier)YH( naming conven)HY(tion)YH( which is also used through)HY(out)YH( + this manual. In this conven)HY(tion)YH( both type and func)HY(tion)YH( names are in + lower case and words are sepa)HY(rated)YH( by under)HY(scores)YH(. If your appli)HY(ca)HY(tion)YH( + code or schemas use a differ)HY(ent)YH( nota)HY(tion)YH(, you may want to change the + naming conven)HY(tion)YH( used by the mapping for consis)HY(tency)YH(. + The compiler supports a set of widely-used naming conven)HY(tions)YH( + that you can select with the )SM(--type-naming)ES( and + )SM(--func)HY(tion)YH(-naming)ES( options. You can also further + refine one of the prede)HY(fined)YH( conven)HY(tions)YH( or create a completely + custom naming scheme by using the )SM(--*-regex)ES( options. + For more detailed infor)HY(ma)HY(tion)YH( on these options refer to the NAMING + CONVEN)HY(TION)YH( section in the )R9 2 A(XSD + Compiler Command Line Manual)EA(.)EP( + + )0 3 7 H(2.1.2)WB 101 Sn()WB 10 Sn( Char)HY(ac)HY(ter)YH( Type and Encod)HY(ing)YH()EA()EH( + + )0 P(The code that imple)HY(ments)YH( the mapping, depend)HY(ing)YH( on the + )SM(--char-type)ES( option, is gener)HY(ated)YH( using either + )SM(char)ES( or )SM(wchar_t)ES( as the char)HY(ac)HY(ter)YH( + type. In this docu)HY(ment)YH( code samples use symbol )SM(C)ES( + to refer to the char)HY(ac)HY(ter)YH( type you have selected when trans)HY(lat)HY(ing)YH( + your schemas, for example )SM(std::basic_string<C>)ES(. + )EP( + + )0 P(Another aspect of the mapping that depends on the char)HY(ac)HY(ter)YH( type + is char)HY(ac)HY(ter)YH( encod)HY(ing)YH(. For the )SM(char)ES( char)HY(ac)HY(ter)YH( type + the default encod)HY(ing)YH( is UTF-8. Other supported encod)HY(ings)YH( are + ISO-8859-1, Xerces-C++ Local Code Page \201LPC\202, as well as + custom encod)HY(ings)YH( and can be selected with the + )SM(--char-encod)HY(ing)YH()ES( command line option.)EP( + + )0 P(For the )SM(wchar_t)ES( char)HY(ac)HY(ter)YH( type the encod)HY(ing)YH( is + auto)HY(mat)HY(i)HY(cally)YH( selected between UTF-16 and UTF-32/UCS-4 depend)HY(ing)YH( + on the size of the )SM(wchar_t)ES( type. On some plat)HY(forms)YH( + \201for example, Windows with Visual C++ and AIX with IBM XL C++\202 + )SM(wchar_t)ES( is 2 bytes long. For these plat)HY(forms)YH( the + encod)HY(ing)YH( is UTF-16. On other plat)HY(forms)YH( )SM(wchar_t)ES( is 4 bytes + long and UTF-32/UCS-4 is used.)EP( + + )0 3 8 H(2.1.3)WB 102 Sn()WB 11 Sn( XML Schema Names)HY(pace)YH()EA()EH( + + )0 P(The mapping relies on some prede)HY(fined)YH( types, classes, and func)HY(tions)YH( + that are logi)HY(cally)YH( defined in the XML Schema names)HY(pace)YH( reserved for + the XML Schema language \201)SM(http://www.w3.org/2001/XMLSchema)ES(\202. + By default, this names)HY(pace)YH( is mapped to C++ names)HY(pace)YH( + )SM(xml_schema)ES(. It is auto)HY(mat)HY(i)HY(cally)YH( acces)HY(si)HY(ble)YH( + from a C++ compi)HY(la)HY(tion)YH( unit that includes a header file gener)HY(ated)YH( + from an XML Schema defi)HY(ni)HY(tion)YH(. + )EP( + + )0 P(Note that, if desired, the default mapping of this names)HY(pace)YH( can be + changed as described in )0 19 1 A(Section 2.4, "Mapping for + Names)HY(paces)YH(")19 0 TN TL()Ec /AF f D(. + )EP( + + + )0 3 9 H(2.1.4)WB 103 Sn()WB 12 Sn( Anony)HY(mous)YH( Types)EA()EH( + + )0 P(For the purpose of code gener)HY(a)HY(tion)YH(, anony)HY(mous)YH( types defined in + XML Schema are auto)HY(mat)HY(i)HY(cally)YH( assigned names that are derived + from enclos)HY(ing)YH( attributes and elements. Other)HY(wise)YH(, such types + follows stan)HY(dard)YH( mapping rules for simple and complex type + defi)HY(ni)HY(tions)YH( \201see )0 38 1 A(Section 2.6, "Mapping for Simple Types")38 0 TN TL()Ec /AF f D( + and )0 43 1 A(Section 2.7, "Mapping for Complex Types")43 0 TN TL()Ec /AF f D(\202. + For example, in the follow)HY(ing)YH( schema frag)HY(ment)YH(: + )EP( + + ) 5 23 PR(<element name="object"> + <complexType> + ... + </complexType> +</element>)RP( + + )0 P(The anony)HY(mous)YH( type defined inside element )SM(object)ES( will + be given name )SM(object)ES(. The compiler has a number of + options that control the process of anony)HY(mous)YH( type naming. For more + infor)HY(ma)HY(tion)YH( refer to the )R9 2 A(XSD + Compiler Command Line Manual)EA(.)EP( + + + )0 2 10 H(2.2)WB 104 Sn()WB 13 Sn( Error Handling)EA()EH( + + )0 P(The mapping uses the C++ excep)HY(tion)YH( handling mech)HY(a)HY(nism)YH( as a primary way + of report)HY(ing)YH( error condi)HY(tions)YH(. All excep)HY(tions)YH( that are spec)HY(i)HY(fied)YH( in + this mapping derive from )SM(xml_schema::excep)HY(tion)YH()ES( which + itself is derived from )SM(std::excep)HY(tion)YH()ES(: + )EP( + + ) 14 60 PR(struct exception: virtual std::exception +{ + friend + std::basic_ostream<C>& + operator<< \201std::basic_ostream<C>& os, const exception& e\202 + { + e.print \201os\202; + return os; + } + +protected: + virtual void + print \201std::basic_ostream<C>&\202 const = 0; +};)RP( + + )0 P(The excep)HY(tion)YH( hier)HY(ar)HY(chy)YH( supports "virtual" )SM(oper)HY(a)HY(tor)YH(<<)ES( + which allows you to obtain diag)HY(nos)HY(tics)YH( corre)HY(spond)HY(ing)YH( to the thrown + excep)HY(tion)YH( using the base excep)HY(tion)YH( inter)HY(face)YH(. For example:)EP( + + ) 8 38 PR(try +{ + ... +} +catch \201const xml_schema::exception& e\202 +{ + cerr << e << endl; +})RP( + + )0 P(The follow)HY(ing)YH( sub-sections describe excep)HY(tions)YH( thrown by the + types that consti)HY(tute)YH( the object model. + )0 64 1 A(Section 3.3, "Error Handling")64 0 TN TL()Ec /AF f D( of + )0 61 1 A(Chapter 3, "Parsing")61 0 TN TL()Ec /AF f D( describes excep)HY(tions)YH( + and error handling mech)HY(a)HY(nisms)YH( specific to the parsing func)HY(tions)YH(. + )0 82 1 A(Section 4.4, "Error Handling")82 0 TN TL()Ec /AF f D( of + )0 78 1 A(Chapter 4, "Seri)HY(al)HY(iza)HY(tion)YH(")78 0 TN TL()Ec /AF f D( describes excep)HY(tions)YH( + and error handling mech)HY(a)HY(nisms)YH( specific to the seri)HY(al)HY(iza)HY(tion)YH( func)HY(tions)YH(. + )EP( + + + )0 3 11 H(2.2.1)WB 105 Sn()WB 14 Sn( )SM(xml_schema::dupli)HY(cate)YH(_id)ES()EA()EH( + + ) 10 48 PR(struct duplicate_id: virtual exception +{ + duplicate_id \201const std::basic_string<C>& id\202; + + const std::basic_string<C>& + id \201\202 const; + + virtual const char* + what \201\202 const throw \201\202; +};)RP( + + )0 P(The )SM(xml_schema::dupli)HY(cate)YH(_id)ES( is thrown when + a conflict)HY(ing)YH( instance of )SM(xml_schema::id)ES( \201see + )0 20 1 A(Section 2.5, "Mapping for Built-in Data Types")20 0 TN TL()Ec /AF f D(\202 + is added to a tree. The offend)HY(ing)YH( ID value can be obtained using + the )SM(id)ES( func)HY(tion)YH(. + )EP( + + )0 2 12 H(2.3)WB 106 Sn()WB 15 Sn( Mapping for )SM(import)ES( and )SM(include)ES()EA()EH( + + )0 3 13 H(2.3.1)WB 107 Sn()WB 16 Sn( Import)EA()EH( + + )0 P(The XML Schema )SM(import)ES( element is mapped to the C++ + Prepro)HY(ces)HY(sor)YH( )SM(#include)ES( direc)HY(tive)YH(. The value of + the )SM(schemaLo)HY(ca)HY(tion)YH()ES( attribute is used to derive + the name of the header file that appears in the )SM(#include)ES( + direc)HY(tive)YH(. For instance: + )EP( + + ) 2 53 PR(<import namespace="http://www.codesynthesis.com/test" + schemaLocation="test.xsd"/>)RP( + + )0 P(is mapped to:)EP( + + ) 1 19 PR(#include "test.hxx")RP( + + )0 P(Note that you will need to compile imported schemas sepa)HY(rately)YH( + in order to produce corre)HY(spond)HY(ing)YH( header files.)EP( + + )0 3 14 H(2.3.2)WB 108 Sn()WB 17 Sn( Inclu)HY(sion)YH( with Target Names)HY(pace)YH()EA()EH( + + )0 P(The XML Schema )SM(include)ES( element which refers to a schema + with a target names)HY(pace)YH( or appears in a schema without a target names)HY(pace)YH( + follows the same mapping rules as the )SM(import)ES( element, + see )0 16 1 A(Section 2.3.1, "Import")16 0 TN TL()Ec /AF f D(. + )EP( + + )0 3 15 H(2.3.3)WB 109 Sn()WB 18 Sn( Inclu)HY(sion)YH( without Target Names)HY(pace)YH()EA()EH( + + )0 P(For the XML Schema )SM(include)ES( element which refers to a schema + without a target names)HY(pace)YH( and appears in a schema with a target + names)HY(pace)YH( \201such inclu)HY(sion)YH( some)HY(times)YH( called "chameleon inclu)HY(sion)YH("\202, + decla)HY(ra)HY(tions)YH( and defi)HY(ni)HY(tions)YH( from the included schema are gener)HY(ated)YH( + in-line in the names)HY(pace)YH( of the includ)HY(ing)YH( schema as if they were + declared and defined there verba)HY(tim)YH(. For example, consider the + follow)HY(ing)YH( two schemas: + )EP( + + ) 11 60 PR(<-- common.xsd --> +<schema> + <complexType name="type"> + ... + </complexType> +</schema> + +<-- test.xsd --> +<schema targetNamespace="http://www.codesynthesis.com/test"> + <include schemaLocation="common.xsd"/> +</schema>)RP( + + )0 P(The frag)HY(ment)YH( of inter)HY(est)YH( from the gener)HY(ated)YH( header file for + )SM(text.xsd)ES( would look like this:)EP( + + ) 8 14 PR(// test.hxx +namespace test +{ + class type + { + ... + }; +})RP( + + )0 2 16 H(2.4)WB 110 Sn()WB 19 Sn( Mapping for Names)HY(paces)YH()EA()EH( + + )0 P(An XML Schema names)HY(pace)YH( is mapped to one or more nested C++ + names)HY(paces)YH(. XML Schema names)HY(paces)YH( are iden)HY(ti)HY(fied)YH( by URIs. + By default, a names)HY(pace)YH( URI is mapped to a sequence of + C++ names)HY(pace)YH( names by remov)HY(ing)YH( the proto)HY(col)YH( and host parts + and split)HY(ting)YH( the rest into a sequence of names with ')SM(/)ES(' + as the name sepa)HY(ra)HY(tor)YH(. For instance: + )EP( + + ) 3 67 PR(<schema targetNamespace="http://www.codesynthesis.com/system/test"> + ... +</schema>)RP( + + )0 P(is mapped to:)EP( + + ) 7 16 PR(namespace system +{ + namespace test + { + ... + } +})RP( + + )0 P(The default mapping of names)HY(pace)YH( URIs to C++ names)HY(pace)YH( names can be + altered using the )SM(--names)HY(pace)YH(-map)ES( and + )SM(--names)HY(pace)YH(-regex)ES( options. See the + )R9 2 A(XSD + Compiler Command Line Manual)EA( for more infor)HY(ma)HY(tion)YH(. + )EP( + + )0 2 17 H(2.5)WB 111 Sn()WB 20 Sn( Mapping for Built-in Data Types)EA()EH( + + )0 P(The mapping of XML Schema built-in data types to C++ types is + summa)HY(rized)YH( in the table below.)EP( + + + )0 PT( + + )0 P(All XML Schema built-in types are mapped to C++ classes that are + derived from the )SM(xml_schema::simple_type)ES( class except + where the mapping is to a funda)HY(men)HY(tal)YH( C++ type.)EP( + + )0 P(The )SM(sequence)ES( class template is defined in an + imple)HY(men)HY(ta)HY(tion)YH(-specific names)HY(pace)YH(. It conforms to the + sequence inter)HY(face)YH( as defined by the ISO/ANSI Stan)HY(dard)YH( for + C++ \201ISO/IEC 14882:1998, Section 23.1.1, "Sequences"\202. + Prac)HY(ti)HY(cally)YH(, this means that you can treat such a sequence + as if it was )SM(std::vector)ES(. One notable exten)HY(sion)YH( + to the stan)HY(dard)YH( inter)HY(face)YH( that is avail)HY(able)YH( only for + sequences of non-funda)HY(men)HY(tal)YH( C++ types is the addi)HY(tion)YH( of + the over)HY(loaded)YH( )SM(push_back)ES( and )SM(insert)ES( + member func)HY(tions)YH( which instead of the constant refer)HY(ence)YH( + to the element type accept auto)HY(matic)YH( pointer to the element + type. These func)HY(tions)YH( assume owner)HY(ship)YH( of the pointed to + object and resets the passed auto)HY(matic)YH( pointer. + )EP( + + )0 3 18 H(2.5.1)WB 112 Sn()WB 22 Sn( Inher)HY(i)HY(tance)YH( from Built-in Data Types)EA()EH( + + )0 P(In cases where the mapping calls for an inher)HY(i)HY(tance)YH( from a built-in + type which is mapped to a funda)HY(men)HY(tal)YH( C++ type, a proxy type is + used instead of the funda)HY(men)HY(tal)YH( C++ type \201C++ does not allow + inher)HY(i)HY(tance)YH( from funda)HY(men)HY(tal)YH( types\202. For instance:)EP( + + ) 3 27 PR(<simpleType name="my_int"> + <restriction base="int"/> +</simpleType>)RP( + + )0 P(is mapped to:)EP( + + ) 4 42 PR(class my_int: public fundamental_base<int> +{ + ... +};)RP( + + )0 P(The )SM(funda)HY(men)HY(tal)YH(_base)ES( class template provides a close + emula)HY(tion)YH( \201though not exact\202 of a funda)HY(men)HY(tal)YH( C++ type. + It is defined in an imple)HY(men)HY(ta)HY(tion)YH(-specific names)HY(pace)YH( and has the + follow)HY(ing)YH( inter)HY(face)YH(:)EP( + + ) 22 44 PR(template <typename X> +class fundamental_base: public simple_type +{ +public: + fundamental_base \201\202; + fundamental_base \201X\202 + fundamental_base \201const fundamental_base&\202 + +public: + fundamental_base& + operator= \201const X&\202; + +public: + operator const X & \201\202 const; + operator X& \201\202; + + template <typename Y> + operator Y \201\202 const; + + template <typename Y> + operator Y \201\202; +};)RP( + + )0 3 19 H(2.5.2)WB 113 Sn()WB 23 Sn( Mapping for )SM(anyType)ES()EA()EH( + + )0 P(The XML Schema )SM(anyType)ES( built-in data type is mapped to the + )SM(xml_schema::type)ES( C++ class:)EP( + + ) 27 26 PR(class type +{ +public: + virtual + ~type \201\202; + +public: + type \201\202; + type \201const type&\202; + +public: + type& + operator= \201const type&\202; + +public: + virtual type* + _clone \201\202 const; + + // DOM association. + // +public: + const xercesc::DOMNode* + _node \201\202 const; + + xercesc::DOMNode* + _node \201\202; +};)RP( + + )0 P(For more infor)HY(ma)HY(tion)YH( about DOM asso)HY(ci)HY(a)HY(tion)YH( refer to + )0 90 1 A(Section 5.1, "DOM Asso)HY(ci)HY(a)HY(tion)YH(")90 0 TN TL()Ec /AF f D(.)EP( + + )0 3 20 H(2.5.3)WB 114 Sn()WB 24 Sn( Mapping for )SM(anySim)HY(ple)HY(Type)YH()ES()EA()EH( + + )0 P(The XML Schema )SM(anySim)HY(ple)HY(Type)YH()ES( built-in data type is mapped + to the )SM(xml_schema::simple_type)ES( C++ class:)EP( + + ) 14 35 PR(class simple_type: public type +{ +public: + simple_type \201\202; + simple_type \201const simple_type&\202; + +public: + simple_type& + operator= \201const simple_type&\202; + +public: + virtual simple_type* + _clone \201\202 const; +};)RP( + + + )0 3 21 H(2.5.4)WB 115 Sn()WB 25 Sn( Mapping for )SM(QName)ES()EA()EH( + + )0 P(The XML Schema )SM(QName)ES( built-in data type is mapped to the + )SM(xml_schema::qname)ES( C++ class:)EP( + + ) 25 36 PR(class qname: public simple_type +{ +public: + qname \201const ncname&\202; + qname \201const uri&, const ncname&\202; + qname \201const qname&\202; + +public: + qname& + operator= \201const qname&\202; + +public: + virtual qname* + _clone \201\202 const; + +public: + bool + qualified \201\202 const; + + const uri& + namespace_ \201\202 const; + + const ncname& + name \201\202 const; +};)RP( + + )0 P(The )SM(qual)HY(i)HY(fied)YH()ES( acces)HY(sor)YH( func)HY(tion)YH( can be used to deter)HY(mine)YH( + if the name is qual)HY(i)HY(fied)YH(.)EP( + + )0 3 22 H(2.5.5)WB 116 Sn()WB 26 Sn( Mapping for )SM(IDREF)ES()EA()EH( + + )0 P(The XML Schema )SM(IDREF)ES( built-in data type is mapped to the + )SM(xml_schema::idref)ES( C++ class. This class imple)HY(ments)YH( the + smart pointer C++ idiom:)EP( + + ) 56 44 PR(class idref: public ncname +{ +public: + idref \201const C* s\202; + idref \201const C* s, std::size_t n\202; + idref \201std::size_t n, C c\202; + idref \201const std::basic_string<C>&\202; + idref \201const std::basic_string<C>&, + std::size_t pos, + std::size_t n = npos\202; + +public: + idref \201const idref&\202; + +public: + virtual idref* + _clone \201\202 const; + +public: + idref& + operator= \201C c\202; + + idref& + operator= \201const C* s\202; + + idref& + operator= \201const std::basic_string<C>&\202 + + idref& + operator= \201const idref&\202; +)WR( +public: + const type* + operator-> \201\202 const; + + type* + operator-> \201\202; + + const type& + operator* \201\202 const; + + type& + operator* \201\202; + + const type* + get \201\202 const; + + type* + get \201\202; + + // Conversion to bool. + // +public: + typedef void \201idref::*bool_convertible\202\201\202; + operator bool_convertible \201\202 const; +};)RP( + + )0 P(The object, )SM(idref)ES( instance refers to, is the imme)HY(di)HY(ate)YH( + container of the match)HY(ing)YH( )SM(id)ES( instance. For example, + with the follow)HY(ing)YH( instance docu)HY(ment)YH( and schema: + )EP( + + + ) 22 49 PR(<!-- test.xml --> +<root> + <object id="obj-1" text="hello"/> + <reference>obj-1</reference> +</root> + +<!-- test.xsd --> +<schema> + <complexType name="object_type"> + <attribute name="id" type="ID"/> + <attribute name="text" type="string"/> + </complexType> + + <complexType name="root_type"> + <sequence> + <element name="object" type="object_type"/> + <element name="reference" type="IDREF"/> + </sequence> + </complexType> + + <element name="root" type="root_type"/> +</schema>)RP( + + )0 P(The )SM(ref)ES( instance in the code below will refer to + an object of type )SM(object_type)ES(:)EP( + + ) 4 53 PR(root_type& root = ...; +xml_schema::idref& ref \201root.reference \201\202\202; +object_type& obj \201dynamic_cast<object_type&> \201*ref\202\202; +cout << obj.text \201\202 << endl;)RP( + + )0 P(The smart pointer inter)HY(face)YH( of the )SM(idref)ES( class always + returns a pointer or refer)HY(ence)YH( to )SM(xml_schema::type)ES(. + This means that you will need to manu)HY(ally)YH( cast such pointer or + refer)HY(ence)YH( to its real \201dynamic\202 type before you can use it \201unless + all you need is the base inter)HY(face)YH( provided by + )SM(xml_schema::type)ES(\202. As a special exten)HY(sion)YH( to the XML + Schema language, the mapping supports static typing of )SM(idref)ES( + refer)HY(ences)YH( by employ)HY(ing)YH( the )SM(refType)ES( exten)HY(sion)YH( attribute. + The follow)HY(ing)YH( example illus)HY(trates)YH( this mech)HY(a)HY(nism)YH(: + )EP( + + ) 11 72 PR(<!-- test.xsd --> +<schema + xmlns:xse="http://www.codesynthesis.com/xmlns/xml-schema-extension"> + + ... + + <element name="reference" type="IDREF" xse:refType="object_type"/> + + ... + +</schema>)RP( + + )0 P(With this modi)HY(fi)HY(ca)HY(tion)YH( we do not need to do manual casting anymore: + )EP( + + ) 4 51 PR(root_type& root = ...; +root_type::reference_type& ref \201root.reference \201\202\202; +object_type& obj \201*ref\202; +cout << ref->text \201\202 << endl;)RP( + + + )0 3 23 H(2.5.6)WB 117 Sn()WB 27 Sn( Mapping for )SM(base64Binary)ES( and + )SM(hexBi)HY(nary)YH()ES()EA()EH( + + )0 P(The XML Schema )SM(base64Binary)ES( and )SM(hexBi)HY(nary)YH()ES( + built-in data types are mapped to the + )SM(xml_schema::base64_binary)ES( and + )SM(xml_schema::hex_binary)ES( C++ classes, respec)HY(tively)YH(. The + )SM(base64_binary)ES( and )SM(hex_binary)ES( classes + support a simple buffer abstrac)HY(tion)YH( by inher)HY(it)HY(ing)YH( from the + )SM(xml_schema::buffer)ES( class: + )EP( + + ) 64 58 PR(class bounds: public virtual exception +{ +public: + virtual const char* + what \201\202 const throw \201\202; +}; + +class buffer +{ +public: + typedef std::size_t size_t; + +public: + buffer \201size_t size = 0\202; + buffer \201size_t size, size_t capacity\202; + buffer \201const void* data, size_t size\202; + buffer \201const void* data, size_t size, size_t capacity\202; + buffer \201void* data, + size_t size, + size_t capacity, + bool assume_ownership\202; + +public: + buffer \201const buffer&\202; + + buffer& + operator= \201const buffer&\202; + + void + swap \201buffer&\202; +)WR( +public: + size_t + capacity \201\202 const; + + bool + capacity \201size_t\202; + +public: + size_t + size \201\202 const; + + bool + size \201size_t\202; + +public: + const char* + data \201\202 const; + + char* + data \201\202; + + const char* + begin \201\202 const; + + char* + begin \201\202; + + const char* + end \201\202 const; +)WR( + char* + end \201\202; +};)RP( + + )0 P(The last over)HY(loaded)YH( construc)HY(tor)YH( reuses an exist)HY(ing)YH( data buffer instead + of making a copy. If the )SM(assume_owner)HY(ship)YH()ES( argu)HY(ment)YH( is + )SM(true)ES(, the instance assumes owner)HY(ship)YH( of the + memory block pointed to by the )SM(data)ES( argu)HY(ment)YH( and will + even)HY(tu)HY(ally)YH( release it by calling )SM(oper)HY(a)HY(tor)YH( delete)ES(. The + )SM(capac)HY(ity)YH()ES( and )SM(size)ES( modi)HY(fier)YH( func)HY(tions)YH( return + )SM(true)ES( if the under)HY(ly)HY(ing)YH( buffer has moved. + )EP( + + )0 P(The )SM(bounds)ES( excep)HY(tion)YH( is thrown if the construc)HY(tor)YH( + argu)HY(ments)YH( violate the )SM(\201size\240<=\240capac)HY(ity)YH(\202)ES( + constraint.)EP( + + )0 P(The )SM(base64_binary)ES( and )SM(hex_binary)ES( classes + support the )SM(buffer)ES( inter)HY(face)YH( and perform auto)HY(matic)YH( + decod)HY(ing)YH(/encod)HY(ing)YH( from/to the Base64 and Hex formats, respec)HY(tively)YH(: + )EP( + + ) 25 65 PR(class base64_binary: public simple_type, public buffer +{ +public: + base64_binary \201size_t size = 0\202; + base64_binary \201size_t size, size_t capacity\202; + base64_binary \201const void* data, size_t size\202; + base64_binary \201const void* data, size_t size, size_t capacity\202; + base64_binary \201void* data, + size_t size, + size_t capacity, + bool assume_ownership\202; + +public: + base64_binary \201const base64_binary&\202; + + base64_binary& + operator= \201const base64_binary&\202; + + virtual base64_binary* + _clone \201\202 const; + +public: + std::basic_string<C> + encode \201\202 const; +};)RP( + + ) 25 62 PR(class hex_binary: public simple_type, public buffer +{ +public: + hex_binary \201size_t size = 0\202; + hex_binary \201size_t size, size_t capacity\202; + hex_binary \201const void* data, size_t size\202; + hex_binary \201const void* data, size_t size, size_t capacity\202; + hex_binary \201void* data, + size_t size, + size_t capacity, + bool assume_ownership\202; + +public: + hex_binary \201const hex_binary&\202; + + hex_binary& + operator= \201const hex_binary&\202; + + virtual hex_binary* + _clone \201\202 const; + +public: + std::basic_string<C> + encode \201\202 const; +};)RP( + + + )0 2 24 H(2.5.7)WB 118 Sn()WB 28 Sn( Time Zone Repre)HY(sen)HY(ta)HY(tion)YH()EA()EH( + + )0 P(The )SM(date)ES(, )SM(date)HY(Time)YH()ES(, )SM(gDay)ES(, + )SM(gMonth)ES(, )SM(gMon)HY(th)HY(Day)YH()ES(, )SM(gYear)ES(, + )SM(gYear)HY(Month)YH()ES(, and )SM(time)ES( XML Schema built-in + types all include an optional time zone compo)HY(nent)YH(. The follow)HY(ing)YH( + )SM(xml_schema::time_zone)ES( base class is used to repre)HY(sent)YH( + this infor)HY(ma)HY(tion)YH(:)EP( + + ) 30 48 PR(class time_zone +{ +public: + time_zone \201\202; + time_zone \201short hours, short minutes\202; + + bool + zone_present \201\202 const; + + void + zone_reset \201\202; + + short + zone_hours \201\202 const; + + void + zone_hours \201short\202; + + short + zone_minutes \201\202 const; + + void + zone_minutes \201short\202; +}; + +bool +operator== \201const time_zone&, const time_zone&\202; + +bool +operator!= \201const time_zone&, const time_zone&\202;)RP( + + )0 P(The )SM(zone_present\201\202)ES( acces)HY(sor)YH( func)HY(tion)YH( returns )SM(true)ES( + if the time zone is spec)HY(i)HY(fied)YH(. The )SM(zone_reset\201\202)ES( modi)HY(fier)YH( + func)HY(tion)YH( resets the time zone object to the )EM(not spec)HY(i)HY(fied)YH()ES( + state. If the time zone offset is nega)HY(tive)YH( then both hours and + minutes compo)HY(nents)YH( are repre)HY(sented)YH( as nega)HY(tive)YH( inte)HY(gers)YH(.)EP( + + + )0 2 25 H(2.5.8)WB 119 Sn()WB 29 Sn( Mapping for )SM(date)ES()EA()EH( + + )0 P(The XML Schema )SM(date)ES( built-in data type is mapped to the + )SM(xml_schema::date)ES( C++ class which repre)HY(sents)YH( a year, a day, + and a month with an optional time zone. Its inter)HY(face)YH( is presented + below. For more infor)HY(ma)HY(tion)YH( on the base )SM(xml_schema::time_zone)ES( + class refer to )0 28 1 A(Section 2.5.7, "Time Zone + Repre)HY(sen)HY(ta)HY(tion)YH(")28 0 TN TL()Ec /AF f D(.)EP( + + ) 41 60 PR(class date: public simple_type, public time_zone +{ +public: + date \201int year, unsigned short month, unsigned short day\202; + date \201int year, unsigned short month, unsigned short day, + short zone_hours, short zone_minutes\202; + +public: + date \201const date&\202; + + date& + operator= \201const date&\202; + + virtual date* + _clone \201\202 const; + +public: + int + year \201\202 const; + + void + year \201int\202; + + unsigned short + month \201\202 const; + + void + month \201unsigned short\202; + + unsigned short + day \201\202 const;)WR( + + void + day \201unsigned short\202; +}; + +bool +operator== \201const date&, const date&\202; + +bool +operator!= \201const date&, const date&\202;)RP( + + )0 2 26 H(2.5.9)WB 120 Sn()WB 30 Sn( Mapping for )SM(date)HY(Time)YH()ES()EA()EH( + + )0 P(The XML Schema )SM(date)HY(Time)YH()ES( built-in data type is mapped to the + )SM(xml_schema::date_time)ES( C++ class which repre)HY(sents)YH( a year, a month, + a day, hours, minutes, and seconds with an optional time zone. Its inter)HY(face)YH( + is presented below. For more infor)HY(ma)HY(tion)YH( on the base + )SM(xml_schema::time_zone)ES( class refer to )0 28 1 A(Section + 2.5.7, "Time Zone Repre)HY(sen)HY(ta)HY(tion)YH(")28 0 TN TL()Ec /AF f D(.)EP( + + ) 62 67 PR(class date_time: public simple_type, public time_zone +{ +public: + date_time \201int year, unsigned short month, unsigned short day, + unsigned short hours, unsigned short minutes, + double seconds\202; + + date_time \201int year, unsigned short month, unsigned short day, + unsigned short hours, unsigned short minutes, + double seconds, short zone_hours, short zone_minutes\202; +public: + date_time \201const date_time&\202; + + date_time& + operator= \201const date_time&\202; + + virtual date_time* + _clone \201\202 const; + +public: + int + year \201\202 const; + + void + year \201int\202; + + unsigned short + month \201\202 const; + + void + month \201unsigned short\202;)WR( + + unsigned short + day \201\202 const; + + void + day \201unsigned short\202; + + unsigned short + hours \201\202 const; + + void + hours \201unsigned short\202; + + unsigned short + minutes \201\202 const; + + void + minutes \201unsigned short\202; + + double + seconds \201\202 const; + + void + seconds \201double\202; +}; + +bool +operator== \201const date_time&, const date_time&\202; + +bool)WR( +operator!= \201const date_time&, const date_time&\202;)RP( + + + )0 2 27 H(2.5.10)WB 121 Sn()WB 31 Sn( Mapping for )SM(dura)HY(tion)YH()ES()EA()EH( + + )0 P(The XML Schema )SM(dura)HY(tion)YH()ES( built-in data type is mapped to the + )SM(xml_schema::dura)HY(tion)YH()ES( C++ class which repre)HY(sents)YH( a poten)HY(tially)YH( + nega)HY(tive)YH( dura)HY(tion)YH( in the form of years, months, days, hours, minutes, + and seconds. Its inter)HY(face)YH( is presented below.)EP( + + ) 64 71 PR(class duration: public simple_type +{ +public: + duration \201bool negative, + unsigned int years, unsigned int months, unsigned int days, + unsigned int hours, unsigned int minutes, double seconds\202; +public: + duration \201const duration&\202; + + duration& + operator= \201const duration&\202; + + virtual duration* + _clone \201\202 const; + +public: + bool + negative \201\202 const; + + void + negative \201bool\202; + + unsigned int + years \201\202 const; + + void + years \201unsigned int\202; + + unsigned int + months \201\202 const; +)WR( + void + months \201unsigned int\202; + + unsigned int + days \201\202 const; + + void + days \201unsigned int\202; + + unsigned int + hours \201\202 const; + + void + hours \201unsigned int\202; + + unsigned int + minutes \201\202 const; + + void + minutes \201unsigned int\202; + + double + seconds \201\202 const; + + void + seconds \201double\202; +}; + +bool +operator== \201const duration&, const duration&\202;)WR( + +bool +operator!= \201const duration&, const duration&\202;)RP( + + + )0 2 28 H(2.5.11)WB 122 Sn()WB 32 Sn( Mapping for )SM(gDay)ES()EA()EH( + + )0 P(The XML Schema )SM(gDay)ES( built-in data type is mapped to the + )SM(xml_schema::gday)ES( C++ class which repre)HY(sents)YH( a day of the + month with an optional time zone. Its inter)HY(face)YH( is presented below. + For more infor)HY(ma)HY(tion)YH( on the base )SM(xml_schema::time_zone)ES( + class refer to )0 28 1 A(Section 2.5.7, "Time Zone + Repre)HY(sen)HY(ta)HY(tion)YH(")28 0 TN TL()Ec /AF f D(.)EP( + + ) 29 66 PR(class gday: public simple_type, public time_zone +{ +public: + explicit + gday \201unsigned short day\202; + gday \201unsigned short day, short zone_hours, short zone_minutes\202; + +public: + gday \201const gday&\202; + + gday& + operator= \201const gday&\202; + + virtual gday* + _clone \201\202 const; + +public: + unsigned short + day \201\202 const; + + void + day \201unsigned short\202; +}; + +bool +operator== \201const gday&, const gday&\202; + +bool +operator!= \201const gday&, const gday&\202;)RP( + + + )0 2 29 H(2.5.12)WB 123 Sn()WB 33 Sn( Mapping for )SM(gMonth)ES()EA()EH( + + )0 P(The XML Schema )SM(gMonth)ES( built-in data type is mapped to the + )SM(xml_schema::gmonth)ES( C++ class which repre)HY(sents)YH( a month of the + year with an optional time zone. Its inter)HY(face)YH( is presented below. + For more infor)HY(ma)HY(tion)YH( on the base )SM(xml_schema::time_zone)ES( + class refer to )0 28 1 A(Section 2.5.7, "Time Zone + Repre)HY(sen)HY(ta)HY(tion)YH(")28 0 TN TL()Ec /AF f D(.)EP( + + ) 30 50 PR(class gmonth: public simple_type, public time_zone +{ +public: + explicit + gmonth \201unsigned short month\202; + gmonth \201unsigned short month, + short zone_hours, short zone_minutes\202; + +public: + gmonth \201const gmonth&\202; + + gmonth& + operator= \201const gmonth&\202; + + virtual gmonth* + _clone \201\202 const; + +public: + unsigned short + month \201\202 const; + + void + month \201unsigned short\202; +}; + +bool +operator== \201const gmonth&, const gmonth&\202; + +bool +operator!= \201const gmonth&, const gmonth&\202;)RP( + + + )0 2 30 H(2.5.13)WB 124 Sn()WB 34 Sn( Mapping for )SM(gMon)HY(th)HY(Day)YH()ES()EA()EH( + + )0 P(The XML Schema )SM(gMon)HY(th)HY(Day)YH()ES( built-in data type is mapped to the + )SM(xml_schema::gmonth_day)ES( C++ class which repre)HY(sents)YH( a day and + a month of the year with an optional time zone. Its inter)HY(face)YH( is presented + below. For more infor)HY(ma)HY(tion)YH( on the base )SM(xml_schema::time_zone)ES( + class refer to )0 28 1 A(Section 2.5.7, "Time Zone + Repre)HY(sen)HY(ta)HY(tion)YH(")28 0 TN TL()Ec /AF f D(.)EP( + + ) 35 56 PR(class gmonth_day: public simple_type, public time_zone +{ +public: + gmonth_day \201unsigned short month, unsigned short day\202; + gmonth_day \201unsigned short month, unsigned short day, + short zone_hours, short zone_minutes\202; + +public: + gmonth_day \201const gmonth_day&\202; + + gmonth_day& + operator= \201const gmonth_day&\202; + + virtual gmonth_day* + _clone \201\202 const; + +public: + unsigned short + month \201\202 const; + + void + month \201unsigned short\202; + + unsigned short + day \201\202 const; + + void + day \201unsigned short\202; +}; + +bool)WR( +operator== \201const gmonth_day&, const gmonth_day&\202; + +bool +operator!= \201const gmonth_day&, const gmonth_day&\202;)RP( + + + )0 2 31 H(2.5.14)WB 125 Sn()WB 35 Sn( Mapping for )SM(gYear)ES()EA()EH( + + )0 P(The XML Schema )SM(gYear)ES( built-in data type is mapped to the + )SM(xml_schema::gyear)ES( C++ class which repre)HY(sents)YH( a year with + an optional time zone. Its inter)HY(face)YH( is presented below. For more + infor)HY(ma)HY(tion)YH( on the base )SM(xml_schema::time_zone)ES( class refer + to )0 28 1 A(Section 2.5.7, "Time Zone Repre)HY(sen)HY(ta)HY(tion)YH(")28 0 TN TL()Ec /AF f D(.)EP( + + ) 29 57 PR(class gyear: public simple_type, public time_zone +{ +public: + explicit + gyear \201int year\202; + gyear \201int year, short zone_hours, short zone_minutes\202; + +public: + gyear \201const gyear&\202; + + gyear& + operator= \201const gyear&\202; + + virtual gyear* + _clone \201\202 const; + +public: + int + year \201\202 const; + + void + year \201int\202; +}; + +bool +operator== \201const gyear&, const gyear&\202; + +bool +operator!= \201const gyear&, const gyear&\202;)RP( + + + )0 2 32 H(2.5.15)WB 126 Sn()WB 36 Sn( Mapping for )SM(gYear)HY(Month)YH()ES()EA()EH( + + )0 P(The XML Schema )SM(gYear)HY(Month)YH()ES( built-in data type is mapped to + the )SM(xml_schema::gyear_month)ES( C++ class which repre)HY(sents)YH( + a year and a month with an optional time zone. Its inter)HY(face)YH( is presented + below. For more infor)HY(ma)HY(tion)YH( on the base )SM(xml_schema::time_zone)ES( + class refer to )0 28 1 A(Section 2.5.7, "Time Zone + Repre)HY(sen)HY(ta)HY(tion)YH(")28 0 TN TL()Ec /AF f D(.)EP( + + ) 34 55 PR(class gyear_month: public simple_type, public time_zone +{ +public: + gyear_month \201int year, unsigned short month\202; + gyear_month \201int year, unsigned short month, + short zone_hours, short zone_minutes\202; +public: + gyear_month \201const gyear_month&\202; + + gyear_month& + operator= \201const gyear_month&\202; + + virtual gyear_month* + _clone \201\202 const; + +public: + int + year \201\202 const; + + void + year \201int\202; + + unsigned short + month \201\202 const; + + void + month \201unsigned short\202; +}; + +bool +operator== \201const gyear_month&, const gyear_month&\202;)WR( + +bool +operator!= \201const gyear_month&, const gyear_month&\202;)RP( + + + )0 2 33 H(2.5.16)WB 127 Sn()WB 37 Sn( Mapping for )SM(time)ES()EA()EH( + + )0 P(The XML Schema )SM(time)ES( built-in data type is mapped to + the )SM(xml_schema::time)ES( C++ class which repre)HY(sents)YH( hours, + minutes, and seconds with an optional time zone. Its inter)HY(face)YH( is + presented below. For more infor)HY(ma)HY(tion)YH( on the base + )SM(xml_schema::time_zone)ES( class refer to + )0 28 1 A(Section 2.5.7, "Time Zone Repre)HY(sen)HY(ta)HY(tion)YH(")28 0 TN TL()Ec /AF f D(.)EP( + + ) 41 70 PR(class time: public simple_type, public time_zone +{ +public: + time \201unsigned short hours, unsigned short minutes, double seconds\202; + time \201unsigned short hours, unsigned short minutes, double seconds, + short zone_hours, short zone_minutes\202; + +public: + time \201const time&\202; + + time& + operator= \201const time&\202; + + virtual time* + _clone \201\202 const; + +public: + unsigned short + hours \201\202 const; + + void + hours \201unsigned short\202; + + unsigned short + minutes \201\202 const; + + void + minutes \201unsigned short\202; + + double + seconds \201\202 const;)WR( + + void + seconds \201double\202; +}; + +bool +operator== \201const time&, const time&\202; + +bool +operator!= \201const time&, const time&\202;)RP( + + + + + )0 2 34 H(2.6)WB 128 Sn()WB 38 Sn( Mapping for Simple Types)EA()EH( + + )0 P(An XML Schema simple type is mapped to a C++ class with the same + name as the simple type. The class defines a public copy construc)HY(tor)YH(, + a public copy assign)HY(ment)YH( oper)HY(a)HY(tor)YH(, and a public virtual + )SM(_clone)ES( func)HY(tion)YH(. The )SM(_clone)ES( func)HY(tion)YH( is + declared )SM(const)ES(, does not take any argu)HY(ments)YH(, and returns + a pointer to a complete copy of the instance allo)HY(cated)YH( in the free + store. The )SM(_clone)ES( func)HY(tion)YH( shall be used to make copies + when static type and dynamic type of the instance may differ \201see + )0 54 1 A(Section 2.11, "Mapping for )SM(xsi:type)ES( + and Substi)HY(tu)HY(tion)YH( Groups")54 0 TN TL()Ec /AF f D(\202. For instance:)EP( + + ) 3 26 PR(<simpleType name="object"> + ... +</simpleType>)RP( + + )0 P(is mapped to:)EP( + + ) 16 28 PR(class object: ... +{ +public: + object \201const object&\202; + +public: + object& + operator= \201const object&\202; + +public: + virtual object* + _clone \201\202 const; + + ... + +};)RP( + + )0 P(The base class spec)HY(i)HY(fi)HY(ca)HY(tion)YH( and the rest of the class defi)HY(ni)HY(tion)YH( + depend on the type of deriva)HY(tion)YH( used to define the simple type. )EP( + + + )0 3 35 H(2.6.1)WB 129 Sn()WB 39 Sn( Mapping for Deriva)HY(tion)YH( by Restric)HY(tion)YH()EA()EH( + + )0 P(XML Schema deriva)HY(tion)YH( by restric)HY(tion)YH( is mapped to C++ public + inher)HY(i)HY(tance)YH(. The base type of the restric)HY(tion)YH( becomes the base + type for the result)HY(ing)YH( C++ class. In addi)HY(tion)YH( to the members described + in )0 38 1 A(Section 2.6, "Mapping for Simple Types")38 0 TN TL()Ec /AF f D(, the + result)HY(ing)YH( C++ class defines a public construc)HY(tor)YH( with the base type + as its single argu)HY(ment)YH(. For instance:)EP( + + ) 5 27 PR(<simpleType name="object"> + <restriction base="base"> + ... + </restriction> +</simpleType>)RP( + + )0 P(is mapped to:)EP( + + ) 14 28 PR(class object: public base +{ +public: + object \201const base&\202; + object \201const object&\202; + +public: + object& + operator= \201const object&\202; + +public: + virtual object* + _clone \201\202 const; +};)RP( + + + )0 3 36 H(2.6.2)WB 130 Sn()WB 40 Sn( Mapping for Enumer)HY(a)HY(tions)YH()EA()EH( + +)0 P(XML Schema restric)HY(tion)YH( by enumer)HY(a)HY(tion)YH( is mapped to a C++ class + with seman)HY(tics)YH( similar to C++ )SM(enum)ES(. Each XML Schema + enumer)HY(a)HY(tion)YH( element is mapped to a C++ enumer)HY(a)HY(tor)YH( with the + name derived from the )SM(value)ES( attribute and defined + in the class scope. In addi)HY(tion)YH( to the members + described in )0 38 1 A(Section 2.6, "Mapping for Simple Types")38 0 TN TL()Ec /AF f D(, + the result)HY(ing)YH( C++ class defines a public construc)HY(tor)YH( that can be called + with one of the enumer)HY(a)HY(tors)YH( as its single argu)HY(ment)YH(, a public construc)HY(tor)YH( + that can be called with enumer)HY(a)HY(tion)YH('s base value as its single + argu)HY(ment)YH(, a public assign)HY(ment)YH( oper)HY(a)HY(tor)YH( that can be used to assign the + value of one of the enumer)HY(a)HY(tors)YH(, and a public implicit conver)HY(sion)YH( + oper)HY(a)HY(tor)YH( to the under)HY(ly)HY(ing)YH( C++ enum type.)EP( + +)0 P(Further)HY(more)YH(, for string-based enumer)HY(a)HY(tion)YH( types, the result)HY(ing)YH( C++ + class defines a public construc)HY(tor)YH( with a single argu)HY(ment)YH( of type + )SM(const C*)ES( and a public construc)HY(tor)YH( with a single + argu)HY(ment)YH( of type )SM(const std::basic_string<C>&)ES(. + For instance:)EP( + + ) 7 32 PR(<simpleType name="color"> + <restriction base="string"> + <enumeration value="red"/> + <enumeration value="green"/> + <enumeration value="blue"/> + </restriction> +</simpleType>)RP( + + )0 P(is mapped to:)EP( + + ) 31 38 PR(class color: xml_schema::string +{ +public: + enum value + { + red, + green, + blue + }; + +public: + color \201value\202; + color \201const C*\202; + color \201const std::basic_string<C>&\202; + color \201const xml_schema::string&\202; + color \201const color&\202; + +public: + color& + operator= \201value\202; + + color& + operator= \201const color&\202; + +public: + virtual color* + _clone \201\202 const; + +public: + operator value \201\202 const; +};)WR()RP( + + )0 3 37 H(2.6.3)WB 131 Sn()WB 41 Sn( Mapping for Deriva)HY(tion)YH( by List)EA()EH( + + )0 P(XML Schema deriva)HY(tion)YH( by list is mapped to C++ public + inher)HY(i)HY(tance)YH( from )SM(xml_schema::simple_type)ES( + \201)0 24 1 A(Section 2.5.3, "Mapping for + )SM(anySim)HY(ple)HY(Type)YH()ES(")24 0 TN TL()Ec /AF f D(\202 and a suit)HY(able)YH( sequence type. + The list item type becomes the element type of the sequence. + In addi)HY(tion)YH( to the members described in )0 38 1 A(Section 2.6, + "Mapping for Simple Types")38 0 TN TL()Ec /AF f D(, the result)HY(ing)YH( C++ class defines + a public default construc)HY(tor)YH(, a public construc)HY(tor)YH( + with the first argu)HY(ment)YH( of type )SM(size_type)ES( and + the second argu)HY(ment)YH( of list item type that creates + a list object with the spec)HY(i)HY(fied)YH( number of copies of the spec)HY(i)HY(fied)YH( + element value, and a public construc)HY(tor)YH( with the two argu)HY(ments)YH( + of an input iter)HY(a)HY(tor)YH( type that creates a list object from an + iter)HY(a)HY(tor)YH( range. For instance: + )EP( + + ) 3 28 PR(<simpleType name="int_list"> + <list itemType="int"/> +</simpleType>)RP( + + )0 P(is mapped to:)EP( + + ) 19 42 PR(class int_list: public simple_type, + public sequence<int> +{ +public: + int_list \201\202; + int_list \201size_type n, int x\202; + + template <typename I> + int_list \201const I& begin, const I& end\202; + int_list \201const int_list&\202; + +public: + int_list& + operator= \201const int_list&\202; + +public: + virtual int_list* + _clone \201\202 const; +};)RP( + + )0 P(The )SM(sequence)ES( class template is defined in an + imple)HY(men)HY(ta)HY(tion)YH(-specific names)HY(pace)YH(. It conforms to the + sequence inter)HY(face)YH( as defined by the ISO/ANSI Stan)HY(dard)YH( for + C++ \201ISO/IEC 14882:1998, Section 23.1.1, "Sequences"\202. + Prac)HY(ti)HY(cally)YH(, this means that you can treat such a sequence + as if it was )SM(std::vector)ES(. One notable exten)HY(sion)YH( + to the stan)HY(dard)YH( inter)HY(face)YH( that is avail)HY(able)YH( only for + sequences of non-funda)HY(men)HY(tal)YH( C++ types is the addi)HY(tion)YH( of + the over)HY(loaded)YH( )SM(push_back)ES( and )SM(insert)ES( + member func)HY(tions)YH( which instead of the constant refer)HY(ence)YH( + to the element type accept auto)HY(matic)YH( pointer to the element + type. These func)HY(tions)YH( assume owner)HY(ship)YH( of the pointed to + object and resets the passed auto)HY(matic)YH( pointer. + )EP( + + )0 3 38 H(2.6.4)WB 132 Sn()WB 42 Sn( Mapping for Deriva)HY(tion)YH( by Union)EA()EH( + + )0 P(XML Schema deriva)HY(tion)YH( by union is mapped to C++ public + inher)HY(i)HY(tance)YH( from )SM(xml_schema::simple_type)ES( + \201)0 24 1 A(Section 2.5.3, "Mapping for + )SM(anySim)HY(ple)HY(Type)YH()ES(")24 0 TN TL()Ec /AF f D(\202 and )SM(std::basic_string<C>)ES(. + In addi)HY(tion)YH( to the members described in )0 38 1 A(Section 2.6, + "Mapping for Simple Types")38 0 TN TL()Ec /AF f D(, the result)HY(ing)YH( C++ class defines a + public construc)HY(tor)YH( with a single argu)HY(ment)YH( of type )SM(const C*)ES( + and a public construc)HY(tor)YH( with a single argu)HY(ment)YH( of type + )SM(const std::basic_string<C>&)ES(. For instance: + )EP( + + ) 3 47 PR(<simpleType name="int_string_union"> + <xsd:union memberTypes="xsd:int xsd:string"/> +</simpleType>)RP( + + )0 P(is mapped to:)EP( + + ) 16 51 PR(class int_string_union: public simple_type, + public std::basic_string<C> +{ +public: + int_string_union \201const C*\202; + int_string_union \201const std::basic_string<C>&\202; + int_string_union \201const int_string_union&\202; + +public: + int_string_union& + operator= \201const int_string_union&\202; + +public: + virtual int_string_union* + _clone \201\202 const; +};)RP( + + )0 2 39 H(2.7)WB 133 Sn()WB 43 Sn( Mapping for Complex Types)EA()EH( + + )0 P(An XML Schema complex type is mapped to a C++ class with the same + name as the complex type. The class defines a public copy construc)HY(tor)YH(, + a public copy assign)HY(ment)YH( oper)HY(a)HY(tor)YH(, and a public virtual + )SM(_clone)ES( func)HY(tion)YH(. The )SM(_clone)ES( func)HY(tion)YH( is + declared )SM(const)ES(, does not take any argu)HY(ments)YH(, and returns + a pointer to a complete copy of the instance allo)HY(cated)YH( in the free + store. The )SM(_clone)ES( func)HY(tion)YH( shall be used to make copies + when static type and dynamic type of the instance may differ \201see + )0 54 1 A(Section 2.11, "Mapping for )SM(xsi:type)ES( + and Substi)HY(tu)HY(tion)YH( Groups")54 0 TN TL()Ec /AF f D(\202.)EP( + + )0 P(Addi)HY(tion)HY(ally)YH(, the result)HY(ing)YH( C++ class + defines two public construc)HY(tors)YH( that take an initial)HY(izer)YH( for each + member of the complex type and all its base types that belongs to + the One cardi)HY(nal)HY(ity)YH( class \201see )0 46 1 A(Section 2.8, "Mapping + for Local Elements and Attributes")46 0 TN TL()Ec /AF f D(\202. In the first construc)HY(tor)YH(, + the argu)HY(ments)YH( are passed as constant refer)HY(ences)YH( and the newly created + instance is initial)HY(ized)YH( with copies of the passed objects. In the + second construc)HY(tor)YH(, argu)HY(ments)YH( that are complex types \201that is, + they them)HY(selves)YH( contain elements or attributes\202 are passed as + refer)HY(ences)YH( to )SM(std::auto_ptr)ES(. In this case the newly + created instance is directly initial)HY(ized)YH( with and assumes owner)HY(ship)YH( + of the pointed to objects and the )SM(std::auto_ptr)ES( argu)HY(ments)YH( + are reset to )SM(0)ES(. For instance:)EP( + + ) 15 66 PR(<complexType name="complex"> + <sequence> + <element name="a" type="int"/> + <element name="b" type="string"/> + </sequence> +</complexType> + +<complexType name="object"> + <sequence> + <element name="s-one" type="boolean"/> + <element name="c-one" type="complex"/> + <element name="optional" type="int" minOccurs="0"/> + <element name="sequence" type="string" maxOccurs="unbounded"/> + </sequence> +</complexType>)RP( + + )0 P(is mapped to:)EP( + + ) 36 60 PR(class complex: xml_schema::type +{ +public: + object \201const int& a, const xml_schema::string& b\202; + object \201const complex&\202; + +public: + object& + operator= \201const complex&\202; + +public: + virtual complex* + _clone \201\202 const; + + ... + +}; + +class object: xml_schema::type +{ +public: + object \201const bool& s_one, const complex& c_one\202; + object \201const bool& s_one, std::auto_ptr<complex>& c_one\202; + object \201const object&\202; + +public: + object& + operator= \201const object&\202; + +public: + virtual object*)WR( + _clone \201\202 const; + + ... + +};)RP( + + )0 P(Notice that the gener)HY(ated)YH( )SM(complex)ES( class does not + have the second \201)SM(std::auto_ptr)ES(\202 version of the + construc)HY(tor)YH( since all its required members are of simple types.)EP( + + )0 P(If an XML Schema complex type has an ulti)HY(mate)YH( base which is an XML + Schema simple type then the result)HY(ing)YH( C++ class also defines a public + construc)HY(tor)YH( that takes an initial)HY(izer)YH( for the base type as well as + for each member of the complex type and all its base types that + belongs to the One cardi)HY(nal)HY(ity)YH( class. For instance:)EP( + + ) 7 61 PR(<complexType name="object"> + <simpleContent> + <extension base="date"> + <attribute name="lang" type="language" use="required"/> + </extension> + </simpleContent> +</complexType>)RP( + + )0 P(is mapped to:)EP( + + ) 11 44 PR(class object: xml_schema::string +{ +public: + object \201const xml_schema::language& lang\202; + + object \201const xml_schema::date& base, + const xml_schema::language& lang\202; + + ... + +};)RP( + + )0 P(Further)HY(more)YH(, for string-based XML Schema complex types, the result)HY(ing)YH( C++ + class also defines two public construc)HY(tors)YH( with the first argu)HY(ments)YH( + of type )SM(const C*)ES( and )SM(std::basic_string<C>&)ES(, + respec)HY(tively)YH(, followed by argu)HY(ments)YH( for each member of the complex + type and all its base types that belongs to the One cardi)HY(nal)HY(ity)YH( + class. For enumer)HY(a)HY(tion)YH(-based complex types the result)HY(ing)YH( C++ + class also defines a public construc)HY(tor)YH( with the first argu)HY(ments)YH( + of the under)HY(ly)HY(ing)YH( enum type followed by argu)HY(ments)YH( for each member + of the complex type and all its base types that belongs to the One + cardi)HY(nal)HY(ity)YH( class. For instance:)EP( + + ) 15 61 PR(<simpleType name="color"> + <restriction base="string"> + <enumeration value="red"/> + <enumeration value="green"/> + <enumeration value="blue"/> + </restriction> +</simpleType> + +<complexType name="object"> + <simpleContent> + <extension base="color"> + <attribute name="lang" type="language" use="required"/> + </extension> + </simpleContent> +</complexType>)RP( + + )0 P(is mapped to:)EP( + + ) 37 44 PR(class color: xml_schema::string +{ +public: + enum value + { + red, + green, + blue + }; + +public: + color \201value\202; + color \201const C*\202; + color \201const std::basic_string<C>&\202; + + ... + +}; + +class object: color +{ +public: + object \201const color& base, + const xml_schema::language& lang\202; + + object \201const color::value& base, + const xml_schema::language& lang\202; + + object \201const C* base, + const xml_schema::language& lang\202; +)WR( + object \201const std::basic_string<C>& base, + const xml_schema::language& lang\202; + + ... + +};)RP( + + )0 P(Addi)HY(tional)YH( construc)HY(tors)YH( can be requested with the + )SM(--gener)HY(ate)YH(-default-ctor)ES( and + )SM(--gener)HY(ate)YH(-from-base-ctor)ES( options. See the + )R9 2 A(XSD + Compiler Command Line Manual)EA( for details.)EP( + + )0 P(If an XML Schema complex type is not explic)HY(itly)YH( derived from any type, + the result)HY(ing)YH( C++ class is derived from )SM(xml_schema::type)ES(. + In cases where an XML Schema complex type is defined using deriva)HY(tion)YH( + by exten)HY(sion)YH( or restric)HY(tion)YH(, the result)HY(ing)YH( C++ base class spec)HY(i)HY(fi)HY(ca)HY(tion)YH( + depends on the type of deriva)HY(tion)YH( and is described in the subse)HY(quent)YH( + sections. + )EP( + + )0 P(The mapping for elements and attributes that are defined in a complex + type is described in )0 46 1 A(Section 2.8, "Mapping for Local + Elements and Attributes")46 0 TN TL()Ec /AF f D(. + )EP( + + )0 3 40 H(2.7.1)WB 134 Sn()WB 44 Sn( Mapping for Deriva)HY(tion)YH( by Exten)HY(sion)YH()EA()EH( + + )0 P(XML Schema deriva)HY(tion)YH( by exten)HY(sion)YH( is mapped to C++ public + inher)HY(i)HY(tance)YH(. The base type of the exten)HY(sion)YH( becomes the base + type for the result)HY(ing)YH( C++ class. + )EP( + + )0 3 41 H(2.7.2)WB 135 Sn()WB 45 Sn( Mapping for Deriva)HY(tion)YH( by Restric)HY(tion)YH()EA()EH( + + )0 P(XML Schema deriva)HY(tion)YH( by restric)HY(tion)YH( is mapped to C++ public + inher)HY(i)HY(tance)YH(. The base type of the restric)HY(tion)YH( becomes the base + type for the result)HY(ing)YH( C++ class. XML Schema elements and + attributes defined within restric)HY(tion)YH( do not result in any + defi)HY(ni)HY(tions)YH( in the result)HY(ing)YH( C++ class. Instead, corre)HY(spond)HY(ing)YH( + \201unre)HY(stricted)YH(\202 defi)HY(ni)HY(tions)YH( are inher)HY(ited)YH( from the base class. + In the future versions of this mapping, such elements and + attributes may result in redef)HY(i)HY(ni)HY(tions)YH( of acces)HY(sors)YH( and + modi)HY(fiers)YH( to reflect their restricted seman)HY(tics)YH(. + )EP( + + + + )0 2 42 H(2.8)WB 136 Sn()WB 46 Sn( Mapping for Local Elements and Attributes)EA()EH( + + )0 P(XML Schema element and attribute defi)HY(ni)HY(tions)YH( are called local + if they appear within a complex type defi)HY(ni)HY(tion)YH(, an element group + defi)HY(ni)HY(tion)YH(, or an attribute group defi)HY(ni)HY(tions)YH(. + )EP( + + )0 P(Local XML Schema element and attribute defi)HY(ni)HY(tions)YH( have the same + C++ mapping. There)HY(fore)YH(, in this section, local elements and + attributes are collec)HY(tively)YH( called members. + )EP( + + )0 P(While there are many differ)HY(ent)YH( member cardi)HY(nal)HY(ity)YH( combi)HY(na)HY(tions)YH( + \201deter)HY(mined)YH( by the )SM(use)ES( attribute for attributes and + the )SM(minOc)HY(curs)YH()ES( and )SM(maxOc)HY(curs)YH()ES( attributes + for elements\202, the mapping divides all possi)HY(ble)YH( cardi)HY(nal)HY(ity)YH( + combi)HY(na)HY(tions)YH( into three cardi)HY(nal)HY(ity)YH( classes: + )EP( + + )0 DL( )0 DT()I(one)ES( + )DD(attributes: )SM(use == "required")ES( + )DD(attributes: )SM(use == "optional")ES( and has default or fixed value + )DD(elements: )SM(minOc)HY(curs)YH( == "1")ES( and )SM(maxOc)HY(curs)YH( == "1")ES( + + )0 DT()I(optional)ES( + )DD(attributes: )SM(use == "optional")ES( and doesn't have default or fixed value + )DD(elements: )SM(minOc)HY(curs)YH( == "0")ES( and )SM(maxOc)HY(curs)YH( == "1")ES( + + )0 DT()I(sequence)ES( + )DD(elements: )SM(maxOc)HY(curs)YH( > "1")ES( + )LD( + + )0 P(An optional attribute with a default or fixed value acquires this value + if the attribute hasn't been spec)HY(i)HY(fied)YH( in an instance docu)HY(ment)YH( \201see + )0 92 1 A(Appendix A, "Default and Fixed Values")92 0 TN TL()Ec /AF f D(\202. This + mapping places such optional attributes to the One cardi)HY(nal)HY(ity)YH( + class.)EP( + + )0 P(A member is mapped to a set of public type defi)HY(ni)HY(tions)YH( + \201)SM(typedef)ES(s\202 and a set of public acces)HY(sor)YH( and modi)HY(fier)YH( + func)HY(tions)YH(. Type defi)HY(ni)HY(tions)YH( have names derived from the member's + name. The acces)HY(sor)YH( and modi)HY(fier)YH( func)HY(tions)YH( have the same name as the + member. For example: + )EP( + + ) 5 42 PR(<complexType name="object"> + <sequence> + <element name="member" type="string"/> + </sequence> +</complexType>)RP( + + )0 P(is mapped to:)EP( + + ) 11 41 PR(class object: xml_schema::type +{ +public: + typedef xml_schema::string member_type; + + const member_type& + member \201\202 const; + + ... + +};)RP( + + )0 P(In addi)HY(tion)YH(, if a member has a default or fixed value, a static + acces)HY(sor)YH( func)HY(tion)YH( is gener)HY(ated)YH( that returns this value. For + example:)EP( + +) 3 55 PR(<complexType name="object"> + <attribute name="data" type="string" default="test"/> +</complexType>)RP( + + )0 P(is mapped to:)EP( + + ) 14 39 PR(class object: xml_schema::type +{ +public: + typedef xml_schema::string data_type; + + const data_type& + data \201\202 const; + + static const data_type& + data_default_value \201\202; + + ... + +};)RP( + + )0 P(Names and seman)HY(tics)YH( of type defi)HY(ni)HY(tions)YH( for the member as well + as signa)HY(tures)YH( of the acces)HY(sor)YH( and modi)HY(fier)YH( func)HY(tions)YH( depend on + the member's cardi)HY(nal)HY(ity)YH( class and are described in the follow)HY(ing)YH( + sub-sections. + )EP( + + + )0 3 43 H(2.8.1)WB 137 Sn()WB 47 Sn( Mapping for Members with the One Cardi)HY(nal)HY(ity)YH( Class)EA()EH( + + )0 P(For the One cardi)HY(nal)HY(ity)YH( class, the type defi)HY(ni)HY(tions)YH( consist of + an alias for the member's type with the name created by append)HY(ing)YH( + the )SM(_type)ES( suffix to the member's name. + )EP( + + )0 P(The acces)HY(sor)YH( func)HY(tions)YH( come in constant and non-constant versions. + The constant acces)HY(sor)YH( func)HY(tion)YH( returns a constant refer)HY(ence)YH( to the + member and can be used for read-only access. The non-constant + version returns an unre)HY(stricted)YH( refer)HY(ence)YH( to the member and can + be used for read-write access. + )EP( + + )0 P(The first modi)HY(fier)YH( func)HY(tion)YH( expects an argu)HY(ment)YH( of type refer)HY(ence)YH( to + constant of the member's type. It makes a deep copy of its argu)HY(ment)YH(. + Except for member's types that are mapped to funda)HY(men)HY(tal)YH( C++ types, + the second modi)HY(fier)YH( func)HY(tion)YH( is provided that expects an argu)HY(ment)YH( + of type auto)HY(matic)YH( pointer to the member's type. It assumes owner)HY(ship)YH( + of the pointed to object and resets the passed auto)HY(matic)YH( pointer. + For instance:)EP( + + ) 5 42 PR(<complexType name="object"> + <sequence> + <element name="member" type="string"/> + </sequence> +</complexType>)RP( + + )0 P(is mapped to:)EP( + + ) 25 41 PR(class object: xml_schema::type +{ +public: + // Type definitions. + // + typedef xml_schema::string member_type; + + // Accessors. + // + const member_type& + member \201\202 const; + + member_type& + member \201\202; + + // Modifiers. + // + void + member \201const member_type&\202; + + void + member \201std::auto_ptr<member_type>\202; + ... + +};)RP( + + )0 P(In addi)HY(tion)YH(, if requested by spec)HY(i)HY(fy)HY(ing)YH( the )SM(--gener)HY(ate)YH(-detach)ES( + option and only for members of non-funda)HY(men)HY(tal)YH( C++ types, the mapping + provides a detach func)HY(tion)YH( that returns an auto)HY(matic)YH( pointer to the + member's type, for example:)EP( + + ) 10 30 PR(class object: xml_schema::type +{ +public: + ... + + std::auto_ptr<member_type> + detach_member \201\202; + ... + +};)RP( + + )0 P(This func)HY(tion)YH( detaches the value from the tree leaving the member + value unini)HY(tial)HY(ized)YH(. Access)HY(ing)YH( such an unini)HY(tial)HY(ized)YH( value prior to + re-initial)HY(iz)HY(ing)YH( it results in unde)HY(fined)YH( behav)HY(ior)YH(.)EP( + + )0 P(The follow)HY(ing)YH( code shows how one could use this mapping:)EP( + + ) 16 66 PR(void +f \201object& o\202 +{ + using xml_schema::string; + + string s \201o.member \201\202\202; // get + object::member_type& sr \201o.member \201\202\202; // get + + o.member \201"hello"\202; // set, deep copy + o.member \201\202 = "hello"; // set, deep copy + + std::auto_ptr<string> p \201new string \201"hello"\202\202; + o.member \201p\202; // set, assumes ownership + p = o.detach_member \201\202; // detach, member is uninitialized + o.member \201p\202; // re-attach +})RP( + + +)0 3 44 H(2.8.2)WB 138 Sn()WB 48 Sn( Mapping for Members with the Optional Cardi)HY(nal)HY(ity)YH( Class)EA()EH( + + )0 P(For the Optional cardi)HY(nal)HY(ity)YH( class, the type defi)HY(ni)HY(tions)YH( consist of + an alias for the member's type with the name created by append)HY(ing)YH( + the )SM(_type)ES( suffix to the member's name and an alias for + the container type with the name created by append)HY(ing)YH( the + )SM(_optional)ES( suffix to the member's name. + )EP( + + )0 P(Unlike acces)HY(sor)YH( func)HY(tions)YH( for the One cardi)HY(nal)HY(ity)YH( class, acces)HY(sor)YH( + func)HY(tions)YH( for the Optional cardi)HY(nal)HY(ity)YH( class return refer)HY(ences)YH( to + corre)HY(spond)HY(ing)YH( contain)HY(ers)YH( rather than directly to members. The + acces)HY(sor)YH( func)HY(tions)YH( come in constant and non-constant versions. + The constant acces)HY(sor)YH( func)HY(tion)YH( returns a constant refer)HY(ence)YH( to + the container and can be used for read-only access. The non-constant + version returns an unre)HY(stricted)YH( refer)HY(ence)YH( to the container + and can be used for read-write access. + )EP( + + )0 P(The modi)HY(fier)YH( func)HY(tions)YH( are over)HY(loaded)YH( for the member's + type and the container type. The first modi)HY(fier)YH( func)HY(tion)YH( + expects an argu)HY(ment)YH( of type refer)HY(ence)YH( to constant of the + member's type. It makes a deep copy of its argu)HY(ment)YH(. + Except for member's types that are mapped to funda)HY(men)HY(tal)YH( C++ types, + the second modi)HY(fier)YH( func)HY(tion)YH( is provided that expects an argu)HY(ment)YH( + of type auto)HY(matic)YH( pointer to the member's type. It assumes owner)HY(ship)YH( + of the pointed to object and resets the passed auto)HY(matic)YH( pointer. + The last modi)HY(fier)YH( func)HY(tion)YH( expects an argu)HY(ment)YH( of type refer)HY(ence)YH( + to constant of the container type. It makes a deep copy of its + argu)HY(ment)YH(. For instance: + )EP( + + ) 5 56 PR(<complexType name="object"> + <sequence> + <element name="member" type="string" minOccurs="0"/> + </sequence> +</complexType>)RP( + + )0 P(is mapped to:)EP( + + ) 30 48 PR(class object: xml_schema::type +{ +public: + // Type definitions. + // + typedef xml_schema::string member_type; + typedef optional<member_type> member_optional; + + // Accessors. + // + const member_optional& + member \201\202 const; + + member_optional& + member \201\202; + + // Modifiers. + // + void + member \201const member_type&\202; + + void + member \201std::auto_ptr<member_type>\202; + + void + member \201const member_optional&\202; + + ... + +};)RP( + + + )0 P(The )SM(optional)ES( class template is defined in an + imple)HY(men)HY(ta)HY(tion)YH(-specific names)HY(pace)YH( and has the follow)HY(ing)YH( + inter)HY(face)YH(. The )SM(auto_ptr)ES(-based construc)HY(tor)YH( + and modi)HY(fier)YH( func)HY(tion)YH( are only avail)HY(able)YH( if the template + argu)HY(ment)YH( is not a funda)HY(men)HY(tal)YH( C++ type. + )EP( + + ) 97 52 PR(template <typename X> +class optional +{ +public: + optional \201\202; + + // Makes a deep copy. + // + explicit + optional \201const X&\202; + + // Assumes ownership. + // + explicit + optional \201std::auto_ptr<X>\202; + + optional \201const optional&\202; + +public: + optional& + operator= \201const X&\202; + + optional& + operator= \201const optional&\202; + + // Pointer-like interface. + // +public: + const X* + operator-> \201\202 const; +)WR( + X* + operator-> \201\202; + + const X& + operator* \201\202 const; + + X& + operator* \201\202; + + typedef void \201optional::*bool_convertible\202 \201\202; + operator bool_convertible \201\202 const; + + // Get/set interface. + // +public: + bool + present \201\202 const; + + const X& + get \201\202 const; + + X& + get \201\202; + + // Makes a deep copy. + // + void + set \201const X&\202; + + // Assumes ownership.)WR( + // + void + set \201std::auto_ptr<X>\202; + + // Detach and return the contained value. + // + std::auto_ptr<X> + detach \201\202; + + void + reset \201\202; +}; + +template <typename X> +bool +operator== \201const optional<X>&, const optional<X>&\202; + +template <typename X> +bool +operator!= \201const optional<X>&, const optional<X>&\202; + +template <typename X> +bool +operator< \201const optional<X>&, const optional<X>&\202; + +template <typename X> +bool +operator> \201const optional<X>&, const optional<X>&\202; + +template <typename X>)WR( +bool +operator<= \201const optional<X>&, const optional<X>&\202; + +template <typename X> +bool +operator>= \201const optional<X>&, const optional<X>&\202;)RP( + + + )0 P(The follow)HY(ing)YH( code shows how one could use this mapping:)EP( + + ) 32 62 PR(void +f \201object& o\202 +{ + using xml_schema::string; + + if \201o.member \201\202.present \201\202\202 // test + { + string& s \201o.member \201\202.get \201\202\202; // get + o.member \201"hello"\202; // set, deep copy + o.member \201\202.set \201"hello"\202; // set, deep copy + o.member \201\202.reset \201\202; // reset + } + + // Same as above but using pointer notation: + // + if \201o.member \201\202\202 // test + { + string& s \201*o.member \201\202\202; // get + o.member \201"hello"\202; // set, deep copy + *o.member \201\202 = "hello"; // set, deep copy + o.member \201\202.reset \201\202; // reset + } + + std::auto_ptr<string> p \201new string \201"hello"\202\202; + o.member \201p\202; // set, assumes ownership + + p = new string \201"hello"\202; + o.member \201\202.set \201p\202; // set, assumes ownership + + p = o.member \201\202.detach \201\202; // detach, member is reset + o.member \201\202.set \201p\202; // re-attach)WR( +})RP( + + + )0 3 45 H(2.8.3)WB 139 Sn()WB 49 Sn( Mapping for Members with the Sequence Cardi)HY(nal)HY(ity)YH( Class)EA()EH( + + )0 P(For the Sequence cardi)HY(nal)HY(ity)YH( class, the type defi)HY(ni)HY(tions)YH( consist of an + alias for the member's type with the name created by append)HY(ing)YH( + the )SM(_type)ES( suffix to the member's name, an alias of + the container type with the name created by append)HY(ing)YH( the + )SM(_sequence)ES( suffix to the member's name, an alias of + the iter)HY(a)HY(tor)YH( type with the name created by append)HY(ing)YH( the + )SM(_iter)HY(a)HY(tor)YH()ES( suffix to the member's name, and an alias + of the constant iter)HY(a)HY(tor)YH( type with the name created by append)HY(ing)YH( the + )SM(_const_iter)HY(a)HY(tor)YH()ES( suffix to the member's name. + )EP( + + )0 P(The acces)HY(sor)YH( func)HY(tions)YH( come in constant and non-constant versions. + The constant acces)HY(sor)YH( func)HY(tion)YH( returns a constant refer)HY(ence)YH( to the + container and can be used for read-only access. The non-constant + version returns an unre)HY(stricted)YH( refer)HY(ence)YH( to the container and can + be used for read-write access. + )EP( + + )0 P(The modi)HY(fier)YH( func)HY(tion)YH( expects an argu)HY(ment)YH( of type refer)HY(ence)YH( to + constant of the container type. The modi)HY(fier)YH( func)HY(tion)YH( + makes a deep copy of its argu)HY(ment)YH(. For instance: + )EP( + + + ) 5 64 PR(<complexType name="object"> + <sequence> + <element name="member" type="string" minOccurs="unbounded"/> + </sequence> +</complexType>)RP( + + )0 P(is mapped to:)EP( + + ) 26 64 PR(class object: xml_schema::type +{ +public: + // Type definitions. + // + typedef xml_schema::string member_type; + typedef sequence<member_type> member_sequence; + typedef member_sequence::iterator member_iterator; + typedef member_sequence::const_iterator member_const_iterator; + + // Accessors. + // + const member_sequence& + member \201\202 const; + + member_sequence& + member \201\202; + + // Modifier. + // + void + member \201const member_sequence&\202; + + ... + +};)RP( + + )0 P(The )SM(sequence)ES( class template is defined in an + imple)HY(men)HY(ta)HY(tion)YH(-specific names)HY(pace)YH(. It conforms to the + sequence inter)HY(face)YH( as defined by the ISO/ANSI Stan)HY(dard)YH( for + C++ \201ISO/IEC 14882:1998, Section 23.1.1, "Sequences"\202. + Prac)HY(ti)HY(cally)YH(, this means that you can treat such a sequence + as if it was )SM(std::vector)ES(. Two notable exten)HY(sions)YH( + to the stan)HY(dard)YH( inter)HY(face)YH( that are avail)HY(able)YH( only for + sequences of non-funda)HY(men)HY(tal)YH( C++ types are the addi)HY(tion)YH( of + the over)HY(loaded)YH( )SM(push_back)ES( and )SM(insert)ES( + as well as the )SM(detach_back)ES( and )SM(detach)ES( + member func)HY(tions)YH(. The addi)HY(tional)YH( )SM(push_back)ES( and + )SM(insert)ES( func)HY(tions)YH( accept an auto)HY(matic)YH( pointer to the + element type instead of the constant refer)HY(ence)YH(. They assume + owner)HY(ship)YH( of the pointed to object and resets the passed + auto)HY(matic)YH( pointer. The )SM(detach_back)ES( and + )SM(detach)ES( func)HY(tions)YH( detach the element + value from the sequence container and, by default, remove + the element from the sequence. These addi)HY(tional)YH( func)HY(tions)YH( + have the follow)HY(ing)YH( signa)HY(tures)YH(:)EP( + + ) 22 46 PR(template <typename X> +class sequence +{ +public: + ... + + void + push_back \201std::auto_ptr<X>\202 + + iterator + insert \201iterator position, std::auto_ptr<X>\202 + + std::auto_ptr<X> + detach_back \201bool pop = true\202; + + iterator + detach \201iterator position, + std::auto_ptr<X>& result, + bool erase = true\202 + + ... +})RP( + + )0 P(The follow)HY(ing)YH( code shows how one could use this mapping:)EP( + + ) 30 66 PR(void +f \201object& o\202 +{ + using xml_schema::string; + + object::member_sequence& s \201o.member \201\202\202; + + // Iteration. + // + for \201object::member_iterator i \201s.begin \201\202\202; i != s.end \201\202; ++i\202 + { + string& value \201*i\202; + } + + // Modification. + // + s.push_back \201"hello"\202; // deep copy + + std::auto_ptr<string> p \201new string \201"hello"\202\202; + s.push_back \201p\202; // assumes ownership + p = s.detach_back \201\202; // detach and pop + s.push_back \201p\202; // re-append + + // Setting a new container. + // + object::member_sequence n; + n.push_back \201"one"\202; + n.push_back \201"two"\202; + o.member \201n\202; // deep copy +})RP( + + )0 2 46 H(2.9)WB 140 Sn()WB 50 Sn( Mapping for Global Elements)EA()EH( + + )0 P(An XML Schema element defi)HY(ni)HY(tion)YH( is called global if it appears + directly under the )SM(schema)ES( element. + A global element is a valid root of an instance docu)HY(ment)YH(. By + default, a global element is mapped to a set of over)HY(loaded)YH( + parsing and, option)HY(ally)YH(, seri)HY(al)HY(iza)HY(tion)YH( func)HY(tions)YH( with the + same name as the element. It is also possi)HY(ble)YH( to gener)HY(ate)YH( types + for root elements instead of parsing and seri)HY(al)HY(iza)HY(tion)YH( func)HY(tions)YH(. + This is primar)HY(ily)YH( useful to distin)HY(guish)YH( object models with the + same root type but with differ)HY(ent)YH( root elements. See + )0 51 1 A(Section 2.9.1, "Element Types")51 0 TN TL()Ec /AF f D( for details. + It is also possi)HY(ble)YH( to request the gener)HY(a)HY(tion)YH( of an element map + which allows uniform parsing and seri)HY(al)HY(iza)HY(tion)YH( of multi)HY(ple)YH( root + elements. See )0 52 1 A(Section 2.9.2, "Element Map")52 0 TN TL()Ec /AF f D( + for details. + )EP( + + )0 P(The parsing func)HY(tions)YH( read XML instance docu)HY(ments)YH( and return + corre)HY(spond)HY(ing)YH( object models. Their signa)HY(tures)YH( + have the follow)HY(ing)YH( pattern \201)SM(type)ES( denotes + element's type and )SM(name)ES( denotes element's + name\202: + )EP( + + ) 2 19 PR(std::auto_ptr<type> +name \201....\202;)RP( + + )0 P(The process of parsing, includ)HY(ing)YH( the exact signa)HY(tures)YH( of the parsing + func)HY(tions)YH(, is the subject of )0 61 1 A(Chapter 3, "Parsing")61 0 TN TL()Ec /AF f D(. + )EP( + + )0 P(The seri)HY(al)HY(iza)HY(tion)YH( func)HY(tions)YH( write object models + back to XML instance docu)HY(ments)YH(. Their signa)HY(tures)YH( + have the follow)HY(ing)YH( pattern: + )EP( + + ) 2 41 PR(void +name \201<stream type>&, const type&, ....\202;)RP( + + )0 P(The process of seri)HY(al)HY(iza)HY(tion)YH(, includ)HY(ing)YH( the exact signa)HY(tures)YH( of the + seri)HY(al)HY(iza)HY(tion)YH( func)HY(tions)YH(, is the subject of )0 78 1 A(Chapter 4, + "Seri)HY(al)HY(iza)HY(tion)YH(")78 0 TN TL()Ec /AF f D(. + )EP( + + + )0 3 47 H(2.9.1)WB 141 Sn()WB 51 Sn( Element Types)EA()EH( + + )0 P(The gener)HY(a)HY(tion)YH( of element types is requested with the + )SM(--gener)HY(ate)YH(-element-map)ES( option. With this option + each global element is mapped to a C++ class with the + same name as the element. Such a class is derived from + )SM(xml_schema::element_type)ES( and contains the same set + of type defi)HY(ni)HY(tions)YH(, construc)HY(tors)YH(, and member func)HY(tion)YH( as would a + type contain)HY(ing)YH( a single element with the One cardi)HY(nal)HY(ity)YH( class + named )SM("value")ES(. In addi)HY(tion)YH(, the element type also + contains a set of member func)HY(tions)YH( for access)HY(ing)YH( the element + name and names)HY(pace)YH( as well as its value in a uniform manner. + For example:)EP( + + ) 7 34 PR(<complexType name="type"> + <sequence> + ... + </sequence> +</complexType> + +<element name="root" type="type"/>)RP( + +)0 P(is mapped to:)EP( + + ) 62 59 PR(class type +{ + ... +}; + +class root: public xml_schema::element_type +{ +public: + // Element value. + // + typedef type value_type; + + const value_type& + value \201\202 const; + + value_type& + value \201\202; + + void + value \201const value_type&\202; + + void + value \201std::auto_ptr<value_type>\202; + + // Constructors. + // + root \201const value_type&\202; + + root \201std::auto_ptr<value_type>\202; + + root \201const xercesc::DOMElement&, xml_schema::flags = 0\202;)WR( + + root \201const root&, xml_schema::flags = 0\202; + + virtual root* + _clone \201xml_schema::flags = 0\202 const; + + // Element name and namespace. + // + static const std::string& + name \201\202; + + static const std::string& + namespace_ \201\202; + + virtual const std::string& + _name \201\202 const; + + virtual const std::string& + _namespace \201\202 const; + + // Element value as xml_schema::type. + // + virtual const xml_schema::type* + _value \201\202 const; + + virtual xml_schema::type* + _value \201\202; +}; + +void)WR( +operator<< \201xercesc::DOMElement&, const root&\202;)RP( + + )0 P(The )SM(xml_schema::element_type)ES( class is a common + base type for all element types and is defined as follows:)EP( + + ) 24 39 PR(namespace xml_schema +{ + class element_type + { + public: + virtual + ~element_type \201\202; + + virtual element_type* + _clone \201flags f = 0\202 const = 0; + + virtual const std::basic_string<C>& + _name \201\202 const = 0; + + virtual const std::basic_string<C>& + _namespace \201\202 const = 0; + + virtual xml_schema::type* + _value \201\202 = 0; + + virtual const xml_schema::type* + _value \201\202 const = 0; + }; +})RP( + + )0 P(The )SM(_value\201\202)ES( member func)HY(tion)YH( returns a pointer to + the element value or 0 if the element is of a funda)HY(men)HY(tal)YH( C++ + type and there)HY(fore)YH( is not derived from )SM(xml_schema::type)ES(. + )EP( + + )0 P(Unlike parsing and seri)HY(al)HY(iza)HY(tion)YH( func)HY(tions)YH(, element types + are only capable of parsing and seri)HY(al)HY(iz)HY(ing)YH( from/to a + )SM(DOMEle)HY(ment)YH()ES( object. This means that the appli)HY(ca)HY(tion)YH( + will need to perform its own XML-to-DOM parsing and DOM-to-XML + seri)HY(al)HY(iza)HY(tion)YH(. The follow)HY(ing)YH( section describes a mech)HY(a)HY(nism)YH( + provided by the mapping to uniformly parse and seri)HY(al)HY(ize)YH( + multi)HY(ple)YH( root elements.)EP( + + + )0 3 48 H(2.9.2)WB 142 Sn()WB 52 Sn( Element Map)EA()EH( + + )0 P(When element types are gener)HY(ated)YH( for root elements it is also + possi)HY(ble)YH( to request the gener)HY(a)HY(tion)YH( of an element map with the + )SM(--gener)HY(ate)YH(-element-map)ES( option. The element map + allows uniform parsing and seri)HY(al)HY(iza)HY(tion)YH( of multi)HY(ple)YH( root + elements via the common )SM(xml_schema::element_type)ES( + base type. The )SM(xml_schema::element_map)ES( class is + defined as follows:)EP( + + ) 12 58 PR(namespace xml_schema +{ + class element_map + { + public: + static std::auto_ptr<xml_schema::element_type> + parse \201const xercesc::DOMElement&, flags = 0\202; + + static void + serialize \201xercesc::DOMElement&, const element_type&\202; + }; +})RP( + + )0 P(The )SM(parse\201\202)ES( func)HY(tion)YH( creates the corre)HY(spond)HY(ing)YH( + element type object based on the element name and names)HY(pace)YH( + and returns it as a pointer to )SM(xml_schema::element_type)ES(. + The )SM(seri)HY(al)HY(ize)YH(\201\202)ES( func)HY(tion)YH( seri)HY(al)HY(izes)YH( the passed element + object to )SM(DOMEle)HY(ment)YH()ES(. Note that in case of + )SM(seri)HY(al)HY(ize)YH(\201\202)ES(, the )SM(DOMEle)HY(ment)YH()ES( object + should have the correct name and names)HY(pace)YH(. If no element type is + avail)HY(able)YH( for an element, both func)HY(tions)YH( throw the + )SM(xml_schema::no_element_info)ES( excep)HY(tion)YH(:)EP( + + ) 14 66 PR(struct no_element_info: virtual exception +{ + no_element_info \201const std::basic_string<C>& element_name, + const std::basic_string<C>& element_namespace\202; + + const std::basic_string<C>& + element_name \201\202 const; + + const std::basic_string<C>& + element_namespace \201\202 const; + + virtual const char* + what \201\202 const throw \201\202; +};)RP( + + )0 P(The appli)HY(ca)HY(tion)YH( can discover the actual type of the element + object returned by )SM(parse\201\202)ES( either using + )SM(dynamic_cast)ES( or by compar)HY(ing)YH( element names and + names)HY(paces)YH(. The follow)HY(ing)YH( code frag)HY(ments)YH( illus)HY(trate)YH( how the + element map can be used:)EP( + + ) 18 50 PR(// Parsing. +// +DOMElement& e = ... // Parse XML to DOM. + +auto_ptr<xml_schema::element_type> r \201 + xml_schema::element_map::parse \201e\202\202; + +if \201root1 r1 = dynamic_cast<root1*> \201r.get \201\202\202\202 +{ + ... +} +else if \201r->_name == root2::name \201\202 && + r->_namespace \201\202 == root2::namespace_ \201\202\202 +{ + root2& r2 \201static_cast<root2&> \201*r\202\202; + + ... +})RP( + + ) 13 68 PR(// Serialization. +// +xml_schema::element_type& r = ... + +string name \201r._name \201\202\202; +string ns \201r._namespace \201\202\202; + +DOMDocument& doc = ... // Create a new DOMDocument with name and ns. +DOMElement& e \201*doc->getDocumentElement \201\202\202; + +xml_schema::element_map::serialize \201e, r\202; + +// Serialize DOMDocument to XML.)RP( + + + + )0 2 49 H(2.10)WB 143 Sn()WB 53 Sn( Mapping for Global Attributes)EA()EH( + + )0 P(An XML Schema attribute defi)HY(ni)HY(tion)YH( is called global if it appears + directly under the )SM(schema)ES( element. A global + attribute does not have any mapping. + )EP( + + + + )0 2 50 H(2.11)WB 144 Sn()WB 54 Sn( Mapping for )SM(xsi:type)ES( and Substi)HY(tu)HY(tion)YH( + Groups)EA()EH( + + )0 P(The mapping provides optional support for the XML Schema poly)HY(mor)HY(phism)YH( + features \201)SM(xsi:type)ES( and substi)HY(tu)HY(tion)YH( groups\202 which can + be requested with the )SM(--gener)HY(ate)YH(-poly)HY(mor)HY(phic)YH()ES( option. + When used, the dynamic type of a member may be differ)HY(ent)YH( from + its static type. Consider the follow)HY(ing)YH( schema defi)HY(ni)HY(tion)YH( and + instance docu)HY(ment)YH(: + )EP( + + ) 28 62 PR(<!-- test.xsd --> +<schema> + <complexType name="base"> + <attribute name="text" type="string"/> + </complexType> + + <complexType name="derived"> + <complexContent> + <extension base="base"> + <attribute name="extra-text" type="string"/> + </extension> + </complexContent> + </complexType> + + <complexType name="root_type"> + <sequence> + <element name="item" type="base" maxOccurs="unbounded"/> + </sequence> + </complexType> + + <element name="root" type="root_type"/> +</schema> + +<!-- test.xml --> +<root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <item text="hello"/> + <item text="hello" extra-text="world" xsi:type="derived"/> +</root>)RP( + + )0 P(In the result)HY(ing)YH( object model, the container for + the )SM(root::item)ES( member will have two elements: + the first element's type will be )SM(base)ES( while + the second element's \201dynamic\202 type will be + )SM(derived)ES(. This can be discov)HY(ered)YH( using the + )SM(dynamic_cast)ES( oper)HY(a)HY(tor)YH( as shown in the follow)HY(ing)YH( + example: + )EP( + + ) 17 56 PR(void +f \201root& r\202 +{ + for \201root::item_const_iterator i \201r.item \201\202.begin \201\202\202; + i != r.item \201\202.end \201\202 + ++i\202 + { + if \201derived* d = dynamic_cast<derived*> \201&\201*i\202\202\202 + { + // derived + } + else + { + // base + } + } +})RP( + + )0 P(The )SM(_clone)ES( virtual func)HY(tion)YH( should be used instead of + copy construc)HY(tors)YH( to make copies of members that might use + poly)HY(mor)HY(phism)YH(: + )EP( + + ) 10 56 PR(void +f \201root& r\202 +{ + for \201root::item_const_iterator i \201r.item \201\202.begin \201\202\202; + i != r.item \201\202.end \201\202 + ++i\202 + { + std::auto_ptr<base> c \201i->_clone \201\202\202; + } +})RP( + + )0 P(The mapping can often auto)HY(mat)HY(i)HY(cally)YH( deter)HY(mine)YH( which types are + poly)HY(mor)HY(phic)YH( based on the substi)HY(tu)HY(tion)YH( group decla)HY(ra)HY(tions)YH(. However, + if your XML vocab)HY(u)HY(lary)YH( is not using substi)HY(tu)HY(tion)YH( groups or if + substi)HY(tu)HY(tion)YH( groups are defined in a sepa)HY(rate)YH( schema, then you will + need to use the )SM(--poly)HY(mor)HY(phic)YH(-type)ES( option to specify + which types are poly)HY(mor)HY(phic)YH(. When using this option you only need + to specify the root of a poly)HY(mor)HY(phic)YH( type hier)HY(ar)HY(chy)YH( and the mapping + will assume that all the derived types are also poly)HY(mor)HY(phic)YH(. + Also note that you need to specify this option when compil)HY(ing)YH( every + schema file that refer)HY(ences)YH( the poly)HY(mor)HY(phic)YH( type. Consider the follow)HY(ing)YH( + two schemas as an example:)EP( + + ) 13 55 PR(<!-- base.xsd --> +<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> + + <xs:complexType name="base"> + <xs:sequence> + <xs:element name="b" type="xs:int"/> + </xs:sequence> + </xs:complexType> + + <!-- substitution group root --> + <xs:element name="base" type="base"/> + +</xs:schema>)RP( + + ) 18 70 PR(<!-- derived.xsd --> +<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> + + <include schemaLocation="base.xsd"/> + + <xs:complexType name="derived"> + <xs:complexContent> + <xs:extension base="base"> + <xs:sequence> + <xs:element name="d" type="xs:string"/> + </xs:sequence> + </xs:extension> + </xs:complexContent> + </xs:complexType> + + <xs:element name="derived" type="derived" substitutionGroup="base"/> + +</xs:schema>)RP( + + )0 P(In this example we need to specify ")SM(--poly)HY(mor)HY(phic)YH(-type base)ES(" + when compil)HY(ing)YH( both schemas because the substi)HY(tu)HY(tion)YH( group is declared + in a schema other than the one defin)HY(ing)YH( type )SM(base)ES(.)EP( + + )0 P(You can also indi)HY(cate)YH( that all types should be treated as poly)HY(mor)HY(phic)YH( + with the )SM(--poly)HY(mor)HY(phic)YH(-type-all)ES(. However, this may result + in slower gener)HY(ated)YH( code with a greater foot)HY(print)YH(.)EP( + + + + + + )0 2 51 H(2.12)WB 145 Sn()WB 55 Sn( Mapping for )SM(any)ES( and )SM(anyAt)HY(tribute)YH()ES()EA()EH( + + )0 P(For the XML Schema )SM(any)ES( and )SM(anyAt)HY(tribute)YH()ES( + wild)HY(cards)YH( an optional mapping can be requested with the + )SM(--gener)HY(ate)YH(-wild)HY(card)YH()ES( option. The mapping repre)HY(sents)YH( + the content matched by wild)HY(cards)YH( as DOM frag)HY(ments)YH(. Because the + DOM API is used to access such content, the Xerces-C++ runtime + should be initial)HY(ized)YH( by the appli)HY(ca)HY(tion)YH( prior to parsing and + should remain initial)HY(ized)YH( for the life)HY(time)YH( of objects with + the wild)HY(card)YH( content. For more infor)HY(ma)HY(tion)YH( on the Xerces-C++ + runtime initial)HY(iza)HY(tion)YH( see )0 62 1 A(Section 3.1, + "Initial)HY(iz)HY(ing)YH( the Xerces-C++ Runtime")62 0 TN TL()Ec /AF f D(. + )EP( + + )0 P(The mapping for )SM(any)ES( is similar to the mapping for + local elements \201see )0 46 1 A(Section 2.8, "Mapping for Local + Elements and Attributes")46 0 TN TL()Ec /AF f D(\202 except that the type used in the + wild)HY(card)YH( mapping is )SM(xercesc::DOMEle)HY(ment)YH()ES(. As with local + elements, the mapping divides all possi)HY(ble)YH( cardi)HY(nal)HY(ity)YH( combi)HY(na)HY(tions)YH( + into three cardi)HY(nal)HY(ity)YH( classes: )I(one)ES(, )I(optional)ES(, and + )I(sequence)ES(. + )EP( + + )0 P(The mapping for )SM(anyAt)HY(tribute)YH()ES( repre)HY(sents)YH( the attributes + matched by this wild)HY(card)YH( as a set of )SM(xercesc::DOMAttr)ES( + objects with a key being the attribute's name and names)HY(pace)YH(.)EP( + + )0 P(Similar to local elements and attributes, the )SM(any)ES( and + )SM(anyAt)HY(tribute)YH()ES( wild)HY(cards)YH( are mapped to a set of public type + defi)HY(ni)HY(tions)YH( \201type)HY(defs)YH(\202 and a set of public acces)HY(sor)YH( and modi)HY(fier)YH( + func)HY(tions)YH(. Type defi)HY(ni)HY(tions)YH( have names derived from )SM("any")ES( + for the )SM(any)ES( wild)HY(card)YH( and )SM("any_attribute")ES( + for the )SM(anyAt)HY(tribute)YH()ES( wild)HY(card)YH(. The acces)HY(sor)YH( and modi)HY(fier)YH( + func)HY(tions)YH( are named )SM("any")ES( for the )SM(any)ES( wild)HY(card)YH( + and )SM("any_attribute")ES( for the )SM(anyAt)HY(tribute)YH()ES( + wild)HY(card)YH(. Subse)HY(quent)YH( wild)HY(cards)YH( in the same type have escaped names + such as )SM("any1")ES( or )SM("any_attribute1")ES(. + )EP( + + )0 P(Because Xerces-C++ DOM nodes always belong to a )SM(DOMDoc)HY(u)HY(ment)YH()ES(, + each type with a wild)HY(card)YH( has an asso)HY(ci)HY(ated)YH( )SM(DOMDoc)HY(u)HY(ment)YH()ES( + object. The refer)HY(ence)YH( to this object can be obtained using the acces)HY(sor)YH( + func)HY(tion)YH( called )SM(dom_docu)HY(ment)YH()ES(. The access to the docu)HY(ment)YH( + object from the appli)HY(ca)HY(tion)YH( code may be neces)HY(sary)YH( to create or modify + the wild)HY(card)YH( content. For example: + )EP( + + ) 6 37 PR(<complexType name="object"> + <sequence> + <any namespace="##other"/> + </sequence> + <anyAttribute namespace="##other"/> +</complexType>)RP( + + )0 P(is mapped to:)EP( + + ) 37 73 PR(class object: xml_schema::type +{ +public: + // any + // + const xercesc::DOMElement& + any \201\202 const; + + void + any \201const xercesc::DOMElement&\202; + + ... + + // any_attribute + // + typedef attribute_set any_attribute_set; + typedef any_attribute_set::iterator any_attribute_iterator; + typedef any_attribute_set::const_iterator any_attribute_const_iterator; + + const any_attribute_set& + any_attribute \201\202 const; + + any_attribute_set& + any_attribute \201\202; + + ... + + // DOMDocument object for wildcard content. + // + const xercesc::DOMDocument& + dom_document \201\202 const;)WR( + + xercesc::DOMDocument& + dom_document \201\202; + + ... +};)RP( + + + )0 P(Names and seman)HY(tics)YH( of type defi)HY(ni)HY(tions)YH( for the wild)HY(cards)YH( as well + as signa)HY(tures)YH( of the acces)HY(sor)YH( and modi)HY(fier)YH( func)HY(tions)YH( depend on the + wild)HY(card)YH( type as well as the cardi)HY(nal)HY(ity)YH( class for the )SM(any)ES( + wild)HY(card)YH(. They are described in the follow)HY(ing)YH( sub-sections. + )EP( + + + )0 3 52 H(2.12.1)WB 146 Sn()WB 56 Sn( Mapping for )SM(any)ES( with the One Cardi)HY(nal)HY(ity)YH( Class)EA()EH( + + )0 P(For )SM(any)ES( with the One cardi)HY(nal)HY(ity)YH( class, + there are no type defi)HY(ni)HY(tions)YH(. The acces)HY(sor)YH( func)HY(tions)YH( come in + constant and non-constant versions. The constant acces)HY(sor)YH( func)HY(tion)YH( + returns a constant refer)HY(ence)YH( to )SM(xercesc::DOMEle)HY(ment)YH()ES( and + can be used for read-only access. The non-constant version returns + an unre)HY(stricted)YH( refer)HY(ence)YH( to )SM(xercesc::DOMEle)HY(ment)YH()ES( and can + be used for read-write access. + )EP( + + )0 P(The first modi)HY(fier)YH( func)HY(tion)YH( expects an argu)HY(ment)YH( of type refer)HY(ence)YH( + to constant )SM(xercesc::DOMEle)HY(ment)YH()ES( and makes a deep copy + of its argu)HY(ment)YH(. The second modi)HY(fier)YH( func)HY(tion)YH( expects an argu)HY(ment)YH( of + type pointer to )SM(xercesc::DOMEle)HY(ment)YH()ES(. This modi)HY(fier)YH( + func)HY(tion)YH( assumes owner)HY(ship)YH( of its argu)HY(ment)YH( and expects the element + object to be created using the DOM docu)HY(ment)YH( asso)HY(ci)HY(ated)YH( with this + instance. For example: + )EP( + + ) 5 30 PR(<complexType name="object"> + <sequence> + <any namespace="##other"/> + </sequence> +</complexType>)RP( + + )0 P(is mapped to:)EP( + + ) 22 35 PR(class object: xml_schema::type +{ +public: + // Accessors. + // + const xercesc::DOMElement& + any \201\202 const; + + xercesc::DOMElement& + any \201\202; + + // Modifiers. + // + void + any \201const xercesc::DOMElement&\202; + + void + any \201xercesc::DOMElement*\202; + + ... + +};)RP( + + + )0 P(The follow)HY(ing)YH( code shows how one could use this mapping:)EP( + + ) 10 66 PR(void +f \201object& o, const xercesc::DOMElement& e\202 +{ + using namespace xercesc; + + DOMElement& e1 \201o.any \201\202\202; // get + o.any \201e\202 // set, deep copy + DOMDocument& doc \201o.dom_document \201\202\202; + o.any \201doc.createElement \201...\202\202; // set, assumes ownership +})RP( + + )0 3 53 H(2.12.2)WB 147 Sn()WB 57 Sn( Mapping for )SM(any)ES( with the Optional Cardi)HY(nal)HY(ity)YH( Class)EA()EH( + + )0 P(For )SM(any)ES( with the Optional cardi)HY(nal)HY(ity)YH( class, the type + defi)HY(ni)HY(tions)YH( consist of an alias for the container type with name + )SM(any_optional)ES( \201or )SM(any1_optional)ES(, etc., for + subse)HY(quent)YH( wild)HY(cards)YH( in the type defi)HY(ni)HY(tion)YH(\202. + )EP( + + )0 P(Unlike acces)HY(sor)YH( func)HY(tions)YH( for the One cardi)HY(nal)HY(ity)YH( class, acces)HY(sor)YH( + func)HY(tions)YH( for the Optional cardi)HY(nal)HY(ity)YH( class return refer)HY(ences)YH( to + corre)HY(spond)HY(ing)YH( contain)HY(ers)YH( rather than directly to )SM(DOMEle)HY(ment)YH()ES(. + The acces)HY(sor)YH( func)HY(tions)YH( come in constant and non-constant versions. + The constant acces)HY(sor)YH( func)HY(tion)YH( returns a constant refer)HY(ence)YH( to + the container and can be used for read-only access. The non-constant + version returns an unre)HY(stricted)YH( refer)HY(ence)YH( to the container + and can be used for read-write access. + )EP( + + )0 P(The modi)HY(fier)YH( func)HY(tions)YH( are over)HY(loaded)YH( for )SM(xercesc::DOMEle)HY(ment)YH()ES( + and the container type. The first modi)HY(fier)YH( func)HY(tion)YH( expects an argu)HY(ment)YH( of + type refer)HY(ence)YH( to constant )SM(xercesc::DOMEle)HY(ment)YH()ES( and + makes a deep copy of its argu)HY(ment)YH(. The second modi)HY(fier)YH( func)HY(tion)YH( + expects an argu)HY(ment)YH( of type pointer to )SM(xercesc::DOMEle)HY(ment)YH()ES(. + This modi)HY(fier)YH( func)HY(tion)YH( assumes owner)HY(ship)YH( of its argu)HY(ment)YH( and expects + the element object to be created using the DOM docu)HY(ment)YH( asso)HY(ci)HY(ated)YH( + with this instance. The third modi)HY(fier)YH( func)HY(tion)YH( expects an argu)HY(ment)YH( + of type refer)HY(ence)YH( to constant of the container type and makes a + deep copy of its argu)HY(ment)YH(. For instance: + )EP( + + ) 5 44 PR(<complexType name="object"> + <sequence> + <any namespace="##other" minOccurs="0"/> + </sequence> +</complexType>)RP( + + )0 P(is mapped to:)EP( + + ) 29 40 PR(class object: xml_schema::type +{ +public: + // Type definitions. + // + typedef element_optional any_optional; + + // Accessors. + // + const any_optional& + any \201\202 const; + + any_optional& + any \201\202; + + // Modifiers. + // + void + any \201const xercesc::DOMElement&\202; + + void + any \201xercesc::DOMElement*\202; + + void + any \201const any_optional&\202; + + ... + +};)RP( + + + )0 P(The )SM(element_optional)ES( container is a + special)HY(iza)HY(tion)YH( of the )SM(optional)ES( class template described + in )0 48 1 A(Section 2.8.2, "Mapping for Members with the Optional + Cardi)HY(nal)HY(ity)YH( Class")48 0 TN TL()Ec /AF f D(. Its inter)HY(face)YH( is presented below: + )EP( + + ) 72 71 PR(class element_optional +{ +public: + explicit + element_optional \201xercesc::DOMDocument&\202; + + // Makes a deep copy. + // + element_optional \201const xercesc::DOMElement&, xercesc::DOMDocument&\202; + + // Assumes ownership. + // + element_optional \201xercesc::DOMElement*, xercesc::DOMDocument&\202; + + element_optional \201const element_optional&, xercesc::DOMDocument&\202; + +public: + element_optional& + operator= \201const xercesc::DOMElement&\202; + + element_optional& + operator= \201const element_optional&\202; + + // Pointer-like interface. + // +public: + const xercesc::DOMElement* + operator-> \201\202 const; + + xercesc::DOMElement* + operator-> \201\202;)WR( + + const xercesc::DOMElement& + operator* \201\202 const; + + xercesc::DOMElement& + operator* \201\202; + + typedef void \201element_optional::*bool_convertible\202 \201\202; + operator bool_convertible \201\202 const; + + // Get/set interface. + // +public: + bool + present \201\202 const; + + const xercesc::DOMElement& + get \201\202 const; + + xercesc::DOMElement& + get \201\202; + + // Makes a deep copy. + // + void + set \201const xercesc::DOMElement&\202; + + // Assumes ownership. + // + void)WR( + set \201xercesc::DOMElement*\202; + + void + reset \201\202; +}; + +bool +operator== \201const element_optional&, const element_optional&\202; + +bool +operator!= \201const element_optional&, const element_optional&\202;)RP( + + + )0 P(The follow)HY(ing)YH( code shows how one could use this mapping:)EP( + + ) 25 69 PR(void +f \201object& o, const xercesc::DOMElement& e\202 +{ + using namespace xercesc; + + DOMDocument& doc \201o.dom_document \201\202\202; + + if \201o.any \201\202.present \201\202\202 // test + { + DOMElement& e1 \201o.any \201\202.get \201\202\202; // get + o.any \201\202.set \201e\202; // set, deep copy + o.any \201\202.set \201doc.createElement \201...\202\202; // set, assumes ownership + o.any \201\202.reset \201\202; // reset + } + + // Same as above but using pointer notation: + // + if \201o.member \201\202\202 // test + { + DOMElement& e1 \201*o.any \201\202\202; // get + o.any \201e\202; // set, deep copy + o.any \201doc.createElement \201...\202\202; // set, assumes ownership + o.any \201\202.reset \201\202; // reset + } +})RP( + + + + )0 3 54 H(2.12.3)WB 148 Sn()WB 58 Sn( Mapping for )SM(any)ES( with the Sequence Cardi)HY(nal)HY(ity)YH( Class)EA()EH( + + )0 P(For )SM(any)ES( with the Sequence cardi)HY(nal)HY(ity)YH( class, the type + defi)HY(ni)HY(tions)YH( consist of an alias of the container type with name + )SM(any_sequence)ES( \201or )SM(any1_sequence)ES(, etc., for + subse)HY(quent)YH( wild)HY(cards)YH( in the type defi)HY(ni)HY(tion)YH(\202, an alias of the iter)HY(a)HY(tor)YH( + type with name )SM(any_iter)HY(a)HY(tor)YH()ES( \201or )SM(any1_iter)HY(a)HY(tor)YH()ES(, + etc., for subse)HY(quent)YH( wild)HY(cards)YH( in the type defi)HY(ni)HY(tion)YH(\202, and an alias + of the constant iter)HY(a)HY(tor)YH( type with name )SM(any_const_iter)HY(a)HY(tor)YH()ES( + \201or )SM(any1_const_iter)HY(a)HY(tor)YH()ES(, etc., for subse)HY(quent)YH( wild)HY(cards)YH( + in the type defi)HY(ni)HY(tion)YH(\202. + )EP( + + )0 P(The acces)HY(sor)YH( func)HY(tions)YH( come in constant and non-constant versions. + The constant acces)HY(sor)YH( func)HY(tion)YH( returns a constant refer)HY(ence)YH( to the + container and can be used for read-only access. The non-constant + version returns an unre)HY(stricted)YH( refer)HY(ence)YH( to the container and can + be used for read-write access. + )EP( + + )0 P(The modi)HY(fier)YH( func)HY(tion)YH( expects an argu)HY(ment)YH( of type refer)HY(ence)YH( to + constant of the container type. The modi)HY(fier)YH( func)HY(tion)YH( makes + a deep copy of its argu)HY(ment)YH(. For instance: + )EP( + + + ) 5 52 PR(<complexType name="object"> + <sequence> + <any namespace="##other" minOccurs="unbounded"/> + </sequence> +</complexType>)RP( + + )0 P(is mapped to:)EP( + + ) 25 58 PR(class object: xml_schema::type +{ +public: + // Type definitions. + // + typedef element_sequence any_sequence; + typedef any_sequence::iterator any_iterator; + typedef any_sequence::const_iterator any_const_iterator; + + // Accessors. + // + const any_sequence& + any \201\202 const; + + any_sequence& + any \201\202; + + // Modifier. + // + void + any \201const any_sequence&\202; + + ... + +};)RP( + + )0 P(The )SM(element_sequence)ES( container is a + special)HY(iza)HY(tion)YH( of the )SM(sequence)ES( class template described + in )0 49 1 A(Section 2.8.3, "Mapping for Members with the + Sequence Cardi)HY(nal)HY(ity)YH( Class")49 0 TN TL()Ec /AF f D(. Its inter)HY(face)YH( is similar to + the sequence inter)HY(face)YH( as defined by the ISO/ANSI Stan)HY(dard)YH( for + C++ \201ISO/IEC 14882:1998, Section 23.1.1, "Sequences"\202 and is + presented below: + )EP( + + ) 178 70 PR(class element_sequence +{ +public: + typedef xercesc::DOMElement value_type; + typedef xercesc::DOMElement* pointer; + typedef const xercesc::DOMElement* const_pointer; + typedef xercesc::DOMElement& reference; + typedef const xercesc::DOMElement& const_reference; + + typedef <implementation-defined> iterator; + typedef <implementation-defined> const_iterator; + typedef <implementation-defined> reverse_iterator; + typedef <implementation-defined> const_reverse_iterator; + + typedef <implementation-defined> size_type; + typedef <implementation-defined> difference_type; + typedef <implementation-defined> allocator_type; + +public: + explicit + element_sequence \201xercesc::DOMDocument&\202; + + // DOMElement cannot be default-constructed. + // + // explicit + // element_sequence \201size_type n\202; + + element_sequence \201size_type n, + const xercesc::DOMElement&, + xercesc::DOMDocument&\202; +)WR( + template <typename I> + element_sequence \201const I& begin, + const I& end, + xercesc::DOMDocument&\202; + + element_sequence \201const element_sequence&, xercesc::DOMDocument&\202; + + element_sequence& + operator= \201const element_sequence&\202; + +public: + void + assign \201size_type n, const xercesc::DOMElement&\202; + + template <typename I> + void + assign \201const I& begin, const I& end\202; + +public: + // This version of resize can only be used to shrink the + // sequence because DOMElement cannot be default-constructed. + // + void + resize \201size_type\202; + + void + resize \201size_type, const xercesc::DOMElement&\202; + +public: + size_type)WR( + size \201\202 const; + + size_type + max_size \201\202 const; + + size_type + capacity \201\202 const; + + bool + empty \201\202 const; + + void + reserve \201size_type\202; + + void + clear \201\202; + +public: + const_iterator + begin \201\202 const; + + const_iterator + end \201\202 const; + + iterator + begin \201\202; + + iterator + end \201\202; +)WR( + const_reverse_iterator + rbegin \201\202 const; + + const_reverse_iterator + rend \201\202 const + + reverse_iterator + rbegin \201\202; + + reverse_iterator + rend \201\202; + +public: + xercesc::DOMElement& + operator[] \201size_type\202; + + const xercesc::DOMElement& + operator[] \201size_type\202 const; + + xercesc::DOMElement& + at \201size_type\202; + + const xercesc::DOMElement& + at \201size_type\202 const; + + xercesc::DOMElement& + front \201\202; + + const xercesc::DOMElement& + front \201\202 const;)WR( + + xercesc::DOMElement& + back \201\202; + + const xercesc::DOMElement& + back \201\202 const; + +public: + // Makes a deep copy. + // + void + push_back \201const xercesc::DOMElement&\202; + + // Assumes ownership. + // + void + push_back \201xercesc::DOMElement*\202; + + void + pop_back \201\202; + + // Makes a deep copy. + // + iterator + insert \201iterator position, const xercesc::DOMElement&\202; + + // Assumes ownership. + // + iterator + insert \201iterator position, xercesc::DOMElement*\202;)WR( + + void + insert \201iterator position, size_type n, const xercesc::DOMElement&\202; + + template <typename I> + void + insert \201iterator position, const I& begin, const I& end\202; + + iterator + erase \201iterator position\202; + + iterator + erase \201iterator begin, iterator end\202; + +public: + // Note that the DOMDocument object of the two sequences being + // swapped should be the same. + // + void + swap \201sequence& x\202; +}; + +inline bool +operator== \201const element_sequence&, const element_sequence&\202; + +inline bool +operator!= \201const element_sequence&, const element_sequence&\202;)RP( + + + )0 P(The follow)HY(ing)YH( code shows how one could use this mapping:)EP( + + ) 20 63 PR(void +f \201object& o, const xercesc::DOMElement& e\202 +{ + using namespace xercesc; + + object::any_sequence& s \201o.any \201\202\202; + + // Iteration. + // + for \201object::any_iterator i \201s.begin \201\202\202; i != s.end \201\202; ++i\202 + { + DOMElement& e \201*i\202; + } + + // Modification. + // + s.push_back \201e\202; // deep copy + DOMDocument& doc \201o.dom_document \201\202\202; + s.push_back \201doc.createElement \201...\202\202; // assumes ownership +})RP( + + + )0 3 55 H(2.12.4)WB 149 Sn()WB 59 Sn( Mapping for )SM(anyAt)HY(tribute)YH()ES()EA()EH( + + )0 P(For )SM(anyAt)HY(tribute)YH()ES( the type defi)HY(ni)HY(tions)YH( consist of an alias + of the container type with name )SM(any_attribute_set)ES( + \201or )SM(any1_attribute_set)ES(, etc., for subse)HY(quent)YH( wild)HY(cards)YH( + in the type defi)HY(ni)HY(tion)YH(\202, an alias of the iter)HY(a)HY(tor)YH( type with name + )SM(any_attribute_iter)HY(a)HY(tor)YH()ES( \201or )SM(any1_attribute_iter)HY(a)HY(tor)YH()ES(, + etc., for subse)HY(quent)YH( wild)HY(cards)YH( in the type defi)HY(ni)HY(tion)YH(\202, and an alias + of the constant iter)HY(a)HY(tor)YH( type with name )SM(any_attribute_const_iter)HY(a)HY(tor)YH()ES( + \201or )SM(any1_attribute_const_iter)HY(a)HY(tor)YH()ES(, etc., for subse)HY(quent)YH( + wild)HY(cards)YH( in the type defi)HY(ni)HY(tion)YH(\202. + )EP( + + )0 P(The acces)HY(sor)YH( func)HY(tions)YH( come in constant and non-constant versions. + The constant acces)HY(sor)YH( func)HY(tion)YH( returns a constant refer)HY(ence)YH( to the + container and can be used for read-only access. The non-constant + version returns an unre)HY(stricted)YH( refer)HY(ence)YH( to the container and can + be used for read-write access. + )EP( + + )0 P(The modi)HY(fier)YH( func)HY(tion)YH( expects an argu)HY(ment)YH( of type refer)HY(ence)YH( to + constant of the container type. The modi)HY(fier)YH( func)HY(tion)YH( makes + a deep copy of its argu)HY(ment)YH(. For instance: + )EP( + + + ) 6 37 PR(<complexType name="object"> + <sequence> + ... + </sequence> + <anyAttribute namespace="##other"/> +</complexType>)RP( + + )0 P(is mapped to:)EP( + + ) 25 73 PR(class object: xml_schema::type +{ +public: + // Type definitions. + // + typedef attribute_set any_attribute_set; + typedef any_attribute_set::iterator any_attribute_iterator; + typedef any_attribute_set::const_iterator any_attribute_const_iterator; + + // Accessors. + // + const any_attribute_set& + any_attribute \201\202 const; + + any_attribute_set& + any_attribute \201\202; + + // Modifier. + // + void + any_attribute \201const any_attribute_set&\202; + + ... + +};)RP( + + )0 P(The )SM(attribute_set)ES( class is an asso)HY(cia)HY(tive)YH( container + similar to the )SM(std::set)ES( class template as defined by + the ISO/ANSI Stan)HY(dard)YH( for C++ \201ISO/IEC 14882:1998, Section 23.3.3, + "Class template set"\202 with the key being the attribute's name + and names)HY(pace)YH(. Unlike )SM(std::set)ES(, )SM(attribute_set)ES( + allows search)HY(ing)YH( using names and names)HY(paces)YH( instead of + )SM(xercesc::DOMAttr)ES( objects. It is defined in an + imple)HY(men)HY(ta)HY(tion)YH(-specific names)HY(pace)YH( and its inter)HY(face)YH( is presented + below: + )EP( + + ) 166 70 PR(class attribute_set +{ +public: + typedef xercesc::DOMAttr key_type; + typedef xercesc::DOMAttr value_type; + typedef xercesc::DOMAttr* pointer; + typedef const xercesc::DOMAttr* const_pointer; + typedef xercesc::DOMAttr& reference; + typedef const xercesc::DOMAttr& const_reference; + + typedef <implementation-defined> iterator; + typedef <implementation-defined> const_iterator; + typedef <implementation-defined> reverse_iterator; + typedef <implementation-defined> const_reverse_iterator; + + typedef <implementation-defined> size_type; + typedef <implementation-defined> difference_type; + typedef <implementation-defined> allocator_type; + +public: + attribute_set \201xercesc::DOMDocument&\202; + + template <typename I> + attribute_set \201const I& begin, const I& end, xercesc::DOMDocument&\202; + + attribute_set \201const attribute_set&, xercesc::DOMDocument&\202; + + attribute_set& + operator= \201const attribute_set&\202; + +public:)WR( + const_iterator + begin \201\202 const; + + const_iterator + end \201\202 const; + + iterator + begin \201\202; + + iterator + end \201\202; + + const_reverse_iterator + rbegin \201\202 const; + + const_reverse_iterator + rend \201\202 const; + + reverse_iterator + rbegin \201\202; + + reverse_iterator + rend \201\202; + +public: + size_type + size \201\202 const; + + size_type + max_size \201\202 const;)WR( + + bool + empty \201\202 const; + + void + clear \201\202; + +public: + // Makes a deep copy. + // + std::pair<iterator, bool> + insert \201const xercesc::DOMAttr&\202; + + // Assumes ownership. + // + std::pair<iterator, bool> + insert \201xercesc::DOMAttr*\202; + + // Makes a deep copy. + // + iterator + insert \201iterator position, const xercesc::DOMAttr&\202; + + // Assumes ownership. + // + iterator + insert \201iterator position, xercesc::DOMAttr*\202; + + template <typename I> + void)WR( + insert \201const I& begin, const I& end\202; + +public: + void + erase \201iterator position\202; + + size_type + erase \201const std::basic_string<C>& name\202; + + size_type + erase \201const std::basic_string<C>& namespace_, + const std::basic_string<C>& name\202; + + size_type + erase \201const XMLCh* name\202; + + size_type + erase \201const XMLCh* namespace_, const XMLCh* name\202; + + void + erase \201iterator begin, iterator end\202; + +public: + size_type + count \201const std::basic_string<C>& name\202 const; + + size_type + count \201const std::basic_string<C>& namespace_, + const std::basic_string<C>& name\202 const; +)WR( + size_type + count \201const XMLCh* name\202 const; + + size_type + count \201const XMLCh* namespace_, const XMLCh* name\202 const; + + iterator + find \201const std::basic_string<C>& name\202; + + iterator + find \201const std::basic_string<C>& namespace_, + const std::basic_string<C>& name\202; + + iterator + find \201const XMLCh* name\202; + + iterator + find \201const XMLCh* namespace_, const XMLCh* name\202; + + const_iterator + find \201const std::basic_string<C>& name\202 const; + + const_iterator + find \201const std::basic_string<C>& namespace_, + const std::basic_string<C>& name\202 const; + + const_iterator + find \201const XMLCh* name\202 const; + + const_iterator)WR( + find \201const XMLCh* namespace_, const XMLCh* name\202 const; + +public: + // Note that the DOMDocument object of the two sets being + // swapped should be the same. + // + void + swap \201attribute_set&\202; +}; + +bool +operator== \201const attribute_set&, const attribute_set&\202; + +bool +operator!= \201const attribute_set&, const attribute_set&\202;)RP( + + )0 P(The follow)HY(ing)YH( code shows how one could use this mapping:)EP( + + ) 25 73 PR(void +f \201object& o, const xercesc::DOMAttr& a\202 +{ + using namespace xercesc; + + object::any_attribute_set& s \201o.any_attribute \201\202\202; + + // Iteration. + // + for \201object::any_attribute_iterator i \201s.begin \201\202\202; i != s.end \201\202; ++i\202 + { + DOMAttr& a \201*i\202; + } + + // Modification. + // + s.insert \201a\202; // deep copy + DOMDocument& doc \201o.dom_document \201\202\202; + s.insert \201doc.createAttribute \201...\202\202; // assumes ownership + + // Searching. + // + object::any_attribute_iterator i \201s.find \201"name"\202\202; + i = s.find \201"http://www.w3.org/XML/1998/namespace", "lang"\202; +})RP( + + + + )0 2 56 H(2.13)WB 150 Sn()WB 60 Sn( Mapping for Mixed Content Models)EA()EH( + + )0 P(XML Schema mixed content models do not have a direct C++ mapping. + Instead, infor)HY(ma)HY(tion)YH( in XML instance docu)HY(ments)YH(, corre)HY(spond)HY(ing)YH( to + a mixed content model, can be accessed using generic DOM nodes that + can option)HY(ally)YH( be asso)HY(ci)HY(ated)YH( with object model nodes. See + )0 90 1 A(Section 5.1, "DOM Asso)HY(ci)HY(a)HY(tion)YH(")90 0 TN TL()Ec /AF f D( for more + infor)HY(ma)HY(tion)YH( about keeping asso)HY(ci)HY(a)HY(tion)YH( with DOM nodes. + )EP( + + + + + + )0 1 57 H(3)WB 151 Sn()WB 61 Sn( Parsing)EA()EH( + + )0 P(This chapter covers various aspects of parsing XML instance + docu)HY(ments)YH( in order to obtain corre)HY(spond)HY(ing)YH( tree-like object + model. + )EP( + + )0 P(Each global XML Schema element in the form:)EP( + + ) 1 34 PR(<element name="name" type="type"/>)RP( + + )0 P(is mapped to 14 over)HY(loaded)YH( C++ func)HY(tions)YH( in the form:)EP( + + ) 96 65 PR(// Read from a URI or a local file. +// + +std::auto_ptr<type> +name \201const std::basic_string<C>& uri, + xml_schema::flags = 0, + const xml_schema::properties& = xml_schema::properties \201\202\202; + +std::auto_ptr<type> +name \201const std::basic_string<C>& uri, + xml_schema::error_handler&, + xml_schema::flags = 0, + const xml_schema::properties& = xml_schema::properties \201\202\202; + +std::auto_ptr<type> +name \201const std::basic_string<C>& uri, + xercesc::DOMErrorHandler&, + xml_schema::flags = 0, + const xml_schema::properties& = xml_schema::properties \201\202\202; + + +// Read from std::istream. +// + +std::auto_ptr<type> +name \201std::istream&, + xml_schema::flags = 0, + const xml_schema::properties& = xml_schema::properties \201\202\202; + +std::auto_ptr<type> +name \201std::istream&,)WR( + xml_schema::error_handler&, + xml_schema::flags = 0, + const xml_schema::properties& = xml_schema::properties \201\202\202; + +std::auto_ptr<type> +name \201std::istream&, + xercesc::DOMErrorHandler&, + xml_schema::flags = 0, + const xml_schema::properties& = xml_schema::properties \201\202\202; + + +std::auto_ptr<type> +name \201std::istream&, + const std::basic_string<C>& id, + xml_schema::flags = 0, + const xml_schema::properties& = xml_schema::properties \201\202\202; + +std::auto_ptr<type> +name \201std::istream&, + const std::basic_string<C>& id, + xml_schema::error_handler&, + xml_schema::flags = 0, + const xml_schema::properties& = xml_schema::properties \201\202\202; + +std::auto_ptr<type> +name \201std::istream&, + const std::basic_string<C>& id, + xercesc::DOMErrorHandler&, + xml_schema::flags = 0, + const xml_schema::properties& = xml_schema::properties \201\202\202;)WR( + + +// Read from InputSource. +// + +std::auto_ptr<type> +name \201xercesc::InputSource&, + xml_schema::flags = 0, + const xml_schema::properties& = xml_schema::properties \201\202\202; + +std::auto_ptr<type> +name \201xercesc::InputSource&, + xml_schema::error_handler&, + xml_schema::flags = 0, + const xml_schema::properties& = xml_schema::properties \201\202\202; + +std::auto_ptr<type> +name \201xercesc::InputSource&, + xercesc::DOMErrorHandler&, + xml_schema::flags = 0, + const xml_schema::properties& = xml_schema::properties \201\202\202; + + +// Read from DOM. +// + +std::auto_ptr<type> +name \201const xercesc::DOMDocument&, + xml_schema::flags = 0, + const xml_schema::properties& = xml_schema::properties \201\202\202;)WR( + +std::auto_ptr<type> +name \201xml_schema::dom::auto_ptr<xercesc::DOMDocument>&, + xml_schema::flags = 0, + const xml_schema::properties& = xml_schema::properties \201\202\202;)RP( + + )0 P(You can choose between reading an XML instance from a local file, + URI, )SM(std::istream)ES(, )SM(xercesc::Input)HY(Source)YH()ES(, + or a pre-parsed DOM instance in the form of + )SM(xercesc::DOMDoc)HY(u)HY(ment)YH()ES(. Each of these parsing func)HY(tions)YH( + is discussed in more detail in the follow)HY(ing)YH( sections. + )EP( + + )0 2 58 H(3.1)WB 152 Sn()WB 62 Sn( Initial)HY(iz)HY(ing)YH( the Xerces-C++ Runtime)EA()EH( + + )0 P(Some parsing func)HY(tions)YH( expect you to initial)HY(ize)YH( the Xerces-C++ + runtime while others initial)HY(ize)YH( and termi)HY(nate)YH( it as part of their + work. The general rule is as follows: if a func)HY(tion)YH( has any argu)HY(ments)YH( + or return a value that is an instance of a Xerces-C++ type, then + this func)HY(tion)YH( expects you to initial)HY(ize)YH( the Xerces-C++ runtime. + Other)HY(wise)YH(, the func)HY(tion)YH( initial)HY(izes)YH( and termi)HY(nates)YH( the runtime for + you. Note that it is legal to have nested calls to the Xerces-C++ + initial)HY(ize)YH( and termi)HY(nate)YH( func)HY(tions)YH( as long as the calls are balanced. + )EP( + + )0 P(You can instruct parsing func)HY(tions)YH( that initial)HY(ize)YH( and termi)HY(nate)YH( + the runtime not to do so by passing the + )SM(xml_schema::flags::dont_initial)HY(ize)YH()ES( flag \201see + )0 63 1 A(Section 3.2, "Flags and Prop)HY(er)HY(ties)YH(")63 0 TN TL()Ec /AF f D(\202. + )EP( + + + )0 2 59 H(3.2)WB 153 Sn()WB 63 Sn( Flags and Prop)HY(er)HY(ties)YH()EA()EH( + + )0 P(Parsing flags and prop)HY(er)HY(ties)YH( are the last two argu)HY(ments)YH( of every + parsing func)HY(tion)YH(. They allow you to fine-tune the process of + instance vali)HY(da)HY(tion)YH( and parsing. Both argu)HY(ments)YH( are optional. + )EP( + + + )0 P(The follow)HY(ing)YH( flags are recog)HY(nized)YH( by the parsing func)HY(tions)YH(:)EP( + + )0 DL( )0 DT()SM(xml_schema::flags::keep_dom)ES( + )DD(Keep asso)HY(ci)HY(a)HY(tion)YH( between DOM nodes and the result)HY(ing)YH( + object model nodes. For more infor)HY(ma)HY(tion)YH( about DOM asso)HY(ci)HY(a)HY(tion)YH( + refer to )0 90 1 A(Section 5.1, "DOM Asso)HY(ci)HY(a)HY(tion)YH(")90 0 TN TL()Ec /AF f D(. + + )0 DT()SM(xml_schema::flags::own_dom)ES( + )DD(Assume owner)HY(ship)YH( of the DOM docu)HY(ment)YH( passed. This flag only + makes sense together with the )SM(keep_dom)ES( flag in + the call to the parsing func)HY(tion)YH( with the + )SM(xml_schema::dom::auto_ptr<DOMDoc)HY(u)HY(ment)YH(>)ES( + argu)HY(ment)YH(. + + )0 DT()SM(xml_schema::flags::dont_vali)HY(date)YH()ES( + )DD(Do not vali)HY(date)YH( instance docu)HY(ments)YH( against schemas. + + )0 DT()SM(xml_schema::flags::dont_initial)HY(ize)YH()ES( + )DD(Do not initial)HY(ize)YH( the Xerces-C++ runtime. + )LD( + + )0 P(You can pass several flags by combin)HY(ing)YH( them using the bit-wise OR + oper)HY(a)HY(tor)YH(. For example:)EP( + + ) 4 61 PR(using xml_schema::flags; + +std::auto_ptr<type> r \201 + name \201"test.xml", flags::keep_dom | flags::dont_validate\202\202;)RP( + + )0 P(By default, vali)HY(da)HY(tion)YH( of instance docu)HY(ments)YH( is turned on even + though parsers gener)HY(ated)YH( by XSD do not assume instance + docu)HY(ments)YH( are valid. They include a number of checks that prevent + construc)HY(tion)YH( of incon)HY(sis)HY(tent)YH( object models. This, + however, does not mean that an instance docu)HY(ment)YH( that was + success)HY(fully)YH( parsed by the XSD-gener)HY(ated)YH( parsers is + valid per the corre)HY(spond)HY(ing)YH( schema. If an instance docu)HY(ment)YH( is not + "valid enough" for the gener)HY(ated)YH( parsers to construct consis)HY(tent)YH( + object model, one of the excep)HY(tions)YH( defined in + )SM(xml_schema)ES( names)HY(pace)YH( is thrown \201see + )0 64 1 A(Section 3.3, "Error Handling")64 0 TN TL()Ec /AF f D(\202. + )EP( + + )0 P(For more infor)HY(ma)HY(tion)YH( on the Xerces-C++ runtime initial)HY(iza)HY(tion)YH( + refer to )0 62 1 A(Section 3.1, "Initial)HY(iz)HY(ing)YH( the Xerces-C++ + Runtime")62 0 TN TL()Ec /AF f D(. + )EP( + + )0 P(The )SM(xml_schema::prop)HY(er)HY(ties)YH()ES( class allows you to + program)HY(mat)HY(i)HY(cally)YH( specify schema loca)HY(tions)YH( to be used instead + of those spec)HY(i)HY(fied)YH( with the )SM(xsi::schemaLo)HY(ca)HY(tion)YH()ES( + and )SM(xsi::noNames)HY(paceSchemaLo)HY(ca)HY(tion)YH()ES( attributes + in instance docu)HY(ments)YH(. The inter)HY(face)YH( of the )SM(prop)HY(er)HY(ties)YH()ES( + class is presented below: + )EP( + + ) 9 70 PR(class properties +{ +public: + void + schema_location \201const std::basic_string<C>& namespace_, + const std::basic_string<C>& location\202; + void + no_namespace_schema_location \201const std::basic_string<C>& location\202; +};)RP( + + )0 P(Note that all loca)HY(tions)YH( are rela)HY(tive)YH( to an instance docu)HY(ment)YH( unless + they are URIs. For example, if you want to use a local file as your + schema, then you will need to pass + )SM(file:///abso)HY(lute)YH(/path/to/your/schema)ES( as the loca)HY(tion)YH( + argu)HY(ment)YH(. + )EP( + + )0 2 60 H(3.3)WB 154 Sn()WB 64 Sn( Error Handling)EA()EH( + + )0 P(As discussed in )0 13 1 A(Section 2.2, "Error Handling")13 0 TN TL()Ec /AF f D(, + the mapping uses the C++ excep)HY(tion)YH( handling mech)HY(a)HY(nism)YH( as its primary + way of report)HY(ing)YH( error condi)HY(tions)YH(. However, to handle recov)HY(er)HY(able)YH( + parsing and vali)HY(da)HY(tion)YH( errors and warn)HY(ings)YH(, a call)HY(back)YH( inter)HY(face)YH( maybe + preferred by the appli)HY(ca)HY(tion)YH(.)EP( + + )0 P(To better under)HY(stand)YH( error handling and report)HY(ing)YH( strate)HY(gies)YH( employed + by the parsing func)HY(tions)YH(, it is useful to know that the + trans)HY(for)HY(ma)HY(tion)YH( of an XML instance docu)HY(ment)YH( to a stat)HY(i)HY(cally)YH(-typed + tree happens in two stages. The first stage, performed by Xerces-C++, + consists of parsing an XML docu)HY(ment)YH( into a DOM instance. For short, + we will call this stage the XML-DOM stage. Vali)HY(da)HY(tion)YH(, if not disabled, + happens during this stage. The second stage, + performed by the gener)HY(ated)YH( parsers, consist of parsing the DOM + instance into the stat)HY(i)HY(cally)YH(-typed tree. We will call this stage + the DOM-Tree stage. Addi)HY(tional)YH( checks are performed during this + stage in order to prevent construc)HY(tion)YH( of incon)HY(sis)HY(tent)YH( tree which + could other)HY(wise)YH( happen when vali)HY(da)HY(tion)YH( is disabled, for example.)EP( + + )0 P(All parsing func)HY(tions)YH( except the one that oper)HY(ates)YH( on a DOM instance + come in over)HY(loaded)YH( triples. The first func)HY(tion)YH( in such a triple + reports error condi)HY(tions)YH( exclu)HY(sively)YH( by throw)HY(ing)YH( excep)HY(tions)YH(. It + accu)HY(mu)HY(lates)YH( all the parsing and vali)HY(da)HY(tion)YH( errors of the XML-DOM + stage and throws them in a single instance of the + )SM(xml_schema::parsing)ES( excep)HY(tion)YH( \201described below\202. + The second and the third func)HY(tions)YH( in the triple use call)HY(back)YH( + inter)HY(faces)YH( to report parsing and vali)HY(da)HY(tion)YH( errors and warn)HY(ings)YH(. + The two call)HY(back)YH( inter)HY(faces)YH( are )SM(xml_schema::error_handler)ES( + and )SM(xercesc::DOMEr)HY(rorHan)HY(dler)YH()ES(. For more infor)HY(ma)HY(tion)YH( + on the )SM(xercesc::DOMEr)HY(rorHan)HY(dler)YH()ES( inter)HY(face)YH( refer to + the Xerces-C++ docu)HY(men)HY(ta)HY(tion)YH(. The )SM(xml_schema::error_handler)ES( + inter)HY(face)YH( is presented below: + )EP( + + ) 23 51 PR(class error_handler +{ +public: + struct severity + { + enum value + { + warning, + error, + fatal + }; + }; + + virtual bool + handle \201const std::basic_string<C>& id, + unsigned long line, + unsigned long column, + severity, + const std::basic_string<C>& message\202 = 0; + + virtual + ~error_handler \201\202; +};)RP( + + )0 P(The )SM(id)ES( argu)HY(ment)YH( of the )SM(error_handler::handle)ES( + func)HY(tion)YH( iden)HY(ti)HY(fies)YH( the resource being parsed \201e.g., a file name or + URI\202. + )EP( + + )0 P(By return)HY(ing)YH( )SM(true)ES( from the )SM(handle)ES( func)HY(tion)YH( + you instruct the parser to recover and continue parsing. Return)HY(ing)YH( + )SM(false)ES( results in termi)HY(na)HY(tion)YH( of the parsing process. + An error with the )SM(fatal)ES( sever)HY(ity)YH( level results in + termi)HY(na)HY(tion)YH( of the parsing process no matter what is returned from + the )SM(handle)ES( func)HY(tion)YH(. It is safe to throw an excep)HY(tion)YH( + from the )SM(handle)ES( func)HY(tion)YH(. + )EP( + + )0 P(The DOM-Tree stage reports error condi)HY(tions)YH( exclu)HY(sively)YH( by throw)HY(ing)YH( + excep)HY(tions)YH(. Indi)HY(vid)HY(ual)YH( excep)HY(tions)YH( thrown by the parsing func)HY(tions)YH( + are described in the follow)HY(ing)YH( sub-sections. + )EP( + + + )0 3 61 H(3.3.1)WB 155 Sn()WB 65 Sn( )SM(xml_schema::parsing)ES()EA()EH( + + ) 57 56 PR(struct severity +{ + enum value + { + warning, + error + }; + + severity \201value\202; + operator value \201\202 const; +}; + +struct error +{ + error \201severity, + const std::basic_string<C>& id, + unsigned long line, + unsigned long column, + const std::basic_string<C>& message\202; + + severity + severity \201\202 const; + + const std::basic_string<C>& + id \201\202 const; + + unsigned long + line \201\202 const; + + unsigned long + column \201\202 const;)WR( + + const std::basic_string<C>& + message \201\202 const; +}; + +std::basic_ostream<C>& +operator<< \201std::basic_ostream<C>&, const error&\202; + +struct diagnostics: std::vector<error> +{ +}; + +std::basic_ostream<C>& +operator<< \201std::basic_ostream<C>&, const diagnostics&\202; + +struct parsing: virtual exception +{ + parsing \201\202; + parsing \201const diagnostics&\202; + + const diagnostics& + diagnostics \201\202 const; + + virtual const char* + what \201\202 const throw \201\202; +};)RP( + + )0 P(The )SM(xml_schema::parsing)ES( excep)HY(tion)YH( is thrown if there + were parsing or vali)HY(da)HY(tion)YH( errors reported during the XML-DOM stage. + If no call)HY(back)YH( inter)HY(face)YH( was provided to the parsing func)HY(tion)YH(, the + excep)HY(tion)YH( contains a list of errors and warn)HY(ings)YH( acces)HY(si)HY(ble)YH( using + the )SM(diag)HY(nos)HY(tics)YH()ES( func)HY(tion)YH(. The usual condi)HY(tions)YH( when + this excep)HY(tion)YH( is thrown include malformed XML instances and, if + vali)HY(da)HY(tion)YH( is turned on, invalid instance docu)HY(ments)YH(. + )EP( + + )0 3 62 H(3.3.2)WB 156 Sn()WB 66 Sn( )SM(xml_schema::expected_element)ES()EA()EH( + + ) 16 60 PR(struct expected_element: virtual exception +{ + expected_element \201const std::basic_string<C>& name, + const std::basic_string<C>& namespace_\202; + + + const std::basic_string<C>& + name \201\202 const; + + const std::basic_string<C>& + namespace_ \201\202 const; + + + virtual const char* + what \201\202 const throw \201\202; +};)RP( + + )0 P(The )SM(xml_schema::expected_element)ES( excep)HY(tion)YH( is thrown + when an expected element is not encoun)HY(tered)YH( by the DOM-Tree stage. + The name and names)HY(pace)YH( of the expected element can be obtained using + the )SM(name)ES( and )SM(names)HY(pace)YH(_)ES( func)HY(tions)YH( respec)HY(tively)YH(. + )EP( + + + )0 3 63 H(3.3.3)WB 157 Sn()WB 67 Sn( )SM(xml_schema::unex)HY(pected)YH(_element)ES()EA()EH( + + ) 25 72 PR(struct unexpected_element: virtual exception +{ + unexpected_element \201const std::basic_string<C>& encountered_name, + const std::basic_string<C>& encountered_namespace, + const std::basic_string<C>& expected_name, + const std::basic_string<C>& expected_namespace\202 + + + const std::basic_string<C>& + encountered_name \201\202 const; + + const std::basic_string<C>& + encountered_namespace \201\202 const; + + + const std::basic_string<C>& + expected_name \201\202 const; + + const std::basic_string<C>& + expected_namespace \201\202 const; + + + virtual const char* + what \201\202 const throw \201\202; +};)RP( + + )0 P(The )SM(xml_schema::unex)HY(pected)YH(_element)ES( excep)HY(tion)YH( is thrown + when an unex)HY(pected)YH( element is encoun)HY(tered)YH( by the DOM-Tree stage. + The name and names)HY(pace)YH( of the encoun)HY(tered)YH( element can be obtained + using the )SM(encoun)HY(tered)YH(_name)ES( and + )SM(encoun)HY(tered)YH(_names)HY(pace)YH()ES( func)HY(tions)YH( respec)HY(tively)YH(. If an + element was expected instead of the encoun)HY(tered)YH( one, its name + and names)HY(pace)YH( can be obtained using the )SM(expected_name)ES( and + )SM(expected_names)HY(pace)YH()ES( func)HY(tions)YH( respec)HY(tively)YH(. Other)HY(wise)YH( + these func)HY(tions)YH( return empty strings. + )EP( + + )0 3 64 H(3.3.4)WB 158 Sn()WB 68 Sn( )SM(xml_schema::expected_attribute)ES()EA()EH( + + ) 16 62 PR(struct expected_attribute: virtual exception +{ + expected_attribute \201const std::basic_string<C>& name, + const std::basic_string<C>& namespace_\202; + + + const std::basic_string<C>& + name \201\202 const; + + const std::basic_string<C>& + namespace_ \201\202 const; + + + virtual const char* + what \201\202 const throw \201\202; +};)RP( + + )0 P(The )SM(xml_schema::expected_attribute)ES( excep)HY(tion)YH( is thrown + when an expected attribute is not encoun)HY(tered)YH( by the DOM-Tree stage. + The name and names)HY(pace)YH( of the expected attribute can be obtained using + the )SM(name)ES( and )SM(names)HY(pace)YH(_)ES( func)HY(tions)YH( respec)HY(tively)YH(. + )EP( + + + )0 3 65 H(3.3.5)WB 159 Sn()WB 69 Sn( )SM(xml_schema::unex)HY(pected)YH(_enumer)HY(a)HY(tor)YH()ES()EA()EH( + + ) 10 65 PR(struct unexpected_enumerator: virtual exception +{ + unexpected_enumerator \201const std::basic_string<C>& enumerator\202; + + const std::basic_string<C>& + enumerator \201\202 const; + + virtual const char* + what \201\202 const throw \201\202; +};)RP( + + )0 P(The )SM(xml_schema::unex)HY(pected)YH(_enumer)HY(a)HY(tor)YH()ES( excep)HY(tion)YH( is thrown + when an unex)HY(pected)YH( enumer)HY(a)HY(tor)YH( is encoun)HY(tered)YH( by the DOM-Tree stage. + The enumer)HY(a)HY(tor)YH( can be obtained using the )SM(enumer)HY(a)HY(tor)YH()ES( + func)HY(tions)YH(. + )EP( + + )0 3 66 H(3.3.6)WB 160 Sn()WB 70 Sn( )SM(xml_schema::expected_text_content)ES()EA()EH( + + ) 5 47 PR(struct expected_text_content: virtual exception +{ + virtual const char* + what \201\202 const throw \201\202; +};)RP( + + )0 P(The )SM(xml_schema::expected_text_content)ES( excep)HY(tion)YH( is thrown + when a content other than text is encoun)HY(tered)YH( and the text content was + expected by the DOM-Tree stage. + )EP( + + )0 3 67 H(3.3.7)WB 161 Sn()WB 71 Sn( )SM(xml_schema::no_type_info)ES()EA()EH( + + ) 14 60 PR(struct no_type_info: virtual exception +{ + no_type_info \201const std::basic_string<C>& type_name, + const std::basic_string<C>& type_namespace\202; + + const std::basic_string<C>& + type_name \201\202 const; + + const std::basic_string<C>& + type_namespace \201\202 const; + + virtual const char* + what \201\202 const throw \201\202; +};)RP( + + )0 P(The )SM(xml_schema::no_type_info)ES( excep)HY(tion)YH( is thrown + when there is no type infor)HY(ma)HY(tion)YH( asso)HY(ci)HY(ated)YH( with a type spec)HY(i)HY(fied)YH( + by the )SM(xsi:type)ES( attribute. This excep)HY(tion)YH( is thrown + by the DOM-Tree stage. The name and names)HY(pace)YH( of the type in ques)HY(tion)YH( + can be obtained using the )SM(type_name)ES( and + )SM(type_names)HY(pace)YH()ES( func)HY(tions)YH( respec)HY(tively)YH(. Usually, catch)HY(ing)YH( + this excep)HY(tion)YH( means that you haven't linked the code gener)HY(ated)YH( + from the schema defin)HY(ing)YH( the type in ques)HY(tion)YH( with your appli)HY(ca)HY(tion)YH( + or this schema has been compiled without the + )SM(--gener)HY(ate)YH(-poly)HY(mor)HY(phic)YH()ES( option. + )EP( + + + )0 3 68 H(3.3.8)WB 162 Sn()WB 72 Sn( )SM(xml_schema::not_derived)ES()EA()EH( + + ) 23 67 PR(struct not_derived: virtual exception +{ + not_derived \201const std::basic_string<C>& base_type_name, + const std::basic_string<C>& base_type_namespace, + const std::basic_string<C>& derived_type_name, + const std::basic_string<C>& derived_type_namespace\202; + + const std::basic_string<C>& + base_type_name \201\202 const; + + const std::basic_string<C>& + base_type_namespace \201\202 const; + + + const std::basic_string<C>& + derived_type_name \201\202 const; + + const std::basic_string<C>& + derived_type_namespace \201\202 const; + + virtual const char* + what \201\202 const throw \201\202; +};)RP( + + )0 P(The )SM(xml_schema::not_derived)ES( excep)HY(tion)YH( is thrown + when a type spec)HY(i)HY(fied)YH( by the )SM(xsi:type)ES( attribute is + not derived from the expected base type. This excep)HY(tion)YH( is thrown + by the DOM-Tree stage. The name and names)HY(pace)YH( of the expected + base type can be obtained using the )SM(base_type_name)ES( and + )SM(base_type_names)HY(pace)YH()ES( func)HY(tions)YH( respec)HY(tively)YH(. The name + and names)HY(pace)YH( of the offend)HY(ing)YH( type can be obtained using the + )SM(derived_type_name)ES( and + )SM(derived_type_names)HY(pace)YH()ES( func)HY(tions)YH( respec)HY(tively)YH(. + )EP( + + )0 3 69 H(3.3.9)WB 163 Sn()WB 73 Sn( )SM(xml_schema::no_prefix_mapping)ES()EA()EH( + + ) 10 57 PR(struct no_prefix_mapping: virtual exception +{ + no_prefix_mapping \201const std::basic_string<C>& prefix\202; + + const std::basic_string<C>& + prefix \201\202 const; + + virtual const char* + what \201\202 const throw \201\202; +};)RP( + + )0 P(The )SM(xml_schema::no_prefix_mapping)ES( excep)HY(tion)YH( is thrown + during the DOM-Tree stage if a names)HY(pace)YH( prefix is encoun)HY(tered)YH( for + which a prefix-names)HY(pace)YH( mapping hasn't been provided. The names)HY(pace)YH( + prefix in ques)HY(tion)YH( can be obtained using the )SM(prefix)ES( + func)HY(tion)YH(. + )EP( + + )0 2 70 H(3.4)WB 164 Sn()WB 74 Sn( Reading from a Local File or URI)EA()EH( + + )0 P(Using a local file or URI is the simplest way to parse an XML instance. + For example:)EP( + + ) 4 67 PR(using std::auto_ptr; + +auto_ptr<type> r1 \201name \201"test.xml"\202\202; +auto_ptr<type> r2 \201name \201"http://www.codesynthesis.com/test.xml"\202\202;)RP( + + )0 2 71 H(3.5)WB 165 Sn()WB 75 Sn( Reading from )SM(std::istream)ES()EA()EH( + + )0 P(When using an )SM(std::istream)ES( instance, you may also + pass an optional resource id. This id is used to iden)HY(tify)YH( the + resource \201for example in error messages\202 as well as to resolve + rela)HY(tive)YH( paths. For instance:)EP( + + ) 12 48 PR(using std::auto_ptr; + +{ + std::ifstream ifs \201"test.xml"\202; + auto_ptr<type> r \201name \201ifs, "test.xml"\202\202; +} + +{ + std::string str \201"..."\202; // Some XML fragment. + std::istringstream iss \201str\202; + auto_ptr<type> r \201name \201iss\202\202; +})RP( + + )0 2 72 H(3.6)WB 166 Sn()WB 76 Sn( Reading from )SM(xercesc::Input)HY(Source)YH()ES()EA()EH( + + )0 P(Reading from a )SM(xercesc::Input)HY(Source)YH()ES( instance + is similar to the )SM(std::istream)ES( case except + the resource id is main)HY(tained)YH( by the )SM(Input)HY(Source)YH()ES( + object. For instance:)EP( + + ) 2 34 PR(xercesc::StdInInputSource is; +std::auto_ptr<type> r \201name \201is\202\202;)RP( + + )0 2 73 H(3.7)WB 167 Sn()WB 77 Sn( Reading from DOM)EA()EH( + + )0 P(Reading from a )SM(xercesc::DOMDoc)HY(u)HY(ment)YH()ES( instance allows + you to setup a custom XML-DOM stage. Things like DOM + parser reuse, schema pre-parsing, and schema caching can be achieved + with this approach. For more infor)HY(ma)HY(tion)YH( on how to obtain DOM + repre)HY(sen)HY(ta)HY(tion)YH( from an XML instance refer to the Xerces-C++ + docu)HY(men)HY(ta)HY(tion)YH(. In addi)HY(tion)YH(, the + )R8 2 A(C++/Tree Mapping + FAQ)EA( shows how to parse an XML instance to a Xerces-C++ + DOM docu)HY(ment)YH( using the XSD runtime util)HY(i)HY(ties)YH(. + )EP( + + )0 P(The last parsing func)HY(tion)YH( is useful when you would like to perform + your own XML-to-DOM parsing and as)HY(so)HY(ciate)YH( the result)HY(ing)YH( DOM docu)HY(ment)YH( + with the object model nodes. If parsing is successe)HY(ful)YH(, the + auto)HY(matic)YH( )SM(DOMDoc)HY(u)HY(ment)YH()ES( pointer is reset and the + result)HY(ing)YH( object model assumes owner)HY(ship)YH( of the DOM docu)HY(ment)YH( + passed. For example:)EP( + + ) 6 72 PR(xml_schema::dom::auto_ptr<xercesc::DOMDocument> doc = ... + +std::auto_ptr<type> r \201 + name \201doc, xml_schema::flags::keep_dom | xml_schema::flags::own_dom\202\202; + +// At this point doc is reset to 0.)RP( + + + + )0 1 74 H(4)WB 168 Sn()WB 78 Sn( Seri)HY(al)HY(iza)HY(tion)YH()EA()EH( + + )0 P(This chapter covers various aspects of seri)HY(al)HY(iz)HY(ing)YH( a + tree-like object model to DOM or XML. + In this regard, seri)HY(al)HY(iza)HY(tion)YH( is compli)HY(men)HY(tary)YH( to the reverse + process of parsing a DOM or XML instance into an object model + which is discussed in )0 61 1 A(Chapter 3, + "Parsing")61 0 TN TL()Ec /AF f D(. Note that the gener)HY(a)HY(tion)YH( of the seri)HY(al)HY(iza)HY(tion)YH( code + is optional and should be explic)HY(itly)YH( requested with the + )SM(--gener)HY(ate)YH(-seri)HY(al)HY(iza)HY(tion)YH()ES( option. See the + )R9 2 A(XSD + Compiler Command Line Manual)EA( for more infor)HY(ma)HY(tion)YH(. + )EP( + + )0 P(Each global XML Schema element in the form: + )EP( + + + ) 1 38 PR(<xsd:element name="name" type="type"/>)RP( + + )0 P(is mapped to 8 over)HY(loaded)YH( C++ func)HY(tions)YH( in the form:)EP( + + ) 70 53 PR(// Serialize to std::ostream. +// +void +name \201std::ostream&, + const type&, + const xml_schema::namespace_fomap& = + xml_schema::namespace_infomap \201\202, + const std::basic_string<C>& encoding = "UTF-8", + xml_schema::flags = 0\202; + +void +name \201std::ostream&, + const type&, + xml_schema::error_handler&, + const xml_schema::namespace_infomap& = + xml_schema::namespace_infomap \201\202, + const std::basic_string<C>& encoding = "UTF-8", + xml_schema::flags = 0\202; + +void +name \201std::ostream&, + const type&, + xercesc::DOMErrorHandler&, + const xml_schema::namespace_infomap& = + xml_schema::namespace_infomap \201\202, + const std::basic_string<C>& encoding = "UTF-8", + xml_schema::flags = 0\202; + + +// Serialize to XMLFormatTarget. +//)WR( +void +name \201xercesc::XMLFormatTarget&, + const type&, + const xml_schema::namespace_infomap& = + xml_schema::namespace_infomap \201\202, + const std::basic_string<C>& encoding = "UTF-8", + xml_schema::flags = 0\202; + +void +name \201xercesc::XMLFormatTarget&, + const type&, + xml_schema::error_handler&, + const xml_schema::namespace_infomap& = + xml_schema::namespace_infomap \201\202, + const std::basic_string<C>& encoding = "UTF-8", + xml_schema::flags = 0\202; + +void +name \201xercesc::XMLFormatTarget&, + const type&, + xercesc::DOMErrorHandler&, + const xml_schema::namespace_infomap& = + xml_schema::namespace_infomap \201\202, + const std::basic_string<C>& encoding = "UTF-8", + xml_schema::flags = 0\202; + + +// Serialize to DOM. +// +xml_schema::dom::auto_ptr<xercesc::DOMDocument>)WR( +name \201const type&, + const xml_schema::namespace_infomap& + xml_schema::namespace_infomap \201\202, + xml_schema::flags = 0\202; + +void +name \201xercesc::DOMDocument&, + const type&, + xml_schema::flags = 0\202;)RP( + + )0 P(You can choose between writing XML to )SM(std::ostream)ES( or + )SM(xercesc::XMLFor)HY(mat)HY(Tar)HY(get)YH()ES( and creat)HY(ing)YH( a DOM instance + in the form of )SM(xercesc::DOMDoc)HY(u)HY(ment)YH()ES(. Seri)HY(al)HY(iza)HY(tion)YH( + to )SM(ostream)ES( or )SM(XMLFor)HY(mat)HY(Tar)HY(get)YH()ES( requires a + consid)HY(er)HY(ably)YH( less work while seri)HY(al)HY(iza)HY(tion)YH( to DOM provides + for greater flex)HY(i)HY(bil)HY(ity)YH(. Each of these seri)HY(al)HY(iza)HY(tion)YH( func)HY(tions)YH( + is discussed in more detail in the follow)HY(ing)YH( sections. + )EP( + + + )0 2 75 H(4.1)WB 169 Sn()WB 79 Sn( Initial)HY(iz)HY(ing)YH( the Xerces-C++ Runtime)EA()EH( + + )0 P(Some seri)HY(al)HY(iza)HY(tion)YH( func)HY(tions)YH( expect you to initial)HY(ize)YH( the Xerces-C++ + runtime while others initial)HY(ize)YH( and termi)HY(nate)YH( it as part of their + work. The general rule is as follows: if a func)HY(tion)YH( has any argu)HY(ments)YH( + or return a value that is an instance of a Xerces-C++ type, then + this func)HY(tion)YH( expects you to initial)HY(ize)YH( the Xerces-C++ runtime. + Other)HY(wise)YH(, the func)HY(tion)YH( initial)HY(izes)YH( and termi)HY(nates)YH( the runtime for + you. Note that it is legal to have nested calls to the Xerces-C++ + initial)HY(ize)YH( and termi)HY(nate)YH( func)HY(tions)YH( as long as the calls are balanced. + )EP( + + )0 P(You can instruct seri)HY(al)HY(iza)HY(tion)YH( func)HY(tions)YH( that initial)HY(ize)YH( and termi)HY(nate)YH( + the runtime not to do so by passing the + )SM(xml_schema::flags::dont_initial)HY(ize)YH()ES( flag \201see + )0 81 1 A(Section 4.3, "Flags")81 0 TN TL()Ec /AF f D(\202. + )EP( + + )0 2 76 H(4.2)WB 170 Sn()WB 80 Sn( Names)HY(pace)YH( Infomap and Char)HY(ac)HY(ter)YH( Encod)HY(ing)YH()EA()EH( + + )0 P(When a docu)HY(ment)YH( being seri)HY(al)HY(ized)YH( uses XML names)HY(paces)YH(, custom + prefix-names)HY(pace)YH( asso)HY(ci)HY(a)HY(tions)YH( can to be estab)HY(lished)YH(. If custom + prefix-names)HY(pace)YH( mapping is not provided then generic prefixes + \201)SM(p1)ES(, )SM(p2)ES(, etc\202 are auto)HY(mat)HY(i)HY(cally)YH( assigned + to names)HY(paces)YH( as needed. Also, if + you would like the result)HY(ing)YH( instance docu)HY(ment)YH( to contain the + )SM(schemaLo)HY(ca)HY(tion)YH()ES( or )SM(noNames)HY(paceSchemaLo)HY(ca)HY(tion)YH()ES( + attributes, you will need to provide names)HY(pace)YH(-schema asso)HY(ci)HY(a)HY(tions)YH(. + The )SM(xml_schema::names)HY(pace)YH(_infomap)ES( class is used + to capture this infor)HY(ma)HY(tion)YH(:)EP( + + ) 16 63 PR(struct namespace_info +{ + namespace_info \201\202; + namespace_info \201const std::basic_string<C>& name, + const std::basic_string<C>& schema\202; + + std::basic_string<C> name; + std::basic_string<C> schema; +}; + +// Map of namespace prefix to namespace_info. +// +struct namespace_infomap: public std::map<std::basic_string<C>, + namespace_info> +{ +};)RP( + + )0 P(Consider the follow)HY(ing)YH( asso)HY(ci)HY(a)HY(tions)YH( as an example:)EP( + + ) 4 52 PR(xml_schema::namespace_infomap map; + +map["t"].name = "http://www.codesynthesis.com/test"; +map["t"].schema = "test.xsd";)RP( + + )0 P(This map, if passed to one of the seri)HY(al)HY(iza)HY(tion)YH( func)HY(tions)YH(, + could result in the follow)HY(ing)YH( XML frag)HY(ment)YH(:)EP( + + ) 4 72 PR(<?xml version="1.0" ?> +<t:name xmlns:t="http://www.codesynthesis.com/test" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.codesynthesis.com/test test.xsd">)RP( + + )0 P(As you can see, the seri)HY(al)HY(iza)HY(tion)YH( func)HY(tion)YH( auto)HY(mat)HY(i)HY(cally)YH( added names)HY(pace)YH( + mapping for the )SM(xsi)ES( prefix. You can change this by + provid)HY(ing)YH( your own prefix:)EP( + + ) 6 62 PR(xml_schema::namespace_infomap map; + +map["xsn"].name = "http://www.w3.org/2001/XMLSchema-instance"; + +map["t"].name = "http://www.codesynthesis.com/test"; +map["t"].schema = "test.xsd";)RP( + + )0 P(This could result in the follow)HY(ing)YH( XML frag)HY(ment)YH(:)EP( + + ) 4 72 PR(<?xml version="1.0" ?> +<t:name xmlns:t="http://www.codesynthesis.com/test" + xmlns:xsn="http://www.w3.org/2001/XMLSchema-instance" + xsn:schemaLocation="http://www.codesynthesis.com/test test.xsd">)RP( + + )0 P(To specify the loca)HY(tion)YH( of a schema without a names)HY(pace)YH( you can use + an empty prefix as in the example below: )EP( + + ) 3 34 PR(xml_schema::namespace_infomap map; + +map[""].schema = "test.xsd";)RP( + + )0 P(This would result in the follow)HY(ing)YH( XML frag)HY(ment)YH(:)EP( + + ) 3 59 PR(<?xml version="1.0" ?> +<name xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="test.xsd">)RP( + + )0 P(To make a partic)HY(u)HY(lar)YH( names)HY(pace)YH( default you can use an empty + prefix, for example:)EP( + + ) 4 51 PR(xml_schema::namespace_infomap map; + +map[""].name = "http://www.codesynthesis.com/test"; +map[""].schema = "test.xsd";)RP( + + )0 P(This could result in the follow)HY(ing)YH( XML frag)HY(ment)YH(:)EP( + + ) 4 70 PR(<?xml version="1.0" ?> +<name xmlns="http://www.codesynthesis.com/test" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.codesynthesis.com/test test.xsd">)RP( + + + )0 P(Another bit of infor)HY(ma)HY(tion)YH( that you can pass to the seri)HY(al)HY(iza)HY(tion)YH( + func)HY(tions)YH( is the char)HY(ac)HY(ter)YH( encod)HY(ing)YH( method that you would like to use. + Common values for this argu)HY(ment)YH( are )SM("US-ASCII")ES(, + )SM("ISO8859-1")ES(, )SM("UTF-8")ES(, + )SM("UTF-16BE")ES(, )SM("UTF-16LE")ES(, + )SM("UCS-4BE")ES(, and )SM("UCS-4LE")ES(. The default + encod)HY(ing)YH( is )SM("UTF-8")ES(. For more infor)HY(ma)HY(tion)YH( on + encod)HY(ing)YH( methods see the + ")R12 2 A(Char)HY(ac)HY(ter)YH( + Encod)HY(ing)YH()EA(" article from Wikipedia. + )EP( + + )0 2 77 H(4.3)WB 171 Sn()WB 81 Sn( Flags)EA()EH( + + )0 P(Seri)HY(al)HY(iza)HY(tion)YH( flags are the last argu)HY(ment)YH( of every seri)HY(al)HY(iza)HY(tion)YH( + func)HY(tion)YH(. They allow you to fine-tune the process of seri)HY(al)HY(iza)HY(tion)YH(. + The flags argu)HY(ment)YH( is optional. + )EP( + + + )0 P(The follow)HY(ing)YH( flags are recog)HY(nized)YH( by the seri)HY(al)HY(iza)HY(tion)YH( + func)HY(tions)YH(:)EP( + + )0 DL( )0 DT()SM(xml_schema::flags::dont_initial)HY(ize)YH()ES( + )DD(Do not initial)HY(ize)YH( the Xerces-C++ runtime. + + )0 DT()SM(xml_schema::flags::dont_pretty_print)ES( + )DD(Do not add extra spaces or new lines that make the result)HY(ing)YH( XML + slightly bigger but easier to read. + + )0 DT()SM(xml_schema::flags::no_xml_decla)HY(ra)HY(tion)YH()ES( + )DD(Do not write XML decla)HY(ra)HY(tion)YH( \201<?xml ... ?>\202. + )LD( + + )0 P(You can pass several flags by combin)HY(ing)YH( them using the bit-wise OR + oper)HY(a)HY(tor)YH(. For example:)EP( + + ) 9 45 PR(std::auto_ptr<type> r = ... +std::ofstream ofs \201"test.xml"\202; +xml_schema::namespace_infomap map; +name \201ofs, + *r, + map, + "UTF-8", + xml_schema::flags::no_xml_declaration | + xml_schema::flags::dont_pretty_print\202;)RP( + + )0 P(For more infor)HY(ma)HY(tion)YH( on the Xerces-C++ runtime initial)HY(iza)HY(tion)YH( + refer to )0 79 1 A(Section 4.1, "Initial)HY(iz)HY(ing)YH( the Xerces-C++ + Runtime")79 0 TN TL()Ec /AF f D(. + )EP( + + )0 2 78 H(4.4)WB 172 Sn()WB 82 Sn( Error Handling)EA()EH( + + )0 P(As with the parsing func)HY(tions)YH( \201see )0 64 1 A(Section 3.3, + "Error Handling")64 0 TN TL()Ec /AF f D(\202, to better under)HY(stand)YH( error handling and + report)HY(ing)YH( strate)HY(gies)YH( employed by the seri)HY(al)HY(iza)HY(tion)YH( func)HY(tions)YH(, it + is useful to know that the trans)HY(for)HY(ma)HY(tion)YH( of a stat)HY(i)HY(cally)YH(-typed + tree to an XML instance docu)HY(ment)YH( happens in two stages. The first + stage, performed by the gener)HY(ated)YH( code, consist of build)HY(ing)YH( a DOM + instance from the stat)HY(i)HY(cally)YH(-typed tree . For short, we will call + this stage the Tree-DOM stage. The second stage, performed by + Xerces-C++, consists of seri)HY(al)HY(iz)HY(ing)YH( the DOM instance into the XML + docu)HY(ment)YH(. We will call this stage the DOM-XML stage. + )EP( + + )0 P(All seri)HY(al)HY(iza)HY(tion)YH( func)HY(tions)YH( except the two that seri)HY(al)HY(ize)YH( into + a DOM instance come in over)HY(loaded)YH( triples. The first func)HY(tion)YH( + in such a triple reports error condi)HY(tions)YH( exclu)HY(sively)YH( by throw)HY(ing)YH( + excep)HY(tions)YH(. It accu)HY(mu)HY(lates)YH( all the seri)HY(al)HY(iza)HY(tion)YH( errors of the + DOM-XML stage and throws them in a single instance of the + )SM(xml_schema::seri)HY(al)HY(iza)HY(tion)YH()ES( excep)HY(tion)YH( \201described below\202. + The second and the third func)HY(tions)YH( in the triple use call)HY(back)YH( + inter)HY(faces)YH( to report seri)HY(al)HY(iza)HY(tion)YH( errors and warn)HY(ings)YH(. The two + call)HY(back)YH( inter)HY(faces)YH( are )SM(xml_schema::error_handler)ES( and + )SM(xercesc::DOMEr)HY(rorHan)HY(dler)YH()ES(. The + )SM(xml_schema::error_handler)ES( inter)HY(face)YH( is described in + )0 64 1 A(Section 3.3, "Error Handling")64 0 TN TL()Ec /AF f D(. For more infor)HY(ma)HY(tion)YH( + on the )SM(xercesc::DOMEr)HY(rorHan)HY(dler)YH()ES( inter)HY(face)YH( refer to the + Xerces-C++ docu)HY(men)HY(ta)HY(tion)YH(. + )EP( + + )0 P(The Tree-DOM stage reports error condi)HY(tions)YH( exclu)HY(sively)YH( by throw)HY(ing)YH( + excep)HY(tions)YH(. Indi)HY(vid)HY(ual)YH( excep)HY(tions)YH( thrown by the seri)HY(al)HY(iza)HY(tion)YH( func)HY(tions)YH( + are described in the follow)HY(ing)YH( sub-sections. + )EP( + + )0 3 79 H(4.4.1)WB 173 Sn()WB 83 Sn( )SM(xml_schema::seri)HY(al)HY(iza)HY(tion)YH()ES()EA()EH( + + ) 11 39 PR(struct serialization: virtual exception +{ + serialization \201\202; + serialization \201const diagnostics&\202; + + const diagnostics& + diagnostics \201\202 const; + + virtual const char* + what \201\202 const throw \201\202; +};)RP( + + )0 P(The )SM(xml_schema::diag)HY(nos)HY(tics)YH()ES( class is described in + )0 65 1 A(Section 3.3.1, ")SM(xml_schema::parsing)ES(")65 0 TN TL()Ec /AF f D(. + The )SM(xml_schema::seri)HY(al)HY(iza)HY(tion)YH()ES( excep)HY(tion)YH( is thrown if + there were seri)HY(al)HY(iza)HY(tion)YH( errors reported during the DOM-XML stage. + If no call)HY(back)YH( inter)HY(face)YH( was provided to the seri)HY(al)HY(iza)HY(tion)YH( func)HY(tion)YH(, + the excep)HY(tion)YH( contains a list of errors and warn)HY(ings)YH( acces)HY(si)HY(ble)YH( using + the )SM(diag)HY(nos)HY(tics)YH()ES( func)HY(tion)YH(. + )EP( + + + )0 3 80 H(4.4.2)WB 174 Sn()WB 84 Sn( )SM(xml_schema::unex)HY(pected)YH(_element)ES()EA()EH( + + )0 P(The )SM(xml_schema::unex)HY(pected)YH(_element)ES( excep)HY(tion)YH( is + described in )0 67 1 A(Section 3.3.3, + ")SM(xml_schema::unex)HY(pected)YH(_element)ES(")67 0 TN TL()Ec /AF f D(. It is thrown + by the seri)HY(al)HY(iza)HY(tion)YH( func)HY(tions)YH( during the Tree-DOM stage if the + root element name of the provided DOM instance does not match with + the name of the element this seri)HY(al)HY(iza)HY(tion)YH( func)HY(tion)YH( is for. + )EP( + + )0 3 81 H(4.4.3)WB 175 Sn()WB 85 Sn( )SM(xml_schema::no_type_info)ES()EA()EH( + + )0 P(The )SM(xml_schema::no_type_info)ES( excep)HY(tion)YH( is + described in )0 71 1 A(Section 3.3.7, + ")SM(xml_schema::no_type_info)ES(")71 0 TN TL()Ec /AF f D(. It is thrown + by the seri)HY(al)HY(iza)HY(tion)YH( func)HY(tions)YH( during the Tree-DOM stage when there + is no type infor)HY(ma)HY(tion)YH( asso)HY(ci)HY(ated)YH( with a dynamic type of an + element. Usually, catch)HY(ing)YH( this excep)HY(tion)YH( means that you haven't + linked the code gener)HY(ated)YH( from the schema defin)HY(ing)YH( the type in + ques)HY(tion)YH( with your appli)HY(ca)HY(tion)YH( or this schema has been compiled + without the )SM(--gener)HY(ate)YH(-poly)HY(mor)HY(phic)YH()ES( option. + )EP( + + )0 2 82 H(4.5)WB 176 Sn()WB 86 Sn( Seri)HY(al)HY(iz)HY(ing)YH( to )SM(std::ostream)ES()EA()EH( + + )0 P(In order to seri)HY(al)HY(ize)YH( to )SM(std::ostream)ES( you will need + an object model, an output stream and, option)HY(ally)YH(, a names)HY(pace)YH( + infomap. For instance:)EP( + + ) 14 61 PR(// Obtain the object model. +// +std::auto_ptr<type> r = ... + +// Prepare namespace mapping and schema location information. +// +xml_schema::namespace_infomap map; + +map["t"].name = "http://www.codesynthesis.com/test"; +map["t"].schema = "test.xsd"; + +// Write it out. +// +name \201std::cout, *r, map\202;)RP( + + )0 P(Note that the output stream is treated as a binary stream. This + becomes impor)HY(tant)YH( when you use a char)HY(ac)HY(ter)YH( encod)HY(ing)YH( that is wider + than 8-bit )SM(char)ES(, for instance UTF-16 or UCS-4. For + example, things will most likely break if you try to seri)HY(al)HY(ize)YH( + to )SM(std::ostringstream)ES( with UTF-16 or UCS-4 as an + encod)HY(ing)YH(. This is due to the special value, + )SM('\2000')ES(, that will most likely occur as part of such + seri)HY(al)HY(iza)HY(tion)YH( and it won't have the special meaning assumed by + )SM(std::ostringstream)ES(. + )EP( + + + )0 2 83 H(4.6)WB 177 Sn()WB 87 Sn( Seri)HY(al)HY(iz)HY(ing)YH( to )SM(xercesc::XMLFor)HY(mat)HY(Tar)HY(get)YH()ES()EA()EH( + + )0 P(Seri)HY(al)HY(iz)HY(ing)YH( to an )SM(xercesc::XMLFor)HY(mat)HY(Tar)HY(get)YH()ES( instance + is similar the )SM(std::ostream)ES( case. For instance: + )EP( + + ) 38 63 PR(using std::auto_ptr; + +// Obtain the object model. +// +auto_ptr<type> r = ... + +// Prepare namespace mapping and schema location information. +// +xml_schema::namespace_infomap map; + +map["t"].name = "http://www.codesynthesis.com/test"; +map["t"].schema = "test.xsd"; + +using namespace xercesc; + +XMLPlatformUtils::Initialize \201\202; + +{ + // Choose a target. + // + auto_ptr<XMLFormatTarget> ft; + + if \201argc != 2\202 + { + ft = auto_ptr<XMLFormatTarget> \201new StdOutFormatTarget \201\202\202; + } + else + { + ft = auto_ptr<XMLFormatTarget> \201 + new LocalFileFormatTarget \201argv[1]\202\202; + })WR( + + // Write it out. + // + name \201*ft, *r, map\202; +} + +XMLPlatformUtils::Terminate \201\202;)RP( + + )0 P(Note that we had to initial)HY(ize)YH( the Xerces-C++ runtime before we + could call this seri)HY(al)HY(iza)HY(tion)YH( func)HY(tion)YH(.)EP( + + )0 2 84 H(4.7)WB 178 Sn()WB 88 Sn( Seri)HY(al)HY(iz)HY(ing)YH( to DOM)EA()EH( + + )0 P(The mapping provides two over)HY(loaded)YH( func)HY(tions)YH( that imple)HY(ment)YH( + seri)HY(al)HY(iza)HY(tion)YH( to a DOM instance. The first creates a DOM instance + for you and the second seri)HY(al)HY(izes)YH( to an exist)HY(ing)YH( DOM instance. + While seri)HY(al)HY(iz)HY(ing)YH( to a new DOM instance is similar to seri)HY(al)HY(iz)HY(ing)YH( + to )SM(std::ostream)ES( or )SM(xercesc::XMLFor)HY(mat)HY(Tar)HY(get)YH()ES(, + seri)HY(al)HY(iz)HY(ing)YH( to an exist)HY(ing)YH( DOM instance requires quite a bit of work + from your side. You will need to set all the custom names)HY(pace)YH( mapping + attributes as well as the )SM(schemaLo)HY(ca)HY(tion)YH()ES( and/or + )SM(noNames)HY(paceSchemaLo)HY(ca)HY(tion)YH()ES( attributes. The follow)HY(ing)YH( + listing should give you an idea about what needs to be done: + )EP( + + ) 24 67 PR(// Obtain the object model. +// +std::auto_ptr<type> r = ... + +using namespace xercesc; + +XMLPlatformUtils::Initialize \201\202; + +{ + // Create a DOM instance. Set custom namespace mapping and schema + // location attributes. + // + DOMDocument& doc = ... + + // Serialize to DOM. + // + name \201doc, *r\202; + + // Serialize the DOM document to XML. + // + ... +} + +XMLPlatformUtils::Terminate \201\202;)RP( + + )0 P(For more infor)HY(ma)HY(tion)YH( on how to create and seri)HY(al)HY(ize)YH( a DOM instance + refer to the Xerces-C++ docu)HY(men)HY(ta)HY(tion)YH(. In addi)HY(tion)YH(, the + )R8 2 A(C++/Tree Mapping + FAQ)EA( shows how to imple)HY(ment)YH( these oper)HY(a)HY(tions)YH( using the XSD + runtime util)HY(i)HY(ties)YH(. + )EP( + + )0 1 85 H(5)WB 179 Sn()WB 89 Sn( Addi)HY(tional)YH( Func)HY(tion)HY(al)HY(ity)YH()EA()EH( + + )0 P(The C++/Tree mapping provides a number of optional features + that can be useful in certain situ)HY(a)HY(tions)YH(. They are described + in the follow)HY(ing)YH( sections.)EP( + + )0 2 86 H(5.1)WB 180 Sn()WB 90 Sn( DOM Asso)HY(ci)HY(a)HY(tion)YH()EA()EH( + + )0 P(Normally, after parsing is complete, the DOM docu)HY(ment)YH( which + was used to extract the data is discarded. However, the parsing + func)HY(tions)YH( can be instructed to preserve the DOM docu)HY(ment)YH( + and create an asso)HY(ci)HY(a)HY(tion)YH( between the DOM nodes and object model + nodes. When there is an asso)HY(ci)HY(a)HY(tion)YH( between the DOM and + object model nodes, you can obtain the corre)HY(spond)HY(ing)YH( DOM element + or attribute node from an object model node as well as perform + the reverse tran)HY(si)HY(tion)YH(: obtain the corre)HY(spond)HY(ing)YH( object model + from a DOM element or attribute node.)EP( + + )0 P(Main)HY(tain)HY(ing)YH( DOM asso)HY(ci)HY(a)HY(tion)YH( is normally useful when the appli)HY(ca)HY(tion)YH( + needs access to XML constructs that are not preserved in the + object model, for example, text in the mixed content model. + Another useful aspect of DOM asso)HY(ci)HY(a)HY(tion)YH( is the ability of the + appli)HY(ca)HY(tion)YH( to navi)HY(gate)YH( the docu)HY(ment)YH( tree using the generic DOM + inter)HY(face)YH( \201for example, with the help of an XPath proces)HY(sor)YH(\202 + and then move back to the stat)HY(i)HY(cally)YH(-typed object model. Note + also that while you can change the under)HY(ly)HY(ing)YH( DOM docu)HY(ment)YH(, + these changes are not reflected in the object model and will + be ignored during seri)HY(al)HY(iza)HY(tion)YH(. If you need to not only access + but also modify some aspects of XML that are not preserved in + the object model, then type customiza)HY(tion)YH( with custom parsing + constructs and seri)HY(al)HY(iza)HY(tion)YH( oper)HY(a)HY(tors)YH( should be used instead.)EP( + + )0 P(To request DOM asso)HY(ci)HY(a)HY(tion)YH( you will need to pass the + )SM(xml_schema::flags::keep_dom)ES( flag to one of the + parsing func)HY(tions)YH( \201see )0 63 1 A(Section 3.2, + "Flags and Prop)HY(er)HY(ties)YH(")63 0 TN TL()Ec /AF f D( for more infor)HY(ma)HY(tion)YH(\202. In this case the + DOM docu)HY(ment)YH( is retained and will be released when the object model + is deleted. Note that since DOM nodes "out-live" the parsing func)HY(tion)YH( + call, you need to initial)HY(ize)YH( the Xerces-C++ runtime before calling + one of the parsing func)HY(tions)YH( with the )SM(keep_dom)ES( flag and + termi)HY(nate)YH( it after the object model is destroyed \201see + )0 62 1 A(Section 3.1, "Initial)HY(iz)HY(ing)YH( the Xerces-C++ Runtime")62 0 TN TL()Ec /AF f D(\202. + The DOM asso)HY(ci)HY(a)HY(tion)YH( is also main)HY(tained)YH( in complete copies of the + object model \201that is, the DOM docu)HY(ment)YH( is cloned and asso)HY(ci)HY(a)HY(tions)YH( + are reestab)HY(lished)YH(\202.)EP( + + )0 P(To obtain the corre)HY(spond)HY(ing)YH( DOM node from an object model node + you will need to call the )SM(_node)ES( acces)HY(sor)YH( func)HY(tion)YH( + which returns a pointer to )SM(DOMNode)ES(. You can then query + this DOM node's type and cast it to either )SM(DOMAttr*)ES( + or )SM(DOMEle)HY(ment)YH(*)ES(. To obtain the corre)HY(spond)HY(ing)YH( object + model node from a DOM node, the DOM user data API is used. The + )SM(xml_schema::dom::tree_node_key)ES( vari)HY(able)YH( contains + the key for object model nodes. The follow)HY(ing)YH( schema and code + frag)HY(ment)YH( show how to navi)HY(gate)YH( from DOM to object model nodes + and in the oppo)HY(site)YH( direc)HY(tion)YH(:)EP( + + ) 7 37 PR(<complexType name="object"> + <sequence> + <element name="a" type="string"/> + </sequence> +</complexType> + +<element name="root" type="object"/>)RP( + + ) 42 68 PR(using namespace xercesc; + +XMLPlatformUtils::Initialize \201\202; + +{ + // Parse XML to object model. + // + std::auto_ptr<type> r = root \201 + "root.xml", + xml_schema::flags::keep_dom | + xml_schema::flags::dont_initialize\202; + + DOMNode* n = root->_node \201\202; + assert \201n->getNodeType \201\202 != DOMNode::ELEMENT_NODE\202; + DOMElement* re = static_cast<DOMElement*> \201n\202; + + // Get the 'a' element. Note that it is not necessarily the + // first child node of 'root' since there could be whitespace + // nodes before it. + // + DOMElement* ae; + + for \201n = re->getFirstChild \201\202; n != 0; n = n->getNextSibling \201\202\202 + { + if \201n->getNodeType \201\202 == DOMNode::ELEMENT_NODE\202 + { + ae = static_cast<DOMElement*> \201n\202; + break; + } + } +)WR( + // Get from the 'a' DOM element to xml_schema::string object model + // node. + // + xml_schema::type& t \201 + *reinterpret_cast<xml_schema::type*> \201 + ae->getUserData \201xml_schema::dom::tree_node_key\202\202\202; + + xml_schema::string& a \201dynamic_cast<xml_schema::string&> \201t\202\202; +} + +XMLPlatformUtils::Terminate \201\202;)RP( + + )0 P(The 'mixed' example which can be found in the XSD distri)HY(bu)HY(tion)YH( + shows how to handle the mixed content using DOM asso)HY(ci)HY(a)HY(tion)YH(.)EP( + + )0 2 87 H(5.2)WB 181 Sn()WB 91 Sn( Binary Seri)HY(al)HY(iza)HY(tion)YH()EA()EH( + + )0 P(Besides reading from and writing to XML, the C++/Tree mapping + also allows you to save the object model to and load it from a + number of prede)HY(fined)YH( as well as custom data repre)HY(sen)HY(ta)HY(tion)YH( + formats. The prede)HY(fined)YH( binary formats are CDR \201Common Data + Repre)HY(sen)HY(ta)HY(tion)YH(\202 and XDR \201eXter)HY(nal)YH( Data Repre)HY(sen)HY(ta)HY(tion)YH(\202. A + custom format can easily be supported by provid)HY(ing)YH( + inser)HY(tion)YH( and extrac)HY(tion)YH( oper)HY(a)HY(tors)YH( for basic types.)EP( + + )0 P(Binary seri)HY(al)HY(iza)HY(tion)YH( saves only the data without any meta + infor)HY(ma)HY(tion)YH( or markup. As a result, saving to and loading + from a binary repre)HY(sen)HY(ta)HY(tion)YH( can be an order of magni)HY(tude)YH( + faster than parsing and seri)HY(al)HY(iz)HY(ing)YH( the same data in XML. + Further)HY(more)YH(, the result)HY(ing)YH( repre)HY(sen)HY(ta)HY(tion)YH( is normally several + times smaller than the equiv)HY(a)HY(lent)YH( XML repre)HY(sen)HY(ta)HY(tion)YH(. These + prop)HY(er)HY(ties)YH( make binary seri)HY(al)HY(iza)HY(tion)YH( ideal for inter)HY(nal)YH( data + exchange and storage. A typical appli)HY(ca)HY(tion)YH( that uses this + facil)HY(ity)YH( stores the data and commu)HY(ni)HY(cates)YH( within the + system using a binary format and reads/writes the data + in XML when commu)HY(ni)HY(cat)HY(ing)YH( with the outside world.)EP( + + )0 P(In order to request the gener)HY(a)HY(tion)YH( of inser)HY(tion)YH( oper)HY(a)HY(tors)YH( and + extrac)HY(tion)YH( construc)HY(tors)YH( for a specific prede)HY(fined)YH( or custom + data repre)HY(sen)HY(ta)HY(tion)YH( stream, you will need to use the + )SM(--gener)HY(ate)YH(-inser)HY(tion)YH()ES( and )SM(--gener)HY(ate)YH(-extrac)HY(tion)YH()ES( + compiler options. See the + )R9 2 A(XSD + Compiler Command Line Manual)EA( for more infor)HY(ma)HY(tion)YH(.)EP( + + )0 P(Once the inser)HY(tion)YH( oper)HY(a)HY(tors)YH( and extrac)HY(tion)YH( construc)HY(tors)YH( are + gener)HY(ated)YH(, you can use the )SM(xml_schema::istream)ES( + and )SM(xml_schema::ostream)ES( wrapper stream templates + to save the object model to and load it from a specific format. + The follow)HY(ing)YH( code frag)HY(ment)YH( shows how to do this using ACE + \201Adap)HY(tive)YH( Commu)HY(ni)HY(ca)HY(tion)YH( Envi)HY(ron)HY(ment)YH(\202 CDR streams as an example:)EP( + + ) 8 37 PR(<complexType name="object"> + <sequence> + <element name="a" type="string"/> + <element name="b" type="int"/> + </sequence> +</complexType> + +<element name="root" type="object"/>)RP( + + ) 21 51 PR(// Parse XML to object model. +// +std::auto_ptr<type> r = root \201"root.xml"\202; + +// Save to a CDR stream. +// +ACE_OutputCDR ace_ocdr; +xml_schema::ostream<ACE_OutputCDR> ocdr \201ace_ocdr\202; + +ocdr << *r; + +// Load from a CDR stream. +// +ACE_InputCDR ace_icdr \201buf, size\202; +xml_schema::istream<ACE_InputCDR> icdr \201ace_icdr\202; + +std::auto_ptr<object> copy \201new object \201icdr\202\202; + +// Serialize to XML. +// +root \201std::cout, *copy\202;)RP( + + )0 P(The XSD distri)HY(bu)HY(tion)YH( contains a number of exam)HY(ples)YH( that + show how to save the object model to and load it from + CDR, XDR, and a custom format.)EP( + + + + + )0 1 88 H(Appendix)WB 182 Sn()WB 92 Sn( A \236 Default and Fixed Values)EA()EH( + + )0 P(The follow)HY(ing)YH( table summa)HY(rizes)YH( the effect of default and fixed + values \201spec)HY(i)HY(fied)YH( with the )SM(default)ES( and )SM(fixed)ES( + attributes, respec)HY(tively)YH(\202 on attribute and element values. The + )SM(default)ES( and )SM(fixed)ES( attributes are mutu)HY(ally)YH( + exclu)HY(sive)YH(. It is also worth)HY(while)YH( to note that the fixed value seman)HY(tics)YH( + is a super)HY(set)YH( of the default value seman)HY(tics)YH(. + )EP( + + + )1 PT( + + )BR( +)BR( + + +)WB NL +/TE t D NP TU PM 0 eq and{/Pn () D showpage}if end restore diff --git a/xsd/documentation/cxx/tree/manual/index.xhtml b/xsd/documentation/cxx/tree/manual/index.xhtml new file mode 100644 index 0000000..43762b4 --- /dev/null +++ b/xsd/documentation/cxx/tree/manual/index.xhtml @@ -0,0 +1,6032 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> + +<head> + <title>C++/Tree Mapping User Manual</title> + + <meta name="copyright" content="© 2005-2010 Code Synthesis Tools CC"/> + <meta name="keywords" content="xsd,xml,schema,c++,mapping,data,binding,tree,serialization,guide,manual,examples"/> + <meta name="description" content="C++/Tree Mapping User Manual"/> + <meta name="revision" content="2.3.0"/> + + <link rel="stylesheet" type="text/css" href="../../../default.css" /> + <!--[if lt IE 7]><link rel="stylesheet" type="text/css" href="/default-ie.css"/><![endif]--> + +<style type="text/css"> + pre { + padding : 0 0 0 0em; + margin : 0em 0em 0em 0; + + font-size : 102% + } + + body { + min-width: 48em; + } + + h1 { + font-weight: bold; + font-size: 200%; + } + + h2 { + font-weight : bold; + font-size : 150%; + + padding-top : 0.8em; + } + + h3 { + font-size : 130%; + padding-top : 0.8em; + } + + /* Adjust indentation for three levels. */ + #container { + max-width: 48em; + } + + #content { + padding: 0 0.1em 0 4em; + /*background-color: red;*/ + } + + #content h1 { + margin-left: -2.06em; + } + + #content h2 { + margin-left: -1.33em; + } + + /* Title page */ + + #titlepage { + padding: 2em 0 1em 0; + border-bottom: 1px solid black; + } + + #titlepage #title { + font-weight: bold; + font-size: 200%; + text-align: center; + padding: 1em 0 2em 0; + } + + /* Lists */ + ul.list li { + padding-top : 0.3em; + padding-bottom : 0.3em; + } + + + /* Built-in table */ + #builtin { + margin: 2em 0 2em 0; + + border-collapse : collapse; + border : 1px solid; + border-color : #000000; + + font-size : 11px; + line-height : 14px; + } + + #builtin th, #builtin td { + border: 1px solid; + padding : 0.9em 0.9em 0.7em 0.9em; + } + + #builtin th { + background : #cde8f6; + } + + #builtin td { + text-align: left; + } + + + /* default-fixed */ + #default-fixed { + margin: 2em 0 2em 0; + + border-collapse : collapse; + border : 1px solid; + border-color : #000000; + + font-size : 11px; + line-height : 14px; + } + + #default-fixed th, #default-fixed td { + border: 1px solid; + padding : 0.9em 0.9em 0.7em 0.9em; + } + + #default-fixed th { + background : #cde8f6; + } + + #default-fixed td { + text-align: center; + } + + + /* */ + dl dt { + padding : 0.8em 0 0 0; + } + + + /* TOC */ + table.toc { + border-style : none; + border-collapse : separate; + border-spacing : 0; + + margin : 0.2em 0 0.2em 0; + padding : 0 0 0 0; + } + + table.toc tr { + padding : 0 0 0 0; + margin : 0 0 0 0; + } + + table.toc * td, table.toc * th { + border-style : none; + margin : 0 0 0 0; + vertical-align : top; + } + + table.toc * th { + font-weight : normal; + padding : 0em 0.1em 0em 0; + text-align : left; + white-space : nowrap; + } + + table.toc * table.toc th { + padding-left : 1em; + } + + table.toc * td { + padding : 0em 0 0em 0.7em; + text-align : left; + } +</style> + + +</head> + +<body> +<div id="container"> + <div id="content"> + + <div class="noprint"> + + <div id="titlepage"> + <div id="title">C++/Tree Mapping User Manual</div> + + <p>Copyright © 2005-2010 CODE SYNTHESIS TOOLS CC</p> + + <p>Permission is granted to copy, distribute and/or modify this + document under the terms of the + <a href="http://www.codesynthesis.com/licenses/fdl-1.2.txt">GNU Free + Documentation License, version 1.2</a>; with no Invariant Sections, + no Front-Cover Texts and no Back-Cover Texts. + </p> + + <p>This document is available in the following formats: + <a href="http://www.codesynthesis.com/projects/xsd/documentation/cxx/tree/manual/index.xhtml">XHTML</a>, + <a href="http://www.codesynthesis.com/projects/xsd/documentation/cxx/tree/manual/cxx-tree-manual.pdf">PDF</a>, and + <a href="http://www.codesynthesis.com/projects/xsd/documentation/cxx/tree/manual/cxx-tree-manual.ps">PostScript</a>.</p> + </div> + + <h1>Table of Contents</h1> + + <table class="toc"> + <tr> + <th></th><td><a href="#0">Preface</a> + <table class="toc"> + <tr><th></th><td><a href="#0.1">About This Document</a></td></tr> + <tr><th></th><td><a href="#0.2">More Information</a></td></tr> + </table> + </td> + </tr> + + <tr> + <th>1</th><td><a href="#1">Introduction</a></td> + </tr> + + <tr> + <th>2</th><td><a href="#2">C++/Tree Mapping</a> + <table class="toc"> + <tr> + <th>2.1</th><td><a href="#2.1">Preliminary Information</a> + <table class="toc"> + <tr><th>2.1.1</th><td><a href="#2.1.1">Identifiers</a></td></tr> + <tr><th>2.1.2</th><td><a href="#2.1.2">Character Type and Encoding</a></td></tr> + <tr><th>2.1.3</th><td><a href="#2.1.3">XML Schema Namespace</a></td></tr> + <tr><th>2.1.4</th><td><a href="#2.1.4">Anonymous Types</a></td></tr> + </table> + </td> + </tr> + <tr> + <th>2.2</th><td><a href="#2.2">Error Handling</a> + <table class="toc"> + <tr><th>2.2.1</th><td><a href="#2.2.1"><code>xml_schema::duplicate_id</code></a></td></tr> + </table> + </td> + </tr> + <tr> + <th>2.3</th><td><a href="#2.3">Mapping for <code>import</code> and <code>include</code></a> + <table class="toc"> + <tr><th>2.3.1</th><td><a href="#2.3.1">Import</a></td></tr> + <tr><th>2.3.2</th><td><a href="#2.3.2">Inclusion with Target Namespace</a></td></tr> + <tr><th>2.3.3</th><td><a href="#2.3.3">Inclusion without Target Namespace</a></td></tr> + </table> + </td> + </tr> + <tr> + <th>2.4</th><td><a href="#2.4">Mapping for Namespaces</a></td> + </tr> + <tr> + <th>2.5</th><td><a href="#2.5">Mapping for Built-in Data Types</a> + <table class="toc"> + <tr><th>2.5.1</th><td><a href="#2.5.1">Inheritance from Built-in Data Types</a></td></tr> + <tr><th>2.5.2</th><td><a href="#2.5.2">Mapping for <code>anyType</code></a></td></tr> + <tr><th>2.5.3</th><td><a href="#2.5.3">Mapping for <code>anySimpleType</code></a></td></tr> + <tr><th>2.5.4</th><td><a href="#2.5.4">Mapping for <code>QName</code></a></td></tr> + <tr><th>2.5.5</th><td><a href="#2.5.5">Mapping for <code>IDREF</code></a></td></tr> + <tr><th>2.5.6</th><td><a href="#2.5.6">Mapping for <code>base64Binary</code> and <code>hexBinary</code></a></td></tr> + <tr><th>2.5.7</th><td><a href="#2.5.7">Time Zone Representation</a></td></tr> + <tr><th>2.5.8</th><td><a href="#2.5.8">Mapping for <code>date</code></a></td></tr> + <tr><th>2.5.9</th><td><a href="#2.5.9">Mapping for <code>dateTime</code></a></td></tr> + <tr><th>2.5.10</th><td><a href="#2.5.10">Mapping for <code>duration</code></a></td></tr> + <tr><th>2.5.11</th><td><a href="#2.5.11">Mapping for <code>gDay</code></a></td></tr> + <tr><th>2.5.12</th><td><a href="#2.5.12">Mapping for <code>gMonth</code></a></td></tr> + <tr><th>2.5.13</th><td><a href="#2.5.13">Mapping for <code>gMonthDay</code></a></td></tr> + <tr><th>2.5.14</th><td><a href="#2.5.14">Mapping for <code>gYear</code></a></td></tr> + <tr><th>2.5.15</th><td><a href="#2.5.15">Mapping for <code>gYearMonth</code></a></td></tr> + <tr><th>2.5.16</th><td><a href="#2.5.16">Mapping for <code>time</code></a></td></tr> + </table> + </td> + </tr> + <tr> + <th>2.6</th><td><a href="#2.6">Mapping for Simple Types</a> + <table class="toc"> + <tr><th>2.6.1</th><td><a href="#2.6.1">Mapping for Derivation by Restriction</a></td></tr> + <tr><th>2.6.2</th><td><a href="#2.6.2">Mapping for Enumerations</a></td></tr> + <tr><th>2.6.3</th><td><a href="#2.6.3">Mapping for Derivation by List</a></td></tr> + <tr><th>2.6.4</th><td><a href="#2.6.4">Mapping for Derivation by Union</a></td></tr> + </table> + </td> + </tr> + <tr> + <th>2.7</th><td><a href="#2.7">Mapping for Complex Types</a> + <table class="toc"> + <tr><th>2.7.1</th><td><a href="#2.7.1">Mapping for Derivation by Extension</a></td></tr> + <tr><th>2.7.2</th><td><a href="#2.7.2">Mapping for Derivation by Restriction</a></td></tr> + </table> + </td> + </tr> + <tr> + <th>2.8</th><td><a href="#2.8">Mapping for Local Elements and Attributes</a> + <table class="toc"> + <tr><th>2.8.1</th><td><a href="#2.8.1">Mapping for Members with the One Cardinality Class</a></td></tr> + <tr><th>2.8.2</th><td><a href="#2.8.2">Mapping for Members with the Optional Cardinality Class</a></td></tr> + <tr><th>2.8.3</th><td><a href="#2.8.3">Mapping for Members with the Sequence Cardinality Class</a></td></tr> + </table> + </td> + </tr> + <tr> + <th>2.9</th><td><a href="#2.9">Mapping for Global Elements</a> + <table class="toc"> + <tr><th>2.9.1</th><td><a href="#2.9.1">Element Types</a></td></tr> + <tr><th>2.9.2</th><td><a href="#2.9.2">Element Map</a></td></tr> + </table> + </td> + </tr> + <tr> + <th>2.10</th><td><a href="#2.10">Mapping for Global Attributes</a></td> + </tr> + <tr> + <th>2.11</th><td><a href="#2.11">Mapping for <code>xsi:type</code> and Substitution Groups</a></td> + </tr> + <tr> + <th>2.12</th><td><a href="#2.12">Mapping for <code>any</code> and <code>anyAttribute</code></a> + <table class="toc"> + <tr><th>2.12.1</th><td><a href="#2.12.1">Mapping for <code>any</code> with the One Cardinality Class</a></td></tr> + <tr><th>2.12.2</th><td><a href="#2.12.2">Mapping for <code>any</code> with the Optional Cardinality Class</a></td></tr> + <tr><th>2.12.3</th><td><a href="#2.12.3">Mapping for <code>any</code> with the Sequence Cardinality Class</a></td></tr> + <tr><th>2.12.4</th><td><a href="#2.12.4">Mapping for <code>anyAttribute</code></a></td></tr> + </table> + </td> + </tr> + <tr> + <th>2.13</th><td><a href="#2.13">Mapping for Mixed Content Models</a></td> + </tr> + </table> + </td> + </tr> + + <tr> + <th>3</th><td><a href="#3">Parsing</a> + <table class="toc"> + <tr> + <th>3.1</th><td><a href="#3.1">Initializing the Xerces-C++ Runtime</a></td> + </tr> + <tr> + <th>3.2</th><td><a href="#3.2">Flags and Properties</a></td> + </tr> + <tr> + <th>3.3</th><td><a href="#3.3">Error Handling</a> + <table class="toc"> + <tr><th>3.3.1</th><td><a href="#3.3.1"><code>xml_schema::parsing</code></a></td></tr> + <tr><th>3.3.2</th><td><a href="#3.3.2"><code>xml_schema::expected_element</code></a></td></tr> + <tr><th>3.3.3</th><td><a href="#3.3.3"><code>xml_schema::unexpected_element</code></a></td></tr> + <tr><th>3.3.4</th><td><a href="#3.3.4"><code>xml_schema::expected_attribute</code></a></td></tr> + <tr><th>3.3.5</th><td><a href="#3.3.5"><code>xml_schema::unexpected_enumerator</code></a></td></tr> + <tr><th>3.3.6</th><td><a href="#3.3.6"><code>xml_schema::expected_text_content</code></a></td></tr> + <tr><th>3.3.7</th><td><a href="#3.3.7"><code>xml_schema::no_type_info</code></a></td></tr> + <tr><th>3.3.8</th><td><a href="#3.3.8"><code>xml_schema::not_derived</code></a></td></tr> + <tr><th>3.3.9</th><td><a href="#3.3.9"><code>xml_schema::not_prefix_mapping</code></a></td></tr> + </table> + </td> + </tr> + <tr> + <th>3.4</th><td><a href="#3.4">Reading from a Local File or URI</a></td> + </tr> + <tr> + <th>3.5</th><td><a href="#3.5">Reading from <code>std::istream</code></a></td> + </tr> + <tr> + <th>3.6</th><td><a href="#3.6">Reading from <code>xercesc::InputSource</code></a></td> + </tr> + <tr> + <th>3.7</th><td><a href="#3.7">Reading from DOM</a></td> + </tr> + </table> + </td> + </tr> + + <tr> + <th>4</th><td><a href="#4">Serialization</a> + <table class="toc"> + <tr> + <th>4.1</th><td><a href="#4.1">Initializing the Xerces-C++ Runtime</a></td> + </tr> + <tr> + <th>4.2</th><td><a href="#4.2">Namespace Infomap and Character Encoding</a></td> + </tr> + <tr> + <th>4.3</th><td><a href="#4.3">Flags</a></td> + </tr> + <tr> + <th>4.4</th><td><a href="#4.4">Error Handling</a> + <table class="toc"> + <tr><th>4.4.1</th><td><a href="#4.4.1"><code>xml_schema::serialization</code></a></td></tr> + <tr><th>4.4.2</th><td><a href="#4.4.2"><code>xml_schema::unexpected_element</code></a></td></tr> + <tr><th>4.4.3</th><td><a href="#4.4.3"><code>xml_schema::no_type_info</code></a></td></tr> + </table> + </td> + </tr> + <tr> + <th>4.5</th><td><a href="#4.5">Serializing to <code>std::ostream</code></a></td> + </tr> + <tr> + <th>4.6</th><td><a href="#4.6">Serializing to <code>xercesc::XMLFormatTarget</code></a></td> + </tr> + <tr> + <th>4.7</th><td><a href="#4.7">Serializing to DOM</a></td> + </tr> + </table> + </td> + </tr> + + <tr> + <th>5</th><td><a href="#5">Additional Functionality</a> + <table class="toc"> + <tr> + <th>5.1</th><td><a href="#5.1">DOM Association</a></td> + </tr> + <tr> + <th>5.2</th><td><a href="#5.2">Binary Serialization</a></td> + </tr> + </table> + </td> + </tr> + + <tr> + <th></th><td><a href="#A">Appendix A — Default and Fixed Values</a></td> + </tr> + + </table> + </div> + + <h1><a name="0">Preface</a></h1> + + <h2><a name="0.1">About This Document</a></h2> + + <p>This document describes the mapping of W3C XML Schema + to the C++ programming language as implemented by + <a href="http://www.codesynthesis.com/products/xsd">CodeSynthesis + XSD</a> - an XML Schema to C++ data binding compiler. The mapping + represents information stored in XML instance documents as a + statically-typed, tree-like in-memory data structure and is + called C++/Tree. + </p> + + <p>Revision 2.3.0<br/> <!-- Remember to change revision in other places --> + This revision of the manual describes the C++/Tree + mapping as implemented by CodeSynthesis XSD version 3.3.0. + </p> + + <p>This document is available in the following formats: + <a href="http://codesynthesis.com/projects/xsd/documentation/cxx/tree/manual/index.xhtml">XHTML</a>, + <a href="http://codesynthesis.com/projects/xsd/documentation/cxx/tree/manual/cxx-tree-manual.pdf">PDF</a>, and + <a href="http://codesynthesis.com/projects/xsd/documentation/cxx/tree/manual/cxx-tree-manual.ps">PostScript</a>.</p> + + <h2><a name="0.2">More Information</a></h2> + + <p>Beyond this manual, you may also find the following sources of + information useful:</p> + + <ul class="list"> + <li><a href="http://www.codesynthesis.com/projects/xsd/documentation/cxx/tree/guide/">C++/Tree + Mapping Getting Started Guide</a></li> + + <li><a href="http://wiki.codesynthesis.com/Tree/Customization_guide">C++/Tree + Mapping Customization Guide</a></li> + + <li><a href="http://www.codesynthesis.com/projects/xsd/documentation/cxx/tree/dbxml/">C++/Tree + Mapping and Berkeley DB XML Integration Guide</a></li> + + <li><a href="http://wiki.codesynthesis.com/Tree/FAQ">C++/Tree + Mapping Frequently Asked Questions (FAQ)</a></li> + + <li><a href="http://www.codesynthesis.com/projects/xsd/documentation/xsd.xhtml">XSD + Compiler Command Line Manual</a></li> + + <li>The <code>examples/cxx/tree/</code> directory in the XSD + distribution contains a collection of examples and a README + file with an overview of each example.</li> + + <li>The <code>README</code> file in the XSD distribution explains + how to compile the examples on various platforms.</li> + + <li>The <a href="http://www.codesynthesis.com/mailman/listinfo/xsd-users">xsd-users</a> + mailing list is a place to ask questions. Furthermore the + <a href="http://www.codesynthesis.com/pipermail/xsd-users/">archives</a> + may already have answers to some of your questions.</li> + + </ul> + + + <h1><a name="1">1 Introduction</a></h1> + + <p>C++/Tree is a W3C XML Schema to C++ mapping that represents the + data stored in XML as a statically-typed, vocabulary-specific + object model. Based on a formal description of an XML vocabulary + (schema), the C++/Tree mapping produces a tree-like data structure + suitable for in-memory processing as well as XML parsing and + serialization code.</p> + + <p>A typical application that processes XML documents usually + performs the following three steps: it first reads (parses) an XML + instance document to an object model, it then performs + some useful computations on that model which may involve + modification of the model, and finally it may write (serialize) + the modified object model back to XML. + </p> + + <p>The C++/Tree mapping consists of C++ types that represent the + given vocabulary (<a href="#2">Chapter 2, "C++/Tree Mapping"</a>), + a set of parsing functions that convert XML documents to + a tree-like in-memory data structure (<a href="#3">Chapter 3, + "Parsing"</a>), and a set of serialization functions that convert + the object model back to XML (<a href="#4">Chapter 4, + "Serialization"</a>). Furthermore, the mapping provides a number + of additional features, such as DOM association and binary + serialization, that can be useful in some applications + (<a href="#5">Chapter 5, "Additional Functionality"</a>). + </p> + + + <!-- Chapter 2 --> + + + <h1><a name="2">2 C++/Tree Mapping</a></h1> + + <h2><a name="2.1">2.1 Preliminary Information</a></h2> + + <h3><a name="2.1.1">2.1.1 Identifiers</a></h3> + + <p>XML Schema names may happen to be reserved C++ keywords or contain + characters that are illegal in C++ identifiers. To avoid C++ compilation + problems, such names are changed (escaped) when mapped to C++. If an + XML Schema name is a C++ keyword, the "_" suffix is added to it. All + character of an XML Schema name that are not allowed in C++ identifiers + are replaced with "_". + </p> + + <p>For example, XML Schema name <code>try</code> will be mapped to + C++ identifier <code>try_</code>. Similarly, XML Schema name + <code>strange.na-me</code> will be mapped to C++ identifier + <code>strange_na_me</code>. + </p> + + <p>Furthermore, conflicts between type names and function names in the + same scope are resolved using name escaping. Such conflicts include + both a global element (which is mapped to a set of parsing and/or + serialization functions or element types, see <a href="#2.9">Section + 2.9, "Mapping for Global Elements"</a>) and a global type sharing the + same name as well as a local element or attribute inside a type having + the same name as the type itself.</p> + + <p>For example, if we had a global type <code>catalog</code> + and a global element with the same name then the type would be + mapped to a C++ class with name <code>catalog</code> while the + parsing functions corresponding to the global element would have + their names escaped as <code>catalog_</code>. + </p> + + <p>By default the mapping uses the so-called K&R (Kernighan and + Ritchie) identifier naming convention which is also used throughout + this manual. In this convention both type and function names are in + lower case and words are separated by underscores. If your application + code or schemas use a different notation, you may want to change the + naming convention used by the mapping for consistency. + The compiler supports a set of widely-used naming conventions + that you can select with the <code>--type-naming</code> and + <code>--function-naming</code> options. You can also further + refine one of the predefined conventions or create a completely + custom naming scheme by using the <code>--*-regex</code> options. + For more detailed information on these options refer to the NAMING + CONVENTION section in the <a href="http://www.codesynthesis.com/projects/xsd/documentation/xsd.xhtml">XSD + Compiler Command Line Manual</a>.</p> + + <h3><a name="2.1.2">2.1.2 Character Type and Encoding</a></h3> + + <p>The code that implements the mapping, depending on the + <code>--char-type</code> option, is generated using either + <code>char</code> or <code>wchar_t</code> as the character + type. In this document code samples use symbol <code>C</code> + to refer to the character type you have selected when translating + your schemas, for example <code>std::basic_string<C></code>. + </p> + + <p>Another aspect of the mapping that depends on the character type + is character encoding. For the <code>char</code> character type + the default encoding is UTF-8. Other supported encodings are + ISO-8859-1, Xerces-C++ Local Code Page (LPC), as well as + custom encodings and can be selected with the + <code>--char-encoding</code> command line option.</p> + + <p>For the <code>wchar_t</code> character type the encoding is + automatically selected between UTF-16 and UTF-32/UCS-4 depending + on the size of the <code>wchar_t</code> type. On some platforms + (for example, Windows with Visual C++ and AIX with IBM XL C++) + <code>wchar_t</code> is 2 bytes long. For these platforms the + encoding is UTF-16. On other platforms <code>wchar_t</code> is 4 bytes + long and UTF-32/UCS-4 is used.</p> + + <h3><a name="2.1.3">2.1.3 XML Schema Namespace</a></h3> + + <p>The mapping relies on some predefined types, classes, and functions + that are logically defined in the XML Schema namespace reserved for + the XML Schema language (<code>http://www.w3.org/2001/XMLSchema</code>). + By default, this namespace is mapped to C++ namespace + <code>xml_schema</code>. It is automatically accessible + from a C++ compilation unit that includes a header file generated + from an XML Schema definition. + </p> + + <p>Note that, if desired, the default mapping of this namespace can be + changed as described in <a href="#2.4">Section 2.4, "Mapping for + Namespaces"</a>. + </p> + + + <h3><a name="2.1.4">2.1.4 Anonymous Types</a></h3> + + <p>For the purpose of code generation, anonymous types defined in + XML Schema are automatically assigned names that are derived + from enclosing attributes and elements. Otherwise, such types + follows standard mapping rules for simple and complex type + definitions (see <a href="#2.6">Section 2.6, "Mapping for Simple Types"</a> + and <a href="#2.7">Section 2.7, "Mapping for Complex Types"</a>). + For example, in the following schema fragment: + </p> + + <pre class="xml"> +<element name="object"> + <complexType> + ... + </complexType> +</element> + </pre> + + <p>The anonymous type defined inside element <code>object</code> will + be given name <code>object</code>. The compiler has a number of + options that control the process of anonymous type naming. For more + information refer to the <a href="http://www.codesynthesis.com/projects/xsd/documentation/xsd.xhtml">XSD + Compiler Command Line Manual</a>.</p> + + + <h2><a name="2.2">2.2 Error Handling</a></h2> + + <p>The mapping uses the C++ exception handling mechanism as a primary way + of reporting error conditions. All exceptions that are specified in + this mapping derive from <code>xml_schema::exception</code> which + itself is derived from <code>std::exception</code>: + </p> + + <pre class="c++"> +struct exception: virtual std::exception +{ + friend + std::basic_ostream<C>& + operator<< (std::basic_ostream<C>& os, const exception& e) + { + e.print (os); + return os; + } + +protected: + virtual void + print (std::basic_ostream<C>&) const = 0; +}; + </pre> + + <p>The exception hierarchy supports "virtual" <code>operator<<</code> + which allows you to obtain diagnostics corresponding to the thrown + exception using the base exception interface. For example:</p> + + <pre class="c++"> +try +{ + ... +} +catch (const xml_schema::exception& e) +{ + cerr << e << endl; +} + </pre> + + <p>The following sub-sections describe exceptions thrown by the + types that constitute the object model. + <a href="#3.3">Section 3.3, "Error Handling"</a> of + <a href="#3">Chapter 3, "Parsing"</a> describes exceptions + and error handling mechanisms specific to the parsing functions. + <a href="#4.4">Section 4.4, "Error Handling"</a> of + <a href="#4">Chapter 4, "Serialization"</a> describes exceptions + and error handling mechanisms specific to the serialization functions. + </p> + + + <h3><a name="2.2.1">2.2.1 <code>xml_schema::duplicate_id</code></a></h3> + + <pre class="c++"> +struct duplicate_id: virtual exception +{ + duplicate_id (const std::basic_string<C>& id); + + const std::basic_string<C>& + id () const; + + virtual const char* + what () const throw (); +}; + </pre> + + <p>The <code>xml_schema::duplicate_id</code> is thrown when + a conflicting instance of <code>xml_schema::id</code> (see + <a href="#2.5">Section 2.5, "Mapping for Built-in Data Types"</a>) + is added to a tree. The offending ID value can be obtained using + the <code>id</code> function. + </p> + + <h2><a name="2.3">2.3 Mapping for <code>import</code> and <code>include</code></a></h2> + + <h3><a name="2.3.1">2.3.1 Import</a></h3> + + <p>The XML Schema <code>import</code> element is mapped to the C++ + Preprocessor <code>#include</code> directive. The value of + the <code>schemaLocation</code> attribute is used to derive + the name of the header file that appears in the <code>#include</code> + directive. For instance: + </p> + + <pre class="xml"> +<import namespace="http://www.codesynthesis.com/test" + schemaLocation="test.xsd"/> + </pre> + + <p>is mapped to:</p> + + <pre class="c++"> +#include "test.hxx" + </pre> + + <p>Note that you will need to compile imported schemas separately + in order to produce corresponding header files.</p> + + <h3><a name="2.3.2">2.3.2 Inclusion with Target Namespace</a></h3> + + <p>The XML Schema <code>include</code> element which refers to a schema + with a target namespace or appears in a schema without a target namespace + follows the same mapping rules as the <code>import</code> element, + see <a href="#2.3.1">Section 2.3.1, "Import"</a>. + </p> + + <h3><a name="2.3.3">2.3.3 Inclusion without Target Namespace</a></h3> + + <p>For the XML Schema <code>include</code> element which refers to a schema + without a target namespace and appears in a schema with a target + namespace (such inclusion sometimes called "chameleon inclusion"), + declarations and definitions from the included schema are generated + in-line in the namespace of the including schema as if they were + declared and defined there verbatim. For example, consider the + following two schemas: + </p> + + <pre class="xml"> +<-- common.xsd --> +<schema> + <complexType name="type"> + ... + </complexType> +</schema> + +<-- test.xsd --> +<schema targetNamespace="http://www.codesynthesis.com/test"> + <include schemaLocation="common.xsd"/> +</schema> + </pre> + + <p>The fragment of interest from the generated header file for + <code>text.xsd</code> would look like this:</p> + + <pre class="c++"> +// test.hxx +namespace test +{ + class type + { + ... + }; +} + </pre> + + <h2><a name="2.4">2.4 Mapping for Namespaces</a></h2> + + <p>An XML Schema namespace is mapped to one or more nested C++ + namespaces. XML Schema namespaces are identified by URIs. + By default, a namespace URI is mapped to a sequence of + C++ namespace names by removing the protocol and host parts + and splitting the rest into a sequence of names with '<code>/</code>' + as the name separator. For instance: + </p> + + <pre class="xml"> +<schema targetNamespace="http://www.codesynthesis.com/system/test"> + ... +</schema> + </pre> + + <p>is mapped to:</p> + + <pre class="c++"> +namespace system +{ + namespace test + { + ... + } +} + </pre> + + <p>The default mapping of namespace URIs to C++ namespace names can be + altered using the <code>--namespace-map</code> and + <code>--namespace-regex</code> options. See the + <a href="http://www.codesynthesis.com/projects/xsd/documentation/xsd.xhtml">XSD + Compiler Command Line Manual</a> for more information. + </p> + + <h2><a name="2.5">2.5 Mapping for Built-in Data Types</a></h2> + + <p>The mapping of XML Schema built-in data types to C++ types is + summarized in the table below.</p> + + <!-- border="1" is necessary for html2ps --> + <table id="builtin" border="1"> + <tr> + <th>XML Schema type</th> + <th>Alias in the <code>xml_schema</code> namespace</th> + <th>C++ type</th> + </tr> + + <tr> + <th colspan="3">anyType and anySimpleType types</th> + </tr> + <tr> + <td><code>anyType</code></td> + <td><code>type</code></td> + <td><a href="#2.5.2">Section 2.5.2, "Mapping for <code>anyType</code>"</a></td> + </tr> + <tr> + <td><code>anySimpleType</code></td> + <td><code>simple_type</code></td> + <td><a href="#2.5.3">Section 2.5.3, "Mapping for <code>anySimpleType</code>"</a></td> + </tr> + + <tr> + <th colspan="3">fixed-length integral types</th> + </tr> + <!-- 8-bit --> + <tr> + <td><code>byte</code></td> + <td><code>byte</code></td> + <td><code>signed char</code></td> + </tr> + <tr> + <td><code>unsignedByte</code></td> + <td><code>unsigned_byte</code></td> + <td><code>unsigned char</code></td> + </tr> + + <!-- 16-bit --> + <tr> + <td><code>short</code></td> + <td><code>short_</code></td> + <td><code>short</code></td> + </tr> + <tr> + <td><code>unsignedShort</code></td> + <td><code>unsigned_short</code></td> + <td><code>unsigned short</code></td> + </tr> + + <!-- 32-bit --> + <tr> + <td><code>int</code></td> + <td><code>int_</code></td> + <td><code>int</code></td> + </tr> + <tr> + <td><code>unsignedInt</code></td> + <td><code>unsigned_int</code></td> + <td><code>unsigned int</code></td> + </tr> + + <!-- 64-bit --> + <tr> + <td><code>long</code></td> + <td><code>long_</code></td> + <td><code>long long</code></td> + </tr> + <tr> + <td><code>unsignedLong</code></td> + <td><code>unsigned_long</code></td> + <td><code>unsigned long long</code></td> + </tr> + + <tr> + <th colspan="3">arbitrary-length integral types</th> + </tr> + <tr> + <td><code>integer</code></td> + <td><code>integer</code></td> + <td><code>long long</code></td> + </tr> + <tr> + <td><code>nonPositiveInteger</code></td> + <td><code>non_positive_integer</code></td> + <td><code>long long</code></td> + </tr> + <tr> + <td><code>nonNegativeInteger</code></td> + <td><code>non_negative_integer</code></td> + <td><code>unsigned long long</code></td> + </tr> + <tr> + <td><code>positiveInteger</code></td> + <td><code>positive_integer</code></td> + <td><code>unsigned long long</code></td> + </tr> + <tr> + <td><code>negativeInteger</code></td> + <td><code>negative_integer</code></td> + <td><code>long long</code></td> + </tr> + + <tr> + <th colspan="3">boolean types</th> + </tr> + <tr> + <td><code>boolean</code></td> + <td><code>boolean</code></td> + <td><code>bool</code></td> + </tr> + + <tr> + <th colspan="3">fixed-precision floating-point types</th> + </tr> + <tr> + <td><code>float</code></td> + <td><code>float_</code></td> + <td><code>float</code></td> + </tr> + <tr> + <td><code>double</code></td> + <td><code>double_</code></td> + <td><code>double</code></td> + </tr> + + <tr> + <th colspan="3">arbitrary-precision floating-point types</th> + </tr> + <tr> + <td><code>decimal</code></td> + <td><code>decimal</code></td> + <td><code>double</code></td> + </tr> + + <tr> + <th colspan="3">string types</th> + </tr> + <tr> + <td><code>string</code></td> + <td><code>string</code></td> + <td>type derived from <code>std::basic_string</code></td> + </tr> + <tr> + <td><code>normalizedString</code></td> + <td><code>normalized_string</code></td> + <td>type derived from <code>string</code></td> + </tr> + <tr> + <td><code>token</code></td> + <td><code>token</code></td> + <td>type derived from <code>normalized_string</code></td> + </tr> + <tr> + <td><code>Name</code></td> + <td><code>name</code></td> + <td>type derived from <code>token</code></td> + </tr> + <tr> + <td><code>NMTOKEN</code></td> + <td><code>nmtoken</code></td> + <td>type derived from <code>token</code></td> + </tr> + <tr> + <td><code>NMTOKENS</code></td> + <td><code>nmtokens</code></td> + <td>type derived from <code>sequence<nmtoken></code></td> + </tr> + <tr> + <td><code>NCName</code></td> + <td><code>ncname</code></td> + <td>type derived from <code>name</code></td> + </tr> + <tr> + <td><code>language</code></td> + <td><code>language</code></td> + <td>type derived from <code>token</code></td> + </tr> + + <tr> + <th colspan="3">qualified name</th> + </tr> + <tr> + <td><code>QName</code></td> + <td><code>qname</code></td> + <td><a href="#2.5.4">Section 2.5.4, "Mapping for <code>QName</code>"</a></td> + </tr> + + <tr> + <th colspan="3">ID/IDREF types</th> + </tr> + <tr> + <td><code>ID</code></td> + <td><code>id</code></td> + <td>type derived from <code>ncname</code></td> + </tr> + <tr> + <td><code>IDREF</code></td> + <td><code>idref</code></td> + <td><a href="#2.5.5">Section 2.5.5, "Mapping for <code>IDREF</code>"</a></td> + </tr> + <tr> + <td><code>IDREFS</code></td> + <td><code>idrefs</code></td> + <td>type derived from <code>sequence<idref></code></td> + </tr> + + <tr> + <th colspan="3">URI types</th> + </tr> + <tr> + <td><code>anyURI</code></td> + <td><code>uri</code></td> + <td>type derived from <code>std::basic_string</code></td> + </tr> + + <tr> + <th colspan="3">binary types</th> + </tr> + <tr> + <td><code>base64Binary</code></td> + <td><code>base64_binary</code></td> + <td rowspan="2"><a href="#2.5.6">Section 2.5.6, "Mapping for + <code>base64Binary</code> and <code>hexBinary</code>"</a></td> + </tr> + <tr> + <td><code>hexBinary</code></td> + <td><code>hex_binary</code></td> + </tr> + + <tr> + <th colspan="3">date/time types</th> + </tr> + <tr> + <td><code>date</code></td> + <td><code>date</code></td> + <td><a href="#2.5.8">Section 2.5.8, "Mapping for + <code>date</code>"</a></td> + </tr> + <tr> + <td><code>dateTime</code></td> + <td><code>date_time</code></td> + <td><a href="#2.5.9">Section 2.5.9, "Mapping for + <code>dateTime</code>"</a></td> + </tr> + <tr> + <td><code>duration</code></td> + <td><code>duration</code></td> + <td><a href="#2.5.10">Section 2.5.10, "Mapping for + <code>duration</code>"</a></td> + </tr> + <tr> + <td><code>gDay</code></td> + <td><code>gday</code></td> + <td><a href="#2.5.11">Section 2.5.11, "Mapping for + <code>gDay</code>"</a></td> + </tr> + <tr> + <td><code>gMonth</code></td> + <td><code>gmonth</code></td> + <td><a href="#2.5.12">Section 2.5.12, "Mapping for + <code>gMonth</code>"</a></td> + </tr> + <tr> + <td><code>gMonthDay</code></td> + <td><code>gmonth_day</code></td> + <td><a href="#2.5.13">Section 2.5.13, "Mapping for + <code>gMonthDay</code>"</a></td> + </tr> + <tr> + <td><code>gYear</code></td> + <td><code>gyear</code></td> + <td><a href="#2.5.14">Section 2.5.14, "Mapping for + <code>gYear</code>"</a></td> + </tr> + <tr> + <td><code>gYearMonth</code></td> + <td><code>gyear_month</code></td> + <td><a href="#2.5.15">Section 2.5.15, "Mapping for + <code>gYearMonth</code>"</a></td> + </tr> + <tr> + <td><code>time</code></td> + <td><code>time</code></td> + <td><a href="#2.5.16">Section 2.5.16, "Mapping for + <code>time</code>"</a></td> + </tr> + + <tr> + <th colspan="3">entity types</th> + </tr> + <tr> + <td><code>ENTITY</code></td> + <td><code>entity</code></td> + <td>type derived from <code>name</code></td> + </tr> + <tr> + <td><code>ENTITIES</code></td> + <td><code>entities</code></td> + <td>type derived from <code>sequence<entity></code></td> + </tr> + </table> + + <p>All XML Schema built-in types are mapped to C++ classes that are + derived from the <code>xml_schema::simple_type</code> class except + where the mapping is to a fundamental C++ type.</p> + + <p>The <code>sequence</code> class template is defined in an + implementation-specific namespace. It conforms to the + sequence interface as defined by the ISO/ANSI Standard for + C++ (ISO/IEC 14882:1998, Section 23.1.1, "Sequences"). + Practically, this means that you can treat such a sequence + as if it was <code>std::vector</code>. One notable extension + to the standard interface that is available only for + sequences of non-fundamental C++ types is the addition of + the overloaded <code>push_back</code> and <code>insert</code> + member functions which instead of the constant reference + to the element type accept automatic pointer to the element + type. These functions assume ownership of the pointed to + object and resets the passed automatic pointer. + </p> + + <h3><a name="2.5.1">2.5.1 Inheritance from Built-in Data Types</a></h3> + + <p>In cases where the mapping calls for an inheritance from a built-in + type which is mapped to a fundamental C++ type, a proxy type is + used instead of the fundamental C++ type (C++ does not allow + inheritance from fundamental types). For instance:</p> + + <pre class="xml"> +<simpleType name="my_int"> + <restriction base="int"/> +</simpleType> + </pre> + + <p>is mapped to:</p> + + <pre class="c++"> +class my_int: public fundamental_base<int> +{ + ... +}; + </pre> + + <p>The <code>fundamental_base</code> class template provides a close + emulation (though not exact) of a fundamental C++ type. + It is defined in an implementation-specific namespace and has the + following interface:</p> + + <pre class="c++"> +template <typename X> +class fundamental_base: public simple_type +{ +public: + fundamental_base (); + fundamental_base (X) + fundamental_base (const fundamental_base&) + +public: + fundamental_base& + operator= (const X&); + +public: + operator const X & () const; + operator X& (); + + template <typename Y> + operator Y () const; + + template <typename Y> + operator Y (); +}; + </pre> + + <h3><a name="2.5.2">2.5.2 Mapping for <code>anyType</code></a></h3> + + <p>The XML Schema <code>anyType</code> built-in data type is mapped to the + <code>xml_schema::type</code> C++ class:</p> + + <pre class="c++"> +class type +{ +public: + virtual + ~type (); + +public: + type (); + type (const type&); + +public: + type& + operator= (const type&); + +public: + virtual type* + _clone () const; + + // DOM association. + // +public: + const xercesc::DOMNode* + _node () const; + + xercesc::DOMNode* + _node (); +}; + </pre> + + <p>For more information about DOM association refer to + <a href="#5.1">Section 5.1, "DOM Association"</a>.</p> + + <h3><a name="2.5.3">2.5.3 Mapping for <code>anySimpleType</code></a></h3> + + <p>The XML Schema <code>anySimpleType</code> built-in data type is mapped + to the <code>xml_schema::simple_type</code> C++ class:</p> + + <pre class="c++"> +class simple_type: public type +{ +public: + simple_type (); + simple_type (const simple_type&); + +public: + simple_type& + operator= (const simple_type&); + +public: + virtual simple_type* + _clone () const; +}; + </pre> + + + <h3><a name="2.5.4">2.5.4 Mapping for <code>QName</code></a></h3> + + <p>The XML Schema <code>QName</code> built-in data type is mapped to the + <code>xml_schema::qname</code> C++ class:</p> + + <pre class="c++"> +class qname: public simple_type +{ +public: + qname (const ncname&); + qname (const uri&, const ncname&); + qname (const qname&); + +public: + qname& + operator= (const qname&); + +public: + virtual qname* + _clone () const; + +public: + bool + qualified () const; + + const uri& + namespace_ () const; + + const ncname& + name () const; +}; + </pre> + + <p>The <code>qualified</code> accessor function can be used to determine + if the name is qualified.</p> + + <h3><a name="2.5.5">2.5.5 Mapping for <code>IDREF</code></a></h3> + + <p>The XML Schema <code>IDREF</code> built-in data type is mapped to the + <code>xml_schema::idref</code> C++ class. This class implements the + smart pointer C++ idiom:</p> + + <pre class="c++"> +class idref: public ncname +{ +public: + idref (const C* s); + idref (const C* s, std::size_t n); + idref (std::size_t n, C c); + idref (const std::basic_string<C>&); + idref (const std::basic_string<C>&, + std::size_t pos, + std::size_t n = npos); + +public: + idref (const idref&); + +public: + virtual idref* + _clone () const; + +public: + idref& + operator= (C c); + + idref& + operator= (const C* s); + + idref& + operator= (const std::basic_string<C>&) + + idref& + operator= (const idref&); + +public: + const type* + operator-> () const; + + type* + operator-> (); + + const type& + operator* () const; + + type& + operator* (); + + const type* + get () const; + + type* + get (); + + // Conversion to bool. + // +public: + typedef void (idref::*bool_convertible)(); + operator bool_convertible () const; +}; + </pre> + + <p>The object, <code>idref</code> instance refers to, is the immediate + container of the matching <code>id</code> instance. For example, + with the following instance document and schema: + </p> + + + <pre class="xml"> +<!-- test.xml --> +<root> + <object id="obj-1" text="hello"/> + <reference>obj-1</reference> +</root> + +<!-- test.xsd --> +<schema> + <complexType name="object_type"> + <attribute name="id" type="ID"/> + <attribute name="text" type="string"/> + </complexType> + + <complexType name="root_type"> + <sequence> + <element name="object" type="object_type"/> + <element name="reference" type="IDREF"/> + </sequence> + </complexType> + + <element name="root" type="root_type"/> +</schema> + </pre> + + <p>The <code>ref</code> instance in the code below will refer to + an object of type <code>object_type</code>:</p> + + <pre class="c++"> +root_type& root = ...; +xml_schema::idref& ref (root.reference ()); +object_type& obj (dynamic_cast<object_type&> (*ref)); +cout << obj.text () << endl; + </pre> + + <p>The smart pointer interface of the <code>idref</code> class always + returns a pointer or reference to <code>xml_schema::type</code>. + This means that you will need to manually cast such pointer or + reference to its real (dynamic) type before you can use it (unless + all you need is the base interface provided by + <code>xml_schema::type</code>). As a special extension to the XML + Schema language, the mapping supports static typing of <code>idref</code> + references by employing the <code>refType</code> extension attribute. + The following example illustrates this mechanism: + </p> + + <pre class="xml"> +<!-- test.xsd --> +<schema + xmlns:xse="http://www.codesynthesis.com/xmlns/xml-schema-extension"> + + ... + + <element name="reference" type="IDREF" xse:refType="object_type"/> + + ... + +</schema> + </pre> + + <p>With this modification we do not need to do manual casting anymore: + </p> + + <pre class="c++"> +root_type& root = ...; +root_type::reference_type& ref (root.reference ()); +object_type& obj (*ref); +cout << ref->text () << endl; + </pre> + + + <h3><a name="2.5.6">2.5.6 Mapping for <code>base64Binary</code> and + <code>hexBinary</code></a></h3> + + <p>The XML Schema <code>base64Binary</code> and <code>hexBinary</code> + built-in data types are mapped to the + <code>xml_schema::base64_binary</code> and + <code>xml_schema::hex_binary</code> C++ classes, respectively. The + <code>base64_binary</code> and <code>hex_binary</code> classes + support a simple buffer abstraction by inheriting from the + <code>xml_schema::buffer</code> class: + </p> + + <pre class="c++"> +class bounds: public virtual exception +{ +public: + virtual const char* + what () const throw (); +}; + +class buffer +{ +public: + typedef std::size_t size_t; + +public: + buffer (size_t size = 0); + buffer (size_t size, size_t capacity); + buffer (const void* data, size_t size); + buffer (const void* data, size_t size, size_t capacity); + buffer (void* data, + size_t size, + size_t capacity, + bool assume_ownership); + +public: + buffer (const buffer&); + + buffer& + operator= (const buffer&); + + void + swap (buffer&); + +public: + size_t + capacity () const; + + bool + capacity (size_t); + +public: + size_t + size () const; + + bool + size (size_t); + +public: + const char* + data () const; + + char* + data (); + + const char* + begin () const; + + char* + begin (); + + const char* + end () const; + + char* + end (); +}; + </pre> + + <p>The last overloaded constructor reuses an existing data buffer instead + of making a copy. If the <code>assume_ownership</code> argument is + <code>true</code>, the instance assumes ownership of the + memory block pointed to by the <code>data</code> argument and will + eventually release it by calling <code>operator delete</code>. The + <code>capacity</code> and <code>size</code> modifier functions return + <code>true</code> if the underlying buffer has moved. + </p> + + <p>The <code>bounds</code> exception is thrown if the constructor + arguments violate the <code>(size <= capacity)</code> + constraint.</p> + + <p>The <code>base64_binary</code> and <code>hex_binary</code> classes + support the <code>buffer</code> interface and perform automatic + decoding/encoding from/to the Base64 and Hex formats, respectively: + </p> + + <pre class="c++"> +class base64_binary: public simple_type, public buffer +{ +public: + base64_binary (size_t size = 0); + base64_binary (size_t size, size_t capacity); + base64_binary (const void* data, size_t size); + base64_binary (const void* data, size_t size, size_t capacity); + base64_binary (void* data, + size_t size, + size_t capacity, + bool assume_ownership); + +public: + base64_binary (const base64_binary&); + + base64_binary& + operator= (const base64_binary&); + + virtual base64_binary* + _clone () const; + +public: + std::basic_string<C> + encode () const; +}; + </pre> + + <pre class="c++"> +class hex_binary: public simple_type, public buffer +{ +public: + hex_binary (size_t size = 0); + hex_binary (size_t size, size_t capacity); + hex_binary (const void* data, size_t size); + hex_binary (const void* data, size_t size, size_t capacity); + hex_binary (void* data, + size_t size, + size_t capacity, + bool assume_ownership); + +public: + hex_binary (const hex_binary&); + + hex_binary& + operator= (const hex_binary&); + + virtual hex_binary* + _clone () const; + +public: + std::basic_string<C> + encode () const; +}; + </pre> + + + <h2><a name="2.5.7">2.5.7 Time Zone Representation</a></h2> + + <p>The <code>date</code>, <code>dateTime</code>, <code>gDay</code>, + <code>gMonth</code>, <code>gMonthDay</code>, <code>gYear</code>, + <code>gYearMonth</code>, and <code>time</code> XML Schema built-in + types all include an optional time zone component. The following + <code>xml_schema::time_zone</code> base class is used to represent + this information:</p> + + <pre class="c++"> +class time_zone +{ +public: + time_zone (); + time_zone (short hours, short minutes); + + bool + zone_present () const; + + void + zone_reset (); + + short + zone_hours () const; + + void + zone_hours (short); + + short + zone_minutes () const; + + void + zone_minutes (short); +}; + +bool +operator== (const time_zone&, const time_zone&); + +bool +operator!= (const time_zone&, const time_zone&); + </pre> + + <p>The <code>zone_present()</code> accessor function returns <code>true</code> + if the time zone is specified. The <code>zone_reset()</code> modifier + function resets the time zone object to the <em>not specified</em> + state. If the time zone offset is negative then both hours and + minutes components are represented as negative integers.</p> + + + <h2><a name="2.5.8">2.5.8 Mapping for <code>date</code></a></h2> + + <p>The XML Schema <code>date</code> built-in data type is mapped to the + <code>xml_schema::date</code> C++ class which represents a year, a day, + and a month with an optional time zone. Its interface is presented + below. For more information on the base <code>xml_schema::time_zone</code> + class refer to <a href="#2.5.7">Section 2.5.7, "Time Zone + Representation"</a>.</p> + + <pre class="c++"> +class date: public simple_type, public time_zone +{ +public: + date (int year, unsigned short month, unsigned short day); + date (int year, unsigned short month, unsigned short day, + short zone_hours, short zone_minutes); + +public: + date (const date&); + + date& + operator= (const date&); + + virtual date* + _clone () const; + +public: + int + year () const; + + void + year (int); + + unsigned short + month () const; + + void + month (unsigned short); + + unsigned short + day () const; + + void + day (unsigned short); +}; + +bool +operator== (const date&, const date&); + +bool +operator!= (const date&, const date&); + </pre> + + <h2><a name="2.5.9">2.5.9 Mapping for <code>dateTime</code></a></h2> + + <p>The XML Schema <code>dateTime</code> built-in data type is mapped to the + <code>xml_schema::date_time</code> C++ class which represents a year, a month, + a day, hours, minutes, and seconds with an optional time zone. Its interface + is presented below. For more information on the base + <code>xml_schema::time_zone</code> class refer to <a href="#2.5.7">Section + 2.5.7, "Time Zone Representation"</a>.</p> + + <pre class="c++"> +class date_time: public simple_type, public time_zone +{ +public: + date_time (int year, unsigned short month, unsigned short day, + unsigned short hours, unsigned short minutes, + double seconds); + + date_time (int year, unsigned short month, unsigned short day, + unsigned short hours, unsigned short minutes, + double seconds, short zone_hours, short zone_minutes); +public: + date_time (const date_time&); + + date_time& + operator= (const date_time&); + + virtual date_time* + _clone () const; + +public: + int + year () const; + + void + year (int); + + unsigned short + month () const; + + void + month (unsigned short); + + unsigned short + day () const; + + void + day (unsigned short); + + unsigned short + hours () const; + + void + hours (unsigned short); + + unsigned short + minutes () const; + + void + minutes (unsigned short); + + double + seconds () const; + + void + seconds (double); +}; + +bool +operator== (const date_time&, const date_time&); + +bool +operator!= (const date_time&, const date_time&); + </pre> + + + <h2><a name="2.5.10">2.5.10 Mapping for <code>duration</code></a></h2> + + <p>The XML Schema <code>duration</code> built-in data type is mapped to the + <code>xml_schema::duration</code> C++ class which represents a potentially + negative duration in the form of years, months, days, hours, minutes, + and seconds. Its interface is presented below.</p> + + <pre class="c++"> +class duration: public simple_type +{ +public: + duration (bool negative, + unsigned int years, unsigned int months, unsigned int days, + unsigned int hours, unsigned int minutes, double seconds); +public: + duration (const duration&); + + duration& + operator= (const duration&); + + virtual duration* + _clone () const; + +public: + bool + negative () const; + + void + negative (bool); + + unsigned int + years () const; + + void + years (unsigned int); + + unsigned int + months () const; + + void + months (unsigned int); + + unsigned int + days () const; + + void + days (unsigned int); + + unsigned int + hours () const; + + void + hours (unsigned int); + + unsigned int + minutes () const; + + void + minutes (unsigned int); + + double + seconds () const; + + void + seconds (double); +}; + +bool +operator== (const duration&, const duration&); + +bool +operator!= (const duration&, const duration&); + </pre> + + + <h2><a name="2.5.11">2.5.11 Mapping for <code>gDay</code></a></h2> + + <p>The XML Schema <code>gDay</code> built-in data type is mapped to the + <code>xml_schema::gday</code> C++ class which represents a day of the + month with an optional time zone. Its interface is presented below. + For more information on the base <code>xml_schema::time_zone</code> + class refer to <a href="#2.5.7">Section 2.5.7, "Time Zone + Representation"</a>.</p> + + <pre class="c++"> +class gday: public simple_type, public time_zone +{ +public: + explicit + gday (unsigned short day); + gday (unsigned short day, short zone_hours, short zone_minutes); + +public: + gday (const gday&); + + gday& + operator= (const gday&); + + virtual gday* + _clone () const; + +public: + unsigned short + day () const; + + void + day (unsigned short); +}; + +bool +operator== (const gday&, const gday&); + +bool +operator!= (const gday&, const gday&); + </pre> + + + <h2><a name="2.5.12">2.5.12 Mapping for <code>gMonth</code></a></h2> + + <p>The XML Schema <code>gMonth</code> built-in data type is mapped to the + <code>xml_schema::gmonth</code> C++ class which represents a month of the + year with an optional time zone. Its interface is presented below. + For more information on the base <code>xml_schema::time_zone</code> + class refer to <a href="#2.5.7">Section 2.5.7, "Time Zone + Representation"</a>.</p> + + <pre class="c++"> +class gmonth: public simple_type, public time_zone +{ +public: + explicit + gmonth (unsigned short month); + gmonth (unsigned short month, + short zone_hours, short zone_minutes); + +public: + gmonth (const gmonth&); + + gmonth& + operator= (const gmonth&); + + virtual gmonth* + _clone () const; + +public: + unsigned short + month () const; + + void + month (unsigned short); +}; + +bool +operator== (const gmonth&, const gmonth&); + +bool +operator!= (const gmonth&, const gmonth&); + </pre> + + + <h2><a name="2.5.13">2.5.13 Mapping for <code>gMonthDay</code></a></h2> + + <p>The XML Schema <code>gMonthDay</code> built-in data type is mapped to the + <code>xml_schema::gmonth_day</code> C++ class which represents a day and + a month of the year with an optional time zone. Its interface is presented + below. For more information on the base <code>xml_schema::time_zone</code> + class refer to <a href="#2.5.7">Section 2.5.7, "Time Zone + Representation"</a>.</p> + + <pre class="c++"> +class gmonth_day: public simple_type, public time_zone +{ +public: + gmonth_day (unsigned short month, unsigned short day); + gmonth_day (unsigned short month, unsigned short day, + short zone_hours, short zone_minutes); + +public: + gmonth_day (const gmonth_day&); + + gmonth_day& + operator= (const gmonth_day&); + + virtual gmonth_day* + _clone () const; + +public: + unsigned short + month () const; + + void + month (unsigned short); + + unsigned short + day () const; + + void + day (unsigned short); +}; + +bool +operator== (const gmonth_day&, const gmonth_day&); + +bool +operator!= (const gmonth_day&, const gmonth_day&); + </pre> + + + <h2><a name="2.5.14">2.5.14 Mapping for <code>gYear</code></a></h2> + + <p>The XML Schema <code>gYear</code> built-in data type is mapped to the + <code>xml_schema::gyear</code> C++ class which represents a year with + an optional time zone. Its interface is presented below. For more + information on the base <code>xml_schema::time_zone</code> class refer + to <a href="#2.5.7">Section 2.5.7, "Time Zone Representation"</a>.</p> + + <pre class="c++"> +class gyear: public simple_type, public time_zone +{ +public: + explicit + gyear (int year); + gyear (int year, short zone_hours, short zone_minutes); + +public: + gyear (const gyear&); + + gyear& + operator= (const gyear&); + + virtual gyear* + _clone () const; + +public: + int + year () const; + + void + year (int); +}; + +bool +operator== (const gyear&, const gyear&); + +bool +operator!= (const gyear&, const gyear&); + </pre> + + + <h2><a name="2.5.15">2.5.15 Mapping for <code>gYearMonth</code></a></h2> + + <p>The XML Schema <code>gYearMonth</code> built-in data type is mapped to + the <code>xml_schema::gyear_month</code> C++ class which represents + a year and a month with an optional time zone. Its interface is presented + below. For more information on the base <code>xml_schema::time_zone</code> + class refer to <a href="#2.5.7">Section 2.5.7, "Time Zone + Representation"</a>.</p> + + <pre class="c++"> +class gyear_month: public simple_type, public time_zone +{ +public: + gyear_month (int year, unsigned short month); + gyear_month (int year, unsigned short month, + short zone_hours, short zone_minutes); +public: + gyear_month (const gyear_month&); + + gyear_month& + operator= (const gyear_month&); + + virtual gyear_month* + _clone () const; + +public: + int + year () const; + + void + year (int); + + unsigned short + month () const; + + void + month (unsigned short); +}; + +bool +operator== (const gyear_month&, const gyear_month&); + +bool +operator!= (const gyear_month&, const gyear_month&); + </pre> + + + <h2><a name="2.5.16">2.5.16 Mapping for <code>time</code></a></h2> + + <p>The XML Schema <code>time</code> built-in data type is mapped to + the <code>xml_schema::time</code> C++ class which represents hours, + minutes, and seconds with an optional time zone. Its interface is + presented below. For more information on the base + <code>xml_schema::time_zone</code> class refer to + <a href="#2.5.7">Section 2.5.7, "Time Zone Representation"</a>.</p> + + <pre class="c++"> +class time: public simple_type, public time_zone +{ +public: + time (unsigned short hours, unsigned short minutes, double seconds); + time (unsigned short hours, unsigned short minutes, double seconds, + short zone_hours, short zone_minutes); + +public: + time (const time&); + + time& + operator= (const time&); + + virtual time* + _clone () const; + +public: + unsigned short + hours () const; + + void + hours (unsigned short); + + unsigned short + minutes () const; + + void + minutes (unsigned short); + + double + seconds () const; + + void + seconds (double); +}; + +bool +operator== (const time&, const time&); + +bool +operator!= (const time&, const time&); + </pre> + + + <!-- Mapping for Simple Types --> + + <h2><a name="2.6">2.6 Mapping for Simple Types</a></h2> + + <p>An XML Schema simple type is mapped to a C++ class with the same + name as the simple type. The class defines a public copy constructor, + a public copy assignment operator, and a public virtual + <code>_clone</code> function. The <code>_clone</code> function is + declared <code>const</code>, does not take any arguments, and returns + a pointer to a complete copy of the instance allocated in the free + store. The <code>_clone</code> function shall be used to make copies + when static type and dynamic type of the instance may differ (see + <a href="#2.11">Section 2.11, "Mapping for <code>xsi:type</code> + and Substitution Groups"</a>). For instance:</p> + + <pre class="xml"> +<simpleType name="object"> + ... +</simpleType> + </pre> + + <p>is mapped to:</p> + + <pre class="c++"> +class object: ... +{ +public: + object (const object&); + +public: + object& + operator= (const object&); + +public: + virtual object* + _clone () const; + + ... + +}; + </pre> + + <p>The base class specification and the rest of the class definition + depend on the type of derivation used to define the simple type. </p> + + + <h3><a name="2.6.1">2.6.1 Mapping for Derivation by Restriction</a></h3> + + <p>XML Schema derivation by restriction is mapped to C++ public + inheritance. The base type of the restriction becomes the base + type for the resulting C++ class. In addition to the members described + in <a href="#2.6">Section 2.6, "Mapping for Simple Types"</a>, the + resulting C++ class defines a public constructor with the base type + as its single argument. For instance:</p> + + <pre class="xml"> +<simpleType name="object"> + <restriction base="base"> + ... + </restriction> +</simpleType> + </pre> + + <p>is mapped to:</p> + + <pre class="c++"> +class object: public base +{ +public: + object (const base&); + object (const object&); + +public: + object& + operator= (const object&); + +public: + virtual object* + _clone () const; +}; + </pre> + + + <h3><a name="2.6.2">2.6.2 Mapping for Enumerations</a></h3> + +<p>XML Schema restriction by enumeration is mapped to a C++ class + with semantics similar to C++ <code>enum</code>. Each XML Schema + enumeration element is mapped to a C++ enumerator with the + name derived from the <code>value</code> attribute and defined + in the class scope. In addition to the members + described in <a href="#2.6">Section 2.6, "Mapping for Simple Types"</a>, + the resulting C++ class defines a public constructor that can be called + with one of the enumerators as its single argument, a public constructor + that can be called with enumeration's base value as its single + argument, a public assignment operator that can be used to assign the + value of one of the enumerators, and a public implicit conversion + operator to the underlying C++ enum type.</p> + +<p>Furthermore, for string-based enumeration types, the resulting C++ + class defines a public constructor with a single argument of type + <code>const C*</code> and a public constructor with a single + argument of type <code>const std::basic_string<C>&</code>. + For instance:</p> + + <pre class="xml"> +<simpleType name="color"> + <restriction base="string"> + <enumeration value="red"/> + <enumeration value="green"/> + <enumeration value="blue"/> + </restriction> +</simpleType> + </pre> + + <p>is mapped to:</p> + + <pre class="c++"> +class color: xml_schema::string +{ +public: + enum value + { + red, + green, + blue + }; + +public: + color (value); + color (const C*); + color (const std::basic_string<C>&); + color (const xml_schema::string&); + color (const color&); + +public: + color& + operator= (value); + + color& + operator= (const color&); + +public: + virtual color* + _clone () const; + +public: + operator value () const; +}; + </pre> + + <h3><a name="2.6.3">2.6.3 Mapping for Derivation by List</a></h3> + + <p>XML Schema derivation by list is mapped to C++ public + inheritance from <code>xml_schema::simple_type</code> + (<a href="#2.5.3">Section 2.5.3, "Mapping for + <code>anySimpleType</code>"</a>) and a suitable sequence type. + The list item type becomes the element type of the sequence. + In addition to the members described in <a href="#2.6">Section 2.6, + "Mapping for Simple Types"</a>, the resulting C++ class defines + a public default constructor, a public constructor + with the first argument of type <code>size_type</code> and + the second argument of list item type that creates + a list object with the specified number of copies of the specified + element value, and a public constructor with the two arguments + of an input iterator type that creates a list object from an + iterator range. For instance: + </p> + + <pre class="xml"> +<simpleType name="int_list"> + <list itemType="int"/> +</simpleType> + </pre> + + <p>is mapped to:</p> + + <pre class="c++"> +class int_list: public simple_type, + public sequence<int> +{ +public: + int_list (); + int_list (size_type n, int x); + + template <typename I> + int_list (const I& begin, const I& end); + int_list (const int_list&); + +public: + int_list& + operator= (const int_list&); + +public: + virtual int_list* + _clone () const; +}; + </pre> + + <p>The <code>sequence</code> class template is defined in an + implementation-specific namespace. It conforms to the + sequence interface as defined by the ISO/ANSI Standard for + C++ (ISO/IEC 14882:1998, Section 23.1.1, "Sequences"). + Practically, this means that you can treat such a sequence + as if it was <code>std::vector</code>. One notable extension + to the standard interface that is available only for + sequences of non-fundamental C++ types is the addition of + the overloaded <code>push_back</code> and <code>insert</code> + member functions which instead of the constant reference + to the element type accept automatic pointer to the element + type. These functions assume ownership of the pointed to + object and resets the passed automatic pointer. + </p> + + <h3><a name="2.6.4">2.6.4 Mapping for Derivation by Union</a></h3> + + <p>XML Schema derivation by union is mapped to C++ public + inheritance from <code>xml_schema::simple_type</code> + (<a href="#2.5.3">Section 2.5.3, "Mapping for + <code>anySimpleType</code>"</a>) and <code>std::basic_string<C></code>. + In addition to the members described in <a href="#2.6">Section 2.6, + "Mapping for Simple Types"</a>, the resulting C++ class defines a + public constructor with a single argument of type <code>const C*</code> + and a public constructor with a single argument of type + <code>const std::basic_string<C>&</code>. For instance: + </p> + + <pre class="xml"> +<simpleType name="int_string_union"> + <xsd:union memberTypes="xsd:int xsd:string"/> +</simpleType> + </pre> + + <p>is mapped to:</p> + + <pre class="c++"> +class int_string_union: public simple_type, + public std::basic_string<C> +{ +public: + int_string_union (const C*); + int_string_union (const std::basic_string<C>&); + int_string_union (const int_string_union&); + +public: + int_string_union& + operator= (const int_string_union&); + +public: + virtual int_string_union* + _clone () const; +}; + </pre> + + <h2><a name="2.7">2.7 Mapping for Complex Types</a></h2> + + <p>An XML Schema complex type is mapped to a C++ class with the same + name as the complex type. The class defines a public copy constructor, + a public copy assignment operator, and a public virtual + <code>_clone</code> function. The <code>_clone</code> function is + declared <code>const</code>, does not take any arguments, and returns + a pointer to a complete copy of the instance allocated in the free + store. The <code>_clone</code> function shall be used to make copies + when static type and dynamic type of the instance may differ (see + <a href="#2.11">Section 2.11, "Mapping for <code>xsi:type</code> + and Substitution Groups"</a>).</p> + + <p>Additionally, the resulting C++ class + defines two public constructors that take an initializer for each + member of the complex type and all its base types that belongs to + the One cardinality class (see <a href="#2.8">Section 2.8, "Mapping + for Local Elements and Attributes"</a>). In the first constructor, + the arguments are passed as constant references and the newly created + instance is initialized with copies of the passed objects. In the + second constructor, arguments that are complex types (that is, + they themselves contain elements or attributes) are passed as + references to <code>std::auto_ptr</code>. In this case the newly + created instance is directly initialized with and assumes ownership + of the pointed to objects and the <code>std::auto_ptr</code> arguments + are reset to <code>0</code>. For instance:</p> + + <pre class="xml"> +<complexType name="complex"> + <sequence> + <element name="a" type="int"/> + <element name="b" type="string"/> + </sequence> +</complexType> + +<complexType name="object"> + <sequence> + <element name="s-one" type="boolean"/> + <element name="c-one" type="complex"/> + <element name="optional" type="int" minOccurs="0"/> + <element name="sequence" type="string" maxOccurs="unbounded"/> + </sequence> +</complexType> + </pre> + + <p>is mapped to:</p> + + <pre class="c++"> +class complex: xml_schema::type +{ +public: + object (const int& a, const xml_schema::string& b); + object (const complex&); + +public: + object& + operator= (const complex&); + +public: + virtual complex* + _clone () const; + + ... + +}; + +class object: xml_schema::type +{ +public: + object (const bool& s_one, const complex& c_one); + object (const bool& s_one, std::auto_ptr<complex>& c_one); + object (const object&); + +public: + object& + operator= (const object&); + +public: + virtual object* + _clone () const; + + ... + +}; + </pre> + + <p>Notice that the generated <code>complex</code> class does not + have the second (<code>std::auto_ptr</code>) version of the + constructor since all its required members are of simple types.</p> + + <p>If an XML Schema complex type has an ultimate base which is an XML + Schema simple type then the resulting C++ class also defines a public + constructor that takes an initializer for the base type as well as + for each member of the complex type and all its base types that + belongs to the One cardinality class. For instance:</p> + + <pre class="xml"> +<complexType name="object"> + <simpleContent> + <extension base="date"> + <attribute name="lang" type="language" use="required"/> + </extension> + </simpleContent> +</complexType> + </pre> + + <p>is mapped to:</p> + + <pre class="c++"> +class object: xml_schema::string +{ +public: + object (const xml_schema::language& lang); + + object (const xml_schema::date& base, + const xml_schema::language& lang); + + ... + +}; + </pre> + + <p>Furthermore, for string-based XML Schema complex types, the resulting C++ + class also defines two public constructors with the first arguments + of type <code>const C*</code> and <code>std::basic_string<C>&</code>, + respectively, followed by arguments for each member of the complex + type and all its base types that belongs to the One cardinality + class. For enumeration-based complex types the resulting C++ + class also defines a public constructor with the first arguments + of the underlying enum type followed by arguments for each member + of the complex type and all its base types that belongs to the One + cardinality class. For instance:</p> + + <pre class="xml"> +<simpleType name="color"> + <restriction base="string"> + <enumeration value="red"/> + <enumeration value="green"/> + <enumeration value="blue"/> + </restriction> +</simpleType> + +<complexType name="object"> + <simpleContent> + <extension base="color"> + <attribute name="lang" type="language" use="required"/> + </extension> + </simpleContent> +</complexType> + </pre> + + <p>is mapped to:</p> + + <pre class="c++"> +class color: xml_schema::string +{ +public: + enum value + { + red, + green, + blue + }; + +public: + color (value); + color (const C*); + color (const std::basic_string<C>&); + + ... + +}; + +class object: color +{ +public: + object (const color& base, + const xml_schema::language& lang); + + object (const color::value& base, + const xml_schema::language& lang); + + object (const C* base, + const xml_schema::language& lang); + + object (const std::basic_string<C>& base, + const xml_schema::language& lang); + + ... + +}; + </pre> + + <p>Additional constructors can be requested with the + <code>--generate-default-ctor</code> and + <code>--generate-from-base-ctor</code> options. See the + <a href="http://www.codesynthesis.com/projects/xsd/documentation/xsd.xhtml">XSD + Compiler Command Line Manual</a> for details.</p> + + <p>If an XML Schema complex type is not explicitly derived from any type, + the resulting C++ class is derived from <code>xml_schema::type</code>. + In cases where an XML Schema complex type is defined using derivation + by extension or restriction, the resulting C++ base class specification + depends on the type of derivation and is described in the subsequent + sections. + </p> + + <p>The mapping for elements and attributes that are defined in a complex + type is described in <a href="#2.8">Section 2.8, "Mapping for Local + Elements and Attributes"</a>. + </p> + + <h3><a name="2.7.1">2.7.1 Mapping for Derivation by Extension</a></h3> + + <p>XML Schema derivation by extension is mapped to C++ public + inheritance. The base type of the extension becomes the base + type for the resulting C++ class. + </p> + + <h3><a name="2.7.2">2.7.2 Mapping for Derivation by Restriction</a></h3> + + <p>XML Schema derivation by restriction is mapped to C++ public + inheritance. The base type of the restriction becomes the base + type for the resulting C++ class. XML Schema elements and + attributes defined within restriction do not result in any + definitions in the resulting C++ class. Instead, corresponding + (unrestricted) definitions are inherited from the base class. + In the future versions of this mapping, such elements and + attributes may result in redefinitions of accessors and + modifiers to reflect their restricted semantics. + </p> + + <!-- 2.8 Mapping for Local Elements and Attributes --> + + <h2><a name="2.8">2.8 Mapping for Local Elements and Attributes</a></h2> + + <p>XML Schema element and attribute definitions are called local + if they appear within a complex type definition, an element group + definition, or an attribute group definitions. + </p> + + <p>Local XML Schema element and attribute definitions have the same + C++ mapping. Therefore, in this section, local elements and + attributes are collectively called members. + </p> + + <p>While there are many different member cardinality combinations + (determined by the <code>use</code> attribute for attributes and + the <code>minOccurs</code> and <code>maxOccurs</code> attributes + for elements), the mapping divides all possible cardinality + combinations into three cardinality classes: + </p> + + <dl> + <dt><i>one</i></dt> + <dd>attributes: <code>use == "required"</code></dd> + <dd>attributes: <code>use == "optional"</code> and has default or fixed value</dd> + <dd>elements: <code>minOccurs == "1"</code> and <code>maxOccurs == "1"</code></dd> + + <dt><i>optional</i></dt> + <dd>attributes: <code>use == "optional"</code> and doesn't have default or fixed value</dd> + <dd>elements: <code>minOccurs == "0"</code> and <code>maxOccurs == "1"</code></dd> + + <dt><i>sequence</i></dt> + <dd>elements: <code>maxOccurs > "1"</code></dd> + </dl> + + <p>An optional attribute with a default or fixed value acquires this value + if the attribute hasn't been specified in an instance document (see + <a href="#A">Appendix A, "Default and Fixed Values"</a>). This + mapping places such optional attributes to the One cardinality + class.</p> + + <p>A member is mapped to a set of public type definitions + (<code>typedef</code>s) and a set of public accessor and modifier + functions. Type definitions have names derived from the member's + name. The accessor and modifier functions have the same name as the + member. For example: + </p> + + <pre class="xml"> +<complexType name="object"> + <sequence> + <element name="member" type="string"/> + </sequence> +</complexType> + </pre> + + <p>is mapped to:</p> + + <pre class="c++"> +class object: xml_schema::type +{ +public: + typedef xml_schema::string member_type; + + const member_type& + member () const; + + ... + +}; + </pre> + + <p>In addition, if a member has a default or fixed value, a static + accessor function is generated that returns this value. For + example:</p> + +<pre class="xml"> +<complexType name="object"> + <attribute name="data" type="string" default="test"/> +</complexType> + </pre> + + <p>is mapped to:</p> + + <pre class="c++"> +class object: xml_schema::type +{ +public: + typedef xml_schema::string data_type; + + const data_type& + data () const; + + static const data_type& + data_default_value (); + + ... + +}; + </pre> + + <p>Names and semantics of type definitions for the member as well + as signatures of the accessor and modifier functions depend on + the member's cardinality class and are described in the following + sub-sections. + </p> + + + <h3><a name="2.8.1">2.8.1 Mapping for Members with the One Cardinality Class</a></h3> + + <p>For the One cardinality class, the type definitions consist of + an alias for the member's type with the name created by appending + the <code>_type</code> suffix to the member's name. + </p> + + <p>The accessor functions come in constant and non-constant versions. + The constant accessor function returns a constant reference to the + member and can be used for read-only access. The non-constant + version returns an unrestricted reference to the member and can + be used for read-write access. + </p> + + <p>The first modifier function expects an argument of type reference to + constant of the member's type. It makes a deep copy of its argument. + Except for member's types that are mapped to fundamental C++ types, + the second modifier function is provided that expects an argument + of type automatic pointer to the member's type. It assumes ownership + of the pointed to object and resets the passed automatic pointer. + For instance:</p> + + <pre class="xml"> +<complexType name="object"> + <sequence> + <element name="member" type="string"/> + </sequence> +</complexType> + </pre> + + <p>is mapped to:</p> + + <pre class="c++"> +class object: xml_schema::type +{ +public: + // Type definitions. + // + typedef xml_schema::string member_type; + + // Accessors. + // + const member_type& + member () const; + + member_type& + member (); + + // Modifiers. + // + void + member (const member_type&); + + void + member (std::auto_ptr<member_type>); + ... + +}; + </pre> + + <p>In addition, if requested by specifying the <code>--generate-detach</code> + option and only for members of non-fundamental C++ types, the mapping + provides a detach function that returns an automatic pointer to the + member's type, for example:</p> + + <pre class="c++"> +class object: xml_schema::type +{ +public: + ... + + std::auto_ptr<member_type> + detach_member (); + ... + +}; + </pre> + + <p>This function detaches the value from the tree leaving the member + value uninitialized. Accessing such an uninitialized value prior to + re-initializing it results in undefined behavior.</p> + + <p>The following code shows how one could use this mapping:</p> + + <pre class="c++"> +void +f (object& o) +{ + using xml_schema::string; + + string s (o.member ()); // get + object::member_type& sr (o.member ()); // get + + o.member ("hello"); // set, deep copy + o.member () = "hello"; // set, deep copy + + std::auto_ptr<string> p (new string ("hello")); + o.member (p); // set, assumes ownership + p = o.detach_member (); // detach, member is uninitialized + o.member (p); // re-attach +} + </pre> + + +<h3><a name="2.8.2">2.8.2 Mapping for Members with the Optional Cardinality Class</a></h3> + + <p>For the Optional cardinality class, the type definitions consist of + an alias for the member's type with the name created by appending + the <code>_type</code> suffix to the member's name and an alias for + the container type with the name created by appending the + <code>_optional</code> suffix to the member's name. + </p> + + <p>Unlike accessor functions for the One cardinality class, accessor + functions for the Optional cardinality class return references to + corresponding containers rather than directly to members. The + accessor functions come in constant and non-constant versions. + The constant accessor function returns a constant reference to + the container and can be used for read-only access. The non-constant + version returns an unrestricted reference to the container + and can be used for read-write access. + </p> + + <p>The modifier functions are overloaded for the member's + type and the container type. The first modifier function + expects an argument of type reference to constant of the + member's type. It makes a deep copy of its argument. + Except for member's types that are mapped to fundamental C++ types, + the second modifier function is provided that expects an argument + of type automatic pointer to the member's type. It assumes ownership + of the pointed to object and resets the passed automatic pointer. + The last modifier function expects an argument of type reference + to constant of the container type. It makes a deep copy of its + argument. For instance: + </p> + + <pre class="xml"> +<complexType name="object"> + <sequence> + <element name="member" type="string" minOccurs="0"/> + </sequence> +</complexType> + </pre> + + <p>is mapped to:</p> + + <pre class="c++"> +class object: xml_schema::type +{ +public: + // Type definitions. + // + typedef xml_schema::string member_type; + typedef optional<member_type> member_optional; + + // Accessors. + // + const member_optional& + member () const; + + member_optional& + member (); + + // Modifiers. + // + void + member (const member_type&); + + void + member (std::auto_ptr<member_type>); + + void + member (const member_optional&); + + ... + +}; + </pre> + + + <p>The <code>optional</code> class template is defined in an + implementation-specific namespace and has the following + interface. The <code>auto_ptr</code>-based constructor + and modifier function are only available if the template + argument is not a fundamental C++ type. + </p> + + <pre class="c++"> +template <typename X> +class optional +{ +public: + optional (); + + // Makes a deep copy. + // + explicit + optional (const X&); + + // Assumes ownership. + // + explicit + optional (std::auto_ptr<X>); + + optional (const optional&); + +public: + optional& + operator= (const X&); + + optional& + operator= (const optional&); + + // Pointer-like interface. + // +public: + const X* + operator-> () const; + + X* + operator-> (); + + const X& + operator* () const; + + X& + operator* (); + + typedef void (optional::*bool_convertible) (); + operator bool_convertible () const; + + // Get/set interface. + // +public: + bool + present () const; + + const X& + get () const; + + X& + get (); + + // Makes a deep copy. + // + void + set (const X&); + + // Assumes ownership. + // + void + set (std::auto_ptr<X>); + + // Detach and return the contained value. + // + std::auto_ptr<X> + detach (); + + void + reset (); +}; + +template <typename X> +bool +operator== (const optional<X>&, const optional<X>&); + +template <typename X> +bool +operator!= (const optional<X>&, const optional<X>&); + +template <typename X> +bool +operator< (const optional<X>&, const optional<X>&); + +template <typename X> +bool +operator> (const optional<X>&, const optional<X>&); + +template <typename X> +bool +operator<= (const optional<X>&, const optional<X>&); + +template <typename X> +bool +operator>= (const optional<X>&, const optional<X>&); + </pre> + + + <p>The following code shows how one could use this mapping:</p> + + <pre class="c++"> +void +f (object& o) +{ + using xml_schema::string; + + if (o.member ().present ()) // test + { + string& s (o.member ().get ()); // get + o.member ("hello"); // set, deep copy + o.member ().set ("hello"); // set, deep copy + o.member ().reset (); // reset + } + + // Same as above but using pointer notation: + // + if (o.member ()) // test + { + string& s (*o.member ()); // get + o.member ("hello"); // set, deep copy + *o.member () = "hello"; // set, deep copy + o.member ().reset (); // reset + } + + std::auto_ptr<string> p (new string ("hello")); + o.member (p); // set, assumes ownership + + p = new string ("hello"); + o.member ().set (p); // set, assumes ownership + + p = o.member ().detach (); // detach, member is reset + o.member ().set (p); // re-attach +} + </pre> + + + <h3><a name="2.8.3">2.8.3 Mapping for Members with the Sequence Cardinality Class</a></h3> + + <p>For the Sequence cardinality class, the type definitions consist of an + alias for the member's type with the name created by appending + the <code>_type</code> suffix to the member's name, an alias of + the container type with the name created by appending the + <code>_sequence</code> suffix to the member's name, an alias of + the iterator type with the name created by appending the + <code>_iterator</code> suffix to the member's name, and an alias + of the constant iterator type with the name created by appending the + <code>_const_iterator</code> suffix to the member's name. + </p> + + <p>The accessor functions come in constant and non-constant versions. + The constant accessor function returns a constant reference to the + container and can be used for read-only access. The non-constant + version returns an unrestricted reference to the container and can + be used for read-write access. + </p> + + <p>The modifier function expects an argument of type reference to + constant of the container type. The modifier function + makes a deep copy of its argument. For instance: + </p> + + + <pre class="xml"> +<complexType name="object"> + <sequence> + <element name="member" type="string" minOccurs="unbounded"/> + </sequence> +</complexType> + </pre> + + <p>is mapped to:</p> + + <pre class="c++"> +class object: xml_schema::type +{ +public: + // Type definitions. + // + typedef xml_schema::string member_type; + typedef sequence<member_type> member_sequence; + typedef member_sequence::iterator member_iterator; + typedef member_sequence::const_iterator member_const_iterator; + + // Accessors. + // + const member_sequence& + member () const; + + member_sequence& + member (); + + // Modifier. + // + void + member (const member_sequence&); + + ... + +}; + </pre> + + <p>The <code>sequence</code> class template is defined in an + implementation-specific namespace. It conforms to the + sequence interface as defined by the ISO/ANSI Standard for + C++ (ISO/IEC 14882:1998, Section 23.1.1, "Sequences"). + Practically, this means that you can treat such a sequence + as if it was <code>std::vector</code>. Two notable extensions + to the standard interface that are available only for + sequences of non-fundamental C++ types are the addition of + the overloaded <code>push_back</code> and <code>insert</code> + as well as the <code>detach_back</code> and <code>detach</code> + member functions. The additional <code>push_back</code> and + <code>insert</code> functions accept an automatic pointer to the + element type instead of the constant reference. They assume + ownership of the pointed to object and resets the passed + automatic pointer. The <code>detach_back</code> and + <code>detach</code> functions detach the element + value from the sequence container and, by default, remove + the element from the sequence. These additional functions + have the following signatures:</p> + + <pre class="c++"> +template <typename X> +class sequence +{ +public: + ... + + void + push_back (std::auto_ptr<X>) + + iterator + insert (iterator position, std::auto_ptr<X>) + + std::auto_ptr<X> + detach_back (bool pop = true); + + iterator + detach (iterator position, + std::auto_ptr<X>& result, + bool erase = true) + + ... +} + </pre> + + <p>The following code shows how one could use this mapping:</p> + + <pre class="c++"> +void +f (object& o) +{ + using xml_schema::string; + + object::member_sequence& s (o.member ()); + + // Iteration. + // + for (object::member_iterator i (s.begin ()); i != s.end (); ++i) + { + string& value (*i); + } + + // Modification. + // + s.push_back ("hello"); // deep copy + + std::auto_ptr<string> p (new string ("hello")); + s.push_back (p); // assumes ownership + p = s.detach_back (); // detach and pop + s.push_back (p); // re-append + + // Setting a new container. + // + object::member_sequence n; + n.push_back ("one"); + n.push_back ("two"); + o.member (n); // deep copy +} + </pre> + + <h2><a name="2.9">2.9 Mapping for Global Elements</a></h2> + + <p>An XML Schema element definition is called global if it appears + directly under the <code>schema</code> element. + A global element is a valid root of an instance document. By + default, a global element is mapped to a set of overloaded + parsing and, optionally, serialization functions with the + same name as the element. It is also possible to generate types + for root elements instead of parsing and serialization functions. + This is primarily useful to distinguish object models with the + same root type but with different root elements. See + <a href="#2.9.1">Section 2.9.1, "Element Types"</a> for details. + It is also possible to request the generation of an element map + which allows uniform parsing and serialization of multiple root + elements. See <a href="#2.9.2">Section 2.9.2, "Element Map"</a> + for details. + </p> + + <p>The parsing functions read XML instance documents and return + corresponding object models. Their signatures + have the following pattern (<code>type</code> denotes + element's type and <code>name</code> denotes element's + name): + </p> + + <pre class="c++"> +std::auto_ptr<type> +name (....); + </pre> + + <p>The process of parsing, including the exact signatures of the parsing + functions, is the subject of <a href="#3">Chapter 3, "Parsing"</a>. + </p> + + <p>The serialization functions write object models + back to XML instance documents. Their signatures + have the following pattern: + </p> + + <pre class="c++"> +void +name (<stream type>&, const type&, ....); + </pre> + + <p>The process of serialization, including the exact signatures of the + serialization functions, is the subject of <a href="#4">Chapter 4, + "Serialization"</a>. + </p> + + + <h3><a name="2.9.1">2.9.1 Element Types</a></h3> + + <p>The generation of element types is requested with the + <code>--generate-element-map</code> option. With this option + each global element is mapped to a C++ class with the + same name as the element. Such a class is derived from + <code>xml_schema::element_type</code> and contains the same set + of type definitions, constructors, and member function as would a + type containing a single element with the One cardinality class + named <code>"value"</code>. In addition, the element type also + contains a set of member functions for accessing the element + name and namespace as well as its value in a uniform manner. + For example:</p> + + <pre class="xml"> +<complexType name="type"> + <sequence> + ... + </sequence> +</complexType> + +<element name="root" type="type"/> + </pre> + +<p>is mapped to:</p> + + <pre class="c++"> +class type +{ + ... +}; + +class root: public xml_schema::element_type +{ +public: + // Element value. + // + typedef type value_type; + + const value_type& + value () const; + + value_type& + value (); + + void + value (const value_type&); + + void + value (std::auto_ptr<value_type>); + + // Constructors. + // + root (const value_type&); + + root (std::auto_ptr<value_type>); + + root (const xercesc::DOMElement&, xml_schema::flags = 0); + + root (const root&, xml_schema::flags = 0); + + virtual root* + _clone (xml_schema::flags = 0) const; + + // Element name and namespace. + // + static const std::string& + name (); + + static const std::string& + namespace_ (); + + virtual const std::string& + _name () const; + + virtual const std::string& + _namespace () const; + + // Element value as xml_schema::type. + // + virtual const xml_schema::type* + _value () const; + + virtual xml_schema::type* + _value (); +}; + +void +operator<< (xercesc::DOMElement&, const root&); + </pre> + + <p>The <code>xml_schema::element_type</code> class is a common + base type for all element types and is defined as follows:</p> + + <pre class="c++"> +namespace xml_schema +{ + class element_type + { + public: + virtual + ~element_type (); + + virtual element_type* + _clone (flags f = 0) const = 0; + + virtual const std::basic_string<C>& + _name () const = 0; + + virtual const std::basic_string<C>& + _namespace () const = 0; + + virtual xml_schema::type* + _value () = 0; + + virtual const xml_schema::type* + _value () const = 0; + }; +} + </pre> + + <p>The <code>_value()</code> member function returns a pointer to + the element value or 0 if the element is of a fundamental C++ + type and therefore is not derived from <code>xml_schema::type</code>. + </p> + + <p>Unlike parsing and serialization functions, element types + are only capable of parsing and serializing from/to a + <code>DOMElement</code> object. This means that the application + will need to perform its own XML-to-DOM parsing and DOM-to-XML + serialization. The following section describes a mechanism + provided by the mapping to uniformly parse and serialize + multiple root elements.</p> + + + <h3><a name="2.9.2">2.9.2 Element Map</a></h3> + + <p>When element types are generated for root elements it is also + possible to request the generation of an element map with the + <code>--generate-element-map</code> option. The element map + allows uniform parsing and serialization of multiple root + elements via the common <code>xml_schema::element_type</code> + base type. The <code>xml_schema::element_map</code> class is + defined as follows:</p> + + <pre class="c++"> +namespace xml_schema +{ + class element_map + { + public: + static std::auto_ptr<xml_schema::element_type> + parse (const xercesc::DOMElement&, flags = 0); + + static void + serialize (xercesc::DOMElement&, const element_type&); + }; +} + </pre> + + <p>The <code>parse()</code> function creates the corresponding + element type object based on the element name and namespace + and returns it as a pointer to <code>xml_schema::element_type</code>. + The <code>serialize()</code> function serializes the passed element + object to <code>DOMElement</code>. Note that in case of + <code>serialize()</code>, the <code>DOMElement</code> object + should have the correct name and namespace. If no element type is + available for an element, both functions throw the + <code>xml_schema::no_element_info</code> exception:</p> + + <pre class="c++"> +struct no_element_info: virtual exception +{ + no_element_info (const std::basic_string<C>& element_name, + const std::basic_string<C>& element_namespace); + + const std::basic_string<C>& + element_name () const; + + const std::basic_string<C>& + element_namespace () const; + + virtual const char* + what () const throw (); +}; + </pre> + + <p>The application can discover the actual type of the element + object returned by <code>parse()</code> either using + <code>dynamic_cast</code> or by comparing element names and + namespaces. The following code fragments illustrate how the + element map can be used:</p> + + <pre class="c++"> +// Parsing. +// +DOMElement& e = ... // Parse XML to DOM. + +auto_ptr<xml_schema::element_type> r ( + xml_schema::element_map::parse (e)); + +if (root1 r1 = dynamic_cast<root1*> (r.get ())) +{ + ... +} +else if (r->_name == root2::name () && + r->_namespace () == root2::namespace_ ()) +{ + root2& r2 (static_cast<root2&> (*r)); + + ... +} + </pre> + + <pre class="c++"> +// Serialization. +// +xml_schema::element_type& r = ... + +string name (r._name ()); +string ns (r._namespace ()); + +DOMDocument& doc = ... // Create a new DOMDocument with name and ns. +DOMElement& e (*doc->getDocumentElement ()); + +xml_schema::element_map::serialize (e, r); + +// Serialize DOMDocument to XML. + </pre> + + <!-- --> + + <h2><a name="2.10">2.10 Mapping for Global Attributes</a></h2> + + <p>An XML Schema attribute definition is called global if it appears + directly under the <code>schema</code> element. A global + attribute does not have any mapping. + </p> + + <!-- + When it is referenced from + a local attribute definition (using the <code>ref</code> attribute) + it is treated as a local attribute (see Section 2.8, "Mapping for + Local Elements and Attributes"). + --> + + <h2><a name="2.11">2.11 Mapping for <code>xsi:type</code> and Substitution + Groups</a></h2> + + <p>The mapping provides optional support for the XML Schema polymorphism + features (<code>xsi:type</code> and substitution groups) which can + be requested with the <code>--generate-polymorphic</code> option. + When used, the dynamic type of a member may be different from + its static type. Consider the following schema definition and + instance document: + </p> + + <pre class="xml"> +<!-- test.xsd --> +<schema> + <complexType name="base"> + <attribute name="text" type="string"/> + </complexType> + + <complexType name="derived"> + <complexContent> + <extension base="base"> + <attribute name="extra-text" type="string"/> + </extension> + </complexContent> + </complexType> + + <complexType name="root_type"> + <sequence> + <element name="item" type="base" maxOccurs="unbounded"/> + </sequence> + </complexType> + + <element name="root" type="root_type"/> +</schema> + +<!-- test.xml --> +<root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <item text="hello"/> + <item text="hello" extra-text="world" xsi:type="derived"/> +</root> + </pre> + + <p>In the resulting object model, the container for + the <code>root::item</code> member will have two elements: + the first element's type will be <code>base</code> while + the second element's (dynamic) type will be + <code>derived</code>. This can be discovered using the + <code>dynamic_cast</code> operator as shown in the following + example: + </p> + + <pre class="c++"> +void +f (root& r) +{ + for (root::item_const_iterator i (r.item ().begin ()); + i != r.item ().end () + ++i) + { + if (derived* d = dynamic_cast<derived*> (&(*i))) + { + // derived + } + else + { + // base + } + } +} + </pre> + + <p>The <code>_clone</code> virtual function should be used instead of + copy constructors to make copies of members that might use + polymorphism: + </p> + + <pre class="c++"> +void +f (root& r) +{ + for (root::item_const_iterator i (r.item ().begin ()); + i != r.item ().end () + ++i) + { + std::auto_ptr<base> c (i->_clone ()); + } +} + </pre> + + <p>The mapping can often automatically determine which types are + polymorphic based on the substitution group declarations. However, + if your XML vocabulary is not using substitution groups or if + substitution groups are defined in a separate schema, then you will + need to use the <code>--polymorphic-type</code> option to specify + which types are polymorphic. When using this option you only need + to specify the root of a polymorphic type hierarchy and the mapping + will assume that all the derived types are also polymorphic. + Also note that you need to specify this option when compiling every + schema file that references the polymorphic type. Consider the following + two schemas as an example:</p> + + <pre class="xml"> +<!-- base.xsd --> +<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> + + <xs:complexType name="base"> + <xs:sequence> + <xs:element name="b" type="xs:int"/> + </xs:sequence> + </xs:complexType> + + <!-- substitution group root --> + <xs:element name="base" type="base"/> + +</xs:schema> + </pre> + + <pre class="xml"> +<!-- derived.xsd --> +<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> + + <include schemaLocation="base.xsd"/> + + <xs:complexType name="derived"> + <xs:complexContent> + <xs:extension base="base"> + <xs:sequence> + <xs:element name="d" type="xs:string"/> + </xs:sequence> + </xs:extension> + </xs:complexContent> + </xs:complexType> + + <xs:element name="derived" type="derived" substitutionGroup="base"/> + +</xs:schema> + </pre> + + <p>In this example we need to specify "<code>--polymorphic-type base</code>" + when compiling both schemas because the substitution group is declared + in a schema other than the one defining type <code>base</code>.</p> + + <p>You can also indicate that all types should be treated as polymorphic + with the <code>--polymorphic-type-all</code>. However, this may result + in slower generated code with a greater footprint.</p> + + + <!-- Mapping for any and anyAttribute --> + + + <h2><a name="2.12">2.12 Mapping for <code>any</code> and <code>anyAttribute</code></a></h2> + + <p>For the XML Schema <code>any</code> and <code>anyAttribute</code> + wildcards an optional mapping can be requested with the + <code>--generate-wildcard</code> option. The mapping represents + the content matched by wildcards as DOM fragments. Because the + DOM API is used to access such content, the Xerces-C++ runtime + should be initialized by the application prior to parsing and + should remain initialized for the lifetime of objects with + the wildcard content. For more information on the Xerces-C++ + runtime initialization see <a href="#3.1">Section 3.1, + "Initializing the Xerces-C++ Runtime"</a>. + </p> + + <p>The mapping for <code>any</code> is similar to the mapping for + local elements (see <a href="#2.8">Section 2.8, "Mapping for Local + Elements and Attributes"</a>) except that the type used in the + wildcard mapping is <code>xercesc::DOMElement</code>. As with local + elements, the mapping divides all possible cardinality combinations + into three cardinality classes: <i>one</i>, <i>optional</i>, and + <i>sequence</i>. + </p> + + <p>The mapping for <code>anyAttribute</code> represents the attributes + matched by this wildcard as a set of <code>xercesc::DOMAttr</code> + objects with a key being the attribute's name and namespace.</p> + + <p>Similar to local elements and attributes, the <code>any</code> and + <code>anyAttribute</code> wildcards are mapped to a set of public type + definitions (typedefs) and a set of public accessor and modifier + functions. Type definitions have names derived from <code>"any"</code> + for the <code>any</code> wildcard and <code>"any_attribute"</code> + for the <code>anyAttribute</code> wildcard. The accessor and modifier + functions are named <code>"any"</code> for the <code>any</code> wildcard + and <code>"any_attribute"</code> for the <code>anyAttribute</code> + wildcard. Subsequent wildcards in the same type have escaped names + such as <code>"any1"</code> or <code>"any_attribute1"</code>. + </p> + + <p>Because Xerces-C++ DOM nodes always belong to a <code>DOMDocument</code>, + each type with a wildcard has an associated <code>DOMDocument</code> + object. The reference to this object can be obtained using the accessor + function called <code>dom_document</code>. The access to the document + object from the application code may be necessary to create or modify + the wildcard content. For example: + </p> + + <pre class="xml"> +<complexType name="object"> + <sequence> + <any namespace="##other"/> + </sequence> + <anyAttribute namespace="##other"/> +</complexType> + </pre> + + <p>is mapped to:</p> + + <pre class="c++"> +class object: xml_schema::type +{ +public: + // any + // + const xercesc::DOMElement& + any () const; + + void + any (const xercesc::DOMElement&); + + ... + + // any_attribute + // + typedef attribute_set any_attribute_set; + typedef any_attribute_set::iterator any_attribute_iterator; + typedef any_attribute_set::const_iterator any_attribute_const_iterator; + + const any_attribute_set& + any_attribute () const; + + any_attribute_set& + any_attribute (); + + ... + + // DOMDocument object for wildcard content. + // + const xercesc::DOMDocument& + dom_document () const; + + xercesc::DOMDocument& + dom_document (); + + ... +}; + </pre> + + + <p>Names and semantics of type definitions for the wildcards as well + as signatures of the accessor and modifier functions depend on the + wildcard type as well as the cardinality class for the <code>any</code> + wildcard. They are described in the following sub-sections. + </p> + + + <h3><a name="2.12.1">2.12.1 Mapping for <code>any</code> with the One Cardinality Class</a></h3> + + <p>For <code>any</code> with the One cardinality class, + there are no type definitions. The accessor functions come in + constant and non-constant versions. The constant accessor function + returns a constant reference to <code>xercesc::DOMElement</code> and + can be used for read-only access. The non-constant version returns + an unrestricted reference to <code>xercesc::DOMElement</code> and can + be used for read-write access. + </p> + + <p>The first modifier function expects an argument of type reference + to constant <code>xercesc::DOMElement</code> and makes a deep copy + of its argument. The second modifier function expects an argument of + type pointer to <code>xercesc::DOMElement</code>. This modifier + function assumes ownership of its argument and expects the element + object to be created using the DOM document associated with this + instance. For example: + </p> + + <pre class="xml"> +<complexType name="object"> + <sequence> + <any namespace="##other"/> + </sequence> +</complexType> + </pre> + + <p>is mapped to:</p> + + <pre class="c++"> +class object: xml_schema::type +{ +public: + // Accessors. + // + const xercesc::DOMElement& + any () const; + + xercesc::DOMElement& + any (); + + // Modifiers. + // + void + any (const xercesc::DOMElement&); + + void + any (xercesc::DOMElement*); + + ... + +}; + </pre> + + + <p>The following code shows how one could use this mapping:</p> + + <pre class="c++"> +void +f (object& o, const xercesc::DOMElement& e) +{ + using namespace xercesc; + + DOMElement& e1 (o.any ()); // get + o.any (e) // set, deep copy + DOMDocument& doc (o.dom_document ()); + o.any (doc.createElement (...)); // set, assumes ownership +} + </pre> + + <h3><a name="2.12.2">2.12.2 Mapping for <code>any</code> with the Optional Cardinality Class</a></h3> + + <p>For <code>any</code> with the Optional cardinality class, the type + definitions consist of an alias for the container type with name + <code>any_optional</code> (or <code>any1_optional</code>, etc., for + subsequent wildcards in the type definition). + </p> + + <p>Unlike accessor functions for the One cardinality class, accessor + functions for the Optional cardinality class return references to + corresponding containers rather than directly to <code>DOMElement</code>. + The accessor functions come in constant and non-constant versions. + The constant accessor function returns a constant reference to + the container and can be used for read-only access. The non-constant + version returns an unrestricted reference to the container + and can be used for read-write access. + </p> + + <p>The modifier functions are overloaded for <code>xercesc::DOMElement</code> + and the container type. The first modifier function expects an argument of + type reference to constant <code>xercesc::DOMElement</code> and + makes a deep copy of its argument. The second modifier function + expects an argument of type pointer to <code>xercesc::DOMElement</code>. + This modifier function assumes ownership of its argument and expects + the element object to be created using the DOM document associated + with this instance. The third modifier function expects an argument + of type reference to constant of the container type and makes a + deep copy of its argument. For instance: + </p> + + <pre class="xml"> +<complexType name="object"> + <sequence> + <any namespace="##other" minOccurs="0"/> + </sequence> +</complexType> + </pre> + + <p>is mapped to:</p> + + <pre class="c++"> +class object: xml_schema::type +{ +public: + // Type definitions. + // + typedef element_optional any_optional; + + // Accessors. + // + const any_optional& + any () const; + + any_optional& + any (); + + // Modifiers. + // + void + any (const xercesc::DOMElement&); + + void + any (xercesc::DOMElement*); + + void + any (const any_optional&); + + ... + +}; + </pre> + + + <p>The <code>element_optional</code> container is a + specialization of the <code>optional</code> class template described + in <a href="#2.8.2">Section 2.8.2, "Mapping for Members with the Optional + Cardinality Class"</a>. Its interface is presented below: + </p> + + <pre class="c++"> +class element_optional +{ +public: + explicit + element_optional (xercesc::DOMDocument&); + + // Makes a deep copy. + // + element_optional (const xercesc::DOMElement&, xercesc::DOMDocument&); + + // Assumes ownership. + // + element_optional (xercesc::DOMElement*, xercesc::DOMDocument&); + + element_optional (const element_optional&, xercesc::DOMDocument&); + +public: + element_optional& + operator= (const xercesc::DOMElement&); + + element_optional& + operator= (const element_optional&); + + // Pointer-like interface. + // +public: + const xercesc::DOMElement* + operator-> () const; + + xercesc::DOMElement* + operator-> (); + + const xercesc::DOMElement& + operator* () const; + + xercesc::DOMElement& + operator* (); + + typedef void (element_optional::*bool_convertible) (); + operator bool_convertible () const; + + // Get/set interface. + // +public: + bool + present () const; + + const xercesc::DOMElement& + get () const; + + xercesc::DOMElement& + get (); + + // Makes a deep copy. + // + void + set (const xercesc::DOMElement&); + + // Assumes ownership. + // + void + set (xercesc::DOMElement*); + + void + reset (); +}; + +bool +operator== (const element_optional&, const element_optional&); + +bool +operator!= (const element_optional&, const element_optional&); + </pre> + + + <p>The following code shows how one could use this mapping:</p> + + <pre class="c++"> +void +f (object& o, const xercesc::DOMElement& e) +{ + using namespace xercesc; + + DOMDocument& doc (o.dom_document ()); + + if (o.any ().present ()) // test + { + DOMElement& e1 (o.any ().get ()); // get + o.any ().set (e); // set, deep copy + o.any ().set (doc.createElement (...)); // set, assumes ownership + o.any ().reset (); // reset + } + + // Same as above but using pointer notation: + // + if (o.member ()) // test + { + DOMElement& e1 (*o.any ()); // get + o.any (e); // set, deep copy + o.any (doc.createElement (...)); // set, assumes ownership + o.any ().reset (); // reset + } +} + </pre> + + + + <h3><a name="2.12.3">2.12.3 Mapping for <code>any</code> with the Sequence Cardinality Class</a></h3> + + <p>For <code>any</code> with the Sequence cardinality class, the type + definitions consist of an alias of the container type with name + <code>any_sequence</code> (or <code>any1_sequence</code>, etc., for + subsequent wildcards in the type definition), an alias of the iterator + type with name <code>any_iterator</code> (or <code>any1_iterator</code>, + etc., for subsequent wildcards in the type definition), and an alias + of the constant iterator type with name <code>any_const_iterator</code> + (or <code>any1_const_iterator</code>, etc., for subsequent wildcards + in the type definition). + </p> + + <p>The accessor functions come in constant and non-constant versions. + The constant accessor function returns a constant reference to the + container and can be used for read-only access. The non-constant + version returns an unrestricted reference to the container and can + be used for read-write access. + </p> + + <p>The modifier function expects an argument of type reference to + constant of the container type. The modifier function makes + a deep copy of its argument. For instance: + </p> + + + <pre class="xml"> +<complexType name="object"> + <sequence> + <any namespace="##other" minOccurs="unbounded"/> + </sequence> +</complexType> + </pre> + + <p>is mapped to:</p> + + <pre class="c++"> +class object: xml_schema::type +{ +public: + // Type definitions. + // + typedef element_sequence any_sequence; + typedef any_sequence::iterator any_iterator; + typedef any_sequence::const_iterator any_const_iterator; + + // Accessors. + // + const any_sequence& + any () const; + + any_sequence& + any (); + + // Modifier. + // + void + any (const any_sequence&); + + ... + +}; + </pre> + + <p>The <code>element_sequence</code> container is a + specialization of the <code>sequence</code> class template described + in <a href="#2.8.3">Section 2.8.3, "Mapping for Members with the + Sequence Cardinality Class"</a>. Its interface is similar to + the sequence interface as defined by the ISO/ANSI Standard for + C++ (ISO/IEC 14882:1998, Section 23.1.1, "Sequences") and is + presented below: + </p> + + <pre class="c++"> +class element_sequence +{ +public: + typedef xercesc::DOMElement value_type; + typedef xercesc::DOMElement* pointer; + typedef const xercesc::DOMElement* const_pointer; + typedef xercesc::DOMElement& reference; + typedef const xercesc::DOMElement& const_reference; + + typedef <implementation-defined> iterator; + typedef <implementation-defined> const_iterator; + typedef <implementation-defined> reverse_iterator; + typedef <implementation-defined> const_reverse_iterator; + + typedef <implementation-defined> size_type; + typedef <implementation-defined> difference_type; + typedef <implementation-defined> allocator_type; + +public: + explicit + element_sequence (xercesc::DOMDocument&); + + // DOMElement cannot be default-constructed. + // + // explicit + // element_sequence (size_type n); + + element_sequence (size_type n, + const xercesc::DOMElement&, + xercesc::DOMDocument&); + + template <typename I> + element_sequence (const I& begin, + const I& end, + xercesc::DOMDocument&); + + element_sequence (const element_sequence&, xercesc::DOMDocument&); + + element_sequence& + operator= (const element_sequence&); + +public: + void + assign (size_type n, const xercesc::DOMElement&); + + template <typename I> + void + assign (const I& begin, const I& end); + +public: + // This version of resize can only be used to shrink the + // sequence because DOMElement cannot be default-constructed. + // + void + resize (size_type); + + void + resize (size_type, const xercesc::DOMElement&); + +public: + size_type + size () const; + + size_type + max_size () const; + + size_type + capacity () const; + + bool + empty () const; + + void + reserve (size_type); + + void + clear (); + +public: + const_iterator + begin () const; + + const_iterator + end () const; + + iterator + begin (); + + iterator + end (); + + const_reverse_iterator + rbegin () const; + + const_reverse_iterator + rend () const + + reverse_iterator + rbegin (); + + reverse_iterator + rend (); + +public: + xercesc::DOMElement& + operator[] (size_type); + + const xercesc::DOMElement& + operator[] (size_type) const; + + xercesc::DOMElement& + at (size_type); + + const xercesc::DOMElement& + at (size_type) const; + + xercesc::DOMElement& + front (); + + const xercesc::DOMElement& + front () const; + + xercesc::DOMElement& + back (); + + const xercesc::DOMElement& + back () const; + +public: + // Makes a deep copy. + // + void + push_back (const xercesc::DOMElement&); + + // Assumes ownership. + // + void + push_back (xercesc::DOMElement*); + + void + pop_back (); + + // Makes a deep copy. + // + iterator + insert (iterator position, const xercesc::DOMElement&); + + // Assumes ownership. + // + iterator + insert (iterator position, xercesc::DOMElement*); + + void + insert (iterator position, size_type n, const xercesc::DOMElement&); + + template <typename I> + void + insert (iterator position, const I& begin, const I& end); + + iterator + erase (iterator position); + + iterator + erase (iterator begin, iterator end); + +public: + // Note that the DOMDocument object of the two sequences being + // swapped should be the same. + // + void + swap (sequence& x); +}; + +inline bool +operator== (const element_sequence&, const element_sequence&); + +inline bool +operator!= (const element_sequence&, const element_sequence&); + </pre> + + + <p>The following code shows how one could use this mapping:</p> + + <pre class="c++"> +void +f (object& o, const xercesc::DOMElement& e) +{ + using namespace xercesc; + + object::any_sequence& s (o.any ()); + + // Iteration. + // + for (object::any_iterator i (s.begin ()); i != s.end (); ++i) + { + DOMElement& e (*i); + } + + // Modification. + // + s.push_back (e); // deep copy + DOMDocument& doc (o.dom_document ()); + s.push_back (doc.createElement (...)); // assumes ownership +} + </pre> + + + <h3><a name="2.12.4">2.12.4 Mapping for <code>anyAttribute</code></a></h3> + + <p>For <code>anyAttribute</code> the type definitions consist of an alias + of the container type with name <code>any_attribute_set</code> + (or <code>any1_attribute_set</code>, etc., for subsequent wildcards + in the type definition), an alias of the iterator type with name + <code>any_attribute_iterator</code> (or <code>any1_attribute_iterator</code>, + etc., for subsequent wildcards in the type definition), and an alias + of the constant iterator type with name <code>any_attribute_const_iterator</code> + (or <code>any1_attribute_const_iterator</code>, etc., for subsequent + wildcards in the type definition). + </p> + + <p>The accessor functions come in constant and non-constant versions. + The constant accessor function returns a constant reference to the + container and can be used for read-only access. The non-constant + version returns an unrestricted reference to the container and can + be used for read-write access. + </p> + + <p>The modifier function expects an argument of type reference to + constant of the container type. The modifier function makes + a deep copy of its argument. For instance: + </p> + + + <pre class="xml"> +<complexType name="object"> + <sequence> + ... + </sequence> + <anyAttribute namespace="##other"/> +</complexType> + </pre> + + <p>is mapped to:</p> + + <pre class="c++"> +class object: xml_schema::type +{ +public: + // Type definitions. + // + typedef attribute_set any_attribute_set; + typedef any_attribute_set::iterator any_attribute_iterator; + typedef any_attribute_set::const_iterator any_attribute_const_iterator; + + // Accessors. + // + const any_attribute_set& + any_attribute () const; + + any_attribute_set& + any_attribute (); + + // Modifier. + // + void + any_attribute (const any_attribute_set&); + + ... + +}; + </pre> + + <p>The <code>attribute_set</code> class is an associative container + similar to the <code>std::set</code> class template as defined by + the ISO/ANSI Standard for C++ (ISO/IEC 14882:1998, Section 23.3.3, + "Class template set") with the key being the attribute's name + and namespace. Unlike <code>std::set</code>, <code>attribute_set</code> + allows searching using names and namespaces instead of + <code>xercesc::DOMAttr</code> objects. It is defined in an + implementation-specific namespace and its interface is presented + below: + </p> + + <pre class="c++"> +class attribute_set +{ +public: + typedef xercesc::DOMAttr key_type; + typedef xercesc::DOMAttr value_type; + typedef xercesc::DOMAttr* pointer; + typedef const xercesc::DOMAttr* const_pointer; + typedef xercesc::DOMAttr& reference; + typedef const xercesc::DOMAttr& const_reference; + + typedef <implementation-defined> iterator; + typedef <implementation-defined> const_iterator; + typedef <implementation-defined> reverse_iterator; + typedef <implementation-defined> const_reverse_iterator; + + typedef <implementation-defined> size_type; + typedef <implementation-defined> difference_type; + typedef <implementation-defined> allocator_type; + +public: + attribute_set (xercesc::DOMDocument&); + + template <typename I> + attribute_set (const I& begin, const I& end, xercesc::DOMDocument&); + + attribute_set (const attribute_set&, xercesc::DOMDocument&); + + attribute_set& + operator= (const attribute_set&); + +public: + const_iterator + begin () const; + + const_iterator + end () const; + + iterator + begin (); + + iterator + end (); + + const_reverse_iterator + rbegin () const; + + const_reverse_iterator + rend () const; + + reverse_iterator + rbegin (); + + reverse_iterator + rend (); + +public: + size_type + size () const; + + size_type + max_size () const; + + bool + empty () const; + + void + clear (); + +public: + // Makes a deep copy. + // + std::pair<iterator, bool> + insert (const xercesc::DOMAttr&); + + // Assumes ownership. + // + std::pair<iterator, bool> + insert (xercesc::DOMAttr*); + + // Makes a deep copy. + // + iterator + insert (iterator position, const xercesc::DOMAttr&); + + // Assumes ownership. + // + iterator + insert (iterator position, xercesc::DOMAttr*); + + template <typename I> + void + insert (const I& begin, const I& end); + +public: + void + erase (iterator position); + + size_type + erase (const std::basic_string<C>& name); + + size_type + erase (const std::basic_string<C>& namespace_, + const std::basic_string<C>& name); + + size_type + erase (const XMLCh* name); + + size_type + erase (const XMLCh* namespace_, const XMLCh* name); + + void + erase (iterator begin, iterator end); + +public: + size_type + count (const std::basic_string<C>& name) const; + + size_type + count (const std::basic_string<C>& namespace_, + const std::basic_string<C>& name) const; + + size_type + count (const XMLCh* name) const; + + size_type + count (const XMLCh* namespace_, const XMLCh* name) const; + + iterator + find (const std::basic_string<C>& name); + + iterator + find (const std::basic_string<C>& namespace_, + const std::basic_string<C>& name); + + iterator + find (const XMLCh* name); + + iterator + find (const XMLCh* namespace_, const XMLCh* name); + + const_iterator + find (const std::basic_string<C>& name) const; + + const_iterator + find (const std::basic_string<C>& namespace_, + const std::basic_string<C>& name) const; + + const_iterator + find (const XMLCh* name) const; + + const_iterator + find (const XMLCh* namespace_, const XMLCh* name) const; + +public: + // Note that the DOMDocument object of the two sets being + // swapped should be the same. + // + void + swap (attribute_set&); +}; + +bool +operator== (const attribute_set&, const attribute_set&); + +bool +operator!= (const attribute_set&, const attribute_set&); + </pre> + + <p>The following code shows how one could use this mapping:</p> + + <pre class="c++"> +void +f (object& o, const xercesc::DOMAttr& a) +{ + using namespace xercesc; + + object::any_attribute_set& s (o.any_attribute ()); + + // Iteration. + // + for (object::any_attribute_iterator i (s.begin ()); i != s.end (); ++i) + { + DOMAttr& a (*i); + } + + // Modification. + // + s.insert (a); // deep copy + DOMDocument& doc (o.dom_document ()); + s.insert (doc.createAttribute (...)); // assumes ownership + + // Searching. + // + object::any_attribute_iterator i (s.find ("name")); + i = s.find ("http://www.w3.org/XML/1998/namespace", "lang"); +} + </pre> + + <!-- Mapping for Mixed Content Models --> + + <h2><a name="2.13">2.13 Mapping for Mixed Content Models</a></h2> + + <p>XML Schema mixed content models do not have a direct C++ mapping. + Instead, information in XML instance documents, corresponding to + a mixed content model, can be accessed using generic DOM nodes that + can optionally be associated with object model nodes. See + <a href="#5.1">Section 5.1, "DOM Association"</a> for more + information about keeping association with DOM nodes. + </p> + + + <!-- Parsing --> + + + <h1><a name="3">3 Parsing</a></h1> + + <p>This chapter covers various aspects of parsing XML instance + documents in order to obtain corresponding tree-like object + model. + </p> + + <p>Each global XML Schema element in the form:</p> + + <pre class="xml"> +<element name="name" type="type"/> + </pre> + + <p>is mapped to 14 overloaded C++ functions in the form:</p> + + <pre class="c++"> +// Read from a URI or a local file. +// + +std::auto_ptr<type> +name (const std::basic_string<C>& uri, + xml_schema::flags = 0, + const xml_schema::properties& = xml_schema::properties ()); + +std::auto_ptr<type> +name (const std::basic_string<C>& uri, + xml_schema::error_handler&, + xml_schema::flags = 0, + const xml_schema::properties& = xml_schema::properties ()); + +std::auto_ptr<type> +name (const std::basic_string<C>& uri, + xercesc::DOMErrorHandler&, + xml_schema::flags = 0, + const xml_schema::properties& = xml_schema::properties ()); + + +// Read from std::istream. +// + +std::auto_ptr<type> +name (std::istream&, + xml_schema::flags = 0, + const xml_schema::properties& = xml_schema::properties ()); + +std::auto_ptr<type> +name (std::istream&, + xml_schema::error_handler&, + xml_schema::flags = 0, + const xml_schema::properties& = xml_schema::properties ()); + +std::auto_ptr<type> +name (std::istream&, + xercesc::DOMErrorHandler&, + xml_schema::flags = 0, + const xml_schema::properties& = xml_schema::properties ()); + + +std::auto_ptr<type> +name (std::istream&, + const std::basic_string<C>& id, + xml_schema::flags = 0, + const xml_schema::properties& = xml_schema::properties ()); + +std::auto_ptr<type> +name (std::istream&, + const std::basic_string<C>& id, + xml_schema::error_handler&, + xml_schema::flags = 0, + const xml_schema::properties& = xml_schema::properties ()); + +std::auto_ptr<type> +name (std::istream&, + const std::basic_string<C>& id, + xercesc::DOMErrorHandler&, + xml_schema::flags = 0, + const xml_schema::properties& = xml_schema::properties ()); + + +// Read from InputSource. +// + +std::auto_ptr<type> +name (xercesc::InputSource&, + xml_schema::flags = 0, + const xml_schema::properties& = xml_schema::properties ()); + +std::auto_ptr<type> +name (xercesc::InputSource&, + xml_schema::error_handler&, + xml_schema::flags = 0, + const xml_schema::properties& = xml_schema::properties ()); + +std::auto_ptr<type> +name (xercesc::InputSource&, + xercesc::DOMErrorHandler&, + xml_schema::flags = 0, + const xml_schema::properties& = xml_schema::properties ()); + + +// Read from DOM. +// + +std::auto_ptr<type> +name (const xercesc::DOMDocument&, + xml_schema::flags = 0, + const xml_schema::properties& = xml_schema::properties ()); + +std::auto_ptr<type> +name (xml_schema::dom::auto_ptr<xercesc::DOMDocument>&, + xml_schema::flags = 0, + const xml_schema::properties& = xml_schema::properties ()); + </pre> + + <p>You can choose between reading an XML instance from a local file, + URI, <code>std::istream</code>, <code>xercesc::InputSource</code>, + or a pre-parsed DOM instance in the form of + <code>xercesc::DOMDocument</code>. Each of these parsing functions + is discussed in more detail in the following sections. + </p> + + <h2><a name="3.1">3.1 Initializing the Xerces-C++ Runtime</a></h2> + + <p>Some parsing functions expect you to initialize the Xerces-C++ + runtime while others initialize and terminate it as part of their + work. The general rule is as follows: if a function has any arguments + or return a value that is an instance of a Xerces-C++ type, then + this function expects you to initialize the Xerces-C++ runtime. + Otherwise, the function initializes and terminates the runtime for + you. Note that it is legal to have nested calls to the Xerces-C++ + initialize and terminate functions as long as the calls are balanced. + </p> + + <p>You can instruct parsing functions that initialize and terminate + the runtime not to do so by passing the + <code>xml_schema::flags::dont_initialize</code> flag (see + <a href="#3.2">Section 3.2, "Flags and Properties"</a>). + </p> + + + <h2><a name="3.2">3.2 Flags and Properties</a></h2> + + <p>Parsing flags and properties are the last two arguments of every + parsing function. They allow you to fine-tune the process of + instance validation and parsing. Both arguments are optional. + </p> + + + <p>The following flags are recognized by the parsing functions:</p> + + <dl> + <dt><code>xml_schema::flags::keep_dom</code></dt> + <dd>Keep association between DOM nodes and the resulting + object model nodes. For more information about DOM association + refer to <a href="#5.1">Section 5.1, "DOM Association"</a>.</dd> + + <dt><code>xml_schema::flags::own_dom</code></dt> + <dd>Assume ownership of the DOM document passed. This flag only + makes sense together with the <code>keep_dom</code> flag in + the call to the parsing function with the + <code>xml_schema::dom::auto_ptr<DOMDocument></code> + argument.</dd> + + <dt><code>xml_schema::flags::dont_validate</code></dt> + <dd>Do not validate instance documents against schemas.</dd> + + <dt><code>xml_schema::flags::dont_initialize</code></dt> + <dd>Do not initialize the Xerces-C++ runtime.</dd> + </dl> + + <p>You can pass several flags by combining them using the bit-wise OR + operator. For example:</p> + + <pre class="c++"> +using xml_schema::flags; + +std::auto_ptr<type> r ( + name ("test.xml", flags::keep_dom | flags::dont_validate)); + </pre> + + <p>By default, validation of instance documents is turned on even + though parsers generated by XSD do not assume instance + documents are valid. They include a number of checks that prevent + construction of inconsistent object models. This, + however, does not mean that an instance document that was + successfully parsed by the XSD-generated parsers is + valid per the corresponding schema. If an instance document is not + "valid enough" for the generated parsers to construct consistent + object model, one of the exceptions defined in + <code>xml_schema</code> namespace is thrown (see + <a href="#3.3">Section 3.3, "Error Handling"</a>). + </p> + + <p>For more information on the Xerces-C++ runtime initialization + refer to <a href="#3.1">Section 3.1, "Initializing the Xerces-C++ + Runtime"</a>. + </p> + + <p>The <code>xml_schema::properties</code> class allows you to + programmatically specify schema locations to be used instead + of those specified with the <code>xsi::schemaLocation</code> + and <code>xsi::noNamespaceSchemaLocation</code> attributes + in instance documents. The interface of the <code>properties</code> + class is presented below: + </p> + + <pre class="c++"> +class properties +{ +public: + void + schema_location (const std::basic_string<C>& namespace_, + const std::basic_string<C>& location); + void + no_namespace_schema_location (const std::basic_string<C>& location); +}; + </pre> + + <p>Note that all locations are relative to an instance document unless + they are URIs. For example, if you want to use a local file as your + schema, then you will need to pass + <code>file:///absolute/path/to/your/schema</code> as the location + argument. + </p> + + <h2><a name="3.3">3.3 Error Handling</a></h2> + + <p>As discussed in <a href="#2.2">Section 2.2, "Error Handling"</a>, + the mapping uses the C++ exception handling mechanism as its primary + way of reporting error conditions. However, to handle recoverable + parsing and validation errors and warnings, a callback interface maybe + preferred by the application.</p> + + <p>To better understand error handling and reporting strategies employed + by the parsing functions, it is useful to know that the + transformation of an XML instance document to a statically-typed + tree happens in two stages. The first stage, performed by Xerces-C++, + consists of parsing an XML document into a DOM instance. For short, + we will call this stage the XML-DOM stage. Validation, if not disabled, + happens during this stage. The second stage, + performed by the generated parsers, consist of parsing the DOM + instance into the statically-typed tree. We will call this stage + the DOM-Tree stage. Additional checks are performed during this + stage in order to prevent construction of inconsistent tree which + could otherwise happen when validation is disabled, for example.</p> + + <p>All parsing functions except the one that operates on a DOM instance + come in overloaded triples. The first function in such a triple + reports error conditions exclusively by throwing exceptions. It + accumulates all the parsing and validation errors of the XML-DOM + stage and throws them in a single instance of the + <code>xml_schema::parsing</code> exception (described below). + The second and the third functions in the triple use callback + interfaces to report parsing and validation errors and warnings. + The two callback interfaces are <code>xml_schema::error_handler</code> + and <code>xercesc::DOMErrorHandler</code>. For more information + on the <code>xercesc::DOMErrorHandler</code> interface refer to + the Xerces-C++ documentation. The <code>xml_schema::error_handler</code> + interface is presented below: + </p> + + <pre class="c++"> +class error_handler +{ +public: + struct severity + { + enum value + { + warning, + error, + fatal + }; + }; + + virtual bool + handle (const std::basic_string<C>& id, + unsigned long line, + unsigned long column, + severity, + const std::basic_string<C>& message) = 0; + + virtual + ~error_handler (); +}; + </pre> + + <p>The <code>id</code> argument of the <code>error_handler::handle</code> + function identifies the resource being parsed (e.g., a file name or + URI). + </p> + + <p>By returning <code>true</code> from the <code>handle</code> function + you instruct the parser to recover and continue parsing. Returning + <code>false</code> results in termination of the parsing process. + An error with the <code>fatal</code> severity level results in + termination of the parsing process no matter what is returned from + the <code>handle</code> function. It is safe to throw an exception + from the <code>handle</code> function. + </p> + + <p>The DOM-Tree stage reports error conditions exclusively by throwing + exceptions. Individual exceptions thrown by the parsing functions + are described in the following sub-sections. + </p> + + + <h3><a name="3.3.1">3.3.1 <code>xml_schema::parsing</code></a></h3> + + <pre class="c++"> +struct severity +{ + enum value + { + warning, + error + }; + + severity (value); + operator value () const; +}; + +struct error +{ + error (severity, + const std::basic_string<C>& id, + unsigned long line, + unsigned long column, + const std::basic_string<C>& message); + + severity + severity () const; + + const std::basic_string<C>& + id () const; + + unsigned long + line () const; + + unsigned long + column () const; + + const std::basic_string<C>& + message () const; +}; + +std::basic_ostream<C>& +operator<< (std::basic_ostream<C>&, const error&); + +struct diagnostics: std::vector<error> +{ +}; + +std::basic_ostream<C>& +operator<< (std::basic_ostream<C>&, const diagnostics&); + +struct parsing: virtual exception +{ + parsing (); + parsing (const diagnostics&); + + const diagnostics& + diagnostics () const; + + virtual const char* + what () const throw (); +}; + </pre> + + <p>The <code>xml_schema::parsing</code> exception is thrown if there + were parsing or validation errors reported during the XML-DOM stage. + If no callback interface was provided to the parsing function, the + exception contains a list of errors and warnings accessible using + the <code>diagnostics</code> function. The usual conditions when + this exception is thrown include malformed XML instances and, if + validation is turned on, invalid instance documents. + </p> + + <h3><a name="3.3.2">3.3.2 <code>xml_schema::expected_element</code></a></h3> + + <pre class="c++"> +struct expected_element: virtual exception +{ + expected_element (const std::basic_string<C>& name, + const std::basic_string<C>& namespace_); + + + const std::basic_string<C>& + name () const; + + const std::basic_string<C>& + namespace_ () const; + + + virtual const char* + what () const throw (); +}; + </pre> + + <p>The <code>xml_schema::expected_element</code> exception is thrown + when an expected element is not encountered by the DOM-Tree stage. + The name and namespace of the expected element can be obtained using + the <code>name</code> and <code>namespace_</code> functions respectively. + </p> + + + <h3><a name="3.3.3">3.3.3 <code>xml_schema::unexpected_element</code></a></h3> + + <pre class="c++"> +struct unexpected_element: virtual exception +{ + unexpected_element (const std::basic_string<C>& encountered_name, + const std::basic_string<C>& encountered_namespace, + const std::basic_string<C>& expected_name, + const std::basic_string<C>& expected_namespace) + + + const std::basic_string<C>& + encountered_name () const; + + const std::basic_string<C>& + encountered_namespace () const; + + + const std::basic_string<C>& + expected_name () const; + + const std::basic_string<C>& + expected_namespace () const; + + + virtual const char* + what () const throw (); +}; + </pre> + + <p>The <code>xml_schema::unexpected_element</code> exception is thrown + when an unexpected element is encountered by the DOM-Tree stage. + The name and namespace of the encountered element can be obtained + using the <code>encountered_name</code> and + <code>encountered_namespace</code> functions respectively. If an + element was expected instead of the encountered one, its name + and namespace can be obtained using the <code>expected_name</code> and + <code>expected_namespace</code> functions respectively. Otherwise + these functions return empty strings. + </p> + + <h3><a name="3.3.4">3.3.4 <code>xml_schema::expected_attribute</code></a></h3> + + <pre class="c++"> +struct expected_attribute: virtual exception +{ + expected_attribute (const std::basic_string<C>& name, + const std::basic_string<C>& namespace_); + + + const std::basic_string<C>& + name () const; + + const std::basic_string<C>& + namespace_ () const; + + + virtual const char* + what () const throw (); +}; + </pre> + + <p>The <code>xml_schema::expected_attribute</code> exception is thrown + when an expected attribute is not encountered by the DOM-Tree stage. + The name and namespace of the expected attribute can be obtained using + the <code>name</code> and <code>namespace_</code> functions respectively. + </p> + + + <h3><a name="3.3.5">3.3.5 <code>xml_schema::unexpected_enumerator</code></a></h3> + + <pre class="c++"> +struct unexpected_enumerator: virtual exception +{ + unexpected_enumerator (const std::basic_string<C>& enumerator); + + const std::basic_string<C>& + enumerator () const; + + virtual const char* + what () const throw (); +}; + </pre> + + <p>The <code>xml_schema::unexpected_enumerator</code> exception is thrown + when an unexpected enumerator is encountered by the DOM-Tree stage. + The enumerator can be obtained using the <code>enumerator</code> + functions. + </p> + + <h3><a name="3.3.6">3.3.6 <code>xml_schema::expected_text_content</code></a></h3> + + <pre class="c++"> +struct expected_text_content: virtual exception +{ + virtual const char* + what () const throw (); +}; + </pre> + + <p>The <code>xml_schema::expected_text_content</code> exception is thrown + when a content other than text is encountered and the text content was + expected by the DOM-Tree stage. + </p> + + <h3><a name="3.3.7">3.3.7 <code>xml_schema::no_type_info</code></a></h3> + + <pre class="c++"> +struct no_type_info: virtual exception +{ + no_type_info (const std::basic_string<C>& type_name, + const std::basic_string<C>& type_namespace); + + const std::basic_string<C>& + type_name () const; + + const std::basic_string<C>& + type_namespace () const; + + virtual const char* + what () const throw (); +}; + </pre> + + <p>The <code>xml_schema::no_type_info</code> exception is thrown + when there is no type information associated with a type specified + by the <code>xsi:type</code> attribute. This exception is thrown + by the DOM-Tree stage. The name and namespace of the type in question + can be obtained using the <code>type_name</code> and + <code>type_namespace</code> functions respectively. Usually, catching + this exception means that you haven't linked the code generated + from the schema defining the type in question with your application + or this schema has been compiled without the + <code>--generate-polymorphic</code> option. + </p> + + + <h3><a name="3.3.8">3.3.8 <code>xml_schema::not_derived</code></a></h3> + + <pre class="c++"> +struct not_derived: virtual exception +{ + not_derived (const std::basic_string<C>& base_type_name, + const std::basic_string<C>& base_type_namespace, + const std::basic_string<C>& derived_type_name, + const std::basic_string<C>& derived_type_namespace); + + const std::basic_string<C>& + base_type_name () const; + + const std::basic_string<C>& + base_type_namespace () const; + + + const std::basic_string<C>& + derived_type_name () const; + + const std::basic_string<C>& + derived_type_namespace () const; + + virtual const char* + what () const throw (); +}; + </pre> + + <p>The <code>xml_schema::not_derived</code> exception is thrown + when a type specified by the <code>xsi:type</code> attribute is + not derived from the expected base type. This exception is thrown + by the DOM-Tree stage. The name and namespace of the expected + base type can be obtained using the <code>base_type_name</code> and + <code>base_type_namespace</code> functions respectively. The name + and namespace of the offending type can be obtained using the + <code>derived_type_name</code> and + <code>derived_type_namespace</code> functions respectively. + </p> + + <h3><a name="3.3.9">3.3.9 <code>xml_schema::no_prefix_mapping</code></a></h3> + + <pre class="c++"> +struct no_prefix_mapping: virtual exception +{ + no_prefix_mapping (const std::basic_string<C>& prefix); + + const std::basic_string<C>& + prefix () const; + + virtual const char* + what () const throw (); +}; + </pre> + + <p>The <code>xml_schema::no_prefix_mapping</code> exception is thrown + during the DOM-Tree stage if a namespace prefix is encountered for + which a prefix-namespace mapping hasn't been provided. The namespace + prefix in question can be obtained using the <code>prefix</code> + function. + </p> + + <h2><a name="3.4">3.4 Reading from a Local File or URI</a></h2> + + <p>Using a local file or URI is the simplest way to parse an XML instance. + For example:</p> + + <pre class="c++"> +using std::auto_ptr; + +auto_ptr<type> r1 (name ("test.xml")); +auto_ptr<type> r2 (name ("http://www.codesynthesis.com/test.xml")); + </pre> + + <h2><a name="3.5">3.5 Reading from <code>std::istream</code></a></h2> + + <p>When using an <code>std::istream</code> instance, you may also + pass an optional resource id. This id is used to identify the + resource (for example in error messages) as well as to resolve + relative paths. For instance:</p> + + <pre class="c++"> +using std::auto_ptr; + +{ + std::ifstream ifs ("test.xml"); + auto_ptr<type> r (name (ifs, "test.xml")); +} + +{ + std::string str ("..."); // Some XML fragment. + std::istringstream iss (str); + auto_ptr<type> r (name (iss)); +} + </pre> + + <h2><a name="3.6">3.6 Reading from <code>xercesc::InputSource</code></a></h2> + + <p>Reading from a <code>xercesc::InputSource</code> instance + is similar to the <code>std::istream</code> case except + the resource id is maintained by the <code>InputSource</code> + object. For instance:</p> + + <pre class="c++"> +xercesc::StdInInputSource is; +std::auto_ptr<type> r (name (is)); + </pre> + + <h2><a name="3.7">3.7 Reading from DOM</a></h2> + + <p>Reading from a <code>xercesc::DOMDocument</code> instance allows + you to setup a custom XML-DOM stage. Things like DOM + parser reuse, schema pre-parsing, and schema caching can be achieved + with this approach. For more information on how to obtain DOM + representation from an XML instance refer to the Xerces-C++ + documentation. In addition, the + <a href="http://wiki.codesynthesis.com/Tree/FAQ">C++/Tree Mapping + FAQ</a> shows how to parse an XML instance to a Xerces-C++ + DOM document using the XSD runtime utilities. + </p> + + <p>The last parsing function is useful when you would like to perform + your own XML-to-DOM parsing and associate the resulting DOM document + with the object model nodes. If parsing is successeful, the + automatic <code>DOMDocument</code> pointer is reset and the + resulting object model assumes ownership of the DOM document + passed. For example:</p> + + <pre class="c++"> +xml_schema::dom::auto_ptr<xercesc::DOMDocument> doc = ... + +std::auto_ptr<type> r ( + name (doc, xml_schema::flags::keep_dom | xml_schema::flags::own_dom)); + +// At this point doc is reset to 0. + </pre> + + + + <h1><a name="4">4 Serialization</a></h1> + + <p>This chapter covers various aspects of serializing a + tree-like object model to DOM or XML. + In this regard, serialization is complimentary to the reverse + process of parsing a DOM or XML instance into an object model + which is discussed in <a href="#3">Chapter 3, + "Parsing"</a>. Note that the generation of the serialization code + is optional and should be explicitly requested with the + <code>--generate-serialization</code> option. See the + <a href="http://www.codesynthesis.com/projects/xsd/documentation/xsd.xhtml">XSD + Compiler Command Line Manual</a> for more information. + </p> + + <p>Each global XML Schema element in the form: + </p> + + + <pre class="xml"> +<xsd:element name="name" type="type"/> + </pre> + + <p>is mapped to 8 overloaded C++ functions in the form:</p> + + <pre class="c++"> +// Serialize to std::ostream. +// +void +name (std::ostream&, + const type&, + const xml_schema::namespace_fomap& = + xml_schema::namespace_infomap (), + const std::basic_string<C>& encoding = "UTF-8", + xml_schema::flags = 0); + +void +name (std::ostream&, + const type&, + xml_schema::error_handler&, + const xml_schema::namespace_infomap& = + xml_schema::namespace_infomap (), + const std::basic_string<C>& encoding = "UTF-8", + xml_schema::flags = 0); + +void +name (std::ostream&, + const type&, + xercesc::DOMErrorHandler&, + const xml_schema::namespace_infomap& = + xml_schema::namespace_infomap (), + const std::basic_string<C>& encoding = "UTF-8", + xml_schema::flags = 0); + + +// Serialize to XMLFormatTarget. +// +void +name (xercesc::XMLFormatTarget&, + const type&, + const xml_schema::namespace_infomap& = + xml_schema::namespace_infomap (), + const std::basic_string<C>& encoding = "UTF-8", + xml_schema::flags = 0); + +void +name (xercesc::XMLFormatTarget&, + const type&, + xml_schema::error_handler&, + const xml_schema::namespace_infomap& = + xml_schema::namespace_infomap (), + const std::basic_string<C>& encoding = "UTF-8", + xml_schema::flags = 0); + +void +name (xercesc::XMLFormatTarget&, + const type&, + xercesc::DOMErrorHandler&, + const xml_schema::namespace_infomap& = + xml_schema::namespace_infomap (), + const std::basic_string<C>& encoding = "UTF-8", + xml_schema::flags = 0); + + +// Serialize to DOM. +// +xml_schema::dom::auto_ptr<xercesc::DOMDocument> +name (const type&, + const xml_schema::namespace_infomap& + xml_schema::namespace_infomap (), + xml_schema::flags = 0); + +void +name (xercesc::DOMDocument&, + const type&, + xml_schema::flags = 0); + </pre> + + <p>You can choose between writing XML to <code>std::ostream</code> or + <code>xercesc::XMLFormatTarget</code> and creating a DOM instance + in the form of <code>xercesc::DOMDocument</code>. Serialization + to <code>ostream</code> or <code>XMLFormatTarget</code> requires a + considerably less work while serialization to DOM provides + for greater flexibility. Each of these serialization functions + is discussed in more detail in the following sections. + </p> + + + <h2><a name="4.1">4.1 Initializing the Xerces-C++ Runtime</a></h2> + + <p>Some serialization functions expect you to initialize the Xerces-C++ + runtime while others initialize and terminate it as part of their + work. The general rule is as follows: if a function has any arguments + or return a value that is an instance of a Xerces-C++ type, then + this function expects you to initialize the Xerces-C++ runtime. + Otherwise, the function initializes and terminates the runtime for + you. Note that it is legal to have nested calls to the Xerces-C++ + initialize and terminate functions as long as the calls are balanced. + </p> + + <p>You can instruct serialization functions that initialize and terminate + the runtime not to do so by passing the + <code>xml_schema::flags::dont_initialize</code> flag (see + <a href="#4.3">Section 4.3, "Flags"</a>). + </p> + + <h2><a name="4.2">4.2 Namespace Infomap and Character Encoding</a></h2> + + <p>When a document being serialized uses XML namespaces, custom + prefix-namespace associations can to be established. If custom + prefix-namespace mapping is not provided then generic prefixes + (<code>p1</code>, <code>p2</code>, etc) are automatically assigned + to namespaces as needed. Also, if + you would like the resulting instance document to contain the + <code>schemaLocation</code> or <code>noNamespaceSchemaLocation</code> + attributes, you will need to provide namespace-schema associations. + The <code>xml_schema::namespace_infomap</code> class is used + to capture this information:</p> + + <pre class="c++"> +struct namespace_info +{ + namespace_info (); + namespace_info (const std::basic_string<C>& name, + const std::basic_string<C>& schema); + + std::basic_string<C> name; + std::basic_string<C> schema; +}; + +// Map of namespace prefix to namespace_info. +// +struct namespace_infomap: public std::map<std::basic_string<C>, + namespace_info> +{ +}; + </pre> + + <p>Consider the following associations as an example:</p> + + <pre class="c++"> +xml_schema::namespace_infomap map; + +map["t"].name = "http://www.codesynthesis.com/test"; +map["t"].schema = "test.xsd"; + </pre> + + <p>This map, if passed to one of the serialization functions, + could result in the following XML fragment:</p> + + <pre class="xml"> +<?xml version="1.0" ?> +<t:name xmlns:t="http://www.codesynthesis.com/test" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.codesynthesis.com/test test.xsd"> + </pre> + + <p>As you can see, the serialization function automatically added namespace + mapping for the <code>xsi</code> prefix. You can change this by + providing your own prefix:</p> + + <pre class="c++"> +xml_schema::namespace_infomap map; + +map["xsn"].name = "http://www.w3.org/2001/XMLSchema-instance"; + +map["t"].name = "http://www.codesynthesis.com/test"; +map["t"].schema = "test.xsd"; + </pre> + + <p>This could result in the following XML fragment:</p> + + <pre class="xml"> +<?xml version="1.0" ?> +<t:name xmlns:t="http://www.codesynthesis.com/test" + xmlns:xsn="http://www.w3.org/2001/XMLSchema-instance" + xsn:schemaLocation="http://www.codesynthesis.com/test test.xsd"> + </pre> + + <p>To specify the location of a schema without a namespace you can use + an empty prefix as in the example below: </p> + + <pre class="c++"> +xml_schema::namespace_infomap map; + +map[""].schema = "test.xsd"; + </pre> + + <p>This would result in the following XML fragment:</p> + + <pre class="xml"> +<?xml version="1.0" ?> +<name xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="test.xsd"> + </pre> + + <p>To make a particular namespace default you can use an empty + prefix, for example:</p> + + <pre class="c++"> +xml_schema::namespace_infomap map; + +map[""].name = "http://www.codesynthesis.com/test"; +map[""].schema = "test.xsd"; + </pre> + + <p>This could result in the following XML fragment:</p> + + <pre class="xml"> +<?xml version="1.0" ?> +<name xmlns="http://www.codesynthesis.com/test" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.codesynthesis.com/test test.xsd"> + </pre> + + + <p>Another bit of information that you can pass to the serialization + functions is the character encoding method that you would like to use. + Common values for this argument are <code>"US-ASCII"</code>, + <code>"ISO8859-1"</code>, <code>"UTF-8"</code>, + <code>"UTF-16BE"</code>, <code>"UTF-16LE"</code>, + <code>"UCS-4BE"</code>, and <code>"UCS-4LE"</code>. The default + encoding is <code>"UTF-8"</code>. For more information on + encoding methods see the + "<a href="http://en.wikipedia.org/wiki/Character_code">Character + Encoding</a>" article from Wikipedia. + </p> + + <h2><a name="4.3">4.3 Flags</a></h2> + + <p>Serialization flags are the last argument of every serialization + function. They allow you to fine-tune the process of serialization. + The flags argument is optional. + </p> + + + <p>The following flags are recognized by the serialization + functions:</p> + + <dl> + <dt><code>xml_schema::flags::dont_initialize</code></dt> + <dd>Do not initialize the Xerces-C++ runtime.</dd> + + <dt><code>xml_schema::flags::dont_pretty_print</code></dt> + <dd>Do not add extra spaces or new lines that make the resulting XML + slightly bigger but easier to read.</dd> + + <dt><code>xml_schema::flags::no_xml_declaration</code></dt> + <dd>Do not write XML declaration (<?xml ... ?>).</dd> + </dl> + + <p>You can pass several flags by combining them using the bit-wise OR + operator. For example:</p> + + <pre class="c++"> +std::auto_ptr<type> r = ... +std::ofstream ofs ("test.xml"); +xml_schema::namespace_infomap map; +name (ofs, + *r, + map, + "UTF-8", + xml_schema::flags::no_xml_declaration | + xml_schema::flags::dont_pretty_print); + </pre> + + <p>For more information on the Xerces-C++ runtime initialization + refer to <a href="#4.1">Section 4.1, "Initializing the Xerces-C++ + Runtime"</a>. + </p> + + <h2><a name="4.4">4.4 Error Handling</a></h2> + + <p>As with the parsing functions (see <a href="#3.3">Section 3.3, + "Error Handling"</a>), to better understand error handling and + reporting strategies employed by the serialization functions, it + is useful to know that the transformation of a statically-typed + tree to an XML instance document happens in two stages. The first + stage, performed by the generated code, consist of building a DOM + instance from the statically-typed tree . For short, we will call + this stage the Tree-DOM stage. The second stage, performed by + Xerces-C++, consists of serializing the DOM instance into the XML + document. We will call this stage the DOM-XML stage. + </p> + + <p>All serialization functions except the two that serialize into + a DOM instance come in overloaded triples. The first function + in such a triple reports error conditions exclusively by throwing + exceptions. It accumulates all the serialization errors of the + DOM-XML stage and throws them in a single instance of the + <code>xml_schema::serialization</code> exception (described below). + The second and the third functions in the triple use callback + interfaces to report serialization errors and warnings. The two + callback interfaces are <code>xml_schema::error_handler</code> and + <code>xercesc::DOMErrorHandler</code>. The + <code>xml_schema::error_handler</code> interface is described in + <a href="#3.3">Section 3.3, "Error Handling"</a>. For more information + on the <code>xercesc::DOMErrorHandler</code> interface refer to the + Xerces-C++ documentation. + </p> + + <p>The Tree-DOM stage reports error conditions exclusively by throwing + exceptions. Individual exceptions thrown by the serialization functions + are described in the following sub-sections. + </p> + + <h3><a name="4.4.1">4.4.1 <code>xml_schema::serialization</code></a></h3> + + <pre class="c++"> +struct serialization: virtual exception +{ + serialization (); + serialization (const diagnostics&); + + const diagnostics& + diagnostics () const; + + virtual const char* + what () const throw (); +}; + </pre> + + <p>The <code>xml_schema::diagnostics</code> class is described in + <a href="#3.3.1">Section 3.3.1, "<code>xml_schema::parsing</code>"</a>. + The <code>xml_schema::serialization</code> exception is thrown if + there were serialization errors reported during the DOM-XML stage. + If no callback interface was provided to the serialization function, + the exception contains a list of errors and warnings accessible using + the <code>diagnostics</code> function. + </p> + + + <h3><a name="4.4.2">4.4.2 <code>xml_schema::unexpected_element</code></a></h3> + + <p>The <code>xml_schema::unexpected_element</code> exception is + described in <a href="#3.3.3">Section 3.3.3, + "<code>xml_schema::unexpected_element</code>"</a>. It is thrown + by the serialization functions during the Tree-DOM stage if the + root element name of the provided DOM instance does not match with + the name of the element this serialization function is for. + </p> + + <h3><a name="4.4.3">4.4.3 <code>xml_schema::no_type_info</code></a></h3> + + <p>The <code>xml_schema::no_type_info</code> exception is + described in <a href="#3.3.7">Section 3.3.7, + "<code>xml_schema::no_type_info</code>"</a>. It is thrown + by the serialization functions during the Tree-DOM stage when there + is no type information associated with a dynamic type of an + element. Usually, catching this exception means that you haven't + linked the code generated from the schema defining the type in + question with your application or this schema has been compiled + without the <code>--generate-polymorphic</code> option. + </p> + + <h2><a name="4.5">4.5 Serializing to <code>std::ostream</code></a></h2> + + <p>In order to serialize to <code>std::ostream</code> you will need + an object model, an output stream and, optionally, a namespace + infomap. For instance:</p> + + <pre class="c++"> +// Obtain the object model. +// +std::auto_ptr<type> r = ... + +// Prepare namespace mapping and schema location information. +// +xml_schema::namespace_infomap map; + +map["t"].name = "http://www.codesynthesis.com/test"; +map["t"].schema = "test.xsd"; + +// Write it out. +// +name (std::cout, *r, map); + </pre> + + <p>Note that the output stream is treated as a binary stream. This + becomes important when you use a character encoding that is wider + than 8-bit <code>char</code>, for instance UTF-16 or UCS-4. For + example, things will most likely break if you try to serialize + to <code>std::ostringstream</code> with UTF-16 or UCS-4 as an + encoding. This is due to the special value, + <code>'\0'</code>, that will most likely occur as part of such + serialization and it won't have the special meaning assumed by + <code>std::ostringstream</code>. + </p> + + + <h2><a name="4.6">4.6 Serializing to <code>xercesc::XMLFormatTarget</code></a></h2> + + <p>Serializing to an <code>xercesc::XMLFormatTarget</code> instance + is similar the <code>std::ostream</code> case. For instance: + </p> + + <pre class="c++"> +using std::auto_ptr; + +// Obtain the object model. +// +auto_ptr<type> r = ... + +// Prepare namespace mapping and schema location information. +// +xml_schema::namespace_infomap map; + +map["t"].name = "http://www.codesynthesis.com/test"; +map["t"].schema = "test.xsd"; + +using namespace xercesc; + +XMLPlatformUtils::Initialize (); + +{ + // Choose a target. + // + auto_ptr<XMLFormatTarget> ft; + + if (argc != 2) + { + ft = auto_ptr<XMLFormatTarget> (new StdOutFormatTarget ()); + } + else + { + ft = auto_ptr<XMLFormatTarget> ( + new LocalFileFormatTarget (argv[1])); + } + + // Write it out. + // + name (*ft, *r, map); +} + +XMLPlatformUtils::Terminate (); + </pre> + + <p>Note that we had to initialize the Xerces-C++ runtime before we + could call this serialization function.</p> + + <h2><a name="4.7">4.7 Serializing to DOM</a></h2> + + <p>The mapping provides two overloaded functions that implement + serialization to a DOM instance. The first creates a DOM instance + for you and the second serializes to an existing DOM instance. + While serializing to a new DOM instance is similar to serializing + to <code>std::ostream</code> or <code>xercesc::XMLFormatTarget</code>, + serializing to an existing DOM instance requires quite a bit of work + from your side. You will need to set all the custom namespace mapping + attributes as well as the <code>schemaLocation</code> and/or + <code>noNamespaceSchemaLocation</code> attributes. The following + listing should give you an idea about what needs to be done: + </p> + + <pre class="c++"> +// Obtain the object model. +// +std::auto_ptr<type> r = ... + +using namespace xercesc; + +XMLPlatformUtils::Initialize (); + +{ + // Create a DOM instance. Set custom namespace mapping and schema + // location attributes. + // + DOMDocument& doc = ... + + // Serialize to DOM. + // + name (doc, *r); + + // Serialize the DOM document to XML. + // + ... +} + +XMLPlatformUtils::Terminate (); + </pre> + + <p>For more information on how to create and serialize a DOM instance + refer to the Xerces-C++ documentation. In addition, the + <a href="http://wiki.codesynthesis.com/Tree/FAQ">C++/Tree Mapping + FAQ</a> shows how to implement these operations using the XSD + runtime utilities. + </p> + + <h1><a name="5">5 Additional Functionality</a></h1> + + <p>The C++/Tree mapping provides a number of optional features + that can be useful in certain situations. They are described + in the following sections.</p> + + <h2><a name="5.1">5.1 DOM Association</a></h2> + + <p>Normally, after parsing is complete, the DOM document which + was used to extract the data is discarded. However, the parsing + functions can be instructed to preserve the DOM document + and create an association between the DOM nodes and object model + nodes. When there is an association between the DOM and + object model nodes, you can obtain the corresponding DOM element + or attribute node from an object model node as well as perform + the reverse transition: obtain the corresponding object model + from a DOM element or attribute node.</p> + + <p>Maintaining DOM association is normally useful when the application + needs access to XML constructs that are not preserved in the + object model, for example, text in the mixed content model. + Another useful aspect of DOM association is the ability of the + application to navigate the document tree using the generic DOM + interface (for example, with the help of an XPath processor) + and then move back to the statically-typed object model. Note + also that while you can change the underlying DOM document, + these changes are not reflected in the object model and will + be ignored during serialization. If you need to not only access + but also modify some aspects of XML that are not preserved in + the object model, then type customization with custom parsing + constructs and serialization operators should be used instead.</p> + + <p>To request DOM association you will need to pass the + <code>xml_schema::flags::keep_dom</code> flag to one of the + parsing functions (see <a href="#3.2">Section 3.2, + "Flags and Properties"</a> for more information). In this case the + DOM document is retained and will be released when the object model + is deleted. Note that since DOM nodes "out-live" the parsing function + call, you need to initialize the Xerces-C++ runtime before calling + one of the parsing functions with the <code>keep_dom</code> flag and + terminate it after the object model is destroyed (see + <a href="#3.1">Section 3.1, "Initializing the Xerces-C++ Runtime"</a>). + The DOM association is also maintained in complete copies of the + object model (that is, the DOM document is cloned and associations + are reestablished).</p> + + <p>To obtain the corresponding DOM node from an object model node + you will need to call the <code>_node</code> accessor function + which returns a pointer to <code>DOMNode</code>. You can then query + this DOM node's type and cast it to either <code>DOMAttr*</code> + or <code>DOMElement*</code>. To obtain the corresponding object + model node from a DOM node, the DOM user data API is used. The + <code>xml_schema::dom::tree_node_key</code> variable contains + the key for object model nodes. The following schema and code + fragment show how to navigate from DOM to object model nodes + and in the opposite direction:</p> + + <pre class="xml"> +<complexType name="object"> + <sequence> + <element name="a" type="string"/> + </sequence> +</complexType> + +<element name="root" type="object"/> + </pre> + + <pre class="c++"> +using namespace xercesc; + +XMLPlatformUtils::Initialize (); + +{ + // Parse XML to object model. + // + std::auto_ptr<type> r = root ( + "root.xml", + xml_schema::flags::keep_dom | + xml_schema::flags::dont_initialize); + + DOMNode* n = root->_node (); + assert (n->getNodeType () != DOMNode::ELEMENT_NODE); + DOMElement* re = static_cast<DOMElement*> (n); + + // Get the 'a' element. Note that it is not necessarily the + // first child node of 'root' since there could be whitespace + // nodes before it. + // + DOMElement* ae; + + for (n = re->getFirstChild (); n != 0; n = n->getNextSibling ()) + { + if (n->getNodeType () == DOMNode::ELEMENT_NODE) + { + ae = static_cast<DOMElement*> (n); + break; + } + } + + // Get from the 'a' DOM element to xml_schema::string object model + // node. + // + xml_schema::type& t ( + *reinterpret_cast<xml_schema::type*> ( + ae->getUserData (xml_schema::dom::tree_node_key))); + + xml_schema::string& a (dynamic_cast<xml_schema::string&> (t)); +} + +XMLPlatformUtils::Terminate (); + </pre> + + <p>The 'mixed' example which can be found in the XSD distribution + shows how to handle the mixed content using DOM association.</p> + + <h2><a name="5.2">5.2 Binary Serialization</a></h2> + + <p>Besides reading from and writing to XML, the C++/Tree mapping + also allows you to save the object model to and load it from a + number of predefined as well as custom data representation + formats. The predefined binary formats are CDR (Common Data + Representation) and XDR (eXternal Data Representation). A + custom format can easily be supported by providing + insertion and extraction operators for basic types.</p> + + <p>Binary serialization saves only the data without any meta + information or markup. As a result, saving to and loading + from a binary representation can be an order of magnitude + faster than parsing and serializing the same data in XML. + Furthermore, the resulting representation is normally several + times smaller than the equivalent XML representation. These + properties make binary serialization ideal for internal data + exchange and storage. A typical application that uses this + facility stores the data and communicates within the + system using a binary format and reads/writes the data + in XML when communicating with the outside world.</p> + + <p>In order to request the generation of insertion operators and + extraction constructors for a specific predefined or custom + data representation stream, you will need to use the + <code>--generate-insertion</code> and <code>--generate-extraction</code> + compiler options. See the + <a href="http://www.codesynthesis.com/projects/xsd/documentation/xsd.xhtml">XSD + Compiler Command Line Manual</a> for more information.</p> + + <p>Once the insertion operators and extraction constructors are + generated, you can use the <code>xml_schema::istream</code> + and <code>xml_schema::ostream</code> wrapper stream templates + to save the object model to and load it from a specific format. + The following code fragment shows how to do this using ACE + (Adaptive Communication Environment) CDR streams as an example:</p> + + <pre class="xml"> +<complexType name="object"> + <sequence> + <element name="a" type="string"/> + <element name="b" type="int"/> + </sequence> +</complexType> + +<element name="root" type="object"/> + </pre> + + <pre class="c++"> +// Parse XML to object model. +// +std::auto_ptr<type> r = root ("root.xml"); + +// Save to a CDR stream. +// +ACE_OutputCDR ace_ocdr; +xml_schema::ostream<ACE_OutputCDR> ocdr (ace_ocdr); + +ocdr << *r; + +// Load from a CDR stream. +// +ACE_InputCDR ace_icdr (buf, size); +xml_schema::istream<ACE_InputCDR> icdr (ace_icdr); + +std::auto_ptr<object> copy (new object (icdr)); + +// Serialize to XML. +// +root (std::cout, *copy); + </pre> + + <p>The XSD distribution contains a number of examples that + show how to save the object model to and load it from + CDR, XDR, and a custom format.</p> + + <!-- Appendix A --> + + + <h1><a name="A">Appendix A — Default and Fixed Values</a></h1> + + <p>The following table summarizes the effect of default and fixed + values (specified with the <code>default</code> and <code>fixed</code> + attributes, respectively) on attribute and element values. The + <code>default</code> and <code>fixed</code> attributes are mutually + exclusive. It is also worthwhile to note that the fixed value semantics + is a superset of the default value semantics. + </p> + + <!-- border="1" is necessary for html2ps --> + <table id="default-fixed" border="1"> + <tr> + <th></th> + <th></th> + <th colspan="2">default</th> + <th colspan="2">fixed</th> + </tr> + + <!-- element --> + + <tr> + <th rowspan="4">element</th> + <th rowspan="2">not present</th> + <th>optional</th> + <th>required</th> + <th>optional</th> + <th>required</th> + </tr> + <tr> + <td>not present</td> + <td>invalid instance</td> + <td>not present</td> + <td>invalid instance</td> + </tr> + + + <tr> + <th>empty</th> + <td colspan="2">default value is used</td> + <td colspan="2">fixed value is used</td> + </tr> + + <tr> + <th>value</th> + <td colspan="2">value is used</td> + <td colspan="2">value is used provided it's the same as fixed</td> + </tr> + + <!-- attribute --> + + <!-- element --> + + <tr> + <th rowspan="4">attribute</th> + <th rowspan="2">not present</th> + <th>optional</th> + <th>required</th> + <th>optional</th> + <th>required</th> + </tr> + <tr> + <td>default value is used</td> + <td>invalid schema</td> + <td>fixed value is used</td> + <td>invalid instance</td> + </tr> + + + <tr> + <th>empty</th> + <td colspan="2">empty value is used</td> + <td colspan="2">empty value is used provided it's the same as fixed</td> + </tr> + + <tr> + <th>value</th> + <td colspan="2">value is used</td> + <td colspan="2">value is used provided it's the same as fixed</td> + </tr> + + </table> + + </div> +</div> + + +</body> +</html> diff --git a/xsd/documentation/cxx/tree/manual/makefile b/xsd/documentation/cxx/tree/manual/makefile new file mode 100644 index 0000000..398c002 --- /dev/null +++ b/xsd/documentation/cxx/tree/manual/makefile @@ -0,0 +1,53 @@ +# file : documentation/cxx/tree/manual/makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../../build/bootstrap.make + +default := $(out_base)/ +install := $(out_base)/.install +dist := $(out_base)/.dist +dist-win := $(out_base)/.dist-win +cleandoc := $(out_base)/.cleandoc + +# Build. +# +$(default): $(out_base)/cxx-tree-manual.ps $(out_base)/cxx-tree-manual.pdf + + +$(out_base)/cxx-tree-manual.ps: $(src_base)/index.xhtml \ + $(src_base)/manual.html2ps \ + | $(out_base)/. + $(call message,html2ps $<,html2ps -f $(src_base)/manual.html2ps -o $@ $<) + +$(out_base)/cxx-tree-manual.pdf: $(out_base)/cxx-tree-manual.ps | $(out_base)/. + $(call message,ps2pdf $<,ps2pdf14 $< $@) + +# Install & Dist. +# +$(install): path := $(subst $(src_root)/documentation/,,$(src_base)) +$(dist): path := $(subst $(src_root)/,,$(src_base)) + +$(install): $(out_base)/cxx-tree-manual.ps $(out_base)/cxx-tree-manual.pdf + $(call install-data,$(src_base)/index.xhtml,$(install_doc_dir)/xsd/$(path)/index.xhtml) + $(call install-data,$(out_base)/cxx-tree-manual.ps,$(install_doc_dir)/xsd/$(path)/cxx-tree-manual.ps) + $(call install-data,$(out_base)/cxx-tree-manual.pdf,$(install_doc_dir)/xsd/$(path)/cxx-tree-manual.pdf) + +$(dist): $(out_base)/cxx-tree-manual.ps $(out_base)/cxx-tree-manual.pdf + $(call install-data,$(src_base)/index.xhtml,$(dist_prefix)/$(path)/index.xhtml) + $(call install-data,$(out_base)/cxx-tree-manual.ps,$(dist_prefix)/$(path)/cxx-tree-manual.ps) + $(call install-data,$(out_base)/cxx-tree-manual.pdf,$(dist_prefix)/$(path)/cxx-tree-manual.pdf) + +$(dist-win): $(dist) + + +# Clean +# +$(cleandoc): + $(call message,rm $$1,rm -f $$1,$(out_base)/cxx-tree-manual.ps) + $(call message,rm $$1,rm -f $$1,$(out_base)/cxx-tree-manual.pdf) + +# How to. +# +$(call include,$(bld_root)/install.make) diff --git a/xsd/documentation/cxx/tree/manual/manual.html2ps b/xsd/documentation/cxx/tree/manual/manual.html2ps new file mode 100644 index 0000000..ac010b5 --- /dev/null +++ b/xsd/documentation/cxx/tree/manual/manual.html2ps @@ -0,0 +1,66 @@ +@html2ps { + option { + toc: hb; + colour: 1; + hyphenate: 1; + titlepage: 1; + } + + datefmt: "%B %Y"; + + titlepage { + content: " +<div align=center> + <h1><big>C++/Tree Mapping User Manual</big></h1> + <h1> </h1> + <h1> </h1> + <h1> </h1> + <h1> </h1> + <h1> </h1> + <h1> </h1> + <h1> </h1> +</div> + <p>Revision $[revision] $D</p> + <p>Copyright © 2005-2010 CODE SYNTHESIS TOOLS CC</p> + + <p>Permission is granted to copy, distribute and/or modify this + document under the terms of the + <a href='http://www.codesynthesis.com/licenses/fdl-1.2.txt'>GNU Free + Documentation License, version 1.2</a>; with no Invariant Sections, + no Front-Cover Texts and no Back-Cover Texts. + </p> + + <p>This document is available in the following formats: + <a href='http://www.codesynthesis.com/projects/xsd/documentation/cxx/tree/manual/index.xhtml'>XHTML</a>, + <a href='http://www.codesynthesis.com/projects/xsd/documentation/cxx/tree/manual/cxx-tree-manual.pdf'>PDF</a>, and + <a href='http://www.codesynthesis.com/projects/xsd/documentation/cxx/tree/manual/cxx-tree-manual.ps'>PostScript</a>.</p>"; + } + + toc { + indent: 2em; + } + + header { + odd-right: $H; + even-left: $H; + } + + footer { + odd-left: $D; + odd-center: $T, v$[revision]; + odd-right: $N; + + even-left: $N; + even-center: $T, v$[revision]; + even-right: $D; + } +} + +body { + font-size: 12pt; + text-align: justify; +} + +pre { + font-size: 10pt; +} diff --git a/xsd/documentation/cxx/tree/reference/footer.html b/xsd/documentation/cxx/tree/reference/footer.html new file mode 100644 index 0000000..3e5cc1e --- /dev/null +++ b/xsd/documentation/cxx/tree/reference/footer.html @@ -0,0 +1,6 @@ +<hr size="1"> +<div style="text-align: center; font-size: 80%;"> + Copyright © 2005-2010 CODE SYNTHESIS TOOLS CC +</div> +</body> +</html> diff --git a/xsd/documentation/cxx/tree/reference/libxsd.doxygen b/xsd/documentation/cxx/tree/reference/libxsd.doxygen new file mode 100644 index 0000000..3f524d1 --- /dev/null +++ b/xsd/documentation/cxx/tree/reference/libxsd.doxygen @@ -0,0 +1,1316 @@ +# Doxyfile 1.5.4 + +# This file describes the settings to be used by the documentation system +# doxygen (www.doxygen.org) for a project +# +# All text after a hash (#) is considered a comment and will be ignored +# The format is: +# TAG = value [value, ...] +# For lists items can also be appended using: +# TAG += value [value, ...] +# Values that contain spaces should be placed between quotes (" ") + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- + +# This tag specifies the encoding used for all characters in the config file that +# follow. The default is UTF-8 which is also the encoding used for all text before +# the first occurrence of this tag. Doxygen uses libiconv (or the iconv built into +# libc) for the transcoding. See http://www.gnu.org/software/libiconv for the list of +# possible encodings. + +DOXYFILE_ENCODING = UTF-8 + +# The PROJECT_NAME tag is a single word (or a sequence of words surrounded +# by quotes) that should identify the project. + +PROJECT_NAME = "C++/Tree Mapping Runtime Library" + +# The PROJECT_NUMBER tag can be used to enter a project or revision number. +# This could be handy for archiving the generated documentation or +# if some version control system is used. + +PROJECT_NUMBER = + +# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) +# base path where the generated documentation will be put. +# If a relative path is entered, it will be relative to the location +# where doxygen was started. If left blank the current directory will be used. + +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: +# 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 + +# 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 regular Qt-style comments +# (thus requiring an explicit @brief command for a brief description.) + +JAVADOC_AUTOBRIEF = NO + +# If the QT_AUTOBRIEF tag is set to YES then Doxygen will +# interpret the first line (until the first dot) of a Qt-style +# comment as the brief description. If set to NO, the comments +# will behave just like regular Qt-style comments (thus requiring +# an explicit \brief command for a brief description.) + +QT_AUTOBRIEF = NO + +# 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 = NO + +# 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 = YES + +# If you use Microsoft's C++/CLI language, you should set this option to YES to +# enable parsing support. + +CPP_CLI_SUPPORT = NO + +# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. +# Doxygen will parse them like normal C++ but will assume all classes use public +# instead of private inheritance when no explicit protection keyword is present. + +SIP_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 + +# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct (or union) is +# documented as struct with the name of the typedef. So +# typedef struct TypeS {} TypeT, will appear in the documentation as a struct +# with name TypeT. When disabled the typedef will appear as a member of a file, +# namespace, or class. And the struct will be named TypeS. This can typically +# be useful for C code where the coding convention is that all structs are +# typedef'ed and only the typedef is referenced never the struct's name. + +TYPEDEF_HIDES_STRUCT = NO + +#--------------------------------------------------------------------------- +# 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 +# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES + +EXTRACT_ALL = NO + +# If the EXTRACT_PRIVATE tag is set to YES all private members of a class +# will be included in the documentation. + +EXTRACT_PRIVATE = NO + +# If the EXTRACT_STATIC tag is set to YES all static members of a file +# will be included in the documentation. + +EXTRACT_STATIC = NO + +# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) +# defined locally in source files will be included in the documentation. +# If set to NO only classes defined in header files are included. + +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 this flag is set to YES, the members of anonymous namespaces will be extracted +# and appear in the documentation as a namespace called 'anonymous_namespace{file}', +# where file will be replaced with the base name of the file that contains the anonymous +# namespace. By default anonymous namespace are hidden. + +EXTRACT_ANON_NSPACES = 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 +# various overviews, but no documentation section is generated. +# This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_MEMBERS = NO + +# 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 classes will be included in the various +# overviews. This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_CLASSES = NO + +# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all +# friend (class|struct|union) declarations. +# If set to NO (the default) these declarations will be included in the +# documentation. + +HIDE_FRIEND_COMPOUNDS = NO + +# 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. + +HIDE_IN_BODY_DOCS = NO + +# 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. +# Set it to YES to include the internal documentation. + +INTERNAL_DOCS = NO + +# 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 +# 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 +# and Mac users are advised to set this option to NO. + +CASE_SENSE_NAMES = YES + +# 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 = YES + +# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen +# will put a list of the files that are included by a file in the documentation +# of that file. + +SHOW_INCLUDE_FILES = NO + +# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] +# is inserted in the documentation for inline members. + +INLINE_INFO = YES + +# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen +# will sort the (detailed) documentation of file and class members +# alphabetically by member name. If set to NO the members will appear in +# declaration order. + +SORT_MEMBER_DOCS = NO + +# 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. + +SORT_BRIEF_DOCS = NO + +# 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. + +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 +# commands in the documentation. + +GENERATE_TODOLIST = YES + +# The GENERATE_TESTLIST tag can be used to enable (YES) or +# disable (NO) the test list. This list is created by putting \test +# commands in the documentation. + +GENERATE_TESTLIST = YES + +# The GENERATE_BUGLIST tag can be used to enable (YES) or +# disable (NO) the bug list. This list is created by putting \bug +# commands in the documentation. + +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. + +GENERATE_DEPRECATEDLIST= YES + +# 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 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 +# documentation can be controlled using \showinitializer or \hideinitializer +# command in the documentation regardless of this setting. + +MAX_INITIALIZER_LINES = 30 + +# 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 +#--------------------------------------------------------------------------- + +# The QUIET tag can be used to turn on/off the messages that are generated +# by doxygen. Possible values are YES and NO. If left blank NO is used. + +QUIET = NO + +# The WARNINGS tag can be used to turn on/off the warning messages that are +# generated by doxygen. Possible values are YES and NO. If left blank +# NO is used. + +WARNINGS = YES + +# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings +# for undocumented members. If EXTRACT_ALL is set to YES then this flag will +# automatically be disabled. + +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 = NO + +# 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. 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" + +# The WARN_LOGFILE tag can be used to specify a file to which warning +# and error messages should be written. If left blank the output is written +# to stderr. + +WARN_LOGFILE = + +#--------------------------------------------------------------------------- +# configuration options related to the input files +#--------------------------------------------------------------------------- + +# The INPUT tag can be used to specify the files and/or directories that contain +# documented source files. You may enter file names like "myfile.cpp" or +# directories like "/usr/src/myproject". Separate the files or directories +# with spaces. + +INPUT = \ +../../../../libxsd/xsd/cxx/tree/buffer.hxx \ +../../../../libxsd/xsd/cxx/tree/types.hxx \ +../../../../libxsd/xsd/cxx/tree/date-time.hxx \ +../../../../libxsd/xsd/cxx/tree/elements.hxx \ +../../../../libxsd/xsd/cxx/tree/element-map.hxx \ +../../../../libxsd/xsd/cxx/tree/exceptions.hxx + +# This tag can be used to specify the character encoding of the source files that +# doxygen parses. Internally doxygen uses the UTF-8 encoding, which is also the default +# input encoding. Doxygen uses libiconv (or the iconv built into libc) for the transcoding. +# See http://www.gnu.org/software/libiconv for the list of possible encodings. + +INPUT_ENCODING = UTF-8 + +# If the value of the INPUT tag contains directories, you can use the +# 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 *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90 + +FILE_PATTERNS = + +# The RECURSIVE tag can be used to turn specify whether or not subdirectories +# should be searched for input files as well. Possible values are YES and NO. +# If left blank NO is used. + +RECURSIVE = NO + +# The EXCLUDE tag can be used to specify files and/or directories that should +# 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 = + +# 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. 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 = + +# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names +# (namespaces, classes, functions, etc.) that should be excluded from the output. +# The symbol name can be a fully qualified name, a word, or if the wildcard * is used, +# a substring. Examples: ANamespace, AClass, AClass::ANamespace, ANamespace::*Test + +EXCLUDE_SYMBOLS = + +# The EXAMPLE_PATH tag can be used to specify one or more files or +# directories that contain example code fragments that are included (see +# the \include command). + +EXAMPLE_PATH = + +# If the value of the EXAMPLE_PATH tag contains directories, you can use the +# EXAMPLE_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 all files are included. + +EXAMPLE_PATTERNS = + +# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be +# searched for input files to be used with the \include or \dontinclude +# commands irrespective of the value of the RECURSIVE tag. +# Possible values are YES and NO. If left blank NO is used. + +EXAMPLE_RECURSIVE = NO + +# The IMAGE_PATH tag can be used to specify one or more files or +# directories that contain image that are included in the documentation (see +# the \image command). + +IMAGE_PATH = + +# The INPUT_FILTER tag can be used to specify a program that doxygen should +# invoke to filter for each input file. Doxygen will invoke the filter program +# 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. 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). + +FILTER_SOURCE_FILES = NO + +#--------------------------------------------------------------------------- +# configuration options related to source browsing +#--------------------------------------------------------------------------- + +# 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. +# Note: To get rid of all source code in the generated output, make sure also +# VERBATIM_HEADERS is set to NO. If you have enabled CALL_GRAPH or CALLER_GRAPH +# then you must also enable this option. If you don't then doxygen will produce +# a warning and turn it on anyway + +SOURCE_BROWSER = NO + +# Setting the INLINE_SOURCES tag to YES will include the body +# of functions and classes directly in the documentation. + +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. + +REFERENCED_BY_RELATION = YES + +# If the REFERENCES_RELATION tag is set to YES (the default) +# then for each documented function all documented entities +# called/used by that function will be listed. + +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 +#--------------------------------------------------------------------------- + +# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index +# of all compounds will be generated. Enable this if the project +# contains a lot of classes, structs, unions or interfaces. + +ALPHABETICAL_INDEX = NO + +# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then +# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns +# in which this list will be split (can be a number in the range [1..20]) + +COLS_IN_ALPHA_INDEX = 5 + +# In case all classes in a project start with a common prefix, all +# classes will be put under the same header in the alphabetical index. +# The IGNORE_PREFIX tag can be used to specify one or more prefixes that +# should be ignored while generating the index headers. + +IGNORE_PREFIX = + +#--------------------------------------------------------------------------- +# configuration options related to the HTML output +#--------------------------------------------------------------------------- + +# If the GENERATE_HTML tag is set to YES (the default) Doxygen will +# generate HTML output. + +GENERATE_HTML = YES + +# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `html' will be used as the default path. + +HTML_OUTPUT = html + +# The HTML_FILE_EXTENSION tag can be used to specify the file extension for +# each generated HTML page (for example: .htm,.php,.asp). If it is left blank +# doxygen will generate files with .html extension. + +HTML_FILE_EXTENSION = .html + +# The HTML_HEADER tag can be used to specify a personal HTML header for +# each generated HTML page. If it is left blank doxygen will generate a +# standard header. + +HTML_HEADER = + +# 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 = footer.html + +# 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. 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 = + +# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, +# files or namespaces will be aligned in HTML using tables. If set to +# NO a bullet list will be used. + +HTML_ALIGN_MEMBERS = YES + +# If the GENERATE_HTMLHELP tag is set to YES, additional index files +# will be generated that can be used as input for tools like the +# Microsoft HTML help workshop to generate a compressed HTML help file (.chm) +# of the generated HTML documentation. + +GENERATE_HTMLHELP = NO + +# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML +# documentation will contain sections that can be hidden and shown after the +# page has loaded. For this to work a browser that supports +# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox +# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari). + +HTML_DYNAMIC_SECTIONS = NO + +# 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 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. + +HHC_LOCATION = + +# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag +# controls if a separate .chi index file is generated (YES) or that +# it should be included in the master .chm file (NO). + +GENERATE_CHI = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag +# controls whether a binary table of contents is generated (YES) or a +# normal table of contents (NO) in the .chm file. + +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. + +TOC_EXPAND = NO + +# The DISABLE_INDEX tag can be used to turn on/off the condensed index at +# top of each HTML page. The value NO (the default) enables the index and +# the value YES disables it. + +DISABLE_INDEX = NO + +# This tag can be used to set the number of enum values (range [1..20]) +# that doxygen will group on one line in the generated HTML documentation. + +ENUM_VALUES_PER_LINE = 4 + +# 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, 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 + +# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be +# used to set the initial width (in pixels) of the frame in which the tree +# is shown. + +TREEVIEW_WIDTH = 250 + +#--------------------------------------------------------------------------- +# configuration options related to the LaTeX output +#--------------------------------------------------------------------------- + +# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will +# generate Latex output. + +GENERATE_LATEX = NO + +# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `latex' will be used as the default path. + +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. + +LATEX_CMD_NAME = latex + +# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to +# generate index for LaTeX. If left blank `makeindex' will be used as the +# default command name. + +MAKEINDEX_CMD_NAME = makeindex + +# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact +# LaTeX documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_LATEX = NO + +# The PAPER_TYPE tag can be used to set the paper type that is used +# by the printer. Possible values are: a4, a4wide, letter, legal and +# executive. If left blank a4wide will be used. + +PAPER_TYPE = a4wide + +# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX +# packages that should be included in the LaTeX output. + +EXTRA_PACKAGES = + +# The LATEX_HEADER tag can be used to specify a personal LaTeX header for +# the generated latex document. The header should contain everything until +# the first chapter. If it is left blank doxygen will generate a +# standard header. Notice: only use this tag if you know what you are doing! + +LATEX_HEADER = + +# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated +# is prepared for conversion to pdf (using ps2pdf). The pdf file will +# contain links (just like the HTML output) instead of page references +# This makes the output suitable for online browsing using a pdf viewer. + +PDF_HYPERLINKS = NO + +# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of +# plain latex in the generated Makefile. Set this option to YES to get a +# higher quality PDF documentation. + +USE_PDFLATEX = NO + +# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. +# command to the generated LaTeX files. This will instruct LaTeX to keep +# running if errors occur, instead of asking the user for help. +# This option is also used when generating formulas in HTML. + +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 optimized for Word 97 and may not look very pretty with +# other RTF readers or editors. + +GENERATE_RTF = NO + +# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `rtf' will be used as the default path. + +RTF_OUTPUT = rtf + +# If the COMPACT_RTF tag is set to YES Doxygen generates more compact +# RTF documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_RTF = NO + +# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated +# will contain hyperlink fields. The RTF file will +# contain links (just like the HTML output) instead of page references. +# This makes the output suitable for online browsing using WORD or other +# programs which support those fields. +# Note: wordpad (write) and others do not support links. + +RTF_HYPERLINKS = NO + +# Load stylesheet definitions from file. Syntax is similar to doxygen's +# 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 = + +# Set optional variables used in the generation of an rtf document. +# Syntax is similar to doxygen's config file. + +RTF_EXTENSIONS_FILE = + +#--------------------------------------------------------------------------- +# configuration options related to the man page output +#--------------------------------------------------------------------------- + +# If the GENERATE_MAN tag is set to YES (the default) Doxygen will +# generate man pages + +GENERATE_MAN = NO + +# The MAN_OUTPUT tag is used to specify where the man 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 `man' will be used as the default path. + +MAN_OUTPUT = man + +# The MAN_EXTENSION tag determines the extension that is added to +# the generated man pages (default is the subroutine's section .3) + +MAN_EXTENSION = .3 + +# If the MAN_LINKS tag is set to YES and Doxygen generates man output, +# then it will generate one additional man file for each entity +# documented in the real man page(s). These additional files +# only source the real man page, but without them the man command +# would be unable to find the correct page. The default is NO. + +MAN_LINKS = NO + +#--------------------------------------------------------------------------- +# configuration options related to the XML output +#--------------------------------------------------------------------------- + +# 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. + +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. + +XML_SCHEMA = + +# The XML_DTD tag can be used to specify an XML DTD, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +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 +#--------------------------------------------------------------------------- + +# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will +# generate an AutoGen Definitions (see autogen.sf.net) file +# that captures the structure of the code including all +# documentation. Note that this feature is still experimental +# and incomplete at the moment. + +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 +#--------------------------------------------------------------------------- + +# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will +# evaluate all C-preprocessor directives found in the sources and include +# files. + +ENABLE_PREPROCESSING = YES + +# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro +# names in the source code. If set to NO (the default) only conditional +# compilation will be performed. Macro expansion can be done in a controlled +# way by setting EXPAND_ONLY_PREDEF to YES. + +MACRO_EXPANSION = NO + +# 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_DEFINED tags. + +EXPAND_ONLY_PREDEF = NO + +# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files +# in the INCLUDE_PATH (see below) will be search if a #include is found. + +SEARCH_INCLUDES = YES + +# The INCLUDE_PATH tag can be used to specify one or more directories that +# contain include files that are not input files but should be processed by +# the preprocessor. + +INCLUDE_PATH = + +# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard +# patterns (like *.h and *.hpp) to filter out the header-files in the +# directories. If left blank, the patterns specified with FILE_PATTERNS will +# be used. + +INCLUDE_FILE_PATTERNS = + +# The PREDEFINED tag can be used to specify one or more macro names that +# 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. To prevent a macro definition from being +# undefined via #undef or recursively expanded use the := operator +# instead of the = operator. + +PREDEFINED = + +# 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. + +EXPAND_AS_DEFINED = + +# 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. + +SKIP_FUNCTION_MACROS = YES + +#--------------------------------------------------------------------------- +# Configuration::additions related to external references +#--------------------------------------------------------------------------- + +# 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 = + +# When a file name is specified after GENERATE_TAGFILE, doxygen will create +# a tag file that is based on the input files it reads. + +GENERATE_TAGFILE = libxsd.doxytag + +# If the ALLEXTERNALS tag is set to YES all external classes will be listed +# in the class index. If set to NO only the inherited external classes +# will be listed. + +ALLEXTERNALS = NO + +# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed +# in the modules index. If set to NO, only the current project's groups will +# be listed. + +EXTERNAL_GROUPS = YES + +# The PERL_PATH should be the absolute path and name of the perl script +# interpreter (i.e. the result of `which perl'). + +PERL_PATH = /usr/bin/perl + +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool +#--------------------------------------------------------------------------- + +# 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 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 + +# You can define message sequence charts within doxygen comments using the \msc +# command. Doxygen will then run the mscgen tool (see http://www.mcternan.me.uk/mscgen/) to +# produce the chart and insert it in the documentation. The MSCGEN_PATH tag allows you to +# specify the directory where the mscgen tool resides. If left empty the tool is assumed to +# be found in the default search path. + +MSCGEN_PATH = + +# If set to YES, the inheritance and collaboration graphs will hide +# inheritance and usage relations if the target is undocumented +# or is not a class. + +HIDE_UNDOC_RELATIONS = YES + +# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is +# available from the path. This tool is part of Graphviz, a graph visualization +# toolkit from AT&T and Lucent Bell Labs. The other options in this section +# have no effect if this option is set to NO (the default) + +HAVE_DOT = NO + +# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect inheritance relations. Setting this tag to YES will force the +# the CLASS_DIAGRAMS tag to NO. + +CLASS_GRAPH = YES + +# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect implementation dependencies (inheritance, containment, and +# class references variables) of the class with other documented classes. + +COLLABORATION_GRAPH = YES + +# 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. + +TEMPLATE_RELATIONS = NO + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT +# tags are set to YES then doxygen will generate a graph for each documented +# file showing the direct and indirect include dependencies of the file with +# other documented files. + +INCLUDE_GRAPH = YES + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and +# HAVE_DOT tags are set to YES then doxygen will generate a graph for each +# documented header file showing the documented files that directly or +# indirectly include this file. + +INCLUDED_BY_GRAPH = YES + +# If the CALL_GRAPH, SOURCE_BROWSER 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, SOURCE_BROWSER 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. + +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 in the path. + +DOT_PATH = + +# The DOTFILE_DIRS tag can be used to specify one or more directories that +# contain dot files that are included in the documentation (see the +# \dotfile command). + +DOTFILE_DIRS = + +# The MAX_DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of +# nodes that will be shown in the graph. If the number of nodes in a graph +# becomes larger than this value, doxygen will truncate the graph, which is +# visualized by representing a node as a red box. Note that doxygen if the number +# of direct children of the root node in a graph is already larger than +# MAX_DOT_GRAPH_NOTES then the graph will not be shown at all. Also note +# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. + +DOT_GRAPH_MAX_NODES = 50 + +# 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 the size of a graph can be further restricted by +# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. + +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 = YES + +# 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. + +GENERATE_LEGEND = YES + +# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will +# remove the intermediate dot files that are used to generate +# the various graphs. + +DOT_CLEANUP = YES + +#--------------------------------------------------------------------------- +# 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 diff --git a/xsd/documentation/cxx/tree/reference/makefile b/xsd/documentation/cxx/tree/reference/makefile new file mode 100644 index 0000000..5df62c9 --- /dev/null +++ b/xsd/documentation/cxx/tree/reference/makefile @@ -0,0 +1,18 @@ +.PHONY: all +all: libxsd.doxytag + +headers := \ +../../../../libxsd/xsd/cxx/tree/buffer.hxx \ +../../../../libxsd/xsd/cxx/tree/types.hxx \ +../../../../libxsd/xsd/cxx/tree/date-time.hxx \ +../../../../libxsd/xsd/cxx/tree/elements.hxx \ +../../../../libxsd/xsd/cxx/tree/exceptions.hxx + +libxsd.doxytag: libxsd.doxygen footer.html $(headers) + doxygen $< + +.PHONY: clean +clean: + rm -f libxsd.doxytag + rm -rf html + diff --git a/xsd/documentation/default.css b/xsd/documentation/default.css new file mode 100644 index 0000000..bb3805b --- /dev/null +++ b/xsd/documentation/default.css @@ -0,0 +1,319 @@ +html { + margin : 0; + padding : 0; + background : white; +} + +body { + font-family : "Lucida Grande", Verdana, "Bitstream Vera Sans", sans-serif; + font-weight : normal; + font-size : 13px; + line-height : 19px; + + color : black; + + margin : 0 2em 0 2em; + padding : 0; +} + + +body { + min-width: 40em; +} + +#container { + max-width : 46em; + margin : 0 auto; + padding : 0 1em 0 1em; +} + + + +/* + * Footer + * + */ +#footer { + color : #3a84a7; + + padding : 1em 0 0.5em 0; + + font-size : 10px; + line-height : 15px; + + text-align: center; +} + +#footer a:link, #footer a:visited { + + color:#1d6699; + text-decoration: underline; +} + +#footer a { + margin-left: 0.7em; + margin-right: 0.7em; +} + +#footer p { + padding: 0; + margin: 0.3em 0 0 0; +} + +/* Distribution terms. */ +#footer #terms { + text-align: justify; + + font-size : 110%; + font-family : monospace; + + padding : 1em 0 0.5em 0; +} + + +/* + * Content + * + */ + +#content { + padding : 0em 0.1em 0 1.3em; + margin : 1.4em 0 0 0; +} + +#content p, +#content ol, +#content ul, +#content dl { + text-align: justify; +} + +#content h1 { + margin-left: -0.89em; +} + +a:link { + color:#0536d2; +} + + +/* + * Headings + * + */ + +h1, h2, h3, h4, h5, h6 { + font-weight : 500; +} + +h1 { font-size : 155%; } +h2 { font-size : 130%; } +h3 { font-size : 125%; } +h4 { font-size : 110%; } +h5 { font-size : 106%; } +h6 { font-size : 100%; } + +h1 { margin : 1.8em 0 0.8em 0;} +h2 { margin-top : 1.4em;} +h3 { margin-top : 1em;} + +p.indent { + margin-left : 1.5em; +} + + +/* + * Fix for IE 5.5 table font problem + * + */ + +table { + font-size : 13px; +} + + +/* + * table of content + * + */ + +ul.toc li { + padding : .4em 0em 0em 0em; +} + + +/* Toc links don't need to show when they are visited. */ +.toc a:visited { + color:#0536d2; +} + + +/* + * lists + * + */ + + +/* list of links */ +ul.menu { + list-style-type : none; +} + +ul.menu li { + padding-top : 0.3em; + padding-bottom : 0.3em; +} + + + +/* @@ I should probably use child selector here */ +/* list with multiline list-elements */ +ul.multiline li, ol.multiline li, dl.multiline dd { + padding-top : 0.16em; + padding-bottom : 0.16em; + + font-size : 11px; + line-height : 15px; +} + + + +/* C++ code snippet */ +pre.cxx { + margin-top : 0em; + margin-bottom : 2em; + + margin-left : 1em; +} + + + +/* make code snippet */ +pre.make { + margin-top : 0em; + margin-bottom : 2em; + + margin-left : 1em; +} + + + +/* terminal output */ +pre.term { + margin-top : 0em; + margin-bottom : 2em; + + margin-left : 1em; +} + + +/* Images */ +div.center { + text-align: center; +} + +/* Document info. */ +#docinfo { + margin-top: 4em; + border-top: 1px dashed #000000; + font-size: 70%; +} + + +/* Footnote */ + +#footnote { + margin-top : 2.5em; +} + +#footnote hr, hr.footnote { + margin-left: 0; + margin-bottom: 0.6em; + width: 8em; + border-top: 1px solid #000000; + border-right: none; + border-bottom: none; + border-left: none; + +} + +#footnote ol { + margin-left: 0; + padding-left: 1.45em; +} + +#footnote li { + text-align : left; + font-size : 11px; + line-height : 15px; + + padding : .4em 0 .4em 0; +} + + +/* Normal table with borders, etc. */ + +table.std { + margin: 2em 0 2em 0; + + border-collapse : collapse; + border : 1px solid; + border-color : #000000; + + font-size : 11px; + line-height : 14px; +} + +table.std th, table.std td { + border : 1px solid; + padding : 0.6em 0.8em 0.6em 0.8em; +} + +table.std th { + background : #cde8f6; +} + +table.std td { + text-align: left; +} + + +/* + * "item | description" table. + * + */ + +table.description { + border-style : none; + border-collapse : separate; + border-spacing : 0; + + font-size : 13px; + + margin : 0.6em 0 0.6em 0; + padding : 0 0 0 0; +} + +table.description tr { + padding : 0 0 0 0; + margin : 0 0 0 0; +} + +table.description * td, table.description * th { + border-style : none; + margin : 0 0 0 0; + vertical-align : top; +} + +table.description * th { + font-weight : normal; + padding : 0.4em 1em 0.4em 0; + text-align : left; + white-space : nowrap; + background : none; +} + +table.description * td { + padding : 0.4em 0 0.4em 1em; + text-align : justify; +} diff --git a/xsd/documentation/future.xhtml b/xsd/documentation/future.xhtml new file mode 100644 index 0000000..812de0c --- /dev/null +++ b/xsd/documentation/future.xhtml @@ -0,0 +1,103 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> + +<head> + <title>XSD Planned Features List</title> + + <meta name="copyright" content="© 2005-2010 Code Synthesis Tools CC"/> + <meta name="keywords" content="xsd,xml,schema,c++,mapping,data,binding,code,generator,future,features,plan"/> + <meta name="description" content="List of features planned for XSD."/> + + <link rel="stylesheet" type="text/css" href="default.css" /> +</head> + +<body> +<div id="container"> + <div id="content"> + + <p>Below is the list of features that we plan to implement in the + future. They are divided into two sections: ones that will + likely appear in the forthcoming releases and those that we + have no definite time-line for. Send an email to + <a href="mailto:xsd-users@codesynthesis.com">xsd-users@codesynthesis.com</a> + if you are interested in a particular feature or would like to suggest + one.</p> + + <h1>Forthcoming Releases</h1> + + <h2>C++/Serializer</h2> + + <ul class="multiline"> + <li>New mapping that will support event-driven XML serialization.</li> + </ul> + + <h2>C++/Hybrid</h2> + + <ul class="multiline"> + <li>New mapping that will support hybrid, event-driven/in-memory + XML processing.</li> + </ul> + + <h1>No Definite Time-line</h1> + + <h2>IDL</h2> + + <ul class="multiline"> + <li>New mapping that will produce CORBA IDL from XML Schema.</li> + </ul> + + <h2>IDL/C++</h2> + + <ul class="multiline"> + <li>New co-mapping that will produce C++ parsing/serialization + code for the C++ types produced from CORBA IDL.</li> + </ul> + + <h2>C++/Tree</h2> + + <ul class="multiline"> + <li>Mapping for <code>xsd:unique</code>, <code>xsd:key</code>, + and <code>xsd:keyref</code>.</li> + + <li>Option to select between <code>std::vector</code> and + <code>std::list</code> as an underlying sequence type.</li> + + <li>Special attribute in XML Schema definition that would + instruct code generators to use a different container type + such as associative containers (<code>std::set</code> and + <code>std::multiset</code>). This will allow you to + construct a light-weight, object-oriented database with XML Schema + as a specification language and XML as an underlying + representation. + </li> + + <li>Make dependency generator.</li> + + <li>Generate typedef instead of inheritance for some cases of + inheritance from fundamental types.</li> + + <li>Option to suppress the generation of enum mapping.</li> + + <li>Map arbitrary-length integers to a suitable user-defined types.</li> + + <li>Option to map <code>xsd:long</code> to C++ <code>long</code> instead + of <code>long long</code> for 64-bit architectures (can be achieved + now with --custom-type).</li> + </ul> + + </div> + <div id="footer"> + ©2005-2010 <a href="http://codesynthesis.com">CODE SYNTHESIS TOOLS CC</a> + + <div id="terms"> + Permission is granted to copy, distribute and/or modify this + document under the terms of the + <a href="http://codesynthesis.com/licenses/fdl-1.2.txt">GNU Free + Documentation License, version 1.2</a>; with no Invariant Sections, + no Front-Cover Texts and no Back-Cover Texts. + </div> + </div> +</div> +</body> +</html> diff --git a/xsd/documentation/makefile b/xsd/documentation/makefile new file mode 100644 index 0000000..0b39bdb --- /dev/null +++ b/xsd/documentation/makefile @@ -0,0 +1,47 @@ +# file : documentation/makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../build/bootstrap.make + +default := $(out_base)/ +install := $(out_base)/.install +dist := $(out_base)/.dist +dist-win := $(out_base)/.dist-win +cleandoc := $(out_base)/.cleandoc + +$(default): $(out_base)/cxx/ + +# Install. +# +$(install): $(out_base)/cxx/.install + $(call install-data,$(src_base)/default.css,$(install_doc_dir)/xsd/default.css) + $(call install-data,$(src_base)/future.xhtml,$(install_doc_dir)/xsd/future.xhtml) + $(call install-data,$(src_base)/schema-authoring-guide.xhtml,$(install_doc_dir)/xsd/schema-authoring-guide.xhtml) + $(call install-data,$(src_base)/xsd.xhtml,$(install_doc_dir)/xsd/xsd.xhtml) + $(call install-data,$(src_base)/custom-literals.xsd,$(install_doc_dir)/xsd/custom-literals.xsd) + $(call install-data,$(src_base)/xsd.1,$(install_man_dir)/man1/xsd.1) + +# Dist. +# +dist-common := $(out_base)/.dist-common + +$(dist-common): + $(call install-data,$(src_base)/default.css,$(dist_prefix)/documentation/default.css) + $(call install-data,$(src_base)/xsd.xhtml,$(dist_prefix)/documentation/xsd.xhtml) + $(call install-data,$(src_base)/xsd.1,$(dist_prefix)/documentation/xsd.1) + $(call install-data,$(src_base)/future.xhtml,$(dist_prefix)/documentation/future.xhtml) + $(call install-data,$(src_base)/schema-authoring-guide.xhtml,$(dist_prefix)/documentation/schema-authoring-guide.xhtml) + $(call install-data,$(src_base)/custom-literals.xsd,$(dist_prefix)/documentation/custom-literals.xsd) + +$(dist): $(dist-common) $(out_base)/cxx/.dist +$(dist-win): $(dist-common) $(out_base)/cxx/.dist-win + +# Clean. +# +$(cleandoc): $(src_base)/cxx/.cleandoc + +$(call include,$(bld_root)/install.make) + +$(call import,$(src_base)/cxx/makefile) diff --git a/xsd/documentation/schema-authoring-guide.xhtml b/xsd/documentation/schema-authoring-guide.xhtml new file mode 100644 index 0000000..2eaab14 --- /dev/null +++ b/xsd/documentation/schema-authoring-guide.xhtml @@ -0,0 +1,187 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> + +<head> + <title>XML Schema Authoring Guide</title> + + <meta name="copyright" content="© 2005-2010 Code Synthesis Tools CC"/> + <meta name="keywords" content="xsd,xml,schema,c++,mapping,data,binding,authoring,guide"/> + <meta name="description" content="XML Schema Authoring Guide"/> + + <link rel="stylesheet" type="text/css" href="default.css" /> + +<style type="text/css"> + pre { + background : #cde8f6; + + padding : 0 0 0 1em; + margin : 2em 0em 2em 0; + + font-size : 95% + } + + body { + min-width: 46em; + } + + ul.toc li { + padding : .4em 0em 0em 0em; + list-style : none; + } + +</style> + + +</head> + +<body> +<div id="container"> + <div id="content"> + + <h1>Table of Contents</h1> + + <ul class="toc"> + <li>1. <a href="#intro">Introduction</a></li> + + <li>2. <a href="#global_element">Don't define a global element which + is not a valid document root</a></li> + + <li>3. <a href="#same_local">Don't name a type and an element/attribute + of this type with the same name</a></li> + + <li>3. <a href="#integer">Don't use <code>xsd:integer</code> and + friends</a></li> + + <li>4. <a href="#int">Use <code>xsd:int/xsd:unsignedInt</code> for 32 bit + integers</a></li> + </ul> + + <h1><a name="intro">Introduction</a></h1> + + <p>Making it possible to cleanly map W3C XML Schema to programming languages + was never a goal of the XML Schema Working Group. As a result there + is a number of Schema constructs, techniques, and styles that don't + have appropriate counterparts in C++. This document presents a list + of do's and don'ts that will help ensure your schemas, when translated + by XSD, result in C++ code that is enjoyable to work with.</p> + + + <h1><a name="global_element">Don't define a global element which is not + a valid document root</a></h1> + + <p>Instead of</p> + + <pre> +<xsd:element name="author" type="Author"/> + +<xsd:complexType name="Book"> + <xsd:sequence> + <xsd:element ref="author"/> + </xsd:sequence> +</xsd:complexType> + </pre> + + <p>Write</p> + + <pre> +<xsd:complexType name="Book"> + <xsd:sequence> + <xsd:element name="author" type="Author"/> + </xsd:sequence> +</xsd:complexType> + </pre> + + <p>Any globally-defined element is a potential document root. For every + such element XSD generates a set of overloaded parsing + functions. If you cannot change your schema, consider using the + <code>--root-element-*</code> options to specify which global + element(s) are actual document root(s).</p> + + + + <h1><a name="same_local">Don't name a type and an element/attribute of + this type with the same name</a></h1> + + <p>Instead of</p> + + <pre> +<xsd:complexType name="name"> + <xsd:sequence> + <xsd:element name="name" type="xsd:string"/> + </xsd:sequence> + <xsd:attribute name="lang" type="xsd:language"/> +</xsd:complexType> + </pre> + + <p>Write</p> + + <pre> +<xsd:complexType name="Name"> + <xsd:sequence> + <xsd:element name="name" type="xsd:string"/> + </xsd:sequence> + <xsd:attribute name="lang" type="xsd:language"/> +</xsd:complexType> + </pre> + + <p>Use of a class name as a member function name within this class is + illegal in C++. XSD will resolve such conflicts by renaming + the conflicting member function. In the example above, you will end + up with the following generated code:</p> + + <pre> + class name + { + public: + string + name1 () const; + + language + lang () const; + + ... + + }; + </pre> + + <h1><a name="integer">Don't use <code>xsd:integer</code> and + friends</a></h1> + + <p>XML Schema built-in types <code>integer</code>, + <code>nonPositiveInteger</code>, <code>nonNegativeInteger</code>, + <code>positiveInteger</code>, and <code>negativeInteger</code> + are arbitrary-length integral types. XSD maps them to the + <code>long long</code> and <code>unsigned long long</code> C++ + types. In most cases you would prefer to use either + <code>xsd:int/xsd:unsignedInt</code> (32 bit, maps to C++ + <code>int/unsigned int</code>) or + <code>xsd:long/xsd:unsignedLong</code> (64 bit, maps to C++ + <code>long long/unsigned long long</code>). + </p> + + <h1><a name="int">Use <code>xsd:int/xsd:unsignedInt</code> for 32 bit + integers</a></h1> + + <p>XML Schema built-in types <code>long</code> and + <code>unsignedLong</code> are 64 bit wide so use 32 bit <code>int</code> + and <code>unsignedInt</code> unless you meant 64 bit.</p> + + </div> + <div id="footer"> + ©2005-2010 <a href="http://codesynthesis.com">CODE SYNTHESIS TOOLS CC</a> + + <div id="terms"> + Permission is granted to copy, distribute and/or modify this + document under the terms of the + <a href="http://codesynthesis.com/licenses/fdl-1.2.txt">GNU Free + Documentation License, version 1.2</a>; with no Invariant Sections, + no Front-Cover Texts and no Back-Cover Texts. + </div> + </div> + +</div> + + +</body> +</html> diff --git a/xsd/documentation/xsd.1 b/xsd/documentation/xsd.1 new file mode 100644 index 0000000..8b97b14 --- /dev/null +++ b/xsd/documentation/xsd.1 @@ -0,0 +1,1893 @@ +.\" Process this file with +.\" groff -man -Tascii xsd.1 +.\" +.TH XSD 1 "April 2010" "XSD 3.3.0" +.SH NAME +xsd \- W3C XML Schema to C++ Compiler +.\" +.\" +.\" +.\"-------------------------------------------------------------------- +.SH SYNOPSIS +.\"-------------------------------------------------------------------- +.B xsd +.I command +.B [ +.I options +.B ] +.I file +.B [ +.I file +.B ...] +.in +.B xsd help +.B [ +.I command +.B ] +.in +.B xsd version +.\" +.\" +.\" +.\"-------------------------------------------------------------------- +.SH DESCRIPTION +.\"-------------------------------------------------------------------- +.B xsd +generates vocabulary-specific, statically-typed C++ mapping from W3C XML +Schema definitions. Particular mapping to produce is selected by a +.IR command . +Each mapping has a number of mapping-specific +.I options +that should appear, if any, after the +.IR command . +Input files should be W3C XML Schema definitions. The exact set of the +generated files depends on the selected mapping and options. +.\" +.\" +.\" +.\"-------------------------------------------------------------------- +.SH COMMANDS +.\"-------------------------------------------------------------------- +.IP \fBcxx-tree\fR +Generate the C++/Tree mapping. For each input file in the form +.B name.xsd +the following C++ files are generated: +.B name.hxx +(header file), +.B name.ixx +(inline file, generated only if the +.B --generate-inline +option is specified), +.B name.cxx +(source file), and +.B name-fwd.hxx +(forward declaration file, generated only if the +.B --generate-forward +option is specified). + +.IP \fBcxx-parser\fR +Generate the C++/Parser mapping. For each input file in the form +.B name.xsd +the following C++ files are generated: +.B name-pskel.hxx +(parser skeleton header file), +.B name-pskel.ixx +(parser skeleton inline file, generated only if the +.B --generate-inline +option is specified), and +.B name-pskel.cxx +(parser skeleton source file). If the +.B --generate-noop-impl +or +.B --generate-print-impl +option is specified, the following additional sample implementation files +are generated: +.B name-pimpl.hxx +(parser implementation header file) and +.B name-pimpl.cxx +(parser implementation source file). If the +.B --generate-test-driver +option is specified, the additional +.B name-driver.cxx +test driver file is generated. + +.IP \fBhelp\fR +Print usage information and exit. Use +.PP +.RS +.RS 3 +.B xsd help +.I command +.RE +.PP +for command-specific help. +.RE +.IP \fBversion\fR +Print version and exit. +.\"-------------------------------------------------------------------- +.SH OPTIONS +.\"-------------------------------------------------------------------- +Command-specific +.IR options , +if any, should appear after the corresponding +.IR command . + +.\" +.\" Common options. +.\" +.SS common options +. +.IP "\fB\--char-type \fItype\fR" +Generate code using the provided character +.I type +instead of the default +.BR char . +Valid values are +.B char +and +.BR wchar_t . +. +.IP "\fB\--char-encoding \fIenc\fR" +Specify the character encoding that should be used in the generated code. +Valid values for the +.B char +character type are +.B utf8 +(default), +.BR iso8859-1 , lcp +(Xerces-C++ local code page), +and +.BR custom . +If you pass +.B custom +as the value then you will need to include the transcoder implementation +header for your encoding at the beginning of the generated header files +(see the +.B --hxx-prologue +option). + +For the +.B wchar_t +character type the only valid value is +.B auto +and the encoding is automatically selected between UTF-16 and UTF-32/UCS-4, +depending on the +.B wchar_t +type size. +. +.IP "\fB\--output-dir \fIdir\fR" +Write generated files to +.I dir +instead of the current directory. + +.IP "\fB\--namespace-map \fIxns\fB=\fIcns" +Map XML Schema namespace +.I xns +to C++ namespace +.IR cns . +Repeat this option to specify mapping for more than one XML Schema namespace. +For example, the following option: + +.B --namespace-map http://example.com/foo/bar=foo::bar + +will map the +.B http://example.com/foo/bar +XML Schema namespace to the +.B foo::bar +C++ namespace. +. +.IP "\fB\--namespace-regex \fIregex\fR" +Add +.I regex +to the list of regular expressions used to translate XML Schema namespace +names to C++ namespace names. +.I regex +is a perl-like regular expression in the form +.BI / pattern / replacement /\fR. +Any character can be used as a delimiter instead of +.BR / . +Escaping of the delimiter character in +.I pattern +or +.I replacement +is not supported. + +All the regular expressions are pushed into a stack with the last specified +expression considered first. The first match that succeeds is used. Regular +expressions are applied to a string in the form + +.I filename namespace + +For example, if you have file +.B hello.xsd +with namespace +.B http://example.com/hello +and you run +.B xsd +on this file, then the string in question will be: + +.B hello.xsd. http://example.com/hello + +For the built-in XML Schema namespace the string is: + +.B XMLSchema.xsd http://www.w3.org/2001/XMLSchema + +The following three steps are performed for each regular expression until +the match is found: +.RS +.RS 3 +.TP 3 +1. +The expression is applied and if the result is empty the next expression +is considered. +.TP 3 +2. +All +.B / +are replaced with +.BR :: . +.TP 3 +3. +The result is verified to be a valid C++ scope name (e.g., +.BR foo::bar ). +If this test succeeds, the result is used as a C++ namespace name. +.RE +.PP +As an example, the following expression maps XML Schema namespaces in the +form +.B http://example.com/foo/bar +to C++ namespaces in the form +.BR foo::bar : +.PP +.B "%.* http://example.com/(.+)%$1%" + +See also the REGEX AND SHELL QUOTING section below. +.RE + +.IP "\fB\--namespace-regex-trace\fR" +Trace the process of applying regular expressions specified with +the +.B --namespace-regex +option. Use this option to find out why your regular expressions +don't do what you expected them to do. + +\" +\" Reserved names. +\" + +.IP "\fB\--reserved-name \fIname\fR[\fB=\fIrep\fR]" +Add +.I name +to the list of names that should not be used as identifiers. The name +can optionally be followed by +.B = +and the replacement name that should be used instead. All the C++ keywords +are already in this list. + +\" +\" Include +\" + +.IP "\fB\--include-with-brackets\fR" +Use angle brackets (<>) instead of quotes ("") in generated +.B #include +directives. + +.IP "\fB\--include-prefix \fIprefix\fR" +Add +.I prefix +to generated +.B #include +directive paths. + +For example, if you had the following import element in your schema + +.B <import namespace="..." schemaLocation="base.xsd"/> + +and compiled this fragment with +.B --include-prefix schemas/\fR, +then the include directive in the generated code would be: + +.B #include "schemas/base.hxx" + +.IP "\fB\--include-regex \fIregex\fR" +Add +.I regex +to the list of regular expressions used to transform +.B #include +directive paths. +.I regex +is a perl-like regular expression in the form +.BI / pattern / replacement /\fR. +Any character can be used as a delimiter instead of +.BR / . +Escaping of the delimiter character in +.I pattern +or +.I replacement +is not supported. + +All the regular expressions are pushed into a stack with the last specified +expression considered first. The first match that succeeds is used. + +As an example, the following expression transforms paths in the form +.B schemas/foo/bar +to paths in the form +.BR generated/foo/bar : + +.B "%schemas/(.+)%generated/$1%" + +See also the REGEX AND SHELL QUOTING section below. + +.IP "\fB\--include-regex-trace\fR" +Trace the process of applying regular expressions specified with +the +.B --include-regex +option. Use this option to find out why your regular expressions +don't do what you expected them to do. + +.IP "\fB\--guard-prefix \fIprefix\fR" +Add +.I prefix +to generated header inclusion guards. The prefix is transformed to upper +case and characters that are illegal in a preprocessor macro name are +replaced with underscores. If this option is not specified then the +directory part of the input schema file is used as a prefix. + +.\" +.\" Suffixes. +.\" + +.IP "\fB\--hxx-suffix \fIsuffix\fR" +Use the provided +.I suffix +instead of the default +.B .hxx +to construct the name of the header file. Note that this suffix is also +used to construct names for included/imported schemas. + +.IP "\fB\--ixx-suffix \fIsuffix\fR" +Use the provided +.I suffix +instead of the default +.B .ixx +to construct the name of the inline file. + +.IP "\fB\--cxx-suffix \fIsuffix\fR" +Use the provided +.I suffix +instead of the default +.B .cxx +to construct the name of the source file. + +.IP "\fB\--hxx-regex \fIregex\fR" +Use the provided expression to construct the name of the header file. +.I regex +is a perl-like regular expression in the form +.BI / pattern / replacement /\fR. +Note that this expression is also used to construct names for +included/imported schemas. See also the REGEX AND SHELL QUOTING section +below. + +.IP "\fB\--ixx-regex \fIregex\fR" +Use the provided expression to construct the name of the inline file. +.I regex +is a perl-like regular expression in the form +.BI / pattern / replacement /\fR. +See also the REGEX AND SHELL QUOTING section below. + +.IP "\fB\--cxx-regex \fIregex\fR" +Use the provided expression to construct the name of the source file. +.I regex +is a perl-like regular expression in the form +.BI / pattern / replacement /\fR. +See also the REGEX AND SHELL QUOTING section below. + +.IP "\fB\--hxx-prologue \fItext\fR" +Insert +.I text +at the beginning of the header file. + +.IP "\fB\--ixx-prologue \fItext\fR" +Insert +.I text +at the beginning of the inline file. + +.IP "\fB\--cxx-prologue \fItext\fR" +Insert +.I text +at the beginning of the source file. + +.IP "\fB\--prologue \fItext\fR" +Insert +.I text +at the beginning of each generated file for which there is no file-specific +prologue. + +.IP "\fB\--hxx-epilogue \fItext\fR" +Insert +.I text +at the end of the header file. + +.IP "\fB\--ixx-epilogue \fItext\fR" +Insert +.I text +at the end of the inline file. + +.IP "\fB\--cxx-epilogue \fItext\fR" +Insert +.I text +at the end of the source file. + +.IP "\fB\--epilogue \fItext\fR" +Insert +.I text +at the end of each generated file for which there is no file-specific +epilogue. + +.IP "\fB\--hxx-prologue-file \fIfile\fR" +Insert the content of the +.I file +at the beginning of the header file. + +.IP "\fB\--ixx-prologue-file \fIfile\fR" +Insert the content of the +.I file +at the beginning of the inline file. + +.IP "\fB\--cxx-prologue-file \fIfile\fR" +Insert the content of the +.I file +at the beginning of the source file. + +.IP "\fB\--prologue-file \fIfile\fR" +Insert the content of the +.I file +at the beginning of each generated file for which there is no file-specific +prologue file. + +.IP "\fB\--hxx-epilogue-file \fIfile\fR" +Insert the content of the +.I file +at the end of the header file. + +.IP "\fB\--ixx-epilogue-file \fIfile\fR" +Insert the content of the +.I file +at the end of the inline file. + +.IP "\fB\--cxx-epilogue-file \fIfile\fR" +Insert the content of the +.I file +at the end of the source file. + +.IP "\fB\--epilogue-file \fIfile\fR" +Insert the content of the +.I file +at the end of each generated file for which there is no file-specific +epilogue file. + +.IP "\fB\--custom-literals \fIfile\fR" +Load custom XML string to C++ literal mappings from +.IR file . +This mechanism can be useful if you are using a custom character encoding +and some of the strings in your schemas, for example element/attribute +names or enumeration values, contain non-ASCII characters. In this case +you will need to provide a custom mapping to C++ literals for such +strings. The format of this file is specified in the +.B custom-literals.xsd +XML Schema file that can be found in the documentation directory. + +.IP "\fB\--export-symbol \fIsymbol\fR" +Insert +.I symbol +in places where DLL export/import control statements ( +.BR __declspec(dllexport/dllimport) ) +are necessary. + +.IP "\fB\--export-xml-schema\fR" +Export/import types in the XML Schema namespace using the export +symbol provided with the +.B --export-symbol +option. The +.B XSD_NO_EXPORT +macro can be used to omit this code during C++ compilation, which may be +useful if you would like to use the same generated code across multiple +platforms. + +.IP "\fB\--export-maps\fR" +Export polymorphism support maps from a Win32 DLL into which this generated +code is linked. This is necessary when your type hierarchy is split across +several DLLs since otherwise each DLL will have its own set of maps. In +this situation the generated code for the DLL which contains base types +and/or substitution group heads should be compiled with this option and +the generated code for all other DLLs should be compiled with +.BR --import-maps . +This option is only valid together with +.BR --generate-polymorphic. +The +.B XSD_NO_EXPORT +macro can be used to omit this code during C++ compilation, which may be +useful if you would like to use the same generated code across multiple +platforms. + +.IP "\fB\--import-maps\fR" +Import polymorphism support maps to a Win32 DLL or executable into which +this generated code is linked. See the +.B --export-maps +option documentation for details. This option is only valid together with +.BR --generate-polymorphic. +The +.B XSD_NO_EXPORT +macro can be used to omit this code during C++ compilation, which may be +useful if you would like to use the same generated code across multiple +platforms. + +.IP "\fB\--disable-warning \fIwarn\fR" +Disable printing warning with id +.IR warn . +If +.B all +is specified for the warning id then all warnings are disabled. + +.IP "\fB\--show-sloc\fR" +Show the number of generated physical source lines of code (SLOC). + +.IP "\fB\--sloc-limit \fInum\fR" +Check that the number of generated physical source lines of code (SLOC) +does not exceed +.I num. + +.IP "\fB\--options-file \fIfile\fR" +Read additional options from +.IR file . +Each option should appear on a separate line optionally followed by +space and an argument. Empty lines and lines starting with +.B # +are ignored. The semantics of providing options in a file is equivalent +to providing the same set of options in the same order in the command +line at the point where the +.B --options-file +option is specified except that shell escaping and quoting is not +required. Repeat this option to specify more than one options files. + +.IP "\fB\--proprietary-license\fR" +Indicate that the generated code is licensed under a proprietary license +instead of the GPL. + +.IP "\fB\--preserve-anonymous\fR" +Preserve anonymous types. By default anonymous types are +automatically named with names derived from the enclosing +elements/attributes. Because mappings implemented by this +compiler require all types to be named, this option is only +useful if you want to make sure your schemas don't have +anonymous types. + +.IP "\fB\--show-anonymous\fR" +Show elements and attributes that are of anonymous types. This option +only makes sense together with the +.B --preserve-anonymous +option. + +.IP "\fB\--anonymous-regex \fIregex\fR" +Add +.I regex +to the list of regular expressions used to derive names for anonymous +types from the enclosing attributes/elements. +.I regex +is a perl-like regular expression in the form +.BI / pattern / replacement /\fR. +Any character can be used as a delimiter instead of +.BR / . +Escaping of the delimiter character in +.I pattern +or +.I replacement +is not supported. + +All the regular expressions are pushed into a stack with the last +specified expression considered first. The first match that +succeeds is used. Regular expressions are applied to a string +in the form + +.I filename namespace xpath + +For instance: + +.B hello.xsd http://example.com/hello element + +.B hello.xsd http://example.com/hello type/element + +As an example, the following expression makes all the derived +names start with capital letters. This could be useful when +your naming convention requires type names to start with +capital letters: + +.B %.* .* (.+/)*(.+)%\\\\u$2% + +See also the REGEX AND SHELL QUOTING section below. + +.IP "\fB\--anonymous-regex-trace\fR" +Trace the process of applying regular expressions specified with +the +.B --anonymous-regex +option. Use this option to find out why your regular expressions +don't do what you expected them to do. + +.IP "\fB\--location-map \fIol\fB=\fInl" +Map the original schema location +.I ol +that is specified in the XML Schema include or import elements to new +schema location +.IR nl . +Repeat this option to map more than one schema location. For example, +the following option maps the +.B http://example.com/foo.xsd +URL to the +.B foo.xsd +local file. + +.B --location-map http://example.com/foo.xsd=foo.xsd + +.IP "\fB\--location-regex \fIregex\fR" +Add +.I regex +to the list of regular expressions used to map schema locations that are +specified in the XML Schema include or import elements. +.I regex +is a perl-like regular expression in the form +.BI / pattern / replacement /\fR. +Any character can be used as a delimiter instead of +.BR / . +Escaping of the delimiter character in +.I pattern +or +.I replacement +is not supported. All the regular expressions are pushed into a stack with the +last specified expression considered first. The first match that succeeds +is used. + +For example, the following expression maps URL locations in the form +.B http://example.com/foo/bar.xsd +to local files in the form +.BR bar.xsd : + +.B %http://.+/(.+)%$1% + +See also the REGEX AND SHELL QUOTING section below. + +.IP "\fB\--location-regex-trace\fR" +Trace the process of applying regular expressions specified with +the +.B --location-regex +option. Use this option to find out why your regular expressions +don't do what you expected them to do. + +.IP "\fB\--file-per-type\fR" +Generate a separate set of C++ files for each type defined in XML Schema. +Note that in this mode you only need to compile the root schema(s) and the +code will be generated for all included and imported schemas. This +compilation mode is primarily useful when some of your schemas cannot be +compiled separately or have cyclic dependencies which involve type +inheritance. Other options related to this mode are: +.BR --type-file-regex , +.BR --schema-file-regex, +and +.BR --file-list . + +.IP "\fB\--type-file-regex \fIregex\fR" +Add +.I regex +to the list of regular expressions used to translate type names to file +names when the +.B --file-per-type +option is specified. +.I regex +is a perl-like regular expression in the form +.BI / pattern / replacement /\fR. +Any character can be used as a delimiter instead of +.BR / . +Escaping of the delimiter character in +.I pattern +or +.I replacement +is not supported. All the regular expressions are pushed into a stack with +the last specified expression considered first. The first match that +succeeds is used. Regular expressions are applied to a string +in the form + +.I namespace type-name + +For example, the following expression maps type +.B foo +that is defined in the +.B http://example.com/bar +namespace to file name +.BR bar-foo : + +.B %http://example.com/(.+) (.+)%$1-$2% + +See also the REGEX AND SHELL QUOTING section below. + +.IP "\fB\--type-file-regex-trace\fR" +Trace the process of applying regular expressions specified with +the +.B --type-file-regex +option. Use this option to find out why your regular expressions +don't do what you expected them to do. + +.IP "\fB\--schema-file-regex \fIregex\fR" +Add +.I regex +to the list of regular expressions used to translate schema file names +when the +.B --file-per-type +option is specified. +.I regex +is a perl-like regular expression in the form +.BI / pattern / replacement /\fR. +Any character can be used as a delimiter instead of +.BR / . +Escaping of the delimiter character in +.I pattern +or +.I replacement +is not supported. All the regular expressions are pushed into a stack +with the last specified expression considered first. The first match +that succeeds is used. Regular expressions are applied to the absolute +filesystem path of a schema file and the result, including the directory +part, if any, is used to derive the +.B #include +directive paths as well as the generated C++ file paths. This option, along +with +.B --type-file-regex +are primarily used to place the generated files into subdirectories or to +resolve file name conflicts. + +For example, the following expression maps schema files in the +.B foo/1.0.0/ +subdirectory to the files in the +.B foo/ +subdirectory. As a result, the +.B #include +directive paths for such schemas will be in the +.B foo/schema.hxx +form and the generated C++ files will be placed into the +.B foo/ +subdirectory: + +.B %.*/foo/1.0.0/(.+)%foo/$1% + +See also the REGEX AND SHELL QUOTING section below. + +.IP "\fB\--schema-file-regex-trace\fR" +Trace the process of applying regular expressions specified with +the +.B --schema-file-regex +option. Use this option to find out why your regular expressions +don't do what you expected them to do. + +.IP "\fB\--file-list \fIfile\fR" +Write a list of generated C++ files to +.IR file . +This option is primarily useful in the file-per-type compilation mode +.RB ( --file-per-type ) +to create a list of generated C++ files, for example, as a makefile fragment. + +.IP "\fB\--file-list-prologue \fItext\fR" +Insert +.I text +at the beginning of the file list. As a convenience, all occurrences of the +\\n character sequence in +.I text +are replaced with new lines. This option can, for example, be used to assign +the generated file list to a makefile variable. + +.IP "\fB\--file-list-epilogue \fItext\fR" +Insert +.I text +at the end of the file list. As a convenience, all occurrences of the +\\n character sequence in +.I text +are replaced with new lines. + +.IP "\fB\--file-list-delim \fItext\fR" +Delimit file names written to the file list with +.I text +instead of new lines. As a convenience, all occurrences of the \\n character +sequence in +.I text +are replaced with new lines. + +.\" +.\" C++/Tree options. +.\" +.SS cxx-tree command options + +.IP "\fB\--generate-polymorphic\fR" +Generate polymorphism-aware code. Specify this option if you use substitution +groups or +.BR xsi:type . +Use the +.B --polymorphic-type +or +.B --polymorphic-type-all +option to specify which type hierarchies are polymorphic. + +.IP "\fB\--polymorphic-type \fItype\fR" +Indicate that +.I type +is a root of a polymorphic type hierarchy. The compiler can often +automatically determine which types are polymorphic based on the +substitution group declarations. However, you may need to use this +option if you are not using substitution groups or if substitution +groups are defined in another schema. You need to specify this option +when compiling every schema file that references +.IR type . +The +.I type +argument is an XML Schema type name that can be optionally qualified +with a namespace in the +.IB namespace # name +form. + +.IP "\fB\--polymorphic-type-all\fR" +Indicate that all types should be treated as polymorphic. + +.IP "\fB\--generate-serialization\fR" +Generate serialization functions. Serialization functions convert +the object model back to XML. + +.IP "\fB\--generate-inline\fR" +Generate simple functions inline. This option triggers creation of the +inline file. + +.IP "\fB\--generate-ostream\fR" +Generate ostream insertion operators +.RB ( operator<< ) +for generated types. This allows to easily print a fragment or the whole +object model for debugging or logging. + +.IP "\fB\--generate-doxygen\fR" +Generate documentation comments suitable for extraction by the Doxygen +documentation system. Documentation from annotations is added to the +comments if present in the schema. + +.IP "\fB\--generate-comparison\fR" +Generate comparison operators +.RB ( operator== +and +.BR operator!= ) +for complex types. Comparison is performed memberwise. + +.IP "\fB\--generate-default-ctor\fR" +Generate default constructors even for types that have required members. +Required members of an instance constructed using such a constructor are +not initialized and accessing them results in undefined behavior. + +.IP "\fB\--generate-from-base-ctor\fR" +Generate constructors that expect an instance of a base type followed by all +required members. + +.IP "\fB\--generate-detach\fR" +Generate detach functions for required elements and attributes (detach +functions for optional and sequence cardinalities are provided by the +respective containers). These functions, for example, allow you to move +sub-trees in the object model either within the same tree or between +different trees. + +.IP "\fB\--generate-wildcard\fR" +Generate accessors and modifiers as well as parsing and serialization code +for XML Schema wildcards +.RB ( any +and +.BR anyAttribute ). +XML content matched by wildcards is presented as DOM fragments. Note that +you need to initialize the Xerces-C++ runtime if you are using this option. + +.IP "\fB\--generate-insertion \fIos\fR" +Generate data representation stream insertion operators for the +.I os +output stream type. Repeat this option to specify more than one stream +type. The ACE CDR stream +.RB ( ACE_OutputCDR ) +and RPC XDR are recognized by the compiler and the necessary +.B #include +directives are automatically generated. For custom stream types use the +.B --hxx-prologue* +options to provide the necessary declarations. + +.IP "\fB\--generate-extraction \fIis\fR" +Generate data representation stream extraction constructors for the +.I is +input stream type. Repeat this option to specify more than one stream +type. The ACE CDR stream +.RB ( ACE_InputCDR ) +and RPC XDR are recognized by the compiler and the necessary +.B #include +directives are automatically generated. For custom stream types use the +.B --hxx-prologue* +options to provide the necessary declarations. + +.IP "\fB\--generate-forward\fR" +Generate a separate header file with forward declarations for the types +being generated. + +.IP "\fB\--generate-xml-schema\fR" +Generate a C++ header file as if the schema being compiled defines the +XML Schema namespace. In particular, the resulting file will have +definitions for all XML Schema built-in types. The schema file provided +to the compiler need not exist and is only used to derive the name of the +resulting header file. Use the +.B --extern-xml-schema +option to include this file in the generated files for other schemas. + +.IP "\fB\--extern-xml-schema \fIfile\fR" +Include a header file derived from +.I file +instead of generating the XML Schema namespace mapping inline. The provided +file need not exist and is only used to derive the name of the included +header file. Use the +.B --generate-xml-schema +option to generate this header file. + +.IP "\fB\--suppress-parsing\fR" +Suppress the generation of the parsing functions and constructors. Use this +option to reduce the generated code size when parsing from XML is not +needed. + +.IP "\fB\--generate-element-type\fR" +Generate types instead of parsing and serialization functions for root +elements. This is primarily useful to distinguish object models with the +same root type but with different root elements. + +.IP "\fB\--generate-element-map\fR" +Generate a root element map that allows uniform parsing and serialization +of multiple root elements. This option is only valid together with +.BR --generate-element-type . + +.IP "\fB\--generate-intellisense\fR" +Generate workarounds for IntelliSense bugs in Visual Studio 2005 (8.0). When +this option is used, the resulting code is slightly more verbose. IntelliSense +in Visual Studio 2008 (9.0) does not require these workarounds. Support for +IntelliSense in Visual Studio 2003 (7.1) is improved with this option but +is still incomplete. + +.IP "\fB\--omit-default-attributes\fR" +Omit attributes with default and fixed values from serialized XML +documents. + +\" +\" Naming +\" + +.IP "\fB\--type-naming \fIstyle\fR" +Specify the type naming convention that should be used in the generated code. +Valid styles are +.B knr +(default), +.BR ucc , +and +.BR java . +See the NAMING CONVENTION section below for more information. + +.IP "\fB\--function-naming \fIstyle\fR" +Specify the function naming convention that should be used in the generated +code. Valid styles are +.B knr +(default), +.BR lcc , +and +.BR java. +See the NAMING CONVENTION section below for more information. + +.IP "\fB\--type-regex \fIregex\fR" +Add +.I regex +to the list of regular expressions used to translate XML Schema +type names to C++ type names. See the NAMING CONVENTION section below for +more information. + +.IP "\fB\--accessor-regex \fIregex\fR" +Add +.I regex +to the list of regular expressions used to translate XML Schema +names of elements/attributes to C++ accessor function names. See the NAMING +CONVENTION section below for more information. + +.IP "\fB\--one-accessor-regex \fIregex\fR" +Add +.I regex +to the list of regular expressions used to translate XML Schema +names of elements/attributes with cardinality one to C++ accessor function +names. See the NAMING CONVENTION section below for more information. + +.IP "\fB\--opt-accessor-regex \fIregex\fR" +Add +.I regex +to the list of regular expressions used to translate XML Schema +names of elements/attributes with cardinality optional to C++ accessor +function names. See the NAMING CONVENTION section below for more information. + +.IP "\fB\--seq-accessor-regex \fIregex\fR" +Add +.I regex +to the list of regular expressions used to translate XML Schema +names of elements/attributes with cardinality sequence to C++ accessor +function names. See the NAMING CONVENTION section below for more information. + +.IP "\fB\--modifier-regex \fIregex\fR" +Add +.I regex +to the list of regular expressions used to translate XML Schema +names of elements/attributes to C++ modifier function names. See the NAMING +CONVENTION section below for more information. + +.IP "\fB\--one-modifier-regex \fIregex\fR" +Add +.I regex +to the list of regular expressions used to translate XML Schema +names of elements/attributes with cardinality one to C++ modifier function +names. See the NAMING CONVENTION section below for more information. + +.IP "\fB\--opt-modifier-regex \fIregex\fR" +Add +.I regex +to the list of regular expressions used to translate XML Schema +names of elements/attributes with cardinality optional to C++ modifier +function names. See the NAMING CONVENTION section below for more information. + +.IP "\fB\--seq-modifier-regex \fIregex\fR" +Add +.I regex +to the list of regular expressions used to translate XML Schema +names of elements/attributes with cardinality sequence to C++ modifier +function names. See the NAMING CONVENTION section below for more information. + +.IP "\fB\--parser-regex \fIregex\fR" +Add +.I regex +to the list of regular expressions used to translate XML Schema +element names to C++ parsing function names. See the NAMING CONVENTION +section below for more information. + +.IP "\fB\--serializer-regex \fIregex\fR" +Add +.I regex +to the list of regular expressions used to translate XML Schema +element names to C++ serialization function names. See the NAMING +CONVENTION section below for more information. + +.IP "\fB\--enumerator-regex \fIregex\fR" +Add +.I regex +to the list of regular expressions used to translate XML Schema +enumeration values to C++ enumerator names. See the NAMING CONVENTION +section below for more information. + +.IP "\fB\--element-type-regex \fIregex\fR" +Add +.I regex +to the list of regular expressions used to translate XML Schema +element names to C++ element type names. See the NAMING CONVENTION section +below for more information. + +.IP "\fB\--name-regex-trace\fR" +Trace the process of applying regular expressions specified with the name +transformation options. Use this option to find out why your regular +expressions don't do what you expected them to do. + +\" +\" Root element. +\" + +.IP "\fB\--root-element-first\fR" +Treat only the first global element as a document root. By default all +global elements are considered document roots. + +.IP "\fB\--root-element-last\fR" +Treat only the last global element as a document root. By default all +global elements are considered document roots. + +.IP "\fB\--root-element-all\fR" +Treat all global elements as document roots. This is the default behavior. +By explicitly specifying this option you can suppress the warning that is +issued if more than one global element is defined. + +.IP "\fB\--root-element-none\fR" +Do not treat any global elements as document roots. By default all global +elements are considered document roots. + +.IP "\fB\--root-element \fIelement\fR" +Treat only +.I element +as a document root. Repeat this option to specify more than one root element. + +\" +\" Custom type. +\" + +.IP "\fB\--custom-type \fIname\fR[\fB=\fItype\fR[\fB/\fIbase\fR]]" +Use a custom C++ type +.I type +instead of the generated class for XML Schema type +.IR name . +If +.I type +is not present or empty then the custom type is assumed to have the same name +and be defined in the same namespace as the generated class would have. If +.I base +is specified then the generated class is still generated but with that name. + +.IP "\fB\--custom-type-regex \fB/\fIname-pat\fB/\fR[\fItype-sub\fB/\fR[\fIbase-sub\fB/\fR]]" +For each type defined in XML Schema that matches the +.I name-pat +pattern use a custom C++ type instead of the generated class. The +name of the custom type is obtained by substituting +.IR type-sub . +If +.I type-sub +is not present or its substitution results in an empty string then the +custom type is assumed to have the same name and be defined in the same +namespace as the generated class would have. If +.I base-sub +is present and its substitution results in a non-empty string then the +generated class is still generated but with the result of substitution +as its name. The pattern and substitutions are in the perl regular +expression format. See also the REGEX AND SHELL QUOTING section below. + +\" +\" Suffixes. +\" + +.IP "\fB\--fwd-suffix \fIsuffix\fR" +Use the provided +.I suffix +instead of the default +.B -fwd.hxx +to construct the name of the forward declaration file. + +.IP "\fB\--fwd-regex \fIregex\fR" +Use the provided expression to construct the name of the forward +declaration file. +.I regex +is a perl-like regular expression in the form +.BI / pattern / replacement /\fR. +See also the REGEX AND SHELL QUOTING section below. + +.IP "\fB\--fwd-prologue \fItext\fR" +Insert +.I text +at the beginning of the forward declaration file. + +.IP "\fB\--fwd-epilogue \fItext\fR" +Insert +.I text +at the end of the forward declaration file. + +.IP "\fB\--fwd-prologue-file \fIfile\fR" +Insert the content of the +.I file +at the beginning of the forward declaration file. + +.IP "\fB\--fwd-epilogue-file \fIfile\fR" +Insert the content of the +.I file +at the end of the forward declaration file. + +\" +\" Parts. +\" + +.IP "\fB\--parts \fInum\fR" +Split generated source code into +.I num +parts. This is useful when translating large, monolithic schemas and a C++ +compiler is not able to compile the resulting source code at once (usually +due to insufficient memory). + +.IP "\fB\--parts-suffix \fIsuffix\fR" +Use +.I suffix +instead of the default '\fB-\fR' to separate the file name from the part +number. + +\" +\" C++/Parser +\" + +.SS cxx-parser command options + +.IP "\fB\--type-map \fImapfile\fR" +Read XML Schema to C++ type mapping information from +.I mapfile +Repeat this option to specify several type maps. Type maps are +considered in order of appearance and the first match is used. +By default all user-defined types are mapped to +.BR void . +See the TYPE MAP section below for more information. + +.IP "\fB\--xml-parser \fIparser\fR" +Use +.I parser +as the underlying XML parser. Valid values are +.B xerces +for Xerces-C++ (default) and +.B expat +for Expat. + +.IP "\fB\--generate-inline\fR" +Generate simple functions inline. This option triggers creation of the +inline file. + +.IP "\fB\--generate-validation\fR" +Generate validation code ("perfect" parser) which ensures that instance +documents conform to the schema. Validation code is generated by default +when the selected underlying XML parser is non-validating (\fBexpat\fR). + +.IP "\fB\--suppress-validation\fR" +Suppress the generation of validation code ("perfect" parser). Validation is +suppressed by default when the selected underlying XML parser is +validating (\fBxerces\fR). + +.IP "\fB\--generate-polymorphic\fR" +Generate polymorphism-aware code. Specify this option if you use substitution +groups or +.BR xsi:type . + +.IP "\fB\--generate-noop-impl\fR" +Generate a sample parser implementation that does nothing (no operation). +The sample implementation can then be filled with the application-specific +code. For an input file in the form +.B name.xsd +this option triggers the generation of the two additional C++ files in the form: +.B name-pimpl.hxx +(parser implementation header file) and +.B name-pimpl.cxx +(parser implementation source file). + +.IP "\fB\--generate-print-impl\fR" +Generate a sample parser implementation that prints the XML data to STDOUT. +For an input file in the form +.B name.xsd +this option triggers the generation of the two additional C++ files in the form: +.B name-pimpl.hxx +(parser implementation header file) and +.B name-pimpl.cxx +(parser implementation source file). + +.IP "\fB\--generate-test-driver\fR" +Generate a test driver for the sample parser implementation. For an input +file in the form +.B name.xsd +this option triggers the generation of an additional C++ file in the form +.BR name-driver.cxx . + +.IP "\fB\--force-overwrite\fR" +Force overwriting of the existing implementation and test driver files. +Use this option only if you do not mind loosing the changes you have made +in the sample implementation or test driver files. + +.IP "\fB\--root-element-first\fR" +Indicate that the first global element is the document root. This information +is used to generate the test driver for the sample implementation. + +.IP "\fB\--root-element-last\fR" +Indicate that the last global element is the document root. This information +is used to generate the test driver for the sample implementation. + +.IP "\fB\--root-element \fIelement\fR" +Indicate that +.I element +is the document root. This information is used to generate the test driver +for the sample implementation. + +.IP "\fB\--generate-xml-schema\fR" +Generate a C++ header file as if the schema being compiled defines the +XML Schema namespace. In particular, the resulting file will have +definitions for all parser skeletons and implementations corresponding +to the XML Schema built-in types. The schema file provided to the compiler +need not exist and is only used to derive the name of the resulting header +file. Use the +.B --extern-xml-schema +option to include this file in the generated files for other schemas. + +.IP "\fB\--extern-xml-schema \fIfile\fR" +Include a header file derived from +.I file +instead of generating the XML Schema namespace mapping inline. The provided +file need not exist and is only used to derive the name of the included +header file. Use the +.B --generate-xml-schema +option to generate this header file. + +.IP "\fB\--skel-type-suffix \fIsuffix\fR" +Use the provided +.I suffix +instead of the default +.B _pskel +to construct the names of generated parser skeletons. + +.IP "\fB\--skel-file-suffix \fIsuffix\fR" +Use the provided +.I suffix +instead of the default +.B -pskel +to construct the names of generated parser skeleton files. + +.IP "\fB\--impl-type-suffix \fIsuffix\fR" +Use the provided +.I suffix +instead of the default +.B _pimpl +to construct the names of parser implementations for the built-in XML +Schema types and sample parser implementations. + +.IP "\fB\--impl-file-suffix \fIsuffix\fR" +Use the provided +.I suffix +instead of the default +.B -pimpl +to construct the names of generated sample parser implementation files. + +\" +\" NAMING CONVENTION +\" + +.SH NAMING CONVENTION +The compiler can be instructed to use a particular naming convention in +the generated code. A number of widely-used conventions can be selected +using the +.B --type-naming +and +.B --function-naming +options. A custom naming convention can be achieved using the +.BR --type-regex , +.BR --accessor-regex , +.BR --one-accessor-regex , +.BR --opt-accessor-regex , +.BR --seq-accessor-regex , +.BR --modifier-regex , +.BR --one-modifier-regex , +.BR --opt-modifier-regex , +.BR --seq-modifier-regex , +.BR --parser-regex , +.BR --serializer-regex , +.BR --enumerator-regex , +and +.B --element-type-regex +options. + +The +.B --type-naming +option specifies the convention that should be used for naming C++ types. +Possible values for this option are +.B knr +(default), +.BR ucc , +and +.BR java . +The +.B knr +value (stands for K&R) signifies the standard, lower-case naming convention +with the underscore used as a word delimiter, for example: foo, foo_bar. +The +.B ucc +(stands for upper-camel-case) and +.B java +values a synonyms for the same naming convention where the first letter +of each word in the name is capitalized, for example: Foo, FooBar. + +Similarly, the +.B --function-naming +option specifies the convention that should be used for naming C++ functions. +Possible values for this option are +.B knr +(default), +.BR lcc , +and +.BR java . +The +.B knr +value (stands for K&R) signifies the standard, lower-case naming convention +with the underscore used as a word delimiter, for example: foo(), foo_bar(). +The +.B lcc +value (stands for lower-camel-case) signifies a naming convention where the +first letter of each word except the first is capitalized, for example: foo(), +fooBar(). The +.B java +naming convention is similar to the lower-camel-case one except that accessor +functions are prefixed with get, modifier functions are prefixed with set, +parsing functions are prefixed with parse, and serialization functions are +prefixed with serialize, for example: getFoo(), setFooBar(), parseRoot(), +serializeRoot(). + +Note that the naming conventions specified with the +.B --type-naming +and +.B --function-naming +options perform only limited transformations on the +names that come from the schema in the form of type, attribute, and element +names. In other words, to get consistent results, your schemas should follow +a similar naming convention as the one you would like to have in the generated +code. Alternatively, you can use the +.B --*-regex +options (discussed below) to perform further transformations on the names +that come from the schema. + +The +.BR --type-regex , +.BR --accessor-regex , +.BR --one-accessor-regex , +.BR --opt-accessor-regex , +.BR --seq-accessor-regex , +.BR --modifier-regex , +.BR --one-modifier-regex , +.BR --opt-modifier-regex , +.BR --seq-modifier-regex , +.BR --parser-regex , +.BR --serializer-regex , +.BR --enumerator-regex , +and +.B --element-type-regex +options allow you to specify extra regular expressions for each name +category in addition to the predefined set that is added depending on +the +.B --type-naming +and +.B --function-naming +options. Expressions that are provided with the +.B --*-regex +options are evaluated prior to any predefined expressions. This allows +you to selectively override some or all of the predefined transformations. +When debugging your own expressions, it is often useful to see which +expressions match which names. The +.B --name-regex-trace +option allows you to trace the process of applying +regular expressions to names. + +The value for the +.B --*-regex +options should be a perl-like regular expression in the form +.BI / pattern / replacement /\fR. +Any character can be used as a delimiter instead of +.BR / . +Escaping of the delimiter character in +.I pattern +or +.I replacement +is not supported. All the regular expressions for each category are pushed +into a category-specific stack with the last specified expression +considered first. The first match that succeeds is used. For the +.B --one-accessor-regex +(accessors with cardinality one), +.B --opt-accessor-regex +(accessors with cardinality optional), and +.B --seq-accessor-regex +(accessors with cardinality sequence) categories the +.B --accessor-regex +expressions are used as a fallback. For the +.BR --one-modifier-regex , +.BR --opt-modifier-regex , +and +.B --seq-modifier-regex +categories the +.B --modifier-regex +expressions are used as a fallback. For the +.B --element-type-regex +category the +.B --type-regex +expressions are used as a fallback. + +The type name expressions +.RB ( --type-regex ) +are evaluated on the name string that has the following format: + +[\fInamespace \fR]\fIname\fR[\fB,\fIname\fR][\fB,\fIname\fR][\fB,\fIname\fR] + +The element type name expressions +.RB ( --element-type-regex ), +effective only when the +.B --generate-element-type +option is specified, are evaluated on the name string that has the following +format: + +.I namespace name + +In the type name format the +.I namespace +part followed by a space is only present for global type names. For global +types and elements defined in schemas without a target namespace, the +.I namespace +part is empty but the space is still present. In the type name format after +the initial +.I name +component, up to three additional +.I name +components can be present, separated by commas. For example: + +.B http://example.com/hello type + +.B foo + +.B foo,iterator + +.B foo,const,iterator + +The following set of predefined regular expressions is used to transform +type names when the upper-camel-case naming convention is selected: + +.B /(?:[^ ]* )?([^,]+)/\\\\u$1/ + +.B /(?:[^ ]* )?([^,]+),([^,]+)/\\\\u$1\\\\u$2/ + +.B /(?:[^ ]* )?([^,]+),([^,]+),([^,]+)/\\\\u$1\\\\u$2\\\\u$3/ + +.B /(?:[^ ]* )?([^,]+),([^,]+),([^,]+),([^,]+)/\\\\u$1\\\\u$2\\\\u$3\\\\u$4/ + +The accessor and modifier expressions +.RB ( --*accessor-regex +and +.BR --*modifier-regex ) +are evaluated on the name string that has the following format: + +\fIname\fR[\fB,\fIname\fR][\fB,\fIname\fR] + +After the initial +.I name +component, up to two additional +.I name +components can be present, separated by commas. For example: + +.B foo + +.B dom,document + +.B foo,default,value + +The following set of predefined regular expressions is used to transform +accessor names when the +.B java +naming convention is selected: + +.B /([^,]+)/get\\\\u$1/ + +.B /([^,]+),([^,]+)/get\\\\u$1\\\\u$2/ + +.B /([^,]+),([^,]+),([^,]+)/get\\\\u$1\\\\u$2\\\\u$3/ + +For the parser, serializer, and enumerator categories, the corresponding +regular expressions are evaluated on local names of elements and on +enumeration values, respectively. For example, the following predefined +regular expression is used to transform parsing function names when the +.B java +naming convention is selected: + +.B /(.+)/parse\\\\u$1/ + +See also the REGEX AND SHELL QUOTING section below. + +\" +\" TYPE MAP +\" +.SH TYPE MAP +Type map files are used in C++/Parser to define a mapping between XML +Schema and C++ types. The compiler uses this information to determine +the return types of +.B post_* +functions in parser skeletons corresponding to XML Schema types +as well as argument types for callbacks corresponding to elements +and attributes of these types. + +The compiler has a set of predefined mapping rules that map built-in +XML Schema types to suitable C++ types (discussed below) and all +other types to +.BR void . +By providing your own type maps you can override these predefined rules. +The format of the type map file is presented below: + +.RS +.B namespace +.I schema-namespace +[ +.I cxx-namespace +] +.br +.B { +.br + ( +.B include +.IB file-name ; +)* +.br + ([ +.B type +] +.I schema-type cxx-ret-type +[ +.I cxx-arg-type +.RB ] ; +)* +.br +.B } +.br +.RE + +Both +.I schema-namespace +and +.I schema-type +are regex patterns while +.IR cxx-namespace , +.IR cxx-ret-type , +and +.I cxx-arg-type +are regex pattern substitutions. All names can be optionally enclosed +in \fR" "\fR, for example, to include white-spaces. + +.I schema-namespace +determines XML Schema namespace. Optional +.I cxx-namespace +is prefixed to every C++ type name in this namespace declaration. +.I cxx-ret-type +is a C++ type name that is used as a return type for the +.B post_* +functions. Optional +.I cxx-arg-type +is an argument type for callback functions corresponding to elements and +attributes of this type. If +.I cxx-arg-type +is not specified, it defaults to +.I cxx-ret-type +if +.I cxx-ret-type +ends with +.B * +or +.B & +(that is, it is a pointer or a reference) and +.B const +\fIcxx-ret-type\fB&\fR otherwise. +.I file-name +is a file name either in the \fR" "\fR or < > format and is added with the +.B #include +directive to the generated code. + +The \fB#\fR character starts a comment that ends with a new line or end of +file. To specify a name that contains \fB#\fR enclose it in \fR" "\fR. For +example: + +.RS +namespace http://www.example.com/xmlns/my my +.br +{ +.br + include "my.hxx"; +.br + + # Pass apples by value. + # + apple apple; +.br + + # Pass oranges as pointers. + # + orange orange_t*; +.br +} +.br +.RE + +In the example above, for the +.B http://www.example.com/xmlns/my#orange +XML Schema type, the +.B my::orange_t* +C++ type will be used as both return and argument types. + +Several namespace declarations can be specified in a single file. +The namespace declaration can also be completely omitted to map +types in a schema without a namespace. For instance: + +.RS +include "my.hxx"; +.br +apple apple; +.br + +namespace http://www.example.com/xmlns/my +.br +{ +.br + orange "const orange_t*"; +.br +} +.br +.RE + + +The compiler has a number of predefined mapping rules that can be +presented as the following map files. The string-based XML Schema +built-in types are mapped to either +.B std::string +or +.B std::wstring +depending on the character type selected with the +.B --char-type +option +.RB ( char +by default). + +.RS +namespace http://www.w3.org/2001/XMLSchema +.br +{ +.br + boolean bool bool; +.br + + byte "signed char" "signed char"; +.br + unsignedByte "unsigned char" "unsigned char"; +.br + + short short short; +.br + unsignedShort "unsigned short" "unsigned short"; +.br + + int int int; +.br + unsignedInt "unsigned int" "unsigned int"; +.br + + long "long long" "long long"; +.br + unsignedLong "unsigned long long" "unsigned long long"; +.br + + integer "long long" "long long"; +.br + + negativeInteger "long long" "long long"; +.br + nonPositiveInteger "long long" "long long"; +.br + + positiveInteger "unsigned long long" "unsigned long long"; +.br + nonNegativeInteger "unsigned long long" "unsigned long long"; +.br + + float float float; +.br + double double double; +.br + decimal double double; +.br + + string std::string; +.br + normalizedString std::string; +.br + token std::string; +.br + Name std::string; +.br + NMTOKEN std::string; +.br + NCName std::string; +.br + ID std::string; +.br + IDREF std::string; +.br + language std::string; +.br + anyURI std::string; +.br + + NMTOKENS xml_schema::string_sequence; +.br + IDREFS xml_schema::string_sequence; +.br + + QName xml_schema::qname; +.br + + base64Binary std::auto_ptr<xml_schema::buffer> +.br + std::auto_ptr<xml_schema::buffer>; +.br + hexBinary std::auto_ptr<xml_schema::buffer> +.br + std::auto_ptr<xml_schema::buffer>; +.br + + date xml_schema::date; +.br + dateTime xml_schema::date_time; +.br + duration xml_schema::duration; +.br + gDay xml_schema::gday; +.br + gMonth xml_schema::gmonth; +.br + gMonthDay xml_schema::gmonth_day; +.br + gYear xml_schema::gyear; +.br + gYearMonth xml_schema::gyear_month; +.br + time xml_schema::time; +.br +} +.br +.RE + + +The last predefined rule maps anything that wasn't mapped by previous +rules to +.BR void : + +.RS +namespace .* +.br +{ +.br + .* void void; +.br +} +.br +.RE + +When you provide your own type maps with the +.B --type-map +option, they are evaluated first. This allows you to selectively override +predefined rules. + +.\" +.\" REGEX AND SHELL QUOTING +.\" +.SH REGEX AND SHELL QUOTING +When entering a regular expression argument in the shell command line +it is often necessary to use quoting (enclosing the argument in " " +or ' ') in order to prevent the shell from interpreting certain +characters, for example, spaces as argument separators and $ as +variable expansions. + +Unfortunately it is hard to achieve this in a manner that is portable +across POSIX shells, such as those found on GNU/Linux and UNIX, and +Windows shell. For example, if you use " " for quoting you will get +a wrong result with POSIX shells if your expression contains $. The +standard way of dealing with this on POSIX systems is to use ' ' +instead. Unfortunately, Windows shell does not remove ' ' from +arguments when they are passed to applications. As a result you may +have to use ' ' for POSIX and " " for Windows ($ is not treated as +a special character on Windows). + +Alternatively, you can save regular expression options into a file, +one option per line, and use this file with the +.B --options-file +option. With this approach you don't need to worry about shell quoting. + +.\" +.\" DIAGNOSTICS +.\" +.SH DIAGNOSTICS +If the input file is not a valid W3C XML Schema definition, +.B xsd +will issue diagnostic messages to +.B STDERR +and exit with non-zero exit code. +.SH BUGS +Send bug reports to the xsd-users@codesynthesis.com mailing list. +.SH COPYRIGHT +Copyright (c) 2005-2010 Code Synthesis Tools CC. + +Permission is granted to copy, distribute and/or modify this +document under the terms of the GNU Free Documentation License, +version 1.2; with no Invariant Sections, no Front-Cover Texts and +no Back-Cover Texts. Copy of the license can be obtained from +http://codesynthesis.com/licenses/fdl-1.2.txt diff --git a/xsd/documentation/xsd.xhtml b/xsd/documentation/xsd.xhtml new file mode 100644 index 0000000..4acf822 --- /dev/null +++ b/xsd/documentation/xsd.xhtml @@ -0,0 +1,1600 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> + +<head> + <title>XSD 3.3.0 Compiler Command Line Manual</title> + + <meta name="copyright" content="© 2005-2010 Code Synthesis Tools CC"/> + <meta name="keywords" content="xsd,xml,schema,c++,mapping,data,binding,code,generator,manual,man,page"/> + <meta name="description" content="XSD Compiler Command Line Manual"/> + + <link rel="stylesheet" type="text/css" href="default.css" /> + +<style type="text/css"> + + #synopsis { + list-style-type: none; + } + + #synopsis li { + padding-top : 0.0em; + padding-bottom : 0.0em; + } + + #commands dt { + padding-top : 0.4em; + } + + #commands dd { + padding-bottom : 0.4em; + padding-left : 2em; + } + + .options dt { + padding-top : 0.4em; + } + + .options dd { + padding-top : 0.1em; + padding-bottom : 0.4em; + padding-left : 1.4em; + } + +</style> +</head> + +<body> +<div id="container"> + <div id="content"> + + <h1>NAME</h1> + + <p>xsd - W3C XML Schema to C++ Compiler</p> + + <h1>SYNOPSIS</h1> + + <dl id="synopsis"> + <dt><code><b>xsd</b> <i>command</i> [<i>options</i>] <i>file</i> [<i>file</i> ...]</code></dt> + <dt><code><b>xsd help</b> [<i>command</i>]</code></dt> + <dt><code><b>xsd version</b></code></dt> + </dl> + + <h1>DESCRIPTION</h1> + + <p><code><b>xsd</b></code> generates vocabulary-specific, statically-typed + C++ mapping from W3C XML Schema definitions. Particular mapping to + produce is selected by a <code><i>command</i></code>. Each mapping has + a number of mapping-specific <code><i>options</i></code> that should + appear, if any, after the <code><i>command</i></code>. Input files should + be W3C XML Schema definitions. The exact set of the generated files depends + on the selected mapping and options.</p> + + <h1>COMMANDS</h1> + + <dl id="commands"> + <dt><code><b>cxx-tree</b></code></dt> + <dd>Generate the C++/Tree mapping. For each input file in the form + <code><b>name.xsd</b></code> the following C++ files are generated: + <code><b>name.hxx</b></code> (header file), + <code><b>name.ixx</b></code> (inline file, generated only if the + <code><b>--generate-inline</b></code> option is specified), + <code><b>name.cxx</b></code> (source file), and + <code><b>name-fwd.hxx</b></code> (forward declaration file, generated + only if the <code><b>--generate-forward</b></code> option is + specified).</dd> + + <dt><code><b>cxx-parser</b></code></dt> + <dd>Generate the C++/Parser mapping. For each input file in the form + <code><b>name.xsd</b></code> the following C++ files are generated: + <code><b>name-pskel.hxx</b></code> (parser skeleton header file), + <code><b>name-pskel.ixx</b></code> (parser skeleton inline file, + generated only if the <code><b>--generate-inline</b></code> + option is specified), and + <code><b>name-pskel.cxx</b></code> (parser skeleton source file). + If the <code><b>--generate-noop-impl</b></code> or + <code><b>--generate-print-impl</b></code> option is specified, + the following additional sample implementation files are generated: + <code><b>name-pimpl.hxx</b></code> (parser implementation header + file) and + <code><b>name-pimpl.cxx</b></code> (parser implementation source + file). If the <code><b>--generate-test-driver</b></code> option + is specified, the additional <code><b>name-driver.cxx</b></code> + test driver file is generated.</dd> + + <dt><code><b>help</b></code></dt> + <dd>Print usage information and exit. Use + <p><code><b>xsd help</b> <i>command</i></code></p> + for command-specific help. + </dd> + + <dt><code><b>version</b></code></dt> + <dd>Print version and exit.</dd> + </dl> + + <h1>OPTIONS</h1> + + <p>Command-specific <code><i>options</i></code>, if any, should appear + after the corresponding <code><i>command</i></code>.</p> + + <h2>COMMON OPTIONS</h2> + + <dl class="options"> + <dt><code><b>--char-type</b> <i>type</i></code></dt> + <dd>Generate code using the provided character <code><i>type</i></code> + instead of the default <code><b>char</b></code>. Valid values + are <code><b>char</b></code> and <code><b>wchar_t</b></code>.</dd> + + <dt><code><b>--char-encoding</b> <i>enc</i></code></dt> + <dd>Specify the character encoding that should be used in the generated + code. Valid values for the <code><b>char</b></code> character type + are <code><b>utf8</b></code> (default), <code><b>iso8859-1</b></code>, + <code><b>lcp</b></code> (Xerces-C++ local code page), and + <code><b>custom</b></code>. If you pass <code><b>custom</b></code> as + the value then you will need to include the transcoder implementation + header for your encoding at the beginning of the generated header + files (see the <code><b>--hxx-prologue</b></code> option). + + <p>For the <code><b>wchar_t</b></code> character type the only valid + value is <code><b>auto</b></code> and the encoding is automatically + selected between UTF-16 and UTF-32/UCS-4, depending on the + <code><b>wchar_t</b></code> type size.</p></dd> + + <dt><code><b>--output-dir</b> <i>dir</i></code></dt> + <dd>Write generated files to <code><i>dir</i></code> instead of + the current directory.</dd> + + <dt><code><b>--namespace-map</b> <i>xns</i><b>=</b><i>cns</i></code></dt> + <dd>Map XML Schema namespace <i>xns</i> to C++ namespace <i>cns</i>. + Repeat this option to specify mapping for more than one XML Schema + namespace. For example, the following option: + + <p><code><b>--namespace-map http://example.com/foo/bar=foo::bar</b></code></p> + + <p>will map the <code><b>http://example.com/foo/bar</b></code> + XML Schema namespace to the <code><b>foo::bar</b></code> C++ + namespace.</p> + </dd> + + <dt><code><b>--namespace-regex</b> <i>regex</i></code></dt> + <dd>Add <code><i>regex</i></code> to the list of regular expressions + used to translate XML Schema namespace names to C++ namespace + names. <code><i>regex</i></code> is a perl-like regular expression in + the form <code><b>/</b><i>pattern</i><b>/</b><i>replacement</i><b>/</b></code>. + Any character can be used as a delimiter instead of <code><b>/</b></code>. + Escaping of the delimiter character in <code><i>pattern</i></code> or + <code><i>replacement</i></code> is not supported. + + <p>All the regular expressions are pushed into a stack with the last + specified expression considered first. The first match that + succeeds is used. Regular expressions are applied to a string + in the form</p> + + <p><code><i>filename</i> <i>namespace</i></code></p> + + <p>For example, if you have file <code><b>hello.xsd</b></code> + with namespace <code><b>http://example.com/hello</b></code> and you run + <code><b>xsd</b></code> on this file, then the string in question + will be:</p> + + <p><code><b>hello.xsd. http://example.com/hello</b></code></p> + + <p>For the built-in XML Schema namespace the string is:</p> + + <p><code><b>XMLSchema.xsd http://www.w3.org/2001/XMLSchema</b></code></p> + + <p>The following three steps are performed for each regular expression + until the match is found:</p> + + <ol> + <li>The expression is applied and if the result is empty the + next expression is considered.</li> + + <li>All <code><b>/</b></code> are replaced with + <code><b>::</b></code>.</li> + + <li>The result is verified to be a valid C++ scope name (e.g., + <code><b>foo::bar</b></code>). If this test succeeds, the + result is used as a C++ namespace name.</li> + </ol> + + <p>As an example, the following expression maps XML Schema + namespaces in the form + <code><b>http://example.com/foo/bar</b></code> to C++ + namespaces in the form <code><b>foo::bar</b></code>:</p> + + <p><code><b>%.* http://example.com/(.+)%$1%</b></code></p> + + <p>See also the REGEX AND SHELL QUOTING section below.</p> + </dd> + + <dt><code><b>--namespace-regex-trace</b></code></dt> + <dd>Trace the process of applying regular expressions specified with + the <code><b>--namespace-regex</b></code> option. Use this option + to find out why your regular expressions don't do what you expected + them to do. + </dd> + + <!-- Reserved names --> + + <dt><code><b>--reserved-name</b> <i>name</i>[<b>=</b><i>rep</i>]</code></dt> + <dd>Add <code><i>name</i></code> to the list of names that should not + be used as identifiers. The name can optionally be followed by + <code><b>=</b></code> and the replacement name that should be + used instead. All the C++ keywords are already in this list. + </dd> + + <!-- Include --> + + <dt><code><b>--include-with-brackets</b></code></dt> + <dd>Use angle brackets (<>) instead of quotes ("") in + generated <code><b>#include</b></code> directives. + </dd> + + <dt><code><b>--include-prefix</b> <i>prefix</i></code></dt> + <dd>Add <code><i>prefix</i></code> to generated <code><b>#include</b></code> + directive paths. + + <p>For example, if you had the following import element in your + schema</p> + + <p><code><b><import namespace="..." schemaLocation="base.xsd"/></b></code></p> + + <p>and compiled this fragment with <code><b>--include-prefix schemas/</b></code>, + then the include directive in the generated code would be:</p> + + <p><code><b>#include "schemas/base.hxx"</b></code></p> + </dd> + + <dt><code><b>--include-regex</b> <i>regex</i></code></dt> + <dd>Add <code><i>regex</i></code> to the list of regular expressions + used to transform <code><b>#include</b></code> directive paths. + <code><i>regex</i></code> is a perl-like regular expression in + the form <code><b>/</b><i>pattern</i><b>/</b><i>replacement</i><b>/</b></code>. + Any character can be used as a delimiter instead of <code><b>/</b></code>. + Escaping of the delimiter character in <code><i>pattern</i></code> or + <code><i>replacement</i></code> is not supported. + + <p>All the regular expressions are pushed into a stack with the last + specified expression considered first. The first match that + succeeds is used.</p> + + <p>As an example, the following expression transforms paths + in the form <code><b>schemas/foo/bar</b></code> to paths + in the form <code><b>generated/foo/bar</b></code>:</p> + + <p><code><b>%schemas/(.+)%generated/$1%</b></code></p> + + <p>See also the REGEX AND SHELL QUOTING section below.</p> + </dd> + + <dt><code><b>--include-regex-trace</b></code></dt> + <dd>Trace the process of applying regular expressions specified with + the <code><b>--include-regex</b></code> option. Use this option + to find out why your regular expressions don't do what you expected + them to do. + </dd> + + <dt><code><b>--guard-prefix</b> <i>prefix</i></code></dt> + <dd>Add <code><i>prefix</i></code> to generated header inclusion guards. + The prefix is transformed to upper case and characters that are + illegal in a preprocessor macro name are replaced with underscores. + If this option is not specified then the directory part of the + input schema file is used as a prefix. + </dd> + + <!-- Suffixes. --> + + <dt><code><b>--hxx-suffix</b> <i>suffix</i></code></dt> + <dd>Use the provided <code><i>suffix</i></code> instead of the default + <code><b>.hxx</b></code> to construct the name of the header file. + Note that this suffix is also used to construct names for + included/imported schemas. + </dd> + + <dt><code><b>--ixx-suffix</b> <i>suffix</i></code></dt> + <dd>Use the provided <code><i>suffix</i></code> instead of the default + <code><b>.ixx</b></code> to construct the name of the inline file. + </dd> + + <dt><code><b>--cxx-suffix</b> <i>suffix</i></code></dt> + <dd>Use the provided <code><i>suffix</i></code> instead of the default + <code><b>.cxx</b></code> to construct the name of the source file. + </dd> + + <dt><code><b>--hxx-regex</b> <i>regex</i></code></dt> + <dd>Use the provided expression to construct the name of the header + file. <code><i>regex</i></code> is a perl-like regular expression + in the form + <code><b>/</b><i>pattern</i><b>/</b><i>replacement</i><b>/</b></code>. + Note that this expression is also used to construct names for + included/imported schemas. See also the REGEX AND SHELL QUOTING + section below. + </dd> + + <dt><code><b>--ixx-regex</b> <i>regex</i></code></dt> + <dd>Use the provided expression to construct the name of the inline + file. <code><i>regex</i></code> is a perl-like regular expression + in the form + <code><b>/</b><i>pattern</i><b>/</b><i>replacement</i><b>/</b></code>. + See also the REGEX AND SHELL QUOTING section below. + </dd> + + <dt><code><b>--cxx-regex</b> <i>regex</i></code></dt> + <dd>Use the provided expression to construct the name of the source + file. <code><i>regex</i></code> is a perl-like regular expression + in the form + <code><b>/</b><i>pattern</i><b>/</b><i>replacement</i><b>/</b></code>. + See also the REGEX AND SHELL QUOTING section below. + </dd> + + + <dt><code><b>--hxx-prologue</b> <i>text</i></code></dt> + <dd>Insert <code><i>text</i></code> at the beginning of the header file. + </dd> + + <dt><code><b>--ixx-prologue</b> <i>text</i></code></dt> + <dd>Insert <code><i>text</i></code> at the beginning of the inline file. + </dd> + + <dt><code><b>--cxx-prologue</b> <i>text</i></code></dt> + <dd>Insert <code><i>text</i></code> at the beginning of the source file. + </dd> + + <dt><code><b>--prologue</b> <i>text</i></code></dt> + <dd>Insert <code><i>text</i></code> at the beginning of each generated + file for which there is no file-specific prologue. + </dd> + + <dt><code><b>--hxx-epilogue</b> <i>text</i></code></dt> + <dd>Insert <code><i>text</i></code> at the end of the header file. + </dd> + + <dt><code><b>--ixx-epilogue</b> <i>text</i></code></dt> + <dd>Insert <code><i>text</i></code> at the end of the inline file. + </dd> + + <dt><code><b>--cxx-epilogue</b> <i>text</i></code></dt> + <dd>Insert <code><i>text</i></code> at the end of the source file. + </dd> + + <dt><code><b>--epilogue</b> <i>text</i></code></dt> + <dd>Insert <code><i>text</i></code> at the end of each generated + file for which there is no file-specific epilogue. + </dd> + + + <dt><code><b>--hxx-prologue-file</b> <i>file</i></code></dt> + <dd>Insert the content of the <code><i>file</i></code> at the beginning + of the header file. + </dd> + + <dt><code><b>--ixx-prologue-file</b> <i>file</i></code></dt> + <dd>Insert the content of the <code><i>file</i></code> at the beginning + of the inline file. + </dd> + + <dt><code><b>--cxx-prologue-file</b> <i>file</i></code></dt> + <dd>Insert the content of the <code><i>file</i></code> at the beginning + of the source file. + </dd> + + <dt><code><b>--prologue-file</b> <i>file</i></code></dt> + <dd>Insert the content of the <code><i>file</i></code> at the beginning + of each generated file for which there is no file-specific prologue + file. + </dd> + + <dt><code><b>--hxx-epilogue-file</b> <i>file</i></code></dt> + <dd>Insert the content of the <code><i>file</i></code> at the end of the + header file. + </dd> + + <dt><code><b>--ixx-epilogue-file</b> <i>file</i></code></dt> + <dd>Insert the content of the <code><i>file</i></code> at the end of the + inline file. + </dd> + + <dt><code><b>--cxx-epilogue-file</b> <i>file</i></code></dt> + <dd>Insert the content of the <code><i>file</i></code> at the end of the + source file. + </dd> + + <dt><code><b>--epilogue-file</b> <i>file</i></code></dt> + <dd>Insert the content of the <code><i>file</i></code> at the end of each + generated file for which there is no file-specific epilogue file. + </dd> + + <dt><code><b>--custom-literals</b> <i>file</i></code></dt> + <dd>Load custom XML string to C++ literal mappings from + <code><i>file</i></code>. This mechanism can be useful if you + are using a custom character encoding and some of the strings + in your schemas, for example element/attribute names or enumeration + values, contain non-ASCII characters. In this case you will need + to provide a custom mapping to C++ literals for such + strings. The format of this file is specified in the + <code><b>custom-literals.xsd</b></code> XML Schema file that + can be found in the documentation directory. + </dd> + + <dt><code><b>--export-symbol</b> <i>symbol</i></code></dt> + <dd>Insert <code><i>symbol</i></code> in places where DLL + export/import control statements + (<code><b>__declspec(dllexport/dllimport)</b></code>) are necessary. + </dd> + + <dt><code><b>--export-xml-schema</b></code></dt> + <dd>Export/import types in the XML Schema namespace using the export + symbol provided with the <code><b>--export-symbol</b></code> option. + The <code><b>XSD_NO_EXPORT</b></code> macro can be used to omit + this code during C++ compilation, which may be useful if you + would like to use the same generated code across multiple platforms. + </dd> + + <dt><code><b>--export-maps</b></code></dt> + <dd>Export polymorphism support maps from a Win32 DLL into which this + generated code is linked. This is necessary when your type hierarchy + is split across several DLLs since otherwise each DLL will have its + own set of maps. In this situation the generated code for the DLL + which contains base types and/or substitution group heads should be + compiled with this option and the generated code for all other + DLLs should be compiled with <code><b>--import-maps</b></code>. + This option is only valid together with + <code><b>--generate-polymorphic</b></code>. + The <code><b>XSD_NO_EXPORT</b></code> macro can be used to omit + this code during C++ compilation, which may be useful if you + would like to use the same generated code across multiple platforms. + </dd> + + <dt><code><b>--import-maps</b></code></dt> + <dd>Import polymorphism support maps to a Win32 DLL or executable into + which this generated code is linked. See the <code><b>--export-maps</b></code> + option documentation for details. This options is only valid together + with <code><b>--generate-polymorphic</b></code>. + The <code><b>XSD_NO_EXPORT</b></code> macro can be used to omit + this code during C++ compilation, which may be useful if you + would like to use the same generated code across multiple platforms. + </dd> + + <dt><code><b>--disable-warning</b> <i>warn</i></code></dt> + <dd>Disable printing warning with id <i>warn</i>. If <code><b>all</b></code> + is specified for the warning id then all warnings are disabled. + </dd> + + <!-- misc options --> + + <dt><code><b>--show-sloc</b></code></dt> + <dd>Show the number of generated physical source lines of code (SLOC). + </dd> + + <dt><code><b>--sloc-limit</b> <i>num</i></code></dt> + <dd>Check that the number of generated physical source lines of code + (SLOC) does not exceed <code><i>num</i></code>. + </dd> + + <dt><code><b>--options-file</b> <i>file</i></code></dt> + <dd>Read additional options from <code><i>file</i></code>. Each option + should appear on a separate line optionally followed by space and + an argument. Empty lines and lines starting with <code><b>#</b></code> + are ignored. The semantics of providing options in a + file is equivalent to providing the same set of options in + the same order in the command line at the point where the + <code><b>--options-file</b></code> option is specified + except that shell escaping and quoting is not required. + Repeat this option to specify more than one options files. + </dd> + + <dt><code><b>--proprietary-license</b></code></dt> + <dd>Indicate that the generated code is licensed under a proprietary + license instead of the GPL. + </dd> + + <!-- Anonymous options. --> + + <dt><code><b>--preserve-anonymous</b></code></dt> + <dd>Preserve anonymous types. By default anonymous types are + automatically named with names derived from the enclosing + elements/attributes. Because mappings implemented by this + compiler require all types to be named, this option is only + useful if you want to make sure your schemas don't have + anonymous types. + </dd> + + <dt><code><b>--show-anonymous</b></code></dt> + <dd>Show elements and attributes that are of anonymous types. + This option only makes sense together with the + <code><b>--preserve-anonymous</b></code> option. + </dd> + + <dt><code><b>--anonymous-regex</b> <i>regex</i></code></dt> + <dd>Add <code><i>regex</i></code> to the list of regular expressions + used to derive names for anonymous types from the enclosing + attributes/elements. <code><i>regex</i></code> is a perl-like regular + expression in the form + <code><b>/</b><i>pattern</i><b>/</b><i>replacement</i><b>/</b></code>. + Any character can be used as a delimiter instead of <code><b>/</b></code>. + Escaping of the delimiter character in <code><i>pattern</i></code> or + <code><i>replacement</i></code> is not supported. + + <p>All the regular expressions are pushed into a stack with the last + specified expression considered first. The first match that + succeeds is used. Regular expressions are applied to a string + in the form</p> + + <p><code><i>filename</i> <i>namespace</i> <i>xpath</i></code></p> + + <p>For instance:</p> + + <p><code><b>hello.xsd http://example.com/hello element</b></code></p> + <p><code><b>hello.xsd http://example.com/hello type/element</b></code></p> + + <p>As an example, the following expression makes all the derived + names start with capital letters. This could be useful when + your naming convention requires type names to start with + capital letters:</p> + + <p><code><b>%.* .* (.+/)*(.+)%\u$2%</b></code></p> + + <p>See also the REGEX AND SHELL QUOTING section below.</p> + </dd> + + <dt><code><b>--anonymous-regex-trace</b></code></dt> + <dd>Trace the process of applying regular expressions specified with + the <code><b>--anonymous-regex</b></code> option. Use this option + to find out why your regular expressions don't do what you expected + them to do. + </dd> + + <!-- Location mapping options. --> + + <dt><code><b>--location-map</b> <i>ol</i><b>=</b><i>nl</i></code></dt> + <dd>Map the original schema location <i>ol</i> that is specified in + the XML Schema include or import elements to new schema + location <i>nl</i>. Repeat this option to map more than one + schema location. For example, the following option maps the + <code><b>http://example.com/foo.xsd</b></code> URL to the + <code><b>foo.xsd</b></code> local file. + + <p><code><b>--location-map http://example.com/foo.xsd=foo.xsd</b></code></p> + </dd> + + <dt><code><b>--location-regex</b> <i>regex</i></code></dt> + <dd>Add <code><i>regex</i></code> to the list of regular expressions + used to map schema locations that are specified in the XML Schema + include or import elements. <code><i>regex</i></code> is a perl-like + regular expression in the form + <code><b>/</b><i>pattern</i><b>/</b><i>replacement</i><b>/</b></code>. + Any character can be used as a delimiter instead of <code><b>/</b></code>. + Escaping of the delimiter character in <code><i>pattern</i></code> or + <code><i>replacement</i></code> is not supported. All the regular + expressions are pushed into a stack with the last specified + expression considered first. The first match that succeeds is used. + + <p>For example, the following expression maps URL locations in the form + <code><b>http://example.com/foo/bar.xsd</b></code> to local files + in the form <code><b>bar.xsd</b></code>:</p> + + <p><code><b>%http://.+/(.+)%$1%</b></code></p> + + <p>See also the REGEX AND SHELL QUOTING section below.</p> + </dd> + + <dt><code><b>--location-regex-trace</b></code></dt> + <dd>Trace the process of applying regular expressions specified with + the <code><b>--location-regex</b></code> option. Use this option + to find out why your regular expressions don't do what you expected + them to do. + </dd> + + <!-- File-per-type compilation mode options. --> + + <dt><code><b>--file-per-type</b></code></dt> + <dd>Generate a separate set of C++ files for each type defined in XML + Schema. Note that in this mode you only need to compile the root + schema(s) and the code will be generated for all included and + imported schemas. This compilation mode is primarily useful when + some of your schemas cannot be compiled separately or have cyclic + dependencies which involve type inheritance. Other options related + to this mode are: + <code><b>--type-file-regex</b></code>, + <code><b>--schema-file-regex</b></code>, and + <code><b>--file-list</b></code>. + </dd> + + + <dt><code><b>--type-file-regex</b> <i>regex</i></code></dt> + <dd>Add <code><i>regex</i></code> to the list of regular expressions + used to translate type names to file names when the + <code><b>--file-per-type</b></code> option is specified. + <code><i>regex</i></code> is a perl-like regular expression in the form + <code><b>/</b><i>pattern</i><b>/</b><i>replacement</i><b>/</b></code>. + Any character can be used as a delimiter instead of <code><b>/</b></code>. + Escaping of the delimiter character in <code><i>pattern</i></code> or + <code><i>replacement</i></code> is not supported. All the regular + expressions are pushed into a stack with the last specified + expression considered first. The first match that succeeds is used. + Regular expressions are applied to a string in the form + + <p><code><i>namespace</i> <i>type-name</i></code></p> + + <p>For example, the following expression maps type <code><b>foo</b></code> + that is defined in the <code><b>http://example.com/bar</b></code> + namespace to file name <code><b>bar-foo</b></code>:</p> + + <p><code><b>%http://example.com/(.+) (.+)%$1-$2%</b></code></p> + + <p>See also the REGEX AND SHELL QUOTING section below.</p> + </dd> + + <dt><code><b>--type-file-regex-trace</b></code></dt> + <dd>Trace the process of applying regular expressions specified with + the <code><b>--type-file-regex</b></code> option. Use this option + to find out why your regular expressions don't do what you expected + them to do. + </dd> + + <dt><code><b>--schema-file-regex</b> <i>regex</i></code></dt> + <dd>Add <code><i>regex</i></code> to the list of regular expressions + used to translate schema file names when the + <code><b>--file-per-type</b></code> option is specified. + <code><i>regex</i></code> is a perl-like regular expression in the form + <code><b>/</b><i>pattern</i><b>/</b><i>replacement</i><b>/</b></code>. + Any character can be used as a delimiter instead of <code><b>/</b></code>. + Escaping of the delimiter character in <code><i>pattern</i></code> or + <code><i>replacement</i></code> is not supported. All the regular + expressions are pushed into a stack with the last specified + expression considered first. The first match that succeeds is used. + Regular expressions are applied to the absolute filesystem path + of a schema file and the result, including the directory part, + if any, is used to derive the <code><b>#include</b></code> directive + paths as well as the generated C++ file paths. This option, along + with <code><b>--type-file-regex</b></code> are primarily used to + place the generated files into subdirectories or to resolve file + name conflicts. + + <p>For example, the following expression maps schema files in the + <code><b>foo/1.0.0/</b></code> subdirectory to the files in + the <code><b>foo/</b></code> subdirectory. As a result, the + <code><b>#include</b></code> directive paths for such schemas + will be in the <code><b>foo/schema.hxx</b></code> form and + the generated C++ files will be placed into the + <code><b>foo/</b></code> subdirectory:</p> + + <p><code><b>%.*/foo/1.0.0/(.+)%foo/$1%</b></code></p> + + <p>See also the REGEX AND SHELL QUOTING section below.</p> + </dd> + + <dt><code><b>--schema-file-regex-trace</b></code></dt> + <dd>Trace the process of applying regular expressions specified with + the <code><b>--schema-file-regex</b></code> option. Use this option + to find out why your regular expressions don't do what you expected + them to do. + </dd> + + <!-- File list options. --> + + <dt><code><b>--file-list</b> <i>file</i></code></dt> + <dd>Write a list of generated C++ files to <code><i>file</i></code>. + This option is primarily useful in the file-per-type compilation + mode (<code><b>--file-per-type</b></code>) to create a list of + generated C++ files, for example, as a makefile fragment. + </dd> + + <dt><code><b>--file-list-prologue</b> <i>text</i></code></dt> + <dd>Insert <code><i>text</i></code> at the beginning of the file list. + As a convenience, all occurrences of the \n character sequence in + <code><i>text</i></code> are replaced with new lines. This option + can, for example, be used to assign the generated file list to a + makefile variable. + </dd> + + <dt><code><b>--file-list-epilogue</b> <i>text</i></code></dt> + <dd>Insert <code><i>text</i></code> at the end of the file list. + As a convenience, all occurrences of the \n character sequence in + <code><i>text</i></code> are replaced with new lines. + </dd> + + <dt><code><b>--file-list-delim</b> <i>text</i></code></dt> + <dd>Delimit file names written to the file list with + <code><i>text</i></code> instead of new lines. As a convenience, + all occurrences of the \n character sequence in + <code><i>text</i></code> are replaced with new lines. + </dd> + + </dl> + + <h2>CXX-TREE COMMAND OPTIONS</h2> + + <dl class="options"> + <dt><code><b>--generate-polymorphic</b></code></dt> + <dd>Generate polymorphism-aware code. Specify this option if you use + substitution groups or <code><b>xsi:type</b></code>. Use the + <code><b>--polymorphic-type</b></code> or + <code><b>--polymorphic-type-all</b></code> option to specify + which type hierarchies are polymorphic.</dd> + + <dt><code><b>--polymorphic-type</b></code> <i>type</i></dt> + <dd>Indicate that <code><i>type</i></code> is a root of a polymorphic + type hierarchy. The compiler can often automatically determine + which types are polymorphic based on the substitution group + declarations. However, you may need to use this option if you are + not using substitution groups or if substitution groups are defined + in another schema. You need to specify this option when compiling + every schema file that references <code><i>type</i></code>. The + <code><i>type</i></code> argument is an XML Schema type name that + can be optionally qualified with a namespace in the + <code><i>namespace</i><b>#</b><i>name</i></code> form.</dd> + + <dt><code><b>--polymorphic-type-all</b></code></dt> + <dd>Indicate that all types should be treated as polymorphic.</dd> + + <dt><code><b>--generate-serialization</b></code></dt> + <dd>Generate serialization functions. Serialization functions + convert the object model back to XML.</dd> + + <dt><code><b>--generate-inline</b></code></dt> + <dd>Generate simple functions inline. This option triggers creation + of the inline file.</dd> + + <dt><code><b>--generate-ostream</b></code></dt> + <dd>Generate ostream insertion operators + (<code><b>operator<<</b></code>) for generated types. This + allows to easily print a fragment or the whole object model + for debugging or logging.</dd> + + <dt><code><b>--generate-doxygen</b></code></dt> + <dd>Generate documentation comments suitable for extraction by the + Doxygen documentation system. Documentation from annotations + is added to the comments if present in the schema.</dd> + + <dt><code><b>--generate-comparison</b></code></dt> + <dd>Generate comparison operators + (<code><b>operator==</b></code> and <code><b>operator!=</b></code>) + for complex types. Comparison is performed memberwise.</dd> + + <dt><code><b>--generate-default-ctor</b></code></dt> + <dd>Generate default constructors even for types that have required + members. Required members of an instance constructed using such a + constructor are not initialized and accessing them results in + undefined behavior.</dd> + + <dt><code><b>--generate-from-base-ctor</b></code></dt> + <dd>Generate constructors that expect an instance of a base type + followed by all required members.</dd> + + <dt><code><b>--generate-detach</b></code></dt> + <dd>Generate detach functions for required elements and attributes + (detach functions for optional and sequence cardinalities are + provided by the respective containers). These functions, for + example, allow you to move sub-trees in the object model either + within the same tree or between different trees.</dd> + + <dt><code><b>--generate-wildcard</b></code></dt> + <dd>Generate accessors and modifiers as well as parsing and serialization + code for XML Schema wildcards (<code><b>any</b></code> and + <code><b>anyAttribute</b></code>). XML content matched by wildcards + is presented as DOM fragments. Note that you need to initialize the + Xerces-C++ runtime if you are using this option.</dd> + + <dt><code><b>--generate-insertion</b> <i>os</i></code></dt> + <dd>Generate data representation stream insertion operators for + the <code><i>os</i></code> output stream type. Repeat this + option to specify more than one stream type. The ACE CDR stream + (<code><b>ACE_OutputCDR</b></code>) and RPC XDR are recognized + by the compiler and the necessary <code><b>#include</b></code> + directives are automatically generated. For custom stream + types use the <code><b>--hxx-prologue*</b></code> options + to provide the necessary declarations.</dd> + + <dt><code><b>--generate-extraction</b> <i>is</i></code></dt> + <dd>Generate data representation stream extraction constructors for + the <code><i>is</i></code> input stream type. Repeat this + option to specify more than one stream type. The ACE CDR stream + (<code><b>ACE_InputCDR</b></code>) and RPC XDR are recognized by + the compiler and the necessary <code><b>#include</b></code> + directives are automatically generated. For custom stream + types use the <code><b>--hxx-prologue*</b></code> options + to provide the necessary declarations.</dd> + + <dt><code><b>--generate-forward</b></code></dt> + <dd>Generate a separate header file with forward declarations for the + types being generated.</dd> + + <dt><code><b>--generate-xml-schema</b></code></dt> + <dd>Generate a C++ header file as if the schema being compiled defines + the XML Schema namespace. In particular, the resulting file will + have definitions for all XML Schema built-in types. The schema file + provided to the compiler need not exist and is only used to derive + the name of the resulting header file. Use the + <code><b>--extern-xml-schema</b></code> option to include this file + in the generated files for other schemas.</dd> + + <dt><code><b>--extern-xml-schema</b> <i>file</i></code></dt> + <dd>Include a header file derived from <i>file</i> instead of + generating the XML Schema namespace mapping inline. The provided + file need not exist and is only used to derive the name of the + included header file. Use the <code><b>--generate-xml-schema</b></code> + option to generate this header file.</dd> + + <dt><code><b>--suppress-parsing</b></code></dt> + <dd>Suppress the generation of the parsing functions and constructors. + Use this option to reduce the generated code size when parsing + from XML is not needed.</dd> + + <dt><code><b>--generate-element-type</b></code></dt> + <dd>Generate types instead of parsing and serialization functions + for root elements. This is primarily useful to distinguish + object models with the same root type but with different root + elements.</dd> + + <dt><code><b>--generate-element-map</b></code></dt> + <dd>Generate a root element map that allows uniform parsing and + serialization of multiple root elements. This option is only + valid together with <code><b>--generate-element-type</b></code>. + </dd> + + <dt><code><b>--generate-intellisense</b></code></dt> + <dd>Generate workarounds for IntelliSense bugs in Visual Studio + 2005 (8.0). When this option is used, the resulting code is + slightly more verbose. IntelliSense in Visual Studio 2008 (9.0) + does not require these workarounds. Support for IntelliSense in + Visual Studio 2003 (7.1) is improved with this option but is + still incomplete.</dd> + + <dt><code><b>--omit-default-attributes</b></code></dt> + <dd>Omit attributes with default and fixed values from serialized + XML documents.</dd> + + <!-- Naming --> + + <dt><code><b>--type-naming</b> <i>style</i></code></dt> + <dd>Specify the type naming convention that should be used in the + generated code. Valid styles are <code><b>knr</b></code> + (default), <code><b>ucc</b></code>, and <code><b>java</b></code>. + See the NAMING CONVENTION section below for more information. + </dd> + + <dt><code><b>--function-naming</b> <i>style</i></code></dt> + <dd>Specify the function naming convention that should be used in the + generated code. Valid styles are <code><b>knr</b></code> + (default), <code><b>lcc</b></code>, and <code><b>java</b></code>. + See the NAMING CONVENTION section below for more information. + </dd> + + <dt><code><b>--type-regex</b> <i>regex</i></code></dt> + <dd>Add <code><i>regex</i></code> to the list of regular expressions + used to translate XML Schema type names to C++ type names. See the + NAMING CONVENTION section below for more information. + </dd> + + <dt><code><b>--accessor-regex</b> <i>regex</i></code></dt> + <dd>Add <code><i>regex</i></code> to the list of regular expressions + used to translate XML Schema names of elements/attributes to C++ + accessor function names. See the NAMING CONVENTION section below + for more information. + </dd> + + <dt><code><b>--one-accessor-regex</b> <i>regex</i></code></dt> + <dd>Add <code><i>regex</i></code> to the list of regular expressions + used to translate XML Schema names of elements/attributes with + cardinality one to C++ accessor function names. See the NAMING + CONVENTION section below for more information. + </dd> + + <dt><code><b>--opt-accessor-regex</b> <i>regex</i></code></dt> + <dd>Add <code><i>regex</i></code> to the list of regular expressions + used to translate XML Schema names of elements/attributes with + cardinality optional to C++ accessor function names. See the + NAMING CONVENTION section below for more information. + </dd> + + <dt><code><b>--seq-accessor-regex</b> <i>regex</i></code></dt> + <dd>Add <code><i>regex</i></code> to the list of regular expressions + used to translate XML Schema names of elements/attributes with + cardinality sequence to C++ accessor function names. See the + NAMING CONVENTION section below for more information. + </dd> + + <dt><code><b>--modifier-regex</b> <i>regex</i></code></dt> + <dd>Add <code><i>regex</i></code> to the list of regular expressions + used to translate XML Schema names of elements/attributes to C++ + modifier function names. See the NAMING CONVENTION section below + for more information. + </dd> + + <dt><code><b>--one-modifier-regex</b> <i>regex</i></code></dt> + <dd>Add <code><i>regex</i></code> to the list of regular expressions + used to translate XML Schema names of elements/attributes with + cardinality one to C++ modifier function names. See the NAMING + CONVENTION section below for more information. + </dd> + + <dt><code><b>--opt-modifier-regex</b> <i>regex</i></code></dt> + <dd>Add <code><i>regex</i></code> to the list of regular expressions + used to translate XML Schema names of elements/attributes with + cardinality optional to C++ modifier function names. See the + NAMING CONVENTION section below for more information. + </dd> + + <dt><code><b>--seq-modifier-regex</b> <i>regex</i></code></dt> + <dd>Add <code><i>regex</i></code> to the list of regular expressions + used to translate XML Schema names of elements/attributes with + cardinality sequence to C++ modifier function names. See the + NAMING CONVENTION section below for more information. + </dd> + + <dt><code><b>--parser-regex</b> <i>regex</i></code></dt> + <dd>Add <code><i>regex</i></code> to the list of regular expressions + used to translate XML Schema element names to C++ parsing function + names. See the NAMING CONVENTION section below for more information. + </dd> + + <dt><code><b>--serializer-regex</b> <i>regex</i></code></dt> + <dd>Add <code><i>regex</i></code> to the list of regular expressions + used to translate XML Schema element names to C++ serialization + function names. See the NAMING CONVENTION section below for more + information. + </dd> + + <dt><code><b>--enumerator-regex</b> <i>regex</i></code></dt> + <dd>Add <code><i>regex</i></code> to the list of regular expressions + used to translate XML Schema enumeration values to C++ enumerator + names. See the NAMING CONVENTION section below for more information. + </dd> + + <dt><code><b>--element-type-regex</b> <i>regex</i></code></dt> + <dd>Add <code><i>regex</i></code> to the list of regular expressions + used to translate XML Schema element names to C++ element type + names. See the NAMING CONVENTION section below for more information. + </dd> + + <dt><code><b>--name-regex-trace</b></code></dt> + <dd>Trace the process of applying regular expressions specified with + the name transformation options. Use this option to find out why + your regular expressions don't do what you expected them to do. + </dd> + + <!-- Root element. --> + + <dt><code><b>--root-element-first</b></code></dt> + <dd>Treat only the first global element as a document root. By default + all global elements are considered document roots. + </dd> + + <dt><code><b>--root-element-last</b></code></dt> + <dd>Treat only the last global element as a document root. By default + all global elements are considered document roots. + </dd> + + <dt><code><b>--root-element-all</b></code></dt> + <dd>Treat all global elements as document roots. This is the default + behavior. By explicitly specifying this option you can suppress + the warning that is issued if more than one global element is defined. + </dd> + + <dt><code><b>--root-element-none</b></code></dt> + <dd>Do not treat any global elements as document roots. By default + all global elements are considered document roots. + </dd> + + <dt><code><b>--root-element</b> <i>element</i></code></dt> + <dd>Treat only <code><i>element</i></code> as a document root. Repeat this + option to specify more than one root element. + </dd> + + <!-- Custom type. --> + + <dt><code><b>--custom-type</b> + <i>name</i>[<b>=</b><i>type</i>[<b>/</b><i>base</i>]]</code></dt> + <dd>Use a custom C++ type <i>type</i> instead of the generated class for + XML Schema type <i>name</i>. If <i>type</i> is not present + or empty then the custom type is assumed to have the same name and + be defined in the same namespace as the generated class would have. + If <i>base</i> is specified then the generated class is still + generated but with that name. + </dd> + + <dt><code><b>--custom-type-regex</b> + <b>/</b><i>name-pat</i><b>/</b>[<i>type-sub</i><b>/</b>[<i>base-sub</i><b>/</b>]]</code></dt> + <dd>For each type defined in XML Schema that matches the <i>name-pat</i> + pattern use a custom C++ type instead of the generated class. The + name of the custom type is obtained by substituting <i>type-sub</i>. + If <i>type-sub</i> is not present or its substitution results in an + empty string then the custom type is assumed to have the same name + and be defined in the same namespace as the generated class would + have. If <i>base-sub</i> is present and its substitution results + in a non-empty string then the generated class is still generated + but with the result of substitution as its name. The pattern and + substitutions are in the perl regular expression format. See also + the REGEX AND SHELL QUOTING section below. + </dd> + + <!-- Suffixes. --> + + <dt><code><b>--fwd-suffix</b> <i>suffix</i></code></dt> + <dd>Use the provided <code><i>suffix</i></code> instead of the default + <code><b>-fwd.hxx</b></code> to construct the name of the forward + declaration file. + </dd> + + <dt><code><b>--fwd-regex</b> <i>regex</i></code></dt> + <dd>Use the provided expression to construct the name of the forward + declaration file. <code><i>regex</i></code> is a perl-like regular + expression in the form + <code><b>/</b><i>pattern</i><b>/</b><i>replacement</i><b>/</b></code>. + See also the REGEX AND SHELL QUOTING section below. + </dd> + + <dt><code><b>--fwd-prologue</b> <i>text</i></code></dt> + <dd>Insert <code><i>text</i></code> at the beginning of the forward + declaration file. + </dd> + + <dt><code><b>--fwd-epilogue</b> <i>text</i></code></dt> + <dd>Insert <code><i>text</i></code> at the end of the forward + declaration file. + </dd> + + <dt><code><b>--fwd-prologue-file</b> <i>file</i></code></dt> + <dd>Insert the content of the <code><i>file</i></code> at the beginning + of the forward declaration file. + </dd> + + <dt><code><b>--fwd-epilogue-file</b> <i>file</i></code></dt> + <dd>Insert the content of the <code><i>file</i></code> at the end of the + forward declaration file. + </dd> + + <!-- Parts. --> + + <dt><code><b>--parts</b> <i>num</i></code></dt> + <dd>Split generated source code into <code><i>num</i></code> parts. This + is useful when translating large, monolithic schemas and a C++ + compiler is not able to compile the resulting source code at once + (usually due to insufficient memory). + </dd> + + <dt><code><b>--parts-suffix</b> <i>suffix</i></code></dt> + <dd>Use <code><i>suffix</i></code> instead of the default + '<code><b>-</b></code>' to separate the file name from the + part number. + </dd> + + </dl> + + <h2>CXX-PARSER COMMAND OPTIONS</h2> + + <dl class="options"> + <dt><code><b>--type-map</b> <i>mapfile</i></code></dt> + <dd>Read XML Schema to C++ type mapping information from + <code><i>mapfile</i></code>. Repeat this option to specify + several type maps. Type maps are considered in order of + appearance and the first match is used. By default all + user-defined types are mapped to <code><b>void</b></code>. + See the TYPE MAP section below for more information.</dd> + + <dt><code><b>--xml-parser</b> <i>parser</i></code></dt> + <dd>Use <code><i>parser</i></code> as the underlying XML parser. + Valid values are <code><b>xerces</b></code> for Xerces-C++ (default) + and <code><b>expat</b></code> for Expat.</dd> + + <dt><code><b>--generate-inline</b></code></dt> + <dd>Generate simple functions inline. This option triggers creation + of the inline file.</dd> + + <dt><code><b>--generate-validation</b></code></dt> + <dd>Generate validation code ("perfect" parser) which ensures that + instance documents conform to the schema. Validation code is + generated by default when the selected underlying XML parser + is non-validating (<code><b>expat</b></code>).</dd> + + <dt><code><b>--suppress-validation</b></code></dt> + <dd>Suppress the generation of validation code ("perfect" parser). + Validation is suppressed by default when the selected underlying + XML parser is validating (<code><b>xerces</b></code>).</dd> + + <dt><code><b>--generate-polymorphic</b></code></dt> + <dd>Generate polymorphism-aware code. Specify this option if you use + substitution groups or <code><b>xsi:type</b></code>.</dd> + + <dt><code><b>--generate-noop-impl</b></code></dt> + <dd>Generate a sample parser implementation that does nothing (no + operation). The sample implementation can then be filled with + the application-specific code. For an input file in the form + <code><b>name.xsd</b></code> this option triggers the generation + of the two additional C++ files in the form: + <code><b>name-pimpl.hxx</b></code> (parser implementation header + file) and <code><b>name-pimpl.cxx</b></code> (parser implementation + source file).</dd> + + <dt><code><b>--generate-print-impl</b></code></dt> + <dd>Generate a sample parser implementation that prints the XML data + to STDOUT. For an input file in the form <code><b>name.xsd</b></code> + this option triggers the generation of the two additional C++ files + in the form: <code><b>name-pimpl.hxx</b></code> (parser implementation + header file) and <code><b>name-pimpl.cxx</b></code> (parser + implementation source file).</dd> + + <dt><code><b>--generate-test-driver</b></code></dt> + <dd>Generate a test driver for the sample parser implementation. For an + input file in the form <code><b>name.xsd</b></code> this option + triggers the generation of an additional C++ file in the form + <code><b>name-driver.cxx</b></code>.</dd> + + <dt><code><b>--force-overwrite</b></code></dt> + <dd>Force overwriting of the existing implementation and test driver + files. Use this option only if you do not mind loosing the changes + you have made in the sample implementation or test driver files.</dd> + + <dt><code><b>--root-element-first</b></code></dt> + <dd>Indicate that the first global element is the document root. This + information is used to generate the test driver for the sample + implementation.</dd> + + <dt><code><b>--root-element-last</b></code></dt> + <dd>Indicate that the last global element is the document root. This + information is used to generate the test driver for the sample + implementation.</dd> + + <dt><code><b>--root-element <i>element</i></b></code></dt> + <dd>Indicate that <code><i>element</i></code> is the document root. + This information is used to generate the test driver for the + sample implementation.</dd> + + <dt><code><b>--generate-xml-schema</b></code></dt> + <dd>Generate a C++ header file as if the schema being compiled defines + the XML Schema namespace. In particular, the resulting file will + have definitions for all parser skeletons and implementations + corresponding to the XML Schema built-in types. The schema file + provided to the compiler need not exist and is only used to derive + the name of the resulting header file. Use the + <code><b>--extern-xml-schema</b></code> option to include this file + in the generated files for other schemas.</dd> + + <dt><code><b>--extern-xml-schema</b> <i>file</i></code></dt> + <dd>Include a header file derived from <i>file</i> instead of + generating the XML Schema namespace mapping inline. The provided + file need not exist and is only used to derive the name of the + included header file. Use the <code><b>--generate-xml-schema</b></code> + option to generate this header file.</dd> + + <dt><code><b>--skel-type-suffix</b> <i>suffix</i></code></dt> + <dd>Use the provided <code><i>suffix</i></code> instead of the + default <code><b>_pskel</b></code> to construct the names + of generated parser skeletons.</dd> + + <dt><code><b>--skel-file-suffix</b> <i>suffix</i></code></dt> + <dd>Use the provided <code><i>suffix</i></code> instead of the + default <code><b>-pskel</b></code> to construct the names of + generated parser skeleton files.</dd> + + <dt><code><b>--impl-type-suffix</b> <i>suffix</i></code></dt> + <dd>Use the provided <code><i>suffix</i></code> instead of the + default <code><b>_pimpl</b></code> to construct the names of + parser implementations for the built-in XML Schema types + and sample parser implementations.</dd> + + <dt><code><b>--impl-file-suffix</b> <i>suffix</i></code></dt> + <dd>Use the provided <code><i>suffix</i></code> instead of the + default <code><b>-pimpl</b></code> to construct the names of + generated sample parser implementation files.</dd> + </dl> + + <h1>NAMING CONVENTION</h1> + + <p>The compiler can be instructed to use a particular naming + convention in the generated code. A number of widely-used + conventions can be selected using the <code><b>--type-naming</b></code> + and <code><b>--function-naming</b></code> options. A custom + naming convention can be achieved using the + <code><b>--type-regex</b></code>, + <code><b>--accessor-regex</b></code>, + <code><b>--one-accessor-regex</b></code>, + <code><b>--opt-accessor-regex</b></code>, + <code><b>--seq-accessor-regex</b></code>, + <code><b>--modifier-regex</b></code>, + <code><b>--one-modifier-regex</b></code>, + <code><b>--opt-modifier-regex</b></code>, + <code><b>--seq-modifier-regex</b></code>, + <code><b>--parser-regex</b></code>, + <code><b>--serializer-regex</b></code>, + <code><b>--enumerator-regex</b></code>, and + <code><b>--element-type-regex</b></code> options. + </p> + + <p>The <code><b>--type-naming</b></code> option specifies the + convention that should be used for naming C++ types. Possible + values for this option are <code><b>knr</b></code> (default), + <code><b>ucc</b></code>, and <code><b>java</b></code>. The + <code><b>knr</b></code> value (stands for K&R) signifies + the standard, lower-case naming convention with the underscore + used as a word delimiter, for example: <code>foo</code>, + <code>foo_bar</code>. The <code><b>ucc</b></code> (stands + for upper-camel-case) and + <code><b>java</b></code> values a synonyms for the same + naming convention where the first letter of each word in the + name is capitalized, for example: <code>Foo</code>, + <code>FooBar</code>.</p> + + <p>Similarly, the <code><b>--function-naming</b></code> option + specifies the convention that should be used for naming C++ + functions. Possible values for this option are <code><b>knr</b></code> + (default), <code><b>lcc</b></code>, and <code><b>java</b></code>. The + <code><b>knr</b></code> value (stands for K&R) signifies + the standard, lower-case naming convention with the underscore + used as a word delimiter, for example: <code>foo()</code>, + <code>foo_bar()</code>. The <code><b>lcc</b></code> value + (stands for lower-camel-case) signifies a naming convention + where the first letter of each word except the first is + capitalized, for example: <code>foo()</code>, <code>fooBar()</code>. + The <code><b>java</b></code> naming convention is similar to + the lower-camel-case one except that accessor functions are prefixed + with <code>get</code>, modifier functions are prefixed + with <code>set</code>, parsing functions are prefixed + with <code>parse</code>, and serialization functions are + prefixed with <code>serialize</code>, for example: + <code>getFoo()</code>, <code>setFooBar()</code>, + <code>parseRoot()</code>, <code>serializeRoot()</code>.</p> + + <p>Note that the naming conventions specified with the + <code><b>--type-naming</b></code> and + <code><b>--function-naming</b></code> options perform only limited + transformations on the names that come from the schema in the + form of type, attribute, and element names. In other words, to + get consistent results, your schemas should follow a similar + naming convention as the one you would like to have in the + generated code. Alternatively, you can use the + <code><b>--*-regex</b></code> options (discussed below) + to perform further transformations on the names that come from + the schema.</p> + + <p>The + <code><b>--type-regex</b></code>, + <code><b>--accessor-regex</b></code>, + <code><b>--one-accessor-regex</b></code>, + <code><b>--opt-accessor-regex</b></code>, + <code><b>--seq-accessor-regex</b></code>, + <code><b>--modifier-regex</b></code>, + <code><b>--one-modifier-regex</b></code>, + <code><b>--opt-modifier-regex</b></code>, + <code><b>--seq-modifier-regex</b></code>, + <code><b>--parser-regex</b></code>, + <code><b>--serializer-regex</b></code>, + <code><b>--enumerator-regex</b></code>, and + <code><b>--element-type-regex</b></code> options allow you to + specify extra regular expressions for each name category in + addition to the predefined set that is added depending on + the <code><b>--type-naming</b></code> and + <code><b>--function-naming</b></code> options. Expressions + that are provided with the <code><b>--*-regex</b></code> + options are evaluated prior to any predefined expressions. + This allows you to selectively override some or all of the + predefined transformations. When debugging your own expressions, + it is often useful to see which expressions match which names. + The <code><b>--name-regex-trace</b></code> option allows you + to trace the process of applying regular expressions to + names.</p> + + <p>The value for the <code><b>--*-regex</b></code> options should be + a perl-like regular expression in the form + <code><b>/</b><i>pattern</i><b>/</b><i>replacement</i><b>/</b></code>. + Any character can be used as a delimiter instead of <code><b>/</b></code>. + Escaping of the delimiter character in <code><i>pattern</i></code> or + <code><i>replacement</i></code> is not supported. + All the regular expressions for each category are pushed into a + category-specific stack with the last specified expression + considered first. The first match that succeeds is used. For the + <code><b>--one-accessor-regex</b></code> (accessors with cardinality one), + <code><b>--opt-accessor-regex</b></code> (accessors with cardinality optional), and + <code><b>--seq-accessor-regex</b></code> (accessors with cardinality sequence) + categories the <code><b>--accessor-regex</b></code> expressions are + used as a fallback. For the + <code><b>--one-modifier-regex</b></code>, + <code><b>--opt-modifier-regex</b></code>, and + <code><b>--seq-modifier-regex</b></code> + categories the <code><b>--modifier-regex</b></code> expressions are + used as a fallback. For the <code><b>--element-type-regex</b></code> + category the <code><b>--type-regex</b></code> expressions are + used as a fallback.</p> + + <p>The type name expressions (<code><b>--type-regex</b></code>) + are evaluated on the name string that has the following + format:</p> + + <p><code>[<i>namespace</i> ]<i>name</i>[,<i>name</i>][,<i>name</i>][,<i>name</i>]</code></p> + + <p>The element type name expressions + (<code><b>--element-type-regex</b></code>), effective only when + the <code><b>--generate-element-type</b></code> option is specified, + are evaluated on the name string that has the following + format:</p> + + <p><code><i>namespace</i> <i>name</i></code></p> + + <p>In the type name format the <code><i>namespace</i></code> part + followed by a space is only present for global type names. For + global types and elements defined in schemas without a target + namespace, the <code><i>namespace</i></code> part is empty but + the space is still present. In the type name format after the + initial <code><i>name</i></code> component, up to three additional + <code><i>name</i></code> components can be present, separated + by commas. For example:</p> + + <p><code><b>http://example.com/hello type</b></code></p> + <p><code><b>foo</b></code></p> + <p><code><b>foo,iterator</b></code></p> + <p><code><b>foo,const,iterator</b></code></p> + + <p>The following set of predefined regular expressions is used to + transform type names when the upper-camel-case naming convention + is selected:</p> + + <p><code><b>/(?:[^ ]* )?([^,]+)/\u$1/</b></code></p> + <p><code><b>/(?:[^ ]* )?([^,]+),([^,]+)/\u$1\u$2/</b></code></p> + <p><code><b>/(?:[^ ]* )?([^,]+),([^,]+),([^,]+)/\u$1\u$2\u$3/</b></code></p> + <p><code><b>/(?:[^ ]* )?([^,]+),([^,]+),([^,]+),([^,]+)/\u$1\u$2\u$3\u$4/</b></code></p> + + <p>The accessor and modifier expressions + (<code><b>--*accessor-regex</b></code> and + <code><b>--*modifier-regex</b></code>) are evaluated on the name string + that has the following format:</p> + + <p><code><i>name</i>[,<i>name</i>][,<i>name</i>]</code></p> + + <p>After the initial <code><i>name</i></code> component, up to two + additional <code><i>name</i></code> components can be present, + separated by commas. For example:</p> + + <p><code><b>foo</b></code></p> + <p><code><b>dom,document</b></code></p> + <p><code><b>foo,default,value</b></code></p> + + <p>The following set of predefined regular expressions is used to + transform accessor names when the <code><b>java</b></code> naming + convention is selected:</p> + + <p><code><b>/([^,]+)/get\u$1/</b></code></p> + <p><code><b>/([^,]+),([^,]+)/get\u$1\u$2/</b></code></p> + <p><code><b>/([^,]+),([^,]+),([^,]+)/get\u$1\u$2\u$3/</b></code></p> + + <p>For the parser, serializer, and enumerator categories, the + corresponding regular expressions are evaluated on local names of + elements and on enumeration values, respectively. For example, the + following predefined regular expression is used to transform parsing + function names when the <code><b>java</b></code> naming convention + is selected:</p> + + <p><code><b>/(.+)/parse\u$1/</b></code></p> + + <p>See also the REGEX AND SHELL QUOTING section below.</p> + + <h1>TYPE MAP</h1> + + <p>Type map files are used in C++/Parser to define a mapping between + XML Schema and C++ types. The compiler uses this information + to determine the return types of <code><b>post_*</b></code> + functions in parser skeletons corresponding to XML Schema + types as well as argument types for callbacks corresponding + to elements and attributes of these types.</p> + + <p>The compiler has a set of predefined mapping rules that map + built-in XML Schema types to suitable C++ types (discussed + below) and all other types to <code><b>void</b></code>. + By providing your own type maps you can override these predefined + rules. The format of the type map file is presented below: + </p> + + <pre> +namespace <schema-namespace> [<cxx-namespace>] +{ + (include <file-name>;)* + ([type] <schema-type> <cxx-ret-type> [<cxx-arg-type>];)* +} + </pre> + + <p>Both <code><i><schema-namespace></i></code> and + <code><i><schema-type></i></code> are regex patterns while + <code><i><cxx-namespace></i></code>, + <code><i><cxx-ret-type></i></code>, and + <code><i><cxx-arg-type></i></code> are regex pattern + substitutions. All names can be optionally enclosed in + <code><b>" "</b></code>, for example, to include white-spaces.</p> + + <p><code><i><schema-namespace></i></code> determines XML + Schema namespace. Optional <code><i><cxx-namespace></i></code> + is prefixed to every C++ type name in this namespace declaration. + <code><i><cxx-ret-type></i></code> is a C++ type name that is + used as a return type for the <code><b>post_*</b></code> functions. + Optional <code><i><cxx-arg-type></i></code> is an argument + type for callback functions corresponding to elements and attributes + of this type. If + <code><i><cxx-arg-type></i></code> is not specified, it defaults + to <code><i><cxx-ret-type></i></code> if <code><i><cxx-ret-type></i></code> + ends with <code><b>*</b></code> or <code><b>&</b></code> (that is, + it is a pointer or a reference) and + <code><b>const</b> <i><cxx-ret-type></i><b>&</b></code> + otherwise. + <code><i><file-name></i></code> is a file name either in the + <code><b>" "</b></code> or <code><b>< ></b></code> format + and is added with the <code><b>#include</b></code> directive to + the generated code.</p> + + <p>The <code><b>#</b></code> character starts a comment that ends + with a new line or end of file. To specify a name that contains + <code><b>#</b></code> enclose it in <code><b>" "</b></code>. + For example:</p> + + <pre> +namespace http://www.example.com/xmlns/my my +{ + include "my.hxx"; + + # Pass apples by value. + # + apple apple; + + # Pass oranges as pointers. + # + orange orange_t*; +} + </pre> + + <p>In the example above, for the + <code><b>http://www.example.com/xmlns/my#orange</b></code> + XML Schema type, the <code><b>my::orange_t*</b></code> C++ type will + be used as both return and argument types.</p> + + <p>Several namespace declarations can be specified in a single + file. The namespace declaration can also be completely + omitted to map types in a schema without a namespace. For + instance:</p> + + <pre> +include "my.hxx"; +apple apple; + +namespace http://www.example.com/xmlns/my +{ + orange "const orange_t*"; +} + </pre> + + <p>The compiler has a number of predefined mapping rules that can be + presented as the following map files. The string-based XML Schema + built-in types are mapped to either <code><b>std::string</b></code> + or <code><b>std::wstring</b></code> depending on the character type + selected with the <code><b>--char-type</b></code> option + (<code><b>char</b></code> by default).</p> + + <pre> +namespace http://www.w3.org/2001/XMLSchema +{ + boolean bool bool; + + byte "signed char" "signed char"; + unsignedByte "unsigned char" "unsigned char"; + + short short short; + unsignedShort "unsigned short" "unsigned short"; + + int int int; + unsignedInt "unsigned int" "unsigned int"; + + long "long long" "long long"; + unsignedLong "unsigned long long" "unsigned long long"; + + integer "long long" "long long"; + + negativeInteger "long long" "long long"; + nonPositiveInteger "long long" "long long"; + + positiveInteger "unsigned long long" "unsigned long long"; + nonNegativeInteger "unsigned long long" "unsigned long long"; + + float float float; + double double double; + decimal double double; + + string std::string; + normalizedString std::string; + token std::string; + Name std::string; + NMTOKEN std::string; + NCName std::string; + ID std::string; + IDREF std::string; + language std::string; + anyURI std::string; + + NMTOKENS xml_schema::string_sequence; + IDREFS xml_schema::string_sequence; + + QName xml_schema::qname; + + base64Binary std::auto_ptr<xml_schema::buffer> + std::auto_ptr<xml_schema::buffer>; + hexBinary std::auto_ptr<xml_schema::buffer> + std::auto_ptr<xml_schema::buffer>; + + date xml_schema::date; + dateTime xml_schema::date_time; + duration xml_schema::duration; + gDay xml_schema::gday; + gMonth xml_schema::gmonth; + gMonthDay xml_schema::gmonth_day; + gYear xml_schema::gyear; + gYearMonth xml_schema::gyear_month; + time xml_schema::time; +} + </pre> + + <p>The last predefined rule maps anything that wasn't mapped by + previous rules to <code><b>void</b></code>:</p> + + <pre> +namespace .* +{ + .* void void; +} + </pre> + + + <p>When you provide your own type maps with the + <code><b>--type-map</b></code> option, they are evaluated first. + This allows you to selectively override predefined rules.</p> + + <h1>REGEX AND SHELL QUOTING</h1> + + <p>When entering a regular expression argument in the shell + command line it is often necessary to use quoting (enclosing + the argument in <code><b>" "</b></code> or + <code><b>' '</b></code>) in order to prevent the shell + from interpreting certain characters, for example, spaces as + argument separators and <code><b>$</b></code> as variable + expansions.</p> + + <p>Unfortunately it is hard to achieve this in a manner that is + portable across POSIX shells, such as those found on + GNU/Linux and UNIX, and Windows shell. For example, if you + use <code><b>" "</b></code> for quoting you will get a + wrong result with POSIX shells if your expression contains + <code><b>$</b></code>. The standard way of dealing with this + on POSIX systems is to use <code><b>' '</b></code> instead. + Unfortunately, Windows shell does not remove <code><b>' '</b></code> + from arguments when they are passed to applications. As a result you + may have to use <code><b>' '</b></code> for POSIX and + <code><b>" "</b></code> for Windows (<code><b>$</b></code> is + not treated as a special character on Windows).</p> + + <p>Alternatively, you can save regular expression options into + a file, one option per line, and use this file with the + <code><b>--options-file</b></code> option. With this approach + you don't need to worry about shell quoting.</p> + + <h1>DIAGNOSTICS</h1> + + <p>If the input file is not a valid W3C XML Schema definition, + <code><b>xsd</b></code> will issue diagnostic messages to STDERR + and exit with non-zero exit code.</p> + + <h1>BUGS</h1> + + <p>Send bug reports to the + <a href="mailto:xsd-users@codesynthesis.com">xsd-users@codesynthesis.com</a> mailing list.</p> + + </div> + <div id="footer"> + ©2005-2010 <a href="http://codesynthesis.com">CODE SYNTHESIS TOOLS CC</a> + + <div id="terms"> + Permission is granted to copy, distribute and/or modify this + document under the terms of the + <a href="http://codesynthesis.com/licenses/fdl-1.2.txt">GNU Free + Documentation License, version 1.2</a>; with no Invariant Sections, + no Front-Cover Texts and no Back-Cover Texts. + </div> + </div> +</div> +</body> +</html> diff --git a/xsd/examples/cxx/parser/README b/xsd/examples/cxx/parser/README new file mode 100644 index 0000000..01906c7 --- /dev/null +++ b/xsd/examples/cxx/parser/README @@ -0,0 +1,45 @@ +This directory contains a number of examples that show how to use +the C++/Parser mapping. The following list gives an overview of +each example. See the README files in example directories for +more information on each example. + +hello + A simple "Hello, world!" example that shows how to parse XML + documents. + +generated + Shows how to use the sample implementation and test driver + generation feature. This example does not have any hand-written + C++ code; everything is generated by the XSD compiler. + +library + Shows how to handle more complex data structures and construct + a custom in-memory object model. + +mixin + Shows how to reuse implementations of base parsers in derived + parsers using the mixin C++ idiom. + +wildcard + Shows how to parse the XML data matched by XML Schema wildcards + (any and anyAttribute). + +multiroot + Shows how to handle XML vocabularies with multiple root elements. + +polymorphism + Shows how to use XML Schema polymorphism features such as the + xsi:type attribute and substitution groups. + +polyroot + Shows how to handle the xsi:type attribute when it is used on root + elements. + +performance + Measures the performance of XML parsing. This example also shows how + to structure your code to achieve the maximum performance for this + operation. + +mixed + Shows how to handle raw, "type-less content" such as mixed content + models, anyType/anySimpleType, and any/anyAttribute.
\ No newline at end of file diff --git a/xsd/examples/cxx/parser/generated/README b/xsd/examples/cxx/parser/generated/README new file mode 100644 index 0000000..ca56974 --- /dev/null +++ b/xsd/examples/cxx/parser/generated/README @@ -0,0 +1,32 @@ +This example shows how to use the sample implementation and test +driver generation feature of the C++/Parser mapping. This example +does not have any hand-written C++ code; everything is generated +by the XSD compiler. + +The example consists of the following files: + +library.xsd + XML Schema which describes a library of books. + +library.xml + Sample XML instance document. + +library-pskel.hxx +library-pskel.cxx + Parser skeletons generated by XSD from library.xsd. + +library-pimpl.hxx +library-pimpl.cxx + Sample parser implementations that print the XML data to STDOUT. + These are generated by XSD from library.xsd with the + --generate-print-impl option. + +library-driver.cxx + Sample driver for the example. It is generated by XSD from + library.xsd with the --generate-test-driver option. + + +To run the example on the sample XML instance document simply +execute: + +$ ./library-driver library.xml diff --git a/xsd/examples/cxx/parser/generated/library.xml b/xsd/examples/cxx/parser/generated/library.xml new file mode 100644 index 0000000..2d9069c --- /dev/null +++ b/xsd/examples/cxx/parser/generated/library.xml @@ -0,0 +1,53 @@ +<?xml version="1.0"?> + +<!-- + +file : examples/cxx/parser/library/library.xml +author : Boris Kolpackov <boris@codesynthesis.com> +copyright : not copyrighted - public domain + +--> + +<lib:catalog xmlns:lib="http://www.codesynthesis.com/library" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.codesynthesis.com/library library.xsd"> + + <book id="MM" available="false"> + <isbn>0679760806</isbn> + <title>The Master and Margarita</title> + <genre>fiction</genre> + + <author recommends="WP"> + <name>Mikhail Bulgakov</name> + <born>1891-05-15</born> + <died>1940-03-10</died> + </author> + </book> + + + <book id="WP" available="true" > + <isbn>0679600841</isbn> + <title>War and Peace</title> + <genre>history</genre> + + <author recommends="CP"> + <name>Leo Tolstoy</name> + <born>1828-09-09</born> + <died>1910-11-20</died> + </author> + </book> + + + <book id="CP" available="false"> + <isbn>0679420290</isbn> + <title>Crime and Punishment</title> + <genre>philosophy</genre> + + <author> + <name>Fyodor Dostoevsky</name> + <born>1821-11-11</born> + <died>1881-02-09</died> + </author> + </book> + +</lib:catalog> diff --git a/xsd/examples/cxx/parser/generated/library.xsd b/xsd/examples/cxx/parser/generated/library.xsd new file mode 100644 index 0000000..57654c7 --- /dev/null +++ b/xsd/examples/cxx/parser/generated/library.xsd @@ -0,0 +1,79 @@ +<?xml version="1.0"?> + +<!-- + +file : examples/cxx/parser/library/library.xsd +author : Boris Kolpackov <boris@codesynthesis.com> +copyright : not copyrighted - public domain + +--> + +<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns:lib="http://www.codesynthesis.com/library" + targetNamespace="http://www.codesynthesis.com/library"> + + <xsd:simpleType name="isbn"> + <xsd:restriction base="xsd:unsignedInt"/> + </xsd:simpleType> + + + <xsd:complexType name="title"> + <xsd:simpleContent> + <xsd:extension base="xsd:string"> + <xsd:attribute name="lang" type="xsd:string"/> + </xsd:extension> + </xsd:simpleContent> + </xsd:complexType> + + + <xsd:simpleType name="genre"> + <xsd:restriction base="xsd:string"> + <xsd:enumeration value="romance"/> + <xsd:enumeration value="fiction"/> + <xsd:enumeration value="horror"/> + <xsd:enumeration value="history"/> + <xsd:enumeration value="philosophy"/> + </xsd:restriction> + </xsd:simpleType> + + + <xsd:complexType name="person"> + <xsd:sequence> + <xsd:element name="name" type="xsd:string"/> + <xsd:element name="born" type="xsd:string"/> + <xsd:element name="died" type="xsd:string" minOccurs="0"/> + </xsd:sequence> + </xsd:complexType> + + + <xsd:complexType name="author"> + <xsd:complexContent> + <xsd:extension base="lib:person"> + <xsd:attribute name="recommends" type="xsd:IDREF"/> <!-- Book --> + </xsd:extension> + </xsd:complexContent> + </xsd:complexType> + + + <xsd:complexType name="book"> + <xsd:sequence> + <xsd:element name="isbn" type="lib:isbn"/> + <xsd:element name="title" type="lib:title"/> + <xsd:element name="genre" type="lib:genre"/> + <xsd:element name="author" type="lib:author" maxOccurs="unbounded"/> + </xsd:sequence> + <xsd:attribute name="available" type="xsd:boolean" use="required"/> + <xsd:attribute name="id" type="xsd:ID" use="required"/> + </xsd:complexType> + + + <xsd:complexType name="catalog"> + <xsd:sequence> + <xsd:element name="book" type="lib:book" maxOccurs="unbounded"/> + </xsd:sequence> + </xsd:complexType> + + + <xsd:element name="catalog" type="lib:catalog"/> + +</xsd:schema> diff --git a/xsd/examples/cxx/parser/generated/makefile b/xsd/examples/cxx/parser/generated/makefile new file mode 100644 index 0000000..7674f26 --- /dev/null +++ b/xsd/examples/cxx/parser/generated/makefile @@ -0,0 +1,111 @@ +# file : examples/cxx/parser/generated/makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../../build/bootstrap.make + +xsd := library.xsd + +obj := $(addprefix $(out_base)/,$(xsd:.xsd=-pskel.o) $(xsd:.xsd=-pimpl.o) $(xsd:.xsd=-driver.o)) +dep := $(obj:.o=.o.d) + + +driver := $(out_base)/$(xsd:.xsd=-driver) +install := $(out_base)/.install +dist := $(out_base)/.dist +dist-win := $(out_base)/.dist-win +clean := $(out_base)/.clean + +# Import. +# +$(call import,\ + $(scf_root)/import/libxerces-c/stub.make,\ + l: xerces_c.l,cpp-options: xerces_c.l.cpp-options) + +# Build. +# +$(driver): $(obj) $(xerces_c.l) + +$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): $(xerces_c.l.cpp-options) + +genf := $(xsd:.xsd=-pskel.hxx) \ + $(xsd:.xsd=-pskel.ixx) \ + $(xsd:.xsd=-pskel.cxx) \ + $(xsd:.xsd=-pimpl.hxx) \ + $(xsd:.xsd=-pimpl.cxx) \ + $(xsd:.xsd=-driver.cxx) + +gen := $(addprefix $(out_base)/,$(genf)) + + +$(gen): xsd := $(out_root)/xsd/xsd +$(gen): xsd_options := --generate-print-impl --generate-test-driver \ +--force-overwrite +$(gen): $(out_root)/xsd/xsd + +$(call include-dep,$(dep)) + +# Convenience alias for default target. +# +$(out_base)/: $(driver) + + +# Install & Dist. +# +dist-common := $(out_base)/.dist-common + +$(install) $(dist) $(dist-win) $(dist-common): path := $(subst $(src_root)/,,$(src_base)) + +$(install): + $(call install-data,$(src_base)/README,$(install_doc_dir)/xsd/$(path)/README) + $(call install-data,$(src_base)/library.xsd,$(install_doc_dir)/xsd/$(path)/library.xsd) + $(call install-data,$(src_base)/library.xml,$(install_doc_dir)/xsd/$(path)/library.xml) + +$(dist-common): + $(call install-data,$(src_base)/library.xsd,$(dist_prefix)/$(path)/library.xsd) + $(call install-data,$(src_base)/library.xml,$(dist_prefix)/$(path)/library.xml) + +$(dist): $(dist-common) + $(call install-data,$(src_base)/README,$(dist_prefix)/$(path)/README) + +$(dist-win): $(dist-common) + $(call install-data,$(src_base)/README,$(dist_prefix)/$(path)/README.txt) + $(call message,,unix2dos $(dist_prefix)/$(path)/README.txt) + + +# Clean. +# +$(clean): $(driver).o.clean \ + $(addsuffix .cxx.clean,$(obj)) \ + $(addsuffix .cxx.clean,$(dep)) \ + $(addprefix $(out_base)/,$(xsd:.xsd=-pskel.cxx.xsd.clean)) \ + $(addprefix $(out_base)/,$(xsd:.xsd=-pimpl.cxx.xsd.clean)) + +# Generated .gitignore. +# +ifeq ($(out_base),$(src_base)) +$(gen): | $(out_base)/.gitignore +$(driver): | $(out_base)/.gitignore + +$(out_base)/.gitignore: files := $(xsd:.xsd=-driver) $(genf) +$(clean): $(out_base)/.gitignore.clean + +$(call include,$(bld_root)/git/gitignore.make) +endif + +# How to. +# +$(call include,$(bld_root)/cxx/o-e.make) +$(call include,$(bld_root)/cxx/cxx-o.make) +$(call include,$(bld_root)/cxx/cxx-d.make) +$(call include,$(bld_root)/install.make) + +xsd_parser_impl_suffix := -pimpl +$(call include,$(scf_root)/xsd/parser/xsd-cxx.make) + + +# Dependencies. +# +$(call import,$(src_root)/xsd/makefile) diff --git a/xsd/examples/cxx/parser/hello/README b/xsd/examples/cxx/parser/hello/README new file mode 100644 index 0000000..97449de --- /dev/null +++ b/xsd/examples/cxx/parser/hello/README @@ -0,0 +1,28 @@ +This is a "Hello, world!" example that shows how to use the +C++/Parser mapping to parse XML instance documents. + +The example consists of the following files: + +hello.xsd + XML Schema which describes "hello" instance documents. + +hello.xml + Sample XML instance document. + +hello-pskel.hxx +hello-pskel.cxx + Parser skeletons generated by XSD from hello.xsd. + +driver.cxx + A parser implementation and a driver for the example. The + parser implementation simply prints the data to STDERR. + The driver first constructs a parser instance from the + parser implementation mentioned above and a couple of + predefined parsers for the XML Schema built-in types. + In then invokes this parser instance to parse the input + file. + +To run the example on the sample XML instance document simply +execute: + +$ ./driver hello.xml diff --git a/xsd/examples/cxx/parser/hello/driver.cxx b/xsd/examples/cxx/parser/hello/driver.cxx new file mode 100644 index 0000000..9aee316 --- /dev/null +++ b/xsd/examples/cxx/parser/hello/driver.cxx @@ -0,0 +1,68 @@ +// file : examples/cxx/parser/hello/driver.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : not copyrighted - public domain + +#include <string> +#include <iostream> + +#include "hello-pskel.hxx" + +using namespace std; + +struct hello_pimpl: hello_pskel +{ + virtual void + greeting (const string& greeting) + { + greeting_ = greeting; + } + + virtual void + name (const string& name) + { + cout << greeting_ << ", " << name << "!" << endl; + } + +private: + string greeting_; +}; + +int +main (int argc, char* argv[]) +{ + if (argc != 2) + { + cerr << "usage: " << argv[0] << " hello.xml" << endl; + return 1; + } + + try + { + // Construct the parser. + // + xml_schema::string_pimpl string_p; + hello_pimpl hello_p; + + hello_p.greeting_parser (string_p); + hello_p.name_parser (string_p); + + // Parse the XML instance document. The second argument to the + // document's constructor is the document's root element name. + // + xml_schema::document doc_p (hello_p, "hello"); + + hello_p.pre (); + doc_p.parse (argv[1]); + hello_p.post_hello (); + } + catch (const xml_schema::exception& e) + { + cerr << e << endl; + return 1; + } + catch (const std::ios_base::failure&) + { + cerr << argv[1] << ": unable to open or read failure" << endl; + return 1; + } +} diff --git a/xsd/examples/cxx/parser/hello/hello.xml b/xsd/examples/cxx/parser/hello/hello.xml new file mode 100644 index 0000000..2e5aaa3 --- /dev/null +++ b/xsd/examples/cxx/parser/hello/hello.xml @@ -0,0 +1,20 @@ +<?xml version="1.0"?> + +<!-- + +file : examples/cxx/parser/hello/hello.xml +author : Boris Kolpackov <boris@codesynthesis.com> +copyright : not copyrighted - public domain + +--> + +<hello xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="hello.xsd"> + + <greeting>Hello</greeting> + + <name>sun</name> + <name>moon</name> + <name>world</name> + +</hello> diff --git a/xsd/examples/cxx/parser/hello/hello.xsd b/xsd/examples/cxx/parser/hello/hello.xsd new file mode 100644 index 0000000..f0941b7 --- /dev/null +++ b/xsd/examples/cxx/parser/hello/hello.xsd @@ -0,0 +1,22 @@ +<?xml version="1.0"?> + +<!-- + +file : examples/cxx/parser/hello/hello.xsd +author : Boris Kolpackov <boris@codesynthesis.com> +copyright : not copyrighted - public domain + +--> + +<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + + <xsd:complexType name="hello"> + <xsd:sequence> + <xsd:element name="greeting" type="xsd:string"/> + <xsd:element name="name" type="xsd:string" maxOccurs="unbounded"/> + </xsd:sequence> + </xsd:complexType> + + <xsd:element name="hello" type="hello"/> + +</xsd:schema> diff --git a/xsd/examples/cxx/parser/hello/makefile b/xsd/examples/cxx/parser/hello/makefile new file mode 100644 index 0000000..3d7d0f7 --- /dev/null +++ b/xsd/examples/cxx/parser/hello/makefile @@ -0,0 +1,102 @@ +# file : examples/cxx/parser/hello/makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../../build/bootstrap.make + +xsd := hello.xsd +cxx := driver.cxx + +obj := $(addprefix $(out_base)/,$(cxx:.cxx=.o) $(xsd:.xsd=-pskel.o)) +dep := $(obj:.o=.o.d) + +driver := $(out_base)/driver +install := $(out_base)/.install +dist := $(out_base)/.dist +dist-win := $(out_base)/.dist-win +clean := $(out_base)/.clean + + +# Import. +# +$(call import,\ + $(scf_root)/import/libxerces-c/stub.make,\ + l: xerces_c.l,cpp-options: xerces_c.l.cpp-options) + + +# Build. +# +$(driver): $(obj) $(xerces_c.l) + +$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): $(xerces_c.l.cpp-options) + +genf := $(xsd:.xsd=-pskel.hxx) $(xsd:.xsd=-pskel.ixx) $(xsd:.xsd=-pskel.cxx) +gen := $(addprefix $(out_base)/,$(genf)) + +$(gen): xsd := $(out_root)/xsd/xsd +$(gen): $(out_root)/xsd/xsd + +$(call include-dep,$(dep)) + +# Convenience alias for default target. +# +$(out_base)/: $(driver) + + +# Install & Dist. +# +dist-common := $(out_base)/.dist-common + +$(install) $(dist) $(dist-win) $(dist-common): path := $(subst $(src_root)/,,$(src_base)) + +$(install): + $(call install-data,$(src_base)/README,$(install_doc_dir)/xsd/$(path)/README) + $(call install-data,$(src_base)/driver.cxx,$(install_doc_dir)/xsd/$(path)/driver.cxx) + $(call install-data,$(src_base)/hello.xsd,$(install_doc_dir)/xsd/$(path)/hello.xsd) + $(call install-data,$(src_base)/hello.xml,$(install_doc_dir)/xsd/$(path)/hello.xml) + +$(dist-common): + $(call install-data,$(src_base)/driver.cxx,$(dist_prefix)/$(path)/driver.cxx) + $(call install-data,$(src_base)/hello.xsd,$(dist_prefix)/$(path)/hello.xsd) + $(call install-data,$(src_base)/hello.xml,$(dist_prefix)/$(path)/hello.xml) + +$(dist): $(dist-common) + $(call install-data,$(src_base)/README,$(dist_prefix)/$(path)/README) + +$(dist-win): $(dist-common) + $(call install-data,$(src_base)/README,$(dist_prefix)/$(path)/README.txt) + $(call message,,unix2dos $(dist_prefix)/$(path)/README.txt) + +# Clean. +# +$(clean): $(driver).o.clean \ + $(addsuffix .cxx.clean,$(obj)) \ + $(addsuffix .cxx.clean,$(dep)) \ + $(addprefix $(out_base)/,$(xsd:.xsd=-pskel.cxx.xsd.clean)) + +# Generated .gitignore. +# +ifeq ($(out_base),$(src_base)) +$(gen): | $(out_base)/.gitignore +$(driver): | $(out_base)/.gitignore + +$(out_base)/.gitignore: files := driver $(genf) +$(clean): $(out_base)/.gitignore.clean + +$(call include,$(bld_root)/git/gitignore.make) +endif + +# How to. +# +$(call include,$(bld_root)/cxx/o-e.make) +$(call include,$(bld_root)/cxx/cxx-o.make) +$(call include,$(bld_root)/cxx/cxx-d.make) +$(call include,$(bld_root)/install.make) +$(call include,$(scf_root)/xsd/parser/xsd-cxx.make) + + +# Dependencies. +# +$(call import,$(src_root)/xsd/makefile) diff --git a/xsd/examples/cxx/parser/library/README b/xsd/examples/cxx/parser/library/README new file mode 100644 index 0000000..3f515f6 --- /dev/null +++ b/xsd/examples/cxx/parser/library/README @@ -0,0 +1,44 @@ +This example shows how to use the C++/Parser mapping to construct +a custom in-memory object model from XML instance documents. + +The example consists of the following files: + +library.xsd + XML Schema which describes a library of books. + +library.xml + Sample XML instance document. + +library.hxx + Types that describe a library of books in C++. These are + hand-written. + +library.map + Type map. It maps XML Schema types defined in library.xsd + to the C++ types defined in library.hxx. + +library-pskel.hxx +library-pskel.ixx +library-pskel.cxx + Parser skeletons generated by XSD from library.xsd and + library.map. + +library-pimpl.hxx +library-pimpl.cxx + Parser implementations that construct the custom in-memory + object model from an XML instance using the types from + library.hxx. These are hand-written implementations of + the parser skeletons defined in library-pskel.hxx. + +driver.cxx + Driver for the example. It first constructs a parser + instance from all the individual parsers found in + library-pimpl.hxx. In then invokes this parser instance + to parse the input file and produce the in-memory + object model. Finally, it prints the contents of the + in-memory object model to STDERR. + +To run the example on the sample XML instance document simply +execute: + +$ ./driver library.xml diff --git a/xsd/examples/cxx/parser/library/driver.cxx b/xsd/examples/cxx/parser/library/driver.cxx new file mode 100644 index 0000000..ea5f1d9 --- /dev/null +++ b/xsd/examples/cxx/parser/library/driver.cxx @@ -0,0 +1,110 @@ +// file : examples/cxx/parser/library/driver.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : not copyrighted - public domain + +#include <iostream> + +#include "library.hxx" +#include "library-pimpl.hxx" + +using std::cerr; +using std::endl; + +int +main (int argc, char* argv[]) +{ + if (argc != 2) + { + cerr << "usage: " << argv[0] << " library.xml" << endl; + return 1; + } + + try + { + using namespace library; + + + // Construct the parser. + // + xml_schema::id_pimpl id_p; + xml_schema::idref_pimpl idref_p; + xml_schema::string_pimpl string_p; + xml_schema::boolean_pimpl boolean_p; + + isbn_pimpl isbn_p; + + title_pimpl title_p; + title_p.lang_parser (string_p); + + genre_pimpl genre_p; + + author_pimpl author_p; + author_p.parsers (string_p, // name + string_p, // born + string_p, // died + idref_p); // recommends + + book_pimpl book_p; + book_p.parsers (isbn_p, // isbn + title_p, // title + genre_p, // genre + author_p, // author + boolean_p, // available + id_p); // id + + catalog_pimpl catalog_p; + catalog_p.book_parser (book_p); + + + // Parse the XML instance document. + // + xml_schema::document doc_p ( + catalog_p, + "http://www.codesynthesis.com/library", // root element namespace + "catalog"); // root element name + + catalog_p.pre (); + doc_p.parse (argv[1]); + catalog c (catalog_p.post_catalog ()); + + + // Let's print what we've got. + // + for (catalog::const_iterator bi (c.begin ()); bi != c.end (); ++bi) + { + cerr << endl + << "ID : " << bi->id () << endl + << "ISBN : " << bi->isbn () << endl + << "Title : " << bi->title () << endl + << "Genre : " << bi->genre () << endl; + + for (book::authors::const_iterator ai (bi->author ().begin ()); + ai != bi->author ().end (); + ++ai) + { + cerr << "Author : " << ai->name () << endl; + cerr << " Born : " << ai->born () << endl; + + if (!ai->died ().empty ()) + cerr << " Died : " << ai->died () << endl; + + if (!ai->recommends ().empty ()) + { + cerr << " Recommends : " << ai->recommends () << endl; + } + } + + cerr << "Available : " << std::boolalpha << bi->available () << endl; + } + } + catch (const xml_schema::exception& e) + { + cerr << e << endl; + return 1; + } + catch (const std::ios_base::failure&) + { + cerr << argv[1] << ": unable to open or read failure" << endl; + return 1; + } +} diff --git a/xsd/examples/cxx/parser/library/library-pimpl.cxx b/xsd/examples/cxx/parser/library/library-pimpl.cxx new file mode 100644 index 0000000..8b6c357 --- /dev/null +++ b/xsd/examples/cxx/parser/library/library-pimpl.cxx @@ -0,0 +1,184 @@ +// file : examples/cxx/parser/library/library-pimpl.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : not copyrighted - public domain + +#include "library-pimpl.hxx" + +namespace library +{ + // isbn_impl + // + isbn isbn_pimpl:: + post_isbn () + { + return post_unsigned_int (); + } + + // title_pimpl + // + void title_pimpl:: + _pre () + { + title_.lang (""); + } + + void title_pimpl:: + lang (const std::string& lang) + { + title_.lang (lang); + } + + title title_pimpl:: + post_title () + { + title_.assign (post_string ()); + return title_; + } + + // genre_pimpl + // + genre genre_pimpl:: + post_genre () + { + genre r (romance); + std::string v (post_string ()); + + if (v == "romance") r = romance; else + if (v == "fiction") r = fiction; else + if (v == "horror") r = horror; else + if (v == "history") r = history; else + if (v == "philosophy") r = philosophy; + + return r; + } + + // person_pimpl + // + void person_pimpl:: + _pre () + { + person_.died (""); + } + + void person_pimpl:: + name (const std::string& name) + { + person_.name (name); + } + + void person_pimpl:: + born (const std::string& born) + { + person_.born (born); + } + + void person_pimpl:: + died (const std::string& died) + { + person_.died (died); + } + + person person_pimpl:: + post_person () + { + return person_; + } + + // author_pimpl + // + void author_pimpl:: + _pre () + { + person_pimpl::_pre (); + author_.recommends (""); + } + + void author_pimpl:: + recommends (const std::string& recommends) + { + author_.recommends (recommends); + } + + author author_pimpl:: + post_author () + { + person p (post_person ()); + + author_.name (p.name ()); + author_.born (p.born ()); + author_.died (p.died ()); + + return author_; + } + + // book_pimpl + // + void book_pimpl:: + _pre () + { + book_.author ().clear (); + } + + void book_pimpl:: + isbn (library::isbn isbn) + { + book_.isbn (isbn); + } + + void book_pimpl:: + title (const library::title& title) + { + book_.title (title); + } + + void book_pimpl:: + genre (library::genre genre) + { + book_.genre (genre); + } + + void book_pimpl:: + author (const library::author& author) + { + book_.author ().push_back (author); + } + + void book_pimpl:: + available (bool available) + { + book_.available (available); + } + + void book_pimpl:: + id (const std::string& id) + { + book_.id (id); + } + + book book_pimpl:: + post_book () + { + return book_; + } + + // catalog_pimpl + // + void catalog_pimpl:: + _pre () + { + catalog_.clear (); + } + + void catalog_pimpl:: + book (const library::book& book) + { + catalog_.push_back (book); + } + + catalog catalog_pimpl:: + post_catalog () + { + return catalog_; + } +} + diff --git a/xsd/examples/cxx/parser/library/library-pimpl.hxx b/xsd/examples/cxx/parser/library/library-pimpl.hxx new file mode 100644 index 0000000..180070c --- /dev/null +++ b/xsd/examples/cxx/parser/library/library-pimpl.hxx @@ -0,0 +1,136 @@ +// file : examples/cxx/parser/library/library-pimpl.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : not copyrighted - public domain + +#ifndef LIBRARY_PIMPL_HXX +#define LIBRARY_PIMPL_HXX + +#include "library.hxx" +#include "library-pskel.hxx" + +namespace library +{ + // + // + struct isbn_pimpl: isbn_pskel, xml_schema::unsigned_int_pimpl + { + virtual isbn + post_isbn (); + }; + + // + // + struct title_pimpl: title_pskel, xml_schema::string_pimpl + { + virtual void + _pre (); + + virtual void + lang (const std::string&); + + virtual title + post_title (); + + private: + title title_; + }; + + // + // + struct genre_pimpl: genre_pskel, xml_schema::string_pimpl + { + virtual genre + post_genre (); + }; + + // + // + struct person_pimpl: virtual person_pskel + { + virtual void + _pre (); + + virtual void + name (const std::string&); + + virtual void + born (const std::string&); + + virtual void + died (const std::string&); + + virtual person + post_person (); + + private: + person person_; + }; + + // + // + struct author_pimpl: author_pskel, person_pimpl + { + virtual void + _pre (); + + virtual void + recommends (const std::string&); + + virtual author + post_author (); + + private: + author author_; + }; + + // + // + struct book_pimpl: book_pskel + { + virtual void + _pre (); + + virtual void + isbn (library::isbn); + + virtual void + title (const library::title&); + + virtual void + genre (library::genre); + + virtual void + author (const library::author&); + + virtual void + available (bool); + + virtual void + id (const std::string&); + + virtual book + post_book (); + + private: + book book_; + }; + + // + // + struct catalog_pimpl: catalog_pskel + { + virtual void + _pre (); + + virtual void + book (const library::book&); + + virtual catalog + post_catalog (); + + private: + catalog catalog_; + }; +} + +#endif // LIBRARY_PIMPL_HXX diff --git a/xsd/examples/cxx/parser/library/library.hxx b/xsd/examples/cxx/parser/library/library.hxx new file mode 100644 index 0000000..fb6cc1d --- /dev/null +++ b/xsd/examples/cxx/parser/library/library.hxx @@ -0,0 +1,242 @@ +// file : examples/cxx/parser/library/library.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : not copyrighted - public domain + +#ifndef LIBRARY_HXX +#define LIBRARY_HXX + +#include <string> +#include <vector> + +namespace library +{ + // + // + typedef unsigned int isbn; + + + // + // + struct title: std::string + { + // lang + // + const std::string& + lang () const + { + return lang_; + } + + void + lang (const std::string& lang) + { + lang_ = lang; + } + + private: + std::string lang_; + }; + + + // + // + enum genre + { + romance, + fiction, + horror, + history, + philosophy + }; + + + // + // + struct person + { + // name + // + const std::string& + name () const + { + return name_; + } + + void + name (const std::string& name) + { + name_ = name; + } + + // born + // + const std::string& + born () const + { + return born_; + } + + void + born (const std::string& born) + { + born_ = born; + } + + + // died + // + const std::string& + died () const + { + return died_; + } + + void + died (const std::string& died) + { + died_ = died; + } + + private: + std::string name_; + std::string born_; + std::string died_; + }; + + + // + // + struct author: person + { + // recommends + // + const std::string& + recommends () const + { + return recommends_; + } + + void + recommends (const std::string& recommends) + { + recommends_ = recommends; + } + + private: + std::string recommends_; + }; + + + // + // + struct book + { + // isbn + // + library::isbn + isbn () const + { + return isbn_; + } + + void + isbn (const library::isbn& isbn) + { + isbn_ = isbn; + } + + + // title + // + library::title + title () const + { + return title_; + } + + void + title (const library::title& title) + { + title_ = title; + } + + + // genre + // + library::genre + genre () const + { + return genre_; + } + + void + genre (const library::genre& genre) + { + genre_ = genre; + } + + + // author + // + typedef std::vector<library::author> authors; + + const authors& + author () const + { + return author_; + } + + authors& + author () + { + return author_; + } + + + // available + // + bool + available () const + { + return available_; + } + + void + available (bool available) + { + available_ = available; + } + + + // id + // + const std::string& + id () const + { + return id_; + } + + void + id (const std::string& id) + { + id_ = id; + } + + private: + library::isbn isbn_; + library::title title_; + library::genre genre_; + + authors author_; + + bool available_; + std::string id_; + }; + + + // + // + typedef std::vector<book> catalog; +} + +#endif // LIBRARY_HXX diff --git a/xsd/examples/cxx/parser/library/library.map b/xsd/examples/cxx/parser/library/library.map new file mode 100644 index 0000000..90f4938 --- /dev/null +++ b/xsd/examples/cxx/parser/library/library.map @@ -0,0 +1,16 @@ +# file : examples/cxx/parser/library/library.map +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : not copyrighted - public domain + +namespace http://www.codesynthesis.com/library ::library +{ + include "library.hxx"; + + isbn isbn isbn; + title title; + genre genre genre; + person person; + author author; + book book; + catalog catalog; +} diff --git a/xsd/examples/cxx/parser/library/library.xml b/xsd/examples/cxx/parser/library/library.xml new file mode 100644 index 0000000..2d9069c --- /dev/null +++ b/xsd/examples/cxx/parser/library/library.xml @@ -0,0 +1,53 @@ +<?xml version="1.0"?> + +<!-- + +file : examples/cxx/parser/library/library.xml +author : Boris Kolpackov <boris@codesynthesis.com> +copyright : not copyrighted - public domain + +--> + +<lib:catalog xmlns:lib="http://www.codesynthesis.com/library" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.codesynthesis.com/library library.xsd"> + + <book id="MM" available="false"> + <isbn>0679760806</isbn> + <title>The Master and Margarita</title> + <genre>fiction</genre> + + <author recommends="WP"> + <name>Mikhail Bulgakov</name> + <born>1891-05-15</born> + <died>1940-03-10</died> + </author> + </book> + + + <book id="WP" available="true" > + <isbn>0679600841</isbn> + <title>War and Peace</title> + <genre>history</genre> + + <author recommends="CP"> + <name>Leo Tolstoy</name> + <born>1828-09-09</born> + <died>1910-11-20</died> + </author> + </book> + + + <book id="CP" available="false"> + <isbn>0679420290</isbn> + <title>Crime and Punishment</title> + <genre>philosophy</genre> + + <author> + <name>Fyodor Dostoevsky</name> + <born>1821-11-11</born> + <died>1881-02-09</died> + </author> + </book> + +</lib:catalog> diff --git a/xsd/examples/cxx/parser/library/library.xsd b/xsd/examples/cxx/parser/library/library.xsd new file mode 100644 index 0000000..57654c7 --- /dev/null +++ b/xsd/examples/cxx/parser/library/library.xsd @@ -0,0 +1,79 @@ +<?xml version="1.0"?> + +<!-- + +file : examples/cxx/parser/library/library.xsd +author : Boris Kolpackov <boris@codesynthesis.com> +copyright : not copyrighted - public domain + +--> + +<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns:lib="http://www.codesynthesis.com/library" + targetNamespace="http://www.codesynthesis.com/library"> + + <xsd:simpleType name="isbn"> + <xsd:restriction base="xsd:unsignedInt"/> + </xsd:simpleType> + + + <xsd:complexType name="title"> + <xsd:simpleContent> + <xsd:extension base="xsd:string"> + <xsd:attribute name="lang" type="xsd:string"/> + </xsd:extension> + </xsd:simpleContent> + </xsd:complexType> + + + <xsd:simpleType name="genre"> + <xsd:restriction base="xsd:string"> + <xsd:enumeration value="romance"/> + <xsd:enumeration value="fiction"/> + <xsd:enumeration value="horror"/> + <xsd:enumeration value="history"/> + <xsd:enumeration value="philosophy"/> + </xsd:restriction> + </xsd:simpleType> + + + <xsd:complexType name="person"> + <xsd:sequence> + <xsd:element name="name" type="xsd:string"/> + <xsd:element name="born" type="xsd:string"/> + <xsd:element name="died" type="xsd:string" minOccurs="0"/> + </xsd:sequence> + </xsd:complexType> + + + <xsd:complexType name="author"> + <xsd:complexContent> + <xsd:extension base="lib:person"> + <xsd:attribute name="recommends" type="xsd:IDREF"/> <!-- Book --> + </xsd:extension> + </xsd:complexContent> + </xsd:complexType> + + + <xsd:complexType name="book"> + <xsd:sequence> + <xsd:element name="isbn" type="lib:isbn"/> + <xsd:element name="title" type="lib:title"/> + <xsd:element name="genre" type="lib:genre"/> + <xsd:element name="author" type="lib:author" maxOccurs="unbounded"/> + </xsd:sequence> + <xsd:attribute name="available" type="xsd:boolean" use="required"/> + <xsd:attribute name="id" type="xsd:ID" use="required"/> + </xsd:complexType> + + + <xsd:complexType name="catalog"> + <xsd:sequence> + <xsd:element name="book" type="lib:book" maxOccurs="unbounded"/> + </xsd:sequence> + </xsd:complexType> + + + <xsd:element name="catalog" type="lib:catalog"/> + +</xsd:schema> diff --git a/xsd/examples/cxx/parser/library/makefile b/xsd/examples/cxx/parser/library/makefile new file mode 100644 index 0000000..e4eec1a --- /dev/null +++ b/xsd/examples/cxx/parser/library/makefile @@ -0,0 +1,111 @@ +# file : examples/cxx/parser/library/makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../../build/bootstrap.make + +xsd := library.xsd +cxx := driver.cxx library-pimpl.cxx + +obj := $(addprefix $(out_base)/,$(cxx:.cxx=.o) $(xsd:.xsd=-pskel.o)) +dep := $(obj:.o=.o.d) + +driver := $(out_base)/driver +install := $(out_base)/.install +dist := $(out_base)/.dist +dist-win := $(out_base)/.dist-win +clean := $(out_base)/.clean + + +# Import. +# +$(call import,\ + $(scf_root)/import/libxerces-c/stub.make,\ + l: xerces_c.l,cpp-options: xerces_c.l.cpp-options) + + +# Build. +# +$(driver): $(obj) $(xerces_c.l) + +$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): $(xerces_c.l.cpp-options) + +genf := $(xsd:.xsd=-pskel.hxx) $(xsd:.xsd=-pskel.ixx) $(xsd:.xsd=-pskel.cxx) +gen := $(addprefix $(out_base)/,$(genf)) + +$(gen): xsd := $(out_root)/xsd/xsd +$(gen): xsd_options := --generate-inline --type-map $(src_base)/library.map +$(gen): $(out_root)/xsd/xsd $(src_base)/library.map + +$(call include-dep,$(dep)) + +# Convenience alias for default target. +# +$(out_base)/: $(driver) + + +# Install & Dist. +# +dist-common := $(out_base)/.dist-common + +$(install) $(dist) $(dist-win) $(dist-common): path := $(subst $(src_root)/,,$(src_base)) + +$(install): + $(call install-data,$(src_base)/README,$(install_doc_dir)/xsd/$(path)/README) + $(call install-data,$(src_base)/driver.cxx,$(install_doc_dir)/xsd/$(path)/driver.cxx) + $(call install-data,$(src_base)/library.xsd,$(install_doc_dir)/xsd/$(path)/library.xsd) + $(call install-data,$(src_base)/library.xml,$(install_doc_dir)/xsd/$(path)/library.xml) + $(call install-data,$(src_base)/library.map,$(install_doc_dir)/xsd/$(path)/library.map) + $(call install-data,$(src_base)/library.hxx,$(install_doc_dir)/xsd/$(path)/library.hxx) + $(call install-data,$(src_base)/library-pimpl.hxx,$(install_doc_dir)/xsd/$(path)/library-pimpl.hxx) + $(call install-data,$(src_base)/library-pimpl.cxx,$(install_doc_dir)/xsd/$(path)/library-pimpl.cxx) + +$(dist-common): + $(call install-data,$(src_base)/driver.cxx,$(dist_prefix)/$(path)/driver.cxx) + $(call install-data,$(src_base)/library.xsd,$(dist_prefix)/$(path)/library.xsd) + $(call install-data,$(src_base)/library.xml,$(dist_prefix)/$(path)/library.xml) + $(call install-data,$(src_base)/library.map,$(dist_prefix)/$(path)/library.map) + $(call install-data,$(src_base)/library.hxx,$(dist_prefix)/$(path)/library.hxx) + $(call install-data,$(src_base)/library-pimpl.hxx,$(dist_prefix)/$(path)/library-pimpl.hxx) + $(call install-data,$(src_base)/library-pimpl.cxx,$(dist_prefix)/$(path)/library-pimpl.cxx) + +$(dist): $(dist-common) + $(call install-data,$(src_base)/README,$(dist_prefix)/$(path)/README) + +$(dist-win): $(dist-common) + $(call install-data,$(src_base)/README,$(dist_prefix)/$(path)/README.txt) + $(call message,,unix2dos $(dist_prefix)/$(path)/README.txt) + +# Clean. +# +$(clean): $(driver).o.clean \ + $(addsuffix .cxx.clean,$(obj)) \ + $(addsuffix .cxx.clean,$(dep)) \ + $(addprefix $(out_base)/,$(xsd:.xsd=-pskel.cxx.xsd.clean)) + +# Generated .gitignore. +# +ifeq ($(out_base),$(src_base)) +$(gen): | $(out_base)/.gitignore +$(driver): | $(out_base)/.gitignore + +$(out_base)/.gitignore: files := driver $(genf) +$(clean): $(out_base)/.gitignore.clean + +$(call include,$(bld_root)/git/gitignore.make) +endif + +# How to. +# +$(call include,$(bld_root)/cxx/o-e.make) +$(call include,$(bld_root)/cxx/cxx-o.make) +$(call include,$(bld_root)/cxx/cxx-d.make) +$(call include,$(bld_root)/install.make) +$(call include,$(scf_root)/xsd/parser/xsd-cxx.make) + + +# Dependencies. +# +$(call import,$(src_root)/xsd/makefile) diff --git a/xsd/examples/cxx/parser/makefile b/xsd/examples/cxx/parser/makefile new file mode 100644 index 0000000..c1471cc --- /dev/null +++ b/xsd/examples/cxx/parser/makefile @@ -0,0 +1,42 @@ +# file : examples/cxx/parser/makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../build/bootstrap.make + +examples := generated hello library mixin mixed multiroot performance \ +polymorphism polyroot wildcard + +default := $(out_base)/ +install := $(out_base)/.install +dist := $(out_base)/.dist +dist-win := $(out_base)/.dist-win +clean := $(out_base)/.clean + +# Build +# +$(default): $(addprefix $(out_base)/,$(addsuffix /,$(examples))) + + +# Install & Dist. +# +$(install) $(dist) $(dist-win): path := $(subst $(src_root)/,,$(src_base)) + +$(install): $(addprefix $(out_base)/,$(addsuffix /.install,$(examples))) + $(call install-data,$(src_base)/README,$(install_doc_dir)/xsd/$(path)/README) + +$(dist): $(addprefix $(out_base)/,$(addsuffix /.dist,$(examples))) + $(call install-data,$(src_base)/README,$(dist_prefix)/$(path)/README) + +$(dist-win): $(addprefix $(out_base)/,$(addsuffix /.dist-win,$(examples))) + $(call install-data,$(src_base)/README,$(dist_prefix)/$(path)/README.txt) + $(call message,,unix2dos $(dist_prefix)/$(path)/README.txt) + +# Clean +# +$(clean): $(addprefix $(out_base)/,$(addsuffix /.clean,$(examples))) + +$(call include,$(bld_root)/install.make) + +$(foreach e,$(examples),$(call import,$(src_base)/$e/makefile)) diff --git a/xsd/examples/cxx/parser/mixed/README b/xsd/examples/cxx/parser/mixed/README new file mode 100644 index 0000000..23ace6f --- /dev/null +++ b/xsd/examples/cxx/parser/mixed/README @@ -0,0 +1,49 @@ +This example shows how to handle raw, "type-less content" such as +mixed content models, anyType/anySimpleType, and any/anyAttribute +in the C++/Parser mapping. + +In this example we use mixed content model to describe text +with embedded links, e.g., + + This paragraph talks about <a href="uri">time</a>. + +The example transforms such text into plain text with +references, e.g., + + This paragraph talks about time[0]. + + [0] uri + +The example consists of the following files: + +text.xsd + XML Schema which describes "text with links" instance + documents. + +text.xml + Sample XML instance document. + +anchor.hxx + Anchor type that captures the information about a link. + +text.map + Type map. It maps XML Schema anchor types defined in + text.xsd to C++ anchor class defined in anchor.hxx. + +text-pskel.hxx +text-pskel.cxx + Parser skeletons generated by XSD from text.xsd and + text.map. + +driver.cxx + A parser implementation and a driver for the example. The + parser implementation prints the transformed text to STDOUT. + The driver first constructs a parser instance from the parser + implementation mentioned above and a couple of predefined + parsers for the XML Schema built-in types. In then invokes + this parser instance to parse the input file. + +To run the example on the sample XML instance document simply +execute: + +$ ./driver text.xml diff --git a/xsd/examples/cxx/parser/mixed/anchor.hxx b/xsd/examples/cxx/parser/mixed/anchor.hxx new file mode 100644 index 0000000..bc1b54d --- /dev/null +++ b/xsd/examples/cxx/parser/mixed/anchor.hxx @@ -0,0 +1,34 @@ +// file : examples/cxx/parser/mixed/anchor.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : not copyrighted - public domain + +#ifndef ANCHOR_HXX +#define ANCHOR_HXX + +#include <string> + +struct anchor +{ + anchor (const std::string& text, const std::string& uri) + : uri_ (uri), text_ (text) + { + } + + const std::string& + text () const + { + return text_; + } + + const std::string& + uri () const + { + return uri_; + } + +private: + std::string uri_; + std::string text_; +}; + +#endif // ANCHOR_HXX diff --git a/xsd/examples/cxx/parser/mixed/driver.cxx b/xsd/examples/cxx/parser/mixed/driver.cxx new file mode 100644 index 0000000..45067f0 --- /dev/null +++ b/xsd/examples/cxx/parser/mixed/driver.cxx @@ -0,0 +1,101 @@ +// file : examples/cxx/parser/mixed/driver.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : not copyrighted - public domain + +#include <string> +#include <vector> +#include <iostream> + +#include "anchor.hxx" +#include "text-pskel.hxx" + +using namespace std; + +struct anchor_pimpl: anchor_pskel, xml_schema::string_pimpl +{ + virtual void + href (const std::string& uri) + { + uri_ = uri; + } + + virtual anchor + post_anchor () + { + return anchor (post_string (), uri_); + } + +private: + std::string uri_; +}; + + +struct text_pimpl: text_pskel +{ + virtual void + a (const anchor& a) + { + cout << a.text () << "[" << anchors_.size () << "]"; + anchors_.push_back (a); + } + + virtual void + _any_characters (const xml_schema::ro_string& s) + { + cout << s; + } + + virtual void + post_text () + { + for (anchors::const_iterator i (anchors_.begin ()); + i != anchors_.end (); + ++i) + { + cout << "[" << i - anchors_.begin () << "] " << i->uri () << endl; + } + } + +private: + typedef vector<anchor> anchors; + anchors anchors_; +}; + + +int +main (int argc, char* argv[]) +{ + if (argc != 2) + { + cerr << "usage: " << argv[0] << " text.xml" << endl; + return 1; + } + + try + { + // Construct the parser. + // + xml_schema::string_pimpl string_p; + anchor_pimpl anchor_p; + text_pimpl text_p; + + anchor_p.href_parser (string_p); + text_p.a_parser (anchor_p); + + xml_schema::document doc_p (text_p, "text"); + + text_p.pre (); + doc_p.parse (argv[1]); + text_p.post_text (); + } + catch (const xml_schema::exception& e) + { + cerr << e << endl; + return 1; + } + catch (const std::ios_base::failure&) + { + cerr << argv[1] << ": unable to open or read failure" << endl; + return 1; + } +} diff --git a/xsd/examples/cxx/parser/mixed/makefile b/xsd/examples/cxx/parser/mixed/makefile new file mode 100644 index 0000000..8563a1e --- /dev/null +++ b/xsd/examples/cxx/parser/mixed/makefile @@ -0,0 +1,108 @@ +# file : examples/cxx/parser/mixed/makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../../build/bootstrap.make + +xsd := text.xsd +cxx := driver.cxx + +obj := $(addprefix $(out_base)/,$(cxx:.cxx=.o) $(xsd:.xsd=-pskel.o)) +dep := $(obj:.o=.o.d) + +driver := $(out_base)/driver +install := $(out_base)/.install +dist := $(out_base)/.dist +dist-win := $(out_base)/.dist-win +clean := $(out_base)/.clean + + +# Import. +# +$(call import,\ + $(scf_root)/import/libxerces-c/stub.make,\ + l: xerces_c.l,cpp-options: xerces_c.l.cpp-options) + + +# Build. +# +$(driver): $(obj) $(xerces_c.l) + +$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): $(xerces_c.l.cpp-options) + +genf := $(xsd:.xsd=-pskel.hxx) $(xsd:.xsd=-pskel.ixx) $(xsd:.xsd=-pskel.cxx) +gen := $(addprefix $(out_base)/,$(genf)) + +$(gen): xsd := $(out_root)/xsd/xsd +$(gen): xsd_options := --type-map $(src_base)/text.map +$(gen): $(out_root)/xsd/xsd $(src_base)/text.map + +$(call include-dep,$(dep)) + +# Convenience alias for default target. +# +$(out_base)/: $(driver) + + +# Install & Dist. +# +dist-common := $(out_base)/.dist-common + +$(install) $(dist) $(dist-win) $(dist-common): path := $(subst $(src_root)/,,$(src_base)) + +$(install): + $(call install-data,$(src_base)/README,$(install_doc_dir)/xsd/$(path)/README) + $(call install-data,$(src_base)/driver.cxx,$(install_doc_dir)/xsd/$(path)/driver.cxx) + $(call install-data,$(src_base)/text.xsd,$(install_doc_dir)/xsd/$(path)/text.xsd) + $(call install-data,$(src_base)/text.xml,$(install_doc_dir)/xsd/$(path)/text.xml) + $(call install-data,$(src_base)/text.map,$(install_doc_dir)/xsd/$(path)/text.map) + $(call install-data,$(src_base)/anchor.hxx,$(install_doc_dir)/xsd/$(path)/anchor.hxx) + +$(dist-common): + $(call install-data,$(src_base)/driver.cxx,$(dist_prefix)/$(path)/driver.cxx) + $(call install-data,$(src_base)/text.xsd,$(dist_prefix)/$(path)/text.xsd) + $(call install-data,$(src_base)/text.xml,$(dist_prefix)/$(path)/text.xml) + $(call install-data,$(src_base)/text.map,$(dist_prefix)/$(path)/text.map) + $(call install-data,$(src_base)/anchor.hxx,$(dist_prefix)/$(path)/anchor.hxx) + +$(dist): $(dist-common) + $(call install-data,$(src_base)/README,$(dist_prefix)/$(path)/README) + +$(dist-win): $(dist-common) + $(call install-data,$(src_base)/README,$(dist_prefix)/$(path)/README.txt) + $(call message,,unix2dos $(dist_prefix)/$(path)/README.txt) + + +# Clean. +# +$(clean): $(driver).o.clean \ + $(addsuffix .cxx.clean,$(obj)) \ + $(addsuffix .cxx.clean,$(dep)) \ + $(addprefix $(out_base)/,$(xsd:.xsd=-pskel.cxx.xsd.clean)) + +# Generated .gitignore. +# +ifeq ($(out_base),$(src_base)) +$(gen): | $(out_base)/.gitignore +$(driver): | $(out_base)/.gitignore + +$(out_base)/.gitignore: files := driver $(genf) +$(clean): $(out_base)/.gitignore.clean + +$(call include,$(bld_root)/git/gitignore.make) +endif + +# How to. +# +$(call include,$(bld_root)/cxx/o-e.make) +$(call include,$(bld_root)/cxx/cxx-o.make) +$(call include,$(bld_root)/cxx/cxx-d.make) +$(call include,$(bld_root)/install.make) +$(call include,$(scf_root)/xsd/parser/xsd-cxx.make) + + +# Dependencies. +# +$(call import,$(src_root)/xsd/makefile) diff --git a/xsd/examples/cxx/parser/mixed/text.map b/xsd/examples/cxx/parser/mixed/text.map new file mode 100644 index 0000000..e44caf3 --- /dev/null +++ b/xsd/examples/cxx/parser/mixed/text.map @@ -0,0 +1,7 @@ +# file : examples/cxx/parser/mixed/text.map +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : not copyrighted - public domain + +include "anchor.hxx"; + +anchor ::anchor; diff --git a/xsd/examples/cxx/parser/mixed/text.xml b/xsd/examples/cxx/parser/mixed/text.xml new file mode 100644 index 0000000..97d4d21 --- /dev/null +++ b/xsd/examples/cxx/parser/mixed/text.xml @@ -0,0 +1,18 @@ +<?xml version="1.0"?> + +<!-- + +file : examples/cxx/parser/text/text.xml +author : Boris Kolpackov <boris@codesynthesis.com> +copyright : not copyrighted - public domain + +--> + +<text xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="text.xsd"> + +The first paragraph of this text talks about <a href="http://en.wikipedia.org/wiki/time">time</a>. + +And this paragraph talks about <a href="http://en.wikipedia.org/wiki/space">space</a>. + +</text> diff --git a/xsd/examples/cxx/parser/mixed/text.xsd b/xsd/examples/cxx/parser/mixed/text.xsd new file mode 100644 index 0000000..4929964 --- /dev/null +++ b/xsd/examples/cxx/parser/mixed/text.xsd @@ -0,0 +1,29 @@ +<?xml version="1.0"?> + +<!-- + +file : examples/cxx/parser/mixed/text.xsd +author : Boris Kolpackov <boris@codesynthesis.com> +copyright : not copyrighted - public domain + +--> + +<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + + <xsd:complexType name="anchor"> + <xsd:simpleContent> + <xsd:extension base="xsd:string"> + <xsd:attribute name="href" type="xsd:string" use="required"/> + </xsd:extension> + </xsd:simpleContent> + </xsd:complexType> + + <xsd:complexType name="text" mixed="true"> + <xsd:sequence> + <xsd:element name="a" type="anchor" minOccurs="0" maxOccurs="unbounded"/> + </xsd:sequence> + </xsd:complexType> + + <xsd:element name="text" type="text"/> + +</xsd:schema> diff --git a/xsd/examples/cxx/parser/mixin/README b/xsd/examples/cxx/parser/mixin/README new file mode 100644 index 0000000..343e379 --- /dev/null +++ b/xsd/examples/cxx/parser/mixin/README @@ -0,0 +1,34 @@ +This example shows how to reuse implementations of base parsers +in derived parsers using the mixin C++ idiom. + +The example consists of the following files: + +schema.xsd + XML Schema which defined two data types: base and + derived. + +instance.xml + Sample XML instance document. + +types.hxx + C++ classes that correspond to the base and derived + types in schema.xsd. + +schema.map + Type map. It maps XML Schema types defined in schema.xsd + to C++ types defined in types.hxx. + +schema-pskel.hxx +schema-pskel.cxx + Parser skeletons generated by XSD from schema.xsd and + schema.map. + +driver.cxx + Parser implementations and a driver for the example. It + shows how to mix the implementation of the base parser + into the derived parser. + +To run the example on the sample XML instance document simply +execute: + +$ ./driver instance.xml diff --git a/xsd/examples/cxx/parser/mixin/driver.cxx b/xsd/examples/cxx/parser/mixin/driver.cxx new file mode 100644 index 0000000..41e5a45 --- /dev/null +++ b/xsd/examples/cxx/parser/mixin/driver.cxx @@ -0,0 +1,104 @@ +// file : examples/cxx/parser/mixin/driver.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : not copyrighted - public domain + +#include <memory> +#include <iostream> + +#include "types.hxx" +#include "schema-pskel.hxx" + +using namespace std; + +struct base_pimpl: virtual base_pskel +{ + virtual void + pre () + { + base_.reset (new ::base); + } + + virtual void + a (bool v) + { + base_->a (v); + } + + virtual base* + post_base () + { + return base_.release (); + } + +protected: + auto_ptr<base> base_; +}; + +// Implement derived parser by mixing-in base's implementation. +// +struct derived_pimpl: derived_pskel, base_pimpl +{ + virtual void + pre () + { + // Override base's pre() with the new implementation that + // instantiates derived instead of base. + // + base_.reset (new ::derived); + } + + virtual void + b (int v) + { + // We could also store a pointer to derived in derived_impl to + // avoid casting. + // + static_cast< ::derived* > (base_.get ())->b (v); + } + + virtual derived* + post_derived () + { + return static_cast<derived*> (base_.release ()); + } +}; + +int +main (int argc, char* argv[]) +{ + if (argc != 2) + { + cerr << "usage: " << argv[0] << " instance.xml" << endl; + return 1; + } + + try + { + // Construct the parser. + // + xml_schema::boolean_pimpl bool_p; + xml_schema::int_pimpl int_p; + derived_pimpl derived_p; + + derived_p.parsers (bool_p, int_p); + + xml_schema::document doc_p (derived_p, "root"); + + derived_p.pre (); + doc_p.parse (argv[1]); + auto_ptr<derived> d (derived_p.post_derived ()); + + cerr << "a: " << boolalpha << d->a () << endl; + cerr << "b: " << d->b () << endl; + } + catch (const xml_schema::exception& e) + { + cerr << e << endl; + return 1; + } + catch (const std::ios_base::failure&) + { + cerr << argv[1] << ": unable to open or read failure" << endl; + return 1; + } +} diff --git a/xsd/examples/cxx/parser/mixin/instance.xml b/xsd/examples/cxx/parser/mixin/instance.xml new file mode 100644 index 0000000..265271b --- /dev/null +++ b/xsd/examples/cxx/parser/mixin/instance.xml @@ -0,0 +1,17 @@ +<?xml version="1.0"?> + +<!-- + +file : examples/cxx/parser/mixin/instance.xml +author : Boris Kolpackov <boris@codesynthesis.com> +copyright : not copyrighted - public domain + +--> + +<root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="schema.xsd"> + + <a>true</a> + <b>1</b> + +</root> diff --git a/xsd/examples/cxx/parser/mixin/makefile b/xsd/examples/cxx/parser/mixin/makefile new file mode 100644 index 0000000..9021106 --- /dev/null +++ b/xsd/examples/cxx/parser/mixin/makefile @@ -0,0 +1,108 @@ +# file : examples/cxx/parser/mixin/makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../../build/bootstrap.make + +xsd := schema.xsd +cxx := driver.cxx + +obj := $(addprefix $(out_base)/,$(cxx:.cxx=.o) $(xsd:.xsd=-pskel.o)) +dep := $(obj:.o=.o.d) + +driver := $(out_base)/driver +install := $(out_base)/.install +dist := $(out_base)/.dist +dist-win := $(out_base)/.dist-win +clean := $(out_base)/.clean + + +# Import. +# +$(call import,\ + $(scf_root)/import/libxerces-c/stub.make,\ + l: xerces_c.l,cpp-options: xerces_c.l.cpp-options) + + +# Build. +# +$(driver): $(obj) $(xerces_c.l) + +$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): $(xerces_c.l.cpp-options) + +genf := $(xsd:.xsd=-pskel.hxx) $(xsd:.xsd=-pskel.ixx) $(xsd:.xsd=-pskel.cxx) +gen := $(addprefix $(out_base)/,$(genf)) + +$(gen): xsd := $(out_root)/xsd/xsd +$(gen): xsd_options := --type-map $(src_base)/schema.map +$(gen): $(out_root)/xsd/xsd $(src_base)/schema.map + +$(call include-dep,$(dep)) + +# Convenience alias for default target. +# +$(out_base)/: $(driver) + + +# Install & Dist. +# +dist-common := $(out_base)/.dist-common + +$(install) $(dist) $(dist-win) $(dist-common): path := $(subst $(src_root)/,,$(src_base)) + +$(install): + $(call install-data,$(src_base)/README,$(install_doc_dir)/xsd/$(path)/README) + $(call install-data,$(src_base)/driver.cxx,$(install_doc_dir)/xsd/$(path)/driver.cxx) + $(call install-data,$(src_base)/schema.xsd,$(install_doc_dir)/xsd/$(path)/schema.xsd) + $(call install-data,$(src_base)/instance.xml,$(install_doc_dir)/xsd/$(path)/instance.xml) + $(call install-data,$(src_base)/schema.map,$(install_doc_dir)/xsd/$(path)/schema.map) + $(call install-data,$(src_base)/types.hxx,$(install_doc_dir)/xsd/$(path)/types.hxx) + +$(dist-common): + $(call install-data,$(src_base)/driver.cxx,$(dist_prefix)/$(path)/driver.cxx) + $(call install-data,$(src_base)/schema.xsd,$(dist_prefix)/$(path)/schema.xsd) + $(call install-data,$(src_base)/instance.xml,$(dist_prefix)/$(path)/instance.xml) + $(call install-data,$(src_base)/schema.map,$(dist_prefix)/$(path)/schema.map) + $(call install-data,$(src_base)/types.hxx,$(dist_prefix)/$(path)/types.hxx) + +$(dist): $(dist-common) + $(call install-data,$(src_base)/README,$(dist_prefix)/$(path)/README) + +$(dist-win): $(dist-common) + $(call install-data,$(src_base)/README,$(dist_prefix)/$(path)/README.txt) + $(call message,,unix2dos $(dist_prefix)/$(path)/README.txt) + + +# Clean. +# +$(clean): $(driver).o.clean \ + $(addsuffix .cxx.clean,$(obj)) \ + $(addsuffix .cxx.clean,$(dep)) \ + $(addprefix $(out_base)/,$(xsd:.xsd=-pskel.cxx.xsd.clean)) + +# Generated .gitignore. +# +ifeq ($(out_base),$(src_base)) +$(gen): | $(out_base)/.gitignore +$(driver): | $(out_base)/.gitignore + +$(out_base)/.gitignore: files := driver $(genf) +$(clean): $(out_base)/.gitignore.clean + +$(call include,$(bld_root)/git/gitignore.make) +endif + +# How to. +# +$(call include,$(bld_root)/cxx/o-e.make) +$(call include,$(bld_root)/cxx/cxx-o.make) +$(call include,$(bld_root)/cxx/cxx-d.make) +$(call include,$(bld_root)/install.make) +$(call include,$(scf_root)/xsd/parser/xsd-cxx.make) + + +# Dependencies. +# +$(call import,$(src_root)/xsd/makefile) diff --git a/xsd/examples/cxx/parser/mixin/schema.map b/xsd/examples/cxx/parser/mixin/schema.map new file mode 100644 index 0000000..22edb1e --- /dev/null +++ b/xsd/examples/cxx/parser/mixin/schema.map @@ -0,0 +1,8 @@ +# file : examples/cxx/parser/mixin/schema.map +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : not copyrighted - public domain + +include "types.hxx"; + +base ::base*; +derived ::derived*; diff --git a/xsd/examples/cxx/parser/mixin/schema.xsd b/xsd/examples/cxx/parser/mixin/schema.xsd new file mode 100644 index 0000000..59d8d3b --- /dev/null +++ b/xsd/examples/cxx/parser/mixin/schema.xsd @@ -0,0 +1,31 @@ +<?xml version="1.0"?> + +<!-- + +file : examples/cxx/parser/mixin/schema.xsd +author : Boris Kolpackov <boris@codesynthesis.com> +copyright : not copyrighted - public domain + +--> + +<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + + <xsd:complexType name="base"> + <xsd:sequence> + <xsd:element name="a" type="xsd:boolean"/> + </xsd:sequence> + </xsd:complexType> + + <xsd:complexType name="derived"> + <xsd:complexContent> + <xsd:extension base="base"> + <xsd:sequence> + <xsd:element name="b" type="xsd:int"/> + </xsd:sequence> + </xsd:extension> + </xsd:complexContent> + </xsd:complexType> + + <xsd:element name="root" type="derived"/> + +</xsd:schema> diff --git a/xsd/examples/cxx/parser/mixin/types.hxx b/xsd/examples/cxx/parser/mixin/types.hxx new file mode 100644 index 0000000..708dfc3 --- /dev/null +++ b/xsd/examples/cxx/parser/mixin/types.hxx @@ -0,0 +1,44 @@ +// file : examples/cxx/parser/mixin/types.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : not copyrighted - public domain + +#ifndef TYPES_HXX +#define TYPES_HXX + +struct base +{ + bool + a () const + { + return a_; + } + + void + a (bool v) + { + a_ = v; + } + +private: + bool a_; +}; + +struct derived: base +{ + int + b () const + { + return b_; + } + + void + b (int v) + { + b_ = v; + } + +private: + int b_; +}; + +#endif // TYPES_HXX diff --git a/xsd/examples/cxx/parser/multiroot/README b/xsd/examples/cxx/parser/multiroot/README new file mode 100644 index 0000000..041dfec --- /dev/null +++ b/xsd/examples/cxx/parser/multiroot/README @@ -0,0 +1,51 @@ +This example shows how to handle XML vocabularies with multiple +root elements using the C++/Parser mapping. + +The example consists of the following files: + +protocol.xsd + XML Schema which defines a simple bank account protocol with + requests such as withdraw and deposit. + +balance.xml +withdraw.xml +deposit.xml + Sample XML instances for the protocol requests. + +protocol.hxx + C++ types that describe the protocol requests. These are + hand-written. + +protocol.map + Type map. It maps XML Schema types defined in protocol.xsd + to the C++ types defined in protocol.hxx. + +protocol-pskel.hxx +protocol-pskel.cxx + Parser skeletons generated by XSD from protocol.xsd and + protocol.map. + +protocol-pimpl.hxx +protocol-pimpl.cxx + Parser implementations that construct the custom object + model from an XML instance using the types from protocol.hxx. + These are hand-written implementations of the parser skeletons + defined in protocol-pskel.hxx. + +driver.cxx + Driver for the example. It implements a custom document parser + that determines which request is being parsed and uses the + corresponding parser implementation. The document parser + intentionally does not support the deposit request to show + how to handle unknown documents. The driver first constructs + a parser instance from all the individual parsers found in + protocol-pimpl.hxx. In then invokes this parser instance to + parse the input file and produce the in-memory object model. + Finally, it prints the contents of the object model to STDERR. + +To run the example on the sample XML request documents simply +execute: + +$ ./driver balance.xml +$ ./driver withdraw.xml +$ ./driver deposit.xml diff --git a/xsd/examples/cxx/parser/multiroot/balance.xml b/xsd/examples/cxx/parser/multiroot/balance.xml new file mode 100644 index 0000000..df0a6e9 --- /dev/null +++ b/xsd/examples/cxx/parser/multiroot/balance.xml @@ -0,0 +1,17 @@ +<?xml version="1.0"?> + +<!-- + +file : examples/cxx/parser/multiroot/balance.xml +author : Boris Kolpackov <boris@codesynthesis.com> +copyright : not copyrighted - public domain + +--> + +<p:balance xmlns:p="http://www.codesynthesis.com/protocol" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.codesynthesis.com/protocol protocol.xsd"> + + <account>123456789</account> + +</p:balance> diff --git a/xsd/examples/cxx/parser/multiroot/deposit.xml b/xsd/examples/cxx/parser/multiroot/deposit.xml new file mode 100644 index 0000000..3043c52 --- /dev/null +++ b/xsd/examples/cxx/parser/multiroot/deposit.xml @@ -0,0 +1,18 @@ +<?xml version="1.0"?> + +<!-- + +file : examples/cxx/parser/multiroot/deposit.xml +author : Boris Kolpackov <boris@codesynthesis.com> +copyright : not copyrighted - public domain + +--> + +<p:deposit xmlns:p="http://www.codesynthesis.com/protocol" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.codesynthesis.com/protocol protocol.xsd"> + + <account>123456789</account> + <amount>1000000</amount> + +</p:deposit> diff --git a/xsd/examples/cxx/parser/multiroot/driver.cxx b/xsd/examples/cxx/parser/multiroot/driver.cxx new file mode 100644 index 0000000..9e5d874 --- /dev/null +++ b/xsd/examples/cxx/parser/multiroot/driver.cxx @@ -0,0 +1,162 @@ +// file : examples/cxx/parser/multiroot/driver.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : not copyrighted - public domain + +#include <memory> // std::auto_ptr +#include <iostream> + +#include "protocol.hxx" +#include "protocol-pimpl.hxx" + +using std::cerr; +using std::endl; +using xml_schema::ro_string; + +namespace protocol +{ + // Customize the xml_schema::document object to handle our protocol + // vocabulary with multiple root elements. + // + class document: public xml_schema::document + { + public: + document (balance_pskel& balance_p, withdraw_pskel& withdraw_p) + : balance_p_ (balance_p), withdraw_p_ (withdraw_p) + { + } + + request* + result () + { + return result_.release (); + } + + protected: + // This function is called to obtain the root element type parser. + // If the returned pointed is 0 then the whole document content + // is ignored. The type argument is used to handle polymorphic + // XML documents and is not used in this example (see the polyroot + // example for more information on this argument). + // + virtual xml_schema::parser_base* + start_root_element (const ro_string& ns, + const ro_string& name, + const ro_string* /* type */) + { + if (ns == "http://www.codesynthesis.com/protocol") + { + if (name == "balance") + { + balance_p_.pre (); + + return &balance_p_; + } + else if (name == "withdraw") + { + balance_p_.pre (); + + return &withdraw_p_; + } + } + + cerr << "ignoring unknown request: " << ns << "#" << name << endl; + + return 0; + } + + // This function is called to indicate the completion of document + // parsing. The parser argument contains the pointer returned by + // start_root_element. + // + virtual void + end_root_element (const ro_string& /* ns */, + const ro_string& /* name */, + xml_schema::parser_base* parser) + { + // We could have handled the result directly in this function + // instead of storing it in the result_ variable. + // + if (parser == &balance_p_) + { + result_.reset (balance_p_.post_balance ()); + } + else if (parser == &withdraw_p_) + { + result_.reset (withdraw_p_.post_withdraw ()); + } + else + result_.reset (0); + } + + + private: + std::auto_ptr<request> result_; + + balance_pskel& balance_p_; + withdraw_pskel& withdraw_p_; + }; +} + + +int +main (int argc, char* argv[]) +{ + if (argc != 2) + { + cerr << "usage: " << argv[0] << " request.xml" << endl; + return 1; + } + + try + { + using namespace protocol; + + // Construct the parser. + // + xml_schema::unsigned_int_pimpl unsigned_int_p; + + balance_pimpl balance_p; + withdraw_pimpl withdraw_p; + + balance_p.parsers (unsigned_int_p); // account + + withdraw_p.parsers (unsigned_int_p, // account + unsigned_int_p); // amount + + // Parse the XML instance document. + // + document doc_p (balance_p, withdraw_p); + + // pre() and post() will be called as part of the start_root_element() + // and end_root_element() calls. + // + doc_p.parse (argv[1]); + std::auto_ptr<request> r (doc_p.result ()); + + // Let's print what we've got. + // + if (balance* b = dynamic_cast<balance*> (r.get ())) + { + cerr << "balance request for acc# " << b->account () << endl; + } + else if (withdraw* w = dynamic_cast<withdraw*> (r.get ())) + { + cerr << "withdrawal request for acc# " << w->account () << ", " + << "amount: " << w->amount () << endl; + } + else + { + cerr << "unknown request" << endl; + } + } + catch (const xml_schema::exception& e) + { + cerr << e << endl; + return 1; + } + catch (const std::ios_base::failure&) + { + cerr << argv[1] << ": unable to open or read failure" << endl; + return 1; + } +} diff --git a/xsd/examples/cxx/parser/multiroot/makefile b/xsd/examples/cxx/parser/multiroot/makefile new file mode 100644 index 0000000..57fa732 --- /dev/null +++ b/xsd/examples/cxx/parser/multiroot/makefile @@ -0,0 +1,114 @@ +# file : examples/cxx/parser/multiroot/makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../../build/bootstrap.make + +xsd := protocol.xsd +cxx := driver.cxx protocol-pimpl.cxx + +obj := $(addprefix $(out_base)/,$(cxx:.cxx=.o) $(xsd:.xsd=-pskel.o)) +dep := $(obj:.o=.o.d) + +driver := $(out_base)/driver +install := $(out_base)/.install +dist := $(out_base)/.dist +dist-win := $(out_base)/.dist-win +clean := $(out_base)/.clean + + +# Import. +# +$(call import,\ + $(scf_root)/import/libxerces-c/stub.make,\ + l: xerces_c.l,cpp-options: xerces_c.l.cpp-options) + + +# Build. +# +$(driver): $(obj) $(xerces_c.l) + +$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): $(xerces_c.l.cpp-options) + +genf := $(xsd:.xsd=-pskel.hxx) $(xsd:.xsd=-pskel.ixx) $(xsd:.xsd=-pskel.cxx) +gen := $(addprefix $(out_base)/,$(genf)) + +$(gen): xsd := $(out_root)/xsd/xsd +$(gen): xsd_options := --type-map $(src_base)/protocol.map +$(gen): $(out_root)/xsd/xsd $(src_base)/protocol.map + +$(call include-dep,$(dep)) + +# Convenience alias for default target. +# +$(out_base)/: $(driver) + + +# Install & Dist. +# +dist-common := $(out_base)/.dist-common + +$(install) $(dist) $(dist-win) $(dist-common): path := $(subst $(src_root)/,,$(src_base)) + +$(install): + $(call install-data,$(src_base)/README,$(install_doc_dir)/xsd/$(path)/README) + $(call install-data,$(src_base)/driver.cxx,$(install_doc_dir)/xsd/$(path)/driver.cxx) + $(call install-data,$(src_base)/protocol.xsd,$(install_doc_dir)/xsd/$(path)/protocol.xsd) + $(call install-data,$(src_base)/balance.xml,$(install_doc_dir)/xsd/$(path)/balance.xml) + $(call install-data,$(src_base)/deposit.xml,$(install_doc_dir)/xsd/$(path)/deposit.xml) + $(call install-data,$(src_base)/withdraw.xml,$(install_doc_dir)/xsd/$(path)/withdraw.xml) + $(call install-data,$(src_base)/protocol.map,$(install_doc_dir)/xsd/$(path)/protocol.map) + $(call install-data,$(src_base)/protocol.hxx,$(install_doc_dir)/xsd/$(path)/protocol.hxx) + $(call install-data,$(src_base)/protocol-pimpl.hxx,$(install_doc_dir)/xsd/$(path)/protocol-pimpl.hxx) + $(call install-data,$(src_base)/protocol-pimpl.cxx,$(install_doc_dir)/xsd/$(path)/protocol-pimpl.cxx) + +$(dist-common): + $(call install-data,$(src_base)/driver.cxx,$(dist_prefix)/$(path)/driver.cxx) + $(call install-data,$(src_base)/protocol.xsd,$(dist_prefix)/$(path)/protocol.xsd) + $(call install-data,$(src_base)/balance.xml,$(dist_prefix)/$(path)/balance.xml) + $(call install-data,$(src_base)/deposit.xml,$(dist_prefix)/$(path)/deposit.xml) + $(call install-data,$(src_base)/withdraw.xml,$(dist_prefix)/$(path)/withdraw.xml) + $(call install-data,$(src_base)/protocol.map,$(dist_prefix)/$(path)/protocol.map) + $(call install-data,$(src_base)/protocol.hxx,$(dist_prefix)/$(path)/protocol.hxx) + $(call install-data,$(src_base)/protocol-pimpl.hxx,$(dist_prefix)/$(path)/protocol-pimpl.hxx) + $(call install-data,$(src_base)/protocol-pimpl.cxx,$(dist_prefix)/$(path)/protocol-pimpl.cxx) + +$(dist): $(dist-common) + $(call install-data,$(src_base)/README,$(dist_prefix)/$(path)/README) + +$(dist-win): $(dist-common) + $(call install-data,$(src_base)/README,$(dist_prefix)/$(path)/README.txt) + $(call message,,unix2dos $(dist_prefix)/$(path)/README.txt) + +# Clean. +# +$(clean): $(driver).o.clean \ + $(addsuffix .cxx.clean,$(obj)) \ + $(addsuffix .cxx.clean,$(dep)) \ + $(addprefix $(out_base)/,$(xsd:.xsd=-pskel.cxx.xsd.clean)) + +# Generated .gitignore. +# +ifeq ($(out_base),$(src_base)) +$(gen): | $(out_base)/.gitignore +$(driver): | $(out_base)/.gitignore + +$(out_base)/.gitignore: files := driver $(genf) +$(clean): $(out_base)/.gitignore.clean + +$(call include,$(bld_root)/git/gitignore.make) +endif + +# How to. +# +$(call include,$(bld_root)/cxx/o-e.make) +$(call include,$(bld_root)/cxx/cxx-o.make) +$(call include,$(bld_root)/cxx/cxx-d.make) +$(call include,$(bld_root)/install.make) +$(call include,$(scf_root)/xsd/parser/xsd-cxx.make) + +# Dependencies. +# +$(call import,$(src_root)/xsd/makefile) diff --git a/xsd/examples/cxx/parser/multiroot/protocol-pimpl.cxx b/xsd/examples/cxx/parser/multiroot/protocol-pimpl.cxx new file mode 100644 index 0000000..09a04b3 --- /dev/null +++ b/xsd/examples/cxx/parser/multiroot/protocol-pimpl.cxx @@ -0,0 +1,47 @@ +// file : examples/cxx/parser/multiroot/protocol-pimpl.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : not copyrighted - public domain + +#include "protocol-pimpl.hxx" + +namespace protocol +{ + // request_pimpl + // + void request_pimpl:: + account (unsigned int account) + { + account_ = account; + } + + request* request_pimpl:: + post_request () + { + // This parser is never used directly. + // + return 0; + } + + // balance_pimpl + // + balance* balance_pimpl:: + post_balance () + { + return new balance (account_); + } + + // withdraw_pimpl + // + void withdraw_pimpl:: + amount (unsigned int amount) + { + amount_ = amount; + } + + withdraw* withdraw_pimpl:: + post_withdraw () + { + return new withdraw (account_, amount_); + } +} + diff --git a/xsd/examples/cxx/parser/multiroot/protocol-pimpl.hxx b/xsd/examples/cxx/parser/multiroot/protocol-pimpl.hxx new file mode 100644 index 0000000..0531790 --- /dev/null +++ b/xsd/examples/cxx/parser/multiroot/protocol-pimpl.hxx @@ -0,0 +1,49 @@ +// file : examples/cxx/parser/multiroot/protocol-pimpl.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : not copyrighted - public domain + +#ifndef PROTOCOL_PIMPL_HXX +#define PROTOCOL_PIMPL_HXX + +#include "protocol.hxx" +#include "protocol-pskel.hxx" + +namespace protocol +{ + class request_pimpl: public virtual request_pskel + { + public: + virtual void + account (unsigned int); + + virtual request* + post_request (); + + protected: + unsigned int account_; + }; + + class balance_pimpl: public virtual balance_pskel, + public request_pimpl + { + public: + virtual balance* + post_balance (); + }; + + class withdraw_pimpl: public virtual withdraw_pskel, + public request_pimpl + { + public: + virtual void + amount (unsigned int); + + virtual withdraw* + post_withdraw (); + + private: + unsigned int amount_; + }; +} + +#endif // PROTOCOL_PIMPL_HXX diff --git a/xsd/examples/cxx/parser/multiroot/protocol.hxx b/xsd/examples/cxx/parser/multiroot/protocol.hxx new file mode 100644 index 0000000..f076140 --- /dev/null +++ b/xsd/examples/cxx/parser/multiroot/protocol.hxx @@ -0,0 +1,62 @@ +// file : examples/cxx/parser/multiroot/protocol.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : not copyrighted - public domain + +#ifndef PROTOCOL_HXX +#define PROTOCOL_HXX + +namespace protocol +{ + class request + { + public: + virtual + ~request () + { + } + + unsigned int + account () const + { + return account_; + } + + protected: + request (unsigned int account) + : account_ (account) + { + } + + private: + unsigned int account_; + }; + + class balance: public request + { + public: + balance (unsigned int account) + : request (account) + { + } + }; + + class withdraw: public request + { + public: + withdraw (unsigned int account, unsigned int amount) + : request (account), amount_ (amount) + { + } + + unsigned int + amount () const + { + return amount_; + } + + private: + unsigned int amount_; + }; +} + +#endif // PROTOCOL_HXX diff --git a/xsd/examples/cxx/parser/multiroot/protocol.map b/xsd/examples/cxx/parser/multiroot/protocol.map new file mode 100644 index 0000000..7389fa9 --- /dev/null +++ b/xsd/examples/cxx/parser/multiroot/protocol.map @@ -0,0 +1,12 @@ +# file : examples/cxx/parser/multiroot/protocol.map +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : not copyrighted - public domain + +namespace http://www.codesynthesis.com/protocol ::protocol +{ + include "protocol.hxx"; + + request request*; + balance balance*; + withdraw withdraw*; +} diff --git a/xsd/examples/cxx/parser/multiroot/protocol.xsd b/xsd/examples/cxx/parser/multiroot/protocol.xsd new file mode 100644 index 0000000..4b29926 --- /dev/null +++ b/xsd/examples/cxx/parser/multiroot/protocol.xsd @@ -0,0 +1,51 @@ +<?xml version="1.0"?> + +<!-- + +file : examples/cxx/parser/multiroot/protocol.xsd +author : Boris Kolpackov <boris@codesynthesis.com> +copyright : not copyrighted - public domain + +--> + +<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns:p="http://www.codesynthesis.com/protocol" + targetNamespace="http://www.codesynthesis.com/protocol"> + + <xsd:complexType name="request"> + <xsd:sequence> + <xsd:element name="account" type="xsd:unsignedInt"/> + </xsd:sequence> + </xsd:complexType> + + <xsd:complexType name="balance"> + <xsd:complexContent> + <xsd:extension base="p:request"/> + </xsd:complexContent> + </xsd:complexType> + + <xsd:complexType name="withdraw"> + <xsd:complexContent> + <xsd:extension base="p:request"> + <xsd:sequence> + <xsd:element name="amount" type="xsd:unsignedInt"/> + </xsd:sequence> + </xsd:extension> + </xsd:complexContent> + </xsd:complexType> + + <xsd:complexType name="deposit"> + <xsd:complexContent> + <xsd:extension base="p:request"> + <xsd:sequence> + <xsd:element name="amount" type="xsd:unsignedInt"/> + </xsd:sequence> + </xsd:extension> + </xsd:complexContent> + </xsd:complexType> + + <xsd:element name="balance" type="p:balance"/> + <xsd:element name="withdraw" type="p:withdraw"/> + <xsd:element name="deposit" type="p:deposit"/> + +</xsd:schema> diff --git a/xsd/examples/cxx/parser/multiroot/withdraw.xml b/xsd/examples/cxx/parser/multiroot/withdraw.xml new file mode 100644 index 0000000..7a80aa7 --- /dev/null +++ b/xsd/examples/cxx/parser/multiroot/withdraw.xml @@ -0,0 +1,18 @@ +<?xml version="1.0"?> + +<!-- + +file : examples/cxx/parser/multiroot/withdraw.xml +author : Boris Kolpackov <boris@codesynthesis.com> +copyright : not copyrighted - public domain + +--> + +<p:withdraw xmlns:p="http://www.codesynthesis.com/protocol" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.codesynthesis.com/protocol protocol.xsd"> + + <account>123456789</account> + <amount>1000000</amount> + +</p:withdraw> diff --git a/xsd/examples/cxx/parser/performance/README b/xsd/examples/cxx/parser/performance/README new file mode 100644 index 0000000..d8d27a7 --- /dev/null +++ b/xsd/examples/cxx/parser/performance/README @@ -0,0 +1,44 @@ +This example measures the performance of XML parsing in the C++/Parser +mapping. It also shows how to structure your code to achieve the maximum +performance for this operation. + +The example consists of the following files: + +test.xsd + XML Schema which describes the test vocabulary. + +test-5k.xml +test-50k.xml +test-500k.xml + Test XML documents of various sizes. + +gen.cxx + Program to generate a test document of desired size. + +time.hxx +time.cxx + Class definition that represents time. + +test-pskel.hxx +test-pskel.ixx +test-pskel.cxx + Parser skeletons generated by the XSD compiler from test.xsd. + +driver.cxx + Driver for the example. It first parses the command line arguments + and reads the entire document into a memory buffer. It then creates + a SAX parser and pre-parses and caches the schema if validation is + enabled (Xerces-C++ only). Finally, it runs the performance + measurement loop which on each iteration parses the XML document + from the in-memory buffer. + +To run the example on a test XML document simply execute: + +$ ./driver test-50k.xml + +The -v option can be used to turn on validation in the underlying XML +parser (only makes sense for Xerces-C++, off by default). The -i option +can be used to specify the number of parsing iterations (1000 by default). +For example: + +$ ./driver -v -i 100 test-500k.xml diff --git a/xsd/examples/cxx/parser/performance/driver.cxx b/xsd/examples/cxx/parser/performance/driver.cxx new file mode 100644 index 0000000..422f2b9 --- /dev/null +++ b/xsd/examples/cxx/parser/performance/driver.cxx @@ -0,0 +1,343 @@ +// file : examples/cxx/parser/performance/driver.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : not copyrighted - public domain + +#include <string> +#include <memory> // std::auto_ptr +#include <cstddef> // std::size_t +#include <fstream> +#include <sstream> +#include <iostream> + +#include "time.hxx" +#include "test-pskel.hxx" + +#ifdef _XERCES_VERSION +# include <xercesc/sax2/SAX2XMLReader.hpp> +# include <xercesc/sax2/XMLReaderFactory.hpp> +# include <xercesc/framework/MemBufInputSource.hpp> +# include <xercesc/validators/common/Grammar.hpp> +# include <xercesc/util/PlatformUtils.hpp> +# include <xercesc/util/XMLUni.hpp> + +# include <xsd/cxx/xml/sax/bits/error-handler-proxy.hxx> +# include <xsd/cxx/parser/error-handler.hxx> + +#endif + +// No-op parser implementation. +// +namespace test +{ + struct enum_pimpl: enum_pskel, xml_schema::string_pimpl + { + virtual void + post_enum () + { + } + }; + + struct record_pimpl: record_pskel + { + virtual void + int_ (unsigned int) + { + } + + virtual void + double_ (double) + { + } + + virtual void + name (const std::string&) + { + } + + virtual void + string (const std::string&) + { + } + + virtual void + choice1 (const std::string&) + { + } + + virtual void + choice2 (const std::string&) + { + } + + virtual void + choice3 (const std::string&) + { + } + + virtual void + choice4 (const std::string&) + { + } + + virtual void + apple (bool) + { + } + + virtual void + orange (unsigned long long) + { + } + }; + + struct root_pimpl: root_pskel + { + }; +} + +using namespace std; + +int +main (int argc, char* argv[]) +{ + if (argc < 2) + { + cerr << "usage: " << argv[0] << " [-v] [-i <count>] test.xml" << endl + << "\t -v turn on validation (default is off)" << endl + << "\t -i number of iterations to perform (default is 1000)" << endl; + return 1; + } + + bool validate (false); + unsigned long iter (1000); + const char* file (0); + + // Parse command line arguments. + // + for (int i (1); i < argc; ++i) + { + string arg (argv[i]); + + if (arg == "-v") + { + validate = true; + } + else if (arg == "-i") + { + if (++i == argc) + { + cerr << "argument expected for the -i option" << endl; + return 1; + } + + iter = 0; + istringstream is (argv[i]); + is >> iter; + + if (iter == 0) + { + cerr << "invalid argument for the -i option" << endl; + return 1; + } + } + else + { + file = argv[i]; + break; + } + } + + if (file == 0) + { + cerr << "no input file specified" << endl; + return 1; + } + + try + { + // Instantiate and connect parsers. + // + xml_schema::unsigned_int_pimpl unsigned_int_p; + xml_schema::double_pimpl double_p; + xml_schema::ncname_pimpl ncname_p; + xml_schema::string_pimpl string_p; + xml_schema::boolean_pimpl boolean_p; + xml_schema::unsigned_long_pimpl unsigned_long_p; + + test::enum_pimpl enum_p; + test::record_pimpl record_p; + test::root_pimpl root_p; + + record_p.parsers (unsigned_int_p, + double_p, + ncname_p, + string_p, + string_p, + string_p, + string_p, + string_p, + enum_p, + boolean_p, + unsigned_long_p); + + root_p.parsers (record_p); + + // Read the fine into in-memory buffer. + // + ifstream ifs; + ifs.exceptions (ios_base::failbit); + ifs.open (file, ios::in | ios::ate); + + size_t size (ifs.tellg ()); + ifs.seekg (0, ios::beg); + + char* buf = new char[size]; + ifs.read (buf, size); + ifs.close (); + + cerr << "document size: " << size << " bytes" << endl + << "iterations: " << iter << endl; + + os::time time (0); + xml_schema::document doc (root_p, "test", "root"); + +#ifdef _XERCES_VERSION + + // Xerces-C++ as the underlying XML parser. + // + using namespace xercesc; + + namespace xml = xsd::cxx::xml; + namespace parser = xsd::cxx::parser; + + XMLPlatformUtils::Initialize (); + + { + MemBufInputSource is ( + reinterpret_cast<XMLByte*> (buf), size, file, false); + is.setCopyBufToStream (false); + + auto_ptr<SAX2XMLReader> parser (XMLReaderFactory::createXMLReader ()); + + parser->setFeature (XMLUni::fgSAX2CoreNameSpaces, true); + parser->setFeature (XMLUni::fgSAX2CoreNameSpacePrefixes, true); + parser->setFeature (XMLUni::fgXercesValidationErrorAsFatal, true); + + if (validate) + { + parser->setFeature (XMLUni::fgSAX2CoreValidation, true); + parser->setFeature (XMLUni::fgXercesSchema, true); + parser->setFeature (XMLUni::fgXercesSchemaFullChecking, false); + + // Xerces-C++ 3.1.0 is the first version with working multi import + // support. + // +#if _XERCES_VERSION >= 30100 + parser->setFeature (XMLUni::fgXercesHandleMultipleImports, true); +#endif + + // Initialize the schema cache. To detect schema errors we will + // need an error handler. + // + parser::error_handler<char> eh; + xml::sax::bits::error_handler_proxy<char> ehp (eh); + parser->setErrorHandler (&ehp); + + if (!parser->loadGrammar ("test.xsd", Grammar::SchemaGrammarType, true)) + { + // In Xerces-C++ grammar loading failure results in just a warning. + // Make it a fatal error. + // + eh.handle ("test.xsd", 0, 0, + parser::error_handler<char>::severity::fatal, + "unable to load schema"); + } + + eh.throw_if_failed (); + parser->setFeature (XMLUni::fgXercesUseCachedGrammarInParse, true); + +#if _XERCES_VERSION >= 30000 + parser->setFeature (XMLUni::fgXercesLoadSchema, false); +#endif + } + else + { + parser->setFeature (XMLUni::fgSAX2CoreValidation, false); + parser->setFeature (XMLUni::fgXercesSchema, false); + parser->setFeature (XMLUni::fgXercesSchemaFullChecking, false); + } + + os::time start; + + for (unsigned long i (0); i < iter; ++i) + { + root_p.pre (); + doc.parse (is, *parser); + root_p.post_root (); + } + + os::time end; + time = end - start; + } + + XMLPlatformUtils::Terminate (); + +#else + + // Expat as the underlying XML parser. + // + XML_Parser xml_parser (XML_ParserCreateNS (0, ' ')); + string public_id (file); + + os::time start; + + for (unsigned long i (0); i < iter; ++i) + { + // Using the low-level Expat-specific API to parse the memory + // buffer. + // + root_p.pre (); + doc.parse_begin (xml_parser, public_id); + + XML_Parse (xml_parser, buf, size, 1); + + doc.parse_end (); + root_p.post_root (); + + XML_ParserReset (xml_parser, 0); + } + + os::time end; + time = end - start; + + XML_ParserFree (xml_parser); + +#endif + + delete[] buf; + + cerr << "time: " << time << " sec" << endl; + + double ms (time.sec () * 1000000ULL + time.nsec () / 1000ULL); + + // Calculate throughput in documents/sec. + // + double tpd ((iter / ms) * 1000000); + cerr << "throughput: " << tpd << " documents/sec" << endl; + + // Calculate throughput in MBytes/sec. + // + double tpb (((size * iter) / ms) * 1000000/(1024*1024)); + cerr << "throughput: " << tpb << " MBytes/sec" << endl; + } + catch (const xml_schema::exception& e) + { + cerr << e << endl; + return 1; + } + catch (std::ios_base::failure const&) + { + cerr << "io failure" << endl; + return 1; + } +} diff --git a/xsd/examples/cxx/parser/performance/gen.cxx b/xsd/examples/cxx/parser/performance/gen.cxx new file mode 100644 index 0000000..b6392c0 --- /dev/null +++ b/xsd/examples/cxx/parser/performance/gen.cxx @@ -0,0 +1,76 @@ +#include <fstream> +#include <sstream> +#include <iostream> + +using namespace std; + +static const char* enums[] = +{ + "romance", + "fiction", + "horror", + "history", + "philosophy" +}; + +int +main (int argc, char* argv[]) +{ + if (argc != 3) + { + cerr << "usage: " << argv[0] << " <count> <output-file>" << endl; + return 1; + } + + unsigned long n (0); + istringstream is (argv[1]); + is >> n; + + if (n == 0) + { + cerr << "record count argument should be a positive number" << endl; + return 1; + } + + ofstream ofs (argv[2]); + + if (!ofs.is_open ()) + { + cerr << "unable to open '" << argv[2] << "' in write mode" << endl; + return 1; + } + + ofs << "<t:root xmlns:t='test' " << + "xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' " << + "xsi:schemaLocation='test test.xsd'>"; + + unsigned short ch (1), en (0); + + for (unsigned long i (0); i < n; ++i) + { + ofs << "<record orange=\"" << i << "\""; + + if (i % 2 == 0) + ofs << " apple=\"true\""; + + ofs << ">" + << "<int>42</int>" + << "<double>42345.4232</double>" + << "<name>name123_45</name>"; + + if (i % 2 == 1) + ofs << "<string>one two three</string>"; + + ofs << "<choice" << ch << ">" << ch << " choice</choice" << ch << ">" + << "<enum>" << enums[en] << "</enum>" + << "</record>"; + + if (++ch > 4) + ch = 1; + + if (++en > 4) + en = 0; + } + + ofs << "</t:root>"; +} diff --git a/xsd/examples/cxx/parser/performance/makefile b/xsd/examples/cxx/parser/performance/makefile new file mode 100644 index 0000000..a6e2cd1 --- /dev/null +++ b/xsd/examples/cxx/parser/performance/makefile @@ -0,0 +1,114 @@ +# file : examples/cxx/parser/performance/makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../../build/bootstrap.make + +xsd := test.xsd +cxx := driver.cxx time.cxx + +obj := $(addprefix $(out_base)/,$(cxx:.cxx=.o) $(xsd:.xsd=-pskel.o)) +dep := $(obj:.o=.o.d) + +driver := $(out_base)/driver +install := $(out_base)/.install +dist := $(out_base)/.dist +dist-win := $(out_base)/.dist-win +clean := $(out_base)/.clean + + +# Import. +# +$(call import,\ + $(scf_root)/import/libxerces-c/stub.make,\ + l: xerces_c.l,cpp-options: xerces_c.l.cpp-options) + + +# Build. +# +$(driver): $(obj) $(xerces_c.l) + +$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): $(xerces_c.l.cpp-options) + +genf := $(xsd:.xsd=-pskel.hxx) $(xsd:.xsd=-pskel.ixx) $(xsd:.xsd=-pskel.cxx) +gen := $(addprefix $(out_base)/,$(genf)) + +$(gen): xsd := $(out_root)/xsd/xsd +$(gen): xsd_options := --generate-inline +$(gen): $(out_root)/xsd/xsd + +$(call include-dep,$(dep)) + +# Convenience alias for default target. +# +$(out_base)/: $(driver) + + +# Install & Dist. +# +dist-common := $(out_base)/.dist-common + +$(install) $(dist) $(dist-win) $(dist-common): path := $(subst $(src_root)/,,$(src_base)) + +$(install): + $(call install-data,$(src_base)/README,$(install_doc_dir)/xsd/$(path)/README) + $(call install-data,$(src_base)/driver.cxx,$(install_doc_dir)/xsd/$(path)/driver.cxx) + $(call install-data,$(src_base)/test.xsd,$(install_doc_dir)/xsd/$(path)/test.xsd) + $(call install-data,$(src_base)/test-5k.xml,$(install_doc_dir)/xsd/$(path)/test-5k.xml) + $(call install-data,$(src_base)/test-50k.xml,$(install_doc_dir)/xsd/$(path)/test-50k.xml) + $(call install-data,$(src_base)/test-500k.xml,$(install_doc_dir)/xsd/$(path)/test-500k.xml) + $(call install-data,$(src_base)/time.hxx,$(install_doc_dir)/xsd/$(path)/time.hxx) + $(call install-data,$(src_base)/time.cxx,$(install_doc_dir)/xsd/$(path)/time.cxx) + $(call install-data,$(src_base)/gen.cxx,$(install_doc_dir)/xsd/$(path)/gen.cxx) + +$(dist-common): + $(call install-data,$(src_base)/driver.cxx,$(dist_prefix)/$(path)/driver.cxx) + $(call install-data,$(src_base)/test.xsd,$(dist_prefix)/$(path)/test.xsd) + $(call install-data,$(src_base)/test-5k.xml,$(dist_prefix)/$(path)/test-5k.xml) + $(call install-data,$(src_base)/test-50k.xml,$(dist_prefix)/$(path)/test-50k.xml) + $(call install-data,$(src_base)/test-500k.xml,$(dist_prefix)/$(path)/test-500k.xml) + $(call install-data,$(src_base)/time.hxx,$(dist_prefix)/$(path)/time.hxx) + $(call install-data,$(src_base)/time.cxx,$(dist_prefix)/$(path)/time.cxx) + $(call install-data,$(src_base)/gen.cxx,$(dist_prefix)/$(path)/gen.cxx) + +$(dist): $(dist-common) + $(call install-data,$(src_base)/README,$(dist_prefix)/$(path)/README) + +$(dist-win): $(dist-common) + $(call install-data,$(src_base)/README,$(dist_prefix)/$(path)/README.txt) + $(call message,,unix2dos $(dist_prefix)/$(path)/README.txt) + + +# Clean. +# +$(clean): $(driver).o.clean \ + $(addsuffix .cxx.clean,$(obj)) \ + $(addsuffix .cxx.clean,$(dep)) \ + $(addprefix $(out_base)/,$(xsd:.xsd=-pskel.cxx.xsd.clean)) + +# Generated .gitignore. +# +ifeq ($(out_base),$(src_base)) +$(gen): | $(out_base)/.gitignore +$(driver): | $(out_base)/.gitignore + +$(out_base)/.gitignore: files := driver $(genf) +$(clean): $(out_base)/.gitignore.clean + +$(call include,$(bld_root)/git/gitignore.make) +endif + +# How to. +# +$(call include,$(bld_root)/cxx/o-e.make) +$(call include,$(bld_root)/cxx/cxx-o.make) +$(call include,$(bld_root)/cxx/cxx-d.make) +$(call include,$(bld_root)/install.make) +$(call include,$(scf_root)/xsd/parser/xsd-cxx.make) + + +# Dependencies. +# +$(call import,$(src_root)/xsd/makefile) diff --git a/xsd/examples/cxx/parser/performance/test-500k.xml b/xsd/examples/cxx/parser/performance/test-500k.xml new file mode 100644 index 0000000..e895584 --- /dev/null +++ b/xsd/examples/cxx/parser/performance/test-500k.xml @@ -0,0 +1 @@ +<t:root xmlns:t='test' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:schemaLocation='test test.xsd'><record orange="0" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="1"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="2" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="3"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="4" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="5"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="6" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="7"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="8" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="9"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="10" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="11"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="12" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="13"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="14" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="15"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="16" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="17"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="18" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="19"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="20" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="21"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="22" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="23"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="24" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="25"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="26" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="27"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="28" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="29"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="30" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="31"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="32" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="33"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="34" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="35"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="36" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="37"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="38" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="39"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="40" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="41"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="42" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="43"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="44" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="45"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="46" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="47"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="48" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="49"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="50" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="51"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="52" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="53"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="54" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="55"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="56" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="57"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="58" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="59"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="60" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="61"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="62" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="63"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="64" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="65"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="66" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="67"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="68" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="69"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="70" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="71"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="72" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="73"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="74" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="75"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="76" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="77"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="78" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="79"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="80" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="81"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="82" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="83"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="84" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="85"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="86" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="87"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="88" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="89"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="90" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="91"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="92" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="93"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="94" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="95"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="96" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="97"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="98" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="99"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="100" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="101"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="102" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="103"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="104" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="105"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="106" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="107"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="108" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="109"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="110" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="111"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="112" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="113"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="114" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="115"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="116" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="117"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="118" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="119"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="120" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="121"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="122" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="123"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="124" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="125"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="126" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="127"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="128" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="129"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="130" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="131"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="132" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="133"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="134" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="135"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="136" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="137"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="138" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="139"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="140" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="141"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="142" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="143"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="144" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="145"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="146" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="147"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="148" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="149"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="150" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="151"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="152" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="153"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="154" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="155"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="156" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="157"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="158" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="159"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="160" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="161"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="162" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="163"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="164" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="165"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="166" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="167"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="168" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="169"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="170" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="171"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="172" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="173"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="174" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="175"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="176" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="177"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="178" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="179"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="180" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="181"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="182" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="183"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="184" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="185"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="186" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="187"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="188" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="189"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="190" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="191"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="192" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="193"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="194" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="195"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="196" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="197"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="198" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="199"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="200" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="201"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="202" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="203"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="204" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="205"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="206" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="207"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="208" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="209"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="210" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="211"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="212" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="213"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="214" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="215"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="216" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="217"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="218" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="219"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="220" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="221"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="222" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="223"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="224" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="225"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="226" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="227"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="228" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="229"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="230" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="231"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="232" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="233"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="234" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="235"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="236" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="237"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="238" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="239"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="240" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="241"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="242" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="243"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="244" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="245"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="246" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="247"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="248" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="249"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="250" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="251"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="252" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="253"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="254" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="255"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="256" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="257"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="258" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="259"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="260" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="261"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="262" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="263"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="264" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="265"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="266" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="267"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="268" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="269"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="270" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="271"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="272" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="273"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="274" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="275"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="276" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="277"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="278" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="279"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="280" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="281"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="282" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="283"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="284" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="285"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="286" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="287"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="288" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="289"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="290" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="291"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="292" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="293"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="294" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="295"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="296" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="297"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="298" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="299"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="300" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="301"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="302" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="303"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="304" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="305"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="306" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="307"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="308" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="309"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="310" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="311"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="312" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="313"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="314" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="315"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="316" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="317"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="318" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="319"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="320" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="321"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="322" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="323"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="324" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="325"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="326" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="327"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="328" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="329"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="330" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="331"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="332" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="333"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="334" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="335"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="336" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="337"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="338" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="339"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="340" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="341"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="342" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="343"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="344" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="345"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="346" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="347"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="348" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="349"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="350" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="351"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="352" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="353"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="354" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="355"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="356" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="357"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="358" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="359"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="360" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="361"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="362" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="363"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="364" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="365"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="366" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="367"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="368" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="369"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="370" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="371"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="372" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="373"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="374" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="375"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="376" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="377"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="378" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="379"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="380" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="381"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="382" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="383"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="384" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="385"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="386" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="387"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="388" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="389"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="390" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="391"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="392" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="393"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="394" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="395"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="396" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="397"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="398" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="399"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="400" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="401"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="402" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="403"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="404" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="405"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="406" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="407"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="408" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="409"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="410" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="411"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="412" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="413"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="414" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="415"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="416" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="417"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="418" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="419"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="420" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="421"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="422" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="423"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="424" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="425"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="426" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="427"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="428" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="429"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="430" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="431"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="432" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="433"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="434" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="435"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="436" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="437"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="438" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="439"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="440" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="441"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="442" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="443"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="444" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="445"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="446" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="447"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="448" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="449"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="450" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="451"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="452" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="453"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="454" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="455"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="456" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="457"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="458" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="459"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="460" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="461"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="462" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="463"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="464" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="465"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="466" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="467"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="468" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="469"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="470" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="471"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="472" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="473"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="474" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="475"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="476" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="477"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="478" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="479"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="480" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="481"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="482" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="483"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="484" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="485"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="486" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="487"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="488" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="489"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="490" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="491"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="492" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="493"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="494" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="495"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="496" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="497"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="498" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="499"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="500" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="501"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="502" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="503"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="504" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="505"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="506" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="507"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="508" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="509"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="510" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="511"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="512" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="513"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="514" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="515"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="516" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="517"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="518" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="519"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="520" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="521"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="522" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="523"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="524" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="525"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="526" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="527"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="528" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="529"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="530" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="531"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="532" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="533"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="534" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="535"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="536" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="537"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="538" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="539"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="540" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="541"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="542" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="543"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="544" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="545"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="546" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="547"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="548" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="549"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="550" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="551"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="552" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="553"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="554" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="555"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="556" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="557"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="558" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="559"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="560" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="561"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="562" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="563"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="564" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="565"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="566" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="567"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="568" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="569"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="570" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="571"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="572" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="573"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="574" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="575"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="576" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="577"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="578" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="579"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="580" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="581"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="582" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="583"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="584" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="585"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="586" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="587"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="588" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="589"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="590" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="591"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="592" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="593"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="594" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="595"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="596" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="597"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="598" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="599"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="600" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="601"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="602" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="603"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="604" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="605"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="606" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="607"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="608" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="609"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="610" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="611"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="612" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="613"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="614" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="615"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="616" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="617"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="618" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="619"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="620" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="621"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="622" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="623"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="624" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="625"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="626" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="627"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="628" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="629"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="630" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="631"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="632" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="633"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="634" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="635"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="636" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="637"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="638" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="639"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="640" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="641"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="642" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="643"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="644" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="645"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="646" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="647"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="648" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="649"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="650" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="651"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="652" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="653"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="654" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="655"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="656" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="657"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="658" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="659"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="660" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="661"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="662" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="663"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="664" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="665"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="666" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="667"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="668" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="669"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="670" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="671"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="672" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="673"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="674" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="675"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="676" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="677"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="678" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="679"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="680" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="681"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="682" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="683"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="684" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="685"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="686" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="687"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="688" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="689"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="690" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="691"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="692" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="693"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="694" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="695"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="696" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="697"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="698" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="699"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="700" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="701"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="702" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="703"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="704" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="705"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="706" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="707"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="708" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="709"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="710" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="711"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="712" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="713"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="714" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="715"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="716" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="717"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="718" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="719"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="720" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="721"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="722" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="723"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="724" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="725"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="726" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="727"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="728" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="729"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="730" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="731"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="732" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="733"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="734" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="735"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="736" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="737"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="738" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="739"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="740" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="741"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="742" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="743"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="744" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="745"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="746" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="747"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="748" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="749"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="750" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="751"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="752" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="753"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="754" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="755"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="756" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="757"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="758" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="759"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="760" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="761"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="762" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="763"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="764" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="765"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="766" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="767"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="768" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="769"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="770" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="771"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="772" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="773"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="774" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="775"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="776" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="777"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="778" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="779"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="780" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="781"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="782" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="783"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="784" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="785"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="786" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="787"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="788" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="789"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="790" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="791"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="792" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="793"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="794" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="795"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="796" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="797"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="798" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="799"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="800" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="801"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="802" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="803"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="804" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="805"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="806" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="807"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="808" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="809"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="810" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="811"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="812" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="813"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="814" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="815"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="816" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="817"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="818" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="819"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="820" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="821"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="822" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="823"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="824" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="825"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="826" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="827"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="828" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="829"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="830" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="831"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="832" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="833"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="834" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="835"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="836" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="837"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="838" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="839"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="840" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="841"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="842" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="843"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="844" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="845"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="846" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="847"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="848" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="849"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="850" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="851"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="852" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="853"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="854" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="855"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="856" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="857"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="858" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="859"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="860" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="861"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="862" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="863"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="864" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="865"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="866" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="867"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="868" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="869"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="870" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="871"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="872" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="873"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="874" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="875"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="876" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="877"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="878" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="879"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="880" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="881"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="882" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="883"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="884" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="885"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="886" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="887"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="888" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="889"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="890" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="891"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="892" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="893"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="894" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="895"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="896" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="897"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="898" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="899"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="900" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="901"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="902" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="903"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="904" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="905"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="906" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="907"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="908" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="909"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="910" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="911"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="912" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="913"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="914" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="915"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="916" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="917"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="918" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="919"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="920" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="921"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="922" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="923"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="924" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="925"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="926" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="927"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="928" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="929"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="930" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="931"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="932" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="933"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="934" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="935"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="936" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="937"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="938" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="939"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="940" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="941"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="942" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="943"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="944" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="945"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="946" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="947"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="948" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="949"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="950" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="951"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="952" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="953"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="954" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="955"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="956" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="957"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="958" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="959"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="960" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="961"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="962" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="963"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="964" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="965"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="966" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="967"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="968" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="969"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="970" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="971"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="972" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="973"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="974" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="975"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="976" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="977"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="978" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="979"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="980" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="981"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="982" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="983"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="984" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="985"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="986" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="987"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="988" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="989"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="990" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="991"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="992" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="993"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="994" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="995"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="996" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="997"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="998" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="999"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="1000" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="1001"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="1002" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="1003"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="1004" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="1005"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="1006" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="1007"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="1008" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="1009"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="1010" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="1011"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="1012" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="1013"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="1014" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="1015"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="1016" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="1017"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="1018" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="1019"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="1020" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="1021"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="1022" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="1023"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="1024" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="1025"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="1026" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="1027"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="1028" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="1029"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="1030" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="1031"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="1032" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="1033"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="1034" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="1035"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="1036" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="1037"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="1038" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="1039"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="1040" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="1041"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="1042" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="1043"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="1044" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="1045"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="1046" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="1047"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="1048" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="1049"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="1050" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="1051"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="1052" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="1053"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="1054" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="1055"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="1056" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="1057"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="1058" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="1059"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="1060" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="1061"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="1062" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="1063"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="1064" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="1065"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="1066" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="1067"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="1068" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="1069"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="1070" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="1071"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="1072" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="1073"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="1074" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="1075"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="1076" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="1077"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="1078" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="1079"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="1080" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="1081"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="1082" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="1083"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="1084" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="1085"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="1086" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="1087"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="1088" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="1089"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="1090" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="1091"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="1092" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="1093"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="1094" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="1095"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="1096" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="1097"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="1098" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="1099"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="1100" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="1101"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="1102" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="1103"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="1104" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="1105"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="1106" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="1107"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="1108" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="1109"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="1110" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="1111"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="1112" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="1113"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="1114" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="1115"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="1116" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="1117"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="1118" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="1119"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="1120" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="1121"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="1122" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="1123"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="1124" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="1125"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="1126" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="1127"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="1128" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="1129"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="1130" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="1131"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="1132" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="1133"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="1134" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="1135"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="1136" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="1137"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="1138" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="1139"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="1140" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="1141"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="1142" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="1143"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="1144" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="1145"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="1146" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="1147"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="1148" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="1149"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="1150" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="1151"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="1152" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="1153"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="1154" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="1155"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="1156" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="1157"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="1158" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="1159"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="1160" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="1161"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="1162" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="1163"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="1164" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="1165"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="1166" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="1167"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="1168" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="1169"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="1170" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="1171"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="1172" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="1173"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="1174" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="1175"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="1176" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="1177"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="1178" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="1179"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="1180" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="1181"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="1182" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="1183"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="1184" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="1185"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="1186" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="1187"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="1188" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="1189"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="1190" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="1191"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="1192" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="1193"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="1194" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="1195"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="1196" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="1197"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="1198" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="1199"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="1200" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="1201"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="1202" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="1203"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="1204" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="1205"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="1206" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="1207"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="1208" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="1209"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="1210" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="1211"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="1212" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="1213"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="1214" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="1215"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="1216" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="1217"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="1218" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="1219"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="1220" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="1221"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="1222" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="1223"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="1224" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="1225"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="1226" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="1227"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="1228" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="1229"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="1230" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="1231"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="1232" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="1233"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="1234" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="1235"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="1236" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="1237"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="1238" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="1239"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="1240" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="1241"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="1242" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="1243"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="1244" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="1245"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="1246" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="1247"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="1248" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="1249"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="1250" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="1251"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="1252" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="1253"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="1254" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="1255"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="1256" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="1257"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="1258" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="1259"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="1260" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="1261"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="1262" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="1263"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="1264" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="1265"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="1266" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="1267"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="1268" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="1269"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="1270" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="1271"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="1272" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="1273"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="1274" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="1275"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="1276" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="1277"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="1278" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="1279"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="1280" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="1281"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="1282" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="1283"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="1284" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="1285"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="1286" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="1287"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="1288" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="1289"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="1290" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="1291"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="1292" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="1293"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="1294" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="1295"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="1296" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="1297"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="1298" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="1299"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="1300" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="1301"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="1302" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="1303"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="1304" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="1305"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="1306" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="1307"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="1308" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="1309"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="1310" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="1311"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="1312" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="1313"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="1314" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="1315"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="1316" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="1317"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="1318" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="1319"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="1320" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="1321"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="1322" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="1323"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="1324" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="1325"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="1326" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="1327"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="1328" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="1329"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="1330" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="1331"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="1332" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="1333"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="1334" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="1335"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="1336" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="1337"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="1338" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="1339"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="1340" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="1341"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="1342" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="1343"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="1344" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="1345"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="1346" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="1347"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="1348" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="1349"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="1350" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="1351"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="1352" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="1353"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="1354" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="1355"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="1356" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="1357"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="1358" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="1359"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="1360" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="1361"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="1362" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="1363"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="1364" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="1365"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="1366" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="1367"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="1368" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="1369"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="1370" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="1371"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="1372" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="1373"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="1374" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="1375"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="1376" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="1377"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="1378" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="1379"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="1380" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="1381"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="1382" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="1383"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="1384" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="1385"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="1386" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="1387"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="1388" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="1389"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="1390" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="1391"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="1392" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="1393"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="1394" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="1395"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="1396" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="1397"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="1398" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="1399"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="1400" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="1401"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="1402" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="1403"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="1404" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="1405"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="1406" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="1407"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="1408" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="1409"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="1410" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="1411"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="1412" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="1413"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="1414" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="1415"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="1416" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="1417"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="1418" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="1419"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="1420" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="1421"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="1422" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="1423"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="1424" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="1425"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="1426" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="1427"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="1428" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="1429"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="1430" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="1431"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="1432" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="1433"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="1434" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="1435"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="1436" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="1437"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="1438" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="1439"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="1440" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="1441"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="1442" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="1443"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="1444" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="1445"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="1446" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="1447"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="1448" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="1449"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="1450" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="1451"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="1452" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="1453"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="1454" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="1455"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="1456" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="1457"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="1458" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="1459"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="1460" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="1461"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="1462" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="1463"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="1464" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="1465"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="1466" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="1467"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="1468" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="1469"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="1470" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="1471"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="1472" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="1473"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="1474" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="1475"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="1476" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="1477"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="1478" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="1479"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="1480" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="1481"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="1482" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="1483"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="1484" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="1485"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="1486" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="1487"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="1488" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="1489"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="1490" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="1491"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="1492" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="1493"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="1494" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="1495"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="1496" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="1497"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="1498" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="1499"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="1500" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="1501"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="1502" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="1503"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="1504" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="1505"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="1506" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="1507"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="1508" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="1509"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="1510" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="1511"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="1512" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="1513"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="1514" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="1515"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="1516" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="1517"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="1518" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="1519"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="1520" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="1521"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="1522" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="1523"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="1524" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="1525"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="1526" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="1527"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="1528" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="1529"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="1530" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="1531"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="1532" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="1533"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="1534" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="1535"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="1536" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="1537"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="1538" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="1539"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="1540" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="1541"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="1542" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="1543"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="1544" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="1545"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="1546" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="1547"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="1548" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="1549"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="1550" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="1551"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="1552" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="1553"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="1554" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="1555"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="1556" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="1557"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="1558" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="1559"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="1560" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="1561"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="1562" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="1563"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="1564" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="1565"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="1566" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="1567"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="1568" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="1569"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="1570" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="1571"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="1572" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="1573"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="1574" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="1575"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="1576" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="1577"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="1578" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="1579"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="1580" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="1581"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="1582" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="1583"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="1584" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="1585"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="1586" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="1587"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="1588" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="1589"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="1590" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="1591"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="1592" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="1593"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="1594" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="1595"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="1596" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="1597"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="1598" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="1599"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="1600" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="1601"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="1602" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="1603"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="1604" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="1605"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="1606" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="1607"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="1608" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="1609"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="1610" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="1611"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="1612" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="1613"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="1614" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="1615"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="1616" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="1617"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="1618" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="1619"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="1620" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="1621"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="1622" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="1623"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="1624" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="1625"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="1626" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="1627"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="1628" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="1629"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="1630" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="1631"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="1632" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="1633"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="1634" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="1635"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="1636" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="1637"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="1638" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="1639"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="1640" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="1641"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="1642" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="1643"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="1644" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="1645"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="1646" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="1647"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="1648" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="1649"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="1650" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="1651"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="1652" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="1653"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="1654" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="1655"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="1656" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="1657"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="1658" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="1659"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="1660" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="1661"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="1662" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="1663"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="1664" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="1665"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="1666" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="1667"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="1668" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="1669"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="1670" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="1671"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="1672" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="1673"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="1674" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="1675"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="1676" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="1677"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="1678" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="1679"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="1680" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="1681"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="1682" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="1683"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="1684" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="1685"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="1686" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="1687"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="1688" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="1689"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="1690" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="1691"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="1692" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="1693"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="1694" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="1695"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="1696" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="1697"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="1698" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="1699"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="1700" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="1701"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="1702" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="1703"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="1704" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="1705"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="1706" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="1707"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="1708" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="1709"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="1710" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="1711"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="1712" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="1713"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="1714" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="1715"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="1716" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="1717"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="1718" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="1719"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="1720" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="1721"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="1722" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="1723"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="1724" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="1725"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="1726" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="1727"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="1728" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="1729"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="1730" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="1731"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="1732" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="1733"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="1734" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="1735"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="1736" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="1737"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="1738" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="1739"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="1740" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="1741"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="1742" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="1743"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="1744" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="1745"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="1746" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="1747"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="1748" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="1749"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="1750" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="1751"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="1752" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="1753"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="1754" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="1755"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="1756" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="1757"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="1758" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="1759"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="1760" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="1761"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="1762" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="1763"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="1764" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="1765"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="1766" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="1767"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="1768" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="1769"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="1770" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="1771"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="1772" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="1773"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="1774" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="1775"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="1776" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="1777"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="1778" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="1779"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="1780" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="1781"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="1782" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="1783"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="1784" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="1785"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="1786" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="1787"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="1788" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="1789"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="1790" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="1791"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="1792" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="1793"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="1794" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="1795"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="1796" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="1797"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="1798" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="1799"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="1800" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="1801"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="1802" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="1803"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="1804" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="1805"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="1806" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="1807"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="1808" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="1809"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="1810" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="1811"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="1812" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="1813"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="1814" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="1815"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="1816" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="1817"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="1818" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="1819"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="1820" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="1821"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="1822" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="1823"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="1824" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="1825"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="1826" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="1827"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="1828" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="1829"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="1830" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="1831"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="1832" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="1833"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="1834" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="1835"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="1836" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="1837"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="1838" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="1839"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="1840" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="1841"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="1842" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="1843"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="1844" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="1845"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="1846" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="1847"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="1848" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="1849"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="1850" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="1851"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="1852" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="1853"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="1854" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="1855"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="1856" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="1857"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="1858" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="1859"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="1860" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="1861"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="1862" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="1863"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="1864" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="1865"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="1866" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="1867"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="1868" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="1869"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="1870" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="1871"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="1872" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="1873"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="1874" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="1875"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="1876" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="1877"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="1878" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="1879"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="1880" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="1881"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="1882" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="1883"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="1884" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="1885"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="1886" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="1887"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="1888" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="1889"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="1890" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="1891"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="1892" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="1893"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="1894" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="1895"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="1896" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="1897"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="1898" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="1899"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="1900" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="1901"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="1902" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="1903"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="1904" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="1905"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="1906" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="1907"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="1908" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="1909"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="1910" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="1911"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="1912" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="1913"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="1914" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="1915"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="1916" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="1917"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="1918" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="1919"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="1920" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="1921"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="1922" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="1923"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="1924" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="1925"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="1926" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="1927"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="1928" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="1929"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="1930" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="1931"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="1932" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="1933"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="1934" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="1935"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="1936" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="1937"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="1938" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="1939"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="1940" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="1941"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="1942" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="1943"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="1944" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="1945"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="1946" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="1947"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="1948" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="1949"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="1950" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="1951"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="1952" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="1953"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="1954" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="1955"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="1956" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="1957"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="1958" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="1959"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="1960" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="1961"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="1962" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="1963"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="1964" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="1965"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="1966" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="1967"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="1968" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="1969"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="1970" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="1971"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="1972" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="1973"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="1974" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="1975"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="1976" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="1977"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="1978" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="1979"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="1980" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="1981"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="1982" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="1983"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="1984" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="1985"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="1986" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="1987"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="1988" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="1989"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="1990" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="1991"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="1992" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="1993"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="1994" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="1995"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="1996" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="1997"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="1998" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="1999"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="2000" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="2001"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="2002" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="2003"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="2004" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="2005"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="2006" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="2007"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="2008" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="2009"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="2010" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="2011"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="2012" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="2013"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="2014" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="2015"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="2016" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="2017"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="2018" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="2019"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="2020" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="2021"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="2022" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="2023"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="2024" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="2025"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="2026" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="2027"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="2028" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="2029"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="2030" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="2031"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="2032" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="2033"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="2034" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="2035"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="2036" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="2037"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="2038" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="2039"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="2040" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="2041"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="2042" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="2043"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="2044" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="2045"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="2046" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="2047"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="2048" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="2049"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="2050" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="2051"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="2052" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="2053"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="2054" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="2055"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="2056" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="2057"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="2058" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="2059"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="2060" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="2061"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="2062" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="2063"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="2064" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="2065"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="2066" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="2067"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="2068" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="2069"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="2070" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="2071"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="2072" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="2073"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="2074" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="2075"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="2076" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="2077"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="2078" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="2079"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="2080" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="2081"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="2082" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="2083"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="2084" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="2085"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="2086" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="2087"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="2088" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="2089"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="2090" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="2091"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="2092" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="2093"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="2094" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="2095"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="2096" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="2097"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="2098" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="2099"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="2100" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="2101"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="2102" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="2103"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="2104" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="2105"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="2106" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="2107"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="2108" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="2109"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="2110" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="2111"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="2112" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="2113"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="2114" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="2115"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="2116" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="2117"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="2118" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="2119"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="2120" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="2121"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="2122" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="2123"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="2124" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="2125"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="2126" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="2127"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="2128" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="2129"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="2130" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="2131"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="2132" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="2133"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="2134" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="2135"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="2136" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="2137"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="2138" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="2139"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="2140" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="2141"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="2142" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="2143"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="2144" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="2145"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="2146" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="2147"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="2148" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="2149"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="2150" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="2151"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="2152" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="2153"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="2154" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="2155"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="2156" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="2157"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="2158" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="2159"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="2160" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="2161"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="2162" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="2163"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="2164" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="2165"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="2166" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="2167"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="2168" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="2169"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="2170" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="2171"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="2172" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="2173"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="2174" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="2175"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="2176" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="2177"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="2178" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="2179"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="2180" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="2181"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="2182" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="2183"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="2184" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="2185"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="2186" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="2187"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="2188" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="2189"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="2190" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="2191"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="2192" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="2193"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="2194" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="2195"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="2196" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="2197"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="2198" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="2199"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="2200" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="2201"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="2202" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="2203"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="2204" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="2205"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="2206" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="2207"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="2208" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="2209"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="2210" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="2211"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="2212" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="2213"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="2214" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="2215"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="2216" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="2217"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="2218" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="2219"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="2220" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="2221"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="2222" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="2223"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="2224" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="2225"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="2226" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="2227"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="2228" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="2229"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="2230" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="2231"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="2232" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="2233"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="2234" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="2235"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="2236" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="2237"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="2238" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="2239"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="2240" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="2241"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="2242" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="2243"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="2244" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="2245"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="2246" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="2247"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="2248" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="2249"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="2250" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="2251"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="2252" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="2253"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="2254" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="2255"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="2256" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="2257"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="2258" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="2259"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="2260" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="2261"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="2262" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="2263"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="2264" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="2265"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="2266" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="2267"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="2268" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="2269"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="2270" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="2271"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="2272" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="2273"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="2274" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="2275"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="2276" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="2277"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="2278" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="2279"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="2280" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="2281"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="2282" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="2283"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="2284" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="2285"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="2286" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="2287"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="2288" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="2289"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="2290" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="2291"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="2292" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="2293"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="2294" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="2295"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="2296" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="2297"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="2298" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="2299"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="2300" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="2301"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="2302" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="2303"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="2304" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="2305"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="2306" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="2307"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="2308" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="2309"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="2310" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="2311"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="2312" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="2313"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="2314" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="2315"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="2316" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="2317"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="2318" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="2319"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="2320" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="2321"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="2322" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="2323"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="2324" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="2325"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="2326" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="2327"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="2328" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="2329"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="2330" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="2331"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="2332" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="2333"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="2334" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="2335"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="2336" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="2337"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="2338" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="2339"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="2340" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="2341"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="2342" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="2343"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="2344" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="2345"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="2346" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="2347"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="2348" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="2349"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="2350" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="2351"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="2352" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="2353"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="2354" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="2355"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="2356" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="2357"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="2358" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="2359"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="2360" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="2361"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="2362" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="2363"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="2364" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="2365"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="2366" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="2367"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="2368" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="2369"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="2370" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="2371"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="2372" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="2373"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="2374" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="2375"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="2376" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="2377"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="2378" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="2379"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="2380" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="2381"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="2382" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="2383"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="2384" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="2385"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="2386" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="2387"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="2388" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="2389"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="2390" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="2391"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="2392" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="2393"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="2394" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="2395"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="2396" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="2397"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="2398" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="2399"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="2400" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="2401"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="2402" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="2403"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="2404" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="2405"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="2406" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="2407"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="2408" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="2409"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="2410" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="2411"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="2412" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="2413"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="2414" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="2415"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="2416" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="2417"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="2418" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="2419"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="2420" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="2421"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="2422" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="2423"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="2424" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="2425"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="2426" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="2427"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="2428" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="2429"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="2430" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="2431"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="2432" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="2433"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="2434" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="2435"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="2436" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="2437"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="2438" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="2439"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="2440" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="2441"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="2442" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="2443"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="2444" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="2445"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="2446" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="2447"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="2448" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="2449"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="2450" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="2451"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="2452" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="2453"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="2454" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="2455"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="2456" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="2457"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="2458" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="2459"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="2460" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="2461"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="2462" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="2463"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="2464" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="2465"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="2466" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="2467"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="2468" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="2469"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="2470" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="2471"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="2472" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="2473"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="2474" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="2475"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="2476" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="2477"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="2478" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="2479"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="2480" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="2481"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="2482" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="2483"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="2484" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="2485"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="2486" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="2487"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="2488" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="2489"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="2490" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="2491"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="2492" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="2493"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="2494" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="2495"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="2496" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="2497"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="2498" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="2499"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="2500" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="2501"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="2502" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="2503"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="2504" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="2505"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="2506" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="2507"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="2508" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="2509"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="2510" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="2511"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="2512" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="2513"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="2514" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="2515"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="2516" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="2517"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="2518" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="2519"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="2520" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="2521"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="2522" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="2523"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="2524" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="2525"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="2526" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="2527"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="2528" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="2529"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="2530" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="2531"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="2532" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="2533"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="2534" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="2535"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="2536" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="2537"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="2538" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="2539"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="2540" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="2541"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="2542" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="2543"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="2544" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="2545"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="2546" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="2547"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="2548" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="2549"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="2550" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="2551"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="2552" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="2553"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="2554" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="2555"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="2556" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="2557"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="2558" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="2559"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="2560" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="2561"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="2562" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="2563"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="2564" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="2565"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="2566" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="2567"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="2568" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="2569"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="2570" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="2571"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="2572" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="2573"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="2574" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="2575"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="2576" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="2577"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="2578" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="2579"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="2580" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="2581"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="2582" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="2583"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="2584" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="2585"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="2586" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="2587"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="2588" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="2589"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="2590" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="2591"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="2592" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="2593"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="2594" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="2595"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="2596" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="2597"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="2598" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="2599"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="2600" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="2601"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="2602" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="2603"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="2604" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="2605"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="2606" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="2607"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="2608" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="2609"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="2610" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="2611"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="2612" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="2613"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="2614" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="2615"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="2616" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="2617"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="2618" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="2619"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="2620" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="2621"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="2622" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="2623"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="2624" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="2625"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="2626" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="2627"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="2628" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="2629"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="2630" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="2631"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="2632" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="2633"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="2634" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="2635"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="2636" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="2637"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="2638" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="2639"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="2640" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="2641"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="2642" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="2643"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="2644" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="2645"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="2646" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="2647"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="2648" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="2649"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="2650" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="2651"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="2652" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="2653"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="2654" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="2655"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="2656" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="2657"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="2658" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="2659"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="2660" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="2661"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="2662" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="2663"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="2664" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="2665"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="2666" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="2667"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="2668" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="2669"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="2670" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="2671"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="2672" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="2673"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="2674" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="2675"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="2676" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="2677"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="2678" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="2679"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="2680" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="2681"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="2682" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="2683"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="2684" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="2685"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="2686" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="2687"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="2688" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="2689"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="2690" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="2691"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="2692" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="2693"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="2694" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="2695"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="2696" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="2697"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="2698" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="2699"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="2700" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="2701"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="2702" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="2703"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="2704" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="2705"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="2706" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="2707"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="2708" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="2709"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="2710" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="2711"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="2712" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="2713"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="2714" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="2715"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="2716" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="2717"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="2718" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="2719"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="2720" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="2721"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="2722" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="2723"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="2724" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="2725"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="2726" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="2727"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="2728" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="2729"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="2730" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="2731"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="2732" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="2733"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="2734" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="2735"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="2736" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="2737"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="2738" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="2739"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="2740" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="2741"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="2742" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="2743"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="2744" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="2745"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="2746" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="2747"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="2748" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="2749"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="2750" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="2751"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="2752" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="2753"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="2754" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="2755"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="2756" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="2757"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="2758" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="2759"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="2760" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="2761"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="2762" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="2763"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="2764" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="2765"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="2766" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="2767"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="2768" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="2769"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="2770" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="2771"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="2772" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="2773"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="2774" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="2775"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="2776" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="2777"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="2778" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="2779"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="2780" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="2781"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="2782" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="2783"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="2784" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="2785"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="2786" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="2787"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="2788" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="2789"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="2790" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="2791"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="2792" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="2793"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="2794" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="2795"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="2796" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="2797"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="2798" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="2799"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="2800" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="2801"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="2802" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="2803"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="2804" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="2805"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="2806" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="2807"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="2808" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="2809"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="2810" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="2811"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="2812" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="2813"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="2814" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="2815"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="2816" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="2817"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="2818" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="2819"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="2820" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="2821"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="2822" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="2823"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="2824" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="2825"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="2826" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="2827"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="2828" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="2829"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="2830" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="2831"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="2832" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="2833"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="2834" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="2835"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="2836" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="2837"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="2838" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="2839"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="2840" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="2841"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="2842" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="2843"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="2844" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="2845"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="2846" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="2847"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="2848" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="2849"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="2850" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="2851"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="2852" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="2853"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="2854" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="2855"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="2856" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="2857"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="2858" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="2859"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="2860" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="2861"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="2862" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="2863"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="2864" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="2865"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="2866" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="2867"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="2868" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="2869"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="2870" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="2871"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="2872" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="2873"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="2874" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="2875"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="2876" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="2877"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="2878" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="2879"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="2880" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="2881"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="2882" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="2883"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="2884" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="2885"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="2886" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="2887"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="2888" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="2889"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="2890" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="2891"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="2892" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="2893"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="2894" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="2895"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="2896" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="2897"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="2898" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="2899"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="2900" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="2901"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="2902" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="2903"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="2904" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="2905"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="2906" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="2907"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="2908" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="2909"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="2910" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="2911"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="2912" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="2913"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="2914" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="2915"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="2916" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="2917"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="2918" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="2919"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="2920" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="2921"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="2922" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="2923"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="2924" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="2925"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="2926" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="2927"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="2928" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="2929"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="2930" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="2931"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="2932" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="2933"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="2934" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="2935"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="2936" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="2937"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="2938" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="2939"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="2940" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="2941"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="2942" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="2943"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="2944" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="2945"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="2946" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="2947"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="2948" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="2949"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="2950" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="2951"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="2952" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="2953"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="2954" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="2955"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="2956" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="2957"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="2958" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="2959"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="2960" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="2961"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="2962" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="2963"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="2964" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="2965"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="2966" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="2967"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="2968" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="2969"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="2970" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="2971"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="2972" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="2973"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="2974" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="2975"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="2976" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="2977"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="2978" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="2979"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="2980" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="2981"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="2982" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="2983"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="2984" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="2985"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="2986" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="2987"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="2988" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="2989"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="2990" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="2991"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="2992" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="2993"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="2994" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="2995"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="2996" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="2997"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="2998" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="2999"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="3000" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="3001"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="3002" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="3003"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="3004" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="3005"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="3006" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="3007"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="3008" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="3009"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="3010" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="3011"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="3012" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="3013"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="3014" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="3015"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="3016" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="3017"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="3018" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="3019"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="3020" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="3021"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="3022" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="3023"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="3024" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="3025"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="3026" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="3027"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="3028" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="3029"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="3030" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="3031"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="3032" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="3033"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="3034" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="3035"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="3036" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="3037"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="3038" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="3039"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="3040" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="3041"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="3042" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="3043"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="3044" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="3045"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="3046" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="3047"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="3048" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="3049"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="3050" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="3051"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="3052" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="3053"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="3054" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="3055"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="3056" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="3057"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="3058" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="3059"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="3060" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="3061"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="3062" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="3063"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="3064" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="3065"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="3066" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="3067"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="3068" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="3069"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="3070" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="3071"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="3072" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="3073"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="3074" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="3075"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="3076" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="3077"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="3078" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="3079"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="3080" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="3081"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="3082" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="3083"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="3084" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="3085"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="3086" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="3087"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="3088" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="3089"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="3090" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="3091"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="3092" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="3093"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="3094" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="3095"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="3096" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="3097"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="3098" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="3099"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="3100" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="3101"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="3102" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="3103"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="3104" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="3105"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="3106" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="3107"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="3108" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="3109"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="3110" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="3111"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="3112" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="3113"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="3114" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="3115"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="3116" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="3117"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="3118" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="3119"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="3120" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="3121"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="3122" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="3123"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="3124" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="3125"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="3126" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="3127"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="3128" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="3129"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="3130" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="3131"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="3132" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="3133"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="3134" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="3135"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="3136" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="3137"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="3138" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="3139"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="3140" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="3141"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="3142" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="3143"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="3144" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="3145"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="3146" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="3147"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="3148" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="3149"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record></t:root>
\ No newline at end of file diff --git a/xsd/examples/cxx/parser/performance/test-50k.xml b/xsd/examples/cxx/parser/performance/test-50k.xml new file mode 100644 index 0000000..42e22f3 --- /dev/null +++ b/xsd/examples/cxx/parser/performance/test-50k.xml @@ -0,0 +1 @@ +<t:root xmlns:t='test' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:schemaLocation='test test.xsd'><record orange="0" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="1"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="2" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="3"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="4" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="5"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="6" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="7"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="8" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="9"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="10" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="11"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="12" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="13"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="14" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="15"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="16" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="17"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="18" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="19"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="20" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="21"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="22" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="23"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="24" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="25"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="26" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="27"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="28" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="29"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="30" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="31"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="32" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="33"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="34" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="35"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="36" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="37"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="38" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="39"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="40" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="41"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="42" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="43"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="44" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="45"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="46" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="47"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="48" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="49"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="50" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="51"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="52" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="53"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="54" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="55"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="56" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="57"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="58" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="59"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="60" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="61"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="62" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="63"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="64" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="65"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="66" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="67"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="68" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="69"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="70" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="71"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="72" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="73"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="74" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="75"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="76" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="77"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="78" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="79"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="80" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="81"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="82" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="83"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="84" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="85"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="86" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="87"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="88" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="89"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="90" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="91"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="92" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="93"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="94" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="95"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="96" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="97"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="98" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="99"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="100" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="101"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="102" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="103"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="104" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="105"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="106" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="107"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="108" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="109"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="110" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="111"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="112" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="113"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="114" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="115"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="116" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="117"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="118" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="119"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="120" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="121"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="122" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="123"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="124" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="125"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="126" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="127"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="128" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="129"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="130" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="131"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="132" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="133"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="134" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="135"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="136" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="137"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="138" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="139"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="140" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="141"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="142" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="143"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="144" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="145"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="146" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="147"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="148" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="149"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="150" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="151"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="152" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="153"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="154" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="155"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="156" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="157"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="158" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="159"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="160" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="161"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="162" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="163"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="164" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="165"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="166" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="167"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="168" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="169"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="170" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="171"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="172" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="173"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="174" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="175"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="176" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="177"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="178" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="179"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="180" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="181"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="182" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="183"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="184" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="185"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="186" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="187"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="188" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="189"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="190" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="191"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="192" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="193"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="194" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="195"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="196" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="197"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="198" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="199"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="200" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="201"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="202" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="203"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="204" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="205"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="206" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="207"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="208" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="209"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="210" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="211"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="212" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="213"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="214" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="215"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="216" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="217"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="218" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="219"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="220" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="221"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="222" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="223"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="224" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="225"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="226" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="227"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="228" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="229"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="230" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="231"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="232" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="233"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="234" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="235"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="236" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="237"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="238" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="239"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="240" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="241"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="242" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="243"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="244" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="245"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="246" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="247"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="248" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="249"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="250" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="251"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="252" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="253"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="254" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="255"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="256" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="257"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="258" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="259"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="260" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="261"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="262" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="263"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="264" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="265"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="266" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="267"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="268" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="269"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="270" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="271"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="272" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="273"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="274" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="275"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="276" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="277"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="278" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="279"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="280" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="281"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="282" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="283"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="284" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="285"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="286" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="287"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="288" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="289"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="290" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="291"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="292" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="293"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="294" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="295"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="296" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="297"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="298" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="299"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="300" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="301"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="302" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="303"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="304" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="305"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="306" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="307"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="308" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="309"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="310" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="311"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="312" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="313"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="314" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="315"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="316" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record></t:root>
\ No newline at end of file diff --git a/xsd/examples/cxx/parser/performance/test-5k.xml b/xsd/examples/cxx/parser/performance/test-5k.xml new file mode 100644 index 0000000..168cb09 --- /dev/null +++ b/xsd/examples/cxx/parser/performance/test-5k.xml @@ -0,0 +1 @@ +<t:root xmlns:t='test' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:schemaLocation='test test.xsd'><record orange="0" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="1"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="2" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="3"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="4" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="5"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="6" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="7"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="8" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="9"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="10" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="11"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="12" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="13"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="14" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="15"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="16" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="17"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="18" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="19"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="20" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="21"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="22" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="23"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="24" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="25"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="26" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="27"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="28" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="29"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="30" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="31"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record></t:root>
\ No newline at end of file diff --git a/xsd/examples/cxx/parser/performance/test.xsd b/xsd/examples/cxx/parser/performance/test.xsd new file mode 100644 index 0000000..2af594e --- /dev/null +++ b/xsd/examples/cxx/parser/performance/test.xsd @@ -0,0 +1,50 @@ +<?xml version="1.0"?> + +<!-- + +file : examples/cxx/parser/performance/test.xsd +author : Boris Kolpackov <boris@codesynthesis.com> +copyright : not copyrighted - public domain + +--> + +<schema targetNamespace="test" xmlns:t="test" + xmlns="http://www.w3.org/2001/XMLSchema"> + + <simpleType name="enum"> + <restriction base="string"> + <enumeration value="romance"/> + <enumeration value="fiction"/> + <enumeration value="horror"/> + <enumeration value="history"/> + <enumeration value="philosophy"/> + </restriction> + </simpleType> + + <complexType name="record"> + <sequence> + <element name="int" type="unsignedInt"/> + <element name="double" type="double"/> + <element name="name" type="NCName"/> + <element name="string" type="string" minOccurs="0" maxOccurs="1"/> + <choice> + <element name="choice1" type="string"/> + <element name="choice2" type="string"/> + <element name="choice3" type="string"/> + <element name="choice4" type="string"/> + </choice> + <element name="enum" type="t:enum"/> + </sequence> + <attribute name="apple" type="boolean"/> + <attribute name="orange" type="unsignedLong" use="required"/> + </complexType> + + <complexType name="root"> + <sequence> + <element name="record" type="t:record" maxOccurs="unbounded"/> + </sequence> + </complexType> + + <element name="root" type="t:root"/> + +</schema> diff --git a/xsd/examples/cxx/parser/performance/time.cxx b/xsd/examples/cxx/parser/performance/time.cxx new file mode 100644 index 0000000..d7c81ce --- /dev/null +++ b/xsd/examples/cxx/parser/performance/time.cxx @@ -0,0 +1,47 @@ +// file : examples/cxx/parser/performance/time.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : not copyrighted - public domain + +#include "time.hxx" + +#if defined (WIN32) || defined (__WIN32__) +# define WIN32_LEAN_AND_MEAN +# include <windows.h> // GetSystemTimeAsFileTime +#else +# include <time.h> // gettimeofday +# include <sys/time.h> // timeval +#endif + +#include <ostream> // std::ostream +#include <iomanip> // std::setfill, std::setw + +namespace os +{ + time:: + time () + { +#if defined (WIN32) || defined (__WIN32__) + FILETIME ft; + GetSystemTimeAsFileTime (&ft); + unsigned long long v ( + (unsigned long long (ft.dwHighDateTime) << 32) + ft.dwLowDateTime); + + sec_ = static_cast<unsigned long> (v / 10000000ULL); + nsec_ = static_cast<unsigned long> ((v % 10000000ULL) * 100); +#else + timeval tv; + if (gettimeofday(&tv, 0) != 0) + throw failed (); + + sec_ = static_cast<unsigned long> (tv.tv_sec); + nsec_ = static_cast<unsigned long> (tv.tv_usec * 1000); +#endif + } + + std::ostream& + operator<< (std::ostream& o, time const& t) + { + return o << t.sec () << '.' + << std::setfill ('0') << std::setw (9) << t.nsec (); + } +} diff --git a/xsd/examples/cxx/parser/performance/time.hxx b/xsd/examples/cxx/parser/performance/time.hxx new file mode 100644 index 0000000..37ec457 --- /dev/null +++ b/xsd/examples/cxx/parser/performance/time.hxx @@ -0,0 +1,111 @@ +// file : examples/cxx/parser/performance/time.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : not copyrighted - public domain + +#ifndef TIME_HXX +#define TIME_HXX + +#include <iosfwd> // std::ostream& + +namespace os +{ + class time + { + public: + class failed {}; + + // Create a time object representing the current time. + // + time (); + + time (unsigned long long nsec) + { + sec_ = static_cast<unsigned long> (nsec / 1000000000ULL); + nsec_ = static_cast<unsigned long> (nsec % 1000000000ULL); + } + + time (unsigned long sec, unsigned long nsec) + { + sec_ = sec; + nsec_ = nsec; + } + + public: + unsigned long + sec () const + { + return sec_; + } + + unsigned long + nsec () const + { + return nsec_; + } + + public: + class overflow {}; + class underflow {}; + + time + operator+= (time const& b) + { + unsigned long long tmp = 0ULL + nsec_ + b.nsec_; + + sec_ += static_cast<unsigned long> (b.sec_ + tmp / 1000000000ULL); + nsec_ = static_cast<unsigned long> (tmp % 1000000000ULL); + + return *this; + } + + time + operator-= (time const& b) + { + if (*this < b) + throw underflow (); + + sec_ -= b.sec_; + + if (nsec_ < b.nsec_) + { + --sec_; + nsec_ += 1000000000ULL - b.nsec_; + } + else + nsec_ -= b.nsec_; + + return *this; + } + + friend time + operator+ (time const& a, time const& b) + { + time r (a); + r += b; + return r; + } + + friend time + operator- (time const& a, time const& b) + { + time r (a); + r -= b; + return r; + } + + friend bool + operator < (time const& a, time const& b) + { + return (a.sec_ < b.sec_) || (a.sec_ == b.sec_ && a.nsec_ < b.nsec_); + } + + private: + unsigned long sec_; + unsigned long nsec_; + }; + + std::ostream& + operator<< (std::ostream&, time const&); +} + +#endif // TIME_HXX diff --git a/xsd/examples/cxx/parser/polymorphism/README b/xsd/examples/cxx/parser/polymorphism/README new file mode 100644 index 0000000..60a97e9 --- /dev/null +++ b/xsd/examples/cxx/parser/polymorphism/README @@ -0,0 +1,30 @@ +This example shows how to handle XML Schema polymorphism features such +as xsi:type attributes and substitution groups in the C++/Parser mapping. +The case when xsi:type is used on root elements is covered in the +polyroot examples. + +The example consists of the following files: + +supermen.xsd + XML Schema which describes the "supermen" instance documents. + +supermen.xml + Sample XML instance document. + +supermen-pskel.hxx +supermen-pskel.cxx + Parser skeletons generated by the XSD compiler from supermen.xsd. + Note the use of the --generate-polymorphic command line option. + +supermen-pimpl.hxx +supermen-pimpl.cxx + Parser implementations that print the XML data to STDOUT. + +driver.cxx + Driver for the example. It first constructs a parser instance from + all the individual parsers found in supermen-pimpl.hxx. It then invokes + this parser instance to parse the input file. + +To run the example on the sample XML instance document simply execute: + +$ ./driver supermen.xml diff --git a/xsd/examples/cxx/parser/polymorphism/driver.cxx b/xsd/examples/cxx/parser/polymorphism/driver.cxx new file mode 100644 index 0000000..842a88b --- /dev/null +++ b/xsd/examples/cxx/parser/polymorphism/driver.cxx @@ -0,0 +1,71 @@ +// file : examples/cxx/parser/polymorphism/driver.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : not copyrighted - public domain + +#include <iostream> + +#include "supermen-pimpl.hxx" + +using std::cerr; +using std::endl; + +int +main (int argc, char* argv[]) +{ + if (argc != 2) + { + cerr << "usage: " << argv[0] << " supermen.xml" << endl; + return 1; + } + + try + { + // Construct the parser. + // + xml_schema::string_pimpl string_p; + xml_schema::boolean_pimpl boolean_p; + xml_schema::unsigned_int_pimpl unsigned_int_p; + + person_pimpl person_p; + superman_pimpl superman_p; + batman_pimpl batman_p; + + xml_schema::parser_map_impl person_map; + + supermen_pimpl supermen_p; + + + person_p.parsers (string_p); + superman_p.parsers (string_p, boolean_p); + batman_p.parsers (string_p, boolean_p, unsigned_int_p); + + // Here we are specifying a parser map which containes several parsers + // that can be used to parse the person element. + // + person_map.insert (person_p); + person_map.insert (superman_p); + person_map.insert (batman_p); + + supermen_p.person_parser (person_map); + + // Parse the XML document. The last argument to the document's + // constructor indicates that we are parsing polymorphic XML + // documents. + // + xml_schema::document doc_p (supermen_p, "supermen", true); + + supermen_p.pre (); + doc_p.parse (argv[1]); + supermen_p.post_supermen (); + } + catch (const xml_schema::exception& e) + { + cerr << e << endl; + return 1; + } + catch (const std::ios_base::failure&) + { + cerr << argv[1] << ": unable to open or read failure" << endl; + return 1; + } +} diff --git a/xsd/examples/cxx/parser/polymorphism/makefile b/xsd/examples/cxx/parser/polymorphism/makefile new file mode 100644 index 0000000..0eec54e --- /dev/null +++ b/xsd/examples/cxx/parser/polymorphism/makefile @@ -0,0 +1,107 @@ +# file : examples/cxx/parser/polymorphism/makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../../build/bootstrap.make + +xsd := supermen.xsd +cxx := driver.cxx supermen-pimpl.cxx + +obj := $(addprefix $(out_base)/,$(cxx:.cxx=.o) $(xsd:.xsd=-pskel.o)) +dep := $(obj:.o=.o.d) + +driver := $(out_base)/driver +install := $(out_base)/.install +dist := $(out_base)/.dist +dist-win := $(out_base)/.dist-win +clean := $(out_base)/.clean + + +# Import. +# +$(call import,\ + $(scf_root)/import/libxerces-c/stub.make,\ + l: xerces_c.l,cpp-options: xerces_c.l.cpp-options) + + +# Build. +# +$(driver): $(obj) $(xerces_c.l) + +$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): $(xerces_c.l.cpp-options) + +genf := $(xsd:.xsd=-pskel.hxx) $(xsd:.xsd=-pskel.ixx) $(xsd:.xsd=-pskel.cxx) +gen := $(addprefix $(out_base)/,$(genf)) + +$(gen): xsd := $(out_root)/xsd/xsd +$(gen): xsd_options := --generate-polymorphic +$(gen): $(out_root)/xsd/xsd + +$(call include-dep,$(dep)) + +# Convenience alias for default target. +# +$(out_base)/: $(driver) + + +# Install & Dist. +# +dist-common := $(out_base)/.dist-common + +$(install) $(dist) $(dist-win) $(dist-common): path := $(subst $(src_root)/,,$(src_base)) + +$(install): + $(call install-data,$(src_base)/README,$(install_doc_dir)/xsd/$(path)/README) + $(call install-data,$(src_base)/driver.cxx,$(install_doc_dir)/xsd/$(path)/driver.cxx) + $(call install-data,$(src_base)/supermen.xsd,$(install_doc_dir)/xsd/$(path)/supermen.xsd) + $(call install-data,$(src_base)/supermen.xml,$(install_doc_dir)/xsd/$(path)/supermen.xml) + $(call install-data,$(src_base)/supermen-pimpl.hxx,$(install_doc_dir)/xsd/$(path)/supermen-pimpl.hxx) + $(call install-data,$(src_base)/supermen-pimpl.cxx,$(install_doc_dir)/xsd/$(path)/supermen-pimpl.cxx) + +$(dist-common): + $(call install-data,$(src_base)/driver.cxx,$(dist_prefix)/$(path)/driver.cxx) + $(call install-data,$(src_base)/supermen.xsd,$(dist_prefix)/$(path)/supermen.xsd) + $(call install-data,$(src_base)/supermen.xml,$(dist_prefix)/$(path)/supermen.xml) + $(call install-data,$(src_base)/supermen-pimpl.hxx,$(dist_prefix)/$(path)/supermen-pimpl.hxx) + $(call install-data,$(src_base)/supermen-pimpl.cxx,$(dist_prefix)/$(path)/supermen-pimpl.cxx) + +$(dist): $(dist-common) + $(call install-data,$(src_base)/README,$(dist_prefix)/$(path)/README) + +$(dist-win): $(dist-common) + $(call install-data,$(src_base)/README,$(dist_prefix)/$(path)/README.txt) + $(call message,,unix2dos $(dist_prefix)/$(path)/README.txt) + +# Clean. +# +$(clean): $(driver).o.clean \ + $(addsuffix .cxx.clean,$(obj)) \ + $(addsuffix .cxx.clean,$(dep)) \ + $(addprefix $(out_base)/,$(xsd:.xsd=-pskel.cxx.xsd.clean)) + +# Generated .gitignore. +# +ifeq ($(out_base),$(src_base)) +$(gen): | $(out_base)/.gitignore +$(driver): | $(out_base)/.gitignore + +$(out_base)/.gitignore: files := driver $(genf) +$(clean): $(out_base)/.gitignore.clean + +$(call include,$(bld_root)/git/gitignore.make) +endif + +# How to. +# +$(call include,$(bld_root)/cxx/o-e.make) +$(call include,$(bld_root)/cxx/cxx-o.make) +$(call include,$(bld_root)/cxx/cxx-d.make) +$(call include,$(bld_root)/install.make) +$(call include,$(scf_root)/xsd/parser/xsd-cxx.make) + + +# Dependencies. +# +$(call import,$(src_root)/xsd/makefile) diff --git a/xsd/examples/cxx/parser/polymorphism/supermen-pimpl.cxx b/xsd/examples/cxx/parser/polymorphism/supermen-pimpl.cxx new file mode 100644 index 0000000..8a30cbd --- /dev/null +++ b/xsd/examples/cxx/parser/polymorphism/supermen-pimpl.cxx @@ -0,0 +1,86 @@ +// file : examples/cxx/parser/polymorphism/supermen-pimpl.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : not copyrighted - public domain +// + +#include <iostream> + +#include "supermen-pimpl.hxx" + +using std::cout; +using std::endl; + +// person_pimpl +// +void person_pimpl:: +pre () +{ + cout << "starting to parse person" << endl; +} + +void person_pimpl:: +name (const std::string& v) +{ + cout << "name: " << v << endl; +} + +void person_pimpl:: +post_person () +{ + cout << "finished parsing person" << endl + << endl; +} + +// superman_pimpl +// +void superman_pimpl:: +pre () +{ + cout << "starting to parse superman" << endl; +} + +void superman_pimpl:: +can_fly (bool v) +{ + cout << "can-fly: " << v << endl; +} + +void superman_pimpl:: +post_person () +{ + post_superman (); +} + +void superman_pimpl:: +post_superman () +{ + cout << "finished parsing superman" << endl + << endl; +} + +// batman_pimpl +// +void batman_pimpl:: +pre () +{ + cout << "starting to parse batman" << endl; +} + +void batman_pimpl:: +wing_span (unsigned int v) +{ + cout << "wing-span: " << v << endl; +} + +void batman_pimpl:: +post_superman () +{ + post_batman (); +} + +void batman_pimpl:: +post_batman () +{ + cout << "finished parsing batman" << endl + << endl; +} diff --git a/xsd/examples/cxx/parser/polymorphism/supermen-pimpl.hxx b/xsd/examples/cxx/parser/polymorphism/supermen-pimpl.hxx new file mode 100644 index 0000000..3c0f549 --- /dev/null +++ b/xsd/examples/cxx/parser/polymorphism/supermen-pimpl.hxx @@ -0,0 +1,69 @@ +// file : examples/cxx/parser/polymorphism/supermen-pimpl.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : not copyrighted - public domain + +#ifndef SUPERMEN_PIMPL_HXX +#define SUPERMEN_PIMPL_HXX + +#include "supermen-pskel.hxx" + +class person_pimpl: public virtual person_pskel +{ +public: + virtual void + pre (); + + virtual void + name (const std::string&); + + virtual void + post_person (); +}; + +class superman_pimpl: public virtual superman_pskel, + public person_pimpl +{ +public: + virtual void + pre (); + + virtual void + can_fly (bool); + + // By default, post_superman() calls post_person(). In case of + // polymorphic parsing we want the opposite: post_person() calls + // post_superman(). + // + virtual void + post_person (); + + virtual void + post_superman (); +}; + +class batman_pimpl: public virtual batman_pskel, + public superman_pimpl +{ +public: + virtual void + pre (); + + virtual void + wing_span (unsigned int); + + // By default, post_batman() calls post_superman(). In case of + // polymorphic parsing we want the opposite: post_superman() + // calls post_batman(). + // + virtual void + post_superman (); + + virtual void + post_batman (); +}; + +class supermen_pimpl: public supermen_pskel +{ +}; + +#endif // SUPERMEN_PIMPL_HXX diff --git a/xsd/examples/cxx/parser/polymorphism/supermen.xml b/xsd/examples/cxx/parser/polymorphism/supermen.xml new file mode 100644 index 0000000..c2bc7b4 --- /dev/null +++ b/xsd/examples/cxx/parser/polymorphism/supermen.xml @@ -0,0 +1,26 @@ +<?xml version="1.0"?> + +<!-- + +file : examples/cxx/parser/polymorphism/supermen.xml +author : Boris Kolpackov <boris@codesynthesis.com> +copyright : not copyrighted - public domain + +--> + +<supermen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="supermen.xsd"> + + <person> + <name>John Doe</name> + </person> + + <superman can-fly="false"> + <name>James "007" Bond</name> + </superman> + + <superman can-fly="true" wing-span="10" xsi:type="batman"> + <name>Bruce Wayne</name> + </superman> + +</supermen> diff --git a/xsd/examples/cxx/parser/polymorphism/supermen.xsd b/xsd/examples/cxx/parser/polymorphism/supermen.xsd new file mode 100644 index 0000000..83a7aac --- /dev/null +++ b/xsd/examples/cxx/parser/polymorphism/supermen.xsd @@ -0,0 +1,49 @@ +<?xml version="1.0"?> + +<!-- + +file : examples/cxx/parser/polymorphism/supermen.xsd +author : Boris Kolpackov <boris@codesynthesis.com> +copyright : not copyrighted - public domain + +--> + +<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + + <xsd:complexType name="person"> + <xsd:sequence> + <xsd:element name="name" type="xsd:string"/> + </xsd:sequence> + </xsd:complexType> + + <!-- substitution group root --> + <xsd:element name="person" type="person"/> + + + <xsd:complexType name="superman"> + <xsd:complexContent> + <xsd:extension base="person"> + <xsd:attribute name="can-fly" type="xsd:boolean" use="required"/> + </xsd:extension> + </xsd:complexContent> + </xsd:complexType> + + <xsd:element name="superman" type="superman" substitutionGroup="person"/> + + <xsd:complexType name="batman"> + <xsd:complexContent> + <xsd:extension base="superman"> + <xsd:attribute name="wing-span" type="xsd:unsignedInt" use="required"/> + </xsd:extension> + </xsd:complexContent> + </xsd:complexType> + + <xsd:complexType name="supermen"> + <xsd:sequence> + <xsd:element ref="person" maxOccurs="unbounded"/> + </xsd:sequence> + </xsd:complexType> + + <xsd:element name="supermen" type="supermen"/> + +</xsd:schema> diff --git a/xsd/examples/cxx/parser/polyroot/README b/xsd/examples/cxx/parser/polyroot/README new file mode 100644 index 0000000..f41b91c --- /dev/null +++ b/xsd/examples/cxx/parser/polyroot/README @@ -0,0 +1,36 @@ +This example shows how to handle the xsi:type attributes when it is used +on root elements. For general coverage of XML Schema polymorphism handling +in the C++/Parser mapping see the polymorphism example. + +The example consists of the following files: + +supermen.xsd + XML Schema which describes the "supermen" instance documents. + +person.xml +superman.xml +batman.xml + Sample XML instance documents. + +supermen-pskel.hxx +supermen-pskel.cxx + Parser skeletons generated by the XSD compiler from supermen.xsd. + Note the use of the --generate-polymorphic command line option. + +supermen-pimpl.hxx +supermen-pimpl.cxx + Parser implementations that print the XML data to STDOUT. + +driver.cxx + Driver for the example. It implements a custom document parser + that determines which XML Schema type is being parsed and uses + the corresponding parser implementation. The driver first + constructs a parser instance from all the individual parsers + found in supermen-pimpl.hxx. In then invokes this parser instance + to parse the input file. + +To run the example on the sample XML instance documents simply execute: + +$ ./driver person.xml +$ ./driver superman.xml +$ ./driver batman.xml diff --git a/xsd/examples/cxx/parser/polyroot/batman.xml b/xsd/examples/cxx/parser/polyroot/batman.xml new file mode 100644 index 0000000..70abdf7 --- /dev/null +++ b/xsd/examples/cxx/parser/polyroot/batman.xml @@ -0,0 +1,17 @@ +<?xml version="1.0"?> + +<!-- + +file : examples/cxx/parser/polyroot/batman.xml +author : Boris Kolpackov <boris@codesynthesis.com> +copyright : not copyrighted - public domain + +--> + +<person xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="supermen.xsd" + xsi:type="batman" can-fly="true" wing-span="10"> + + <name>Bruce Wayne</name> + +</person> diff --git a/xsd/examples/cxx/parser/polyroot/driver.cxx b/xsd/examples/cxx/parser/polyroot/driver.cxx new file mode 100644 index 0000000..b04bba5 --- /dev/null +++ b/xsd/examples/cxx/parser/polyroot/driver.cxx @@ -0,0 +1,139 @@ +// file : examples/cxx/parser/polyroot/driver.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : not copyrighted - public domain + +#include <map> +#include <string> +#include <iostream> + +#include "supermen-pimpl.hxx" + +using std::cerr; +using std::endl; +using xml_schema::ro_string; + +// Customize the xml_schema::document object to handle polymorphic +// root element. For more information see the multiroot example. +// +class document: public xml_schema::document +{ +public: + document (const xml_schema::parser_map& parser_map) + : xml_schema::document (true), // Indicate polymorphic parsing. + parser_map_ (parser_map) + { + } + +protected: + // This function is called to obtain the root element type parser. + // If the returned pointer is 0 then the whole document content + // is ignored. The type argument contains the XML Schema type + // if xsi:type attribute was specified for this element and 0 + // otherwise. + // + virtual xml_schema::parser_base* + start_root_element (const ro_string& ns, + const ro_string& name, + const ro_string* type) + { + if (name != "person" || !ns.empty ()) + return 0; + + xml_schema::parser_base* base; + + // Search the parser map. + // + if (type == 0) + { + // No xsi:type. Static type should be used. + // + ro_string st (person_pskel::_static_type ()); + base = parser_map_.find (st); + } + else + { + base = parser_map_.find (*type); + } + + if (base != 0) + { + parser_used_ = dynamic_cast<person_pskel*> (base); + parser_used_->pre (); + } + else + parser_used_ = 0; // No parser for this type. + + return parser_used_; + } + + // This function is called to indicate the completion of document + // parsing. The parser argument contains the pointer returned by + // start_root_element. + // + virtual void + end_root_element (const ro_string& /* ns */, + const ro_string& /* name */, + xml_schema::parser_base* /* parser */) + { + // Instead of caching the current parser in parser_used_, we + // could also dynamic_cast the parser argument to the person_pskel + // type. + // + if (parser_used_) + parser_used_->post_person (); + } + + +private: + const xml_schema::parser_map& parser_map_; + person_pskel* parser_used_; +}; + +int +main (int argc, char* argv[]) +{ + if (argc != 2) + { + cerr << "usage: " << argv[0] << " instance.xml" << endl; + return 1; + } + + try + { + // Construct the parser. + // + xml_schema::string_pimpl string_p; + xml_schema::boolean_pimpl boolean_p; + xml_schema::unsigned_int_pimpl unsigned_int_p; + + person_pimpl person_p; + superman_pimpl superman_p; + batman_pimpl batman_p; + + person_p.parsers (string_p); + superman_p.parsers (string_p, boolean_p); + batman_p.parsers (string_p, boolean_p, unsigned_int_p); + + // Parse the XML document. + // + xml_schema::parser_map_impl person_map; + + person_map.insert (person_p); + person_map.insert (superman_p); + person_map.insert (batman_p); + + document doc_p (person_map); + + doc_p.parse (argv[1]); + } + catch (const xml_schema::exception& e) + { + cerr << e << endl; + return 1; + } + catch (const std::ios_base::failure&) + { + cerr << argv[1] << ": unable to open or read failure" << endl; + return 1; + } +} diff --git a/xsd/examples/cxx/parser/polyroot/makefile b/xsd/examples/cxx/parser/polyroot/makefile new file mode 100644 index 0000000..6b66233 --- /dev/null +++ b/xsd/examples/cxx/parser/polyroot/makefile @@ -0,0 +1,111 @@ +# file : examples/cxx/parser/polyroot/makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../../build/bootstrap.make + +xsd := supermen.xsd +cxx := driver.cxx supermen-pimpl.cxx + +obj := $(addprefix $(out_base)/,$(cxx:.cxx=.o) $(xsd:.xsd=-pskel.o)) +dep := $(obj:.o=.o.d) + +driver := $(out_base)/driver +install := $(out_base)/.install +dist := $(out_base)/.dist +dist-win := $(out_base)/.dist-win +clean := $(out_base)/.clean + + +# Import. +# +$(call import,\ + $(scf_root)/import/libxerces-c/stub.make,\ + l: xerces_c.l,cpp-options: xerces_c.l.cpp-options) + + +# Build. +# +$(driver): $(obj) $(xerces_c.l) + +$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): $(xerces_c.l.cpp-options) + +genf := $(xsd:.xsd=-pskel.hxx) $(xsd:.xsd=-pskel.ixx) $(xsd:.xsd=-pskel.cxx) +gen := $(addprefix $(out_base)/,$(genf)) + +$(gen): xsd := $(out_root)/xsd/xsd +$(gen): xsd_options := --generate-polymorphic +$(gen): $(out_root)/xsd/xsd + +$(call include-dep,$(dep)) + +# Convenience alias for default target. +# +$(out_base)/: $(driver) + +# Install & Dist. +# +dist-common := $(out_base)/.dist-common + +$(install) $(dist) $(dist-win) $(dist-common): path := $(subst $(src_root)/,,$(src_base)) + +$(install): + $(call install-data,$(src_base)/README,$(install_doc_dir)/xsd/$(path)/README) + $(call install-data,$(src_base)/driver.cxx,$(install_doc_dir)/xsd/$(path)/driver.cxx) + $(call install-data,$(src_base)/supermen.xsd,$(install_doc_dir)/xsd/$(path)/supermen.xsd) + $(call install-data,$(src_base)/batman.xml,$(install_doc_dir)/xsd/$(path)/batman.xml) + $(call install-data,$(src_base)/person.xml,$(install_doc_dir)/xsd/$(path)/person.xml) + $(call install-data,$(src_base)/superman.xml,$(install_doc_dir)/xsd/$(path)/superman.xml) + $(call install-data,$(src_base)/supermen-pimpl.hxx,$(install_doc_dir)/xsd/$(path)/supermen-pimpl.hxx) + $(call install-data,$(src_base)/supermen-pimpl.cxx,$(install_doc_dir)/xsd/$(path)/supermen-pimpl.cxx) + +$(dist-common): + $(call install-data,$(src_base)/driver.cxx,$(dist_prefix)/$(path)/driver.cxx) + $(call install-data,$(src_base)/supermen.xsd,$(dist_prefix)/$(path)/supermen.xsd) + $(call install-data,$(src_base)/batman.xml,$(dist_prefix)/$(path)/batman.xml) + $(call install-data,$(src_base)/person.xml,$(dist_prefix)/$(path)/person.xml) + $(call install-data,$(src_base)/superman.xml,$(dist_prefix)/$(path)/superman.xml) + $(call install-data,$(src_base)/supermen-pimpl.hxx,$(dist_prefix)/$(path)/supermen-pimpl.hxx) + $(call install-data,$(src_base)/supermen-pimpl.cxx,$(dist_prefix)/$(path)/supermen-pimpl.cxx) + +$(dist): $(dist-common) + $(call install-data,$(src_base)/README,$(dist_prefix)/$(path)/README) + +$(dist-win): $(dist-common) + $(call install-data,$(src_base)/README,$(dist_prefix)/$(path)/README.txt) + $(call message,,unix2dos $(dist_prefix)/$(path)/README.txt) + + +# Clean. +# +$(clean): $(driver).o.clean \ + $(addsuffix .cxx.clean,$(obj)) \ + $(addsuffix .cxx.clean,$(dep)) \ + $(addprefix $(out_base)/,$(xsd:.xsd=-pskel.cxx.xsd.clean)) + +# Generated .gitignore. +# +ifeq ($(out_base),$(src_base)) +$(gen): | $(out_base)/.gitignore +$(driver): | $(out_base)/.gitignore + +$(out_base)/.gitignore: files := driver $(genf) +$(clean): $(out_base)/.gitignore.clean + +$(call include,$(bld_root)/git/gitignore.make) +endif + +# How to. +# +$(call include,$(bld_root)/cxx/o-e.make) +$(call include,$(bld_root)/cxx/cxx-o.make) +$(call include,$(bld_root)/cxx/cxx-d.make) +$(call include,$(bld_root)/install.make) +$(call include,$(scf_root)/xsd/parser/xsd-cxx.make) + + +# Dependencies. +# +$(call import,$(src_root)/xsd/makefile) diff --git a/xsd/examples/cxx/parser/polyroot/person.xml b/xsd/examples/cxx/parser/polyroot/person.xml new file mode 100644 index 0000000..157a5af --- /dev/null +++ b/xsd/examples/cxx/parser/polyroot/person.xml @@ -0,0 +1,16 @@ +<?xml version="1.0"?> + +<!-- + +file : examples/cxx/parser/polyroot/person.xml +author : Boris Kolpackov <boris@codesynthesis.com> +copyright : not copyrighted - public domain + +--> + +<person xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="supermen.xsd"> + + <name>John Doe</name> + +</person> diff --git a/xsd/examples/cxx/parser/polyroot/superman.xml b/xsd/examples/cxx/parser/polyroot/superman.xml new file mode 100644 index 0000000..86d9682 --- /dev/null +++ b/xsd/examples/cxx/parser/polyroot/superman.xml @@ -0,0 +1,17 @@ +<?xml version="1.0"?> + +<!-- + +file : examples/cxx/parser/polyroot/superman.xml +author : Boris Kolpackov <boris@codesynthesis.com> +copyright : not copyrighted - public domain + +--> + +<person xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="supermen.xsd" + xsi:type="superman" can-fly="false"> + + <name>James "007" Bond</name> + +</person> diff --git a/xsd/examples/cxx/parser/polyroot/supermen-pimpl.cxx b/xsd/examples/cxx/parser/polyroot/supermen-pimpl.cxx new file mode 100644 index 0000000..db41ab2 --- /dev/null +++ b/xsd/examples/cxx/parser/polyroot/supermen-pimpl.cxx @@ -0,0 +1,86 @@ +// file : examples/cxx/parser/polyroot/supermen-pimpl.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : not copyrighted - public domain +// + +#include <iostream> + +#include "supermen-pimpl.hxx" + +using std::cout; +using std::endl; + +// person_pimpl +// +void person_pimpl:: +pre () +{ + cout << "starting to parse person" << endl; +} + +void person_pimpl:: +name (const std::string& v) +{ + cout << "name: " << v << endl; +} + +void person_pimpl:: +post_person () +{ + cout << "finished parsing person" << endl + << endl; +} + +// superman_pimpl +// +void superman_pimpl:: +pre () +{ + cout << "starting to parse superman" << endl; +} + +void superman_pimpl:: +can_fly (bool v) +{ + cout << "can-fly: " << v << endl; +} + +void superman_pimpl:: +post_person () +{ + post_superman (); +} + +void superman_pimpl:: +post_superman () +{ + cout << "finished parsing superman" << endl + << endl; +} + +// batman_pimpl +// +void batman_pimpl:: +pre () +{ + cout << "starting to parse batman" << endl; +} + +void batman_pimpl:: +wing_span (unsigned int v) +{ + cout << "wing-span: " << v << endl; +} + +void batman_pimpl:: +post_superman () +{ + post_batman (); +} + +void batman_pimpl:: +post_batman () +{ + cout << "finished parsing batman" << endl + << endl; +} diff --git a/xsd/examples/cxx/parser/polyroot/supermen-pimpl.hxx b/xsd/examples/cxx/parser/polyroot/supermen-pimpl.hxx new file mode 100644 index 0000000..035d127 --- /dev/null +++ b/xsd/examples/cxx/parser/polyroot/supermen-pimpl.hxx @@ -0,0 +1,65 @@ +// file : examples/cxx/parser/polyroot/supermen-pimpl.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : not copyrighted - public domain + +#ifndef SUPERMEN_PIMPL_HXX +#define SUPERMEN_PIMPL_HXX + +#include "supermen-pskel.hxx" + +class person_pimpl: public virtual person_pskel +{ +public: + virtual void + pre (); + + virtual void + name (const std::string&); + + virtual void + post_person (); +}; + +class superman_pimpl: public virtual superman_pskel, + public person_pimpl +{ +public: + virtual void + pre (); + + virtual void + can_fly (bool); + + // By default, post_superman() calls post_person(). In case of + // polymorphic parsing we want the opposite: post_person() calls + // post_superman(). + // + virtual void + post_person (); + + virtual void + post_superman (); +}; + +class batman_pimpl: public virtual batman_pskel, + public superman_pimpl +{ +public: + virtual void + pre (); + + virtual void + wing_span (unsigned int); + + // By default, post_batman() calls post_superman(). In case of + // polymorphic parsing we want the opposite: post_superman() + // calls post_batman(). + // + virtual void + post_superman (); + + virtual void + post_batman (); +}; + +#endif // SUPERMEN_PIMPL_HXX diff --git a/xsd/examples/cxx/parser/polyroot/supermen.xsd b/xsd/examples/cxx/parser/polyroot/supermen.xsd new file mode 100644 index 0000000..090b662 --- /dev/null +++ b/xsd/examples/cxx/parser/polyroot/supermen.xsd @@ -0,0 +1,37 @@ +<?xml version="1.0"?> + +<!-- + +file : examples/cxx/parser/polyroot/supermen.xsd +author : Boris Kolpackov <boris@codesynthesis.com> +copyright : not copyrighted - public domain + +--> + +<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + + <xsd:complexType name="person"> + <xsd:sequence> + <xsd:element name="name" type="xsd:string"/> + </xsd:sequence> + </xsd:complexType> + + <xsd:element name="person" type="person"/> + + <xsd:complexType name="superman"> + <xsd:complexContent> + <xsd:extension base="person"> + <xsd:attribute name="can-fly" type="xsd:boolean" use="required"/> + </xsd:extension> + </xsd:complexContent> + </xsd:complexType> + + <xsd:complexType name="batman"> + <xsd:complexContent> + <xsd:extension base="superman"> + <xsd:attribute name="wing-span" type="xsd:unsignedInt" use="required"/> + </xsd:extension> + </xsd:complexContent> + </xsd:complexType> + +</xsd:schema> diff --git a/xsd/examples/cxx/parser/wildcard/README b/xsd/examples/cxx/parser/wildcard/README new file mode 100644 index 0000000..89f9aa9 --- /dev/null +++ b/xsd/examples/cxx/parser/wildcard/README @@ -0,0 +1,27 @@ +This example shows how to parse the XML data matched by XML Schema +wildcards (any and anyAttribute) in the C++/Parser mapping. The +example consists of the following files: + +email.xsd + XML Schema which describes a simple email format with the + extensible envelope type. + +email.xml + Sample email message. + +email-pskel.hxx +email-pskel.cxx + Parser skeletons generated by XSD from email.xsd. + +driver.cxx + Parser implementations and a driver for the example. The + parser implementations simply print the data to STDERR. + The driver first constructs parser instances from the + parser implementations mentioned above and a couple of + predefined parsers for the XML Schema built-in types. + In then invokes the parser instances to parse the input + file. + +To run the example on the sample XML instance document simply execute: + +$ ./driver email.xml diff --git a/xsd/examples/cxx/parser/wildcard/driver.cxx b/xsd/examples/cxx/parser/wildcard/driver.cxx new file mode 100644 index 0000000..7bd63eb --- /dev/null +++ b/xsd/examples/cxx/parser/wildcard/driver.cxx @@ -0,0 +1,240 @@ +// file : examples/cxx/parser/wildcard/driver.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : not copyrighted - public domain + +#include <string> +#include <memory> +#include <iostream> + +#include "email-pskel.hxx" + +using namespace std; +using xml_schema::ro_string; + +class binary_pimpl: public email::binary_pskel, + public xml_schema::base64_binary_pimpl +{ +public: + virtual void + name (const string& n) + { + cerr << "binary: " << n << endl; + } + + virtual void + mime (const string& t) + { + cerr << "type: " << t << endl + << endl; + } + + virtual void + post_binary () + { + auto_ptr<xml_schema::buffer> buf (post_base64_binary ()); + + cerr << "size: " << buf->size () << endl + << endl; + } +}; + +class envelope_pimpl: public email::envelope_pskel +{ +public: + envelope_pimpl (xml_schema::unsigned_int_pskel& uint_p, + xml_schema::string_pskel& string_p, + email::binary_pskel& binary_p) + : depth_ (0), cur_ (0), + uint_p_ (uint_p), string_p_ (string_p), binary_p_ (binary_p) + { + } + + virtual void + to (const string& addr) + { + cerr << "To: " << addr << endl; + } + + virtual void + from (const string& addr) + { + cerr << "From: " << addr << endl; + } + + virtual void + subject (const string& s) + { + cerr << "Subject: " << s << endl; + } + + // Wildcard handling. All wildcard events are routed to these + // four functions. It is our job to dispatch them to the right + // parsers. + // + virtual void + _start_any_element (const ro_string& ns, + const ro_string& name, + const ro_string* type) + { + if (depth_++ > 0) + { + // Nested wildcard element. + // + if (cur_) + cur_->_start_element (ns, name, type); + } + else + { + // Top-level element matched by the any wildcard. + // + if (ns == "http://www.codesynthesis.com/email") + { + if (name == "text") + { + cur_ = &string_p_; + string_p_.pre (); + string_p_._pre_impl (); + } + else if (name == "binary") + { + cur_ = &binary_p_; + binary_p_.pre (); + binary_p_._pre_impl (); + } + } + + if (cur_ == 0) + { + cerr << "Unknown wildcard content: " << ns << "#" << name << endl; + } + } + } + + virtual void + _end_any_element (const ro_string& ns, const ro_string& name) + { + if (--depth_ > 0) + { + if (cur_) + cur_->_end_element (ns, name); + } + else + { + if (ns == "http://www.codesynthesis.com/email") + { + if (name == "text") + { + string_p_._post_impl (); + string text (string_p_.post_string ()); + + cerr << text << endl + << endl; + } + else if (name == "binary") + { + binary_p_._post_impl (); + binary_p_.post_binary (); + } + } + + cur_ = 0; + } + } + + virtual void + _any_attribute (const ro_string& ns, + const ro_string& name, + const ro_string& value) + { + if (depth_ > 0) + { + // Nested wildcard attribute. + // + if (cur_) + cur_->_attribute (ns, name, value); + } + else + { + // Top-level attribute matched by the anyAttribute wildcard. + // + if (ns == "http://www.codesynthesis.com/email" && name == "thread-id") + { + uint_p_.pre (); + uint_p_._pre_impl (); + uint_p_._characters (value); + uint_p_._post_impl (); + unsigned int tid (uint_p_.post_unsigned_int ()); + + cerr << "Thread-id: " << tid << endl; + } + } + } + + virtual void + _any_characters (const ro_string& s) + { + if (depth_ > 0) + { + if (cur_) + cur_->_characters (s); + } + } + +private: + size_t depth_; + xml_schema::parser_base* cur_; + + // Parsers for the unsigned int, string and binary types. + // +private: + xml_schema::unsigned_int_pskel& uint_p_; + xml_schema::string_pskel& string_p_; + email::binary_pskel& binary_p_; +}; + + +int +main (int argc, char* argv[]) +{ + if (argc != 2) + { + cerr << "usage: " << argv[0] << " email.xml" << endl; + return 1; + } + + try + { + // Construct the parser. + // + xml_schema::unsigned_int_pimpl unsigned_int_p; + xml_schema::string_pimpl string_p; + binary_pimpl binary_p; + envelope_pimpl envelope_p (unsigned_int_p, string_p, binary_p); + + binary_p.parsers (string_p, // name + string_p); // mime + + envelope_p.parsers (string_p, // to + string_p, // from + string_p); // subject + + // Parse the XML instance document. + // + xml_schema::document doc_p (envelope_p, + "http://www.codesynthesis.com/email", + "message"); + envelope_p.pre (); + doc_p.parse (argv[1]); + envelope_p.post_envelope (); + } + catch (const xml_schema::exception& e) + { + cerr << e << endl; + return 1; + } + catch (const std::ios_base::failure&) + { + cerr << argv[1] << ": unable to open or read failure" << endl; + return 1; + } +} diff --git a/xsd/examples/cxx/parser/wildcard/email.xml b/xsd/examples/cxx/parser/wildcard/email.xml new file mode 100644 index 0000000..55f1e4b --- /dev/null +++ b/xsd/examples/cxx/parser/wildcard/email.xml @@ -0,0 +1,32 @@ +<?xml version="1.0"?> + +<!-- + +file : examples/cxx/parser/wildcard/email.xml +author : Boris Kolpackov <boris@codesynthesis.com> +copyright : not copyrighted - public domain + +--> + +<eml:message xmlns:eml="http://www.codesynthesis.com/email" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.codesynthesis.com/email email.xsd" + eml:thread-id="123456789"> + + <to>Jane Doe <jane@doe.com></to> + <from>John Doe <john@doe.com></from> + <subject>Surfing pictures</subject> + + <eml:text> +Hi Jane, + +Here are cool pictures of me surfing. + +Cheers, +John + </eml:text> + + <eml:binary name="pic1.jpg" mime="image/jpeg">YmFzZTY0IGJpbmFyeQ==</eml:binary> + <eml:binary name="pic2.jpg" mime="image/jpeg">YmFzZTY0IGJpbmFyeQ==</eml:binary> + +</eml:message> diff --git a/xsd/examples/cxx/parser/wildcard/email.xsd b/xsd/examples/cxx/parser/wildcard/email.xsd new file mode 100644 index 0000000..2e1f660 --- /dev/null +++ b/xsd/examples/cxx/parser/wildcard/email.xsd @@ -0,0 +1,51 @@ +<?xml version="1.0"?> + +<!-- + +file : examples/cxx/parser/wildcard/email.xsd +author : Boris Kolpackov <boris@codesynthesis.com> +copyright : not copyrighted - public domain + +--> + +<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns:eml="http://www.codesynthesis.com/email" + targetNamespace="http://www.codesynthesis.com/email"> + + <!-- Predefined envolop body types. --> + + <xsd:element name="text" type="xsd:string"/> + + <xsd:complexType name="binary"> + <xsd:simpleContent> + <xsd:extension base="xsd:base64Binary"> + <xsd:attribute name="name" type="xsd:string" use="required"/> + <xsd:attribute name="mime" type="xsd:string" use="required"/> + </xsd:extension> + </xsd:simpleContent> + </xsd:complexType> + + <xsd:element name="binary" type="eml:binary"/> + + <!-- Predefined envelop attributes. --> + + <xsd:attribute name="thread-id" type="xsd:unsignedInt"/> + + + <xsd:complexType name="envelope"> + <xsd:sequence> + <xsd:element name="to" type="xsd:string"/> + <xsd:element name="from" type="xsd:string"/> + <xsd:element name="subject" type="xsd:string"/> + + <!-- Extensible envelope body. --> + + <xsd:any namespace="##targetNamespace" processContents="strict" + maxOccurs="unbounded" /> + </xsd:sequence> + <xsd:anyAttribute namespace="##targetNamespace" processContents="strict"/> + </xsd:complexType> + + <xsd:element name="message" type="eml:envelope"/> + +</xsd:schema> diff --git a/xsd/examples/cxx/parser/wildcard/makefile b/xsd/examples/cxx/parser/wildcard/makefile new file mode 100644 index 0000000..d8fcc8d --- /dev/null +++ b/xsd/examples/cxx/parser/wildcard/makefile @@ -0,0 +1,103 @@ +# file : examples/cxx/parser/wildcard/makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../../build/bootstrap.make + +xsd := email.xsd +cxx := driver.cxx + +obj := $(addprefix $(out_base)/,$(cxx:.cxx=.o) $(xsd:.xsd=-pskel.o)) +dep := $(obj:.o=.o.d) + +driver := $(out_base)/driver +install := $(out_base)/.install +dist := $(out_base)/.dist +dist-win := $(out_base)/.dist-win +clean := $(out_base)/.clean + + +# Import. +# +$(call import,\ + $(scf_root)/import/libxerces-c/stub.make,\ + l: xerces_c.l,cpp-options: xerces_c.l.cpp-options) + + +# Build. +# +$(driver): $(obj) $(xerces_c.l) + +$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): $(xerces_c.l.cpp-options) + +genf := $(xsd:.xsd=-pskel.hxx) $(xsd:.xsd=-pskel.ixx) $(xsd:.xsd=-pskel.cxx) +gen := $(addprefix $(out_base)/,$(genf)) + +$(gen): xsd := $(out_root)/xsd/xsd +$(gen): $(out_root)/xsd/xsd + +$(call include-dep,$(dep)) + +# Convenience alias for default target. +# +$(out_base)/: $(driver) + + +# Install & Dist. +# +dist-common := $(out_base)/.dist-common + +$(install) $(dist) $(dist-win) $(dist-common): path := $(subst $(src_root)/,,$(src_base)) + +$(install): + $(call install-data,$(src_base)/README,$(install_doc_dir)/xsd/$(path)/README) + $(call install-data,$(src_base)/driver.cxx,$(install_doc_dir)/xsd/$(path)/driver.cxx) + $(call install-data,$(src_base)/email.xsd,$(install_doc_dir)/xsd/$(path)/email.xsd) + $(call install-data,$(src_base)/email.xml,$(install_doc_dir)/xsd/$(path)/email.xml) + +$(dist-common): + $(call install-data,$(src_base)/driver.cxx,$(dist_prefix)/$(path)/driver.cxx) + $(call install-data,$(src_base)/email.xsd,$(dist_prefix)/$(path)/email.xsd) + $(call install-data,$(src_base)/email.xml,$(dist_prefix)/$(path)/email.xml) + +$(dist): $(dist-common) + $(call install-data,$(src_base)/README,$(dist_prefix)/$(path)/README) + +$(dist-win): $(dist-common) + $(call install-data,$(src_base)/README,$(dist_prefix)/$(path)/README.txt) + $(call message,,unix2dos $(dist_prefix)/$(path)/README.txt) + + +# Clean. +# +$(clean): $(driver).o.clean \ + $(addsuffix .cxx.clean,$(obj)) \ + $(addsuffix .cxx.clean,$(dep)) \ + $(addprefix $(out_base)/,$(xsd:.xsd=-pskel.cxx.xsd.clean)) + +# Generated .gitignore. +# +ifeq ($(out_base),$(src_base)) +$(gen): | $(out_base)/.gitignore +$(driver): | $(out_base)/.gitignore + +$(out_base)/.gitignore: files := driver $(genf) +$(clean): $(out_base)/.gitignore.clean + +$(call include,$(bld_root)/git/gitignore.make) +endif + +# How to. +# +$(call include,$(bld_root)/cxx/o-e.make) +$(call include,$(bld_root)/cxx/cxx-o.make) +$(call include,$(bld_root)/cxx/cxx-d.make) +$(call include,$(bld_root)/install.make) +$(call include,$(scf_root)/xsd/parser/xsd-cxx.make) + + +# Dependencies. +# +$(call import,$(src_root)/xsd/makefile) diff --git a/xsd/examples/cxx/tree/README b/xsd/examples/cxx/tree/README new file mode 100644 index 0000000..348885f --- /dev/null +++ b/xsd/examples/cxx/tree/README @@ -0,0 +1,80 @@ +This directory contains a number of examples that show how to use +the C++/Tree mapping. The following list gives an overview of +each example. See the README files in example directories for +more information on each example. + +hello + A simple "Hello, world!" example that shows how to parse XML + documents. + +library + Shows hot to handle more complex data structures, use the + ID/IDREF cross-referencing mechanism, use the xsd:enumeration + to C++ enum mapping, modify the object model, and serialize + the modified object model back to XML. + +polymorphism + Shows how to use XML Schema polymorphism features such as the + xsi:type attribute and substitution groups. + +xpath + Shows how to use the C++/Tree mapping together with XPath. + +wildcard + Shows how to use the optional wildcard mapping to parse, access, + modify, and serialize the XML data matched by XML Schema wildcards + (any and anyAttribute). + +mixed + Shows how to access the underlying DOM nodes to handle raw, "type- + less content" such as mixed content models, anyType/anySimpleType, + and any/anyAttribute. + +multiroot + Shows how to handle XML vocabularies with multiple root elements. + See also the messaging example. + +messaging + Shows how to handle XML vocabularies with multiple root elements + using the element type and element map features of the C++/Tree + mapping. + +caching + Shows how to parse several XML documents while reusing the + underlying XML parser and caching the schemas used for validation. + +embedded + Shows how to embed the binary representation of the schema grammar + into an application and then use it with the C++/Tree mapping to + parse and validate XML documents. + +performance + Measures the performance of parsing and serialization. This example + also shows how to structure your code to achieve the maximum + performance for these two operations. + +custom/ + A collection of examples that show how to customize the C++/Tree + mapping by using custom C++ classes instead of or in addition to + the generated ones. See the accompanying README file for an + overview of each example in this directory. + +streaming + Shows how to perform stream-oriented, partially in-memory XML + processing using the C++/Tree mapping. With the partially in-memory + parsing and serialization only a part of the object model is in + memory at any given time. With this approach we can process parts + of the document as they become available as well as handle documents + that are too large to fit into memory. + +compression + Shows how to compress an XML document during serialization and decompress + it during parsing using the zlib library. + +binary/ + A collection of examples that show how to serialize the object model + into a number of predefined and custom binary formats. + +dbxml + Shows how to use the C++/Tree mapping on top of the Berkeley DB + XML embedded XML database. diff --git a/xsd/examples/cxx/tree/binary/README b/xsd/examples/cxx/tree/binary/README new file mode 100644 index 0000000..365551e --- /dev/null +++ b/xsd/examples/cxx/tree/binary/README @@ -0,0 +1,16 @@ +This directory contains a number of examples that show how to serialize +the object model into a number of predefined and custom binary formats. +The following list gives an overview of each example: + +boost + Shows how to save/load the object model to/from a custom format + using the Boost serialization library as an example. + +cdr + Shows how to save/load the object model to/from CDR (Common Data + Representation) binary format using ACE CDR streams. + +xdr + Shows how to save/load the object model to/from XDR (eXternal Data + Representation) binary format using the XDR API provided as part of + Sun RPC. diff --git a/xsd/examples/cxx/tree/binary/boost/README b/xsd/examples/cxx/tree/binary/boost/README new file mode 100644 index 0000000..6cdd2dd --- /dev/null +++ b/xsd/examples/cxx/tree/binary/boost/README @@ -0,0 +1,49 @@ +This example shows how to save/load the object model to/from a custom +format using the Boost serialization library as an example. You will +need the Boost serialization library[1] installed in order to build +and run this example. + +[1] http://www.boost.org + +The example consists of the following files: + +library.xsd + XML Schema which describes a library of books. + +library.xml + Sample XML instance document. + +boost-archive-extraction.hxx +boost-archive-insertion.hxx + Boost archive insertion and extraction operators for fundamental + types. You will need to provide a similar set of operators for + your own stream types. + +library-prologue.hxx + Contains a number of #include directives that are inserted into + the generated code by the XSD compiler. The included files are: + boost/archive/text_oarchive.hpp, boost/archive/text_oarchive.hpp, + boost-archive-insertion.hxx, and boost-archive-insertion.hxx. + +library.hxx +library.cxx + C++ types that represent the given vocabulary as well as Boost + archive insertion and extraction operations. These are generated + by the XSD compiler from library.xsd. The --hxx-prologue-file + option is used to insert the contents of the library-prologue.hxx + file into the generated header file. The --generate-insertion and + --generate-extraction options are used to generate the insertion + and extraction operations for text_oarchive and text_iarchive + types. + +driver.cxx + Driver for the example. It first calls one of the parsing functions + that constructs the object model from the input XML file. It then + saves the object model to text_oarchive and loads it back from + text_iarchive. Additionally, it prints the resulting text + representation as well as the content of the object model before + saving it to text_oarchive and after loading it from text_iarchive. + +To run the example on the sample XML instance document simply execute: + +$ ./driver library.xml diff --git a/xsd/examples/cxx/tree/binary/boost/boost-archive-extraction.hxx b/xsd/examples/cxx/tree/binary/boost/boost-archive-extraction.hxx new file mode 100644 index 0000000..7711b28 --- /dev/null +++ b/xsd/examples/cxx/tree/binary/boost/boost-archive-extraction.hxx @@ -0,0 +1,188 @@ +// file : examples/cxx/tree/binary/boost/boost-archive-insertion.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : not copyrighted - public domain + +#ifndef BOOST_ARCHIVE_EXTRACTION_HXX +#define BOOST_ARCHIVE_EXTRACTION_HXX + +#include <cstddef> // std::size_t +#include <string> + +#include <xsd/cxx/tree/buffer.hxx> +#include <xsd/cxx/tree/istream.hxx> + +#include <boost/cstdint.hpp> + +namespace xsd +{ + namespace cxx + { + namespace tree + { + // as_size + // + template <typename Archive, typename T> + inline istream<Archive>& + operator>> (istream<Archive>& s, istream_common::as_size<T>& x) + { + std::size_t r; + s.impl () >> r; + x.x_ = static_cast<T> (r); + return s; + } + + // 8-bit + // + template <typename Archive, typename T> + inline istream<Archive>& + operator>> (istream<Archive>& s, istream_common::as_int8<T>& x) + { + boost::int8_t r; + s.impl () >> r; + x.x_ = static_cast<T> (r); + return s; + } + + template <typename Archive, typename T> + inline istream<Archive>& + operator>> (istream<Archive>& s, istream_common::as_uint8<T>& x) + { + boost::uint8_t r; + s.impl () >> r; + x.x_ = static_cast<T> (r); + return s; + } + + + // 16-bit + // + template <typename Archive, typename T> + inline istream<Archive>& + operator>> (istream<Archive>& s, istream_common::as_int16<T>& x) + { + boost::int16_t r; + s.impl () >> r; + x.x_ = static_cast<T> (r); + return s; + } + + template <typename Archive, typename T> + inline istream<Archive>& + operator>> (istream<Archive>& s, istream_common::as_uint16<T>& x) + { + boost::uint16_t r; + s.impl () >> r; + x.x_ = static_cast<T> (r); + return s; + } + + + // 32-bit + // + template <typename Archive, typename T> + inline istream<Archive>& + operator>> (istream<Archive>& s, istream_common::as_int32<T>& x) + { + boost::int32_t r; + s.impl () >> r; + x.x_ = static_cast<T> (r); + return s; + } + + template <typename Archive, typename T> + inline istream<Archive>& + operator>> (istream<Archive>& s, istream_common::as_uint32<T>& x) + { + boost::uint32_t r; + s.impl () >> r; + x.x_ = static_cast<T> (r); + return s; + } + + + // 64-bit + // + template <typename Archive, typename T> + inline istream<Archive>& + operator>> (istream<Archive>& s, istream_common::as_int64<T>& x) + { + boost::int64_t r; + s.impl () >> r; + x.x_ = static_cast<T> (r); + return s; + } + + template <typename Archive, typename T> + inline istream<Archive>& + operator>> (istream<Archive>& s, istream_common::as_uint64<T>& x) + { + boost::uint64_t r; + s.impl () >> r; + x.x_ = static_cast<T> (r); + return s; + } + + + // Boolean + // + template <typename Archive, typename T> + inline istream<Archive>& + operator>> (istream<Archive>& s, istream_common::as_bool<T>& x) + { + bool r; + s.impl () >> r; + x.x_ = static_cast<T> (r); + return s; + } + + + // Floating-point + // + template <typename Archive, typename T> + inline istream<Archive>& + operator>> (istream<Archive>& s, istream_common::as_float32<T>& x) + { + float r; + s.impl () >> r; + x.x_ = static_cast<T> (r); + return s; + } + + template <typename Archive, typename T> + inline istream<Archive>& + operator>> (istream<Archive>& s, istream_common::as_float64<T>& x) + { + double r; + s.impl () >> r; + x.x_ = static_cast<T> (r); + return s; + } + + // Extraction of std::basic_string. + // + + template <typename Archive, typename C> + inline istream<Archive>& + operator>> (istream<Archive>& s, std::basic_string<C>& x) + { + s.impl () >> x; + return s; + } + + + // Extraction of a binary buffer. + // + template <typename Archive, typename C> + istream<Archive>& + operator>> (istream<Archive>& s, buffer<C>& x) + { + std::size_t size; + s.impl () >> size; + x.size (size); + s.impl ().load_binary (x.data (), size); + } + } + } +} + +#endif // BOOST_ARCHIVE_EXTRACTION_HXX diff --git a/xsd/examples/cxx/tree/binary/boost/boost-archive-insertion.hxx b/xsd/examples/cxx/tree/binary/boost/boost-archive-insertion.hxx new file mode 100644 index 0000000..7a00ef8 --- /dev/null +++ b/xsd/examples/cxx/tree/binary/boost/boost-archive-insertion.hxx @@ -0,0 +1,177 @@ +// file : examples/cxx/tree/binary/boost/boost-archive-insertion.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : not copyrighted - public domain + +#ifndef BOOST_ARCHIVE_INSERTION_HXX +#define BOOST_ARCHIVE_INSERTION_HXX + +#include <cstddef> // std::size_t +#include <string> + +#include <xsd/cxx/tree/buffer.hxx> +#include <xsd/cxx/tree/ostream.hxx> + +#include <boost/cstdint.hpp> + +namespace xsd +{ + namespace cxx + { + namespace tree + { + // as_size + // + template <typename Archive, typename T> + inline ostream<Archive>& + operator<< (ostream<Archive>& s, ostream_common::as_size<T> x) + { + std::size_t v (static_cast<std::size_t> (x.x_)); + s.impl () << v; + return s; + } + + // 8-bit + // + template <typename Archive, typename T> + inline ostream<Archive>& + operator<< (ostream<Archive>& s, ostream_common::as_int8<T> x) + { + boost::int8_t v (static_cast<boost::int8_t> (x.x_)); + s.impl () << v; + return s; + } + + template <typename Archive, typename T> + inline ostream<Archive>& + operator<< (ostream<Archive>& s, ostream_common::as_uint8<T> x) + { + boost::uint8_t v (static_cast<boost::uint8_t> (x.x_)); + s.impl () << v; + return s; + } + + + // 16-bit + // + template <typename Archive, typename T> + inline ostream<Archive>& + operator<< (ostream<Archive>& s, ostream_common::as_int16<T> x) + { + boost::int16_t v (static_cast<boost::int16_t> (x.x_)); + s.impl () << v; + return s; + } + + template <typename Archive, typename T> + inline ostream<Archive>& + operator<< (ostream<Archive>& s, ostream_common::as_uint16<T> x) + { + boost::uint16_t v (static_cast<boost::uint16_t> (x.x_)); + s.impl () << v; + return s; + } + + + // 32-bit + // + template <typename Archive, typename T> + inline ostream<Archive>& + operator<< (ostream<Archive>& s, ostream_common::as_int32<T> x) + { + boost::int32_t v (static_cast<boost::int32_t> (x.x_)); + s.impl () << v; + return s; + } + + template <typename Archive, typename T> + inline ostream<Archive>& + operator<< (ostream<Archive>& s, ostream_common::as_uint32<T> x) + { + boost::uint32_t v (static_cast<boost::uint32_t> (x.x_)); + s.impl () << v; + return s; + } + + + // 64-bit + // + template <typename Archive, typename T> + inline ostream<Archive>& + operator<< (ostream<Archive>& s, ostream_common::as_int64<T> x) + { + boost::int64_t v (static_cast<boost::int64_t> (x.x_)); + s.impl () << v; + return s; + } + + template <typename Archive, typename T> + inline ostream<Archive>& + operator<< (ostream<Archive>& s, ostream_common::as_uint64<T> x) + { + boost::uint64_t v (static_cast<boost::uint64_t> (x.x_)); + s.impl () << v; + return s; + } + + + // Boolean + // + template <typename Archive, typename T> + inline ostream<Archive>& + operator<< (ostream<Archive>& s, ostream_common::as_bool<T> x) + { + bool v (static_cast<bool> (x.x_)); + s.impl () << v; + return s; + } + + + // Floating-point + // + template <typename Archive, typename T> + inline ostream<Archive>& + operator<< (ostream<Archive>& s, ostream_common::as_float32<T> x) + { + float v (static_cast<float> (x.x_)); + s.impl () << v; + return s; + } + + template <typename Archive, typename T> + inline ostream<Archive>& + operator<< (ostream<Archive>& s, ostream_common::as_float64<T> x) + { + double v (static_cast<double> (x.x_)); + s.impl () << v; + return s; + } + + + // Insertion of std::basic_string. + // + template <typename Archive, typename C> + inline ostream<Archive>& + operator<< (ostream<Archive>& s, const std::basic_string<C>& x) + { + s.impl () << x; + return s; + } + + + // Insertion of a binary buffer. + // + template <typename Archive, typename C> + ostream<Archive>& + operator<< (ostream<Archive>& s, const buffer<C>& x) + { + // Boost.Serialization needs an lvalue. + // + std::size_t size (x.size()); + s.impl () << size; + s.impl ().save_binary (x.data (), x.size ()); + } + } + } +} + +#endif // BOOST_ARCHIVE_INSERTION_HXX diff --git a/xsd/examples/cxx/tree/binary/boost/driver.cxx b/xsd/examples/cxx/tree/binary/boost/driver.cxx new file mode 100644 index 0000000..9490d13 --- /dev/null +++ b/xsd/examples/cxx/tree/binary/boost/driver.cxx @@ -0,0 +1,73 @@ +// file : examples/cxx/tree/binary/boost/driver.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : not copyrighted - public domain + +#include <memory> // std::auto_ptr +#include <cstring> // std::memcpy +#include <sstream> +#include <iostream> + +// You can generate insertion/extraction code for other archive +// types (for example, binary, XML, etc). +// +#include <boost/archive/text_oarchive.hpp> +#include <boost/archive/text_iarchive.hpp> + +#include "library.hxx" + +using std::cerr; +using std::endl; + +int +main (int argc, char* argv[]) +{ + if (argc != 2) + { + cerr << "usage: " << argv[0] << " library.xml" << endl; + return 1; + } + + try + { + using namespace library; + using boost::archive::text_oarchive; + using boost::archive::text_iarchive; + + // Read in the file. + // + std::auto_ptr<catalog> c (catalog_ (argv[1])); + + cerr << *c << endl; + + // Save into a text archive. + // + std::ostringstream ostr; + text_oarchive oa (ostr); + xml_schema::ostream<text_oarchive> os (oa); + + os << *c; + + // Print the text representation. + // + std::string str (ostr.str ()); + + cerr << endl + << "text representation: " << endl + << str << endl; + + // Load from a text archive. + // + std::istringstream istr (str); + text_iarchive ia (istr); + xml_schema::istream<text_iarchive> is (ia); + + std::auto_ptr<catalog> copy (new catalog (is)); + + cerr << *copy << endl; + } + catch (const xml_schema::exception& e) + { + cerr << e << endl; + return 1; + } +} diff --git a/xsd/examples/cxx/tree/binary/boost/library-prologue.hxx b/xsd/examples/cxx/tree/binary/boost/library-prologue.hxx new file mode 100644 index 0000000..ba0d35f --- /dev/null +++ b/xsd/examples/cxx/tree/binary/boost/library-prologue.hxx @@ -0,0 +1,9 @@ +// Include declarations for the archive types. +// +#include <boost/archive/text_oarchive.hpp> +#include <boost/archive/text_iarchive.hpp> + +// Include insertion/extraction operators for fundamental types. +// +#include "boost-archive-insertion.hxx" +#include "boost-archive-extraction.hxx" diff --git a/xsd/examples/cxx/tree/binary/boost/library.xml b/xsd/examples/cxx/tree/binary/boost/library.xml new file mode 100644 index 0000000..da2bee6 --- /dev/null +++ b/xsd/examples/cxx/tree/binary/boost/library.xml @@ -0,0 +1,53 @@ +<?xml version="1.0"?> + +<!-- + +file : examples/cxx/tree/binary/boost/library.xml +author : Boris Kolpackov <boris@codesynthesis.com> +copyright : not copyrighted - public domain + +--> + +<lib:catalog xmlns:lib="http://www.codesynthesis.com/library" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.codesynthesis.com/library library.xsd"> + + <book id="MM" available="false"> + <isbn>0679760806</isbn> + <title>The Master and Margarita</title> + <genre>fiction</genre> + + <author recommends="WP"> + <name>Mikhail Bulgakov</name> + <born>1891-05-15</born> + <died>1940-03-10</died> + </author> + </book> + + + <book id="WP"> + <isbn>0679600841</isbn> + <title>War and Peace</title> + <genre>history</genre> + + <author recommends="CP"> + <name>Leo Tolstoy</name> + <born>1828-09-09</born> + <died>1910-11-20</died> + </author> + </book> + + + <book id="CP" available="false"> + <isbn>0679420290</isbn> + <title>Crime and Punishment</title> + <genre>philosophy</genre> + + <author> + <name>Fyodor Dostoevsky</name> + <born>1821-11-11</born> + <died>1881-02-09</died> + </author> + </book> + +</lib:catalog> diff --git a/xsd/examples/cxx/tree/binary/boost/library.xsd b/xsd/examples/cxx/tree/binary/boost/library.xsd new file mode 100644 index 0000000..9f35d4a --- /dev/null +++ b/xsd/examples/cxx/tree/binary/boost/library.xsd @@ -0,0 +1,76 @@ +<?xml version="1.0"?> + +<!-- + +file : examples/cxx/tree/binary/boost/library.xsd +author : Boris Kolpackov <boris@codesynthesis.com> +copyright : not copyrighted - public domain + +--> + +<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns:xse="http://www.codesynthesis.com/xmlns/xml-schema-extension" + xmlns:lib="http://www.codesynthesis.com/library" + targetNamespace="http://www.codesynthesis.com/library"> + + <xsd:simpleType name="isbn"> + <xsd:restriction base="xsd:unsignedInt"/> + </xsd:simpleType> + + + <xsd:complexType name="title"> + <xsd:simpleContent> + <xsd:extension base="xsd:string"> + <xsd:attribute name="lang" type="xsd:language"/> + </xsd:extension> + </xsd:simpleContent> + </xsd:complexType> + + <xsd:simpleType name="genre"> + <xsd:restriction base="xsd:string"> + <xsd:enumeration value="romance"/> + <xsd:enumeration value="fiction"/> + <xsd:enumeration value="horror"/> + <xsd:enumeration value="history"/> + <xsd:enumeration value="philosophy"/> + </xsd:restriction> + </xsd:simpleType> + + <xsd:complexType name="person"> + <xsd:sequence> + <xsd:element name="name" type="xsd:string"/> + <xsd:element name="born" type="xsd:date"/> + <xsd:element name="died" type="xsd:date" minOccurs="0"/> + </xsd:sequence> + </xsd:complexType> + + <xsd:complexType name="author"> + <xsd:complexContent> + <xsd:extension base="lib:person"> + <xsd:attribute name="recommends" type="xsd:IDREF" xse:refType="lib:book"/> + </xsd:extension> + </xsd:complexContent> + </xsd:complexType> + + <xsd:complexType name="book"> + <xsd:sequence> + <xsd:element name="isbn" type="lib:isbn"/> + <xsd:element name="title" type="lib:title"/> + <xsd:element name="genre" type="lib:genre"/> + <xsd:element name="author" type="lib:author" maxOccurs="unbounded"/> + </xsd:sequence> + <xsd:attribute name="available" type="xsd:boolean" default="true"/> + <xsd:attribute name="id" type="xsd:ID" use="required"/> + </xsd:complexType> + + + <xsd:complexType name="catalog"> + <xsd:sequence> + <xsd:element name="book" type="lib:book" maxOccurs="unbounded"/> + </xsd:sequence> + </xsd:complexType> + + + <xsd:element name="catalog" type="lib:catalog"/> + +</xsd:schema> diff --git a/xsd/examples/cxx/tree/binary/boost/makefile b/xsd/examples/cxx/tree/binary/boost/makefile new file mode 100644 index 0000000..7044539 --- /dev/null +++ b/xsd/examples/cxx/tree/binary/boost/makefile @@ -0,0 +1,119 @@ +# file : examples/cxx/tree/binary/boost/makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../../../build/bootstrap.make + +xsd := library.xsd +cxx := driver.cxx + +obj := $(addprefix $(out_base)/,$(cxx:.cxx=.o) $(xsd:.xsd=.o)) +dep := $(obj:.o=.o.d) + +driver := $(out_base)/driver +install := $(out_base)/.install +dist := $(out_base)/.dist +dist-win := $(out_base)/.dist-win +clean := $(out_base)/.clean + + +# Import. +# +$(call import,\ + $(scf_root)/import/libxerces-c/stub.make,\ + l: xerces_c.l,cpp-options: xerces_c.l.cpp-options) + +ifeq ($(filter $(MAKECMDGOALS),dist dist-win install),) +$(call import,\ + $(scf_root)/import/libboost/serialization/stub.make,\ + l: boost_serialization.l,cpp-options: boost_serialization.l.cpp-options) +endif + + +# Build. +# +$(driver): $(obj) $(xerces_c.l) $(boost_serialization.l) + +$(obj) $(dep): cpp_options := -I$(src_root)/libxsd -I$(src_root) +$(obj) $(dep): $(xerces_c.l.cpp-options) $(boost_serialization.l.cpp-options) + +genf := $(xsd:.xsd=.hxx) $(xsd:.xsd=.ixx) $(xsd:.xsd=.cxx) +gen := $(addprefix $(out_base)/,$(genf)) + +$(gen): xsd := $(out_root)/xsd/xsd + +$(gen): xsd_options := --generate-ostream \ +--hxx-prologue-file $(src_base)/library-prologue.hxx \ +--generate-insertion boost::archive::text_oarchive \ +--generate-extraction boost::archive::text_iarchive + +$(gen): $(out_root)/xsd/xsd + +$(call include-dep,$(dep)) + +# Convenience alias for default target. +# +$(out_base)/: $(driver) + + +# Install & Dist. +# +dist-common := $(out_base)/.dist-common + +$(install) $(dist) $(dist-win) $(dist-common): path := $(subst $(src_root)/,,$(src_base)) + +$(install): + $(call install-data,$(src_base)/README,$(install_doc_dir)/xsd/$(path)/README) + $(call install-data,$(src_base)/driver.cxx,$(install_doc_dir)/xsd/$(path)/driver.cxx) + $(call install-data,$(src_base)/library.xsd,$(install_doc_dir)/xsd/$(path)/library.xsd) + $(call install-data,$(src_base)/library.xml,$(install_doc_dir)/xsd/$(path)/library.xml) + $(call install-data,$(src_base)/library-prologue.hxx,$(install_doc_dir)/xsd/$(path)/library-prologue.hxx) + $(call install-data,$(src_base)/boost-archive-extraction.hxx,$(install_doc_dir)/xsd/$(path)/boost-archive-extraction.hxx) + $(call install-data,$(src_base)/boost-archive-insertion.hxx,$(install_doc_dir)/xsd/$(path)/boost-archive-insertion.hxx) + +$(dist-common): + $(call install-data,$(src_base)/driver.cxx,$(dist_prefix)/$(path)/driver.cxx) + $(call install-data,$(src_base)/library.xsd,$(dist_prefix)/$(path)/library.xsd) + $(call install-data,$(src_base)/library.xml,$(dist_prefix)/$(path)/library.xml) + $(call install-data,$(src_base)/library-prologue.hxx,$(dist_prefix)/$(path)/library-prologue.hxx) + $(call install-data,$(src_base)/boost-archive-extraction.hxx,$(dist_prefix)/$(path)/boost-archive-extraction.hxx) + $(call install-data,$(src_base)/boost-archive-insertion.hxx,$(dist_prefix)/$(path)/boost-archive-insertion.hxx) + +$(dist): $(dist-common) + $(call install-data,$(src_base)/README,$(dist_prefix)/$(path)/README) + +$(dist-win): $(dist-common) + $(call install-data,$(src_base)/README,$(dist_prefix)/$(path)/README.txt) + $(call message,,unix2dos $(dist_prefix)/$(path)/README.txt) + +# Clean. +# +$(clean): $(driver).o.clean \ + $(addsuffix .cxx.clean,$(obj)) \ + $(addsuffix .cxx.clean,$(dep)) \ + $(addprefix $(out_base)/,$(xsd:.xsd=.cxx.xsd.clean)) + +# Generated .gitignore. +# +ifeq ($(out_base),$(src_base)) +$(gen): | $(out_base)/.gitignore +$(driver): | $(out_base)/.gitignore + +$(out_base)/.gitignore: files := driver $(genf) +$(clean): $(out_base)/.gitignore.clean + +$(call include,$(bld_root)/git/gitignore.make) +endif + +# How to. +# +$(call include,$(bld_root)/cxx/o-e.make) +$(call include,$(bld_root)/cxx/cxx-o.make) +$(call include,$(bld_root)/cxx/cxx-d.make) +$(call include,$(bld_root)/install.make) +$(call include,$(scf_root)/xsd/tree/xsd-cxx.make) + +# Dependencies. +# +$(call import,$(src_root)/xsd/makefile) diff --git a/xsd/examples/cxx/tree/binary/cdr/README b/xsd/examples/cxx/tree/binary/cdr/README new file mode 100644 index 0000000..914d27c --- /dev/null +++ b/xsd/examples/cxx/tree/binary/cdr/README @@ -0,0 +1,36 @@ +This example shows how to save/load the object model to/from CDR +(Common Data Representation) binary format using ACE CDR streams. +Support for other data representation streams can be easily added. You +will need the ACE library[1] installed in order to build and run this +example. + +[1] http://www.cs.wustl.edu/~schmidt/ACE.html + +The example consists of the following files: + +library.xsd + XML Schema which describes a library of books. + +library.xml + Sample XML instance document. + +library.hxx +library.cxx + C++ types that represent the given vocabulary as well as data + representation stream insertion and extraction operations. These + are generated by XSD from library.xsd. Note that the + --generate-insertion and --generate-extraction options are used + to generate the insertion and extraction operations for ACE CDR + stream. + +driver.cxx + Driver for the example. It first calls one of the parsing functions + that constructs the object model from the input XML file. It then + saves the object model to ACE_OuputCDR and loads it back from + ACE_InputCDR. Additionally, it prints the resulting binary + representation as well as the content of the object model before + saving it to the CDR stream and after loading it from the CDR stream. + +To run the example on the sample XML instance document simply execute: + +$ ./driver library.xml diff --git a/xsd/examples/cxx/tree/binary/cdr/driver.cxx b/xsd/examples/cxx/tree/binary/cdr/driver.cxx new file mode 100644 index 0000000..08ec0d5 --- /dev/null +++ b/xsd/examples/cxx/tree/binary/cdr/driver.cxx @@ -0,0 +1,88 @@ +// file : examples/cxx/tree/binary/cdr/driver.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : not copyrighted - public domain + +#include <memory> // std::auto_ptr +#include <cstring> // std::memcpy +#include <iostream> + +#include <ace/Log_Msg.h> // ACE_HEX_DUMP +#include <ace/CDR_Stream.h> + +// The following two headers define XSD-specific insertion/extraction +// operations for ACE CDR streams. You can use the content of these +// headers as a guide to implementing insertion/extraction to/from +// your own data representation streams: +// +// xsd/cxx/tree/ace-cdr-stream-insertion.hxx +// xsd/cxx/tree/ace-cdr-stream-extraction.hxx + +#include "library.hxx" + +using std::cerr; +using std::endl; + +int +main (int argc, char* argv[]) +{ + if (argc != 2) + { + cerr << "usage: " << argv[0] << " library.xml" << endl; + return 1; + } + + try + { + using namespace library; + + // Read in the file. + // + std::auto_ptr<catalog> c (catalog_ (argv[1])); + + cerr << *c << endl; + + // Save to a CDR stream. + // + ACE_OutputCDR ace_ocdr; + xml_schema::ostream<ACE_OutputCDR> ocdr (ace_ocdr); + + ocdr << *c; + + // Print the binary representation and at the same time save + // it into a continuous buffer. + // + cerr << endl + << "binary representation size: " << ace_ocdr.total_length () << endl; + + xml_schema::buffer buf (ace_ocdr.total_length ()); + char* data (buf.data ()); + + for (const ACE_Message_Block* mb = ace_ocdr.begin (); + mb != 0; + mb = mb->cont ()) + { + std::memcpy (data, mb->rd_ptr (), mb->length ()); + data += mb->length (); + + ACE_HEX_DUMP ((LM_DEBUG, mb->rd_ptr (), mb->length ())); + } + + // Load from a CDR stream. Note that ACE_InputCDR expects the + // buffer to be properly aligned. Since our buffer is dynamically + // allocated, its alignment should be good enough. + // + ACE_InputCDR ace_icdr (buf.data (), buf.size ()); + xml_schema::istream<ACE_InputCDR> icdr (ace_icdr); + + std::auto_ptr<catalog> copy (new catalog (icdr)); + + cerr << *copy << endl; + } + catch (const xml_schema::exception& e) + { + cerr << e << endl; + return 1; + } + + return 0; // ACE makes our main() an ordinary function. +} diff --git a/xsd/examples/cxx/tree/binary/cdr/library.xml b/xsd/examples/cxx/tree/binary/cdr/library.xml new file mode 100644 index 0000000..e7ccb3f --- /dev/null +++ b/xsd/examples/cxx/tree/binary/cdr/library.xml @@ -0,0 +1,53 @@ +<?xml version="1.0"?> + +<!-- + +file : examples/cxx/tree/binary/cdr/library.xml +author : Boris Kolpackov <boris@codesynthesis.com> +copyright : not copyrighted - public domain + +--> + +<lib:catalog xmlns:lib="http://www.codesynthesis.com/library" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.codesynthesis.com/library library.xsd"> + + <book id="MM" available="false"> + <isbn>0679760806</isbn> + <title>The Master and Margarita</title> + <genre>fiction</genre> + + <author recommends="WP"> + <name>Mikhail Bulgakov</name> + <born>1891-05-15</born> + <died>1940-03-10</died> + </author> + </book> + + + <book id="WP"> + <isbn>0679600841</isbn> + <title>War and Peace</title> + <genre>history</genre> + + <author recommends="CP"> + <name>Leo Tolstoy</name> + <born>1828-09-09</born> + <died>1910-11-20</died> + </author> + </book> + + + <book id="CP" available="false"> + <isbn>0679420290</isbn> + <title>Crime and Punishment</title> + <genre>philosophy</genre> + + <author> + <name>Fyodor Dostoevsky</name> + <born>1821-11-11</born> + <died>1881-02-09</died> + </author> + </book> + +</lib:catalog> diff --git a/xsd/examples/cxx/tree/binary/cdr/library.xsd b/xsd/examples/cxx/tree/binary/cdr/library.xsd new file mode 100644 index 0000000..92d44d1 --- /dev/null +++ b/xsd/examples/cxx/tree/binary/cdr/library.xsd @@ -0,0 +1,76 @@ +<?xml version="1.0"?> + +<!-- + +file : examples/cxx/tree/binary/cdr/library.xsd +author : Boris Kolpackov <boris@codesynthesis.com> +copyright : not copyrighted - public domain + +--> + +<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns:xse="http://www.codesynthesis.com/xmlns/xml-schema-extension" + xmlns:lib="http://www.codesynthesis.com/library" + targetNamespace="http://www.codesynthesis.com/library"> + + <xsd:simpleType name="isbn"> + <xsd:restriction base="xsd:unsignedInt"/> + </xsd:simpleType> + + + <xsd:complexType name="title"> + <xsd:simpleContent> + <xsd:extension base="xsd:string"> + <xsd:attribute name="lang" type="xsd:language"/> + </xsd:extension> + </xsd:simpleContent> + </xsd:complexType> + + <xsd:simpleType name="genre"> + <xsd:restriction base="xsd:string"> + <xsd:enumeration value="romance"/> + <xsd:enumeration value="fiction"/> + <xsd:enumeration value="horror"/> + <xsd:enumeration value="history"/> + <xsd:enumeration value="philosophy"/> + </xsd:restriction> + </xsd:simpleType> + + <xsd:complexType name="person"> + <xsd:sequence> + <xsd:element name="name" type="xsd:string"/> + <xsd:element name="born" type="xsd:date"/> + <xsd:element name="died" type="xsd:date" minOccurs="0"/> + </xsd:sequence> + </xsd:complexType> + + <xsd:complexType name="author"> + <xsd:complexContent> + <xsd:extension base="lib:person"> + <xsd:attribute name="recommends" type="xsd:IDREF" xse:refType="lib:book"/> + </xsd:extension> + </xsd:complexContent> + </xsd:complexType> + + <xsd:complexType name="book"> + <xsd:sequence> + <xsd:element name="isbn" type="lib:isbn"/> + <xsd:element name="title" type="lib:title"/> + <xsd:element name="genre" type="lib:genre"/> + <xsd:element name="author" type="lib:author" maxOccurs="unbounded"/> + </xsd:sequence> + <xsd:attribute name="available" type="xsd:boolean" default="true"/> + <xsd:attribute name="id" type="xsd:ID" use="required"/> + </xsd:complexType> + + + <xsd:complexType name="catalog"> + <xsd:sequence> + <xsd:element name="book" type="lib:book" maxOccurs="unbounded"/> + </xsd:sequence> + </xsd:complexType> + + + <xsd:element name="catalog" type="lib:catalog"/> + +</xsd:schema> diff --git a/xsd/examples/cxx/tree/binary/cdr/makefile b/xsd/examples/cxx/tree/binary/cdr/makefile new file mode 100644 index 0000000..72bdae7 --- /dev/null +++ b/xsd/examples/cxx/tree/binary/cdr/makefile @@ -0,0 +1,109 @@ +# file : examples/cxx/tree/binary/cdr/makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../../../build/bootstrap.make + +xsd := library.xsd +cxx := driver.cxx + +obj := $(addprefix $(out_base)/,$(cxx:.cxx=.o) $(xsd:.xsd=.o)) +dep := $(obj:.o=.o.d) + +driver := $(out_base)/driver +install := $(out_base)/.install +dist := $(out_base)/.dist +dist-win := $(out_base)/.dist-win +clean := $(out_base)/.clean + + +# Import. +# +$(call import,\ + $(scf_root)/import/libxerces-c/stub.make,\ + l: xerces_c.l,cpp-options: xerces_c.l.cpp-options) + +ifeq ($(filter $(MAKECMDGOALS),dist dist-win install),) +$(call import,\ + $(scf_root)/import/libace/stub.make,\ + l: ace.l,cpp-options: ace.l.cpp-options) +endif + + +# Build. +# +$(driver): $(obj) $(xerces_c.l) $(ace.l) + +$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): $(xerces_c.l.cpp-options) $(ace.l.cpp-options) + +genf := $(xsd:.xsd=.hxx) $(xsd:.xsd=.ixx) $(xsd:.xsd=.cxx) +gen := $(addprefix $(out_base)/,$(genf)) + +$(gen): xsd := $(out_root)/xsd/xsd +$(gen): xsd_options := --generate-ostream \ +--generate-insertion ACE_OutputCDR --generate-extraction ACE_InputCDR +$(gen): $(out_root)/xsd/xsd + +$(call include-dep,$(dep)) + +# Convenience alias for default target. +# +$(out_base)/: $(driver) + + +# Install & Dist. +# +dist-common := $(out_base)/.dist-common + +$(install) $(dist) $(dist-win) $(dist-common): path := $(subst $(src_root)/,,$(src_base)) + +$(install): + $(call install-data,$(src_base)/README,$(install_doc_dir)/xsd/$(path)/README) + $(call install-data,$(src_base)/driver.cxx,$(install_doc_dir)/xsd/$(path)/driver.cxx) + $(call install-data,$(src_base)/library.xsd,$(install_doc_dir)/xsd/$(path)/library.xsd) + $(call install-data,$(src_base)/library.xml,$(install_doc_dir)/xsd/$(path)/library.xml) + +$(dist-common): + $(call install-data,$(src_base)/driver.cxx,$(dist_prefix)/$(path)/driver.cxx) + $(call install-data,$(src_base)/library.xsd,$(dist_prefix)/$(path)/library.xsd) + $(call install-data,$(src_base)/library.xml,$(dist_prefix)/$(path)/library.xml) + +$(dist): $(dist-common) + $(call install-data,$(src_base)/README,$(dist_prefix)/$(path)/README) + +$(dist-win): $(dist-common) + $(call install-data,$(src_base)/README,$(dist_prefix)/$(path)/README.txt) + $(call message,,unix2dos $(dist_prefix)/$(path)/README.txt) + +# Clean. +# +$(clean): $(driver).o.clean \ + $(addsuffix .cxx.clean,$(obj)) \ + $(addsuffix .cxx.clean,$(dep)) \ + $(addprefix $(out_base)/,$(xsd:.xsd=.cxx.xsd.clean)) + +# Generated .gitignore. +# +ifeq ($(out_base),$(src_base)) +$(gen): | $(out_base)/.gitignore +$(driver): | $(out_base)/.gitignore + +$(out_base)/.gitignore: files := driver $(genf) +$(clean): $(out_base)/.gitignore.clean + +$(call include,$(bld_root)/git/gitignore.make) +endif + +# How to. +# +$(call include,$(bld_root)/cxx/o-e.make) +$(call include,$(bld_root)/cxx/cxx-o.make) +$(call include,$(bld_root)/cxx/cxx-d.make) +$(call include,$(bld_root)/install.make) +$(call include,$(scf_root)/xsd/tree/xsd-cxx.make) + +# Dependencies. +# +$(call import,$(src_root)/xsd/makefile) diff --git a/xsd/examples/cxx/tree/binary/makefile b/xsd/examples/cxx/tree/binary/makefile new file mode 100644 index 0000000..fbdfbe4 --- /dev/null +++ b/xsd/examples/cxx/tree/binary/makefile @@ -0,0 +1,57 @@ +# file : examples/cxx/tree/binary/makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../../build/bootstrap.make + +all_examples := boost cdr xdr +build_examples := + +ifeq ($(xsd_with_boost_serialization),y) +build_examples += boost +endif + +ifeq ($(xsd_with_ace),y) +build_examples += cdr +endif + +ifeq ($(xsd_with_xdr),y) +build_examples += xdr +endif + +default := $(out_base)/ +install := $(out_base)/.install +dist := $(out_base)/.dist +dist-win := $(out_base)/.dist-win +clean := $(out_base)/.clean + +# Build. +# +$(default): $(addprefix $(out_base)/,$(addsuffix /,$(build_examples))) + +# Install & Dist. +# +$(install) $(dist) $(dist-win): path := $(subst $(src_root)/,,$(src_base)) + +$(install): $(addprefix $(out_base)/,$(addsuffix /.install,$(all_examples))) + $(call install-data,$(src_base)/README,$(install_doc_dir)/xsd/$(path)/README) + +$(dist): $(addprefix $(out_base)/,$(addsuffix /.dist,$(all_examples))) + $(call install-data,$(src_base)/README,$(dist_prefix)/$(path)/README) + +$(dist-win): $(addprefix $(out_base)/,$(addsuffix /.dist-win,$(all_examples))) + $(call install-data,$(src_base)/README,$(dist_prefix)/$(path)/README.txt) + $(call message,,unix2dos $(dist_prefix)/$(path)/README.txt) + +# Clean. +# +$(clean): $(addprefix $(out_base)/,$(addsuffix /.clean,$(build_examples))) + +$(call include,$(bld_root)/install.make) + +ifneq ($(filter $(MAKECMDGOALS),dist dist-win install),) +$(foreach e,$(all_examples),$(call import,$(src_base)/$e/makefile)) +else +$(foreach e,$(build_examples),$(call import,$(src_base)/$e/makefile)) +endif diff --git a/xsd/examples/cxx/tree/binary/xdr/README b/xsd/examples/cxx/tree/binary/xdr/README new file mode 100644 index 0000000..22d5693 --- /dev/null +++ b/xsd/examples/cxx/tree/binary/xdr/README @@ -0,0 +1,34 @@ +This example shows how to save/load the object model to/from XDR +(eXternal Data Representation) binary format using XDR streams. +The XDR API is available out of the box on most UNIX and GNU/Linux +systems as part of Sun RPC. On Windows you may need to install a +third-party library which provides the XDR API. + +The example consists of the following files: + +library.xsd + XML Schema which describes a library of books. + +library.xml + Sample XML instance document. + +library.hxx +library.cxx + C++ types that represent the given vocabulary as well as data + representation stream insertion and extraction operations. These + are generated by XSD from library.xsd. Note that the + --generate-insertion and --generate-extraction options are used + to generate the insertion and extraction operations for XDR + stream. + +driver.cxx + Driver for the example. It first calls one of the parsing functions + that constructs the object model from the input XML file. It then + saves the object model to the XDR representation and loads it back. + Additionally, it prints the content of the object model before saving + it to the XDR representation and after loading it from the XDR + representation. + +To run the example on the sample XML instance document simply execute: + +$ ./driver library.xml diff --git a/xsd/examples/cxx/tree/binary/xdr/driver.cxx b/xsd/examples/cxx/tree/binary/xdr/driver.cxx new file mode 100644 index 0000000..495eafc --- /dev/null +++ b/xsd/examples/cxx/tree/binary/xdr/driver.cxx @@ -0,0 +1,149 @@ +// file : examples/cxx/tree/binary/xdr/driver.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : not copyrighted - public domain + +#include <memory> // std::auto_ptr +#include <cstring> // std::memcpy +#include <cstddef> // std::size_t +#include <iostream> + +#include <rpc/types.h> +#include <rpc/xdr.h> + +#include "library.hxx" + +using std::cerr; +using std::endl; +using std::size_t; + +// XDR output functions. Their implementations are provided after main(). +// +struct underflow_info +{ + xml_schema::buffer* buf; + size_t pos; +}; + +extern "C" int +overflow (void* user_data, char* buf, int n); + +extern "C" int +underflow (void* user_data, char* buf, int n); + +// The xdrrec_create function (used below) has slightly different +// prototypes on different platforms. To make this example portable +// we will need to cast the actual function to the following common +// prototype. +// +extern "C" +typedef void (*xdrrec_create_p) ( + XDR*, + unsigned int write_size, + unsigned int read_size, + void* user_data, + int (*read) (void* user_data, char* buf, int n), + int (*write) (void* user_data, char* buf, int n)); + +int +main (int argc, char* argv[]) +{ + if (argc != 2) + { + cerr << "usage: " << argv[0] << " library.xml" << endl; + return 1; + } + + try + { + using namespace library; + + xdrrec_create_p xdrrec_create_ = + reinterpret_cast<xdrrec_create_p> (::xdrrec_create); + + // Read in the file. + // + std::auto_ptr<catalog> c (catalog_ (argv[1])); + + cerr << *c << endl; + + // Save to an XDR stream. + // + XDR xdr; + xml_schema::buffer buf; + + xdrrec_create_ (&xdr, 0, 0, reinterpret_cast<char*> (&buf), 0, &overflow); + xdr.x_op = XDR_ENCODE; + + xml_schema::ostream<XDR> oxdr (xdr); + + oxdr << *c; + + xdrrec_endofrecord (&xdr, true); // Flush the data. + xdr_destroy (&xdr); + + // The binary representation is now in the memory buffer 'buf'. + // To get to the raw data use buf.data() and buf.size(). + // + cerr << endl + << "binary representation size: " << buf.size () << endl; + + // Load from an XDR stream. + // + underflow_info ui; + ui.buf = &buf; + ui.pos = 0; + + xdrrec_create_ (&xdr, 0, 0, reinterpret_cast<char*> (&ui), &underflow, 0); + xdr.x_op = XDR_DECODE; + + xdrrec_skiprecord (&xdr); + + xml_schema::istream<XDR> ixdr (xdr); + + std::auto_ptr<catalog> copy (new catalog (ixdr)); + + xdr_destroy (&xdr); + + cerr << *copy << endl; + } + catch (const xml_schema::exception& e) + { + cerr << e << endl; + return 1; + } +} + +extern "C" int +overflow (void* p, char* buf, int n_) +{ + xml_schema::buffer* dst (reinterpret_cast<xml_schema::buffer*> (p)); + size_t n (static_cast<size_t> (n_)); + + size_t size (dst->size ()); + size_t capacity (dst->capacity ()); + + // Implement exponential growth. + // + if (size + n > capacity && size + n < capacity * 2) + dst->capacity (capacity * 2); + + dst->size (size + n); + std::memcpy (dst->data () + size, buf, n); + + return n; +} + +extern "C" int +underflow (void* p, char* buf, int n_) +{ + underflow_info* ui (reinterpret_cast<underflow_info*> (p)); + size_t n (static_cast<size_t> (n_)); + + size_t size (ui->buf->size () - ui->pos); + n = size > n ? n : size; + + std::memcpy (buf, ui->buf->data () + ui->pos, n); + ui->pos += n; + + return n; +} diff --git a/xsd/examples/cxx/tree/binary/xdr/library.xml b/xsd/examples/cxx/tree/binary/xdr/library.xml new file mode 100644 index 0000000..9ddcd5a --- /dev/null +++ b/xsd/examples/cxx/tree/binary/xdr/library.xml @@ -0,0 +1,53 @@ +<?xml version="1.0"?> + +<!-- + +file : examples/cxx/tree/binary/xdr/library.xml +author : Boris Kolpackov <boris@codesynthesis.com> +copyright : not copyrighted - public domain + +--> + +<lib:catalog xmlns:lib="http://www.codesynthesis.com/library" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.codesynthesis.com/library library.xsd"> + + <book id="MM" available="false"> + <isbn>0679760806</isbn> + <title>The Master and Margarita</title> + <genre>fiction</genre> + + <author recommends="WP"> + <name>Mikhail Bulgakov</name> + <born>1891-05-15</born> + <died>1940-03-10</died> + </author> + </book> + + + <book id="WP"> + <isbn>0679600841</isbn> + <title>War and Peace</title> + <genre>history</genre> + + <author recommends="CP"> + <name>Leo Tolstoy</name> + <born>1828-09-09</born> + <died>1910-11-20</died> + </author> + </book> + + + <book id="CP" available="false"> + <isbn>0679420290</isbn> + <title>Crime and Punishment</title> + <genre>philosophy</genre> + + <author> + <name>Fyodor Dostoevsky</name> + <born>1821-11-11</born> + <died>1881-02-09</died> + </author> + </book> + +</lib:catalog> diff --git a/xsd/examples/cxx/tree/binary/xdr/library.xsd b/xsd/examples/cxx/tree/binary/xdr/library.xsd new file mode 100644 index 0000000..9999e72 --- /dev/null +++ b/xsd/examples/cxx/tree/binary/xdr/library.xsd @@ -0,0 +1,76 @@ +<?xml version="1.0"?> + +<!-- + +file : examples/cxx/tree/binary/xdr/library.xsd +author : Boris Kolpackov <boris@codesynthesis.com> +copyright : not copyrighted - public domain + +--> + +<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns:xse="http://www.codesynthesis.com/xmlns/xml-schema-extension" + xmlns:lib="http://www.codesynthesis.com/library" + targetNamespace="http://www.codesynthesis.com/library"> + + <xsd:simpleType name="isbn"> + <xsd:restriction base="xsd:unsignedInt"/> + </xsd:simpleType> + + + <xsd:complexType name="title"> + <xsd:simpleContent> + <xsd:extension base="xsd:string"> + <xsd:attribute name="lang" type="xsd:language"/> + </xsd:extension> + </xsd:simpleContent> + </xsd:complexType> + + <xsd:simpleType name="genre"> + <xsd:restriction base="xsd:string"> + <xsd:enumeration value="romance"/> + <xsd:enumeration value="fiction"/> + <xsd:enumeration value="horror"/> + <xsd:enumeration value="history"/> + <xsd:enumeration value="philosophy"/> + </xsd:restriction> + </xsd:simpleType> + + <xsd:complexType name="person"> + <xsd:sequence> + <xsd:element name="name" type="xsd:string"/> + <xsd:element name="born" type="xsd:date"/> + <xsd:element name="died" type="xsd:date" minOccurs="0"/> + </xsd:sequence> + </xsd:complexType> + + <xsd:complexType name="author"> + <xsd:complexContent> + <xsd:extension base="lib:person"> + <xsd:attribute name="recommends" type="xsd:IDREF" xse:refType="lib:book"/> + </xsd:extension> + </xsd:complexContent> + </xsd:complexType> + + <xsd:complexType name="book"> + <xsd:sequence> + <xsd:element name="isbn" type="lib:isbn"/> + <xsd:element name="title" type="lib:title"/> + <xsd:element name="genre" type="lib:genre"/> + <xsd:element name="author" type="lib:author" maxOccurs="unbounded"/> + </xsd:sequence> + <xsd:attribute name="available" type="xsd:boolean" default="true"/> + <xsd:attribute name="id" type="xsd:ID" use="required"/> + </xsd:complexType> + + + <xsd:complexType name="catalog"> + <xsd:sequence> + <xsd:element name="book" type="lib:book" maxOccurs="unbounded"/> + </xsd:sequence> + </xsd:complexType> + + + <xsd:element name="catalog" type="lib:catalog"/> + +</xsd:schema> diff --git a/xsd/examples/cxx/tree/binary/xdr/makefile b/xsd/examples/cxx/tree/binary/xdr/makefile new file mode 100644 index 0000000..092cdc7 --- /dev/null +++ b/xsd/examples/cxx/tree/binary/xdr/makefile @@ -0,0 +1,101 @@ +# file : examples/cxx/tree/binary/xdr/makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../../../build/bootstrap.make + +xsd := library.xsd +cxx := driver.cxx + +obj := $(addprefix $(out_base)/,$(cxx:.cxx=.o) $(xsd:.xsd=.o)) +dep := $(obj:.o=.o.d) + +driver := $(out_base)/driver +install := $(out_base)/.install +dist := $(out_base)/.dist +dist-win := $(out_base)/.dist-win +clean := $(out_base)/.clean + +# Import. +# +$(call import,\ + $(scf_root)/import/libxerces-c/stub.make,\ + l: xerces_c.l,cpp-options: xerces_c.l.cpp-options) + +# Build. +# +$(driver): $(obj) $(xerces_c.l) -lnsl + +$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): $(xerces_c.l.cpp-options) + +genf := $(xsd:.xsd=.hxx) $(xsd:.xsd=.ixx) $(xsd:.xsd=.cxx) +gen := $(addprefix $(out_base)/,$(genf)) + +$(gen): xsd := $(out_root)/xsd/xsd +$(gen): xsd_options := --generate-ostream \ +--generate-insertion XDR --generate-extraction XDR +$(gen): $(out_root)/xsd/xsd + +$(call include-dep,$(dep)) + +# Convenience alias for default target. +# +$(out_base)/: $(driver) + + +# Install & Dist. +# +dist-common := $(out_base)/.dist-common + +$(install) $(dist) $(dist-win) $(dist-common): path := $(subst $(src_root)/,,$(src_base)) + +$(install): + $(call install-data,$(src_base)/README,$(install_doc_dir)/xsd/$(path)/README) + $(call install-data,$(src_base)/driver.cxx,$(install_doc_dir)/xsd/$(path)/driver.cxx) + $(call install-data,$(src_base)/library.xsd,$(install_doc_dir)/xsd/$(path)/library.xsd) + $(call install-data,$(src_base)/library.xml,$(install_doc_dir)/xsd/$(path)/library.xml) + +$(dist-common): + $(call install-data,$(src_base)/driver.cxx,$(dist_prefix)/$(path)/driver.cxx) + $(call install-data,$(src_base)/library.xsd,$(dist_prefix)/$(path)/library.xsd) + $(call install-data,$(src_base)/library.xml,$(dist_prefix)/$(path)/library.xml) + +$(dist): $(dist-common) + $(call install-data,$(src_base)/README,$(dist_prefix)/$(path)/README) + +$(dist-win): $(dist-common) + $(call install-data,$(src_base)/README,$(dist_prefix)/$(path)/README.txt) + $(call message,,unix2dos $(dist_prefix)/$(path)/README.txt) + +# Clean. +# +$(clean): $(driver).o.clean \ + $(addsuffix .cxx.clean,$(obj)) \ + $(addsuffix .cxx.clean,$(dep)) \ + $(addprefix $(out_base)/,$(xsd:.xsd=.cxx.xsd.clean)) + +# Generated .gitignore. +# +ifeq ($(out_base),$(src_base)) +$(gen): | $(out_base)/.gitignore +$(driver): | $(out_base)/.gitignore + +$(out_base)/.gitignore: files := driver $(genf) +$(clean): $(out_base)/.gitignore.clean + +$(call include,$(bld_root)/git/gitignore.make) +endif + +# How to. +# +$(call include,$(bld_root)/cxx/o-e.make) +$(call include,$(bld_root)/cxx/cxx-o.make) +$(call include,$(bld_root)/cxx/cxx-d.make) +$(call include,$(bld_root)/install.make) +$(call include,$(scf_root)/xsd/tree/xsd-cxx.make) + +# Dependencies. +# +$(call import,$(src_root)/xsd/makefile) diff --git a/xsd/examples/cxx/tree/caching/README b/xsd/examples/cxx/tree/caching/README new file mode 100644 index 0000000..64e5a1a --- /dev/null +++ b/xsd/examples/cxx/tree/caching/README @@ -0,0 +1,29 @@ +This example shows how to use the C++/Tree mapping to parse several +XML documents while reusing the underlying XML parser and caching the +schemas used for validation. + +The example consists of the following files: + +library.xsd + XML Schema which describes a library of books. + +library.xml + Sample XML instance document. + +library.hxx +library.cxx + C++ types that represent the given vocabulary and a set of parsing + functions that convert XML instance documents to a tree-like in-memory + object model. These are generated by XSD from library.xsd. + +driver.cxx + Driver for the example. It first sets up the Xerces-C++ DOM parser + and caches the library.xsd schema for validation. It then performs + ten iterations that parse the input file to a DOM document using + the DOM parser and call one of the parsing functions that constructs + the object model from this DOM document. On each iteration the driver + prints a number of books in the object model to STDERR. + +To run the example on the sample XML instance document simply execute: + +$ ./driver library.xml diff --git a/xsd/examples/cxx/tree/caching/driver.cxx b/xsd/examples/cxx/tree/caching/driver.cxx new file mode 100644 index 0000000..a3877d8 --- /dev/null +++ b/xsd/examples/cxx/tree/caching/driver.cxx @@ -0,0 +1,209 @@ +// file : examples/cxx/tree/caching/driver.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : not copyrighted - public domain + +#include <memory> // std::auto_ptr +#include <fstream> +#include <iostream> + +#include <xercesc/dom/DOM.hpp> +#include <xercesc/util/XMLUniDefs.hpp> // chLatin_* +#include <xercesc/util/PlatformUtils.hpp> +#include <xercesc/validators/common/Grammar.hpp> // xercesc::Grammar +#include <xercesc/framework/Wrapper4InputSource.hpp> + +#include <xsd/cxx/xml/dom/auto-ptr.hxx> +#include <xsd/cxx/xml/dom/bits/error-handler-proxy.hxx> +#include <xsd/cxx/xml/sax/std-input-source.hxx> + +#include <xsd/cxx/tree/error-handler.hxx> + +#include "library.hxx" + +using namespace std; + +int +main (int argc, char* argv[]) +{ + if (argc != 2) + { + cerr << "usage: " << argv[0] << " library.xml" << endl; + return 1; + } + + int r (0); + + // We need to initialize the Xerces-C++ runtime because we + // are doing the XML-to-DOM parsing ourselves. + // + xercesc::XMLPlatformUtils::Initialize (); + + try + { + using namespace xercesc; + namespace xml = xsd::cxx::xml; + namespace tree = xsd::cxx::tree; + + const XMLCh ls_id [] = {chLatin_L, chLatin_S, chNull}; + + // Get an implementation of the Load-Store (LS) interface. + // + DOMImplementation* impl ( + DOMImplementationRegistry::getDOMImplementation (ls_id)); + +#if _XERCES_VERSION >= 30000 + + // Xerces-C++ 3.0.0 and later. + // + xml::dom::auto_ptr<DOMLSParser> parser ( + impl->createLSParser (DOMImplementationLS::MODE_SYNCHRONOUS, 0)); + + DOMConfiguration* conf (parser->getDomConfig ()); + + // Discard comment nodes in the document. + // + conf->setParameter (XMLUni::fgDOMComments, false); + + // Enable datatype normalization. + // + conf->setParameter (XMLUni::fgDOMDatatypeNormalization, true); + + // Do not create EntityReference nodes in the DOM tree. No + // EntityReference nodes will be created, only the nodes + // corresponding to their fully expanded substitution text + // will be created. + // + conf->setParameter (XMLUni::fgDOMEntities, false); + + // Perform namespace processing. + // + conf->setParameter (XMLUni::fgDOMNamespaces, true); + + // Do not include ignorable whitespace in the DOM tree. + // + conf->setParameter (XMLUni::fgDOMElementContentWhitespace, false); + + // Enable validation. + // + conf->setParameter (XMLUni::fgDOMValidate, true); + conf->setParameter (XMLUni::fgXercesSchema, true); + conf->setParameter (XMLUni::fgXercesSchemaFullChecking, false); + + // Xerces-C++ 3.1.0 is the first version with working multi import + // support. + // +#if _XERCES_VERSION >= 30100 + conf->setParameter (XMLUni::fgXercesHandleMultipleImports, true); +#endif + + // Set error handler. + // + tree::error_handler<char> eh; + xml::dom::bits::error_handler_proxy<char> ehp (eh); + conf->setParameter (XMLUni::fgDOMErrorHandler, &ehp); + + // Initialize the schema cache. + // + if (!parser->loadGrammar ("library.xsd", Grammar::SchemaGrammarType, true)) + { + // In Xerces-C++ grammar loading failure results in just a warning. + // Make it a fatal error. + // + eh.handle ("library.xsd", 0, 0, + tree::error_handler<char>::severity::fatal, + "unable to load schema"); + } + + eh.throw_if_failed<xml_schema::parsing> (); + + // Use the loaded grammar during parsing. + // + conf->setParameter (XMLUni::fgXercesUseCachedGrammarInParse, true); + + // Disable loading schemas via other means (e.g., schemaLocation). + // + conf->setParameter (XMLUni::fgXercesLoadSchema, false); + + // We will release the DOM document ourselves. + // + conf->setParameter (XMLUni::fgXercesUserAdoptsDOMDocument, true); + +#else // _XERCES_VERSION >= 30000 + + // Same as above but for Xerces-C++ 2 series. + // + xml::dom::auto_ptr<DOMBuilder> parser ( + impl->createDOMBuilder(DOMImplementationLS::MODE_SYNCHRONOUS, 0)); + + + parser->setFeature (XMLUni::fgDOMComments, false); + parser->setFeature (XMLUni::fgDOMDatatypeNormalization, true); + parser->setFeature (XMLUni::fgDOMEntities, false); + parser->setFeature (XMLUni::fgDOMNamespaces, true); + parser->setFeature (XMLUni::fgDOMWhitespaceInElementContent, false); + parser->setFeature (XMLUni::fgDOMValidation, true); + parser->setFeature (XMLUni::fgXercesSchema, true); + parser->setFeature (XMLUni::fgXercesSchemaFullChecking, false); + + tree::error_handler<char> eh; + xml::dom::bits::error_handler_proxy<char> ehp (eh); + parser->setErrorHandler (&ehp); + + if (!parser->loadGrammar ("library.xsd", Grammar::SchemaGrammarType, true)) + { + eh.handle ("library.xsd", 0, 0, + tree::error_handler<char>::severity::fatal, + "unable to load schema"); + } + + eh.throw_if_failed<xml_schema::parsing> (); + parser->setFeature (XMLUni::fgXercesUseCachedGrammarInParse, true); + + parser->setFeature (XMLUni::fgXercesUserAdoptsDOMDocument, true); + +#endif // _XERCES_VERSION >= 30000 + + // Parse XML documents. + // + for (unsigned long i (0); i < 10; ++i) + { + ifstream ifs; + ifs.exceptions (ifstream::badbit | ifstream::failbit); + ifs.open (argv[1]); + + // Wrap the standard input stream. + // + xml::sax::std_input_source isrc (ifs, argv[1]); + Wrapper4InputSource wrap (&isrc, false); + + // Parse XML to DOM. + // +#if _XERCES_VERSION >= 30000 + xml_schema::dom::auto_ptr<DOMDocument> doc (parser->parse (&wrap)); +#else + xml_schema::dom::auto_ptr<DOMDocument> doc (parser->parse (wrap)); +#endif + + eh.throw_if_failed<xml_schema::parsing> (); + + // Parse DOM to the object model. + // + auto_ptr<library::catalog> c (library::catalog_ (*doc)); + + cerr << "catalog with " << c->book ().size () << " books" << endl; + } + } + catch (const xml_schema::exception& e) + { + cerr << e << endl; + r = 1; + } + catch (const std::ios_base::failure&) + { + cerr << argv[1] << ": unable to open or read failure" << endl; + r = 1; + } + + xercesc::XMLPlatformUtils::Terminate (); + return r; +} diff --git a/xsd/examples/cxx/tree/caching/library.xml b/xsd/examples/cxx/tree/caching/library.xml new file mode 100644 index 0000000..4c12c6e --- /dev/null +++ b/xsd/examples/cxx/tree/caching/library.xml @@ -0,0 +1,53 @@ +<?xml version="1.0"?> + +<!-- + +file : examples/cxx/tree/caching/library.xml +author : Boris Kolpackov <boris@codesynthesis.com> +copyright : not copyrighted - public domain + +--> + +<lib:catalog xmlns:lib="http://www.codesynthesis.com/library" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.codesynthesis.com/library library.xsd"> + + <book id="MM" available="false"> + <isbn>0679760806</isbn> + <title>The Master and Margarita</title> + <genre>fiction</genre> + + <author recommends="WP"> + <name>Mikhail Bulgakov</name> + <born>1891-05-15</born> + <died>1940-03-10</died> + </author> + </book> + + + <book id="WP"> + <isbn>0679600841</isbn> + <title>War and Peace</title> + <genre>history</genre> + + <author recommends="CP"> + <name>Leo Tolstoy</name> + <born>1828-09-09</born> + <died>1910-11-20</died> + </author> + </book> + + + <book id="CP" available="false"> + <isbn>0679420290</isbn> + <title>Crime and Punishment</title> + <genre>philosophy</genre> + + <author> + <name>Fyodor Dostoevsky</name> + <born>1821-11-11</born> + <died>1881-02-09</died> + </author> + </book> + +</lib:catalog> diff --git a/xsd/examples/cxx/tree/caching/library.xsd b/xsd/examples/cxx/tree/caching/library.xsd new file mode 100644 index 0000000..5dca460 --- /dev/null +++ b/xsd/examples/cxx/tree/caching/library.xsd @@ -0,0 +1,73 @@ +<?xml version="1.0"?> + +<!-- + +file : examples/cxx/tree/caching/library.xsd +author : Boris Kolpackov <boris@codesynthesis.com> +copyright : not copyrighted - public domain + +--> + +<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns:xse="http://www.codesynthesis.com/xmlns/xml-schema-extension" + xmlns:lib="http://www.codesynthesis.com/library" + targetNamespace="http://www.codesynthesis.com/library"> + + <xsd:simpleType name="isbn"> + <xsd:restriction base="xsd:unsignedInt"/> + </xsd:simpleType> + + <xsd:complexType name="title"> + <xsd:simpleContent> + <xsd:extension base="xsd:string"> + <xsd:attribute name="lang" type="xsd:language"/> + </xsd:extension> + </xsd:simpleContent> + </xsd:complexType> + + <xsd:simpleType name="genre"> + <xsd:restriction base="xsd:string"> + <xsd:enumeration value="romance"/> + <xsd:enumeration value="fiction"/> + <xsd:enumeration value="horror"/> + <xsd:enumeration value="history"/> + <xsd:enumeration value="philosophy"/> + </xsd:restriction> + </xsd:simpleType> + + <xsd:complexType name="person"> + <xsd:sequence> + <xsd:element name="name" type="xsd:string"/> + <xsd:element name="born" type="xsd:date"/> + <xsd:element name="died" type="xsd:date" minOccurs="0"/> + </xsd:sequence> + </xsd:complexType> + + <xsd:complexType name="author"> + <xsd:complexContent> + <xsd:extension base="lib:person"> + <xsd:attribute name="recommends" type="xsd:IDREF" xse:refType="lib:book"/> + </xsd:extension> + </xsd:complexContent> + </xsd:complexType> + + <xsd:complexType name="book"> + <xsd:sequence> + <xsd:element name="isbn" type="lib:isbn"/> + <xsd:element name="title" type="lib:title"/> + <xsd:element name="genre" type="lib:genre"/> + <xsd:element name="author" type="lib:author" maxOccurs="unbounded"/> + </xsd:sequence> + <xsd:attribute name="available" type="xsd:boolean" default="true"/> + <xsd:attribute name="id" type="xsd:ID" use="required"/> + </xsd:complexType> + + <xsd:complexType name="catalog"> + <xsd:sequence> + <xsd:element name="book" type="lib:book" maxOccurs="unbounded"/> + </xsd:sequence> + </xsd:complexType> + + <xsd:element name="catalog" type="lib:catalog"/> + +</xsd:schema> diff --git a/xsd/examples/cxx/tree/caching/makefile b/xsd/examples/cxx/tree/caching/makefile new file mode 100644 index 0000000..cd0447e --- /dev/null +++ b/xsd/examples/cxx/tree/caching/makefile @@ -0,0 +1,103 @@ +# file : examples/cxx/tree/caching/makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../../build/bootstrap.make + +xsd := library.xsd +cxx := driver.cxx + +obj := $(addprefix $(out_base)/,$(cxx:.cxx=.o) $(xsd:.xsd=.o)) +dep := $(obj:.o=.o.d) + +driver := $(out_base)/driver +install := $(out_base)/.install +dist := $(out_base)/.dist +dist-win := $(out_base)/.dist-win +clean := $(out_base)/.clean + + +# Import. +# +$(call import,\ + $(scf_root)/import/libxerces-c/stub.make,\ + l: xerces_c.l,cpp-options: xerces_c.l.cpp-options) + + +# Build. +# +$(driver): $(obj) $(xerces_c.l) + +$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): $(xerces_c.l.cpp-options) + +genf := $(xsd:.xsd=.hxx) $(xsd:.xsd=.ixx) $(xsd:.xsd=.cxx) +gen := $(addprefix $(out_base)/,$(genf)) + +$(gen): xsd := $(out_root)/xsd/xsd +$(gen): xsd_options := +$(gen): $(out_root)/xsd/xsd + +$(call include-dep,$(dep)) + +# Convenience alias for default target. +# +$(out_base)/: $(driver) + + +# Install & Dist. +# +dist-common := $(out_base)/.dist-common + +$(install) $(dist) $(dist-win) $(dist-common): path := $(subst $(src_root)/,,$(src_base)) + +$(install): + $(call install-data,$(src_base)/README,$(install_doc_dir)/xsd/$(path)/README) + $(call install-data,$(src_base)/driver.cxx,$(install_doc_dir)/xsd/$(path)/driver.cxx) + $(call install-data,$(src_base)/library.xsd,$(install_doc_dir)/xsd/$(path)/library.xsd) + $(call install-data,$(src_base)/library.xml,$(install_doc_dir)/xsd/$(path)/library.xml) + +$(dist-common): + $(call install-data,$(src_base)/driver.cxx,$(dist_prefix)/$(path)/driver.cxx) + $(call install-data,$(src_base)/library.xsd,$(dist_prefix)/$(path)/library.xsd) + $(call install-data,$(src_base)/library.xml,$(dist_prefix)/$(path)/library.xml) + +$(dist): $(dist-common) + $(call install-data,$(src_base)/README,$(dist_prefix)/$(path)/README) + +$(dist-win): $(dist-common) + $(call install-data,$(src_base)/README,$(dist_prefix)/$(path)/README.txt) + $(call message,,unix2dos $(dist_prefix)/$(path)/README.txt) + + +# Clean. +# +$(clean): $(driver).o.clean \ + $(addsuffix .cxx.clean,$(obj)) \ + $(addsuffix .cxx.clean,$(dep)) \ + $(addprefix $(out_base)/,$(xsd:.xsd=.cxx.xsd.clean)) + +# Generated .gitignore. +# +ifeq ($(out_base),$(src_base)) +$(gen): | $(out_base)/.gitignore +$(driver): | $(out_base)/.gitignore + +$(out_base)/.gitignore: files := driver $(genf) +$(clean): $(out_base)/.gitignore.clean + +$(call include,$(bld_root)/git/gitignore.make) +endif + +# How to. +# +$(call include,$(bld_root)/cxx/o-e.make) +$(call include,$(bld_root)/cxx/cxx-o.make) +$(call include,$(bld_root)/cxx/cxx-d.make) +$(call include,$(bld_root)/install.make) +$(call include,$(scf_root)/xsd/tree/xsd-cxx.make) + +# Dependencies. +# +$(call import,$(src_root)/xsd/makefile) diff --git a/xsd/examples/cxx/tree/compression/README b/xsd/examples/cxx/tree/compression/README new file mode 100644 index 0000000..f163970 --- /dev/null +++ b/xsd/examples/cxx/tree/compression/README @@ -0,0 +1,48 @@ +This example shows how to compress an XML document during serialization +and decompress it during parsing. The example uses the compression +functionality provided by the zlib library[1] which needs to be installed +in order to build and run this example. It should also be fairly straight- +forward to modify the code in this example to use other compression +libraries. + +[1] http://www.zlib.net + +The example consists of the following files: + +library.xsd + XML Schema which describes a library of books. + +library.xml.gz + Sample XML instance document compressed using the gzip format. + +compressed-format-target.hxx +compressed-format-target.cxx + Implementation of the Xerces-C++ XMLFormatTarget interface with the on- + the-fly compression support. You can use it in your application to add + XML compression. + +compressed-input-source.hxx +compressed-input-source.cxx + Implementation of the Xerces-C++ InputSource interface with the on-the- + fly decompression support. You can use it in your application to add + XML decompression. + +library.hxx +library.cxx + C++ types that represent the given vocabulary and a set of parsing + functions that convert XML instance documents to a tree-like in-memory + object model. These are generated by XSD from library.xsd. + +driver.cxx + Driver for the example. It first creates the compressed_input_source + object and passes it to one of the parsing functions that constructs + the object model from the compressed input file. It then prints the + content of the object model to STDERR. Finally, the driver creates the + compressed_format_target object and passes it to one of the serialization + functions which converts the object model back to the compressed XML. + +To run the example on the sample XML document simply execute: + +$ ./driver library.xml.gz + +The serialization output is written to the out.xml.gz file. diff --git a/xsd/examples/cxx/tree/compression/compressed-format-target.cxx b/xsd/examples/cxx/tree/compression/compressed-format-target.cxx new file mode 100644 index 0000000..b4a8a85 --- /dev/null +++ b/xsd/examples/cxx/tree/compression/compressed-format-target.cxx @@ -0,0 +1,157 @@ +// file : examples/cxx/tree/compression/compressed-format-target.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : not copyrighted - public domain + +#include <ostream> +#include <cstring> // std::memcpy + +#include "compressed-format-target.hxx" + +using namespace std; + +// +// compression_failure +// + +const char* compression_failure:: +what () const throw () +{ + return "compression failure"; +} + +// +// compressed_format_target +// + +compressed_format_target:: +compressed_format_target (ostream& os, compression_type t) + : os_ (os), closed_ (false), n_ (0) + { + zs_.zalloc = Z_NULL; + zs_.zfree = Z_NULL; + zs_.opaque = Z_NULL; + + int window = 0; + + switch (t) + { + case raw: + { + window = -15; + break; + } + case zlib: + { + window = 15; + break; + } + case gzip: + { + window = 16 + 15; + break; + } + } + + int r (deflateInit2 (&zs_, + Z_DEFAULT_COMPRESSION, + Z_DEFLATED, + window, + 8, + Z_DEFAULT_STRATEGY)); + if (r != Z_OK) + throw compression_failure (r); + } + +compressed_format_target:: +~compressed_format_target () +{ + try + { + // Close the free the compression stream. + // + if (!closed_) + close (); + } + catch (...) + { + } + + deflateEnd (&zs_); +} + +void compressed_format_target:: +writeChars (const XMLByte* const buf, +#if _XERCES_VERSION >= 30000 + const XMLSize_t size, +#else + const unsigned int size, +#endif + xercesc::XMLFormatter* const) +{ + // Flush the buffer if the block is too large or if we don't have + // any space left. + // + if ((size >= buf_size_ / 8 || n_ + size > buf_size_) && n_ != 0) + { + write (in_, n_); + n_ = 0; + } + + if (size < buf_size_ / 8) + { + memcpy (in_ + n_, reinterpret_cast<const char*> (buf), size); + n_ += size; + } + else + write (reinterpret_cast<const char*> (buf), size); +} + + +void compressed_format_target:: +flush () +{ + if (n_ != 0) + { + write (in_, n_); + n_ = 0; + } + + if (!os_.fail ()) + os_.flush (); +} + +void compressed_format_target:: +close () +{ + write (in_, n_, true); + n_ = 0; + + if (!os_.fail ()) + os_.flush (); + + closed_ = true; +} + +void compressed_format_target:: +write (const char* buf, size_t size, bool flush) +{ + zs_.next_in = reinterpret_cast<Bytef*> (const_cast<char*> (buf)); + zs_.avail_in = static_cast<uInt> (size); + + do + { + zs_.next_out = reinterpret_cast<Bytef*> (out_); + zs_.avail_out = buf_size_; + + int r (deflate (&zs_, flush ? Z_FINISH : Z_NO_FLUSH)); + + if (r != Z_OK && r != Z_BUF_ERROR && r != Z_STREAM_END) + throw compression_failure (r); + + size_t n (buf_size_ - zs_.avail_out); + + if (!os_.fail () && n > 0) + os_.write (out_, static_cast<streamsize> (n)); + + } while (zs_.avail_out == 0); +} diff --git a/xsd/examples/cxx/tree/compression/compressed-format-target.hxx b/xsd/examples/cxx/tree/compression/compressed-format-target.hxx new file mode 100644 index 0000000..5d12e81 --- /dev/null +++ b/xsd/examples/cxx/tree/compression/compressed-format-target.hxx @@ -0,0 +1,96 @@ +// file : examples/cxx/tree/compression/compressed-format-target.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : not copyrighted - public domain + +#ifndef COMPRESSED_FORMAT_TARGET_HXX +#define COMPRESSED_FORMAT_TARGET_HXX + +#include <zlib.h> + +#include <iosfwd> +#include <cstddef> // std::size_t +#include <exception> + +#include <xercesc/framework/XMLFormatter.hpp> + +struct compression_failure: std::exception +{ + explicit + compression_failure (int code) + : code_ (code) + { + } + + int + code () const + { + return code_; + } + + const char* + message () const + { + return zError (code_); + } + + virtual const char* + what () const throw (); + +private: + int code_; +}; + +// Xerces-C++ XMLFormatTarget interface implementation with on-the-fly, +// zlib-based compression. +// +class compressed_format_target: public xercesc::XMLFormatTarget +{ +public: + enum compression_type + { + raw, + zlib, + gzip + }; + + compressed_format_target (std::ostream&, compression_type); + + virtual + ~compressed_format_target (); + + virtual void + writeChars (const XMLByte* const buf, +#if _XERCES_VERSION >= 30000 + const XMLSize_t size, +#else + const unsigned int size, +#endif + xercesc::XMLFormatter* const); + + virtual void + flush (); + + // Close the compressed stream by writing out the zlib or gzip trailer. + // This function is automatically called from the destructor but you + // may want to call it explicitly to be able to catch any exceptions + // that it might throw. + // + void + close (); + +private: + void + write (const char* buf, std::size_t size, bool flush = false); + +private: + std::ostream& os_; + z_stream zs_; + bool closed_; + + static const std::size_t buf_size_ = 65536; + char in_[buf_size_]; + char out_[buf_size_]; + size_t n_; +}; + +#endif // COMPRESSED_FORMAT_TARGET_HXX diff --git a/xsd/examples/cxx/tree/compression/compressed-input-source.cxx b/xsd/examples/cxx/tree/compression/compressed-input-source.cxx new file mode 100644 index 0000000..22d09ff --- /dev/null +++ b/xsd/examples/cxx/tree/compression/compressed-input-source.cxx @@ -0,0 +1,215 @@ +// file : examples/cxx/tree/compression/compressed-input-source.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : not copyrighted - public domain + +#include <istream> + +#include <xsd/cxx/xml/string.hxx> + +#include "compressed-input-source.hxx" + +using namespace std; +using namespace xercesc; +namespace xml = xsd::cxx::xml; + +// +// decompression_failure +// + +const char* decompression_failure:: +what () const throw () +{ + return "decompression failure"; +} + +// +// compressed_input_source +// + +compressed_input_source:: +compressed_input_source (istream& is, compression_type t) + : is_ (&is), type_ (t) +{ +} + +compressed_input_source:: +compressed_input_source (istream& is, + compression_type t, + const string& sysid) + : InputSource (xml::string (sysid).c_str ()), is_ (&is), type_ (t) +{ +} + +compressed_input_source:: +compressed_input_source (istream& is, + compression_type t, + const string& sysid, + const string& pubid) + : xercesc::InputSource (xml::string (sysid).c_str (), + xml::string (pubid).c_str ()), + is_ (&is), + type_ (t) +{ +} + +BinInputStream* compressed_input_source:: +makeStream () const +{ + if (is_ == 0) + throw copy (); + + istream& is (*is_); + is_ = 0; + return new compressed_input_stream ( + is, static_cast<compressed_input_stream::compression_type> (type_)); +} + +// +// compressed_input_stream +// + +compressed_input_stream:: +compressed_input_stream (istream& is, compression_type t) + : is_ (is), end_ (false), pos_ (0) +{ + zs_.zalloc = Z_NULL; + zs_.zfree = Z_NULL; + zs_.opaque = Z_NULL; + zs_.next_in = Z_NULL; + zs_.avail_in = 0; + + int window = 0; + + switch (t) + { + case raw: + { + window = -15; + break; + } + case zlib: + { + window = 15; + break; + } + case gzip: + { + window = 16 + 15; + break; + } + } + + int r (inflateInit2 (&zs_, window)); + + if (r != Z_OK) + throw decompression_failure (r); +} + +compressed_input_stream:: +~compressed_input_stream () +{ + inflateEnd (&zs_); +} + +#if _XERCES_VERSION >= 30000 +XMLFilePos compressed_input_stream:: +curPos () const +{ + return static_cast<XMLFilePos> (pos_); +} +#else +unsigned int compressed_input_stream:: +curPos () const +{ + return static_cast<unsigned int> (pos_); +} +#endif + +#if _XERCES_VERSION >= 30000 +XMLSize_t compressed_input_stream:: +readBytes (XMLByte* const buf, const XMLSize_t size) +#else +unsigned int compressed_input_stream:: +readBytes (XMLByte* const buf, const unsigned int size) +#endif +{ + if (end_) + return 0; + + // Keep calling inflate() until we fill up the buffer or reach the + // end of stream. If we run out of input data, call the underlying + // stream for more. + // + zs_.next_out = reinterpret_cast<Bytef*> (buf); + zs_.avail_out = static_cast<uInt> (size); + + int r; + + do + { + if (zs_.avail_in == 0) + { + zs_.avail_in = static_cast<uInt> (read ()); + zs_.next_in = reinterpret_cast<Bytef*> (const_cast<char*> (in_)); + + if (zs_.avail_in == 0) + throw decompression_failure (Z_DATA_ERROR); + } + + r = inflate (&zs_, Z_NO_FLUSH); + + if (r != Z_OK && r != Z_STREAM_END) + throw decompression_failure (r); + + } while (r != Z_STREAM_END && zs_.avail_out != 0); + + if (r == Z_STREAM_END) + end_ = true; + + size_t n (size - zs_.avail_out); + pos_ += n; + +#if _XERCES_VERSION >= 30000 + return static_cast<XMLSize_t> (n); +#else + return static_cast<unsigned int> (n); +#endif +} + +#if _XERCES_VERSION >= 30000 +const XMLCh* compressed_input_stream:: +getContentType () const +{ + return 0; +} +#endif + +size_t compressed_input_stream:: +read () +{ + // Some implementations don't clear gcount if you call read() on a + // stream that is in the eof state. + // + if (is_.eof ()) + return 0; + + // Unset the exception failbit while we are working with the stream. + // + ios_base::iostate old (is_.exceptions ()); + is_.exceptions (old & ~ios_base::failbit); + + is_.read (in_, static_cast<streamsize> (buf_size_)); + + // Clear the fail bit if it was caused by eof and restore the original + // exception state. If there are any pending errors then the exception + // will be thrown now. + // + if (is_.fail () && is_.eof ()) + is_.clear (is_.rdstate () & ~ios_base::failbit); + + is_.exceptions (old); + + // Make sure that if we failed, we won't be called again. + // + return !is_.fail () ? static_cast<size_t> (is_.gcount ()) : 0; +} diff --git a/xsd/examples/cxx/tree/compression/compressed-input-source.hxx b/xsd/examples/cxx/tree/compression/compressed-input-source.hxx new file mode 100644 index 0000000..680d39f --- /dev/null +++ b/xsd/examples/cxx/tree/compression/compressed-input-source.hxx @@ -0,0 +1,132 @@ +// file : examples/cxx/tree/compression/compressed-input-source.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : not copyrighted - public domain + +#ifndef COMPRESSED_INPUT_SOURCE_HXX +#define COMPRESSED_INPUT_SOURCE_HXX + +#include <zlib.h> + +#include <iosfwd> +#include <string> +#include <cstddef> // std::size_t +#include <exception> + +#include <xercesc/sax/InputSource.hpp> +#include <xercesc/util/BinInputStream.hpp> + +struct decompression_failure: std::exception +{ + explicit + decompression_failure (int code) + : code_ (code) + { + } + + int + code () const + { + return code_; + } + + const char* + message () const + { + return zError (code_); + } + + virtual const char* + what () const throw (); + +private: + int code_; +}; + +// Xerces-C++ InputSource interface implementation with on-the-fly, zlib- +// based decompression. +// +class compressed_input_source: public xercesc::InputSource +{ +public: + enum compression_type + { + raw, + zlib, + gzip + }; + + compressed_input_source (std::istream&, compression_type); + + compressed_input_source (std::istream&, + compression_type, + const std::string& system_id); + + compressed_input_source (std::istream&, + compression_type, + const std::string& system_id, + const std::string& public_id); + + struct copy {}; + + // Throws the copy exception if this function is called more than once. + // + virtual xercesc::BinInputStream* + makeStream () const; + +private: + mutable std::istream* is_; + compression_type type_; +}; + +// Xerces-C++ BinInputStream interface implementation with on-the-fly, zlib- +// based decompression. +// +class compressed_input_stream: public xercesc::BinInputStream +{ +public: + enum compression_type + { + raw, + zlib, + gzip + }; + + compressed_input_stream (std::istream&, compression_type); + + virtual + ~compressed_input_stream (); + +#if _XERCES_VERSION >= 30000 + virtual XMLFilePos + curPos () const; + + virtual XMLSize_t + readBytes (XMLByte* const buf, const XMLSize_t size); + + virtual const XMLCh* + getContentType () const; + +#else + + virtual unsigned int + readBytes (XMLByte* const buf, const unsigned int size); + + virtual unsigned int + curPos () const; +#endif + +private: + std::size_t + read (); + +private: + std::istream& is_; + z_stream zs_; + bool end_; + + static const std::size_t buf_size_ = 65536; + char in_[buf_size_]; + std::size_t pos_; // Current decompressed stream position. +}; + +#endif // COMPRESSED_INPUT_SOURCE_HXX diff --git a/xsd/examples/cxx/tree/compression/driver.cxx b/xsd/examples/cxx/tree/compression/driver.cxx new file mode 100644 index 0000000..db285cf --- /dev/null +++ b/xsd/examples/cxx/tree/compression/driver.cxx @@ -0,0 +1,125 @@ +// file : examples/cxx/tree/compression/driver.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : not copyrighted - public domain + +#include <memory> // std::auto_ptr +#include <fstream> +#include <iostream> + +#include <xercesc/util/PlatformUtils.hpp> + +#include "library.hxx" + +#include "compressed-input-source.hxx" +#include "compressed-format-target.hxx" + +using namespace std; + +int +main (int argc, char* argv[]) +{ + if (argc != 2) + { + cerr << "usage: " << argv[0] << " library.xml" << endl; + return 1; + } + + int r (0); + + // We need to initialize the Xerces-C++ runtime because we are + // using the Xerces-C++ input/output interfaces. + // + xercesc::XMLPlatformUtils::Initialize (); + + try + { + using namespace library; + + // Read in the XML file and obtain its object model. + // + ifstream ifs; + ifs.exceptions (ifstream::badbit | ifstream::failbit); + ifs.open (argv[1], ifstream::in | ifstream::binary); + + compressed_input_source cis (ifs, compressed_input_source::gzip, argv[1]); + + std::auto_ptr<catalog> c ( + catalog_ (cis, xml_schema::flags::dont_initialize)); + + + // Let's print what we've got. + // + for (catalog::book_const_iterator bi (c->book ().begin ()); + bi != c->book ().end (); + ++bi) + { + cerr << endl + << "ID : " << bi->id () << endl + << "ISBN : " << bi->isbn () << endl + << "Title : " << bi->title () << endl + << "Genre : " << bi->genre () << endl; + + for (book::author_const_iterator ai (bi->author ().begin ()); + ai != bi->author ().end (); + ++ai) + { + cerr << "Author : " << ai->name () << endl; + cerr << " Born : " << ai->born () << endl; + + if (ai->died ()) + cerr << " Died : " << *ai->died () << endl; + + if (ai->recommends ()) + cerr << " Recommends : " << (*ai->recommends ())->title () << endl; + } + + cerr << "Available : " << std::boolalpha << bi->available () << endl; + } + + // Prepare namespace mapping and schema location information. + // + xml_schema::namespace_infomap map; + + map["lib"].name = "http://www.codesynthesis.com/library"; + map["lib"].schema = "library.xsd"; + + ofstream ofs; + ofs.exceptions (ofstream::badbit | ofstream::failbit | ofstream::eofbit); + ofs.open ("out.xml.gz", ofstream::out | ofstream::binary); + + compressed_format_target cft (ofs, compressed_format_target::gzip); + + // Write it out. + // + catalog_ (cft, *c, map, "UTF-8", xml_schema::flags::dont_initialize); + + // Write out the compression stream trailer. If we don't do this + // explicitly, it will be done automatically in the cft's destructor + // but then any exceptions that might be throws will be ignored. + // + cft.close(); + } + catch (const xml_schema::exception& e) + { + cerr << e << endl; + r = 1; + } + catch (const compression_failure& e) + { + cerr << "compression failure: " << e.message () << endl; + r = 1; + } + catch (const decompression_failure& e) + { + cerr << "decompression failure: " << e.message () << endl; + r = 1; + } + catch (const ios_base::failure&) + { + cerr << "file open or read/write failure" << endl; + r = 1; + } + + xercesc::XMLPlatformUtils::Terminate (); + return r; +} diff --git a/xsd/examples/cxx/tree/compression/library.xml.gz b/xsd/examples/cxx/tree/compression/library.xml.gz Binary files differnew file mode 100644 index 0000000..dd71159 --- /dev/null +++ b/xsd/examples/cxx/tree/compression/library.xml.gz diff --git a/xsd/examples/cxx/tree/compression/library.xsd b/xsd/examples/cxx/tree/compression/library.xsd new file mode 100644 index 0000000..0451b36 --- /dev/null +++ b/xsd/examples/cxx/tree/compression/library.xsd @@ -0,0 +1,73 @@ +<?xml version="1.0"?> + +<!-- + +file : examples/cxx/tree/compression/library.xsd +author : Boris Kolpackov <boris@codesynthesis.com> +copyright : not copyrighted - public domain + +--> + +<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns:xse="http://www.codesynthesis.com/xmlns/xml-schema-extension" + xmlns:lib="http://www.codesynthesis.com/library" + targetNamespace="http://www.codesynthesis.com/library"> + + <xsd:simpleType name="isbn"> + <xsd:restriction base="xsd:unsignedInt"/> + </xsd:simpleType> + + <xsd:complexType name="title"> + <xsd:simpleContent> + <xsd:extension base="xsd:string"> + <xsd:attribute name="lang" type="xsd:language"/> + </xsd:extension> + </xsd:simpleContent> + </xsd:complexType> + + <xsd:simpleType name="genre"> + <xsd:restriction base="xsd:string"> + <xsd:enumeration value="romance"/> + <xsd:enumeration value="fiction"/> + <xsd:enumeration value="horror"/> + <xsd:enumeration value="history"/> + <xsd:enumeration value="philosophy"/> + </xsd:restriction> + </xsd:simpleType> + + <xsd:complexType name="person"> + <xsd:sequence> + <xsd:element name="name" type="xsd:string"/> + <xsd:element name="born" type="xsd:date"/> + <xsd:element name="died" type="xsd:date" minOccurs="0"/> + </xsd:sequence> + </xsd:complexType> + + <xsd:complexType name="author"> + <xsd:complexContent> + <xsd:extension base="lib:person"> + <xsd:attribute name="recommends" type="xsd:IDREF" xse:refType="lib:book"/> + </xsd:extension> + </xsd:complexContent> + </xsd:complexType> + + <xsd:complexType name="book"> + <xsd:sequence> + <xsd:element name="isbn" type="lib:isbn"/> + <xsd:element name="title" type="lib:title"/> + <xsd:element name="genre" type="lib:genre"/> + <xsd:element name="author" type="lib:author" maxOccurs="unbounded"/> + </xsd:sequence> + <xsd:attribute name="available" type="xsd:boolean" default="true"/> + <xsd:attribute name="id" type="xsd:ID" use="required"/> + </xsd:complexType> + + <xsd:complexType name="catalog"> + <xsd:sequence> + <xsd:element name="book" type="lib:book" maxOccurs="unbounded"/> + </xsd:sequence> + </xsd:complexType> + + <xsd:element name="catalog" type="lib:catalog"/> + +</xsd:schema> diff --git a/xsd/examples/cxx/tree/compression/makefile b/xsd/examples/cxx/tree/compression/makefile new file mode 100644 index 0000000..30188c1 --- /dev/null +++ b/xsd/examples/cxx/tree/compression/makefile @@ -0,0 +1,117 @@ +# file : examples/cxx/tree/compression/makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../../build/bootstrap.make + +xsd := library.xsd +cxx := driver.cxx compressed-input-source.cxx compressed-format-target.cxx + +obj := $(addprefix $(out_base)/,$(cxx:.cxx=.o) $(xsd:.xsd=.o)) +dep := $(obj:.o=.o.d) + +driver := $(out_base)/driver +install := $(out_base)/.install +dist := $(out_base)/.dist +dist-win := $(out_base)/.dist-win +clean := $(out_base)/.clean + + +# Import. +# +$(call import,\ + $(scf_root)/import/libxerces-c/stub.make,\ + l: xerces_c.l,cpp-options: xerces_c.l.cpp-options) + +ifeq ($(filter $(MAKECMDGOALS),dist dist-win install),) +$(call import,\ + $(scf_root)/import/libz/stub.make,\ + l: z.l,cpp-options: z.l.cpp-options) +endif + +# Build. +# +$(driver): $(obj) $(xerces_c.l) $(z.l) + +$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): $(xerces_c.l.cpp-options) $(z.l.cpp-options) + +genf := $(xsd:.xsd=.hxx) $(xsd:.xsd=.ixx) $(xsd:.xsd=.cxx) +gen := $(addprefix $(out_base)/,$(genf)) + +$(gen): xsd := $(out_root)/xsd/xsd +$(gen): xsd_options := --generate-ostream --generate-serialization +$(gen): $(out_root)/xsd/xsd + +$(call include-dep,$(dep)) + +# Convenience alias for default target. +# +$(out_base)/: $(driver) + + +# Install & Dist. +# +dist-common := $(out_base)/.dist-common + +$(install) $(dist) $(dist-win) $(dist-common): path := $(subst $(src_root)/,,$(src_base)) + +$(install): + $(call install-data,$(src_base)/README,$(install_doc_dir)/xsd/$(path)/README) + $(call install-data,$(src_base)/driver.cxx,$(install_doc_dir)/xsd/$(path)/driver.cxx) + $(call install-data,$(src_base)/compressed-format-target.hxx,$(install_doc_dir)/xsd/$(path)/compressed-format-target.hxx) + $(call install-data,$(src_base)/compressed-format-target.cxx,$(install_doc_dir)/xsd/$(path)/compressed-format-target.cxx) + $(call install-data,$(src_base)/compressed-input-source.hxx,$(install_doc_dir)/xsd/$(path)/compressed-input-source.hxx) + $(call install-data,$(src_base)/compressed-input-source.cxx,$(install_doc_dir)/xsd/$(path)/compressed-input-source.cxx) + $(call install-data,$(src_base)/library.xsd,$(install_doc_dir)/xsd/$(path)/library.xsd) + $(call install-data,$(src_base)/library.xml.gz,$(install_doc_dir)/xsd/$(path)/library.xml.gz) + +$(dist-common): + $(call install-data,$(src_base)/driver.cxx,$(dist_prefix)/$(path)/driver.cxx) + $(call install-data,$(src_base)/compressed-format-target.hxx,$(dist_prefix)/$(path)/compressed-format-target.hxx) + $(call install-data,$(src_base)/compressed-format-target.cxx,$(dist_prefix)/$(path)/compressed-format-target.cxx) + $(call install-data,$(src_base)/compressed-input-source.hxx,$(dist_prefix)/$(path)/compressed-input-source.hxx) + $(call install-data,$(src_base)/compressed-input-source.cxx,$(dist_prefix)/$(path)/compressed-input-source.cxx) + $(call install-data,$(src_base)/library.xsd,$(dist_prefix)/$(path)/library.xsd) + $(call install-data,$(src_base)/library.xml.gz,$(dist_prefix)/$(path)/library.xml.gz) + +$(dist): $(dist-common) + $(call install-data,$(src_base)/README,$(dist_prefix)/$(path)/README) + +$(dist-win): $(dist-common) + $(call install-data,$(src_base)/README,$(dist_prefix)/$(path)/README.txt) + $(call message,,unix2dos $(dist_prefix)/$(path)/README.txt) + + +# Clean. +# +$(clean): $(driver).o.clean \ + $(addsuffix .cxx.clean,$(obj)) \ + $(addsuffix .cxx.clean,$(dep)) \ + $(addprefix $(out_base)/,$(xsd:.xsd=.cxx.xsd.clean)) + $(call message,rm $$1,rm -f $$1,$(out_base)/out.xml.gz) + +# Generated .gitignore. +# +ifeq ($(out_base),$(src_base)) +$(gen): | $(out_base)/.gitignore +$(driver): | $(out_base)/.gitignore + +$(out_base)/.gitignore: files := driver out.xml.gz $(genf) +$(clean): $(out_base)/.gitignore.clean + +$(call include,$(bld_root)/git/gitignore.make) +endif + +# How to. +# +$(call include,$(bld_root)/cxx/o-e.make) +$(call include,$(bld_root)/cxx/cxx-o.make) +$(call include,$(bld_root)/cxx/cxx-d.make) +$(call include,$(bld_root)/install.make) +$(call include,$(scf_root)/xsd/tree/xsd-cxx.make) + +# Dependencies. +# +$(call import,$(src_root)/xsd/makefile) diff --git a/xsd/examples/cxx/tree/custom/README b/xsd/examples/cxx/tree/custom/README new file mode 100644 index 0000000..b2a65b5 --- /dev/null +++ b/xsd/examples/cxx/tree/custom/README @@ -0,0 +1,40 @@ +This directory contains a number of examples that show how to customize the +C++/Tree mapping. The following list gives an overview of each example: + +calendar + Shows how to customize XML Schema built-in types by mapping xsd:date + built-in type to the date class from the Boost date_time library. + +comments + This example shows how to customize the anyType XML Schema built-in + type to implement preservation of comments stored in XML documents. + Because anyType is a base type for every generated type, you can use + this technique to implement custom functionality that spans the + entire type system. + +contacts + Shows how to map a user-defined XML Schema type to a custom C++ class. + This example presents the simple case where the customized type is not + used as a base in the same schema. + +double + Shows how to customize parsing and serialization code for the xsd:double + XML Schema built-in type. It can be used as a guide on how to customize + built-in XML Schema types that are mapped to fundamental C++ types. + +mixed + Shows how to use type customization to parse and serialize mixed content. + +taxonomy + Shows how to map user-defined XML Schema types to custom C++ classes. + This example presents the complex case where the customized types are + inherited from in the same schema. + +wildcard + Shows how to use type customization to parse and serialize a specific + attribute that is matched by a wildcard (anyAttribute). + +For more information on the C++/Tree mapping customization see the +C++/Tree Mapping Customization Guide[1]. + +[1] http://wiki.codesynthesis.com/Tree/Customization_guide diff --git a/xsd/examples/cxx/tree/custom/calendar/README b/xsd/examples/cxx/tree/custom/calendar/README new file mode 100644 index 0000000..f7f6989 --- /dev/null +++ b/xsd/examples/cxx/tree/custom/calendar/README @@ -0,0 +1,47 @@ +This example shows how to customize the XML Schema built-in types by mapping +xsd:date built-in type to the date class from the Boost date_time library. +You will need the Boost date_time library[1] installed in order to build +and run this example. For more information on the C++/Tree mapping +customization see the C++/Tree Mapping Customization Guide[2]. + +[1] http://www.boost.org +[2] http://wiki.codesynthesis.com/Tree/Customization_guide + +The example consists of the following files: + +calendar.xsd + XML Schema definition for a simple calendar format. + +calendar.xml + Sample XML instance document. + +xml-schema.hxx + C++ types for XML Schema built-in types. This header file is generated + by XSD using the --generate-xml-schema option. The --custom-type option + is also used to customize the xsd:date type. + +calendar.hxx +calendar.ixx +calendar.cxx + C++ types that represent the given vocabulary and a set of parsing + functions that convert XML instance documents to a tree-like in-memory + object model. These are generated by XSD from calendar.xsd with the + --extern-xml-schema option in order to include xml-schema.hxx. + +xml-schema-custom.hxx + Header file which defines our own xml_schema::date class. It is + included at the end of xml-schema.hxx using the --hxx-epilogue + option. + +xml-schema-custom.cxx + Source file which contains the implementation of our xml_schema:date + class. + +driver.cxx + Driver for the example. It first calls one of the parsing functions + that constructs the object model from the input file. It then prints + the calendar events to STDERR. + +To run the example on the sample XML instance document simply execute: + +$ ./driver calendar.xml diff --git a/xsd/examples/cxx/tree/custom/calendar/calendar.xml b/xsd/examples/cxx/tree/custom/calendar/calendar.xml new file mode 100644 index 0000000..ae9e570 --- /dev/null +++ b/xsd/examples/cxx/tree/custom/calendar/calendar.xml @@ -0,0 +1,23 @@ +<?xml version="1.0"?> + +<!-- + +file : examples/cxx/tree/custom/calendar/calendar.xml +author : Boris Kolpackov <boris@codesynthesis.com> +copyright : not copyrighted - public domain + +--> + +<cal:events xmlns:cal="http://www.codesynthesis.com/calendar" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.codesynthesis.com/calendar calendar.xsd"> + + <event title="Bike ride" date="2006-09-04"> + Don't forget to change the tire. + </event> + + <event title="Mountain hike" date="2006-09-05"> + Can be cancelled if it is too cold. + </event> + +</cal:events> diff --git a/xsd/examples/cxx/tree/custom/calendar/calendar.xsd b/xsd/examples/cxx/tree/custom/calendar/calendar.xsd new file mode 100644 index 0000000..fa612a7 --- /dev/null +++ b/xsd/examples/cxx/tree/custom/calendar/calendar.xsd @@ -0,0 +1,32 @@ +<?xml version="1.0"?> + +<!-- + +file : examples/cxx/tree/custom/calendar/calendar.xsd +author : Boris Kolpackov <boris@codesynthesis.com> +copyright : not copyrighted - public domain + +--> + +<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns:cal="http://www.codesynthesis.com/calendar" + targetNamespace="http://www.codesynthesis.com/calendar"> + + <xsd:complexType name="event"> + <xsd:simpleContent> + <xsd:extension base="xsd:string"> + <xsd:attribute name="title" type="xsd:string" use="required"/> + <xsd:attribute name="date" type="xsd:date" use="required"/> + </xsd:extension> + </xsd:simpleContent> + </xsd:complexType> + + <xsd:complexType name="events"> + <xsd:sequence> + <xsd:element name="event" type="cal:event" maxOccurs="unbounded"/> + </xsd:sequence> + </xsd:complexType> + + <xsd:element name="events" type="cal:events"/> + +</xsd:schema> diff --git a/xsd/examples/cxx/tree/custom/calendar/driver.cxx b/xsd/examples/cxx/tree/custom/calendar/driver.cxx new file mode 100644 index 0000000..02f1c27 --- /dev/null +++ b/xsd/examples/cxx/tree/custom/calendar/driver.cxx @@ -0,0 +1,40 @@ +// file : examples/cxx/tree/custom/calendar/driver.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : not copyrighted - public domain + +#include <memory> // std::auto_ptr +#include <iostream> + +#include "calendar.hxx" + +using std::cerr; +using std::endl; + +int +main (int argc, char* argv[]) +{ + if (argc != 2) + { + cerr << "usage: " << argv[0] << " calendar.xml" << endl; + return 1; + } + + try + { + using namespace calendar; + + std::auto_ptr<events> e (events_ (argv[1])); + + for (events::event_const_iterator i (e->event ().begin ()); + i != e->event ().end (); ++i) + { + cerr << i->date () << " " << i->title () << endl + << *i << endl; + } + } + catch (const xml_schema::exception& e) + { + cerr << e << endl; + return 1; + } +} diff --git a/xsd/examples/cxx/tree/custom/calendar/makefile b/xsd/examples/cxx/tree/custom/calendar/makefile new file mode 100644 index 0000000..f4f4598 --- /dev/null +++ b/xsd/examples/cxx/tree/custom/calendar/makefile @@ -0,0 +1,129 @@ +# file : examples/cxx/tree/custom/calendar/makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../../../build/bootstrap.make + +xsd := calendar.xsd +cxx := driver.cxx xml-schema-custom.cxx + +obj := $(addprefix $(out_base)/,$(cxx:.cxx=.o) $(xsd:.xsd=.o)) +dep := $(obj:.o=.o.d) + +driver := $(out_base)/driver +install := $(out_base)/.install +dist := $(out_base)/.dist +dist-win := $(out_base)/.dist-win +clean := $(out_base)/.clean + + +# Import. +# +$(call import,\ + $(scf_root)/import/libxerces-c/stub.make,\ + l: xerces_c.l,cpp-options: xerces_c.l.cpp-options) + +ifeq ($(filter $(MAKECMDGOALS),dist dist-win install),) +$(call import,\ + $(scf_root)/import/libboost/date-time/stub.make,\ + l: boost_date_time.l,cpp-options: boost_date_time.l.cpp-options) +endif + +# Build. +# +$(driver): $(obj) $(xerces_c.l) $(boost_date_time.l) + +$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): $(xerces_c.l.cpp-options) $(boost_date_time.l.cpp-options) + +# Header file for XML Schema namespace. +# +$(out_base)/xml-schema.hxx: $(out_root)/xsd/xsd + $(call message,xsd $(src_base)/xml-schema.xsd,\ +$(out_root)/xsd/xsd cxx-tree --output-dir $(out_base) --generate-xml-schema \ +--custom-type date \ +--hxx-epilogue '\#include "xml-schema-custom.hxx"' xml-schema.xsd) + +# +# +genf := $(xsd:.xsd=.hxx) $(xsd:.xsd=.ixx) $(xsd:.xsd=.cxx) +gen := $(addprefix $(out_base)/,$(genf)) + +$(gen): xsd := $(out_root)/xsd/xsd + +# We have to double-escape '#' because the message function +# (which is used in command scripts) expands things twice. +# +$(gen): xsd_options := \ +--generate-inline \ +--extern-xml-schema xml-schema.xsd + +$(gen): $(out_root)/xsd/xsd + +$(call include-dep,$(dep)) + +# Convenience alias for default target. +# +$(out_base)/: $(driver) + + +# Install & Dist. +# +dist-common := $(out_base)/.dist-common + +$(install) $(dist) $(dist-win) $(dist-common): path := $(subst $(src_root)/,,$(src_base)) + +$(install): + $(call install-data,$(src_base)/README,$(install_doc_dir)/xsd/$(path)/README) + $(call install-data,$(src_base)/driver.cxx,$(install_doc_dir)/xsd/$(path)/driver.cxx) + $(call install-data,$(src_base)/calendar.xsd,$(install_doc_dir)/xsd/$(path)/calendar.xsd) + $(call install-data,$(src_base)/calendar.xml,$(install_doc_dir)/xsd/$(path)/calendar.xml) + $(call install-data,$(src_base)/xml-schema-custom.hxx,$(install_doc_dir)/xsd/$(path)/xml-schema-custom.hxx) + $(call install-data,$(src_base)/xml-schema-custom.cxx,$(install_doc_dir)/xsd/$(path)/xml-schema-custom.cxx) + +$(dist-common): + $(call install-data,$(src_base)/driver.cxx,$(dist_prefix)/$(path)/driver.cxx) + $(call install-data,$(src_base)/calendar.xsd,$(dist_prefix)/$(path)/calendar.xsd) + $(call install-data,$(src_base)/calendar.xml,$(dist_prefix)/$(path)/calendar.xml) + $(call install-data,$(src_base)/xml-schema-custom.hxx,$(dist_prefix)/$(path)/xml-schema-custom.hxx) + $(call install-data,$(src_base)/xml-schema-custom.cxx,$(dist_prefix)/$(path)/xml-schema-custom.cxx) + +$(dist): $(dist-common) + $(call install-data,$(src_base)/README,$(dist_prefix)/$(path)/README) + +$(dist-win): $(dist-common) + $(call install-data,$(src_base)/README,$(dist_prefix)/$(path)/README.txt) + $(call message,,unix2dos $(dist_prefix)/$(path)/README.txt) + +# Clean. +# +$(clean): $(driver).o.clean \ + $(addsuffix .cxx.clean,$(obj)) \ + $(addsuffix .cxx.clean,$(dep)) \ + $(addprefix $(out_base)/,$(xsd:.xsd=.cxx.xsd.clean)) + $(call message,rm $$1,rm -f $$1,$(out_base)/xml-schema.hxx) + +# Generated .gitignore. +# +ifeq ($(out_base),$(src_base)) +$(gen): | $(out_base)/.gitignore +$(driver): | $(out_base)/.gitignore + +$(out_base)/.gitignore: files := driver xml-schema.hxx $(genf) +$(clean): $(out_base)/.gitignore.clean + +$(call include,$(bld_root)/git/gitignore.make) +endif + +# How to. +# +$(call include,$(bld_root)/cxx/o-e.make) +$(call include,$(bld_root)/cxx/cxx-o.make) +$(call include,$(bld_root)/cxx/cxx-d.make) +$(call include,$(bld_root)/install.make) +$(call include,$(scf_root)/xsd/tree/xsd-cxx.make) + +# Dependencies. +# +$(call import,$(src_root)/xsd/makefile) diff --git a/xsd/examples/cxx/tree/custom/calendar/xml-schema-custom.cxx b/xsd/examples/cxx/tree/custom/calendar/xml-schema-custom.cxx new file mode 100644 index 0000000..440a407 --- /dev/null +++ b/xsd/examples/cxx/tree/custom/calendar/xml-schema-custom.cxx @@ -0,0 +1,57 @@ +// file : examples/cxx/tree/custom/calendar/xml-schema-custom.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : not copyrighted - public domain + +// Include xml-schema.hxx instead of xml-schema-custom.hxx here. +// +#include "xml-schema.hxx" + +#include <xsd/cxx/xml/string.hxx> // xsd::cxx::xml::transcode +#include <xsd/cxx/tree/text.hxx> // xsd::cxx::tree::text_content + +using namespace boost; +using namespace boost::gregorian; + +namespace xml_schema +{ + date:: + date (const xercesc::DOMElement& e, flags f, container* c) + : simple_type (e, f, c), + gregorian::date ( + from_simple_string ( + xsd::cxx::tree::text_content<char> (e))) + { + } + + date:: + date (const xercesc::DOMAttr& a, flags f, container* c) + : simple_type (a, f, c), + gregorian::date ( + from_simple_string ( + xsd::cxx::xml::transcode<char> (a.getValue ()))) + { + } + + date:: + date (const std::string& s, + const xercesc::DOMElement* e, + flags f, + container* c) + : simple_type (s, e, f, c), + gregorian::date (from_simple_string (s)) + { + } + + date:: + date (const date& d, flags f, container* c) + : simple_type (d, f, c), + gregorian::date (d) + { + } + + date* date:: + _clone (flags f, container* c) const + { + return new date (*this, f, c); + } +} diff --git a/xsd/examples/cxx/tree/custom/calendar/xml-schema-custom.hxx b/xsd/examples/cxx/tree/custom/calendar/xml-schema-custom.hxx new file mode 100644 index 0000000..2bab0b5 --- /dev/null +++ b/xsd/examples/cxx/tree/custom/calendar/xml-schema-custom.hxx @@ -0,0 +1,34 @@ +// file : examples/cxx/tree/custom/calendar/xml-schema-custom.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : not copyrighted - public domain + +// Do not include this file directly, use xml-schema.hxx instead. This +// file is included into generated xml-schema.hxx so we do not need to +// guard against multiple inclusions. +// + +#include <boost/date_time/gregorian/gregorian.hpp> // boost::gregorian::date + +namespace xml_schema +{ + class date: public simple_type, + public boost::gregorian::date + { + public: + // Parsing c-tors: element, attribute, and list item. + // + date (const xercesc::DOMElement&, flags = 0, container* = 0); + date (const xercesc::DOMAttr&, flags = 0, container* = 0); + date (const std::string&, + const xercesc::DOMElement*, + flags = 0, + container* = 0); + + // Copy c-tor and _clone. + // + date (const date&, flags = 0, container* = 0); + + virtual date* + _clone (flags = 0, container* = 0) const; + }; +} diff --git a/xsd/examples/cxx/tree/custom/comments/README b/xsd/examples/cxx/tree/custom/comments/README new file mode 100644 index 0000000..8fd69d0 --- /dev/null +++ b/xsd/examples/cxx/tree/custom/comments/README @@ -0,0 +1,57 @@ +This example shows how to customize the anyType XML Schema built-in +type to implement preservation of comments stored in XML documents. +Because anyType is a base type for every generated type, you can use +this technique to implement custom functionality that spans the +entire type system. For more information on the C++/Tree mapping +customization see the C++/Tree Mapping Customization Guide[2]. + +[2] http://wiki.codesynthesis.com/Tree/Customization_guide + +The example consists of the following files: + +people.xsd + XML Schema definition for a simple person record vocabulary. + +people.xml + Sample XML instance document. + +xml-schema.hxx + C++ types for XML Schema built-in types. This header file is generated + by XSD using the --generate-xml-schema option. The --custom-type option + is also used to customize the xsd:anyType type. + +people.hxx +people.ixx +people.cxx + C++ types that represent the person record vocabulary, a set of + parsing functions that convert XML instance documents to a tree-like + in-memory object model, and a set of serialization functions that + convert the object model back to XML. These are generated by XSD + from people.xsd with the --extern-xml-schema option in order to + include xml-schema.hxx. + +xml-schema-custom.hxx + Header file which defines our own xml_schema::type class. It is + included at the end of xml-schema.hxx using the --hxx-epilogue + option. + +xml-schema-custom.cxx + Source file which contains the implementation of our xml_schema:type + class. + +dom-parse.hxx +dom-parse.cxx + Definition and implementation of the parse() function that + parses an XML document to a DOM document while preserving + XML comments. + +driver.cxx + Driver for the example. It first calls the above parse() function + to parse the input file to a DOM document. It then parses the DOM + document to the object model and performs a number of modifications + on this object model. Finally, it serializes the modified object + model back to XML, including XML comments. + +To run the example on the sample XML instance document simply execute: + +$ ./driver people.xml diff --git a/xsd/examples/cxx/tree/custom/comments/dom-parse.cxx b/xsd/examples/cxx/tree/custom/comments/dom-parse.cxx new file mode 100644 index 0000000..1ba62e5 --- /dev/null +++ b/xsd/examples/cxx/tree/custom/comments/dom-parse.cxx @@ -0,0 +1,125 @@ +// file : examples/cxx/tree/custom/comments/dom-parse.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : not copyrighted - public domain + +#include "dom-parse.hxx" + +#include <istream> + +#include <xercesc/dom/DOM.hpp> +#include <xercesc/util/XMLUniDefs.hpp> // chLatin_* +#include <xercesc/framework/Wrapper4InputSource.hpp> + +#include <xsd/cxx/xml/sax/std-input-source.hxx> +#include <xsd/cxx/xml/dom/bits/error-handler-proxy.hxx> + +#include <xsd/cxx/tree/exceptions.hxx> +#include <xsd/cxx/tree/error-handler.hxx> + +using namespace xercesc; +namespace xml = xsd::cxx::xml; +namespace tree = xsd::cxx::tree; + +xml::dom::auto_ptr<DOMDocument> +parse (std::istream& is, const std::string& id, bool validate) +{ + const XMLCh ls_id [] = {chLatin_L, chLatin_S, chNull}; + + // Get an implementation of the Load-Store (LS) interface. + // + DOMImplementation* impl ( + DOMImplementationRegistry::getDOMImplementation (ls_id)); + +#if _XERCES_VERSION >= 30000 + + // Xerces-C++ 3.0.0 and later. + // + xml::dom::auto_ptr<DOMLSParser> parser ( + impl->createLSParser (DOMImplementationLS::MODE_SYNCHRONOUS, 0)); + + DOMConfiguration* conf (parser->getDomConfig ()); + + // Discard comment nodes in the document. + // + conf->setParameter (XMLUni::fgDOMComments, false); + + // Enable datatype normalization. + // + conf->setParameter (XMLUni::fgDOMDatatypeNormalization, true); + + // Do not create EntityReference nodes in the DOM tree. No + // EntityReference nodes will be created, only the nodes + // corresponding to their fully expanded substitution text + // will be created. + // + conf->setParameter (XMLUni::fgDOMEntities, false); + + // Perform namespace processing. + // + conf->setParameter (XMLUni::fgDOMNamespaces, true); + + // Do not include ignorable whitespace in the DOM tree. + // + conf->setParameter (XMLUni::fgDOMElementContentWhitespace, false); + + // Enable/Disable validation. + // + conf->setParameter (XMLUni::fgDOMValidate, validate); + conf->setParameter (XMLUni::fgXercesSchema, validate); + conf->setParameter (XMLUni::fgXercesSchemaFullChecking, false); + + // Xerces-C++ 3.1.0 is the first version with working multi import + // support. + // +#if _XERCES_VERSION >= 30100 + conf->setParameter (XMLUni::fgXercesHandleMultipleImports, true); +#endif + + // We will release the DOM document ourselves. + // + conf->setParameter (XMLUni::fgXercesUserAdoptsDOMDocument, true); + + // Set error handler. + // + tree::error_handler<char> eh; + xml::dom::bits::error_handler_proxy<char> ehp (eh); + conf->setParameter (XMLUni::fgDOMErrorHandler, &ehp); + +#else // _XERCES_VERSION >= 30000 + + // Same as above but for Xerces-C++ 2 series. + // + xml::dom::auto_ptr<DOMBuilder> parser ( + impl->createDOMBuilder (DOMImplementationLS::MODE_SYNCHRONOUS, 0)); + + parser->setFeature (XMLUni::fgDOMComments, false); + parser->setFeature (XMLUni::fgDOMDatatypeNormalization, true); + parser->setFeature (XMLUni::fgDOMEntities, false); + parser->setFeature (XMLUni::fgDOMNamespaces, true); + parser->setFeature (XMLUni::fgDOMWhitespaceInElementContent, false); + parser->setFeature (XMLUni::fgDOMValidation, validate); + parser->setFeature (XMLUni::fgXercesSchema, validate); + parser->setFeature (XMLUni::fgXercesSchemaFullChecking, false); + parser->setFeature (XMLUni::fgXercesUserAdoptsDOMDocument, true); + + tree::error_handler<char> eh; + xml::dom::bits::error_handler_proxy<char> ehp (eh); + parser->setErrorHandler (&ehp); + +#endif // _XERCES_VERSION >= 30000 + + // Prepare input stream. + // + xml::sax::std_input_source isrc (is, id); + Wrapper4InputSource wrap (&isrc, false); + +#if _XERCES_VERSION >= 30000 + xml::dom::auto_ptr<DOMDocument> doc (parser->parse (&wrap)); +#else + xml::dom::auto_ptr<DOMDocument> doc (parser->parse (wrap)); +#endif + + eh.throw_if_failed<tree::parsing<char> > (); + + return doc; +} diff --git a/xsd/examples/cxx/tree/custom/comments/dom-parse.hxx b/xsd/examples/cxx/tree/custom/comments/dom-parse.hxx new file mode 100644 index 0000000..05bfa2e --- /dev/null +++ b/xsd/examples/cxx/tree/custom/comments/dom-parse.hxx @@ -0,0 +1,23 @@ +// file : examples/cxx/tree/custom/comments/dom-parse.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : not copyrighted - public domain + +#ifndef DOM_PARSE +#define DOM_PARSE + +#include <string> +#include <iosfwd> + +#include <xercesc/dom/DOMDocument.hpp> +#include <xsd/cxx/xml/dom/auto-ptr.hxx> + +// Parse an XML document from the standard input stream with an +// optional resource id. Resource id is used in diagnostics as +// well as to locate schemas referenced from inside the document. +// +xsd::cxx::xml::dom::auto_ptr<xercesc::DOMDocument> +parse (std::istream& is, + const std::string& id, + bool validate); + +#endif // DOM_PARSE diff --git a/xsd/examples/cxx/tree/custom/comments/driver.cxx b/xsd/examples/cxx/tree/custom/comments/driver.cxx new file mode 100644 index 0000000..4ce2573 --- /dev/null +++ b/xsd/examples/cxx/tree/custom/comments/driver.cxx @@ -0,0 +1,91 @@ +// file : examples/cxx/tree/custom/commens/driver.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : not copyrighted - public domain + +#include <memory> // std::auto_ptr +#include <fstream> +#include <iostream> + +#include <xercesc/dom/DOMDocument.hpp> +#include <xercesc/util/PlatformUtils.hpp> + +#include "people.hxx" +#include "dom-parse.hxx" + +using namespace std; + +int +main (int argc, char* argv[]) +{ + if (argc != 2) + { + cerr << "usage: " << argv[0] << " people.xml" << endl; + return 1; + } + + int r (0); + + // We need to initialize the Xerces-C++ runtime because we + // are doing the XML-to-DOM parsing ourselves (see below). + // + xercesc::XMLPlatformUtils::Initialize (); + + try + { + using namespace people; + namespace xml = xsd::cxx::xml; + + ifstream ifs; + ifs.exceptions (ifstream::badbit | ifstream::failbit); + ifs.open (argv[1]); + + // For performance reasons the internal XML to DOM parsing code + // discards comments in the resulting DOM document. To overcome + // this we are going to use our own parse() function from + // dom-parse.hxx that preserves comments in the resulting DOM + // documents. + // + xml_schema::dom::auto_ptr<xercesc::DOMDocument> doc ( + parse (ifs, argv[1], true)); + + // Parse the DOM document to the object model. + // + std::auto_ptr<catalog> c (catalog_ (*doc)); + + // Change the object model. + // + catalog::person_sequence& ps (c->person ()); + + for (catalog::person_iterator i (ps.begin ()); i != ps.end (); ++i) + { + i->age (i->age () + 1); + } + + person john ("John Doe", 30); + john.comment ("Record for John Doe"); + + ps.push_back (john); + + // Serialize. + // + xml_schema::namespace_infomap map; + + map["ppl"].name = "http://www.codesynthesis.com/people"; + map["ppl"].schema = "people.xsd"; + + catalog_ (std::cout, *c, map); + } + catch (const xml_schema::exception& e) + { + cerr << e << endl; + r = 1; + } + catch (const std::ios_base::failure&) + { + cerr << argv[1] << ": unable to open or read failure" << endl; + r = 1; + } + + xercesc::XMLPlatformUtils::Terminate (); + return r; +} diff --git a/xsd/examples/cxx/tree/custom/comments/makefile b/xsd/examples/cxx/tree/custom/comments/makefile new file mode 100644 index 0000000..de265a1 --- /dev/null +++ b/xsd/examples/cxx/tree/custom/comments/makefile @@ -0,0 +1,125 @@ +# file : examples/cxx/tree/custom/comments/makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../../../build/bootstrap.make + +xsd := people.xsd +cxx := driver.cxx xml-schema-custom.cxx dom-parse.cxx + +obj := $(addprefix $(out_base)/,$(cxx:.cxx=.o) $(xsd:.xsd=.o)) +dep := $(obj:.o=.o.d) + +driver := $(out_base)/driver +install := $(out_base)/.install +dist := $(out_base)/.dist +dist-win := $(out_base)/.dist-win +clean := $(out_base)/.clean + + +# Import. +# +$(call import,\ + $(scf_root)/import/libxerces-c/stub.make,\ + l: xerces_c.l,cpp-options: xerces_c.l.cpp-options) + +# Build. +# +$(driver): $(obj) $(xerces_c.l) + +$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): $(xerces_c.l.cpp-options) + +# Header file for XML Schema namespace. +# +$(out_base)/xml-schema.hxx: $(out_root)/xsd/xsd + $(call message,xsd $(src_base)/xml-schema.xsd,\ +$(out_root)/xsd/xsd cxx-tree --output-dir $(out_base) --generate-xml-schema \ +--generate-serialization --custom-type anyType=/type_base \ +--hxx-epilogue '\#include "xml-schema-custom.hxx"' xml-schema.xsd) + +# +# +genf := $(xsd:.xsd=.hxx) $(xsd:.xsd=.ixx) $(xsd:.xsd=.cxx) +gen := $(addprefix $(out_base)/,$(genf)) + +$(gen): xsd := $(out_root)/xsd/xsd + +$(gen): xsd_options := \ +--generate-inline \ +--generate-serialization \ +--extern-xml-schema xml-schema.xsd + +$(gen): $(out_root)/xsd/xsd + +$(call include-dep,$(dep)) + +# Convenience alias for default target. +# +$(out_base)/: $(driver) + + +# Install & Dist. +# +dist-common := $(out_base)/.dist-common + +$(install) $(dist) $(dist-win) $(dist-common): path := $(subst $(src_root)/,,$(src_base)) + +$(install): + $(call install-data,$(src_base)/README,$(install_doc_dir)/xsd/$(path)/README) + $(call install-data,$(src_base)/driver.cxx,$(install_doc_dir)/xsd/$(path)/driver.cxx) + $(call install-data,$(src_base)/people.xsd,$(install_doc_dir)/xsd/$(path)/people.xsd) + $(call install-data,$(src_base)/people.xml,$(install_doc_dir)/xsd/$(path)/people.xml) + $(call install-data,$(src_base)/xml-schema-custom.hxx,$(install_doc_dir)/xsd/$(path)/xml-schema-custom.hxx) + $(call install-data,$(src_base)/xml-schema-custom.cxx,$(install_doc_dir)/xsd/$(path)/xml-schema-custom.cxx) + $(call install-data,$(src_base)/dom-parse.hxx,$(install_doc_dir)/xsd/$(path)/dom-parse.hxx) + $(call install-data,$(src_base)/dom-parse.cxx,$(install_doc_dir)/xsd/$(path)/dom-parse.cxx) + +$(dist-common): + $(call install-data,$(src_base)/driver.cxx,$(dist_prefix)/$(path)/driver.cxx) + $(call install-data,$(src_base)/people.xsd,$(dist_prefix)/$(path)/people.xsd) + $(call install-data,$(src_base)/people.xml,$(dist_prefix)/$(path)/people.xml) + $(call install-data,$(src_base)/xml-schema-custom.hxx,$(dist_prefix)/$(path)/xml-schema-custom.hxx) + $(call install-data,$(src_base)/xml-schema-custom.cxx,$(dist_prefix)/$(path)/xml-schema-custom.cxx) + $(call install-data,$(src_base)/dom-parse.hxx,$(dist_prefix)/$(path)/dom-parse.hxx) + $(call install-data,$(src_base)/dom-parse.cxx,$(dist_prefix)/$(path)/dom-parse.cxx) + +$(dist): $(dist-common) + $(call install-data,$(src_base)/README,$(dist_prefix)/$(path)/README) + +$(dist-win): $(dist-common) + $(call install-data,$(src_base)/README,$(dist_prefix)/$(path)/README.txt) + $(call message,,unix2dos $(dist_prefix)/$(path)/README.txt) + +# Clean. +# +$(clean): $(driver).o.clean \ + $(addsuffix .cxx.clean,$(obj)) \ + $(addsuffix .cxx.clean,$(dep)) \ + $(addprefix $(out_base)/,$(xsd:.xsd=.cxx.xsd.clean)) + $(call message,rm $$1,rm -f $$1,$(out_base)/xml-schema.hxx) + +# Generated .gitignore. +# +ifeq ($(out_base),$(src_base)) +$(gen): | $(out_base)/.gitignore +$(driver): | $(out_base)/.gitignore + +$(out_base)/.gitignore: files := driver xml-schema.hxx $(genf) +$(clean): $(out_base)/.gitignore.clean + +$(call include,$(bld_root)/git/gitignore.make) +endif + +# How to. +# +$(call include,$(bld_root)/cxx/o-e.make) +$(call include,$(bld_root)/cxx/cxx-o.make) +$(call include,$(bld_root)/cxx/cxx-d.make) +$(call include,$(bld_root)/install.make) +$(call include,$(scf_root)/xsd/tree/xsd-cxx.make) + +# Dependencies. +# +$(call import,$(src_root)/xsd/makefile) diff --git a/xsd/examples/cxx/tree/custom/comments/people.xml b/xsd/examples/cxx/tree/custom/comments/people.xml new file mode 100644 index 0000000..b6a44e5 --- /dev/null +++ b/xsd/examples/cxx/tree/custom/comments/people.xml @@ -0,0 +1,21 @@ +<?xml version="1.0"?> + +<!-- + +file : examples/cxx/tree/custom/comments/people.xml +author : Boris Kolpackov <boris@codesynthesis.com> +copyright : not copyrighted - public domain + +--> + +<ppl:catalog xmlns:ppl="http://www.codesynthesis.com/people" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.codesynthesis.com/people people.xsd"> + + <person> + <!--Record for Joe Dirt--> + <name>Joe Dirt</name> + <age>28</age> + </person> + +</ppl:catalog> diff --git a/xsd/examples/cxx/tree/custom/comments/people.xsd b/xsd/examples/cxx/tree/custom/comments/people.xsd new file mode 100644 index 0000000..2f40754 --- /dev/null +++ b/xsd/examples/cxx/tree/custom/comments/people.xsd @@ -0,0 +1,30 @@ +<?xml version="1.0"?> + +<!-- + +file : examples/cxx/tree/custom/comments/people.xsd +author : Boris Kolpackov <boris@codesynthesis.com> +copyright : not copyrighted - public domain + +--> + +<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns:ppl="http://www.codesynthesis.com/people" + targetNamespace="http://www.codesynthesis.com/people"> + + <xsd:complexType name="person"> + <xsd:sequence> + <xsd:element name="name" type="xsd:string"/> + <xsd:element name="age" type="xsd:unsignedShort"/> + </xsd:sequence> + </xsd:complexType> + + <xsd:complexType name="catalog"> + <xsd:sequence> + <xsd:element name="person" type="ppl:person" maxOccurs="unbounded"/> + </xsd:sequence> + </xsd:complexType> + + <xsd:element name="catalog" type="ppl:catalog"/> + +</xsd:schema> diff --git a/xsd/examples/cxx/tree/custom/comments/xml-schema-custom.cxx b/xsd/examples/cxx/tree/custom/comments/xml-schema-custom.cxx new file mode 100644 index 0000000..d86d6af --- /dev/null +++ b/xsd/examples/cxx/tree/custom/comments/xml-schema-custom.cxx @@ -0,0 +1,118 @@ +// file : examples/cxx/tree/custom/comments/xml-schema-custom.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : not copyrighted - public domain + +// Include xml-schema.hxx instead of xml-schema-custom.hxx here. +// +#include "xml-schema.hxx" + +#include <xercesc/dom/DOMComment.hpp> +#include <xercesc/dom/DOMDocument.hpp> + +#include <xsd/cxx/xml/string.hxx> // xml::transcode, xml::string + +namespace xml = xsd::cxx::xml; + +namespace xml_schema +{ + type:: + type () + : type_base () + { + } + + type:: + type (const xercesc::DOMElement& e, flags f, container* c) + : type_base (e, f, c) + { + using namespace xercesc; + + // Here we are only handling a comment that is the first + // node in the element's content. + // + const DOMNode* n (e.getFirstChild ()); + + if (n != 0 && n->getNodeType () == DOMNode::COMMENT_NODE) + { + const DOMComment* c (static_cast<const DOMComment*> (n)); + comment_ = xml::transcode<char> (c->getData ()); + } + } + + type:: + type (const xercesc::DOMAttr& a, flags f, container* c) + : type_base (a, f, c) + { + // No comments for attributes. + // + } + + type:: + type (const std::string& s, const xercesc::DOMElement* e, + flags f, container* c) + : type_base (s, e, f, c) + { + // No comments for list items. + // + } + + type:: + type (const type& x, flags f, container* c) + : type_base (x, f, c), comment_ (x.comment_) + { + } + + type* type:: + _clone (flags f, container* c) const + { + return new type (*this, f, c); + } + + // Serialization operators. + // + void + operator<< (xercesc::DOMElement& e, const type& x) + { + // Call our base first. + // + const type_base& b (x); + e << b; + + // Add the comment if any. + // + const std::string s (x.comment ()); + + if (!s.empty ()) + { + using namespace xercesc; + + DOMDocument* doc (e.getOwnerDocument ()); + DOMComment* c (doc->createComment (xml::string (s).c_str ())); + e.appendChild (c); + } + } + + void + operator<< (xercesc::DOMAttr& a, const type& x) + { + // Call our base first. + // + const type_base& b (x); + a << b; + + // No comments for attributes. + // + } + + void + operator<< (xml_schema::list_stream& ls, const type& x) + { + // Call our base first. + // + const type_base& b (x); + ls << b; + + // No comments for list items. + // + } +} diff --git a/xsd/examples/cxx/tree/custom/comments/xml-schema-custom.hxx b/xsd/examples/cxx/tree/custom/comments/xml-schema-custom.hxx new file mode 100644 index 0000000..821d0dd --- /dev/null +++ b/xsd/examples/cxx/tree/custom/comments/xml-schema-custom.hxx @@ -0,0 +1,58 @@ +// file : examples/cxx/tree/custom/comments/xml-schema-custom.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : not copyrighted - public domain + +// Do not include this file directly, use xml-schema.hxx instead. This +// file is included into generated xml-schema.hxx so we do not need to +// guard against multiple inclusions. +// + +#include <string> + +namespace xml_schema +{ + // When customizing anyType always inherit from the original type. + // + class type: public type_base + { + public: + type (); + type (const xercesc::DOMElement&, flags = 0, container* = 0); + type (const xercesc::DOMAttr&, flags = 0, container* = 0); + type (const std::string&, const xercesc::DOMElement*, + flags = 0, container* = 0); + type (const type&, flags = 0, container* = 0); + + virtual type* + _clone (flags = 0, container* = 0) const; + + public: + // Comment manipulation API. + // + const std::string& + comment () const + { + return comment_; + } + + void + comment (const std::string& c) + { + comment_ = c; + } + + private: + std::string comment_; + }; + + // New serialization operators. + // + void + operator<< (xercesc::DOMElement&, const type&); + + void + operator<< (xercesc::DOMAttr&, const type&); + + void + operator<< (xml_schema::list_stream&, const type&); +} diff --git a/xsd/examples/cxx/tree/custom/contacts/README b/xsd/examples/cxx/tree/custom/contacts/README new file mode 100644 index 0000000..072ede3 --- /dev/null +++ b/xsd/examples/cxx/tree/custom/contacts/README @@ -0,0 +1,40 @@ +This example shows how to map a user-defined XML Schema type to a custom +C++ class. It presents the simple case where the customized type is not +used as a base in the same schema. For the complex case see the taxonomy +example. For more information on the C++/Tree mapping customization see +the C++/Tree Mapping Customization Guide[1]. + +[1] http://wiki.codesynthesis.com/Tree/Customization_guide + +The example consists of the following files: + +contacts.xsd + XML Schema definition for a simple contacts database. + +contacts.xml + Sample XML instance document. + +contacts.hxx +contacts.ixx +contacts.cxx + C++ types that represent the given vocabulary and a set of parsing + functions that convert XML instance documents to a tree-like in-memory + object model. These are generated by XSD from contacts.xsd with the + --custom-type option in order to customize the contact type. + +contacts-custom.hxx + Header file which defines our own contact class by inheriting from the + generated contact_base. It is included at the end of contacts.hxx using + the --hxx-epilogue option. + +contacts-custom.cxx + Source file which contains the implementation of our contact class. + +driver.cxx + Driver for the example. It first calls one of the parsing functions + that constructs the object model from the input file. It then prints + the contacts to STDERR. + +To run the example on the sample XML instance document simply execute: + +$ ./driver contacts.xml diff --git a/xsd/examples/cxx/tree/custom/contacts/contacts-custom.cxx b/xsd/examples/cxx/tree/custom/contacts/contacts-custom.cxx new file mode 100644 index 0000000..dd7c453 --- /dev/null +++ b/xsd/examples/cxx/tree/custom/contacts/contacts-custom.cxx @@ -0,0 +1,51 @@ +// file : examples/cxx/tree/custom/contacts/contacts-custom.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : not copyrighted - public domain + +#include <ostream> + +// Include contacts.hxx instead of contacts-custom.hxx here. +// +#include "contacts.hxx" + +namespace contacts +{ + // We implement the following constructs by simply forwarding + // to our base. + // + contact:: + contact (const name_type& n, + const email_type& e, + const phone_type& p) + : contact_base (n, e, p) + { + } + + contact:: + contact (const xercesc::DOMElement& e, + xml_schema::flags f, + xml_schema::container* c) + : contact_base (e, f, c) + { + } + + contact:: + contact (const contact& x, + xml_schema::flags f, + xml_schema::container* c) + : contact_base (x, f, c) + { + } + + contact* contact:: + _clone (xml_schema::flags f, xml_schema::container* c) const + { + return new contact (*this, f, c); + } + + void contact:: + print (std::ostream& os) const + { + os << name () << " e| " << email () << " t| " << phone () << std::endl; + } +} diff --git a/xsd/examples/cxx/tree/custom/contacts/contacts-custom.hxx b/xsd/examples/cxx/tree/custom/contacts/contacts-custom.hxx new file mode 100644 index 0000000..fdb6810 --- /dev/null +++ b/xsd/examples/cxx/tree/custom/contacts/contacts-custom.hxx @@ -0,0 +1,44 @@ +// file : examples/cxx/tree/custom/contacts/contacts-custom.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : not copyrighted - public domain + +// Do not include this file directly, use contacts.hxx instead. This +// file is included into generated contacts.hxx so we do not need to +// guard against multiple inclusions. +// + +#include <iosfwd> // std::ostream + +namespace contacts +{ + class contact: public contact_base + { + // The following constructor signatures are copied from + // contact_base except for the copy constructor and the + // _clone function where we had to change the type from + // contact_base to contact. + // + public: + contact (const name_type&, + const email_type&, + const phone_type&); + + contact (const xercesc::DOMElement&, + xml_schema::flags = 0, + xml_schema::container* = 0); + + contact (const contact&, + xml_schema::flags = 0, + xml_schema::container* = 0); + + virtual contact* + _clone (xml_schema::flags = 0, + xml_schema::container* = 0) const; + + // Our customizations. + // + public: + void + print (std::ostream&) const; + }; +} diff --git a/xsd/examples/cxx/tree/custom/contacts/contacts.xml b/xsd/examples/cxx/tree/custom/contacts/contacts.xml new file mode 100644 index 0000000..c6dc38f --- /dev/null +++ b/xsd/examples/cxx/tree/custom/contacts/contacts.xml @@ -0,0 +1,21 @@ +<?xml version="1.0"?> + +<!-- + +file : examples/cxx/tree/custom/contacts/contacts.xml +author : Boris Kolpackov <boris@codesynthesis.com> +copyright : not copyrighted - public domain + +--> + +<cts:catalog xmlns:cts="http://www.codesynthesis.com/contacts" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.codesynthesis.com/contacts contacts.xsd"> + + <contact> + <name>Joe Dirt</name> + <email>joe@dirt.com</email> + <phone>555 DIRT</phone> + </contact> + +</cts:catalog> diff --git a/xsd/examples/cxx/tree/custom/contacts/contacts.xsd b/xsd/examples/cxx/tree/custom/contacts/contacts.xsd new file mode 100644 index 0000000..da73c78 --- /dev/null +++ b/xsd/examples/cxx/tree/custom/contacts/contacts.xsd @@ -0,0 +1,32 @@ +<?xml version="1.0"?> + +<!-- + +file : examples/cxx/tree/custom/contacts/contacts.xsd +author : Boris Kolpackov <boris@codesynthesis.com> +copyright : not copyrighted - public domain + +--> + +<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns:cts="http://www.codesynthesis.com/contacts" + targetNamespace="http://www.codesynthesis.com/contacts"> + + <xsd:complexType name="contact"> + <xsd:sequence> + <xsd:element name="name" type="xsd:string"/> + <xsd:element name="email" type="xsd:string"/> + <xsd:element name="phone" type="xsd:string"/> + </xsd:sequence> + </xsd:complexType> + + <xsd:complexType name="catalog"> + <xsd:sequence> + <xsd:element name="contact" type="cts:contact" maxOccurs="unbounded"/> + </xsd:sequence> + </xsd:complexType> + + + <xsd:element name="catalog" type="cts:catalog"/> + +</xsd:schema> diff --git a/xsd/examples/cxx/tree/custom/contacts/driver.cxx b/xsd/examples/cxx/tree/custom/contacts/driver.cxx new file mode 100644 index 0000000..9015e87 --- /dev/null +++ b/xsd/examples/cxx/tree/custom/contacts/driver.cxx @@ -0,0 +1,39 @@ +// file : examples/cxx/tree/custom/contacts/driver.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : not copyrighted - public domain + +#include <memory> // std::auto_ptr +#include <iostream> + +#include "contacts.hxx" + +using std::cerr; +using std::endl; + +int +main (int argc, char* argv[]) +{ + if (argc != 2) + { + cerr << "usage: " << argv[0] << " contacts.xml" << endl; + return 1; + } + + try + { + using namespace contacts; + + std::auto_ptr<catalog> c (catalog_ (argv[1])); + + for (catalog::contact_const_iterator i (c->contact ().begin ()); + i != c->contact ().end (); ++i) + { + i->print (cerr); + } + } + catch (const xml_schema::exception& e) + { + cerr << e << endl; + return 1; + } +} diff --git a/xsd/examples/cxx/tree/custom/contacts/makefile b/xsd/examples/cxx/tree/custom/contacts/makefile new file mode 100644 index 0000000..e279634 --- /dev/null +++ b/xsd/examples/cxx/tree/custom/contacts/makefile @@ -0,0 +1,114 @@ +# file : examples/cxx/tree/custom/contacts/makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../../../build/bootstrap.make + +xsd := contacts.xsd +cxx := driver.cxx contacts-custom.cxx + +obj := $(addprefix $(out_base)/,$(cxx:.cxx=.o) $(xsd:.xsd=.o)) +dep := $(obj:.o=.o.d) + +driver := $(out_base)/driver +install := $(out_base)/.install +dist := $(out_base)/.dist +dist-win := $(out_base)/.dist-win +clean := $(out_base)/.clean + + +# Import. +# +$(call import,\ + $(scf_root)/import/libxerces-c/stub.make,\ + l: xerces_c.l,cpp-options: xerces_c.l.cpp-options) + + +# Build. +# +$(driver): $(obj) $(xerces_c.l) + +$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): $(xerces_c.l.cpp-options) + +genf := $(xsd:.xsd=.hxx) $(xsd:.xsd=.ixx) $(xsd:.xsd=.cxx) +gen := $(addprefix $(out_base)/,$(genf)) + +$(gen): xsd := $(out_root)/xsd/xsd + +# We have to double-escape '#' because the message function +# (which is used in command scripts) expands things twice. +# +$(gen): xsd_options := \ +--generate-inline \ +--custom-type contact=/contact_base \ +--hxx-epilogue '\\\#include "contacts-custom.hxx"' + +$(gen): $(out_root)/xsd/xsd + +$(call include-dep,$(dep)) + +# Convenience alias for default target. +# +$(out_base)/: $(driver) + + +# Install & Dist. +# +dist-common := $(out_base)/.dist-common + +$(install) $(dist) $(dist-win) $(dist-common): path := $(subst $(src_root)/,,$(src_base)) + +$(install): + $(call install-data,$(src_base)/README,$(install_doc_dir)/xsd/$(path)/README) + $(call install-data,$(src_base)/driver.cxx,$(install_doc_dir)/xsd/$(path)/driver.cxx) + $(call install-data,$(src_base)/contacts.xsd,$(install_doc_dir)/xsd/$(path)/contacts.xsd) + $(call install-data,$(src_base)/contacts.xml,$(install_doc_dir)/xsd/$(path)/contacts.xml) + $(call install-data,$(src_base)/contacts-custom.hxx,$(install_doc_dir)/xsd/$(path)/contacts-custom.hxx) + $(call install-data,$(src_base)/contacts-custom.cxx,$(install_doc_dir)/xsd/$(path)/contacts-custom.cxx) + +$(dist-common): + $(call install-data,$(src_base)/driver.cxx,$(dist_prefix)/$(path)/driver.cxx) + $(call install-data,$(src_base)/contacts.xsd,$(dist_prefix)/$(path)/contacts.xsd) + $(call install-data,$(src_base)/contacts.xml,$(dist_prefix)/$(path)/contacts.xml) + $(call install-data,$(src_base)/contacts-custom.hxx,$(dist_prefix)/$(path)/contacts-custom.hxx) + $(call install-data,$(src_base)/contacts-custom.cxx,$(dist_prefix)/$(path)/contacts-custom.cxx) + +$(dist): $(dist-common) + $(call install-data,$(src_base)/README,$(dist_prefix)/$(path)/README) + +$(dist-win): $(dist-common) + $(call install-data,$(src_base)/README,$(dist_prefix)/$(path)/README.txt) + $(call message,,unix2dos $(dist_prefix)/$(path)/README.txt) + +# Clean. +# +$(clean): $(driver).o.clean \ + $(addsuffix .cxx.clean,$(obj)) \ + $(addsuffix .cxx.clean,$(dep)) \ + $(addprefix $(out_base)/,$(xsd:.xsd=.cxx.xsd.clean)) + +# Generated .gitignore. +# +ifeq ($(out_base),$(src_base)) +$(gen): | $(out_base)/.gitignore +$(driver): | $(out_base)/.gitignore + +$(out_base)/.gitignore: files := driver $(genf) +$(clean): $(out_base)/.gitignore.clean + +$(call include,$(bld_root)/git/gitignore.make) +endif + +# How to. +# +$(call include,$(bld_root)/cxx/o-e.make) +$(call include,$(bld_root)/cxx/cxx-o.make) +$(call include,$(bld_root)/cxx/cxx-d.make) +$(call include,$(bld_root)/install.make) +$(call include,$(scf_root)/xsd/tree/xsd-cxx.make) + +# Dependencies. +# +$(call import,$(src_root)/xsd/makefile) diff --git a/xsd/examples/cxx/tree/custom/double/README b/xsd/examples/cxx/tree/custom/double/README new file mode 100644 index 0000000..15348d2 --- /dev/null +++ b/xsd/examples/cxx/tree/custom/double/README @@ -0,0 +1,62 @@ +This example shows how to customize parsing and serialization code for the +xsd:double XML Schema built-in type using the type customization mechanism +provided by the C++/Tree Mapping. For more information on type customization +see the C++/Tree Mapping Customization Guide, particularly sections 1 and 4: + +http://wiki.codesynthesis.com/Tree/Customization_guide + +In this example our schema uses xsd:double to represent a price. There are +two potential problems with this choice of a price type. First, xsd:double +can be serialized in the scientific notation which would be an unusual way +of representing a price. Second, we would like to limit the number of +fraction digits in our prices to 2. Furthermore, we would like to always +have two fraction digits, even if one or both of them are zeros, for +example: 12.99, 12.90, 12.00. + +In case we can modify the schema, a better approach would be to define the +price type as a restriction of the xsd:decimal type (always fixed notation) +and specify the fractionDigits facet to limit the number of fraction digits +to 2. However, there is no way in XML Schema to specify that there should +always be exactly 2 fraction digits. Therefore, it may still be desirable +to customize this price type to get the required serialization behavior. + +Finally, it is worth noting that the behavior achieved in this example via +type customization can also be achieved by compiling your code with the +following macros defined: + +XSD_TREE_DOUBLE_FIXED +XSD_TREE_DOUBLE_PRECISION 2 + +However, the type customization approach while requiring more work is +cleaner since it does not rely on global macro definitions. + +This example consists of the following files: + +order.xsd + XML Schema definition for a simple order vocabulary. + +double-custom.hxx +double-custom.cxx + Custom parsing and serialization code for the xsd:double types. The + double-custom.hxx file is included at the end of the xml-schema.hxx + file described below. + +xml-schema.hxx + C++ types for XML Schema built-in types. This header file is generated + by the XSD compiler using the --generate-xml-schema option. The + --custom-type option is used to customize the xsd:double type. The + --hxx-epilogue option is used to include the double-custom.hxx file + at the end of this file. + +order.hxx +order.cxx + C++ types generated from order.xsd. The --extern-xml-schema option + is used to include xml-schema.hxx into order.hxx. + +driver.cxx + Test driver for the example. It creates a sample order and then + writes it to XML to test the custom xsd:double serialization code. + +To run the example simply execute: + +$ ./driver diff --git a/xsd/examples/cxx/tree/custom/double/double-custom.cxx b/xsd/examples/cxx/tree/custom/double/double-custom.cxx new file mode 100644 index 0000000..78904a0 --- /dev/null +++ b/xsd/examples/cxx/tree/custom/double/double-custom.cxx @@ -0,0 +1,97 @@ +// file : examples/cxx/tree/custom/double/double-custom.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : not copyrighted - public domain + +// Include xml-schema.hxx instead of double-custom.hxx here. +// +#include "xml-schema.hxx" + +#include <limits> +#include <locale> +#include <sstream> + +#include <xsd/cxx/ro-string.hxx> +#include <xsd/cxx/zc-istream.hxx> + +using namespace std; + +// Parsing. +// +namespace xsd +{ + namespace cxx + { + namespace tree + { + double traits<double, char, schema_type::double_>:: + create (const std::string& s, + const xercesc::DOMElement*, + flags, + type*) + { + // This type cannot have whitespaces in its values. As result we + // don't need to waste time collapsing whitespaces. All we need to + // do is trim the string representation which can be done without + // copying. + // + ro_string<char> tmp (s); + trim (tmp); + + zc_istream<char> is (tmp); + is.imbue (locale::classic ()); + + double t; + is >> t; + + return t; + } + } + } +} + +// Serialization. +// +namespace XERCES_CPP_NAMESPACE +{ + void + operator<< (xercesc::DOMElement& e, const xml_schema::as_double& d) + { + ostringstream os; + os.imbue (locale::classic ()); + + os.precision (2); + os << fixed << d.x; + + e << os.str (); + } + + void + operator<< (xercesc::DOMAttr& a, const xml_schema::as_double& d) + { + ostringstream os; + os.imbue (locale::classic ()); + + os.precision (2); + os << fixed << d.x; + + a << os.str (); + } +} + +namespace xsd +{ + namespace cxx + { + namespace tree + { + void + operator<< (xml_schema::list_stream& ls, + const xml_schema::as_double& d) + { + ls.os_.imbue (locale::classic ()); + ls.os_.precision (2); + ls.os_ << fixed << d.x; + } + } + } +} diff --git a/xsd/examples/cxx/tree/custom/double/double-custom.hxx b/xsd/examples/cxx/tree/custom/double/double-custom.hxx new file mode 100644 index 0000000..17d9a44 --- /dev/null +++ b/xsd/examples/cxx/tree/custom/double/double-custom.hxx @@ -0,0 +1,68 @@ +// file : examples/cxx/tree/custom/double/double-custom.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : not copyrighted - public domain + +// Do not include this file directly, use xml-schema.hxx instead. This +// file is included into generated xml-schema.hxx so we do not need to +// guard against multiple inclusions. +// + +#include <xsd/cxx/xml/string.hxx> // xml::transcode +#include <xsd/cxx/tree/text.hxx> // text_content + +// Parsing. +// +namespace xsd +{ + namespace cxx + { + namespace tree + { + template<> + struct traits<double, char, schema_type::double_> + { + static double + create (const xercesc::DOMElement& e, flags f, type* c) + { + return create (text_content<char> (e), 0, f, c); + } + + static double + create (const xercesc::DOMAttr& a, flags f, type* c) + { + return create (xml::transcode<char> (a.getValue ()), 0, f, c); + } + + static double + create (const std::string& s, + const xercesc::DOMElement*, + flags, + type*); + }; + } + } +} + +// Serialization. +// +namespace XERCES_CPP_NAMESPACE +{ + void + operator<< (xercesc::DOMElement& e, const xml_schema::as_double& d); + + void + operator<< (xercesc::DOMAttr& a, const xml_schema::as_double& d); +} + +namespace xsd +{ + namespace cxx + { + namespace tree + { + void + operator<< (xml_schema::list_stream& ls, + const xml_schema::as_double& d); + } + } +} diff --git a/xsd/examples/cxx/tree/custom/double/driver.cxx b/xsd/examples/cxx/tree/custom/double/driver.cxx new file mode 100644 index 0000000..2e5b44d --- /dev/null +++ b/xsd/examples/cxx/tree/custom/double/driver.cxx @@ -0,0 +1,32 @@ +// file : examples/cxx/tree/custom/double/driver.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : not copyrighted - public domain + +#include <iostream> + +#include "order.hxx" + +using std::cerr; +using std::endl; + +int +main () +{ + try + { + // Order one Airbus A380. + // + order o; + o.item ().push_back (item ("Airbus A380", 317000000.90)); + + + // Serialize. + // + order_ (std::cout, o); + } + catch (const xml_schema::exception& e) + { + cerr << e << endl; + return 1; + } +} diff --git a/xsd/examples/cxx/tree/custom/double/makefile b/xsd/examples/cxx/tree/custom/double/makefile new file mode 100644 index 0000000..5bd4f71 --- /dev/null +++ b/xsd/examples/cxx/tree/custom/double/makefile @@ -0,0 +1,114 @@ +# file : examples/cxx/tree/custom/double/makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../../../build/bootstrap.make + +xsd := order.xsd +cxx := driver.cxx double-custom.cxx + +obj := $(addprefix $(out_base)/,$(cxx:.cxx=.o) $(xsd:.xsd=.o)) +dep := $(obj:.o=.o.d) + +driver := $(out_base)/driver +install := $(out_base)/.install +dist := $(out_base)/.dist +dist-win := $(out_base)/.dist-win +clean := $(out_base)/.clean + + +# Import. +# +$(call import,\ + $(scf_root)/import/libxerces-c/stub.make,\ + l: xerces_c.l,cpp-options: xerces_c.l.cpp-options) + + +# Build. +# +$(driver): $(obj) $(xerces_c.l) + +$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): $(xerces_c.l.cpp-options) + +$(out_base)/xml-schema.hxx: $(out_root)/xsd/xsd + $(call message,xsd $(src_base)/xml-schema.xsd,\ +$(out_root)/xsd/xsd cxx-tree --output-dir $(out_base) --generate-xml-schema \ +--generate-serialization --custom-type double=double \ +--hxx-epilogue '\#include "double-custom.hxx"' xml-schema.xsd) + +genf := $(xsd:.xsd=.hxx) $(xsd:.xsd=.ixx) $(xsd:.xsd=.cxx) +gen := $(addprefix $(out_base)/,$(genf)) + +$(gen): xsd := $(out_root)/xsd/xsd + +$(gen): xsd_options := \ +--generate-serialization --extern-xml-schema xml-schema.xsd + +$(gen): $(out_root)/xsd/xsd + +$(call include-dep,$(dep)) + +# Convenience alias for default target. +# +$(out_base)/: $(driver) + + +# Install & Dist. +# +dist-common := $(out_base)/.dist-common + +$(install) $(dist) $(dist-win) $(dist-common): path := $(subst $(src_root)/,,$(src_base)) + +$(install): + $(call install-data,$(src_base)/README,$(install_doc_dir)/xsd/$(path)/README) + $(call install-data,$(src_base)/driver.cxx,$(install_doc_dir)/xsd/$(path)/driver.cxx) + $(call install-data,$(src_base)/order.xsd,$(install_doc_dir)/xsd/$(path)/order.xsd) + $(call install-data,$(src_base)/double-custom.hxx,$(install_doc_dir)/xsd/$(path)/double-custom.hxx) + $(call install-data,$(src_base)/double-custom.cxx,$(install_doc_dir)/xsd/$(path)/double-custom.cxx) + +$(dist-common): + $(call install-data,$(src_base)/driver.cxx,$(dist_prefix)/$(path)/driver.cxx) + $(call install-data,$(src_base)/order.xsd,$(dist_prefix)/$(path)/order.xsd) + $(call install-data,$(src_base)/double-custom.hxx,$(dist_prefix)/$(path)/double-custom.hxx) + $(call install-data,$(src_base)/double-custom.cxx,$(dist_prefix)/$(path)/double-custom.cxx) + +$(dist): $(dist-common) + $(call install-data,$(src_base)/README,$(dist_prefix)/$(path)/README) + +$(dist-win): $(dist-common) + $(call install-data,$(src_base)/README,$(dist_prefix)/$(path)/README.txt) + $(call message,,unix2dos $(dist_prefix)/$(path)/README.txt) + +# Clean. +# +$(clean): $(driver).o.clean \ + $(addsuffix .cxx.clean,$(obj)) \ + $(addsuffix .cxx.clean,$(dep)) \ + $(addprefix $(out_base)/,$(xsd:.xsd=.cxx.xsd.clean)) + $(call message,rm $$1,rm -f $$1,$(out_base)/xml-schema.hxx) + +# Generated .gitignore. +# +ifeq ($(out_base),$(src_base)) +$(gen): | $(out_base)/.gitignore +$(driver): | $(out_base)/.gitignore + +$(out_base)/.gitignore: files := driver xml-schema.hxx $(genf) +$(clean): $(out_base)/.gitignore.clean + +$(call include,$(bld_root)/git/gitignore.make) +endif + +# How to. +# +$(call include,$(bld_root)/cxx/o-e.make) +$(call include,$(bld_root)/cxx/cxx-o.make) +$(call include,$(bld_root)/cxx/cxx-d.make) +$(call include,$(bld_root)/install.make) +$(call include,$(scf_root)/xsd/tree/xsd-cxx.make) + +# Dependencies. +# +$(call import,$(src_root)/xsd/makefile) diff --git a/xsd/examples/cxx/tree/custom/double/order.xsd b/xsd/examples/cxx/tree/custom/double/order.xsd new file mode 100644 index 0000000..0d7fe05 --- /dev/null +++ b/xsd/examples/cxx/tree/custom/double/order.xsd @@ -0,0 +1,26 @@ +<?xml version="1.0"?> + +<!-- + +file : examples/cxx/tree/custom/double/order.xsd +author : Boris Kolpackov <boris@codesynthesis.com> +copyright : not copyrighted - public domain + +--> + +<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + + <xsd:complexType name="item"> + <xsd:attribute name="name" type="xsd:string" use="required"/> + <xsd:attribute name="price" type="xsd:double" use="required"/> + </xsd:complexType> + + <xsd:complexType name="order"> + <xsd:sequence> + <xsd:element name="item" type="item" maxOccurs="unbounded"/> + </xsd:sequence> + </xsd:complexType> + + <xsd:element name="order" type="order"/> + +</xsd:schema> diff --git a/xsd/examples/cxx/tree/custom/makefile b/xsd/examples/cxx/tree/custom/makefile new file mode 100644 index 0000000..d1044db --- /dev/null +++ b/xsd/examples/cxx/tree/custom/makefile @@ -0,0 +1,50 @@ +# file : examples/cxx/tree/custom/makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../../build/bootstrap.make + +all_examples := comments contacts double mixed taxonomy wildcard calendar +build_examples := comments contacts double mixed taxonomy wildcard + +ifeq ($(xsd_with_boost_date_time),y) +build_examples += calendar +endif + +default := $(out_base)/ +install := $(out_base)/.install +dist := $(out_base)/.dist +dist-win := $(out_base)/.dist-win +clean := $(out_base)/.clean + +# Build. +# +$(default): $(addprefix $(out_base)/,$(addsuffix /,$(build_examples))) + +# Install & Dist. +# +$(install) $(dist) $(dist-win): path := $(subst $(src_root)/,,$(src_base)) + +$(install): $(addprefix $(out_base)/,$(addsuffix /.install,$(all_examples))) + $(call install-data,$(src_base)/README,$(install_doc_dir)/xsd/$(path)/README) + +$(dist): $(addprefix $(out_base)/,$(addsuffix /.dist,$(all_examples))) + $(call install-data,$(src_base)/README,$(dist_prefix)/$(path)/README) + +$(dist-win): $(addprefix $(out_base)/,$(addsuffix /.dist-win,$(all_examples))) + $(call install-data,$(src_base)/README,$(dist_prefix)/$(path)/README.txt) + $(call message,,unix2dos $(dist_prefix)/$(path)/README.txt) + +# Clean. +# +$(clean): $(addprefix $(out_base)/,$(addsuffix /.clean,$(build_examples))) + +$(call include,$(bld_root)/install.make) + +ifneq ($(filter $(MAKECMDGOALS),dist dist-win install),) +$(foreach e,$(all_examples),$(call import,$(src_base)/$e/makefile)) +else +$(foreach e,$(build_examples),$(call import,$(src_base)/$e/makefile)) +endif + diff --git a/xsd/examples/cxx/tree/custom/mixed/README b/xsd/examples/cxx/tree/custom/mixed/README new file mode 100644 index 0000000..7b56812 --- /dev/null +++ b/xsd/examples/cxx/tree/custom/mixed/README @@ -0,0 +1,50 @@ +This example shows how to use type customization to parse and serialize +mixed content. The example achieves this by customizing the type with +the mixed content model to include a DOM document that stores the data +as a raw XML representation. The customized type also provides its own +parsing constructor and serialization operator where the mixed content +is extracted from and inserted back to DOM, respectively. The use of +DOM for mixed content storage is one of the options. You may find other +data structures (e.g., a string) more suitable depending on your situation. + +For more information on the C++/Tree mapping customization see the C++/Tree +Mapping Customization Guide[1]. + +[1] http://wiki.codesynthesis.com/Tree/Customization_guide + +The example consists of the following files: + +people.xsd + XML Schema definition for a simple person record vocabulary. Each + record includes the bio element which represents arbitrary XHTML + fragments as mixed content. + +people.xml + Sample XML instance document. + +people.hxx +people.ixx +people.cxx + C++ types that represent the given vocabulary, a set of parsing + functions that convert XML instance documents to a tree-like in-memory + object model, and a set of serialization functions that convert the + object model back to XML. These are generated by XSD from people.xsd + with the --custom-type option in order to customize the bio type. + +people-custom.hxx + Header file which defines our own bio class by inheriting from the + generated bio_base. It is included at the end of people.hxx using + the --hxx-epilogue option. + +people-custom.cxx + Source file which contains the implementation of our bio class. + +driver.cxx + Driver for the example. It first calls one of the parsing functions + that constructs the object model from the input file. It then prints + the data to STDERR, including the bio information converted to text. + Finally, the driver serializes the object model back to XML. + +To run the example on the sample XML instance document simply execute: + +$ ./driver people.xml diff --git a/xsd/examples/cxx/tree/custom/mixed/driver.cxx b/xsd/examples/cxx/tree/custom/mixed/driver.cxx new file mode 100644 index 0000000..a6dd0a7 --- /dev/null +++ b/xsd/examples/cxx/tree/custom/mixed/driver.cxx @@ -0,0 +1,124 @@ +// file : examples/cxx/tree/custom/mixed/driver.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : not copyrighted - public domain + +#include <memory> // std::auto_ptr +#include <iostream> + +#include <xercesc/dom/DOM.hpp> +#include <xercesc/util/PlatformUtils.hpp> + +#include "people.hxx" + +// The following transcode() utility function is handy when working with +// Xerces. Include it after the generated header in order to get only char +// or wchar_t version depending on how you compiled your schemas. +// +#include <xsd/cxx/xml/string.hxx> + +using std::cerr; +using std::endl; +using namespace xercesc; + + +void +xhtml2txt (const DOMElement*); + +int +main (int argc, char* argv[]) +{ + if (argc != 2) + { + cerr << "usage: " << argv[0] << " people.xml" << endl; + return 1; + } + + int r (0); + + // The Xerces-C++ DOM document that will be used to store the XHTML + // fragments "out-live" the call to the parsing function. Therefore + // we need to initialize the Xerces-C++ runtime ourselves. + // + XMLPlatformUtils::Initialize (); + + try + { + using namespace people; + + // Parse. + // + std::auto_ptr<directory> d ( + directory_ (argv[1], xml_schema::flags::dont_initialize)); + + // Print what we've got. + // + const directory::person_sequence& s (d->person ()); + + for (directory::person_const_iterator i (s.begin ()); i != s.end (); ++i) + { + cerr << "First : " << i->first_name () << endl + << "Last : " << i->last_name () << endl + << "Gender : " << i->gender () << endl + << "Age : " << i->age () << endl; + + const bio& b (i->bio ()); + const DOMElement* xhtml (b.xhtml ()); + + if (xhtml != 0) + { + cerr << "Bio : " << endl; + xhtml2txt (xhtml); + } + + cerr << endl; + } + + // Serialize. + // + xml_schema::namespace_infomap map; + + map["ppl"].name = "http://www.codesynthesis.com/people"; + map["ppl"].schema = "people.xsd"; + + directory_ ( + std::cout, *d, map, "UTF-8", xml_schema::flags::dont_initialize); + } + catch (const xml_schema::exception& e) + { + cerr << e << endl; + r = 1; + } + + XMLPlatformUtils::Terminate (); + return r; +} + +// Primitive XHTML to text converter that just prints all the text +// nodes and ignores everything else. +// +void +xhtml2txt (const DOMElement* e) +{ + namespace xml = xsd::cxx::xml; + + for (const DOMNode* n (e->getFirstChild ()); + n != 0; + n = n->getNextSibling ()) + { + switch (n->getNodeType ()) + { + case DOMNode::TEXT_NODE: + { + cerr << xml::transcode<char> (n->getTextContent ()); + break; + } + case DOMNode::ELEMENT_NODE: + { + xhtml2txt (static_cast<const DOMElement*> (n)); + break; + } + default: + break; // Ignore all other nodes (e.g., comments, etc). + } + } +} diff --git a/xsd/examples/cxx/tree/custom/mixed/makefile b/xsd/examples/cxx/tree/custom/mixed/makefile new file mode 100644 index 0000000..144299e --- /dev/null +++ b/xsd/examples/cxx/tree/custom/mixed/makefile @@ -0,0 +1,116 @@ +# file : examples/cxx/tree/custom/mixed/makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../../../build/bootstrap.make + +xsd := people.xsd +cxx := driver.cxx people-custom.cxx + +obj := $(addprefix $(out_base)/,$(cxx:.cxx=.o) $(xsd:.xsd=.o)) +dep := $(obj:.o=.o.d) + +driver := $(out_base)/driver +install := $(out_base)/.install +dist := $(out_base)/.dist +dist-win := $(out_base)/.dist-win +clean := $(out_base)/.clean + + +# Import. +# +$(call import,\ + $(scf_root)/import/libxerces-c/stub.make,\ + l: xerces_c.l,cpp-options: xerces_c.l.cpp-options) + + +# Build. +# +$(driver): $(obj) $(xerces_c.l) + +$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): $(xerces_c.l.cpp-options) + +genf := $(xsd:.xsd=.hxx) $(xsd:.xsd=.ixx) $(xsd:.xsd=.cxx) +gen := $(addprefix $(out_base)/,$(genf)) + +$(gen): xsd := $(out_root)/xsd/xsd + +# We have to double-escape '#' because the message function +# (which is used in command scripts) expands things twice. +# +$(gen): xsd_options := \ +--generate-inline \ +--generate-serialization \ +--custom-type bio=/bio_base \ +--hxx-epilogue '\\\#include "people-custom.hxx"' + +$(gen): $(out_root)/xsd/xsd + +$(call include-dep,$(dep)) + +# Convenience alias for default target. +# +$(out_base)/: $(driver) + + +# Install & Dist. +# +dist-common := $(out_base)/.dist-common + +$(install) $(dist) $(dist-win) $(dist-common): path := $(subst $(src_root)/,,$(src_base)) + +$(install): + $(call install-data,$(src_base)/README,$(install_doc_dir)/xsd/$(path)/README) + $(call install-data,$(src_base)/driver.cxx,$(install_doc_dir)/xsd/$(path)/driver.cxx) + $(call install-data,$(src_base)/people.xsd,$(install_doc_dir)/xsd/$(path)/people.xsd) + $(call install-data,$(src_base)/people.xml,$(install_doc_dir)/xsd/$(path)/people.xml) + $(call install-data,$(src_base)/people-custom.hxx,$(install_doc_dir)/xsd/$(path)/people-custom.hxx) + $(call install-data,$(src_base)/people-custom.cxx,$(install_doc_dir)/xsd/$(path)/people-custom.cxx) + +$(dist-common): + $(call install-data,$(src_base)/driver.cxx,$(dist_prefix)/$(path)/driver.cxx) + $(call install-data,$(src_base)/people.xsd,$(dist_prefix)/$(path)/people.xsd) + $(call install-data,$(src_base)/people.xml,$(dist_prefix)/$(path)/people.xml) + $(call install-data,$(src_base)/people-custom.hxx,$(dist_prefix)/$(path)/people-custom.hxx) + $(call install-data,$(src_base)/people-custom.cxx,$(dist_prefix)/$(path)/people-custom.cxx) + +$(dist): $(dist-common) + $(call install-data,$(src_base)/README,$(dist_prefix)/$(path)/README) + +$(dist-win): $(dist-common) + $(call install-data,$(src_base)/README,$(dist_prefix)/$(path)/README.txt) + $(call message,,unix2dos $(dist_prefix)/$(path)/README.txt) + + +# Clean. +# +$(clean): $(driver).o.clean \ + $(addsuffix .cxx.clean,$(obj)) \ + $(addsuffix .cxx.clean,$(dep)) \ + $(addprefix $(out_base)/,$(xsd:.xsd=.cxx.xsd.clean)) + +# Generated .gitignore. +# +ifeq ($(out_base),$(src_base)) +$(gen): | $(out_base)/.gitignore +$(driver): | $(out_base)/.gitignore + +$(out_base)/.gitignore: files := driver $(genf) +$(clean): $(out_base)/.gitignore.clean + +$(call include,$(bld_root)/git/gitignore.make) +endif + +# How to. +# +$(call include,$(bld_root)/cxx/o-e.make) +$(call include,$(bld_root)/cxx/cxx-o.make) +$(call include,$(bld_root)/cxx/cxx-d.make) +$(call include,$(bld_root)/install.make) +$(call include,$(scf_root)/xsd/tree/xsd-cxx.make) + +# Dependencies. +# +$(call import,$(src_root)/xsd/makefile) diff --git a/xsd/examples/cxx/tree/custom/mixed/people-custom.cxx b/xsd/examples/cxx/tree/custom/mixed/people-custom.cxx new file mode 100644 index 0000000..af07e22 --- /dev/null +++ b/xsd/examples/cxx/tree/custom/mixed/people-custom.cxx @@ -0,0 +1,90 @@ +// file : examples/cxx/tree/custom/mixed/people-custom.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : not copyrighted - public domain + +#include <ostream> + +// Include people.hxx instead of people-custom.hxx here. +// +#include "people.hxx" + +namespace people +{ + using namespace xercesc; + + const XMLCh ls[] = {chLatin_L, chLatin_S, chNull}; + + bio:: + bio () + : xhtml_ (0) + { + DOMImplementation* impl ( + DOMImplementationRegistry::getDOMImplementation (ls)); + + doc_.reset (impl->createDocument ()); + } + + bio:: + bio (const DOMElement& e, + xml_schema::flags f, + xml_schema::container* c) + : bio_base (e, f, c), xhtml_ (0) + { + DOMImplementation* impl ( + DOMImplementationRegistry::getDOMImplementation (ls)); + + doc_.reset (impl->createDocument ()); + + // Copy the xhtml element. Assume the first child element in + // e is always xhtml. + // + for (DOMNode* n (e.getFirstChild ()); n != 0; n = n->getNextSibling ()) + { + if (n->getNodeType () == DOMNode::ELEMENT_NODE) + { + xhtml_ = static_cast<DOMElement*> (doc_->importNode (n, true)); + break; + } + } + } + + bio:: + bio (const bio& d, + xml_schema::flags f, + xml_schema::container* c) + : bio_base (d, f, c), xhtml_ (0) + { + DOMImplementation* impl ( + DOMImplementationRegistry::getDOMImplementation (ls)); + + doc_.reset (impl->createDocument ()); + + xhtml_ = static_cast<DOMElement*> ( + doc_->importNode (const_cast<DOMElement*> (d.xhtml_), true)); + } + + bio* bio:: + _clone (xml_schema::flags f, xml_schema::container* c) const + { + return new bio (*this, f, c); + } + + void + operator<< (DOMElement& e, const bio& x) + { + // Allow our base to serialize first. + // + const bio_base& b (x); + e << b; + + // Copy the XHTML fragment if we have one. + // + const DOMElement* xhtml (x.xhtml ()); + + if (xhtml != 0) + { + DOMDocument* doc (e.getOwnerDocument ()); + e.appendChild (doc->importNode (const_cast<DOMElement*> (xhtml), true)); + } + } +} diff --git a/xsd/examples/cxx/tree/custom/mixed/people-custom.hxx b/xsd/examples/cxx/tree/custom/mixed/people-custom.hxx new file mode 100644 index 0000000..f05ba4a --- /dev/null +++ b/xsd/examples/cxx/tree/custom/mixed/people-custom.hxx @@ -0,0 +1,84 @@ +// file : examples/cxx/tree/custom/mixed/people-custom.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : not copyrighted - public domain + +// Do not include this file directly, use people.hxx instead. This +// file is included into generated people.hxx so we do not need to +// guard against multiple inclusions. +// + +#include <cassert> +#include <xercesc/dom/DOM.hpp> + +namespace people +{ + class bio: public bio_base + { + // Standard constructors. + // + public: + bio (); + + bio (const xercesc::DOMElement&, + xml_schema::flags = 0, + xml_schema::container* = 0); + + bio (const bio&, + xml_schema::flags = 0, + xml_schema::container* = 0); + + virtual bio* + _clone (xml_schema::flags = 0, + xml_schema::container* = 0) const; + + // XHTML bio as a DOM document. + // + public: + const xercesc::DOMElement* + xhtml () const + { + return xhtml_; + } + + xercesc::DOMElement* + xhtml () + { + return xhtml_; + } + + // The element should belong to the DOMDocument returned by + // the dom_document() functions. + // + void + xhtml (xercesc::DOMElement* e) + { + assert (e->getOwnerDocument () == doc_.get ()); + + if (xhtml_ != 0) + xhtml_->release (); + + xhtml_ = e; + } + + const xercesc::DOMDocument& + dom_document () const + { + return *doc_; + } + + xercesc::DOMDocument& + dom_document () + { + return *doc_; + } + + private: + xercesc::DOMElement* xhtml_; + xml_schema::dom::auto_ptr<xercesc::DOMDocument> doc_; + }; + + // Serialization operator. + // + void + operator<< (xercesc::DOMElement&, const bio&); +} diff --git a/xsd/examples/cxx/tree/custom/mixed/people.xml b/xsd/examples/cxx/tree/custom/mixed/people.xml new file mode 100644 index 0000000..4e5c0ca --- /dev/null +++ b/xsd/examples/cxx/tree/custom/mixed/people.xml @@ -0,0 +1,39 @@ +<?xml version="1.0"?> + +<!-- + +file : examples/cxx/tree/custom/mixed/people.xml +author : Boris Kolpackov <boris@codesynthesis.com> +copyright : not copyrighted - public domain + +--> + +<ppl:directory xmlns:ppl="http://www.codesynthesis.com/people" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.codesynthesis.com/people people.xsd"> + + <person> + <first-name>John</first-name> + <last-name>Doe</last-name> + <gender>male</gender> + <age>32</age> + <bio> + <xhtml xmlns="http://www.w3.org/1999/xhtml"> + <p>Married to Jane Doe.</p> + </xhtml> + </bio> + </person> + + <person> + <first-name>Jane</first-name> + <last-name>Doe</last-name> + <gender>female</gender> + <age>28</age> + <bio> + <xhtml xmlns="http://www.w3.org/1999/xhtml"> + <p>Married to John Doe.</p> + </xhtml> + </bio> + </person> + +</ppl:directory> diff --git a/xsd/examples/cxx/tree/custom/mixed/people.xsd b/xsd/examples/cxx/tree/custom/mixed/people.xsd new file mode 100644 index 0000000..40c1fc1 --- /dev/null +++ b/xsd/examples/cxx/tree/custom/mixed/people.xsd @@ -0,0 +1,46 @@ +<?xml version="1.0"?> + +<!-- + +file : examples/cxx/tree/custom/mixed/people.xsd +author : Boris Kolpackov <boris@codesynthesis.com> +copyright : not copyrighted - public domain + +--> + +<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns:ppl="http://www.codesynthesis.com/people" + targetNamespace="http://www.codesynthesis.com/people"> + + <xsd:simpleType name="gender"> + <xsd:restriction base="xsd:string"> + <xsd:enumeration value="male"/> + <xsd:enumeration value="female"/> + </xsd:restriction> + </xsd:simpleType> + + <xsd:complexType name="bio" mixed="true"> + <xsd:sequence minOccurs="0" maxOccurs="unbounded"> + <xsd:any namespace="http://www.w3.org/1999/xhtml" processContents="skip"/> + </xsd:sequence> + </xsd:complexType> + + <xsd:complexType name="person"> + <xsd:sequence> + <xsd:element name="first-name" type="xsd:string"/> + <xsd:element name="last-name" type="xsd:string"/> + <xsd:element name="gender" type="ppl:gender"/> + <xsd:element name="age" type="xsd:unsignedShort"/> + <xsd:element name="bio" type="ppl:bio"/> + </xsd:sequence> + </xsd:complexType> + + <xsd:complexType name="directory"> + <xsd:sequence> + <xsd:element name="person" type="ppl:person" maxOccurs="unbounded"/> + </xsd:sequence> + </xsd:complexType> + + <xsd:element name="directory" type="ppl:directory"/> + +</xsd:schema> diff --git a/xsd/examples/cxx/tree/custom/taxonomy/README b/xsd/examples/cxx/tree/custom/taxonomy/README new file mode 100644 index 0000000..c2e425a --- /dev/null +++ b/xsd/examples/cxx/tree/custom/taxonomy/README @@ -0,0 +1,53 @@ +This example shows how to map user-defined XML Schema types to custom C++ +classes. It presents the complex case where the customized types are +inherited from in the same schema. For the simple case see the contacts +example. For more information on the C++/Tree mapping customization see +the C++/Tree Mapping Customization Guide[1]. + +[1] http://wiki.codesynthesis.com/Tree/Customization_guide + +The example consists of the following files: + +people.xsd + XML Schema definition for a simple people database. + +people.xml + Sample XML instance document. + +people-fwd.hxx +people.hxx +people.ixx +people.cxx + C++ types that represent the given vocabulary and a set of parsing + functions that convert XML instance documents to a tree-like in-memory + object model. These are generated by XSD from people.xsd with the + --custom-type option in order to customize the person, superman, and + batman types. Generation of the people-fwd.hxx forward declaration + file is requested with the --generate-forward option. Note also that + we use the --generate-polymorphic command line option as well as + --polymorphic-type to mark the type hierarchy starting with the + person type as polymorphic. + +people-custom-fwd.hxx + Header file which forward-declares our own person, superman, and batman + as class templates. It is included at the beginning of people-fwd.hxx + using the --fwd-prologue option. + +people-custom.hxx + Header file which defines our own person, superman, and batman class + templates by inheriting from the generated person_base, superman_base, + and batman_base. It is included at the beginning of people.hxx using + the --hxx-prologue option. + +people-custom.cxx + Source file which contains the implementations and instantiations of + our person, superman, and batman class templates. + +driver.cxx + Driver for the example. It first calls one of the parsing functions + that constructs the object model from the input file. It then prints + the database to STDERR. + +To run the example on the sample XML instance document simply execute: + +$ ./driver people.xml diff --git a/xsd/examples/cxx/tree/custom/taxonomy/driver.cxx b/xsd/examples/cxx/tree/custom/taxonomy/driver.cxx new file mode 100644 index 0000000..f102fc3 --- /dev/null +++ b/xsd/examples/cxx/tree/custom/taxonomy/driver.cxx @@ -0,0 +1,39 @@ +// file : examples/cxx/tree/custom/taxonomy/driver.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : not copyrighted - public domain + +#include <memory> // std::auto_ptr +#include <iostream> + +#include "people.hxx" + +using std::cerr; +using std::endl; + +int +main (int argc, char* argv[]) +{ + if (argc != 2) + { + cerr << "usage: " << argv[0] << " people.xml" << endl; + return 1; + } + + try + { + using namespace people; + + std::auto_ptr<catalog> c (catalog_ (argv[1])); + + for (catalog::person_const_iterator i (c->person ().begin ()); + i != c->person ().end (); ++i) + { + i->print (cerr); + } + } + catch (const xml_schema::exception& e) + { + cerr << e << endl; + return 1; + } +} diff --git a/xsd/examples/cxx/tree/custom/taxonomy/makefile b/xsd/examples/cxx/tree/custom/taxonomy/makefile new file mode 100644 index 0000000..ca3327c --- /dev/null +++ b/xsd/examples/cxx/tree/custom/taxonomy/makefile @@ -0,0 +1,123 @@ +# file : examples/cxx/tree/custom/taxonomy/makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../../../build/bootstrap.make + +xsd := people.xsd +cxx := driver.cxx people-custom.cxx + +obj := $(addprefix $(out_base)/,$(cxx:.cxx=.o) $(xsd:.xsd=.o)) +dep := $(obj:.o=.o.d) + +driver := $(out_base)/driver +install := $(out_base)/.install +dist := $(out_base)/.dist +dist-win := $(out_base)/.dist-win +clean := $(out_base)/.clean + + +# Import. +# +$(call import,\ + $(scf_root)/import/libxerces-c/stub.make,\ + l: xerces_c.l,cpp-options: xerces_c.l.cpp-options) + + +# Build. +# +$(driver): $(obj) $(xerces_c.l) + +$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): $(xerces_c.l.cpp-options) + +genf := $(xsd:.xsd=.hxx) $(xsd:.xsd=-fwd.hxx) $(xsd:.xsd=.ixx) $(xsd:.xsd=.cxx) +gen := $(addprefix $(out_base)/,$(genf)) + +$(gen): xsd := $(out_root)/xsd/xsd + +# We have to double-escape '#' because the message function +# (which is used in command scripts) expands things twice. +# +$(gen): xsd_options := \ +--generate-inline \ +--generate-forward \ +--generate-polymorphic \ +--polymorphic-type person \ +--custom-type "person=person_impl<person_base>/person_base" \ +--custom-type "superman=superman_impl<superman_base>/superman_base" \ +--custom-type "batman=batman_impl<batman_base>/batman_base" \ +--fwd-prologue '\\\#include "people-custom-fwd.hxx"' \ +--hxx-prologue '\\\#include "people-custom.hxx"' + +$(gen): $(out_root)/xsd/xsd + +$(call include-dep,$(dep)) + +# Convenience alias for default target. +# +$(out_base)/: $(driver) + + +# Install & Dist. +# +dist-common := $(out_base)/.dist-common + +$(install) $(dist) $(dist-win) $(dist-common): path := $(subst $(src_root)/,,$(src_base)) + +$(install): + $(call install-data,$(src_base)/README,$(install_doc_dir)/xsd/$(path)/README) + $(call install-data,$(src_base)/driver.cxx,$(install_doc_dir)/xsd/$(path)/driver.cxx) + $(call install-data,$(src_base)/people.xsd,$(install_doc_dir)/xsd/$(path)/people.xsd) + $(call install-data,$(src_base)/people.xml,$(install_doc_dir)/xsd/$(path)/people.xml) + $(call install-data,$(src_base)/people-custom.hxx,$(install_doc_dir)/xsd/$(path)/people-custom.hxx) + $(call install-data,$(src_base)/people-custom.cxx,$(install_doc_dir)/xsd/$(path)/people-custom.cxx) + $(call install-data,$(src_base)/people-custom-fwd.hxx,$(install_doc_dir)/xsd/$(path)/people-custom-fwd.hxx) + +$(dist-common): + $(call install-data,$(src_base)/driver.cxx,$(dist_prefix)/$(path)/driver.cxx) + $(call install-data,$(src_base)/people.xsd,$(dist_prefix)/$(path)/people.xsd) + $(call install-data,$(src_base)/people.xml,$(dist_prefix)/$(path)/people.xml) + $(call install-data,$(src_base)/people-custom.hxx,$(dist_prefix)/$(path)/people-custom.hxx) + $(call install-data,$(src_base)/people-custom.cxx,$(dist_prefix)/$(path)/people-custom.cxx) + $(call install-data,$(src_base)/people-custom-fwd.hxx,$(dist_prefix)/$(path)/people-custom-fwd.hxx) + +$(dist): $(dist-common) + $(call install-data,$(src_base)/README,$(dist_prefix)/$(path)/README) + +$(dist-win): $(dist-common) + $(call install-data,$(src_base)/README,$(dist_prefix)/$(path)/README.txt) + $(call message,,unix2dos $(dist_prefix)/$(path)/README.txt) + + +# Clean. +# +$(clean): $(driver).o.clean \ + $(addsuffix .cxx.clean,$(obj)) \ + $(addsuffix .cxx.clean,$(dep)) \ + $(addprefix $(out_base)/,$(xsd:.xsd=.cxx.xsd.clean)) + +# Generated .gitignore. +# +ifeq ($(out_base),$(src_base)) +$(gen): | $(out_base)/.gitignore +$(driver): | $(out_base)/.gitignore + +$(out_base)/.gitignore: files := driver $(genf) +$(clean): $(out_base)/.gitignore.clean + +$(call include,$(bld_root)/git/gitignore.make) +endif + +# How to. +# +$(call include,$(bld_root)/cxx/o-e.make) +$(call include,$(bld_root)/cxx/cxx-o.make) +$(call include,$(bld_root)/cxx/cxx-d.make) +$(call include,$(bld_root)/install.make) +$(call include,$(scf_root)/xsd/tree/xsd-cxx.make) + +# Dependencies. +# +$(call import,$(src_root)/xsd/makefile) diff --git a/xsd/examples/cxx/tree/custom/taxonomy/people-custom-fwd.hxx b/xsd/examples/cxx/tree/custom/taxonomy/people-custom-fwd.hxx new file mode 100644 index 0000000..973b6e5 --- /dev/null +++ b/xsd/examples/cxx/tree/custom/taxonomy/people-custom-fwd.hxx @@ -0,0 +1,20 @@ +// file : examples/cxx/tree/custom/taxonomy/people-custom-fwd.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : not copyrighted - public domain + +// Do not include this file directly, use people-fwd.hxx instead. This +// file is included into generated people-fwd.hxx so we do not need to +// guard against multiple inclusions. +// + +namespace people +{ + template <typename base> + class person_impl; + + template <typename base> + class superman_impl; + + template <typename base> + class batman_impl; +} diff --git a/xsd/examples/cxx/tree/custom/taxonomy/people-custom.cxx b/xsd/examples/cxx/tree/custom/taxonomy/people-custom.cxx new file mode 100644 index 0000000..321d2df --- /dev/null +++ b/xsd/examples/cxx/tree/custom/taxonomy/people-custom.cxx @@ -0,0 +1,157 @@ +// file : examples/cxx/tree/custom/taxonomy/people-custom.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : not copyrighted - public domain + +#include <ostream> + +// Include people.hxx instead of people-custom.hxx here. +// +#include "people.hxx" + +namespace people +{ + // person_impl + // + template <typename base> + person_impl<base>:: + person_impl (const xml_schema::string& name) + : base (name) + { + } + + template <typename base> + person_impl<base>:: + person_impl (const xercesc::DOMElement& e, + xml_schema::flags f, + xml_schema::container* c) + : base (e, f, c) + { + } + + template <typename base> + person_impl<base>:: + person_impl (const person_impl& p, + xml_schema::flags f, + xml_schema::container* c) + : base (p, f, c) + { + } + + template <typename base> + person_impl<base>* person_impl<base>:: + _clone (xml_schema::flags f, xml_schema::container* c) const + { + return new person_impl (*this, f, c); + } + + template <typename base> + void person_impl<base>:: + print (std::ostream& os) const + { + os << this->name () << std::endl; + } + + // Explicitly instantiate person_impl class template for person_base. + // + template class person_impl<person_base>; + + + // superman_impl + // + template <typename base> + superman_impl<base>:: + superman_impl (const xml_schema::string& name, bool can_fly) + : base (name, can_fly) + { + } + + template <typename base> + superman_impl<base>:: + superman_impl (const xercesc::DOMElement& e, + xml_schema::flags f, + xml_schema::container* c) + : base (e, f, c) + { + } + + template <typename base> + superman_impl<base>:: + superman_impl (const superman_impl& s, + xml_schema::flags f, + xml_schema::container* c) + : base (s, f, c) + { + } + + template <typename base> + superman_impl<base>* superman_impl<base>:: + _clone (xml_schema::flags f, xml_schema::container* c) const + { + return new superman_impl (*this, f, c); + } + + template <typename base> + void superman_impl<base>:: + print (std::ostream& os) const + { + if (this->can_fly ()) + os << "Flying superman "; + else + os << "Superman "; + + os << this->name () << std::endl; + } + + // Explicitly instantiate superman_impl class template for superman_base. + // + template class superman_impl<superman_base>; + + + // batman_impl + // + template <typename base> + batman_impl<base>:: + batman_impl (const xml_schema::string& name, + bool can_fly, + unsigned int wing_span) + : base (name, can_fly, wing_span) + { + } + + template <typename base> + batman_impl<base>:: + batman_impl (const xercesc::DOMElement& e, + xml_schema::flags f, + xml_schema::container* c) + : base (e, f, c) + { + } + + template <typename base> + batman_impl<base>:: + batman_impl (const batman_impl& s, + xml_schema::flags f, + xml_schema::container* c) + : base (s, f, c) + { + } + + template <typename base> + batman_impl<base>* batman_impl<base>:: + _clone (xml_schema::flags f, xml_schema::container* c) const + { + return new batman_impl (*this, f, c); + } + + template <typename base> + void batman_impl<base>:: + print (std::ostream& os) const + { + os << "Batman " << this->name () << " with " << + this->wing_span () << "m wing span" << std::endl; + } + + // Explicitly instantiate batman_impl class template for batman_base. + // + template class batman_impl<batman_base>; +} diff --git a/xsd/examples/cxx/tree/custom/taxonomy/people-custom.hxx b/xsd/examples/cxx/tree/custom/taxonomy/people-custom.hxx new file mode 100644 index 0000000..c601061 --- /dev/null +++ b/xsd/examples/cxx/tree/custom/taxonomy/people-custom.hxx @@ -0,0 +1,97 @@ +// file : examples/cxx/tree/custom/taxonomy/people-custom.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : not copyrighted - public domain + +// Do not include this file directly, use people.hxx instead. This +// file is included into generated people.hxx so we do not need to +// guard against multiple inclusions. +// + +#include <iosfwd> // std::ostream + +// Include people-fwd.hxx here so that we can refer to the generated +// types. +// +#include "people-fwd.hxx" + +namespace people +{ + // + // + template <typename base> + class person_impl: public base + { + public: + person_impl (const xml_schema::string& name); + + person_impl (const xercesc::DOMElement&, + xml_schema::flags = 0, + xml_schema::container* = 0); + + person_impl (const person_impl&, + xml_schema::flags = 0, + xml_schema::container* = 0); + + virtual person_impl* + _clone (xml_schema::flags = 0, + xml_schema::container* = 0) const; + + public: + virtual void + print (std::ostream&) const; + }; + + + // + // + template <typename base> + class superman_impl: public base + { + public: + superman_impl (const xml_schema::string& name, bool can_fly); + + superman_impl (const xercesc::DOMElement&, + xml_schema::flags = 0, + xml_schema::container* = 0); + + superman_impl (const superman_impl&, + xml_schema::flags = 0, + xml_schema::container* = 0); + + virtual superman_impl* + _clone (xml_schema::flags = 0, + xml_schema::container* = 0) const; + + public: + virtual void + print (std::ostream&) const; + }; + + + // + // + template <typename base> + class batman_impl: public base + { + public: + batman_impl (const xml_schema::string& name, + bool can_fly, + unsigned int wing_span); + + batman_impl (const xercesc::DOMElement&, + xml_schema::flags = 0, + xml_schema::container* = 0); + + batman_impl (const batman_impl&, + xml_schema::flags = 0, + xml_schema::container* = 0); + + virtual batman_impl* + _clone (xml_schema::flags = 0, + xml_schema::container* = 0) const; + + public: + virtual void + print (std::ostream&) const; + }; +} diff --git a/xsd/examples/cxx/tree/custom/taxonomy/people.xml b/xsd/examples/cxx/tree/custom/taxonomy/people.xml new file mode 100644 index 0000000..5f84855 --- /dev/null +++ b/xsd/examples/cxx/tree/custom/taxonomy/people.xml @@ -0,0 +1,27 @@ +<?xml version="1.0"?> + +<!-- + +file : examples/cxx/tree/custom/taxonomy/people.xml +author : Boris Kolpackov <boris@codesynthesis.com> +copyright : not copyrighted - public domain + +--> + +<ppl:catalog xmlns:ppl="http://www.codesynthesis.com/people" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.codesynthesis.com/people people.xsd"> + + <person> + <name>Joe Dirt</name> + </person> + + <person xsi:type="ppl:superman" can-fly="false"> + <name>James "007" Bond</name> + </person> + + <person xsi:type="ppl:batman" can-fly="true" wing-span="10"> + <name>Bruce Wayne</name> + </person> + +</ppl:catalog> diff --git a/xsd/examples/cxx/tree/custom/taxonomy/people.xsd b/xsd/examples/cxx/tree/custom/taxonomy/people.xsd new file mode 100644 index 0000000..c77a866 --- /dev/null +++ b/xsd/examples/cxx/tree/custom/taxonomy/people.xsd @@ -0,0 +1,45 @@ +<?xml version="1.0"?> + +<!-- + +file : examples/cxx/tree/custom/taxonomy/people.xsd +author : Boris Kolpackov <boris@codesynthesis.com> +copyright : not copyrighted - public domain + +--> + +<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns:ppl="http://www.codesynthesis.com/people" + targetNamespace="http://www.codesynthesis.com/people"> + + <xsd:complexType name="person"> + <xsd:sequence> + <xsd:element name="name" type="xsd:string"/> + </xsd:sequence> + </xsd:complexType> + + <xsd:complexType name="superman"> + <xsd:complexContent> + <xsd:extension base="ppl:person"> + <xsd:attribute name="can-fly" type="xsd:boolean" use="required"/> + </xsd:extension> + </xsd:complexContent> + </xsd:complexType> + + <xsd:complexType name="batman"> + <xsd:complexContent> + <xsd:extension base="ppl:superman"> + <xsd:attribute name="wing-span" type="xsd:unsignedInt" use="required"/> + </xsd:extension> + </xsd:complexContent> + </xsd:complexType> + + <xsd:complexType name="catalog"> + <xsd:sequence> + <xsd:element name="person" type="ppl:person" maxOccurs="unbounded"/> + </xsd:sequence> + </xsd:complexType> + + <xsd:element name="catalog" type="ppl:catalog"/> + +</xsd:schema> diff --git a/xsd/examples/cxx/tree/custom/wildcard/README b/xsd/examples/cxx/tree/custom/wildcard/README new file mode 100644 index 0000000..70eaea4 --- /dev/null +++ b/xsd/examples/cxx/tree/custom/wildcard/README @@ -0,0 +1,45 @@ +This example shows how to use type customization to parse and serialize +a specific attribute that is matched by a wildcard (anyAttribute). The +example achieves this by customizing the type to include the data +members and accessors/modifiers that represent the attribute as well as +the parsing constructor and serialization operator where the attribute +value is extracted from and inserted back to DOM, respectively. For +more information on the C++/Tree mapping customization see the C++/Tree +Mapping Customization Guide[1]. + +[1] http://wiki.codesynthesis.com/Tree/Customization_guide + +The example consists of the following files: + +wildcard.xsd + XML Schema definition for simple data type and element. + +wildcard.xml + Sample XML instance document. + +wildcard.hxx +wildcard.ixx +wildcard.cxx + C++ types that represent the given vocabulary, a set of parsing + functions that convert XML instance documents to a tree-like in-memory + object model, and a set of serialization functions that convert the + object model back to XML. These are generated by XSD from wildcard.xsd + with the --custom-type option in order to customize the data type. + +wildcard-custom.hxx + Header file which defines our own data class by inheriting from the + generated data_base. It is included at the end of wildcard.hxx using + the --hxx-epilogue option. + +wildcard-custom.cxx + Source file which contains the implementation of our data class. + +driver.cxx + Driver for the example. It first calls one of the parsing functions + that constructs the object model from the input file. It then prints + the data to STDERR, including the extra attribute. Finally, the driver + serializes the object model back to XML. + +To run the example on the sample XML instance document simply execute: + +$ ./driver wildcard.xml diff --git a/xsd/examples/cxx/tree/custom/wildcard/driver.cxx b/xsd/examples/cxx/tree/custom/wildcard/driver.cxx new file mode 100644 index 0000000..d63fb11 --- /dev/null +++ b/xsd/examples/cxx/tree/custom/wildcard/driver.cxx @@ -0,0 +1,48 @@ +// file : examples/cxx/tree/custom/wildcard/driver.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : not copyrighted - public domain + +#include <memory> // std::auto_ptr +#include <iostream> + +#include "wildcard.hxx" + +using std::cerr; +using std::endl; + +int +main (int argc, char* argv[]) +{ + if (argc != 2) + { + cerr << "usage: " << argv[0] << " wildcard.xml" << endl; + return 1; + } + + try + { + using namespace wildcard; + + // Parse. + // + std::auto_ptr<data> d (data_ (argv[1])); + + // Print. + // + cerr << *d << endl; + + // Serialize. + // + xml_schema::namespace_infomap map; + + map["wc"].name = "http://www.codesynthesis.com/wildcard"; + map["wc"].schema = "wildcard.xsd"; + + data_ (std::cout, *d, map); + } + catch (const xml_schema::exception& e) + { + cerr << e << endl; + return 1; + } +} diff --git a/xsd/examples/cxx/tree/custom/wildcard/makefile b/xsd/examples/cxx/tree/custom/wildcard/makefile new file mode 100644 index 0000000..d06fff3 --- /dev/null +++ b/xsd/examples/cxx/tree/custom/wildcard/makefile @@ -0,0 +1,117 @@ +# file : examples/cxx/tree/custom/wildcard/makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../../../build/bootstrap.make + +xsd := wildcard.xsd +cxx := driver.cxx wildcard-custom.cxx + +obj := $(addprefix $(out_base)/,$(cxx:.cxx=.o) $(xsd:.xsd=.o)) +dep := $(obj:.o=.o.d) + +driver := $(out_base)/driver +install := $(out_base)/.install +dist := $(out_base)/.dist +dist-win := $(out_base)/.dist-win +clean := $(out_base)/.clean + + +# Import. +# +$(call import,\ + $(scf_root)/import/libxerces-c/stub.make,\ + l: xerces_c.l,cpp-options: xerces_c.l.cpp-options) + + +# Build. +# +$(driver): $(obj) $(xerces_c.l) + +$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): $(xerces_c.l.cpp-options) + +genf := $(xsd:.xsd=.hxx) $(xsd:.xsd=.ixx) $(xsd:.xsd=.cxx) +gen := $(addprefix $(out_base)/,$(genf)) + +$(gen): xsd := $(out_root)/xsd/xsd + +# We have to double-escape '#' because the message function +# (which is used in command scripts) expands things twice. +# +$(gen): xsd_options := \ +--generate-inline \ +--generate-ostream \ +--generate-serialization \ +--custom-type data=/data_base \ +--hxx-epilogue '\\\#include "wildcard-custom.hxx"' + +$(gen): $(out_root)/xsd/xsd + +$(call include-dep,$(dep)) + +# Convenience alias for default target. +# +$(out_base)/: $(driver) + + +# Install & Dist. +# +dist-common := $(out_base)/.dist-common + +$(install) $(dist) $(dist-win) $(dist-common): path := $(subst $(src_root)/,,$(src_base)) + +$(install): + $(call install-data,$(src_base)/README,$(install_doc_dir)/xsd/$(path)/README) + $(call install-data,$(src_base)/driver.cxx,$(install_doc_dir)/xsd/$(path)/driver.cxx) + $(call install-data,$(src_base)/wildcard.xsd,$(install_doc_dir)/xsd/$(path)/wildcard.xsd) + $(call install-data,$(src_base)/wildcard.xml,$(install_doc_dir)/xsd/$(path)/wildcard.xml) + $(call install-data,$(src_base)/wildcard-custom.hxx,$(install_doc_dir)/xsd/$(path)/wildcard-custom.hxx) + $(call install-data,$(src_base)/wildcard-custom.cxx,$(install_doc_dir)/xsd/$(path)/wildcard-custom.cxx) + +$(dist-common): + $(call install-data,$(src_base)/driver.cxx,$(dist_prefix)/$(path)/driver.cxx) + $(call install-data,$(src_base)/wildcard.xsd,$(dist_prefix)/$(path)/wildcard.xsd) + $(call install-data,$(src_base)/wildcard.xml,$(dist_prefix)/$(path)/wildcard.xml) + $(call install-data,$(src_base)/wildcard-custom.hxx,$(dist_prefix)/$(path)/wildcard-custom.hxx) + $(call install-data,$(src_base)/wildcard-custom.cxx,$(dist_prefix)/$(path)/wildcard-custom.cxx) + +$(dist): $(dist-common) + $(call install-data,$(src_base)/README,$(dist_prefix)/$(path)/README) + +$(dist-win): $(dist-common) + $(call install-data,$(src_base)/README,$(dist_prefix)/$(path)/README.txt) + $(call message,,unix2dos $(dist_prefix)/$(path)/README.txt) + + +# Clean. +# +$(clean): $(driver).o.clean \ + $(addsuffix .cxx.clean,$(obj)) \ + $(addsuffix .cxx.clean,$(dep)) \ + $(addprefix $(out_base)/,$(xsd:.xsd=.cxx.xsd.clean)) + +# Generated .gitignore. +# +ifeq ($(out_base),$(src_base)) +$(gen): | $(out_base)/.gitignore +$(driver): | $(out_base)/.gitignore + +$(out_base)/.gitignore: files := driver $(genf) +$(clean): $(out_base)/.gitignore.clean + +$(call include,$(bld_root)/git/gitignore.make) +endif + +# How to. +# +$(call include,$(bld_root)/cxx/o-e.make) +$(call include,$(bld_root)/cxx/cxx-o.make) +$(call include,$(bld_root)/cxx/cxx-d.make) +$(call include,$(bld_root)/install.make) +$(call include,$(scf_root)/xsd/tree/xsd-cxx.make) + +# Dependencies. +# +$(call import,$(src_root)/xsd/makefile) diff --git a/xsd/examples/cxx/tree/custom/wildcard/wildcard-custom.cxx b/xsd/examples/cxx/tree/custom/wildcard/wildcard-custom.cxx new file mode 100644 index 0000000..422a4b3 --- /dev/null +++ b/xsd/examples/cxx/tree/custom/wildcard/wildcard-custom.cxx @@ -0,0 +1,85 @@ +// file : examples/cxx/tree/custom/wildcard/wildcard-custom.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : not copyrighted - public domain + +#include <ostream> + +// Include wildcard.hxx instead of wildcard-custom.hxx here. +// +#include "wildcard.hxx" + +namespace wildcard +{ + data:: + data (const xml_schema::string& d) + : data_base (d), scope_present_ (false) + { + } + + data:: + data (const xercesc::DOMElement& e, + xml_schema::flags f, + xml_schema::container* c) + : data_base (e, f, c), scope_present_ (false) + { + // Check if we've got the scope attribute. + // + namespace xml = xsd::cxx::xml; + xml::string name ("scope"); + + if (e.hasAttribute (name.c_str ())) + { + scope (xml::transcode<char> (e.getAttribute (name.c_str ()))); + } + } + + data:: + data (const data& d, + xml_schema::flags f, + xml_schema::container* c) + : data_base (d, f, c), + scope_present_ (d.scope_present_), + scope_ (d.scope_) + { + } + + data* data:: + _clone (xml_schema::flags f, xml_schema::container* c) const + { + return new data (*this, f, c); + } + + void + operator<< (xercesc::DOMElement& e, const data& x) + { + // Use our base to serialize data and id. + // + const data_base& b (x); + e << b; + + // Add the scope attribute if present. + // + if (x.scope_present ()) + { + namespace xml = xsd::cxx::xml; + xml::string name ("scope"); + xml::string value (x.scope ()); + + e.setAttribute (name.c_str (), value.c_str ()); + } + } + + std::ostream& + operator<< (std::ostream& os, const data& x) + { + // Use our base to print date and id. + // + const data_base& b (x); + os << b; + + if (x.scope_present ()) + os << std::endl << "scope: " << x.scope (); + + return os; + } +} diff --git a/xsd/examples/cxx/tree/custom/wildcard/wildcard-custom.hxx b/xsd/examples/cxx/tree/custom/wildcard/wildcard-custom.hxx new file mode 100644 index 0000000..2c58cc8 --- /dev/null +++ b/xsd/examples/cxx/tree/custom/wildcard/wildcard-custom.hxx @@ -0,0 +1,67 @@ +// file : examples/cxx/tree/custom/wildcard/wildcard-custom.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : not copyrighted - public domain + +// Do not include this file directly, use wildcard.hxx instead. This +// file is included into generated wildcard.hxx so we do not need to +// guard against multiple inclusions. +// + +namespace wildcard +{ + class data: public data_base + { + // Standard constructors. + // + public: + data (const xml_schema::string&); + + data (const xercesc::DOMElement&, + xml_schema::flags = 0, + xml_schema::container* = 0); + + data (const data&, + xml_schema::flags = 0, + xml_schema::container* = 0); + + virtual data* + _clone (xml_schema::flags = 0, + xml_schema::container* = 0) const; + + // Our customizations. + // + public: + bool + scope_present () const + { + return scope_present_; + } + + const xml_schema::string& + scope () const + { + return scope_; + } + + void + scope (const xml_schema::string& s) + { + scope_present_ = true; + scope_ = s; + } + + private: + bool scope_present_; + xml_schema::string scope_; + }; + + // Serialization operator. + // + void + operator<< (xercesc::DOMElement&, const data&); + + // std::ostream insertion operator. + // + std::ostream& + operator<< (std::ostream&, const data&); +} diff --git a/xsd/examples/cxx/tree/custom/wildcard/wildcard.xml b/xsd/examples/cxx/tree/custom/wildcard/wildcard.xml new file mode 100644 index 0000000..c980193 --- /dev/null +++ b/xsd/examples/cxx/tree/custom/wildcard/wildcard.xml @@ -0,0 +1,15 @@ +<?xml version="1.0"?> + +<!-- + +file : examples/cxx/tree/custom/wildcard/wildcard.xml +author : Boris Kolpackov <boris@codesynthesis.com> +copyright : not copyrighted - public domain + +--> + +<wc:data xmlns:wc="http://www.codesynthesis.com/wildcard" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.codesynthesis.com/wildcard wildcard.xsd" + id="1" + scope="global">abc123</wc:data> diff --git a/xsd/examples/cxx/tree/custom/wildcard/wildcard.xsd b/xsd/examples/cxx/tree/custom/wildcard/wildcard.xsd new file mode 100644 index 0000000..ccce30b --- /dev/null +++ b/xsd/examples/cxx/tree/custom/wildcard/wildcard.xsd @@ -0,0 +1,26 @@ +<?xml version="1.0"?> + +<!-- + +file : examples/cxx/tree/custom/wildcard/wildcard.xsd +author : Boris Kolpackov <boris@codesynthesis.com> +copyright : not copyrighted - public domain + +--> + +<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns:wc="http://www.codesynthesis.com/wildcard" + targetNamespace="http://www.codesynthesis.com/wildcard"> + + <xsd:complexType name="data"> + <xsd:simpleContent> + <xsd:extension base="xsd:string"> + <xsd:attribute name="id" type="xsd:unsignedInt"/> + <xsd:anyAttribute namespace="##any" processContents="skip"/> + </xsd:extension> + </xsd:simpleContent> + </xsd:complexType> + + <xsd:element name="data" type="wc:data"/> + +</xsd:schema> diff --git a/xsd/examples/cxx/tree/dbxml/README b/xsd/examples/cxx/tree/dbxml/README new file mode 100644 index 0000000..59e67d0 --- /dev/null +++ b/xsd/examples/cxx/tree/dbxml/README @@ -0,0 +1,45 @@ +This example shows how to use the C++/Tree mapping on top of the Berkeley +DB XML embedded XML database. This example is described in detail in the +"C++/Tree Mapping and Berkeley DB XML Integration Guide" which can be +found in the documentation/cxx/tree/dbxml directory of the XSD +distribution. + +You will need the Berkeley DB XML libraries[1] installed in order to build +and run this example. The makefiles and project files for this example link +to the DB XML library names corresponding to version 2.3.X. Earlier and later +versions can also be used but may require adjustments to the library names +being linked to. + +Note that due to the incomplete DOM API implementation provided by DB +XML (as of version 2.3.10), the generated code and your application +should be compiled with the DBXML_DOM macro defined in order to avoid +using unsupported parts of the API. + +The example consists of the following files: + +library.xsd + XML Schema which describes a library of books. + +library.hxx +library.cxx + C++ types that represent the given vocabulary, a set of parsing + functions that convert XML instance documents to a tree-like in-memory + object model, and a set of serialization functions that convert the + object model back to XML. These are generated by XSD from library.xsd. + +driver.cxx + Driver for the example. It performs the following four operations on + the database: + + * Create a new document in DB from an object model + * Create an object model from a document in DB + * Create an object model from a document fragment in DB + * Update a document fragment in DB from an object model + + +To run the example simply execute: + +$ ./driver + + +[1] http://www.sleepycat.com/products/bdbxml.html diff --git a/xsd/examples/cxx/tree/dbxml/driver.cxx b/xsd/examples/cxx/tree/dbxml/driver.cxx new file mode 100644 index 0000000..56cbb4a --- /dev/null +++ b/xsd/examples/cxx/tree/dbxml/driver.cxx @@ -0,0 +1,175 @@ +// file : examples/cxx/tree/dbxml/driver.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : not copyrighted - public domain + +#include <memory> // std::auto_ptr +#include <string> +#include <cassert> +#include <iostream> + +#include <dbxml/DbXml.hpp> + +#include "library.hxx" + +using std::cerr; +using std::endl; +using std::string; +using std::auto_ptr; + +using namespace DbXml; +using namespace xsd::cxx; // for xml::string + +void +print_document (const string& desc, + XmlContainer container, + const string& name) +{ + XmlDocument doc (container.getDocument (name)); + + string content; + doc.getContent (content); + + cerr << endl + << desc << endl + << content << endl; +} + +int +main () +{ + try + { + using namespace library; + using xml_schema::date; + + XmlManager manager; + + { + XmlContainer container (manager.createContainer ("new.bdbxml")); + + XmlUpdateContext update_context (manager.createUpdateContext ()); + + XmlQueryContext context (manager.createQueryContext ()); + context.setNamespace ("lib", "http://www.codesynthesis.com/library"); + + + // Create a new document from an object model. + // + { + // Create a new catalog with one book. + // + catalog c; + + book b (20530902, // ISBN + "The Elements of Style", // Title + genre::reference, // Genre + "ES"); // ID + + author strunk ("William Strunk, Jr.", date (1869, 7, 1)); + strunk.died (date (1946, 9, 26)); + + b.author ().push_back (strunk); + c.book ().push_back (b); + + + // Create a new XML document. + // + XmlDocument doc (manager.createDocument ()); + doc.setName ("new.xml"); + + + // Obtain its DOM representation and add the root element. + // + xercesc::DOMDocument& dom_doc (*doc.getContentAsDOM ()); + + dom_doc.appendChild ( + dom_doc.createElementNS ( + xml::string ("http://www.codesynthesis.com/library").c_str (), + xml::string ("lib:catalog").c_str ())); + + + // Serialize the object model to the XML document. Also avoid + // re-initializing the Xerces-C++ runtime since XmlManager has + // it initialized. + // + catalog_ (dom_doc, c, xml_schema::flags::dont_initialize); + + + // Place the document into the container. + // + container.putDocument (doc, update_context); + + print_document ("after create:", container, "new.xml"); + } + + // Create an object model from a document in DB. + // + { + // Resolve the document in the container. + // + XmlDocument doc (container.getDocument ("new.xml")); + + + // Create the object model from the document's DOM. Also avoid + // re-initializing the Xerces-C++ runtime since XmlManager has + // it initialized. + // + auto_ptr<catalog> c (catalog_ (*doc.getContentAsDOM (), + xml_schema::flags::dont_initialize)); + + cerr << *c << endl; + } + + + // Lookup a document fragment. + // + + string query ("collection('new.bdbxml')/lib:catalog/book[@id='ES']"); + + // Find "The Elements of Style". + // + XmlValue v; + XmlResults results (manager.query (query, context)); + + if (results.next (v)) + { + // Create an object model from the document fragment. + // + auto_ptr<book> b ( + new book ( + *static_cast<xercesc::DOMElement*> (v.asNode ()))); + + cerr << *b << endl; + + + // Add another author, change the availability status. + // + author white ("E.B. White", date (1899, 7, 11)); + white.died (date (1985, 10, 1)); + + b->author ().push_back (white); + b->available (false); + + + // Update the document fragment from the object model. + // + *static_cast<xercesc::DOMElement*> (v.asNode ()) << *b; + + + // Update the document in the container. + // + XmlDocument doc (v.asDocument ()); + container.updateDocument (doc, update_context); + } + + print_document ("after update:", container, "new.xml"); + } + + manager.removeContainer ("new.bdbxml"); + } + catch (const std::exception& e) + { + cerr << e.what () << endl; + return 1; + } +} diff --git a/xsd/examples/cxx/tree/dbxml/library.xsd b/xsd/examples/cxx/tree/dbxml/library.xsd new file mode 100644 index 0000000..c71c312 --- /dev/null +++ b/xsd/examples/cxx/tree/dbxml/library.xsd @@ -0,0 +1,75 @@ +<?xml version="1.0"?> + +<!-- + +file : examples/cxx/tree/dbxml/library.xsd +author : Boris Kolpackov <boris@codesynthesis.com> +copyright : not copyrighted - public domain + +--> + +<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns:xse="http://www.codesynthesis.com/xmlns/xml-schema-extension" + xmlns:lib="http://www.codesynthesis.com/library" + targetNamespace="http://www.codesynthesis.com/library"> + + <xsd:simpleType name="isbn"> + <xsd:restriction base="xsd:unsignedInt"/> + </xsd:simpleType> + + + <xsd:complexType name="title"> + <xsd:simpleContent> + <xsd:extension base="xsd:string"> + <xsd:attribute name="lang" type="xsd:language"/> + </xsd:extension> + </xsd:simpleContent> + </xsd:complexType> + + <xsd:simpleType name="genre"> + <xsd:restriction base="xsd:string"> + <xsd:enumeration value="romance"/> + <xsd:enumeration value="fiction"/> + <xsd:enumeration value="horror"/> + <xsd:enumeration value="history"/> + <xsd:enumeration value="philosophy"/> + <xsd:enumeration value="reference"/> + </xsd:restriction> + </xsd:simpleType> + + <xsd:complexType name="person"> + <xsd:sequence> + <xsd:element name="name" type="xsd:string"/> + <xsd:element name="born" type="xsd:date"/> + <xsd:element name="died" type="xsd:date" minOccurs="0"/> + </xsd:sequence> + </xsd:complexType> + + <xsd:complexType name="author"> + <xsd:complexContent> + <xsd:extension base="lib:person"> + <xsd:attribute name="recommends" type="xsd:IDREF" xse:refType="lib:book"/> + </xsd:extension> + </xsd:complexContent> + </xsd:complexType> + + <xsd:complexType name="book"> + <xsd:sequence> + <xsd:element name="isbn" type="lib:isbn"/> + <xsd:element name="title" type="lib:title"/> + <xsd:element name="genre" type="lib:genre"/> + <xsd:element name="author" type="lib:author" maxOccurs="unbounded"/> + </xsd:sequence> + <xsd:attribute name="available" type="xsd:boolean" default="true"/> + <xsd:attribute name="id" type="xsd:ID" use="required"/> + </xsd:complexType> + + <xsd:complexType name="catalog"> + <xsd:sequence> + <xsd:element name="book" type="lib:book" maxOccurs="unbounded"/> + </xsd:sequence> + </xsd:complexType> + + <xsd:element name="catalog" type="lib:catalog"/> + +</xsd:schema> diff --git a/xsd/examples/cxx/tree/dbxml/makefile b/xsd/examples/cxx/tree/dbxml/makefile new file mode 100644 index 0000000..fe10d6d --- /dev/null +++ b/xsd/examples/cxx/tree/dbxml/makefile @@ -0,0 +1,107 @@ +# file : examples/cxx/tree/dbxml/makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../../build/bootstrap.make + +xsd := library.xsd +cxx := driver.cxx + +obj := $(addprefix $(out_base)/,$(cxx:.cxx=.o) $(xsd:.xsd=.o)) +dep := $(obj:.o=.o.d) + +driver := $(out_base)/driver +install := $(out_base)/.install +dist := $(out_base)/.dist +dist-win := $(out_base)/.dist-win +clean := $(out_base)/.clean + + +# Import. +# +$(call import,\ + $(scf_root)/import/libxerces-c/stub.make,\ + l: xerces_c.l,cpp-options: xerces_c.l.cpp-options) + +ifeq ($(filter $(MAKECMDGOALS),dist dist-win install),) +$(call import,\ + $(scf_root)/import/libdbxml/stub.make,\ + l: dbxml.l,cpp-options: dbxml.l.cpp-options) +endif + + +# Build. +# +$(driver): $(obj) $(xerces_c.l) $(dbxml.l) + +$(obj) $(dep): cpp_options := -I$(src_root)/libxsd -DDBXML_DOM +$(obj) $(dep): $(xerces_c.l.cpp-options) $(dbxml.l.cpp-options) + +genf := $(xsd:.xsd=.hxx) $(xsd:.xsd=.ixx) $(xsd:.xsd=.cxx) +gen := $(addprefix $(out_base)/,$(genf)) + +$(gen): xsd := $(out_root)/xsd/xsd +$(gen): xsd_options := --generate-serialization --generate-ostream +$(gen): $(out_root)/xsd/xsd + +$(call include-dep,$(dep)) + +# Convenience alias for default target. +# +$(out_base)/: $(driver) + + +# Install & Dist. +# +dist-common := $(out_base)/.dist-common + +$(install) $(dist) $(dist-win) $(dist-common): path := $(subst $(src_root)/,,$(src_base)) + +$(install): + $(call install-data,$(src_base)/README,$(install_doc_dir)/xsd/$(path)/README) + $(call install-data,$(src_base)/driver.cxx,$(install_doc_dir)/xsd/$(path)/driver.cxx) + $(call install-data,$(src_base)/library.xsd,$(install_doc_dir)/xsd/$(path)/library.xsd) + +$(dist-common): + $(call install-data,$(src_base)/driver.cxx,$(dist_prefix)/$(path)/driver.cxx) + $(call install-data,$(src_base)/library.xsd,$(dist_prefix)/$(path)/library.xsd) + +$(dist): $(dist-common) + $(call install-data,$(src_base)/README,$(dist_prefix)/$(path)/README) + +$(dist-win): $(dist-common) + $(call install-data,$(src_base)/README,$(dist_prefix)/$(path)/README.txt) + $(call message,,unix2dos $(dist_prefix)/$(path)/README.txt) + + +# Clean. +# +$(clean): $(driver).o.clean \ + $(addsuffix .cxx.clean,$(obj)) \ + $(addsuffix .cxx.clean,$(dep)) \ + $(addprefix $(out_base)/,$(xsd:.xsd=.cxx.xsd.clean)) + +# Generated .gitignore. +# +ifeq ($(out_base),$(src_base)) +$(gen): | $(out_base)/.gitignore +$(driver): | $(out_base)/.gitignore + +$(out_base)/.gitignore: files := driver $(genf) +$(clean): $(out_base)/.gitignore.clean + +$(call include,$(bld_root)/git/gitignore.make) +endif + +# How to. +# +$(call include,$(bld_root)/cxx/o-e.make) +$(call include,$(bld_root)/cxx/cxx-o.make) +$(call include,$(bld_root)/cxx/cxx-d.make) +$(call include,$(bld_root)/install.make) +$(call include,$(scf_root)/xsd/tree/xsd-cxx.make) + +# Dependencies. +# +$(call import,$(src_root)/xsd/makefile) diff --git a/xsd/examples/cxx/tree/embedded/README b/xsd/examples/cxx/tree/embedded/README new file mode 100644 index 0000000..266a8ff --- /dev/null +++ b/xsd/examples/cxx/tree/embedded/README @@ -0,0 +1,48 @@ +This example shows how to embed the binary representation of the schema +grammar into an application and then use it with the C++/Tree mapping to +parse and validate XML documents. This example is similar to the 'caching' +example except that it loads the binary representation of the schemas +embedded into the application instead of pre-parsing external schema files. + +The example consists of the following files: + +xsdbin.cxx + Tool for converting one or more XML Schema files to the compressed binary + representation. The output is written as a pair of C++ source files + containing the array with the binary data. Use the --help option to see + the tool's usage information. + +library.xsd + XML Schema which describes a library of books. + +library.xml + Sample XML instance document. + +library.hxx +library.cxx + C++ types that represent the given vocabulary and a set of parsing + functions that convert XML instance documents to a tree-like in-memory + object model. These are generated by the XSD compiler from library.xsd. + +library-schema.hxx +library-schema.cxx + Binary representation of the library.xsd schema. These files are generated + by the xsdbin tool. + +grammar-input-stream.hxx +grammar-input-stream.cxx + Input stream implementation with the special-purpose schema grammar + decompression algorithm. It is used to load the binary schema representation + produced by the xsdbin tool. + +driver.cxx + Driver for the example. It first sets up the Xerces-C++ DOM parser and + loads the embedded binary schema grammar for validation. It then performs + ten iterations that parse the input file to a DOM document using the DOM + parser and call one of the parsing functions that constructs the object + model from this DOM document. On each iteration the driver prints a number + of books in the object model to STDERR. + +To run the example on the sample XML instance document simply execute: + +$ ./driver library.xml diff --git a/xsd/examples/cxx/tree/embedded/driver.cxx b/xsd/examples/cxx/tree/embedded/driver.cxx new file mode 100644 index 0000000..6e31d3b --- /dev/null +++ b/xsd/examples/cxx/tree/embedded/driver.cxx @@ -0,0 +1,222 @@ +// file : examples/cxx/tree/embedded/driver.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : not copyrighted - public domain + +#include <memory> // std::auto_ptr +#include <fstream> +#include <iostream> + +#include <xercesc/dom/DOM.hpp> +#include <xercesc/util/XMLUniDefs.hpp> // chLatin_* +#include <xercesc/util/PlatformUtils.hpp> +#include <xercesc/validators/common/Grammar.hpp> // xercesc::Grammar +#include <xercesc/framework/Wrapper4InputSource.hpp> + +#if _XERCES_VERSION >= 30000 +# include <xercesc/framework/XMLGrammarPoolImpl.hpp> +#else +# include <xercesc/internal/XMLGrammarPoolImpl.hpp> +#endif + +#include <xsd/cxx/xml/string.hxx> +#include <xsd/cxx/xml/dom/auto-ptr.hxx> +#include <xsd/cxx/xml/dom/bits/error-handler-proxy.hxx> +#include <xsd/cxx/xml/sax/std-input-source.hxx> + +#include <xsd/cxx/tree/error-handler.hxx> + +#include "library.hxx" +#include "library-schema.hxx" +#include "grammar-input-stream.hxx" + +using namespace std; + +int +main (int argc, char* argv[]) +{ + if (argc != 2) + { + cerr << "usage: " << argv[0] << " library.xml" << endl; + return 1; + } + + int r (0); + + // We need to initialize the Xerces-C++ runtime because we + // are doing the XML-to-DOM parsing ourselves. + // + xercesc::XMLPlatformUtils::Initialize (); + + try + { + using namespace xercesc; + namespace xml = xsd::cxx::xml; + namespace tree = xsd::cxx::tree; + + // Create and load the grammar pool. + // + MemoryManager* mm (XMLPlatformUtils::fgMemoryManager); + + auto_ptr<XMLGrammarPool> gp (new XMLGrammarPoolImpl (mm)); + + try + { + grammar_input_stream is (library_schema, sizeof (library_schema)); + gp->deserializeGrammars(&is); + } + catch(const XSerializationException& e) + { + cerr << "unable to load schema: " << + xml::transcode<char> (e.getMessage ()) << endl; + return 1; + } + + // Lock the grammar pool. This is necessary if we plan to use the + // same grammar pool in multiple threads (this way we can reuse the + // same grammar in multiple parsers). Locking the pool disallows any + // modifications to the pool, such as an attempt by one of the threads + // to cache additional schemas. + // + gp->lockPool (); + + // Get an implementation of the Load-Store (LS) interface. + // + const XMLCh ls_id [] = {chLatin_L, chLatin_S, chNull}; + + DOMImplementation* impl ( + DOMImplementationRegistry::getDOMImplementation (ls_id)); + +#if _XERCES_VERSION >= 30000 + + // Xerces-C++ 3.0.0 and later. + // + xml::dom::auto_ptr<DOMLSParser> parser ( + impl->createLSParser ( + DOMImplementationLS::MODE_SYNCHRONOUS, 0, mm, gp.get ())); + + DOMConfiguration* conf (parser->getDomConfig ()); + + // Discard comment nodes in the document. + // + conf->setParameter (XMLUni::fgDOMComments, false); + + // Enable datatype normalization. + // + conf->setParameter (XMLUni::fgDOMDatatypeNormalization, true); + + // Do not create EntityReference nodes in the DOM tree. No + // EntityReference nodes will be created, only the nodes + // corresponding to their fully expanded substitution text + // will be created. + // + conf->setParameter (XMLUni::fgDOMEntities, false); + + // Perform namespace processing. + // + conf->setParameter (XMLUni::fgDOMNamespaces, true); + + // Do not include ignorable whitespace in the DOM tree. + // + conf->setParameter (XMLUni::fgDOMElementContentWhitespace, false); + + // Enable validation. + // + conf->setParameter (XMLUni::fgDOMValidate, true); + conf->setParameter (XMLUni::fgXercesSchema, true); + conf->setParameter (XMLUni::fgXercesSchemaFullChecking, false); + + // Xerces-C++ 3.1.0 is the first version with working multi import + // support. + // +#if _XERCES_VERSION >= 30100 + conf->setParameter (XMLUni::fgXercesHandleMultipleImports, true); +#endif + + // Use the loaded grammar during parsing. + // + conf->setParameter (XMLUni::fgXercesUseCachedGrammarInParse, true); + + // Disable loading schemas via other means (e.g., schemaLocation). + // + conf->setParameter (XMLUni::fgXercesLoadSchema, false); + + // We will release the DOM document ourselves. + // + conf->setParameter (XMLUni::fgXercesUserAdoptsDOMDocument, true); + + // Set error handler. + // + tree::error_handler<char> eh; + xml::dom::bits::error_handler_proxy<char> ehp (eh); + conf->setParameter (XMLUni::fgDOMErrorHandler, &ehp); + +#else // _XERCES_VERSION >= 30000 + + // Same as above but for Xerces-C++ 2 series. + // + xml::dom::auto_ptr<DOMBuilder> parser ( + impl->createDOMBuilder( + DOMImplementationLS::MODE_SYNCHRONOUS, 0, mm, gp.get ())); + + + parser->setFeature (XMLUni::fgDOMComments, false); + parser->setFeature (XMLUni::fgDOMDatatypeNormalization, true); + parser->setFeature (XMLUni::fgDOMEntities, false); + parser->setFeature (XMLUni::fgDOMNamespaces, true); + parser->setFeature (XMLUni::fgDOMWhitespaceInElementContent, false); + parser->setFeature (XMLUni::fgDOMValidation, true); + parser->setFeature (XMLUni::fgXercesSchema, true); + parser->setFeature (XMLUni::fgXercesSchemaFullChecking, false); + parser->setFeature (XMLUni::fgXercesUseCachedGrammarInParse, true); + parser->setFeature (XMLUni::fgXercesUserAdoptsDOMDocument, true); + + tree::error_handler<char> eh; + xml::dom::bits::error_handler_proxy<char> ehp (eh); + parser->setErrorHandler (&ehp); + +#endif // _XERCES_VERSION >= 30000 + + // Parse XML documents. + // + for (unsigned long i (0); i < 10; ++i) + { + ifstream ifs; + ifs.exceptions (ifstream::badbit | ifstream::failbit); + ifs.open (argv[1]); + + // Wrap the standard input stream. + // + xml::sax::std_input_source isrc (ifs, argv[1]); + Wrapper4InputSource wrap (&isrc, false); + + // Parse XML to DOM. + // +#if _XERCES_VERSION >= 30000 + xml_schema::dom::auto_ptr<DOMDocument> doc (parser->parse (&wrap)); +#else + xml_schema::dom::auto_ptr<DOMDocument> doc (parser->parse (wrap)); +#endif + + eh.throw_if_failed<xml_schema::parsing> (); + + // Parse DOM to the object model. + // + auto_ptr<library::catalog> c (library::catalog_ (*doc)); + + cerr << "catalog with " << c->book ().size () << " books" << endl; + } + } + catch (const xml_schema::exception& e) + { + cerr << e << endl; + r = 1; + } + catch (const std::ios_base::failure&) + { + cerr << argv[1] << ": unable to open or read failure" << endl; + r = 1; + } + + xercesc::XMLPlatformUtils::Terminate (); + return r; +} diff --git a/xsd/examples/cxx/tree/embedded/grammar-input-stream.cxx b/xsd/examples/cxx/tree/embedded/grammar-input-stream.cxx new file mode 100644 index 0000000..0c94ea6 --- /dev/null +++ b/xsd/examples/cxx/tree/embedded/grammar-input-stream.cxx @@ -0,0 +1,115 @@ +// file : examples/cxx/tree/embedded/grammar-input-stream.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : not copyrighted - public domain + +#include <cassert> +#include "grammar-input-stream.hxx" + +grammar_input_stream:: +grammar_input_stream (const XMLByte* data, std::size_t size) + : data_ (data), + size_ (size), + pos_ (0), + vpos_ (0), + cseq_ (0), + add_zero_ (false) +{ +} + +#if _XERCES_VERSION >= 30000 +XMLFilePos grammar_input_stream:: +curPos () const +{ + return static_cast<XMLFilePos> (vpos_); +} +#else +unsigned int grammar_input_stream:: +curPos () const +{ + return static_cast<unsigned int> (vpos_); +} +#endif + +#if _XERCES_VERSION >= 30000 +XMLSize_t grammar_input_stream:: +readBytes (XMLByte* const buf, const XMLSize_t size) +#else +unsigned int grammar_input_stream:: +readBytes (XMLByte* const buf, const unsigned int size) +#endif +{ + std::size_t i (0); + + // Add a zero from the alternating sequence if it didn't + // fit on the previous read. + // + if (add_zero_) + { + buf[i++] = 0; + add_zero_ = false; + } + + // If have an unfinished sequential sequence, output it now. + // + if (cseq_ != 0 && !alt_) + { + for (; cseq_ != 0 && i < size; --cseq_) + buf[i++] = 0; + } + + for (; i < size && pos_ < size_;) + { + XMLByte b = buf[i++] = data_[pos_++]; + + // See if we are in a compression sequence. + // + if (cseq_ != 0) + { + if (i < size) + buf[i++] = 0; + else + add_zero_ = true; // Add it on the next read. + + cseq_--; + continue; + } + + // If we are not in a compression sequence and this byte is + // not zero then we are done. + // + if (b != 0) + continue; + + // We have a zero. + // + assert (pos_ < size_); // There has to be another byte. + unsigned char v (static_cast<unsigned char> (data_[pos_++])); + alt_ = (v & 128) != 0; + cseq_ = v & 127; + + // If it is a sequential sequence, output as many zeros as + // we can. + // + if (!alt_) + { + for (; cseq_ != 0 && i < size; --cseq_) + buf[i++] = 0; + } + } + + vpos_ += i; + +#if _XERCES_VERSION >= 30000 + return static_cast<XMLSize_t> (i); +#else + return static_cast<unsigned int> (i); +#endif +} + +#if _XERCES_VERSION >= 30000 +const XMLCh* grammar_input_stream:: +getContentType () const +{ + return 0; +} +#endif diff --git a/xsd/examples/cxx/tree/embedded/grammar-input-stream.hxx b/xsd/examples/cxx/tree/embedded/grammar-input-stream.hxx new file mode 100644 index 0000000..a1b73c6 --- /dev/null +++ b/xsd/examples/cxx/tree/embedded/grammar-input-stream.hxx @@ -0,0 +1,53 @@ +// file : examples/cxx/tree/embedded/grammar-input-stream.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : not copyrighted - public domain + +#ifndef GRAMMAR_INPUT_STREAM_HXX +#define GRAMMAR_INPUT_STREAM_HXX + +#include <cstddef> +#include <xercesc/util/BinInputStream.hpp> + +// Memory buffer input stream with the special-purpose schema +// grammar decompression. +// +class grammar_input_stream: public xercesc::BinInputStream +{ +public : + grammar_input_stream (const XMLByte* data, std::size_t size); + +#if _XERCES_VERSION >= 30000 + + virtual XMLFilePos + curPos () const; + + virtual XMLSize_t + readBytes (XMLByte* const buf, const XMLSize_t size); + + virtual const XMLCh* + getContentType () const; + +#else + + virtual unsigned int + curPos () const; + + virtual unsigned int + readBytes (XMLByte* const buf, const unsigned int size); + +#endif + +private : + const XMLByte* data_; + std::size_t size_; + std::size_t pos_; + std::size_t vpos_; + + // Compression data. + // + size_t cseq_; // Number of bytes left in a compression sequence. + bool alt_; // Alternating or sequential sequence. + bool add_zero_; // Add a zero on the next read. +}; + +#endif // GRAMMAR_INPUT_STREAM_HXX diff --git a/xsd/examples/cxx/tree/embedded/library.xml b/xsd/examples/cxx/tree/embedded/library.xml new file mode 100644 index 0000000..cb8faf3 --- /dev/null +++ b/xsd/examples/cxx/tree/embedded/library.xml @@ -0,0 +1,53 @@ +<?xml version="1.0"?> + +<!-- + +file : examples/cxx/tree/embedded/library.xml +author : Boris Kolpackov <boris@codesynthesis.com> +copyright : not copyrighted - public domain + +--> + +<lib:catalog xmlns:lib="http://www.codesynthesis.com/library" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.codesynthesis.com/library library.xsd"> + + <book id="MM" available="false"> + <isbn>0679760806</isbn> + <title>The Master and Margarita</title> + <genre>fiction</genre> + + <author recommends="WP"> + <name>Mikhail Bulgakov</name> + <born>1891-05-15</born> + <died>1940-03-10</died> + </author> + </book> + + + <book id="WP"> + <isbn>0679600841</isbn> + <title>War and Peace</title> + <genre>history</genre> + + <author recommends="CP"> + <name>Leo Tolstoy</name> + <born>1828-09-09</born> + <died>1910-11-20</died> + </author> + </book> + + + <book id="CP" available="false"> + <isbn>0679420290</isbn> + <title>Crime and Punishment</title> + <genre>philosophy</genre> + + <author> + <name>Fyodor Dostoevsky</name> + <born>1821-11-11</born> + <died>1881-02-09</died> + </author> + </book> + +</lib:catalog> diff --git a/xsd/examples/cxx/tree/embedded/library.xsd b/xsd/examples/cxx/tree/embedded/library.xsd new file mode 100644 index 0000000..f1b4dac --- /dev/null +++ b/xsd/examples/cxx/tree/embedded/library.xsd @@ -0,0 +1,73 @@ +<?xml version="1.0"?> + +<!-- + +file : examples/cxx/tree/embedded/library.xsd +author : Boris Kolpackov <boris@codesynthesis.com> +copyright : not copyrighted - public domain + +--> + +<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns:xse="http://www.codesynthesis.com/xmlns/xml-schema-extension" + xmlns:lib="http://www.codesynthesis.com/library" + targetNamespace="http://www.codesynthesis.com/library"> + + <xsd:simpleType name="isbn"> + <xsd:restriction base="xsd:unsignedInt"/> + </xsd:simpleType> + + <xsd:complexType name="title"> + <xsd:simpleContent> + <xsd:extension base="xsd:string"> + <xsd:attribute name="lang" type="xsd:language"/> + </xsd:extension> + </xsd:simpleContent> + </xsd:complexType> + + <xsd:simpleType name="genre"> + <xsd:restriction base="xsd:string"> + <xsd:enumeration value="romance"/> + <xsd:enumeration value="fiction"/> + <xsd:enumeration value="horror"/> + <xsd:enumeration value="history"/> + <xsd:enumeration value="philosophy"/> + </xsd:restriction> + </xsd:simpleType> + + <xsd:complexType name="person"> + <xsd:sequence> + <xsd:element name="name" type="xsd:string"/> + <xsd:element name="born" type="xsd:date"/> + <xsd:element name="died" type="xsd:date" minOccurs="0"/> + </xsd:sequence> + </xsd:complexType> + + <xsd:complexType name="author"> + <xsd:complexContent> + <xsd:extension base="lib:person"> + <xsd:attribute name="recommends" type="xsd:IDREF" xse:refType="lib:book"/> + </xsd:extension> + </xsd:complexContent> + </xsd:complexType> + + <xsd:complexType name="book"> + <xsd:sequence> + <xsd:element name="isbn" type="lib:isbn"/> + <xsd:element name="title" type="lib:title"/> + <xsd:element name="genre" type="lib:genre"/> + <xsd:element name="author" type="lib:author" maxOccurs="unbounded"/> + </xsd:sequence> + <xsd:attribute name="available" type="xsd:boolean" default="true"/> + <xsd:attribute name="id" type="xsd:ID" use="required"/> + </xsd:complexType> + + <xsd:complexType name="catalog"> + <xsd:sequence> + <xsd:element name="book" type="lib:book" maxOccurs="unbounded"/> + </xsd:sequence> + </xsd:complexType> + + <xsd:element name="catalog" type="lib:catalog"/> + +</xsd:schema> diff --git a/xsd/examples/cxx/tree/embedded/makefile b/xsd/examples/cxx/tree/embedded/makefile new file mode 100644 index 0000000..0550bd5 --- /dev/null +++ b/xsd/examples/cxx/tree/embedded/makefile @@ -0,0 +1,123 @@ +# file : examples/cxx/tree/embedded/makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../../build/bootstrap.make + +xsd := library.xsd +cxx := driver.cxx grammar-input-stream.cxx + +obj := $(addprefix $(out_base)/,$(cxx:.cxx=.o) $(xsd:.xsd=.o) \ +$(xsd:.xsd=-schema.o)) +obj2 := $(out_base)/xsdbin.o +dep := $(obj:.o=.o.d) $(obj2:.o=.o.d) + +driver := $(out_base)/driver +xsdbin := $(out_base)/xsdbin +install := $(out_base)/.install +dist := $(out_base)/.dist +dist-win := $(out_base)/.dist-win +clean := $(out_base)/.clean + + +# Import. +# +$(call import,\ + $(scf_root)/import/libxerces-c/stub.make,\ + l: xerces_c.l,cpp-options: xerces_c.l.cpp-options) + + +# Build. +# +$(driver): $(obj) $(xerces_c.l) +$(xsdbin): $(obj2) $(xerces_c.l) + +$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(obj2) $(dep): $(xerces_c.l.cpp-options) + +genf := $(xsd:.xsd=.hxx) $(xsd:.xsd=.ixx) $(xsd:.xsd=.cxx) +gen := $(addprefix $(out_base)/,$(genf)) + +$(gen): xsd := $(out_root)/xsd/xsd +$(gen): xsd_options := +$(gen): $(out_root)/xsd/xsd + +genf += $(xsd:.xsd=-schema.hxx) $(xsd:.xsd=-schema.cxx) + +.PRECIOUS: $(out_base)/%-schema.hxx $(out_base)/%-schema.cxx +$(out_base)/%: xsdbin := $(xsdbin) +$(out_base)/%-schema.hxx $(out_base)/%-schema.cxx: $(src_base)/%.xsd $(xsdbin) + $(call message,xsdbin $<,$(xsdbin) --output-dir $(out_base) $<) + +$(call include-dep,$(dep)) + +# Convenience alias for default target. +# +$(out_base)/: $(driver) + + +# Install & Dist. +# +dist-common := $(out_base)/.dist-common + +$(install) $(dist) $(dist-win) $(dist-common): path := $(subst $(src_root)/,,$(src_base)) + +$(install): + $(call install-data,$(src_base)/README,$(install_doc_dir)/xsd/$(path)/README) + $(call install-data,$(src_base)/xsdbin.cxx,$(install_doc_dir)/xsd/$(path)/xsdbin.cxx) + $(call install-data,$(src_base)/driver.cxx,$(install_doc_dir)/xsd/$(path)/driver.cxx) + $(call install-data,$(src_base)/grammar-input-stream.hxx,$(install_doc_dir)/xsd/$(path)/grammar-input-stream.hxx) + $(call install-data,$(src_base)/grammar-input-stream.cxx,$(install_doc_dir)/xsd/$(path)/grammar-input-stream.cxx) + $(call install-data,$(src_base)/library.xsd,$(install_doc_dir)/xsd/$(path)/library.xsd) + $(call install-data,$(src_base)/library.xml,$(install_doc_dir)/xsd/$(path)/library.xml) + +$(dist-common): + $(call install-data,$(src_base)/xsdbin.cxx,$(dist_prefix)/$(path)/xsdbin.cxx) + $(call install-data,$(src_base)/driver.cxx,$(dist_prefix)/$(path)/driver.cxx) + $(call install-data,$(src_base)/grammar-input-stream.hxx,$(dist_prefix)/$(path)/grammar-input-stream.hxx) + $(call install-data,$(src_base)/grammar-input-stream.cxx,$(dist_prefix)/$(path)/grammar-input-stream.cxx) + $(call install-data,$(src_base)/library.xsd,$(dist_prefix)/$(path)/library.xsd) + $(call install-data,$(src_base)/library.xml,$(dist_prefix)/$(path)/library.xml) + +$(dist): $(dist-common) + $(call install-data,$(src_base)/README,$(dist_prefix)/$(path)/README) + +$(dist-win): $(dist-common) + $(call install-data,$(src_base)/README,$(dist_prefix)/$(path)/README.txt) + $(call message,,unix2dos $(dist_prefix)/$(path)/README.txt) + + +# Clean. +# +$(clean): files := $(out_base)/$(xsd:.xsd=-schema.?xx) +$(clean): $(driver).o.clean $(xsdbin).o.clean \ + $(addsuffix .cxx.clean,$(obj)) \ + $(addsuffix .cxx.clean,$(obj2)) \ + $(addsuffix .cxx.clean,$(dep)) \ + $(addprefix $(out_base)/,$(xsd:.xsd=.cxx.xsd.clean)) + $(call message,rm '$(out_base)/*-schema.?xx',rm -f $(files)) + +# Generated .gitignore. +# +ifeq ($(out_base),$(src_base)) +$(gen): | $(out_base)/.gitignore +$(driver): | $(out_base)/.gitignore + +$(out_base)/.gitignore: files := driver xsdbin $(genf) +$(clean): $(out_base)/.gitignore.clean + +$(call include,$(bld_root)/git/gitignore.make) +endif + +# How to. +# +$(call include,$(bld_root)/cxx/o-e.make) +$(call include,$(bld_root)/cxx/cxx-o.make) +$(call include,$(bld_root)/cxx/cxx-d.make) +$(call include,$(bld_root)/install.make) +$(call include,$(scf_root)/xsd/tree/xsd-cxx.make) + +# Dependencies. +# +$(call import,$(src_root)/xsd/makefile) diff --git a/xsd/examples/cxx/tree/embedded/xsdbin.cxx b/xsd/examples/cxx/tree/embedded/xsdbin.cxx new file mode 100644 index 0000000..53e2533 --- /dev/null +++ b/xsd/examples/cxx/tree/embedded/xsdbin.cxx @@ -0,0 +1,505 @@ +// file : examples/cxx/tree/embedded/xsdbin.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : not copyrighted - public domain + +// This program loads the XML Schema file(s) and converts them to +// the Xerces-C++ binary schema format which can then be embedded +// into C++ programs and used to validate XML documents. The output +// is written as a C++ source file containing the array with the +// binary data. +// + +#include <string> +#include <memory> // std::auto_ptr +#include <cstddef> // std::size_t +#include <fstream> +#include <iostream> + +#include <xercesc/util/XMLUni.hpp> +#include <xercesc/util/XMLString.hpp> +#include <xercesc/util/PlatformUtils.hpp> +#include <xercesc/util/XercesVersion.hpp> + +#include <xercesc/internal/BinMemOutputStream.hpp> +#include <xercesc/validators/common/Grammar.hpp> + +#include <xercesc/sax/ErrorHandler.hpp> +#include <xercesc/sax/SAXParseException.hpp> +#include <xercesc/sax2/SAX2XMLReader.hpp> +#include <xercesc/sax2/XMLReaderFactory.hpp> + +#if _XERCES_VERSION >= 30000 +# include <xercesc/framework/XMLGrammarPoolImpl.hpp> +#else +# include <xercesc/internal/XMLGrammarPoolImpl.hpp> +#endif + +using namespace std; +using namespace xercesc; + +class error_handler: public ErrorHandler +{ +public: + error_handler () + : failed_ (false) + { + } + + bool + failed () const + { + return failed_; + } + + enum severity {s_warning, s_error, s_fatal}; + + virtual void + warning (const SAXParseException&); + + virtual void + error (const SAXParseException&); + + virtual void + fatalError (const SAXParseException&); + + virtual void + resetErrors () + { + failed_ = false; + } + + void + handle (const SAXParseException&, severity); + +private: + bool failed_; +}; + +void +cxx_escape (string&); + +int +main (int argc, char* argv[]) +{ + const char* hxx_suffix = "-schema.hxx"; + const char* cxx_suffix = "-schema.cxx"; + + string name; + string base; + string outdir; + + class usage {}; + + int argi (1); + bool help (false); + bool multi_import (true); + bool verbose (false); + + try + { + for (; argi < argc; ++argi) + { + string a (argv[argi]); + + if (a == "--help") + { + help = true; + throw usage (); + } + else if (a == "--verbose") + { + verbose = true; + } + else if (a == "--hxx-suffix") + { + if (++argi >= argc) + throw usage (); + + hxx_suffix = argv[argi]; + } + else if (a == "--cxx-suffix") + { + if (++argi >= argc) + throw usage (); + + cxx_suffix = argv[argi]; + } + else if (a == "--output-dir") + { + if (++argi >= argc) + throw usage (); + + outdir = argv[argi]; + } + else if (a == "--array-name") + { + if (++argi >= argc) + throw usage (); + + name = argv[argi]; + } + else if (a == "--disable-multi-import") + { + multi_import = false; + } + else + break; + } + + if (argi >= argc) + { + cerr << "no input file specified" << endl; + throw usage (); + } + + base = argv[argi]; + } + catch (usage const&) + { + cerr << "Usage: " << argv[0] << " [options] <files>" << endl + << "Options:" << endl + << " --help Print usage information and exit." << endl + << " --verbose Print progress information." << endl + << " --output-dir <dir> Write generated files to <dir>." << endl + << " --hxx-suffix <sfx> Header file suffix instead of '-schema.hxx'." << endl + << " --cxx-suffix <sfx> Source file suffix instead of '-schema.cxx'." << endl + << " --array-name <name> Binary data array name." << endl + << " --disable-multi-import Disable multiple import support." << endl + << endl; + + return help ? 0 : 1; + } + + XMLPlatformUtils::Initialize (); + + { + MemoryManager* mm (XMLPlatformUtils::fgMemoryManager); + + auto_ptr<XMLGrammarPool> gp (new XMLGrammarPoolImpl (mm)); + + // Load the schemas into grammar pool. + // + { + auto_ptr<SAX2XMLReader> parser ( + XMLReaderFactory::createXMLReader (mm, gp.get ())); + + parser->setFeature (XMLUni::fgSAX2CoreNameSpaces, true); + parser->setFeature (XMLUni::fgSAX2CoreNameSpacePrefixes, true); + parser->setFeature (XMLUni::fgSAX2CoreValidation, true); + parser->setFeature (XMLUni::fgXercesSchema, true); + parser->setFeature (XMLUni::fgXercesSchemaFullChecking, true); + parser->setFeature (XMLUni::fgXercesValidationErrorAsFatal, true); + + // Xerces-C++ 3.1.0 is the first version with working multi import + // support. + // +#if _XERCES_VERSION >= 30100 + parser->setFeature (XMLUni::fgXercesHandleMultipleImports, multi_import); +#endif + + error_handler eh; + parser->setErrorHandler (&eh); + + for (; argi < argc; ++argi) + { + if (verbose) + cerr << "loading " << argv[argi] << endl; + + if (!parser->loadGrammar (argv[argi], Grammar::SchemaGrammarType, true)) + { + cerr << argv[argi] << ": error: unable to load" << endl; + return 1; + } + + if (eh.failed ()) + return 1; + } + } + + // Get the binary representation. + // + BinMemOutputStream data; + + try + { + gp->serializeGrammars (&data); + } + catch (const XSerializationException& e) + { + char* msg (XMLString::transcode (e.getMessage ())); + cerr << "error: " << msg << endl; + XMLString::release (&msg); + return 1; + } + + size_t n (static_cast<size_t> (data.curPos ())); + const unsigned char* buf ( + static_cast<const unsigned char*> (data.getRawBuffer ())); + + if (verbose) + cerr << "uncomressed data size " << n << " bytes" << endl; + + // Compress zeros. + // + size_t cn (0); + unsigned char* cbuf = new unsigned char[n]; + + size_t cseq (0); // Number of bytes left in a compression sequence. + bool alt (false); // Alternating or sequential sequence. + + for (size_t i (0); i < n;) + { + unsigned char v (buf[i++]); + + // See if we are in a compression sequence. + // + if (cseq != 0) + { + // See if this byte needs to be copied. + // + if (alt && cseq % 2 == 0) + cbuf[cn++] = v; + + cseq--; + continue; + } + + // If we are not in a compression sequence and this byte is + // not zero then simply copy it. + // + if (v != 0) + { + cbuf[cn++] = v; + continue; + } + + // We have a zero. + // + cbuf[cn++] = 0; + + // See if we can start a new compression sequence. + // + if (i < n) + { + if (buf[i] == 0) + { + // Sequential sequence. See how far it runs. + // + alt = false; + + for (cseq = 1; cseq < 127 && cseq + i < n; cseq++) + if (buf[cseq + i] != 0) + break; + } + else if (i + 1 < n && buf[i + 1] == 0) + { + // Alternating sequence. See how far it runs. + // + alt = true; + + for (cseq = 1; cseq < 127 && cseq * 2 + i + 1 < n; cseq++) + { + if (buf[cseq * 2 + i + 1] != 0) + break; + + // For longer sequences prefer sequential to alternating. + // + if (cseq > 2 && + buf[cseq * 2 + i] == 0 && + buf[(cseq - 1) * 2 + i] == 0 && + buf[(cseq - 2) * 2 + i] == 0) + { + cseq -= 2; + break; + } + } + + cseq *= 2; + } + } + + if (cseq != 0) + { + cbuf[cn++] = static_cast<unsigned char> ( + alt ? (128 | cseq / 2) : cseq); + } + else + cbuf[cn++] = 0; + } + + if (verbose) + cerr << "comressed data size " << cn << " bytes" << endl; + + buf = cbuf; + n = cn; + + // Figure out the file names. + // + string::size_type p (base.rfind ('/')), p1 (base.rfind ('\\')); + + if (p1 != string::npos && p1 > p) + p = p1; + + if (p != string::npos) + base = string (base, p + 1); + + p = base.rfind ('.'); + + if (p != string::npos) + base.resize (p); + + string hxx (base + hxx_suffix); + string cxx (base + cxx_suffix); + + if (!outdir.empty ()) + { +#if defined (WIN32) || defined (__WIN32__) + hxx = outdir + '\\' + hxx; + cxx = outdir + '\\' + cxx; +#else + hxx = outdir + '/' + hxx; + cxx = outdir + '/' + cxx; +#endif + } + + if (name.empty ()) + { + name = base + "_schema"; + cxx_escape (name); + } + + // Write header. + // + { + ofstream os (hxx.c_str ()); + + if (!os.is_open ()) + { + cerr << hxx << ": error: unable to open" << endl; + return 1; + } + + os << "// Automatically generated. Do not edit." << endl + << "//" << endl + << endl + << "#include <xercesc/util/XercesDefs.hpp>" << endl + << endl + << "extern const XMLByte " << name << "[" << n << "UL];" << endl; + } + + { + ofstream os (cxx.c_str ()); + + if (!os.is_open ()) + { + cerr << cxx << ": error: unable to open" << endl; + return 1; + } + + os << "// Automatically generated. Do not edit." << endl + << "//" << endl + << endl + << "#include <xercesc/util/XercesDefs.hpp>" << endl + << "#include <xercesc/util/XercesVersion.hpp>" << endl + << endl + << "#if XERCES_GRAMMAR_SERIALIZATION_LEVEL != " << + XERCES_GRAMMAR_SERIALIZATION_LEVEL << endl + << "# error incompatible Xerces-C++ version detected" << endl + << "#endif" << endl + << endl + << "extern const XMLByte " << name << "[" << n << "UL] =" << endl + << "{"; + + for (size_t i (0); i < n; ++i) + { + if (i != 0) + os << ','; + + os << (i % 12 == 0 ? "\n " : " ") << "0x"; + os.width (2); + os.fill ('0'); + os << hex << static_cast<unsigned short> (buf[i]); + } + + os << endl + << "};" << endl + << endl; + } + + delete[] cbuf; + } + + XMLPlatformUtils::Terminate (); +} + +void +cxx_escape (string& s) +{ + for (string::size_type i (0); i < s.size (); ++i) + { + char& c (s[i]); + + if (i == 0) + { + if (!((c >= 'a' && c <= 'z') || + (c >= 'A' && c <= 'Z') || + c == '_')) + c = '_'; + } + else + { + if (!((c >= 'a' && c <= 'z') || + (c >= 'A' && c <= 'Z') || + (c >= '0' && c <= '9') || + c == '_')) + c = '_'; + } + } +} + +void error_handler:: +warning (const SAXParseException& e) +{ + handle (e, s_warning); +} + +void error_handler:: +error (const SAXParseException& e) +{ + failed_ = true; + handle (e, s_error); +} + +void error_handler:: +fatalError (const SAXParseException& e) +{ + failed_ = true; + handle (e, s_fatal); +} + +void error_handler:: +handle (const SAXParseException& e, severity s) +{ + const XMLCh* xid (e.getPublicId ()); + + if (xid == 0) + xid = e.getSystemId (); + + char* id (XMLString::transcode (xid)); + char* msg (XMLString::transcode (e.getMessage ())); + + cerr << id << ":"; + +#if _XERCES_VERSION >= 30000 + cerr << e.getLineNumber () << ":" << e.getColumnNumber () << " "; +#else + XMLSSize_t l (e.getLineNumber ()); + XMLSSize_t c (e.getColumnNumber ()); + cerr << (l == -1 ? 0 : l) << ":" << (c == -1 ? 0 : c) << " "; +#endif + + cerr << (s == s_warning ? "warning: " : "error: ") << msg << endl; + + XMLString::release (&id); + XMLString::release (&msg); +} diff --git a/xsd/examples/cxx/tree/hello/README b/xsd/examples/cxx/tree/hello/README new file mode 100644 index 0000000..bb98584 --- /dev/null +++ b/xsd/examples/cxx/tree/hello/README @@ -0,0 +1,26 @@ +This is a "Hello, world!" example that shows how to use the C++/Tree +mapping to access XML instance documents described by XML Schema +definitions. + +The example consists of the following files: + +hello.xsd + XML Schema which describes "hello" instance documents. + +hello.xml + Sample XML instance document. + +hello.hxx +hello.cxx + C++ types that represent the given vocabulary and a set of parsing + functions that convert XML instance documents to a tree-like in-memory + object model. These are generated by XSD from hello.xsd. + +driver.cxx + Driver for the example. It first calls one of the parsing functions + that constructs the object model from the input file. It then prints + the content of the object model to STDERR. + +To run the example on the sample XML instance document simply execute: + +$ ./driver hello.xml diff --git a/xsd/examples/cxx/tree/hello/driver.cxx b/xsd/examples/cxx/tree/hello/driver.cxx new file mode 100644 index 0000000..6ea6823 --- /dev/null +++ b/xsd/examples/cxx/tree/hello/driver.cxx @@ -0,0 +1,37 @@ +// file : examples/cxx/tree/hello/driver.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : not copyrighted - public domain + +#include <memory> // std::auto_ptr +#include <iostream> + +#include "hello.hxx" + +using namespace std; + +int +main (int argc, char* argv[]) +{ + if (argc != 2) + { + cerr << "usage: " << argv[0] << " hello.xml" << endl; + return 1; + } + + try + { + auto_ptr<hello_t> h (hello (argv[1])); + + for (hello_t::name_const_iterator i (h->name ().begin ()); + i != h->name ().end (); + ++i) + { + cout << h->greeting () << ", " << *i << "!" << endl; + } + } + catch (const xml_schema::exception& e) + { + cerr << e << endl; + return 1; + } +} diff --git a/xsd/examples/cxx/tree/hello/hello.xml b/xsd/examples/cxx/tree/hello/hello.xml new file mode 100644 index 0000000..bcde610 --- /dev/null +++ b/xsd/examples/cxx/tree/hello/hello.xml @@ -0,0 +1,20 @@ +<?xml version="1.0"?> + +<!-- + +file : examples/cxx/tree/hello/hello.xml +author : Boris Kolpackov <boris@codesynthesis.com> +copyright : not copyrighted - public domain + +--> + +<hello xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="hello.xsd"> + + <greeting>Hello</greeting> + + <name>sun</name> + <name>moon</name> + <name>world</name> + +</hello> diff --git a/xsd/examples/cxx/tree/hello/hello.xsd b/xsd/examples/cxx/tree/hello/hello.xsd new file mode 100644 index 0000000..e8f5147 --- /dev/null +++ b/xsd/examples/cxx/tree/hello/hello.xsd @@ -0,0 +1,53 @@ +<?xml version="1.0"?> + +<!-- + +file : examples/cxx/tree/hello/hello.xsd +author : Boris Kolpackov <boris@codesynthesis.com> +copyright : not copyrighted - public domain + +--> + +<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + + <xsd:complexType name="hello_t"> + + <xsd:annotation> + <xsd:documentation> + The hello_t type consists of a greeting phrase and a + collection of names to which this greeting applies. + </xsd:documentation> + </xsd:annotation> + + <xsd:sequence> + + <xsd:element name="greeting" type="xsd:string"> + <xsd:annotation> + <xsd:documentation> + The greeting element contains the greeting phrase + for this hello object. + </xsd:documentation> + </xsd:annotation> + </xsd:element> + + <xsd:element name="name" type="xsd:string" maxOccurs="unbounded"> + <xsd:annotation> + <xsd:documentation> + The name elements contains names to be greeted. + </xsd:documentation> + </xsd:annotation> + </xsd:element> + + </xsd:sequence> + </xsd:complexType> + + <xsd:element name="hello" type="hello_t"> + <xsd:annotation> + <xsd:documentation> + The hello element is a root of the Hello XML vocabulary. + Every conforming document should start with this element. + </xsd:documentation> + </xsd:annotation> + </xsd:element> + +</xsd:schema> diff --git a/xsd/examples/cxx/tree/hello/makefile b/xsd/examples/cxx/tree/hello/makefile new file mode 100644 index 0000000..b2618ca --- /dev/null +++ b/xsd/examples/cxx/tree/hello/makefile @@ -0,0 +1,103 @@ +# file : examples/cxx/tree/hello/makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../../build/bootstrap.make + +xsd := hello.xsd +cxx := driver.cxx + +obj := $(addprefix $(out_base)/,$(cxx:.cxx=.o) $(xsd:.xsd=.o)) +dep := $(obj:.o=.o.d) + +driver := $(out_base)/driver +install := $(out_base)/.install +dist := $(out_base)/.dist +dist-win := $(out_base)/.dist-win +clean := $(out_base)/.clean + + +# Import. +# +$(call import,\ + $(scf_root)/import/libxerces-c/stub.make,\ + l: xerces_c.l,cpp-options: xerces_c.l.cpp-options) + + +# Build. +# +$(driver): $(obj) $(xerces_c.l) + +$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): $(xerces_c.l.cpp-options) + +genf := $(xsd:.xsd=.hxx) $(xsd:.xsd=.ixx) $(xsd:.xsd=.cxx) +gen := $(addprefix $(out_base)/,$(genf)) + +$(gen): xsd := $(out_root)/xsd/xsd +$(gen): xsd_options := +$(gen): $(out_root)/xsd/xsd + +$(call include-dep,$(dep)) + +# Convenience alias for default target. +# +$(out_base)/: $(driver) + + +# Install & Dist. +# +dist-common := $(out_base)/.dist-common + +$(install) $(dist) $(dist-win) $(dist-common): path := $(subst $(src_root)/,,$(src_base)) + +$(install): + $(call install-data,$(src_base)/README,$(install_doc_dir)/xsd/$(path)/README) + $(call install-data,$(src_base)/driver.cxx,$(install_doc_dir)/xsd/$(path)/driver.cxx) + $(call install-data,$(src_base)/hello.xsd,$(install_doc_dir)/xsd/$(path)/hello.xsd) + $(call install-data,$(src_base)/hello.xml,$(install_doc_dir)/xsd/$(path)/hello.xml) + +$(dist-common): + $(call install-data,$(src_base)/driver.cxx,$(dist_prefix)/$(path)/driver.cxx) + $(call install-data,$(src_base)/hello.xsd,$(dist_prefix)/$(path)/hello.xsd) + $(call install-data,$(src_base)/hello.xml,$(dist_prefix)/$(path)/hello.xml) + +$(dist): $(dist-common) + $(call install-data,$(src_base)/README,$(dist_prefix)/$(path)/README) + +$(dist-win): $(dist-common) + $(call install-data,$(src_base)/README,$(dist_prefix)/$(path)/README.txt) + $(call message,,unix2dos $(dist_prefix)/$(path)/README.txt) + + +# Clean. +# +$(clean): $(driver).o.clean \ + $(addsuffix .cxx.clean,$(obj)) \ + $(addsuffix .cxx.clean,$(dep)) \ + $(addprefix $(out_base)/,$(xsd:.xsd=.cxx.xsd.clean)) + +# Generated .gitignore. +# +ifeq ($(out_base),$(src_base)) +$(gen): | $(out_base)/.gitignore +$(driver): | $(out_base)/.gitignore + +$(out_base)/.gitignore: files := driver $(genf) +$(clean): $(out_base)/.gitignore.clean + +$(call include,$(bld_root)/git/gitignore.make) +endif + +# How to. +# +$(call include,$(bld_root)/cxx/o-e.make) +$(call include,$(bld_root)/cxx/cxx-o.make) +$(call include,$(bld_root)/cxx/cxx-d.make) +$(call include,$(bld_root)/install.make) +$(call include,$(scf_root)/xsd/tree/xsd-cxx.make) + +# Dependencies. +# +$(call import,$(src_root)/xsd/makefile) diff --git a/xsd/examples/cxx/tree/library/README b/xsd/examples/cxx/tree/library/README new file mode 100644 index 0000000..0b8638c --- /dev/null +++ b/xsd/examples/cxx/tree/library/README @@ -0,0 +1,32 @@ +This example shows how to use the C++/Tree mapping to parse XML documents +into a tree-like in-memory object model, modify this object model, and +finally serialize it back to XML. + +The example consists of the following files: + +library.xsd + XML Schema which describes a library of books. + +library.xml + Sample XML instance document. + +library.hxx +library.ixx +library.cxx + C++ types that represent the given vocabulary, a set of parsing + functions that convert XML documents to a tree-like in-memory object + model, and a set of serialization functions that convert the object + model back to XML. These are generated by XSD from library.xsd. + +driver.cxx + Driver for the example. It first calls one of the parsing functions + that constructs the object model from the input file. It then prints + the content of the object model to STDERR. Finally, the driver modifies + the object model and serializes it back to XML. + +To run the example on the sample XML instance document simply execute: + +$ ./driver library.xml + +This example also shows how to use the ID/IDREF cross-referencing +mechanism and the xsd:enumeration to C++ enum mapping. diff --git a/xsd/examples/cxx/tree/library/driver.cxx b/xsd/examples/cxx/tree/library/driver.cxx new file mode 100644 index 0000000..ae68b87 --- /dev/null +++ b/xsd/examples/cxx/tree/library/driver.cxx @@ -0,0 +1,131 @@ +// file : examples/cxx/tree/library/driver.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : not copyrighted - public domain + +#include <memory> // std::auto_ptr +#include <iostream> + +#include "library.hxx" + +using std::cerr; +using std::endl; + +int +main (int argc, char* argv[]) +{ + if (argc != 2) + { + cerr << "usage: " << argv[0] << " library.xml" << endl; + return 1; + } + + try + { + using namespace library; + + // Read in the XML file and obtain its object model. + // + std::auto_ptr<catalog> c (catalog_ (argv[1])); + + + // Let's print what we've got. + // + for (catalog::book_const_iterator bi (c->book ().begin ()); + bi != c->book ().end (); + ++bi) + { + cerr << endl + << "ID : " << bi->id () << endl + << "ISBN : " << bi->isbn () << endl + << "Title : " << bi->title () << endl + << "Genre : " << bi->genre () << endl; + + for (book::author_const_iterator ai (bi->author ().begin ()); + ai != bi->author ().end (); + ++ai) + { + cerr << "Author : " << ai->name () << endl; + cerr << " Born : " << ai->born () << endl; + + if (ai->died ()) + cerr << " Died : " << *ai->died () << endl; + + if (ai->recommends ()) + cerr << " Recommends : " << (*ai->recommends ())->title () << endl; + } + + cerr << "Available : " << std::boolalpha << bi->available () << endl; + } + + + // Now we are going to modify the object model and serialize it + // back to XML. + // + + catalog::book_sequence& books (c->book ()); + + + // Get rid of all unavailable books. + // + for (catalog::book_iterator bi (books.begin ()); bi != books.end ();) + { + if (!bi->available ()) + bi = books.erase (bi); + else + ++bi; + } + + + // Insert a new book. + // + book b (679776443, // ISBN + "Dead Souls", // Title + genre::philosophy, // Genre + "DS"); // ID + + b.author ().push_back (author ("Nikolai Gogol", + xml_schema::date (1809, 3, 31))); + + books.insert (books.begin (), b); + + + // Because we removed all unavailable books, some IDREFs might be + // broken. Let's fix this. + // + for (catalog::book_iterator bi (books.begin ()); bi != books.end (); ++bi) + { + for (book::author_iterator ai (bi->author ().begin ()); + ai != bi->author ().end (); + ++ai) + { + author::recommends_optional& c (ai->recommends ()); + + if (c.present ()) + { + author::recommends_type& ref (c.get ()); + + if (!ref) + c.reset (); + } + } + } + + + // Prepare namespace mapping and schema location information. + // + xml_schema::namespace_infomap map; + + map["lib"].name = "http://www.codesynthesis.com/library"; + map["lib"].schema = "library.xsd"; + + + // Write it out. + // + catalog_ (std::cout, *c, map); + } + catch (const xml_schema::exception& e) + { + cerr << e << endl; + return 1; + } +} diff --git a/xsd/examples/cxx/tree/library/library.xml b/xsd/examples/cxx/tree/library/library.xml new file mode 100644 index 0000000..e9acb75 --- /dev/null +++ b/xsd/examples/cxx/tree/library/library.xml @@ -0,0 +1,53 @@ +<?xml version="1.0"?> + +<!-- + +file : examples/cxx/tree/library/library.xml +author : Boris Kolpackov <boris@codesynthesis.com> +copyright : not copyrighted - public domain + +--> + +<lib:catalog xmlns:lib="http://www.codesynthesis.com/library" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.codesynthesis.com/library library.xsd"> + + <book id="MM" available="false"> + <isbn>0679760806</isbn> + <title>The Master and Margarita</title> + <genre>fiction</genre> + + <author recommends="WP"> + <name>Mikhail Bulgakov</name> + <born>1891-05-15</born> + <died>1940-03-10</died> + </author> + </book> + + + <book id="WP"> + <isbn>0679600841</isbn> + <title>War and Peace</title> + <genre>history</genre> + + <author recommends="CP"> + <name>Leo Tolstoy</name> + <born>1828-09-09</born> + <died>1910-11-20</died> + </author> + </book> + + + <book id="CP" available="false"> + <isbn>0679420290</isbn> + <title>Crime and Punishment</title> + <genre>philosophy</genre> + + <author> + <name>Fyodor Dostoevsky</name> + <born>1821-11-11</born> + <died>1881-02-09</died> + </author> + </book> + +</lib:catalog> diff --git a/xsd/examples/cxx/tree/library/library.xsd b/xsd/examples/cxx/tree/library/library.xsd new file mode 100644 index 0000000..baf2221 --- /dev/null +++ b/xsd/examples/cxx/tree/library/library.xsd @@ -0,0 +1,73 @@ +<?xml version="1.0"?> + +<!-- + +file : examples/cxx/tree/library/library.xsd +author : Boris Kolpackov <boris@codesynthesis.com> +copyright : not copyrighted - public domain + +--> + +<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns:xse="http://www.codesynthesis.com/xmlns/xml-schema-extension" + xmlns:lib="http://www.codesynthesis.com/library" + targetNamespace="http://www.codesynthesis.com/library"> + + <xsd:simpleType name="isbn"> + <xsd:restriction base="xsd:unsignedInt"/> + </xsd:simpleType> + + <xsd:complexType name="title"> + <xsd:simpleContent> + <xsd:extension base="xsd:string"> + <xsd:attribute name="lang" type="xsd:language"/> + </xsd:extension> + </xsd:simpleContent> + </xsd:complexType> + + <xsd:simpleType name="genre"> + <xsd:restriction base="xsd:string"> + <xsd:enumeration value="romance"/> + <xsd:enumeration value="fiction"/> + <xsd:enumeration value="horror"/> + <xsd:enumeration value="history"/> + <xsd:enumeration value="philosophy"/> + </xsd:restriction> + </xsd:simpleType> + + <xsd:complexType name="person"> + <xsd:sequence> + <xsd:element name="name" type="xsd:string"/> + <xsd:element name="born" type="xsd:date"/> + <xsd:element name="died" type="xsd:date" minOccurs="0"/> + </xsd:sequence> + </xsd:complexType> + + <xsd:complexType name="author"> + <xsd:complexContent> + <xsd:extension base="lib:person"> + <xsd:attribute name="recommends" type="xsd:IDREF" xse:refType="lib:book"/> + </xsd:extension> + </xsd:complexContent> + </xsd:complexType> + + <xsd:complexType name="book"> + <xsd:sequence> + <xsd:element name="isbn" type="lib:isbn"/> + <xsd:element name="title" type="lib:title"/> + <xsd:element name="genre" type="lib:genre"/> + <xsd:element name="author" type="lib:author" maxOccurs="unbounded"/> + </xsd:sequence> + <xsd:attribute name="available" type="xsd:boolean" default="true"/> + <xsd:attribute name="id" type="xsd:ID" use="required"/> + </xsd:complexType> + + <xsd:complexType name="catalog"> + <xsd:sequence> + <xsd:element name="book" type="lib:book" maxOccurs="unbounded"/> + </xsd:sequence> + </xsd:complexType> + + <xsd:element name="catalog" type="lib:catalog"/> + +</xsd:schema> diff --git a/xsd/examples/cxx/tree/library/makefile b/xsd/examples/cxx/tree/library/makefile new file mode 100644 index 0000000..6fdd942 --- /dev/null +++ b/xsd/examples/cxx/tree/library/makefile @@ -0,0 +1,103 @@ +# file : examples/cxx/tree/library/makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../../build/bootstrap.make + +xsd := library.xsd +cxx := driver.cxx + +obj := $(addprefix $(out_base)/,$(cxx:.cxx=.o) $(xsd:.xsd=.o)) +dep := $(obj:.o=.o.d) + +driver := $(out_base)/driver +install := $(out_base)/.install +dist := $(out_base)/.dist +dist-win := $(out_base)/.dist-win +clean := $(out_base)/.clean + + +# Import. +# +$(call import,\ + $(scf_root)/import/libxerces-c/stub.make,\ + l: xerces_c.l,cpp-options: xerces_c.l.cpp-options) + + +# Build. +# +$(driver): $(obj) $(xerces_c.l) + +$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): $(xerces_c.l.cpp-options) + +genf := $(xsd:.xsd=.hxx) $(xsd:.xsd=.ixx) $(xsd:.xsd=.cxx) +gen := $(addprefix $(out_base)/,$(genf)) + +$(gen): xsd := $(out_root)/xsd/xsd +$(gen): xsd_options := --generate-inline --generate-ostream \ +--generate-serialization +$(gen): $(out_root)/xsd/xsd + +$(call include-dep,$(dep)) + +# Convenience alias for default target. +# +$(out_base)/: $(driver) + + +# Install & Dist. +# +dist-common := $(out_base)/.dist-common + +$(install) $(dist) $(dist-win) $(dist-common): path := $(subst $(src_root)/,,$(src_base)) + +$(install): + $(call install-data,$(src_base)/README,$(install_doc_dir)/xsd/$(path)/README) + $(call install-data,$(src_base)/driver.cxx,$(install_doc_dir)/xsd/$(path)/driver.cxx) + $(call install-data,$(src_base)/library.xsd,$(install_doc_dir)/xsd/$(path)/library.xsd) + $(call install-data,$(src_base)/library.xml,$(install_doc_dir)/xsd/$(path)/library.xml) + +$(dist-common): + $(call install-data,$(src_base)/driver.cxx,$(dist_prefix)/$(path)/driver.cxx) + $(call install-data,$(src_base)/library.xsd,$(dist_prefix)/$(path)/library.xsd) + $(call install-data,$(src_base)/library.xml,$(dist_prefix)/$(path)/library.xml) + +$(dist): $(dist-common) + $(call install-data,$(src_base)/README,$(dist_prefix)/$(path)/README) + +$(dist-win): $(dist-common) + $(call install-data,$(src_base)/README,$(dist_prefix)/$(path)/README.txt) + $(call message,,unix2dos $(dist_prefix)/$(path)/README.txt) + +# Clean. +# +$(clean): $(driver).o.clean \ + $(addsuffix .cxx.clean,$(obj)) \ + $(addsuffix .cxx.clean,$(dep)) \ + $(addprefix $(out_base)/,$(xsd:.xsd=.cxx.xsd.clean)) + +# Generated .gitignore. +# +ifeq ($(out_base),$(src_base)) +$(gen): | $(out_base)/.gitignore +$(driver): | $(out_base)/.gitignore + +$(out_base)/.gitignore: files := driver $(genf) +$(clean): $(out_base)/.gitignore.clean + +$(call include,$(bld_root)/git/gitignore.make) +endif + +# How to. +# +$(call include,$(bld_root)/cxx/o-e.make) +$(call include,$(bld_root)/cxx/cxx-o.make) +$(call include,$(bld_root)/cxx/cxx-d.make) +$(call include,$(bld_root)/install.make) +$(call include,$(scf_root)/xsd/tree/xsd-cxx.make) + +# Dependencies. +# +$(call import,$(src_root)/xsd/makefile) diff --git a/xsd/examples/cxx/tree/makefile b/xsd/examples/cxx/tree/makefile new file mode 100644 index 0000000..35c6f03 --- /dev/null +++ b/xsd/examples/cxx/tree/makefile @@ -0,0 +1,62 @@ +# file : examples/cxx/tree/makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../build/bootstrap.make + +all_examples := binary caching embedded custom hello library messaging \ +mixed multiroot performance polymorphism streaming wildcard compression \ +dbxml xpath + + +build_examples := binary caching embedded custom hello library messaging \ +mixed multiroot performance polymorphism streaming wildcard + +ifeq ($(xsd_with_zlib),y) +build_examples += compression +endif + +ifeq ($(xsd_with_dbxml),y) +build_examples += dbxml +endif + +ifeq ($(xsd_with_xqilla),y) +build_examples += xpath +endif + +default := $(out_base)/ +install := $(out_base)/.install +dist := $(out_base)/.dist +dist-win := $(out_base)/.dist-win +clean := $(out_base)/.clean + +# Build. +# +$(default): $(addprefix $(out_base)/,$(addsuffix /,$(build_examples))) + +# Install & Dist. +# +$(install) $(dist) $(dist-win): path := $(subst $(src_root)/,,$(src_base)) + +$(install): $(addprefix $(out_base)/,$(addsuffix /.install,$(all_examples))) + $(call install-data,$(src_base)/README,$(install_doc_dir)/xsd/$(path)/README) + +$(dist): $(addprefix $(out_base)/,$(addsuffix /.dist,$(all_examples))) + $(call install-data,$(src_base)/README,$(dist_prefix)/$(path)/README) + +$(dist-win): $(addprefix $(out_base)/,$(addsuffix /.dist-win,$(all_examples))) + $(call install-data,$(src_base)/README,$(dist_prefix)/$(path)/README.txt) + $(call message,,unix2dos $(dist_prefix)/$(path)/README.txt) + +# Clean. +# +$(clean): $(addprefix $(out_base)/,$(addsuffix /.clean,$(build_examples))) + +$(call include,$(bld_root)/install.make) + +ifneq ($(filter $(MAKECMDGOALS),dist dist-win install),) +$(foreach e,$(all_examples),$(call import,$(src_base)/$e/makefile)) +else +$(foreach e,$(build_examples),$(call import,$(src_base)/$e/makefile)) +endif diff --git a/xsd/examples/cxx/tree/messaging/README b/xsd/examples/cxx/tree/messaging/README new file mode 100644 index 0000000..435a4cf --- /dev/null +++ b/xsd/examples/cxx/tree/messaging/README @@ -0,0 +1,58 @@ +This example shows how to handle XML vocabularies with multiple +root elements using the element type and element map features +of the C++/Tree mapping. The main purpose of element types is +to distinguish object models with the same root type but with +different root elements. The element map allows uniform parsing +and serialization of multiple root elements. + +The example consists of the following files: + +protocol.xsd + XML Schema which defines a simple bank account protocol with + requests such as withdraw and deposit. Note that some request + and response elements are of the same type. + +balance.xml +withdraw.xml +deposit.xml + Sample XML instances for the protocol requests. + +protocol.hxx +protocol.cxx + C++ types that represent the given vocabulary. These are + generated by the XSD compiler from protocol.xsd. Generation of + element types instead of parsing and serialization functions is + requested with the --generate-element-type option. Generation of + the element map is requested with the --generate-element-map + option. + +dom-parse.hxx +dom-parse.cxx + Definition and implementation of the parse() function that + parses an XML document to a DOM document. + +dom-serialize.hxx +dom-serialize.cxx + Definition and implementation of the serialize() function that + serializes a DOM document to XML. + +driver.cxx + Driver for the example. It first calls the above-mentioned parse() + function to parse the input file to a DOM document. It then calls + the parse() function on the element map to parse the root document + element to the object model. The object model is returned as a + pointer to xml_schema::element_type which is a common base type for + all element types. The driver then determines which request it has + received either using RTTI or by comparing the root element names. + Once the request type is determined, information about it is printed + to STDERR and the corresponding response is created. Finally, the + driver serializes the opaque response object to a DOM document + using the element map and then serializes this DOM document to + STDOUT using the above-mentioned serialize() function. + +To run the example on the sample XML request documents simply +execute: + +$ ./driver balance.xml +$ ./driver withdraw.xml +$ ./driver deposit.xml diff --git a/xsd/examples/cxx/tree/messaging/balance.xml b/xsd/examples/cxx/tree/messaging/balance.xml new file mode 100644 index 0000000..57eeaed --- /dev/null +++ b/xsd/examples/cxx/tree/messaging/balance.xml @@ -0,0 +1,17 @@ +<?xml version="1.0"?> + +<!-- + +file : examples/cxx/tree/messaging/balance.xml +author : Boris Kolpackov <boris@codesynthesis.com> +copyright : not copyrighted - public domain + +--> + +<p:balance xmlns:p="http://www.codesynthesis.com/protocol" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.codesynthesis.com/protocol protocol.xsd"> + + <account>123456789</account> + +</p:balance> diff --git a/xsd/examples/cxx/tree/messaging/deposit.xml b/xsd/examples/cxx/tree/messaging/deposit.xml new file mode 100644 index 0000000..9da3c59 --- /dev/null +++ b/xsd/examples/cxx/tree/messaging/deposit.xml @@ -0,0 +1,18 @@ +<?xml version="1.0"?> + +<!-- + +file : examples/cxx/tree/messaging/deposit.xml +author : Boris Kolpackov <boris@codesynthesis.com> +copyright : not copyrighted - public domain + +--> + +<p:deposit xmlns:p="http://www.codesynthesis.com/protocol" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.codesynthesis.com/protocol protocol.xsd"> + + <account>123456789</account> + <amount>1000000</amount> + +</p:deposit> diff --git a/xsd/examples/cxx/tree/messaging/dom-parse.cxx b/xsd/examples/cxx/tree/messaging/dom-parse.cxx new file mode 100644 index 0000000..e4bc6cc --- /dev/null +++ b/xsd/examples/cxx/tree/messaging/dom-parse.cxx @@ -0,0 +1,125 @@ +// file : examples/cxx/tree/messaging/dom-parse.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : not copyrighted - public domain + +#include "dom-parse.hxx" + +#include <istream> + +#include <xercesc/dom/DOM.hpp> +#include <xercesc/util/XMLUniDefs.hpp> // chLatin_* +#include <xercesc/framework/Wrapper4InputSource.hpp> + +#include <xsd/cxx/xml/sax/std-input-source.hxx> +#include <xsd/cxx/xml/dom/bits/error-handler-proxy.hxx> + +#include <xsd/cxx/tree/exceptions.hxx> +#include <xsd/cxx/tree/error-handler.hxx> + +using namespace xercesc; +namespace xml = xsd::cxx::xml; +namespace tree = xsd::cxx::tree; + +xml::dom::auto_ptr<DOMDocument> +parse (std::istream& is, const std::string& id, bool validate) +{ + const XMLCh ls_id [] = {chLatin_L, chLatin_S, chNull}; + + // Get an implementation of the Load-Store (LS) interface. + // + DOMImplementation* impl ( + DOMImplementationRegistry::getDOMImplementation (ls_id)); + +#if _XERCES_VERSION >= 30000 + + // Xerces-C++ 3.0.0 and later. + // + xml::dom::auto_ptr<DOMLSParser> parser ( + impl->createLSParser (DOMImplementationLS::MODE_SYNCHRONOUS, 0)); + + DOMConfiguration* conf (parser->getDomConfig ()); + + // Discard comment nodes in the document. + // + conf->setParameter (XMLUni::fgDOMComments, false); + + // Enable datatype normalization. + // + conf->setParameter (XMLUni::fgDOMDatatypeNormalization, true); + + // Do not create EntityReference nodes in the DOM tree. No + // EntityReference nodes will be created, only the nodes + // corresponding to their fully expanded substitution text + // will be created. + // + conf->setParameter (XMLUni::fgDOMEntities, false); + + // Perform namespace processing. + // + conf->setParameter (XMLUni::fgDOMNamespaces, true); + + // Do not include ignorable whitespace in the DOM tree. + // + conf->setParameter (XMLUni::fgDOMElementContentWhitespace, false); + + // Enable/Disable validation. + // + conf->setParameter (XMLUni::fgDOMValidate, validate); + conf->setParameter (XMLUni::fgXercesSchema, validate); + conf->setParameter (XMLUni::fgXercesSchemaFullChecking, false); + + // Xerces-C++ 3.1.0 is the first version with working multi import + // support. + // +#if _XERCES_VERSION >= 30100 + conf->setParameter (XMLUni::fgXercesHandleMultipleImports, true); +#endif + + // We will release the DOM document ourselves. + // + conf->setParameter (XMLUni::fgXercesUserAdoptsDOMDocument, true); + + // Set error handler. + // + tree::error_handler<char> eh; + xml::dom::bits::error_handler_proxy<char> ehp (eh); + conf->setParameter (XMLUni::fgDOMErrorHandler, &ehp); + +#else // _XERCES_VERSION >= 30000 + + // Same as above but for Xerces-C++ 2 series. + // + xml::dom::auto_ptr<DOMBuilder> parser ( + impl->createDOMBuilder (DOMImplementationLS::MODE_SYNCHRONOUS, 0)); + + parser->setFeature (XMLUni::fgDOMComments, false); + parser->setFeature (XMLUni::fgDOMDatatypeNormalization, true); + parser->setFeature (XMLUni::fgDOMEntities, false); + parser->setFeature (XMLUni::fgDOMNamespaces, true); + parser->setFeature (XMLUni::fgDOMWhitespaceInElementContent, false); + parser->setFeature (XMLUni::fgDOMValidation, validate); + parser->setFeature (XMLUni::fgXercesSchema, validate); + parser->setFeature (XMLUni::fgXercesSchemaFullChecking, false); + parser->setFeature (XMLUni::fgXercesUserAdoptsDOMDocument, true); + + tree::error_handler<char> eh; + xml::dom::bits::error_handler_proxy<char> ehp (eh); + parser->setErrorHandler (&ehp); + +#endif // _XERCES_VERSION >= 30000 + + // Prepare input stream. + // + xml::sax::std_input_source isrc (is, id); + Wrapper4InputSource wrap (&isrc, false); + +#if _XERCES_VERSION >= 30000 + xml::dom::auto_ptr<DOMDocument> doc (parser->parse (&wrap)); +#else + xml::dom::auto_ptr<DOMDocument> doc (parser->parse (wrap)); +#endif + + eh.throw_if_failed<tree::parsing<char> > (); + + return doc; +} diff --git a/xsd/examples/cxx/tree/messaging/dom-parse.hxx b/xsd/examples/cxx/tree/messaging/dom-parse.hxx new file mode 100644 index 0000000..640b28a --- /dev/null +++ b/xsd/examples/cxx/tree/messaging/dom-parse.hxx @@ -0,0 +1,23 @@ +// file : examples/cxx/tree/messaging/dom-parse.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : not copyrighted - public domain + +#ifndef DOM_PARSE +#define DOM_PARSE + +#include <string> +#include <iosfwd> + +#include <xercesc/dom/DOMDocument.hpp> +#include <xsd/cxx/xml/dom/auto-ptr.hxx> + +// Parse an XML document from the standard input stream with an +// optional resource id. Resource id is used in diagnostics as +// well as to locate schemas referenced from inside the document. +// +xsd::cxx::xml::dom::auto_ptr<xercesc::DOMDocument> +parse (std::istream& is, + const std::string& id, + bool validate); + +#endif // DOM_PARSE diff --git a/xsd/examples/cxx/tree/messaging/dom-serialize.cxx b/xsd/examples/cxx/tree/messaging/dom-serialize.cxx new file mode 100644 index 0000000..c0f4311 --- /dev/null +++ b/xsd/examples/cxx/tree/messaging/dom-serialize.cxx @@ -0,0 +1,89 @@ +// file : examples/cxx/tree/messaging/dom-serialize.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : not copyrighted - public domain + +#include "dom-serialize.hxx" + +#include <ostream> + +#include <xercesc/dom/DOM.hpp> +#include <xercesc/util/XMLUniDefs.hpp> + +#include <xsd/cxx/xml/string.hxx> +#include <xsd/cxx/xml/dom/auto-ptr.hxx> +#include <xsd/cxx/xml/dom/serialization-source.hxx> +#include <xsd/cxx/xml/dom/bits/error-handler-proxy.hxx> + +#include <xsd/cxx/tree/exceptions.hxx> +#include <xsd/cxx/tree/error-handler.hxx> + +using namespace xercesc; +namespace xml = xsd::cxx::xml; +namespace tree = xsd::cxx::tree; + +void +serialize (std::ostream& os, + const xercesc::DOMDocument& doc, + const std::string& encoding) +{ + const XMLCh ls_id [] = {chLatin_L, chLatin_S, chNull}; + + // Get an implementation of the Load-Store (LS) interface. + // + DOMImplementation* impl ( + DOMImplementationRegistry::getDOMImplementation (ls_id)); + + tree::error_handler<char> eh; + xml::dom::bits::error_handler_proxy<char> ehp (eh); + + xml::dom::ostream_format_target oft (os); + +#if _XERCES_VERSION >= 30000 + + // Create a DOMSerializer. + // + xml::dom::auto_ptr<DOMLSSerializer> writer ( + impl->createLSSerializer ()); + + DOMConfiguration* conf (writer->getDomConfig ()); + + // Set error handler. + // + conf->setParameter (XMLUni::fgDOMErrorHandler, &ehp); + + // Set some generally nice features. + // + conf->setParameter (XMLUni::fgDOMWRTDiscardDefaultContent, true); + conf->setParameter (XMLUni::fgDOMWRTFormatPrettyPrint, true); + + xml::dom::auto_ptr<DOMLSOutput> out (impl->createLSOutput ()); + out->setEncoding (xml::string (encoding).c_str ()); + out->setByteStream (&oft); + + writer->write (&doc, out.get ()); + +#else + + // Create a DOMWriter. + // + xml::dom::auto_ptr<DOMWriter> writer (impl->createDOMWriter ()); + + // Set error handler. + // + writer->setErrorHandler (&ehp); + + // Set encoding. + // + writer->setEncoding(xml::string (encoding).c_str ()); + + // Set some generally nice features. + // + writer->setFeature (XMLUni::fgDOMWRTDiscardDefaultContent, true); + writer->setFeature (XMLUni::fgDOMWRTFormatPrettyPrint, true); + + writer->writeNode (&oft, doc); + +#endif + + eh.throw_if_failed<tree::serialization<char> > (); +} diff --git a/xsd/examples/cxx/tree/messaging/dom-serialize.hxx b/xsd/examples/cxx/tree/messaging/dom-serialize.hxx new file mode 100644 index 0000000..1a7e855 --- /dev/null +++ b/xsd/examples/cxx/tree/messaging/dom-serialize.hxx @@ -0,0 +1,21 @@ +// file : examples/cxx/tree/messaging/dom-serialize.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : not copyrighted - public domain + +#ifndef DOM_SERIALIZE +#define DOM_SERIALIZE + +#include <string> +#include <iosfwd> + +#include <xercesc/dom/DOMDocument.hpp> + +// Serialize a DOM document to XML which is written to the standard +// output stream. +// +void +serialize (std::ostream& os, + const xercesc::DOMDocument& doc, + const std::string& encoding = "UTF-8"); + +#endif // DOM_SERIALIZE diff --git a/xsd/examples/cxx/tree/messaging/driver.cxx b/xsd/examples/cxx/tree/messaging/driver.cxx new file mode 100644 index 0000000..4c36aa4 --- /dev/null +++ b/xsd/examples/cxx/tree/messaging/driver.cxx @@ -0,0 +1,145 @@ +// file : examples/cxx/tree/messaging/driver.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : not copyrighted - public domain + +#include <memory> // std::auto_ptr +#include <string> +#include <fstream> +#include <typeinfo> +#include <iostream> + +#include <xercesc/dom/DOM.hpp> +#include <xercesc/util/PlatformUtils.hpp> + +#include <xsd/cxx/xml/string.hxx> + +#include "dom-parse.hxx" +#include "dom-serialize.hxx" + +#include "protocol.hxx" + +using namespace std; +using namespace protocol; +using namespace xercesc; + +int +main (int argc, char* argv[]) +{ + if (argc != 2) + { + cerr << "usage: " << argv[0] << " request.xml" << endl; + return 1; + } + + int r (0); + + // We need to initialize the Xerces-C++ runtime because we + // are doing the XML-to-DOM parsing ourselves. + // + XMLPlatformUtils::Initialize (); + + try + { + ifstream ifs; + ifs.exceptions (ifstream::badbit | ifstream::failbit); + ifs.open (argv[1]); + + auto_ptr<xml_schema::element_type> req, res; + + // Parse the XML request to a DOM document using the parse() + // function from dom-parse.hxx. + // + { + xml_schema::dom::auto_ptr<DOMDocument> doc (parse (ifs, argv[1], true)); + DOMElement& root (*doc->getDocumentElement ()); + + req = xml_schema::element_map::parse (root); + } + + // We can test which request we've got either using RTTI or by + // comparing the element names, as shown below. + // + if (balance* b = dynamic_cast<balance*> (req.get ())) + { + account_t& a (b->value ()); + + cerr << "balance request for acc# " << a.account () << endl; + + res.reset (new success (balance_t (a.account (), 1000))); + } + else if (req->_name () == withdraw::name ()) + { + withdraw& w (static_cast<withdraw&> (*req)); + change_t& c (w.value ()); + + wcerr << "withdrawal request for acc# " << c.account () << ", " + << "amount: " << c.amount () << endl; + + if (c.amount () > 1000) + res.reset (new insufficient_funds (balance_t (c.account (), 1000))); + else + res.reset (new success (balance_t (c.account (), 1000 - c.amount ()))); + + } + else if (req->_name () == deposit::name ()) + { + deposit& d (static_cast<deposit&> (*req)); + change_t& c (d.value ()); + + wcerr << "deposit request for acc# " << c.account () << ", " + << "amount: " << c.amount () << endl; + + res.reset (new success (balance_t (c.account (), 1000 + c.amount ()))); + } + + // Serialize the response to a DOM document. + // + namespace xml = xsd::cxx::xml; + + const XMLCh ls_id [] = {chLatin_L, chLatin_S, chNull}; + + DOMImplementation* impl ( + DOMImplementationRegistry::getDOMImplementation (ls_id)); + + const string& name (res->_name ()); + const string& ns (res->_namespace ()); + + xml_schema::dom::auto_ptr<DOMDocument> doc ( + impl->createDocument ( + xml::string (ns).c_str (), + xml::string ("p:" + name).c_str (), + 0)); + + xml_schema::element_map::serialize (*doc->getDocumentElement (), *res); + + // Serialize the DOM document to XML using the serialize() function + // from dom-serialize.hxx. + // + cout << "response:" << endl + << endl; + + serialize (cout, *doc); + } + catch (const xml_schema::no_element_info& e) + { + // This exception indicates that we tried to parse or serialize + // an unknown element. + // + cerr << "unknown request: " << e.element_namespace () << "#" << + e.element_name () << endl; + r = 1; + } + catch (const xml_schema::exception& e) + { + cerr << e << endl; + r = 1; + } + catch (const std::ios_base::failure&) + { + cerr << argv[1] << ": unable to open or read failure" << endl; + r = 1; + } + + XMLPlatformUtils::Terminate (); + return r; +} diff --git a/xsd/examples/cxx/tree/messaging/makefile b/xsd/examples/cxx/tree/messaging/makefile new file mode 100644 index 0000000..b7e0d0a --- /dev/null +++ b/xsd/examples/cxx/tree/messaging/makefile @@ -0,0 +1,118 @@ +# file : examples/cxx/tree/messaging/makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../../build/bootstrap.make + +xsd := protocol.xsd +cxx := driver.cxx dom-parse.cxx dom-serialize.cxx + +obj := $(addprefix $(out_base)/,$(cxx:.cxx=.o) $(xsd:.xsd=.o)) +dep := $(obj:.o=.o.d) + +driver := $(out_base)/driver +install := $(out_base)/.install +dist := $(out_base)/.dist +dist-win := $(out_base)/.dist-win +clean := $(out_base)/.clean + + +# Import. +# +$(call import,\ + $(scf_root)/import/libxerces-c/stub.make,\ + l: xerces_c.l,cpp-options: xerces_c.l.cpp-options) + + +# Build. +# +$(driver): $(obj) $(xerces_c.l) + +$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): $(xerces_c.l.cpp-options) + +genf := $(xsd:.xsd=.hxx) $(xsd:.xsd=.ixx) $(xsd:.xsd=.cxx) +gen := $(addprefix $(out_base)/,$(genf)) + +$(gen): xsd := $(out_root)/xsd/xsd + +$(gen): xsd_options := --root-element-all \ +--generate-element-type --generate-element-map --generate-serialization + +$(gen): $(out_root)/xsd/xsd + +$(call include-dep,$(dep)) + +# Convenience alias for default target. +# +$(out_base)/: $(driver) + + +# Install & Dist. +# +dist-common := $(out_base)/.dist-common + +$(install) $(dist) $(dist-win) $(dist-common): path := $(subst $(src_root)/,,$(src_base)) + +$(install): + $(call install-data,$(src_base)/README,$(install_doc_dir)/xsd/$(path)/README) + $(call install-data,$(src_base)/driver.cxx,$(install_doc_dir)/xsd/$(path)/driver.cxx) + $(call install-data,$(src_base)/protocol.xsd,$(install_doc_dir)/xsd/$(path)/protocol.xsd) + $(call install-data,$(src_base)/balance.xml,$(install_doc_dir)/xsd/$(path)/balance.xml) + $(call install-data,$(src_base)/deposit.xml,$(install_doc_dir)/xsd/$(path)/deposit.xml) + $(call install-data,$(src_base)/withdraw.xml,$(install_doc_dir)/xsd/$(path)/withdraw.xml) + $(call install-data,$(src_base)/dom-parse.hxx,$(install_doc_dir)/xsd/$(path)/dom-parse.hxx) + $(call install-data,$(src_base)/dom-parse.cxx,$(install_doc_dir)/xsd/$(path)/dom-parse.cxx) + $(call install-data,$(src_base)/dom-serialize.hxx,$(install_doc_dir)/xsd/$(path)/dom-serialize.hxx) + $(call install-data,$(src_base)/dom-serialize.cxx,$(install_doc_dir)/xsd/$(path)/dom-serialize.cxx) + +$(dist-common): + $(call install-data,$(src_base)/driver.cxx,$(dist_prefix)/$(path)/driver.cxx) + $(call install-data,$(src_base)/protocol.xsd,$(dist_prefix)/$(path)/protocol.xsd) + $(call install-data,$(src_base)/balance.xml,$(dist_prefix)/$(path)/balance.xml) + $(call install-data,$(src_base)/deposit.xml,$(dist_prefix)/$(path)/deposit.xml) + $(call install-data,$(src_base)/withdraw.xml,$(dist_prefix)/$(path)/withdraw.xml) + $(call install-data,$(src_base)/dom-parse.hxx,$(dist_prefix)/$(path)/dom-parse.hxx) + $(call install-data,$(src_base)/dom-parse.cxx,$(dist_prefix)/$(path)/dom-parse.cxx) + $(call install-data,$(src_base)/dom-serialize.hxx,$(dist_prefix)/$(path)/dom-serialize.hxx) + $(call install-data,$(src_base)/dom-serialize.cxx,$(dist_prefix)/$(path)/dom-serialize.cxx) + +$(dist): $(dist-common) + $(call install-data,$(src_base)/README,$(dist_prefix)/$(path)/README) + +$(dist-win): $(dist-common) + $(call install-data,$(src_base)/README,$(dist_prefix)/$(path)/README.txt) + $(call message,,unix2dos $(dist_prefix)/$(path)/README.txt) + + +# Clean. +# +$(clean): $(driver).o.clean \ + $(addsuffix .cxx.clean,$(obj)) \ + $(addsuffix .cxx.clean,$(dep)) \ + $(addprefix $(out_base)/,$(xsd:.xsd=.cxx.xsd.clean)) + +# Generated .gitignore. +# +ifeq ($(out_base),$(src_base)) +$(gen): | $(out_base)/.gitignore +$(driver): | $(out_base)/.gitignore + +$(out_base)/.gitignore: files := driver $(genf) +$(clean): $(out_base)/.gitignore.clean + +$(call include,$(bld_root)/git/gitignore.make) +endif + +# How to. +# +$(call include,$(bld_root)/cxx/o-e.make) +$(call include,$(bld_root)/cxx/cxx-o.make) +$(call include,$(bld_root)/cxx/cxx-d.make) +$(call include,$(bld_root)/install.make) +$(call include,$(scf_root)/xsd/tree/xsd-cxx.make) + +# Dependencies. +# +$(call import,$(src_root)/xsd/makefile) diff --git a/xsd/examples/cxx/tree/messaging/protocol.xsd b/xsd/examples/cxx/tree/messaging/protocol.xsd new file mode 100644 index 0000000..3461133 --- /dev/null +++ b/xsd/examples/cxx/tree/messaging/protocol.xsd @@ -0,0 +1,54 @@ +<?xml version="1.0"?> + +<!-- + +file : examples/cxx/tree/messaging/protocol.xsd +author : Boris Kolpackov <boris@codesynthesis.com> +copyright : not copyrighted - public domain + +--> + +<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns:p="http://www.codesynthesis.com/protocol" + targetNamespace="http://www.codesynthesis.com/protocol"> + + <!-- types --> + + <xsd:complexType name="account_t"> + <xsd:sequence> + <xsd:element name="account" type="xsd:unsignedInt"/> + </xsd:sequence> + </xsd:complexType> + + <xsd:complexType name="change_t"> + <xsd:complexContent> + <xsd:extension base="p:account_t"> + <xsd:sequence> + <xsd:element name="amount" type="xsd:unsignedInt"/> + </xsd:sequence> + </xsd:extension> + </xsd:complexContent> + </xsd:complexType> + + <xsd:complexType name="balance_t"> + <xsd:complexContent> + <xsd:extension base="p:account_t"> + <xsd:sequence> + <xsd:element name="balance" type="xsd:unsignedInt"/> + </xsd:sequence> + </xsd:extension> + </xsd:complexContent> + </xsd:complexType> + + <!-- request elements --> + + <xsd:element name="balance" type="p:account_t"/> + <xsd:element name="withdraw" type="p:change_t"/> + <xsd:element name="deposit" type="p:change_t"/> + + <!-- response elements --> + + <xsd:element name="success" type="p:balance_t"/> + <xsd:element name="insufficient-funds" type="p:balance_t"/> + +</xsd:schema> diff --git a/xsd/examples/cxx/tree/messaging/withdraw.xml b/xsd/examples/cxx/tree/messaging/withdraw.xml new file mode 100644 index 0000000..16a7440 --- /dev/null +++ b/xsd/examples/cxx/tree/messaging/withdraw.xml @@ -0,0 +1,18 @@ +<?xml version="1.0"?> + +<!-- + +file : examples/cxx/tree/messaging/withdraw.xml +author : Boris Kolpackov <boris@codesynthesis.com> +copyright : not copyrighted - public domain + +--> + +<p:withdraw xmlns:p="http://www.codesynthesis.com/protocol" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.codesynthesis.com/protocol protocol.xsd"> + + <account>123456789</account> + <amount>1000000</amount> + +</p:withdraw> diff --git a/xsd/examples/cxx/tree/mixed/README b/xsd/examples/cxx/tree/mixed/README new file mode 100644 index 0000000..9ab3309 --- /dev/null +++ b/xsd/examples/cxx/tree/mixed/README @@ -0,0 +1,41 @@ +This example shows how to access the underlying DOM nodes in the +C++/Tree mapping in order to handle raw, "type-less content" such +as mixed content models, anyType/anySimpleType, and any/anyAttribute. +For an alternative approach that employes type customization see +examples in the custom/ directory, in particular, custom/mixed and +custom/wildcard. + +In this example we use mixed content model to describe text with +embedded links, e.g., + + This paragraph talks about <a href="uri">time</a>. + +The example transforms such text into plain text with references, e.g., + + This paragraph talks about time[0]. + + [0] uri + +The example consists of the following files: + +text.xsd + XML Schema which describes "text with links" instance documents. + +text.xml + Sample XML instance document. + +text.hxx +text.cxx + C++ types that represent the given vocabulary and a set of parsing + functions that convert XML instance documents to a tree-like in-memory + object model. These are generated by XSD from text.xsd. + +driver.cxx + Driver for the example. It first calls one of the parsing functions + that constructs the object model from the input file. It then uses + both the underlying DOM and statically-typed mapping to perform the + transformation. + +To run the example on the sample XML instance document simply execute: + +$ ./driver text.xml diff --git a/xsd/examples/cxx/tree/mixed/driver.cxx b/xsd/examples/cxx/tree/mixed/driver.cxx new file mode 100644 index 0000000..d905421 --- /dev/null +++ b/xsd/examples/cxx/tree/mixed/driver.cxx @@ -0,0 +1,121 @@ +// file : examples/cxx/tree/mixed/driver.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : not copyrighted - public domain + +#include <memory> // std::auto_ptr +#include <iostream> + +#include <xercesc/dom/DOM.hpp> + +#include "text.hxx" + +// The following transcode() utility function is handy when working with +// Xerces. Include it after the generated header in order to get only char +// or wchar_t version depending on how you compiled your schemas. +// +#include <xsd/cxx/xml/string.hxx> + +using std::cout; +using std::cerr; +using std::endl; +using std::auto_ptr; + +int +main (int argc, char* argv[]) +{ + if (argc != 2) + { + cerr << "usage: " << argv[0] << " text.xml" << endl; + return 1; + } + + using namespace xercesc; + + int r (0); + + // The Xerces-C++ DOM objects that will be associated with the + // document tree "out-live" the call to the parsing function. + // Therefore we need to initialize the Xerces-C++ runtime + // ourselves. + // + XMLPlatformUtils::Initialize (); + + try + { + auto_ptr<text> t ( + text_ (argv[1], + xml_schema::flags::keep_dom | + xml_schema::flags::dont_initialize)); + + // Note that DOM association is preserved in copies but only if they + // are "complete", i.e., made from the root of the tree. + // + text copy (*t); + + // Print text. + // + { + namespace xml = xsd::cxx::xml; + + unsigned long ref (0); + DOMNode* root (copy._node ()); + + for (DOMNode* n (root->getFirstChild ()); + n != 0; + n = n->getNextSibling ()) + { + switch (n->getNodeType ()) + { + case DOMNode::TEXT_NODE: + { + cout << xml::transcode<char> (n->getTextContent ()); + break; + } + case DOMNode::ELEMENT_NODE: + { + // Let's get back to a tree node from this DOM node. + // + xml_schema::type& t ( + *reinterpret_cast<xml_schema::type*> ( + n->getUserData (xml_schema::dom::tree_node_key))); + + anchor& a (dynamic_cast<anchor&> (t)); + + cout << a << "[" << ref << "]"; + + // Or we could continue using DOM interface: + // + //cout << xml::transcode<char> (n->getTextContent ()) + // << "[" << ref << "]"; + + ++ref; + break; + } + default: + break; // Ignore all other nodes (e.g., comments, etc). + } + } + } + + // Print references. + // + { + unsigned long r (0); + + for (text::a_const_iterator i (copy.a ().begin ()); + i != copy.a ().end (); + ++i, ++r) + { + cout << "[" << r << "] " << i->href () << endl; + } + } + } + catch (const xml_schema::exception& e) + { + cerr << e << endl; + r = 1; + } + + XMLPlatformUtils::Terminate (); + return r; +} diff --git a/xsd/examples/cxx/tree/mixed/makefile b/xsd/examples/cxx/tree/mixed/makefile new file mode 100644 index 0000000..6316ec0 --- /dev/null +++ b/xsd/examples/cxx/tree/mixed/makefile @@ -0,0 +1,104 @@ +# file : examples/cxx/tree/mixed/makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../../build/bootstrap.make + +xsd := text.xsd +cxx := driver.cxx + +obj := $(addprefix $(out_base)/,$(cxx:.cxx=.o) $(xsd:.xsd=.o)) +dep := $(obj:.o=.o.d) + +driver := $(out_base)/driver +install := $(out_base)/.install +dist := $(out_base)/.dist +dist-win := $(out_base)/.dist-win +clean := $(out_base)/.clean + + +# Import. +# +$(call import,\ + $(scf_root)/import/libxerces-c/stub.make,\ + l: xerces_c.l,cpp-options: xerces_c.l.cpp-options) + + +# Build. +# +$(driver): $(obj) $(xerces_c.l) + +$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): $(xerces_c.l.cpp-options) + +genf := $(xsd:.xsd=.hxx) $(xsd:.xsd=.ixx) $(xsd:.xsd=.cxx) +gen := $(addprefix $(out_base)/,$(genf)) + +$(gen): xsd := $(out_root)/xsd/xsd +$(gen): xsd_options := +$(gen): $(out_root)/xsd/xsd + +$(call include-dep,$(dep)) + + +# Convenience alias for default target. +# +$(out_base)/: $(driver) + + +# Install & Dist. +# +dist-common := $(out_base)/.dist-common + +$(install) $(dist) $(dist-win) $(dist-common): path := $(subst $(src_root)/,,$(src_base)) + +$(install): + $(call install-data,$(src_base)/README,$(install_doc_dir)/xsd/$(path)/README) + $(call install-data,$(src_base)/driver.cxx,$(install_doc_dir)/xsd/$(path)/driver.cxx) + $(call install-data,$(src_base)/text.xsd,$(install_doc_dir)/xsd/$(path)/text.xsd) + $(call install-data,$(src_base)/text.xml,$(install_doc_dir)/xsd/$(path)/text.xml) + +$(dist-common): + $(call install-data,$(src_base)/driver.cxx,$(dist_prefix)/$(path)/driver.cxx) + $(call install-data,$(src_base)/text.xsd,$(dist_prefix)/$(path)/text.xsd) + $(call install-data,$(src_base)/text.xml,$(dist_prefix)/$(path)/text.xml) + +$(dist): $(dist-common) + $(call install-data,$(src_base)/README,$(dist_prefix)/$(path)/README) + +$(dist-win): $(dist-common) + $(call install-data,$(src_base)/README,$(dist_prefix)/$(path)/README.txt) + $(call message,,unix2dos $(dist_prefix)/$(path)/README.txt) + +# Clean. +# +$(clean): $(driver).o.clean \ + $(addsuffix .cxx.clean,$(obj)) \ + $(addsuffix .cxx.clean,$(dep)) \ + $(addprefix $(out_base)/,$(xsd:.xsd=.cxx.xsd.clean)) + +# Generated .gitignore. +# +ifeq ($(out_base),$(src_base)) +$(gen): | $(out_base)/.gitignore +$(driver): | $(out_base)/.gitignore + +$(out_base)/.gitignore: files := driver $(genf) +$(clean): $(out_base)/.gitignore.clean + +$(call include,$(bld_root)/git/gitignore.make) +endif + +# How to. +# +$(call include,$(bld_root)/cxx/o-e.make) +$(call include,$(bld_root)/cxx/cxx-o.make) +$(call include,$(bld_root)/cxx/cxx-d.make) +$(call include,$(bld_root)/install.make) +$(call include,$(scf_root)/xsd/tree/xsd-cxx.make) + + +# Dependencies. +# +$(call import,$(src_root)/xsd/makefile) diff --git a/xsd/examples/cxx/tree/mixed/text.xml b/xsd/examples/cxx/tree/mixed/text.xml new file mode 100644 index 0000000..69abe8f --- /dev/null +++ b/xsd/examples/cxx/tree/mixed/text.xml @@ -0,0 +1,18 @@ +<?xml version="1.0"?> + +<!-- + +file : examples/cxx/tree/text/text.xml +author : Boris Kolpackov <boris@codesynthesis.com> +copyright : not copyrighted - public domain + +--> + +<text xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="text.xsd"> + +The first paragraph of this text talks about <a href="http://en.wikipedia.org/wiki/time">time</a>. + +And this paragraph talks about <a href="http://en.wikipedia.org/wiki/space">space</a>. + +</text> diff --git a/xsd/examples/cxx/tree/mixed/text.xsd b/xsd/examples/cxx/tree/mixed/text.xsd new file mode 100644 index 0000000..8aa8280 --- /dev/null +++ b/xsd/examples/cxx/tree/mixed/text.xsd @@ -0,0 +1,29 @@ +<?xml version="1.0"?> + +<!-- + +file : examples/cxx/tree/mixed/text.xsd +author : Boris Kolpackov <boris@codesynthesis.com> +copyright : not copyrighted - public domain + +--> + +<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + + <xsd:complexType name="anchor"> + <xsd:simpleContent> + <xsd:extension base="xsd:string"> + <xsd:attribute name="href" type="xsd:anyURI" use="required"/> + </xsd:extension> + </xsd:simpleContent> + </xsd:complexType> + + <xsd:complexType name="text" mixed="true"> + <xsd:sequence> + <xsd:element name="a" type="anchor" minOccurs="0" maxOccurs="unbounded"/> + </xsd:sequence> + </xsd:complexType> + + <xsd:element name="text" type="text"/> + +</xsd:schema> diff --git a/xsd/examples/cxx/tree/multiroot/README b/xsd/examples/cxx/tree/multiroot/README new file mode 100644 index 0000000..b742422 --- /dev/null +++ b/xsd/examples/cxx/tree/multiroot/README @@ -0,0 +1,45 @@ +This example shows how to handle XML vocabularies with multiple +root elements using the C++/Tree mapping. + +See also the messaging example for an alternative approach that +uses the element type and element map features of the C++/Tree +mapping. + +The example consists of the following files: + +protocol.xsd + XML Schema which defines a simple bank account protocol with + requests such as withdraw and deposit. + +balance.xml +withdraw.xml +deposit.xml + Sample XML instances for the protocol requests. + +protocol.hxx +protocol.cxx + C++ types that represent the given vocabulary and a set of + parsing functions that convert XML documents to a tree-like + in-memory object model. These are generated by XSD from + protocol.xsd. + +dom-parse.hxx +dom-parse.cxx + Definition and implementation of the parse() function that + parses an XML document to a DOM document. + +driver.cxx + Driver for the example. It first calls the above parse() function + to parse the input file to a DOM document. It then determines the + type of request being handled and calls the corresponding parsing + function that constructs the object model from this DOM document. + Finally, it prints the content of this object model to STDERR. + This example intentionally does not support the deposit request + to show how to handle unknown documents. + +To run the example on the sample XML request documents simply +execute: + +$ ./driver balance.xml +$ ./driver withdraw.xml +$ ./driver deposit.xml diff --git a/xsd/examples/cxx/tree/multiroot/balance.xml b/xsd/examples/cxx/tree/multiroot/balance.xml new file mode 100644 index 0000000..055546a --- /dev/null +++ b/xsd/examples/cxx/tree/multiroot/balance.xml @@ -0,0 +1,17 @@ +<?xml version="1.0"?> + +<!-- + +file : examples/cxx/tree/multiroot/balance.xml +author : Boris Kolpackov <boris@codesynthesis.com> +copyright : not copyrighted - public domain + +--> + +<p:balance xmlns:p="http://www.codesynthesis.com/protocol" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.codesynthesis.com/protocol protocol.xsd"> + + <account>123456789</account> + +</p:balance> diff --git a/xsd/examples/cxx/tree/multiroot/deposit.xml b/xsd/examples/cxx/tree/multiroot/deposit.xml new file mode 100644 index 0000000..3207eee --- /dev/null +++ b/xsd/examples/cxx/tree/multiroot/deposit.xml @@ -0,0 +1,18 @@ +<?xml version="1.0"?> + +<!-- + +file : examples/cxx/tree/multiroot/deposit.xml +author : Boris Kolpackov <boris@codesynthesis.com> +copyright : not copyrighted - public domain + +--> + +<p:deposit xmlns:p="http://www.codesynthesis.com/protocol" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.codesynthesis.com/protocol protocol.xsd"> + + <account>123456789</account> + <amount>1000000</amount> + +</p:deposit> diff --git a/xsd/examples/cxx/tree/multiroot/dom-parse.cxx b/xsd/examples/cxx/tree/multiroot/dom-parse.cxx new file mode 100644 index 0000000..2b57be0 --- /dev/null +++ b/xsd/examples/cxx/tree/multiroot/dom-parse.cxx @@ -0,0 +1,125 @@ +// file : examples/cxx/tree/multiroot/dom-parse.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : not copyrighted - public domain + +#include "dom-parse.hxx" + +#include <istream> + +#include <xercesc/dom/DOM.hpp> +#include <xercesc/util/XMLUniDefs.hpp> // chLatin_* +#include <xercesc/framework/Wrapper4InputSource.hpp> + +#include <xsd/cxx/xml/sax/std-input-source.hxx> +#include <xsd/cxx/xml/dom/bits/error-handler-proxy.hxx> + +#include <xsd/cxx/tree/exceptions.hxx> +#include <xsd/cxx/tree/error-handler.hxx> + +using namespace xercesc; +namespace xml = xsd::cxx::xml; +namespace tree = xsd::cxx::tree; + +xml::dom::auto_ptr<DOMDocument> +parse (std::istream& is, const std::string& id, bool validate) +{ + const XMLCh ls_id [] = {chLatin_L, chLatin_S, chNull}; + + // Get an implementation of the Load-Store (LS) interface. + // + DOMImplementation* impl ( + DOMImplementationRegistry::getDOMImplementation (ls_id)); + +#if _XERCES_VERSION >= 30000 + + // Xerces-C++ 3.0.0 and later. + // + xml::dom::auto_ptr<DOMLSParser> parser ( + impl->createLSParser (DOMImplementationLS::MODE_SYNCHRONOUS, 0)); + + DOMConfiguration* conf (parser->getDomConfig ()); + + // Discard comment nodes in the document. + // + conf->setParameter (XMLUni::fgDOMComments, false); + + // Enable datatype normalization. + // + conf->setParameter (XMLUni::fgDOMDatatypeNormalization, true); + + // Do not create EntityReference nodes in the DOM tree. No + // EntityReference nodes will be created, only the nodes + // corresponding to their fully expanded substitution text + // will be created. + // + conf->setParameter (XMLUni::fgDOMEntities, false); + + // Perform namespace processing. + // + conf->setParameter (XMLUni::fgDOMNamespaces, true); + + // Do not include ignorable whitespace in the DOM tree. + // + conf->setParameter (XMLUni::fgDOMElementContentWhitespace, false); + + // Enable/Disable validation. + // + conf->setParameter (XMLUni::fgDOMValidate, validate); + conf->setParameter (XMLUni::fgXercesSchema, validate); + conf->setParameter (XMLUni::fgXercesSchemaFullChecking, false); + + // Xerces-C++ 3.1.0 is the first version with working multi import + // support. + // +#if _XERCES_VERSION >= 30100 + conf->setParameter (XMLUni::fgXercesHandleMultipleImports, true); +#endif + + // We will release the DOM document ourselves. + // + conf->setParameter (XMLUni::fgXercesUserAdoptsDOMDocument, true); + + // Set error handler. + // + tree::error_handler<char> eh; + xml::dom::bits::error_handler_proxy<char> ehp (eh); + conf->setParameter (XMLUni::fgDOMErrorHandler, &ehp); + +#else // _XERCES_VERSION >= 30000 + + // Same as above but for Xerces-C++ 2 series. + // + xml::dom::auto_ptr<DOMBuilder> parser ( + impl->createDOMBuilder (DOMImplementationLS::MODE_SYNCHRONOUS, 0)); + + parser->setFeature (XMLUni::fgDOMComments, false); + parser->setFeature (XMLUni::fgDOMDatatypeNormalization, true); + parser->setFeature (XMLUni::fgDOMEntities, false); + parser->setFeature (XMLUni::fgDOMNamespaces, true); + parser->setFeature (XMLUni::fgDOMWhitespaceInElementContent, false); + parser->setFeature (XMLUni::fgDOMValidation, validate); + parser->setFeature (XMLUni::fgXercesSchema, validate); + parser->setFeature (XMLUni::fgXercesSchemaFullChecking, false); + parser->setFeature (XMLUni::fgXercesUserAdoptsDOMDocument, true); + + tree::error_handler<char> eh; + xml::dom::bits::error_handler_proxy<char> ehp (eh); + parser->setErrorHandler (&ehp); + +#endif // _XERCES_VERSION >= 30000 + + // Prepare input stream. + // + xml::sax::std_input_source isrc (is, id); + Wrapper4InputSource wrap (&isrc, false); + +#if _XERCES_VERSION >= 30000 + xml::dom::auto_ptr<DOMDocument> doc (parser->parse (&wrap)); +#else + xml::dom::auto_ptr<DOMDocument> doc (parser->parse (wrap)); +#endif + + eh.throw_if_failed<tree::parsing<char> > (); + + return doc; +} diff --git a/xsd/examples/cxx/tree/multiroot/dom-parse.hxx b/xsd/examples/cxx/tree/multiroot/dom-parse.hxx new file mode 100644 index 0000000..c3bbf71 --- /dev/null +++ b/xsd/examples/cxx/tree/multiroot/dom-parse.hxx @@ -0,0 +1,23 @@ +// file : examples/cxx/tree/multiroot/dom-parse.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : not copyrighted - public domain + +#ifndef DOM_PARSE +#define DOM_PARSE + +#include <string> +#include <iosfwd> + +#include <xercesc/dom/DOMDocument.hpp> +#include <xsd/cxx/xml/dom/auto-ptr.hxx> + +// Parse an XML document from the standard input stream with an +// optional resource id. Resource id is used in diagnostics as +// well as to locate schemas referenced from inside the document. +// +xsd::cxx::xml::dom::auto_ptr<xercesc::DOMDocument> +parse (std::istream& is, + const std::string& id, + bool validate); + +#endif // DOM_PARSE diff --git a/xsd/examples/cxx/tree/multiroot/driver.cxx b/xsd/examples/cxx/tree/multiroot/driver.cxx new file mode 100644 index 0000000..cd5be34 --- /dev/null +++ b/xsd/examples/cxx/tree/multiroot/driver.cxx @@ -0,0 +1,125 @@ +// file : examples/cxx/tree/multiroot/driver.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : not copyrighted - public domain + +#include <memory> // std::auto_ptr +#include <string> +#include <fstream> +#include <iostream> + +#include <xercesc/dom/DOM.hpp> +#include <xercesc/util/PlatformUtils.hpp> + +#include <xsd/cxx/xml/string.hxx> // xml::transcode + +#include "dom-parse.hxx" + +#include "protocol.hxx" + +using namespace std; +using namespace protocol; + +// Parse an XML document and return a pointer to request_t which can +// then be tested with dynamic_cast. If your vocabulary does not have +// a common base type for all root element types then you can use +// xml_schema::type which is a base for all generated types. +// +auto_ptr<request_t> +parse (istream& is, const string& id) +{ + using namespace xercesc; + namespace xml = xsd::cxx::xml; + + // Parse an XML instance to a DOM document using the parse() + // function from dom-parse.hxx. + // + xml_schema::dom::auto_ptr<DOMDocument> doc (parse (is, id, true)); + + DOMElement* root (doc->getDocumentElement ()); + + string ns (xml::transcode<char> (root->getNamespaceURI ())); + string name (xml::transcode<char> (root->getLocalName ())); + + auto_ptr<request_t> r; + + // We could have handled the result directly in this function + // instead of returning it as an opaque pointer and using + // dynamic_cast later to figure out which request we are dealing + // with. + // + if (ns == "http://www.codesynthesis.com/protocol") + { + if (name == "balance") + { + // Use the balance parsing function. + // + r.reset (balance (*doc).release ()); + } + else if (name == "withdraw") + { + // Use the withdraw parsing function. + // + r.reset (withdraw (*doc).release ()); + } + } + + if (r.get () == 0) + cerr << "ignoring unknown request: " << ns << "#" << name << endl; + + return r; +} + +int +main (int argc, char* argv[]) +{ + if (argc != 2) + { + cerr << "usage: " << argv[0] << " request.xml" << endl; + return 1; + } + + int r (0); + + // We need to initialize the Xerces-C++ runtime because we + // are doing the XML-to-DOM parsing ourselves. + // + xercesc::XMLPlatformUtils::Initialize (); + + try + { + ifstream ifs; + ifs.exceptions (ifstream::badbit | ifstream::failbit); + ifs.open (argv[1]); + + auto_ptr<request_t> r (parse (ifs, argv[1])); + + // Let's print what we've got. + // + if (balance_t* b = dynamic_cast<balance_t*> (r.get ())) + { + cerr << "balance request for acc# " << b->account () << endl; + } + else if (withdraw_t* w = dynamic_cast<withdraw_t*> (r.get ())) + { + cerr << "withdrawal request for acc# " << w->account () << ", " + << "amount: " << w->amount () << endl; + } + else + { + cerr << "unknown request" << endl; + } + } + catch (const xml_schema::exception& e) + { + cerr << e << endl; + r = 1; + } + catch (const std::ios_base::failure&) + { + cerr << argv[1] << ": unable to open or read failure" << endl; + r = 1; + } + + xercesc::XMLPlatformUtils::Terminate (); + return r; +} diff --git a/xsd/examples/cxx/tree/multiroot/makefile b/xsd/examples/cxx/tree/multiroot/makefile new file mode 100644 index 0000000..ea31976 --- /dev/null +++ b/xsd/examples/cxx/tree/multiroot/makefile @@ -0,0 +1,110 @@ +# file : examples/cxx/tree/multiroot/makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../../build/bootstrap.make + +xsd := protocol.xsd +cxx := driver.cxx dom-parse.cxx + +obj := $(addprefix $(out_base)/,$(cxx:.cxx=.o) $(xsd:.xsd=.o)) +dep := $(obj:.o=.o.d) + +driver := $(out_base)/driver +install := $(out_base)/.install +dist := $(out_base)/.dist +dist-win := $(out_base)/.dist-win +clean := $(out_base)/.clean + + +# Import. +# +$(call import,\ + $(scf_root)/import/libxerces-c/stub.make,\ + l: xerces_c.l,cpp-options: xerces_c.l.cpp-options) + + +# Build. +# +$(driver): $(obj) $(xerces_c.l) + +$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): $(xerces_c.l.cpp-options) + +genf := $(xsd:.xsd=.hxx) $(xsd:.xsd=.ixx) $(xsd:.xsd=.cxx) +gen := $(addprefix $(out_base)/,$(genf)) + +$(gen): xsd := $(out_root)/xsd/xsd +$(gen): xsd_options := --root-element-all +$(gen): $(out_root)/xsd/xsd + +$(call include-dep,$(dep)) + +# Convenience alias for default target. +# +$(out_base)/: $(driver) + + +# Install & Dist. +# +dist-common := $(out_base)/.dist-common + +$(install) $(dist) $(dist-win) $(dist-common): path := $(subst $(src_root)/,,$(src_base)) + +$(install): + $(call install-data,$(src_base)/README,$(install_doc_dir)/xsd/$(path)/README) + $(call install-data,$(src_base)/driver.cxx,$(install_doc_dir)/xsd/$(path)/driver.cxx) + $(call install-data,$(src_base)/protocol.xsd,$(install_doc_dir)/xsd/$(path)/protocol.xsd) + $(call install-data,$(src_base)/balance.xml,$(install_doc_dir)/xsd/$(path)/balance.xml) + $(call install-data,$(src_base)/deposit.xml,$(install_doc_dir)/xsd/$(path)/deposit.xml) + $(call install-data,$(src_base)/withdraw.xml,$(install_doc_dir)/xsd/$(path)/withdraw.xml) + $(call install-data,$(src_base)/dom-parse.hxx,$(install_doc_dir)/xsd/$(path)/dom-parse.hxx) + $(call install-data,$(src_base)/dom-parse.cxx,$(install_doc_dir)/xsd/$(path)/dom-parse.cxx) + +$(dist-common): + $(call install-data,$(src_base)/driver.cxx,$(dist_prefix)/$(path)/driver.cxx) + $(call install-data,$(src_base)/protocol.xsd,$(dist_prefix)/$(path)/protocol.xsd) + $(call install-data,$(src_base)/balance.xml,$(dist_prefix)/$(path)/balance.xml) + $(call install-data,$(src_base)/deposit.xml,$(dist_prefix)/$(path)/deposit.xml) + $(call install-data,$(src_base)/withdraw.xml,$(dist_prefix)/$(path)/withdraw.xml) + $(call install-data,$(src_base)/dom-parse.hxx,$(dist_prefix)/$(path)/dom-parse.hxx) + $(call install-data,$(src_base)/dom-parse.cxx,$(dist_prefix)/$(path)/dom-parse.cxx) + +$(dist): $(dist-common) + $(call install-data,$(src_base)/README,$(dist_prefix)/$(path)/README) + +$(dist-win): $(dist-common) + $(call install-data,$(src_base)/README,$(dist_prefix)/$(path)/README.txt) + $(call message,,unix2dos $(dist_prefix)/$(path)/README.txt) + +# Clean. +# +$(clean): $(driver).o.clean \ + $(addsuffix .cxx.clean,$(obj)) \ + $(addsuffix .cxx.clean,$(dep)) \ + $(addprefix $(out_base)/,$(xsd:.xsd=.cxx.xsd.clean)) + +# Generated .gitignore. +# +ifeq ($(out_base),$(src_base)) +$(gen): | $(out_base)/.gitignore +$(driver): | $(out_base)/.gitignore + +$(out_base)/.gitignore: files := driver $(genf) +$(clean): $(out_base)/.gitignore.clean + +$(call include,$(bld_root)/git/gitignore.make) +endif + +# How to. +# +$(call include,$(bld_root)/cxx/o-e.make) +$(call include,$(bld_root)/cxx/cxx-o.make) +$(call include,$(bld_root)/cxx/cxx-d.make) +$(call include,$(bld_root)/install.make) +$(call include,$(scf_root)/xsd/tree/xsd-cxx.make) + +# Dependencies. +# +$(call import,$(src_root)/xsd/makefile) diff --git a/xsd/examples/cxx/tree/multiroot/protocol.xsd b/xsd/examples/cxx/tree/multiroot/protocol.xsd new file mode 100644 index 0000000..28e8478 --- /dev/null +++ b/xsd/examples/cxx/tree/multiroot/protocol.xsd @@ -0,0 +1,51 @@ +<?xml version="1.0"?> + +<!-- + +file : examples/cxx/tree/multiroot/protocol.xsd +author : Boris Kolpackov <boris@codesynthesis.com> +copyright : not copyrighted - public domain + +--> + +<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns:p="http://www.codesynthesis.com/protocol" + targetNamespace="http://www.codesynthesis.com/protocol"> + + <xsd:complexType name="request_t"> + <xsd:sequence> + <xsd:element name="account" type="xsd:unsignedInt"/> + </xsd:sequence> + </xsd:complexType> + + <xsd:complexType name="balance_t"> + <xsd:complexContent> + <xsd:extension base="p:request_t"/> + </xsd:complexContent> + </xsd:complexType> + + <xsd:complexType name="withdraw_t"> + <xsd:complexContent> + <xsd:extension base="p:request_t"> + <xsd:sequence> + <xsd:element name="amount" type="xsd:unsignedInt"/> + </xsd:sequence> + </xsd:extension> + </xsd:complexContent> + </xsd:complexType> + + <xsd:complexType name="deposit_t"> + <xsd:complexContent> + <xsd:extension base="p:request_t"> + <xsd:sequence> + <xsd:element name="amount" type="xsd:unsignedInt"/> + </xsd:sequence> + </xsd:extension> + </xsd:complexContent> + </xsd:complexType> + + <xsd:element name="balance" type="p:balance_t"/> + <xsd:element name="withdraw" type="p:withdraw_t"/> + <xsd:element name="deposit" type="p:deposit_t"/> + +</xsd:schema> diff --git a/xsd/examples/cxx/tree/multiroot/withdraw.xml b/xsd/examples/cxx/tree/multiroot/withdraw.xml new file mode 100644 index 0000000..4df736f --- /dev/null +++ b/xsd/examples/cxx/tree/multiroot/withdraw.xml @@ -0,0 +1,18 @@ +<?xml version="1.0"?> + +<!-- + +file : examples/cxx/tree/multiroot/withdraw.xml +author : Boris Kolpackov <boris@codesynthesis.com> +copyright : not copyrighted - public domain + +--> + +<p:withdraw xmlns:p="http://www.codesynthesis.com/protocol" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.codesynthesis.com/protocol protocol.xsd"> + + <account>123456789</account> + <amount>1000000</amount> + +</p:withdraw> diff --git a/xsd/examples/cxx/tree/performance/README b/xsd/examples/cxx/tree/performance/README new file mode 100644 index 0000000..440ee62 --- /dev/null +++ b/xsd/examples/cxx/tree/performance/README @@ -0,0 +1,60 @@ +This example measures the performance of parsing and serialization in +the C++/Tree mapping. It also shows how to structure your code to +achieve the maximum performance for these two operations. + +The example consists of the following files: + +test.xsd + XML Schema which describes the test vocabulary. + +test-5k.xml +test-50k.xml +test-500k.xml + Test XML documents of various sizes. + +gen.cxx + Program to generate a test document of desired size. + +time.hxx +time.cxx + Class definition that represents time. + +test.hxx +test.ixx +test.cxx + C++ types that represent the given vocabulary, a set of parsing + functions that convert XML documents to a tree-like in-memory object + model, and a set of serialization functions that convert the object + model back to XML. These are generated by the XSD compiler from + test.xsd. + +parsing.cxx + Parsing performance test. It first reads the entire document into + a memory buffer. It then creates a DOM parser and pre-parses and + caches the schema if validation is enabled. Finally, it runs the + performance measurement loop which on each iteration parses the + XML document from the in-memory buffer into DOM and then DOM to + the object model. + +serialization.cxx + Serialization performance test. It first parses the XML document + into the object model. It then creates a memory buffer into which + the document is serialized and a DOM serializer. Finally, it runs + the performance measurement loop which on each iteration serializes + the object model to DOM and DOM to XML. + +driver.cxx + Driver for the example. It first parses the command line arguments. + It then initializes the Xerces-C++ runtime and calls the parsing + and serialization tests described above. + +To run the example on a test XML document simply execute: + +$ ./driver test-50k.xml + +The -v option can be used to turn on validation in the underlying XML +parser (off by default). The -i option can be used to specify the +number of parsing and serialization iterations (1000 by default). For +example: + +$ ./driver -v -i 100 test-500k.xml diff --git a/xsd/examples/cxx/tree/performance/driver.cxx b/xsd/examples/cxx/tree/performance/driver.cxx new file mode 100644 index 0000000..f3e388b --- /dev/null +++ b/xsd/examples/cxx/tree/performance/driver.cxx @@ -0,0 +1,91 @@ +// file : examples/cxx/tree/performance/driver.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : not copyrighted - public domain + +#include <string> +#include <sstream> +#include <iostream> + +#include <xercesc/util/PlatformUtils.hpp> + +using namespace std; + +// See parsing.cxx +// +bool +parsing (const char* file, unsigned long iter, bool validate); + +// See serialization.cxx +// +bool +serialization (const char* file, unsigned long iter); + +int +main (int argc, char* argv[]) +{ + if (argc < 2) + { + cerr << "usage: " << argv[0] << " [-v] [-i <count>] test.xml" << endl + << "\t -v turn on validation (default is off)" << endl + << "\t -i number of iterations to perform (default is 1000)" << endl; + return 1; + } + + bool validate (false); + unsigned long iter (1000); + const char* file (0); + + // Parse command line arguments. + // + for (int i (1); i < argc; ++i) + { + std::string arg (argv[i]); + + if (arg == "-v") + { + validate = true; + } + else if (arg == "-i") + { + if (++i == argc) + { + cerr << "argument expected for the -i option" << endl; + return 1; + } + + iter = 0; + istringstream is (argv[i]); + is >> iter; + + if (iter == 0) + { + cerr << "invalid argument for the -i option" << endl; + return 1; + } + } + else + { + file = argv[i]; + break; + } + } + + if (file == 0) + { + cerr << "no input file specified" << endl; + return 1; + } + + int r (0); + + xercesc::XMLPlatformUtils::Initialize (); + + // Call parsing and serialization tests. + // + if (!parsing (file, iter, validate) || !serialization (file, iter)) + r = 1; + + xercesc::XMLPlatformUtils::Terminate (); + + return r; +} diff --git a/xsd/examples/cxx/tree/performance/gen.cxx b/xsd/examples/cxx/tree/performance/gen.cxx new file mode 100644 index 0000000..b6392c0 --- /dev/null +++ b/xsd/examples/cxx/tree/performance/gen.cxx @@ -0,0 +1,76 @@ +#include <fstream> +#include <sstream> +#include <iostream> + +using namespace std; + +static const char* enums[] = +{ + "romance", + "fiction", + "horror", + "history", + "philosophy" +}; + +int +main (int argc, char* argv[]) +{ + if (argc != 3) + { + cerr << "usage: " << argv[0] << " <count> <output-file>" << endl; + return 1; + } + + unsigned long n (0); + istringstream is (argv[1]); + is >> n; + + if (n == 0) + { + cerr << "record count argument should be a positive number" << endl; + return 1; + } + + ofstream ofs (argv[2]); + + if (!ofs.is_open ()) + { + cerr << "unable to open '" << argv[2] << "' in write mode" << endl; + return 1; + } + + ofs << "<t:root xmlns:t='test' " << + "xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' " << + "xsi:schemaLocation='test test.xsd'>"; + + unsigned short ch (1), en (0); + + for (unsigned long i (0); i < n; ++i) + { + ofs << "<record orange=\"" << i << "\""; + + if (i % 2 == 0) + ofs << " apple=\"true\""; + + ofs << ">" + << "<int>42</int>" + << "<double>42345.4232</double>" + << "<name>name123_45</name>"; + + if (i % 2 == 1) + ofs << "<string>one two three</string>"; + + ofs << "<choice" << ch << ">" << ch << " choice</choice" << ch << ">" + << "<enum>" << enums[en] << "</enum>" + << "</record>"; + + if (++ch > 4) + ch = 1; + + if (++en > 4) + en = 0; + } + + ofs << "</t:root>"; +} diff --git a/xsd/examples/cxx/tree/performance/makefile b/xsd/examples/cxx/tree/performance/makefile new file mode 100644 index 0000000..5ba1a6c --- /dev/null +++ b/xsd/examples/cxx/tree/performance/makefile @@ -0,0 +1,116 @@ +# file : examples/cxx/tree/performance/makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../../build/bootstrap.make + +xsd := test.xsd +cxx := driver.cxx parsing.cxx serialization.cxx time.cxx + +obj := $(addprefix $(out_base)/,$(cxx:.cxx=.o) $(xsd:.xsd=.o)) +dep := $(obj:.o=.o.d) + +driver := $(out_base)/driver +install := $(out_base)/.install +dist := $(out_base)/.dist +dist-win := $(out_base)/.dist-win +clean := $(out_base)/.clean + + +# Import. +# +$(call import,\ + $(scf_root)/import/libxerces-c/stub.make,\ + l: xerces_c.l,cpp-options: xerces_c.l.cpp-options) + + +# Build. +# +$(driver): $(obj) $(xerces_c.l) + +$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): $(xerces_c.l.cpp-options) + +genf := $(xsd:.xsd=.hxx) $(xsd:.xsd=.ixx) $(xsd:.xsd=.cxx) +gen := $(addprefix $(out_base)/,$(genf)) + +$(gen): xsd := $(out_root)/xsd/xsd +$(gen): xsd_options := --generate-inline --generate-serialization +$(gen): $(out_root)/xsd/xsd + +$(call include-dep,$(dep)) + +# Convenience alias for default target. +# +$(out_base)/: $(driver) + + +# Install & Dist. +# +dist-common := $(out_base)/.dist-common + +$(install) $(dist) $(dist-win) $(dist-common): path := $(subst $(src_root)/,,$(src_base)) + +$(install): + $(call install-data,$(src_base)/README,$(install_doc_dir)/xsd/$(path)/README) + $(call install-data,$(src_base)/driver.cxx,$(install_doc_dir)/xsd/$(path)/driver.cxx) + $(call install-data,$(src_base)/parsing.cxx,$(install_doc_dir)/xsd/$(path)/parsing.cxx) + $(call install-data,$(src_base)/serialization.cxx,$(install_doc_dir)/xsd/$(path)/serialization.cxx) + $(call install-data,$(src_base)/test.xsd,$(install_doc_dir)/xsd/$(path)/test.xsd) + $(call install-data,$(src_base)/test-5k.xml,$(install_doc_dir)/xsd/$(path)/test-5k.xml) + $(call install-data,$(src_base)/test-50k.xml,$(install_doc_dir)/xsd/$(path)/test-50k.xml) + $(call install-data,$(src_base)/test-500k.xml,$(install_doc_dir)/xsd/$(path)/test-500k.xml) + $(call install-data,$(src_base)/time.hxx,$(install_doc_dir)/xsd/$(path)/time.hxx) + $(call install-data,$(src_base)/time.cxx,$(install_doc_dir)/xsd/$(path)/time.cxx) + $(call install-data,$(src_base)/gen.cxx,$(install_doc_dir)/xsd/$(path)/gen.cxx) + +$(dist-common): + $(call install-data,$(src_base)/driver.cxx,$(dist_prefix)/$(path)/driver.cxx) + $(call install-data,$(src_base)/parsing.cxx,$(dist_prefix)/$(path)/parsing.cxx) + $(call install-data,$(src_base)/serialization.cxx,$(dist_prefix)/$(path)/serialization.cxx) + $(call install-data,$(src_base)/test.xsd,$(dist_prefix)/$(path)/test.xsd) + $(call install-data,$(src_base)/test-5k.xml,$(dist_prefix)/$(path)/test-5k.xml) + $(call install-data,$(src_base)/test-50k.xml,$(dist_prefix)/$(path)/test-50k.xml) + $(call install-data,$(src_base)/test-500k.xml,$(dist_prefix)/$(path)/test-500k.xml) + $(call install-data,$(src_base)/time.hxx,$(dist_prefix)/$(path)/time.hxx) + $(call install-data,$(src_base)/time.cxx,$(dist_prefix)/$(path)/time.cxx) + $(call install-data,$(src_base)/gen.cxx,$(dist_prefix)/$(path)/gen.cxx) + +$(dist): $(dist-common) + $(call install-data,$(src_base)/README,$(dist_prefix)/$(path)/README) + +$(dist-win): $(dist-common) + $(call install-data,$(src_base)/README,$(dist_prefix)/$(path)/README.txt) + $(call message,,unix2dos $(dist_prefix)/$(path)/README.txt) + +# Clean. +# +$(clean): $(driver).o.clean \ + $(addsuffix .cxx.clean,$(obj)) \ + $(addsuffix .cxx.clean,$(dep)) \ + $(addprefix $(out_base)/,$(xsd:.xsd=.cxx.xsd.clean)) + +# Generated .gitignore. +# +ifeq ($(out_base),$(src_base)) +$(gen): | $(out_base)/.gitignore +$(driver): | $(out_base)/.gitignore + +$(out_base)/.gitignore: files := driver $(genf) +$(clean): $(out_base)/.gitignore.clean + +$(call include,$(bld_root)/git/gitignore.make) +endif + +# How to. +# +$(call include,$(bld_root)/cxx/o-e.make) +$(call include,$(bld_root)/cxx/cxx-o.make) +$(call include,$(bld_root)/cxx/cxx-d.make) +$(call include,$(bld_root)/install.make) +$(call include,$(scf_root)/xsd/tree/xsd-cxx.make) + +# Dependencies. +# +$(call import,$(src_root)/xsd/makefile) diff --git a/xsd/examples/cxx/tree/performance/parsing.cxx b/xsd/examples/cxx/tree/performance/parsing.cxx new file mode 100644 index 0000000..8d662eb --- /dev/null +++ b/xsd/examples/cxx/tree/performance/parsing.cxx @@ -0,0 +1,225 @@ +// file : examples/cxx/tree/performance/parsing.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : not copyrighted - public domain + +#include <memory> // std::auto_ptr +#include <cstddef> // std::size_t +#include <fstream> +#include <iostream> + +#include <xercesc/dom/DOM.hpp> +#if _XERCES_VERSION >= 30000 +# include <xercesc/dom/DOMLSParser.hpp> +#else +# include <xercesc/dom/DOMBuilder.hpp> +#endif +#include <xercesc/dom/DOMImplementation.hpp> +#include <xercesc/dom/DOMImplementationRegistry.hpp> + +#include <xercesc/validators/common/Grammar.hpp> + +#include <xercesc/framework/MemBufInputSource.hpp> +#include <xercesc/framework/Wrapper4InputSource.hpp> + +#include <xercesc/util/XMLUniDefs.hpp> + +#include <xsd/cxx/xml/dom/bits/error-handler-proxy.hxx> +#include <xsd/cxx/tree/error-handler.hxx> + +#include "time.hxx" +#include "test.hxx" + +using namespace std; + +bool +parsing (const char* file, unsigned long iter, bool validate) +{ + try + { + cerr << "parsing:" << endl; + + ifstream ifs; + ifs.exceptions (ios_base::failbit); + ifs.open (file, ios::in | ios::ate); + + size_t size (ifs.tellg ()); + ifs.seekg (0, ios::beg); + + char* buf = new char[size]; + ifs.read (buf, size); + ifs.close (); + + cerr << " document size: " << size << " bytes" << endl + << " iterations: " << iter << endl; + + // Create XML parser that we are going to use in all iterations. + // + using namespace xercesc; + + const XMLCh ls_id[] = + {xercesc::chLatin_L, xercesc::chLatin_S, xercesc::chNull}; + + DOMImplementation* impl ( + DOMImplementationRegistry::getDOMImplementation (ls_id)); + + // Use the error handler implementation provided by the XSD runtime. + // + xsd::cxx::tree::error_handler<char> eh; + xsd::cxx::xml::dom::bits::error_handler_proxy<char> ehp (eh); + +#if _XERCES_VERSION >= 30000 + + xml_schema::dom::auto_ptr<DOMLSParser> parser ( + impl->createLSParser (DOMImplementationLS::MODE_SYNCHRONOUS, 0)); + + DOMConfiguration* conf (parser->getDomConfig ()); + + conf->setParameter (XMLUni::fgDOMComments, false); + conf->setParameter (XMLUni::fgDOMDatatypeNormalization, true); + conf->setParameter (XMLUni::fgDOMEntities, false); + conf->setParameter (XMLUni::fgDOMNamespaces, true); + conf->setParameter (XMLUni::fgDOMElementContentWhitespace, false); + + // Set error handler. + // + conf->setParameter (XMLUni::fgDOMErrorHandler, &ehp); + + if (validate) + { + conf->setParameter (XMLUni::fgDOMValidate, true); + conf->setParameter (XMLUni::fgXercesSchema, true); + conf->setParameter (XMLUni::fgXercesSchemaFullChecking, false); + + // Xerces-C++ 3.1.0 is the first version with working multi import + // support. + // +#if _XERCES_VERSION >= 30100 + conf->setParameter (XMLUni::fgXercesHandleMultipleImports, true); +#endif + + // If we are validating, pre-load and cache the schema. + // + if (!parser->loadGrammar ("test.xsd", Grammar::SchemaGrammarType, true)) + { + // In Xerces-C++ grammar loading failure results in just a warning. + // Make it a fatal error. + // + eh.handle ("test.xsd", 0, 0, + xsd::cxx::tree::error_handler<char>::severity::fatal, + "unable to load schema"); + } + + eh.throw_if_failed<xml_schema::parsing> (); + conf->setParameter (XMLUni::fgXercesUseCachedGrammarInParse, true); + conf->setParameter (XMLUni::fgXercesLoadSchema, false); + } + else + { + conf->setParameter (XMLUni::fgDOMValidate, false); + conf->setParameter (XMLUni::fgXercesSchema, false); + conf->setParameter (XMLUni::fgXercesSchemaFullChecking, false); + } + + conf->setParameter (XMLUni::fgXercesUserAdoptsDOMDocument, true); + +#else // _XERCES_VERSION >= 30000 + + // Same as above but for Xerces-C++ 2 series. + // + xml_schema::dom::auto_ptr<DOMBuilder> parser ( + impl->createDOMBuilder(DOMImplementationLS::MODE_SYNCHRONOUS, 0)); + + parser->setFeature (XMLUni::fgDOMComments, false); + parser->setFeature (XMLUni::fgDOMDatatypeNormalization, true); + parser->setFeature (XMLUni::fgDOMEntities, false); + parser->setFeature (XMLUni::fgDOMNamespaces, true); + parser->setFeature (XMLUni::fgDOMWhitespaceInElementContent, false); + + parser->setErrorHandler (&ehp); + + if (validate) + { + parser->setFeature (XMLUni::fgDOMValidation, true); + parser->setFeature (XMLUni::fgXercesSchema, true); + parser->setFeature (XMLUni::fgXercesSchemaFullChecking, false); + + if (!parser->loadGrammar ("test.xsd", Grammar::SchemaGrammarType, true)) + { + eh.handle ("test.xsd", 0, 0, + xsd::cxx::tree::error_handler<char>::severity::fatal, + "unable to load schema"); + } + + eh.throw_if_failed<xml_schema::parsing> (); + parser->setFeature (XMLUni::fgXercesUseCachedGrammarInParse, true); + } + else + { + parser->setFeature (XMLUni::fgDOMValidation, false); + parser->setFeature (XMLUni::fgXercesSchema, false); + parser->setFeature (XMLUni::fgXercesSchemaFullChecking, false); + } + + parser->setFeature (XMLUni::fgXercesUserAdoptsDOMDocument, true); + +#endif + + // Create memory buffer input source. + // + MemBufInputSource is ( + reinterpret_cast<XMLByte*> (buf), size, file, false); + is.setCopyBufToStream (false); + Wrapper4InputSource wis (&is, false); + + // Parsing loop. + // + os::time start; + + for (unsigned long i (0); i < iter; ++i) + { + // First parse XML to DOM reusing the parser we created above. + // +#if _XERCES_VERSION >= 30000 + xml_schema::dom::auto_ptr<DOMDocument> doc (parser->parse (&wis)); +#else + xml_schema::dom::auto_ptr<DOMDocument> doc (parser->parse (wis)); +#endif + eh.throw_if_failed<xml_schema::parsing> (); + + // Then parse DOM to the object model. + // + auto_ptr<test::root> r (test::root_ (*doc)); + } + + os::time end; + os::time time (end - start); + + delete[] buf; + + cerr << " time: " << time << " sec" << endl; + + double ms (time.sec () * 1000000ULL + time.nsec () / 1000ULL); + + // Calculate throughput in documents/sec. + // + double tpd ((iter / ms) * 1000000); + cerr << " throughput: " << tpd << " documents/sec" << endl; + + // Calculate throughput in MBytes/sec. + // + double tpb (((size * iter) / ms) * 1000000/(1024*1024)); + cerr << " throughput: " << tpb << " MBytes/sec" << endl; + } + catch (const xml_schema::exception& e) + { + cerr << e << endl; + return false; + } + catch (std::ios_base::failure const&) + { + cerr << "io failure" << endl; + return false; + } + + return true; +} diff --git a/xsd/examples/cxx/tree/performance/serialization.cxx b/xsd/examples/cxx/tree/performance/serialization.cxx new file mode 100644 index 0000000..12c43ae --- /dev/null +++ b/xsd/examples/cxx/tree/performance/serialization.cxx @@ -0,0 +1,151 @@ +// file : examples/cxx/tree/performance/serialization.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : not copyrighted - public domain + +#include <memory> // std::auto_ptr +#include <cstddef> // std::size_t +#include <sstream> +#include <iostream> + +#include <xercesc/dom/DOM.hpp> +#if _XERCES_VERSION >= 30000 +# include <xercesc/dom/DOMLSOutput.hpp> +# include <xercesc/dom/DOMLSSerializer.hpp> +#else +# include <xercesc/dom/DOMWriter.hpp> +#endif +#include <xercesc/dom/DOMImplementation.hpp> +#include <xercesc/dom/DOMImplementationRegistry.hpp> + +#include <xercesc/framework/MemBufFormatTarget.hpp> + +#include <xercesc/util/XMLUniDefs.hpp> + +#include <xsd/cxx/xml/dom/bits/error-handler-proxy.hxx> +#include <xsd/cxx/tree/error-handler.hxx> + +#include "time.hxx" +#include "test.hxx" + +using namespace std; + +bool +serialization (const char* file, unsigned long iter) +{ + try + { + using namespace xercesc; + + cerr << "serialization:" << endl; + + // Get the object model using the standard parsing function. + // + auto_ptr<test::root> r ( + test::root_ (file, + xml_schema::flags::dont_initialize | + xml_schema::flags::dont_validate)); + + // Serialize it to the in-memory buffer. This makes sure the buffer + // pre-allocates enough memory. + // + xml_schema::namespace_infomap map; + map["t"].name = "test"; + map["t"].schema = "test.xsd"; + + MemBufFormatTarget ft (10240); + test::root_ (ft, *r, map, "UTF-8", + xml_schema::flags::dont_initialize | + xml_schema::flags::dont_pretty_print | + xml_schema::flags::no_xml_declaration); + + size_t size (ft.getLen ()); + cerr << " document size: " << size << " bytes" << endl + << " iterations: " << iter << endl; + + // Create XML serializer that we are going to use in all iterations. + // + const XMLCh ls_id[] = + {xercesc::chLatin_L, xercesc::chLatin_S, xercesc::chNull}; + + DOMImplementation* impl ( + DOMImplementationRegistry::getDOMImplementation (ls_id)); + + // Use the error handler implementation provided by the XSD runtime. + // + xsd::cxx::tree::error_handler<char> eh; + xsd::cxx::xml::dom::bits::error_handler_proxy<char> ehp (eh); + +#if _XERCES_VERSION >= 30000 + xml_schema::dom::auto_ptr<DOMLSSerializer> writer ( + impl->createLSSerializer ()); + + DOMConfiguration* conf (writer->getDomConfig ()); + + conf->setParameter (XMLUni::fgDOMErrorHandler, &ehp); + conf->setParameter (XMLUni::fgDOMXMLDeclaration, false); + + xml_schema::dom::auto_ptr<DOMLSOutput> out (impl->createLSOutput ()); + + out->setByteStream (&ft); +#else + // Same as above but for Xerces-C++ 2 series. + // + xml_schema::dom::auto_ptr<DOMWriter> writer (impl->createDOMWriter ()); + + writer->setErrorHandler (&ehp); + writer->setFeature (XMLUni::fgDOMXMLDeclaration, false); +#endif + + // Serialization loop. + // + os::time start; + + for (unsigned long i (0); i < iter; ++i) + { + // First serialize the object model to DOM. + // + xml_schema::dom::auto_ptr<DOMDocument> doc (test::root_ (*r, map)); + + ft.reset (); + + // Then serialize DOM to XML reusing the serializer we created above. + // +#if _XERCES_VERSION >= 30000 + writer->write (doc.get (), out.get ()); +#else + writer->writeNode (&ft, *doc); +#endif + + eh.throw_if_failed<xml_schema::serialization> (); + } + + os::time end; + os::time time (end - start); + + cerr << " time: " << time << " sec" << endl; + + double ms (time.sec () * 1000000ULL + time.nsec () / 1000ULL); + + // Calculate throughput in documents/sec. + // + double tpd ((iter / ms) * 1000000); + cerr << " throughput: " << tpd << " documents/sec" << endl; + + // Calculate throughput in MBytes/sec. + // + double tpb (((size * iter) / ms) * 1000000/(1024*1024)); + cerr << " throughput: " << tpb << " MBytes/sec" << endl; + } + catch (const xml_schema::exception& e) + { + cerr << e << endl; + return false; + } + catch (std::ios_base::failure const&) + { + cerr << "io failure" << endl; + return false; + } + + return true; +} diff --git a/xsd/examples/cxx/tree/performance/test-500k.xml b/xsd/examples/cxx/tree/performance/test-500k.xml new file mode 100644 index 0000000..e895584 --- /dev/null +++ b/xsd/examples/cxx/tree/performance/test-500k.xml @@ -0,0 +1 @@ +<t:root xmlns:t='test' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:schemaLocation='test test.xsd'><record orange="0" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="1"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="2" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="3"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="4" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="5"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="6" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="7"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="8" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="9"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="10" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="11"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="12" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="13"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="14" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="15"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="16" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="17"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="18" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="19"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="20" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="21"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="22" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="23"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="24" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="25"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="26" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="27"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="28" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="29"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="30" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="31"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="32" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="33"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="34" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="35"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="36" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="37"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="38" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="39"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="40" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="41"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="42" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="43"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="44" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="45"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="46" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="47"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="48" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="49"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="50" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="51"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="52" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="53"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="54" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="55"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="56" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="57"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="58" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="59"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="60" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="61"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="62" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="63"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="64" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="65"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="66" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="67"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="68" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="69"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="70" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="71"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="72" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="73"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="74" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="75"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="76" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="77"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="78" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="79"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="80" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="81"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="82" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="83"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="84" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="85"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="86" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="87"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="88" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="89"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="90" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="91"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="92" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="93"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="94" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="95"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="96" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="97"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="98" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="99"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="100" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="101"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="102" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="103"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="104" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="105"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="106" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="107"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="108" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="109"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="110" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="111"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="112" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="113"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="114" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="115"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="116" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="117"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="118" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="119"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="120" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="121"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="122" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="123"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="124" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="125"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="126" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="127"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="128" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="129"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="130" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="131"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="132" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="133"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="134" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="135"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="136" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="137"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="138" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="139"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="140" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="141"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="142" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="143"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="144" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="145"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="146" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="147"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="148" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="149"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="150" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="151"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="152" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="153"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="154" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="155"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="156" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="157"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="158" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="159"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="160" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="161"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="162" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="163"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="164" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="165"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="166" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="167"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="168" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="169"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="170" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="171"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="172" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="173"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="174" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="175"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="176" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="177"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="178" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="179"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="180" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="181"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="182" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="183"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="184" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="185"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="186" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="187"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="188" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="189"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="190" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="191"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="192" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="193"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="194" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="195"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="196" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="197"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="198" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="199"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="200" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="201"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="202" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="203"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="204" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="205"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="206" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="207"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="208" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="209"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="210" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="211"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="212" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="213"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="214" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="215"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="216" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="217"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="218" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="219"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="220" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="221"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="222" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="223"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="224" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="225"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="226" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="227"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="228" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="229"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="230" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="231"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="232" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="233"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="234" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="235"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="236" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="237"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="238" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="239"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="240" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="241"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="242" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="243"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="244" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="245"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="246" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="247"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="248" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="249"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="250" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="251"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="252" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="253"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="254" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="255"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="256" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="257"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="258" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="259"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="260" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="261"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="262" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="263"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="264" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="265"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="266" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="267"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="268" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="269"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="270" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="271"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="272" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="273"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="274" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="275"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="276" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="277"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="278" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="279"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="280" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="281"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="282" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="283"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="284" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="285"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="286" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="287"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="288" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="289"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="290" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="291"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="292" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="293"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="294" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="295"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="296" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="297"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="298" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="299"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="300" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="301"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="302" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="303"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="304" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="305"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="306" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="307"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="308" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="309"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="310" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="311"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="312" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="313"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="314" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="315"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="316" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="317"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="318" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="319"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="320" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="321"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="322" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="323"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="324" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="325"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="326" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="327"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="328" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="329"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="330" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="331"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="332" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="333"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="334" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="335"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="336" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="337"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="338" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="339"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="340" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="341"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="342" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="343"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="344" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="345"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="346" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="347"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="348" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="349"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="350" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="351"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="352" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="353"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="354" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="355"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="356" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="357"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="358" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="359"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="360" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="361"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="362" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="363"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="364" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="365"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="366" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="367"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="368" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="369"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="370" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="371"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="372" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="373"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="374" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="375"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="376" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="377"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="378" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="379"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="380" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="381"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="382" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="383"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="384" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="385"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="386" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="387"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="388" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="389"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="390" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="391"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="392" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="393"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="394" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="395"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="396" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="397"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="398" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="399"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="400" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="401"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="402" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="403"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="404" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="405"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="406" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="407"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="408" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="409"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="410" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="411"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="412" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="413"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="414" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="415"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="416" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="417"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="418" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="419"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="420" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="421"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="422" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="423"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="424" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="425"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="426" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="427"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="428" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="429"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="430" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="431"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="432" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="433"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="434" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="435"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="436" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="437"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="438" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="439"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="440" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="441"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="442" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="443"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="444" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="445"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="446" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="447"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="448" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="449"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="450" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="451"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="452" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="453"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="454" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="455"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="456" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="457"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="458" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="459"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="460" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="461"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="462" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="463"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="464" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="465"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="466" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="467"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="468" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="469"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="470" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="471"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="472" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="473"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="474" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="475"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="476" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="477"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="478" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="479"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="480" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="481"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="482" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="483"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="484" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="485"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="486" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="487"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="488" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="489"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="490" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="491"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="492" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="493"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="494" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="495"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="496" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="497"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="498" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="499"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="500" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="501"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="502" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="503"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="504" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="505"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="506" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="507"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="508" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="509"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="510" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="511"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="512" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="513"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="514" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="515"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="516" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="517"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="518" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="519"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="520" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="521"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="522" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="523"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="524" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="525"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="526" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="527"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="528" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="529"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="530" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="531"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="532" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="533"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="534" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="535"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="536" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="537"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="538" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="539"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="540" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="541"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="542" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="543"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="544" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="545"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="546" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="547"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="548" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="549"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="550" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="551"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="552" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="553"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="554" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="555"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="556" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="557"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="558" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="559"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="560" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="561"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="562" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="563"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="564" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="565"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="566" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="567"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="568" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="569"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="570" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="571"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="572" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="573"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="574" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="575"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="576" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="577"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="578" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="579"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="580" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="581"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="582" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="583"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="584" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="585"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="586" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="587"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="588" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="589"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="590" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="591"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="592" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="593"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="594" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="595"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="596" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="597"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="598" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="599"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="600" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="601"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="602" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="603"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="604" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="605"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="606" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="607"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="608" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="609"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="610" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="611"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="612" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="613"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="614" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="615"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="616" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="617"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="618" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="619"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="620" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="621"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="622" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="623"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="624" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="625"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="626" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="627"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="628" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="629"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="630" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="631"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="632" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="633"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="634" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="635"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="636" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="637"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="638" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="639"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="640" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="641"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="642" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="643"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="644" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="645"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="646" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="647"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="648" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="649"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="650" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="651"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="652" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="653"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="654" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="655"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="656" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="657"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="658" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="659"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="660" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="661"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="662" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="663"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="664" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="665"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="666" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="667"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="668" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="669"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="670" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="671"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="672" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="673"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="674" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="675"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="676" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="677"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="678" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="679"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="680" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="681"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="682" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="683"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="684" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="685"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="686" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="687"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="688" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="689"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="690" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="691"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="692" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="693"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="694" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="695"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="696" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="697"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="698" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="699"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="700" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="701"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="702" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="703"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="704" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="705"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="706" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="707"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="708" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="709"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="710" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="711"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="712" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="713"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="714" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="715"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="716" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="717"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="718" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="719"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="720" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="721"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="722" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="723"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="724" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="725"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="726" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="727"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="728" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="729"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="730" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="731"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="732" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="733"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="734" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="735"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="736" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="737"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="738" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="739"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="740" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="741"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="742" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="743"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="744" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="745"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="746" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="747"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="748" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="749"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="750" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="751"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="752" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="753"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="754" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="755"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="756" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="757"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="758" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="759"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="760" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="761"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="762" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="763"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="764" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="765"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="766" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="767"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="768" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="769"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="770" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="771"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="772" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="773"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="774" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="775"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="776" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="777"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="778" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="779"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="780" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="781"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="782" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="783"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="784" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="785"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="786" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="787"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="788" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="789"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="790" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="791"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="792" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="793"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="794" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="795"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="796" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="797"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="798" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="799"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="800" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="801"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="802" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="803"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="804" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="805"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="806" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="807"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="808" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="809"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="810" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="811"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="812" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="813"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="814" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="815"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="816" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="817"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="818" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="819"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="820" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="821"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="822" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="823"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="824" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="825"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="826" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="827"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="828" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="829"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="830" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="831"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="832" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="833"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="834" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="835"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="836" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="837"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="838" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="839"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="840" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="841"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="842" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="843"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="844" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="845"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="846" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="847"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="848" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="849"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="850" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="851"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="852" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="853"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="854" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="855"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="856" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="857"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="858" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="859"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="860" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="861"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="862" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="863"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="864" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="865"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="866" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="867"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="868" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="869"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="870" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="871"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="872" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="873"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="874" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="875"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="876" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="877"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="878" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="879"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="880" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="881"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="882" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="883"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="884" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="885"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="886" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="887"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="888" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="889"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="890" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="891"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="892" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="893"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="894" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="895"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="896" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="897"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="898" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="899"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="900" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="901"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="902" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="903"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="904" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="905"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="906" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="907"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="908" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="909"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="910" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="911"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="912" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="913"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="914" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="915"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="916" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="917"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="918" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="919"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="920" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="921"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="922" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="923"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="924" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="925"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="926" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="927"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="928" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="929"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="930" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="931"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="932" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="933"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="934" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="935"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="936" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="937"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="938" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="939"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="940" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="941"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="942" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="943"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="944" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="945"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="946" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="947"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="948" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="949"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="950" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="951"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="952" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="953"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="954" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="955"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="956" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="957"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="958" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="959"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="960" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="961"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="962" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="963"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="964" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="965"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="966" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="967"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="968" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="969"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="970" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="971"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="972" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="973"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="974" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="975"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="976" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="977"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="978" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="979"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="980" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="981"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="982" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="983"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="984" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="985"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="986" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="987"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="988" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="989"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="990" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="991"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="992" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="993"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="994" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="995"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="996" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="997"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="998" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="999"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="1000" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="1001"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="1002" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="1003"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="1004" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="1005"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="1006" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="1007"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="1008" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="1009"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="1010" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="1011"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="1012" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="1013"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="1014" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="1015"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="1016" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="1017"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="1018" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="1019"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="1020" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="1021"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="1022" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="1023"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="1024" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="1025"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="1026" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="1027"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="1028" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="1029"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="1030" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="1031"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="1032" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="1033"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="1034" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="1035"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="1036" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="1037"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="1038" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="1039"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="1040" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="1041"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="1042" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="1043"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="1044" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="1045"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="1046" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="1047"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="1048" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="1049"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="1050" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="1051"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="1052" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="1053"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="1054" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="1055"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="1056" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="1057"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="1058" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="1059"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="1060" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="1061"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="1062" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="1063"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="1064" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="1065"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="1066" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="1067"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="1068" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="1069"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="1070" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="1071"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="1072" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="1073"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="1074" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="1075"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="1076" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="1077"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="1078" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="1079"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="1080" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="1081"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="1082" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="1083"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="1084" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="1085"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="1086" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="1087"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="1088" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="1089"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="1090" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="1091"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="1092" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="1093"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="1094" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="1095"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="1096" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="1097"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="1098" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="1099"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="1100" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="1101"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="1102" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="1103"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="1104" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="1105"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="1106" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="1107"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="1108" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="1109"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="1110" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="1111"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="1112" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="1113"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="1114" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="1115"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="1116" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="1117"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="1118" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="1119"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="1120" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="1121"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="1122" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="1123"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="1124" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="1125"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="1126" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="1127"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="1128" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="1129"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="1130" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="1131"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="1132" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="1133"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="1134" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="1135"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="1136" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="1137"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="1138" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="1139"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="1140" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="1141"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="1142" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="1143"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="1144" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="1145"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="1146" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="1147"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="1148" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="1149"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="1150" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="1151"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="1152" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="1153"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="1154" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="1155"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="1156" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="1157"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="1158" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="1159"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="1160" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="1161"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="1162" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="1163"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="1164" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="1165"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="1166" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="1167"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="1168" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="1169"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="1170" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="1171"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="1172" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="1173"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="1174" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="1175"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="1176" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="1177"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="1178" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="1179"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="1180" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="1181"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="1182" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="1183"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="1184" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="1185"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="1186" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="1187"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="1188" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="1189"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="1190" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="1191"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="1192" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="1193"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="1194" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="1195"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="1196" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="1197"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="1198" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="1199"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="1200" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="1201"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="1202" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="1203"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="1204" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="1205"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="1206" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="1207"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="1208" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="1209"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="1210" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="1211"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="1212" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="1213"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="1214" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="1215"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="1216" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="1217"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="1218" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="1219"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="1220" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="1221"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="1222" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="1223"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="1224" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="1225"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="1226" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="1227"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="1228" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="1229"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="1230" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="1231"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="1232" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="1233"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="1234" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="1235"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="1236" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="1237"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="1238" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="1239"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="1240" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="1241"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="1242" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="1243"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="1244" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="1245"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="1246" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="1247"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="1248" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="1249"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="1250" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="1251"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="1252" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="1253"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="1254" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="1255"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="1256" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="1257"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="1258" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="1259"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="1260" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="1261"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="1262" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="1263"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="1264" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="1265"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="1266" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="1267"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="1268" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="1269"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="1270" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="1271"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="1272" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="1273"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="1274" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="1275"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="1276" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="1277"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="1278" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="1279"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="1280" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="1281"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="1282" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="1283"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="1284" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="1285"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="1286" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="1287"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="1288" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="1289"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="1290" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="1291"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="1292" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="1293"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="1294" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="1295"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="1296" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="1297"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="1298" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="1299"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="1300" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="1301"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="1302" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="1303"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="1304" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="1305"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="1306" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="1307"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="1308" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="1309"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="1310" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="1311"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="1312" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="1313"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="1314" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="1315"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="1316" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="1317"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="1318" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="1319"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="1320" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="1321"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="1322" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="1323"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="1324" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="1325"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="1326" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="1327"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="1328" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="1329"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="1330" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="1331"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="1332" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="1333"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="1334" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="1335"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="1336" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="1337"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="1338" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="1339"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="1340" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="1341"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="1342" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="1343"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="1344" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="1345"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="1346" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="1347"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="1348" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="1349"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="1350" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="1351"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="1352" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="1353"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="1354" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="1355"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="1356" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="1357"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="1358" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="1359"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="1360" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="1361"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="1362" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="1363"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="1364" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="1365"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="1366" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="1367"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="1368" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="1369"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="1370" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="1371"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="1372" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="1373"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="1374" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="1375"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="1376" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="1377"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="1378" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="1379"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="1380" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="1381"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="1382" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="1383"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="1384" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="1385"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="1386" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="1387"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="1388" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="1389"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="1390" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="1391"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="1392" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="1393"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="1394" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="1395"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="1396" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="1397"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="1398" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="1399"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="1400" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="1401"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="1402" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="1403"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="1404" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="1405"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="1406" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="1407"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="1408" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="1409"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="1410" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="1411"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="1412" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="1413"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="1414" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="1415"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="1416" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="1417"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="1418" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="1419"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="1420" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="1421"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="1422" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="1423"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="1424" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="1425"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="1426" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="1427"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="1428" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="1429"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="1430" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="1431"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="1432" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="1433"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="1434" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="1435"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="1436" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="1437"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="1438" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="1439"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="1440" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="1441"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="1442" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="1443"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="1444" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="1445"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="1446" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="1447"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="1448" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="1449"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="1450" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="1451"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="1452" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="1453"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="1454" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="1455"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="1456" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="1457"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="1458" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="1459"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="1460" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="1461"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="1462" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="1463"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="1464" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="1465"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="1466" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="1467"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="1468" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="1469"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="1470" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="1471"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="1472" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="1473"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="1474" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="1475"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="1476" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="1477"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="1478" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="1479"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="1480" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="1481"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="1482" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="1483"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="1484" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="1485"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="1486" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="1487"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="1488" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="1489"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="1490" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="1491"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="1492" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="1493"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="1494" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="1495"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="1496" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="1497"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="1498" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="1499"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="1500" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="1501"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="1502" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="1503"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="1504" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="1505"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="1506" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="1507"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="1508" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="1509"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="1510" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="1511"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="1512" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="1513"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="1514" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="1515"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="1516" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="1517"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="1518" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="1519"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="1520" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="1521"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="1522" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="1523"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="1524" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="1525"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="1526" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="1527"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="1528" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="1529"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="1530" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="1531"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="1532" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="1533"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="1534" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="1535"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="1536" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="1537"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="1538" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="1539"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="1540" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="1541"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="1542" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="1543"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="1544" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="1545"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="1546" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="1547"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="1548" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="1549"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="1550" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="1551"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="1552" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="1553"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="1554" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="1555"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="1556" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="1557"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="1558" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="1559"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="1560" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="1561"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="1562" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="1563"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="1564" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="1565"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="1566" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="1567"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="1568" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="1569"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="1570" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="1571"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="1572" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="1573"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="1574" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="1575"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="1576" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="1577"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="1578" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="1579"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="1580" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="1581"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="1582" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="1583"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="1584" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="1585"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="1586" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="1587"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="1588" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="1589"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="1590" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="1591"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="1592" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="1593"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="1594" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="1595"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="1596" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="1597"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="1598" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="1599"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="1600" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="1601"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="1602" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="1603"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="1604" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="1605"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="1606" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="1607"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="1608" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="1609"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="1610" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="1611"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="1612" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="1613"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="1614" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="1615"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="1616" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="1617"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="1618" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="1619"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="1620" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="1621"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="1622" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="1623"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="1624" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="1625"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="1626" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="1627"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="1628" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="1629"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="1630" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="1631"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="1632" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="1633"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="1634" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="1635"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="1636" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="1637"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="1638" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="1639"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="1640" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="1641"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="1642" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="1643"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="1644" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="1645"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="1646" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="1647"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="1648" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="1649"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="1650" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="1651"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="1652" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="1653"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="1654" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="1655"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="1656" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="1657"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="1658" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="1659"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="1660" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="1661"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="1662" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="1663"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="1664" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="1665"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="1666" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="1667"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="1668" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="1669"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="1670" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="1671"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="1672" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="1673"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="1674" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="1675"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="1676" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="1677"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="1678" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="1679"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="1680" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="1681"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="1682" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="1683"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="1684" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="1685"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="1686" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="1687"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="1688" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="1689"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="1690" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="1691"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="1692" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="1693"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="1694" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="1695"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="1696" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="1697"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="1698" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="1699"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="1700" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="1701"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="1702" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="1703"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="1704" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="1705"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="1706" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="1707"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="1708" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="1709"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="1710" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="1711"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="1712" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="1713"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="1714" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="1715"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="1716" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="1717"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="1718" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="1719"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="1720" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="1721"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="1722" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="1723"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="1724" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="1725"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="1726" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="1727"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="1728" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="1729"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="1730" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="1731"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="1732" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="1733"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="1734" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="1735"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="1736" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="1737"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="1738" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="1739"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="1740" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="1741"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="1742" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="1743"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="1744" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="1745"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="1746" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="1747"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="1748" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="1749"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="1750" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="1751"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="1752" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="1753"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="1754" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="1755"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="1756" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="1757"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="1758" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="1759"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="1760" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="1761"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="1762" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="1763"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="1764" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="1765"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="1766" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="1767"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="1768" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="1769"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="1770" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="1771"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="1772" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="1773"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="1774" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="1775"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="1776" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="1777"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="1778" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="1779"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="1780" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="1781"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="1782" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="1783"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="1784" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="1785"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="1786" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="1787"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="1788" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="1789"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="1790" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="1791"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="1792" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="1793"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="1794" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="1795"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="1796" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="1797"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="1798" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="1799"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="1800" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="1801"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="1802" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="1803"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="1804" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="1805"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="1806" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="1807"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="1808" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="1809"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="1810" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="1811"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="1812" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="1813"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="1814" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="1815"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="1816" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="1817"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="1818" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="1819"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="1820" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="1821"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="1822" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="1823"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="1824" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="1825"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="1826" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="1827"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="1828" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="1829"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="1830" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="1831"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="1832" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="1833"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="1834" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="1835"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="1836" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="1837"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="1838" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="1839"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="1840" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="1841"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="1842" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="1843"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="1844" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="1845"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="1846" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="1847"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="1848" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="1849"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="1850" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="1851"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="1852" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="1853"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="1854" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="1855"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="1856" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="1857"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="1858" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="1859"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="1860" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="1861"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="1862" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="1863"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="1864" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="1865"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="1866" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="1867"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="1868" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="1869"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="1870" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="1871"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="1872" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="1873"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="1874" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="1875"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="1876" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="1877"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="1878" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="1879"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="1880" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="1881"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="1882" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="1883"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="1884" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="1885"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="1886" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="1887"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="1888" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="1889"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="1890" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="1891"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="1892" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="1893"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="1894" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="1895"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="1896" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="1897"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="1898" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="1899"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="1900" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="1901"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="1902" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="1903"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="1904" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="1905"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="1906" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="1907"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="1908" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="1909"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="1910" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="1911"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="1912" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="1913"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="1914" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="1915"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="1916" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="1917"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="1918" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="1919"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="1920" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="1921"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="1922" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="1923"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="1924" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="1925"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="1926" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="1927"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="1928" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="1929"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="1930" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="1931"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="1932" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="1933"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="1934" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="1935"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="1936" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="1937"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="1938" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="1939"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="1940" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="1941"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="1942" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="1943"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="1944" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="1945"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="1946" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="1947"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="1948" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="1949"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="1950" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="1951"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="1952" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="1953"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="1954" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="1955"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="1956" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="1957"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="1958" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="1959"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="1960" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="1961"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="1962" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="1963"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="1964" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="1965"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="1966" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="1967"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="1968" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="1969"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="1970" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="1971"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="1972" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="1973"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="1974" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="1975"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="1976" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="1977"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="1978" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="1979"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="1980" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="1981"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="1982" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="1983"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="1984" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="1985"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="1986" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="1987"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="1988" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="1989"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="1990" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="1991"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="1992" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="1993"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="1994" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="1995"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="1996" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="1997"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="1998" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="1999"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="2000" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="2001"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="2002" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="2003"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="2004" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="2005"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="2006" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="2007"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="2008" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="2009"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="2010" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="2011"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="2012" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="2013"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="2014" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="2015"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="2016" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="2017"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="2018" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="2019"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="2020" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="2021"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="2022" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="2023"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="2024" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="2025"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="2026" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="2027"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="2028" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="2029"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="2030" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="2031"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="2032" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="2033"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="2034" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="2035"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="2036" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="2037"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="2038" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="2039"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="2040" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="2041"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="2042" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="2043"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="2044" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="2045"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="2046" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="2047"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="2048" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="2049"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="2050" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="2051"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="2052" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="2053"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="2054" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="2055"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="2056" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="2057"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="2058" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="2059"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="2060" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="2061"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="2062" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="2063"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="2064" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="2065"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="2066" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="2067"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="2068" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="2069"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="2070" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="2071"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="2072" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="2073"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="2074" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="2075"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="2076" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="2077"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="2078" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="2079"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="2080" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="2081"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="2082" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="2083"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="2084" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="2085"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="2086" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="2087"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="2088" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="2089"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="2090" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="2091"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="2092" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="2093"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="2094" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="2095"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="2096" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="2097"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="2098" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="2099"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="2100" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="2101"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="2102" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="2103"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="2104" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="2105"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="2106" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="2107"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="2108" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="2109"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="2110" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="2111"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="2112" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="2113"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="2114" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="2115"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="2116" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="2117"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="2118" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="2119"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="2120" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="2121"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="2122" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="2123"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="2124" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="2125"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="2126" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="2127"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="2128" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="2129"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="2130" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="2131"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="2132" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="2133"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="2134" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="2135"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="2136" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="2137"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="2138" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="2139"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="2140" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="2141"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="2142" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="2143"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="2144" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="2145"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="2146" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="2147"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="2148" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="2149"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="2150" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="2151"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="2152" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="2153"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="2154" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="2155"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="2156" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="2157"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="2158" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="2159"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="2160" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="2161"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="2162" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="2163"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="2164" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="2165"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="2166" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="2167"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="2168" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="2169"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="2170" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="2171"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="2172" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="2173"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="2174" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="2175"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="2176" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="2177"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="2178" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="2179"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="2180" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="2181"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="2182" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="2183"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="2184" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="2185"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="2186" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="2187"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="2188" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="2189"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="2190" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="2191"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="2192" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="2193"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="2194" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="2195"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="2196" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="2197"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="2198" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="2199"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="2200" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="2201"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="2202" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="2203"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="2204" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="2205"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="2206" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="2207"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="2208" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="2209"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="2210" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="2211"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="2212" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="2213"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="2214" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="2215"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="2216" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="2217"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="2218" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="2219"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="2220" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="2221"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="2222" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="2223"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="2224" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="2225"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="2226" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="2227"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="2228" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="2229"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="2230" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="2231"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="2232" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="2233"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="2234" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="2235"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="2236" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="2237"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="2238" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="2239"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="2240" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="2241"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="2242" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="2243"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="2244" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="2245"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="2246" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="2247"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="2248" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="2249"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="2250" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="2251"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="2252" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="2253"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="2254" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="2255"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="2256" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="2257"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="2258" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="2259"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="2260" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="2261"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="2262" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="2263"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="2264" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="2265"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="2266" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="2267"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="2268" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="2269"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="2270" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="2271"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="2272" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="2273"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="2274" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="2275"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="2276" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="2277"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="2278" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="2279"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="2280" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="2281"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="2282" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="2283"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="2284" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="2285"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="2286" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="2287"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="2288" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="2289"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="2290" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="2291"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="2292" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="2293"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="2294" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="2295"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="2296" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="2297"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="2298" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="2299"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="2300" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="2301"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="2302" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="2303"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="2304" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="2305"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="2306" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="2307"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="2308" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="2309"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="2310" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="2311"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="2312" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="2313"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="2314" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="2315"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="2316" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="2317"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="2318" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="2319"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="2320" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="2321"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="2322" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="2323"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="2324" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="2325"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="2326" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="2327"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="2328" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="2329"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="2330" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="2331"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="2332" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="2333"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="2334" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="2335"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="2336" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="2337"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="2338" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="2339"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="2340" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="2341"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="2342" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="2343"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="2344" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="2345"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="2346" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="2347"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="2348" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="2349"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="2350" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="2351"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="2352" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="2353"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="2354" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="2355"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="2356" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="2357"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="2358" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="2359"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="2360" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="2361"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="2362" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="2363"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="2364" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="2365"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="2366" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="2367"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="2368" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="2369"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="2370" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="2371"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="2372" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="2373"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="2374" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="2375"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="2376" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="2377"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="2378" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="2379"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="2380" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="2381"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="2382" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="2383"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="2384" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="2385"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="2386" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="2387"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="2388" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="2389"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="2390" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="2391"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="2392" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="2393"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="2394" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="2395"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="2396" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="2397"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="2398" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="2399"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="2400" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="2401"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="2402" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="2403"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="2404" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="2405"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="2406" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="2407"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="2408" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="2409"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="2410" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="2411"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="2412" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="2413"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="2414" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="2415"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="2416" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="2417"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="2418" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="2419"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="2420" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="2421"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="2422" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="2423"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="2424" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="2425"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="2426" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="2427"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="2428" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="2429"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="2430" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="2431"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="2432" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="2433"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="2434" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="2435"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="2436" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="2437"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="2438" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="2439"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="2440" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="2441"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="2442" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="2443"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="2444" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="2445"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="2446" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="2447"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="2448" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="2449"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="2450" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="2451"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="2452" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="2453"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="2454" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="2455"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="2456" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="2457"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="2458" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="2459"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="2460" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="2461"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="2462" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="2463"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="2464" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="2465"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="2466" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="2467"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="2468" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="2469"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="2470" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="2471"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="2472" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="2473"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="2474" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="2475"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="2476" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="2477"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="2478" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="2479"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="2480" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="2481"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="2482" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="2483"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="2484" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="2485"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="2486" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="2487"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="2488" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="2489"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="2490" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="2491"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="2492" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="2493"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="2494" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="2495"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="2496" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="2497"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="2498" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="2499"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="2500" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="2501"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="2502" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="2503"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="2504" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="2505"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="2506" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="2507"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="2508" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="2509"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="2510" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="2511"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="2512" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="2513"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="2514" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="2515"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="2516" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="2517"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="2518" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="2519"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="2520" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="2521"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="2522" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="2523"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="2524" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="2525"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="2526" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="2527"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="2528" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="2529"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="2530" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="2531"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="2532" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="2533"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="2534" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="2535"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="2536" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="2537"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="2538" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="2539"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="2540" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="2541"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="2542" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="2543"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="2544" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="2545"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="2546" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="2547"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="2548" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="2549"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="2550" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="2551"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="2552" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="2553"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="2554" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="2555"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="2556" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="2557"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="2558" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="2559"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="2560" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="2561"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="2562" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="2563"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="2564" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="2565"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="2566" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="2567"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="2568" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="2569"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="2570" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="2571"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="2572" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="2573"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="2574" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="2575"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="2576" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="2577"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="2578" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="2579"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="2580" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="2581"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="2582" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="2583"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="2584" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="2585"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="2586" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="2587"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="2588" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="2589"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="2590" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="2591"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="2592" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="2593"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="2594" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="2595"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="2596" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="2597"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="2598" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="2599"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="2600" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="2601"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="2602" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="2603"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="2604" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="2605"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="2606" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="2607"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="2608" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="2609"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="2610" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="2611"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="2612" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="2613"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="2614" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="2615"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="2616" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="2617"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="2618" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="2619"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="2620" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="2621"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="2622" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="2623"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="2624" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="2625"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="2626" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="2627"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="2628" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="2629"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="2630" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="2631"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="2632" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="2633"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="2634" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="2635"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="2636" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="2637"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="2638" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="2639"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="2640" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="2641"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="2642" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="2643"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="2644" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="2645"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="2646" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="2647"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="2648" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="2649"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="2650" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="2651"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="2652" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="2653"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="2654" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="2655"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="2656" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="2657"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="2658" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="2659"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="2660" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="2661"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="2662" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="2663"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="2664" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="2665"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="2666" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="2667"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="2668" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="2669"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="2670" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="2671"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="2672" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="2673"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="2674" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="2675"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="2676" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="2677"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="2678" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="2679"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="2680" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="2681"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="2682" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="2683"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="2684" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="2685"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="2686" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="2687"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="2688" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="2689"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="2690" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="2691"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="2692" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="2693"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="2694" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="2695"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="2696" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="2697"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="2698" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="2699"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="2700" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="2701"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="2702" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="2703"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="2704" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="2705"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="2706" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="2707"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="2708" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="2709"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="2710" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="2711"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="2712" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="2713"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="2714" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="2715"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="2716" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="2717"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="2718" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="2719"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="2720" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="2721"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="2722" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="2723"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="2724" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="2725"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="2726" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="2727"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="2728" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="2729"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="2730" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="2731"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="2732" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="2733"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="2734" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="2735"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="2736" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="2737"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="2738" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="2739"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="2740" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="2741"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="2742" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="2743"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="2744" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="2745"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="2746" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="2747"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="2748" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="2749"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="2750" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="2751"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="2752" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="2753"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="2754" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="2755"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="2756" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="2757"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="2758" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="2759"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="2760" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="2761"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="2762" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="2763"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="2764" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="2765"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="2766" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="2767"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="2768" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="2769"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="2770" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="2771"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="2772" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="2773"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="2774" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="2775"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="2776" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="2777"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="2778" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="2779"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="2780" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="2781"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="2782" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="2783"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="2784" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="2785"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="2786" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="2787"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="2788" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="2789"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="2790" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="2791"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="2792" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="2793"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="2794" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="2795"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="2796" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="2797"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="2798" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="2799"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="2800" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="2801"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="2802" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="2803"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="2804" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="2805"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="2806" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="2807"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="2808" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="2809"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="2810" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="2811"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="2812" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="2813"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="2814" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="2815"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="2816" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="2817"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="2818" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="2819"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="2820" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="2821"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="2822" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="2823"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="2824" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="2825"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="2826" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="2827"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="2828" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="2829"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="2830" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="2831"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="2832" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="2833"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="2834" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="2835"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="2836" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="2837"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="2838" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="2839"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="2840" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="2841"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="2842" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="2843"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="2844" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="2845"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="2846" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="2847"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="2848" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="2849"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="2850" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="2851"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="2852" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="2853"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="2854" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="2855"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="2856" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="2857"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="2858" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="2859"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="2860" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="2861"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="2862" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="2863"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="2864" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="2865"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="2866" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="2867"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="2868" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="2869"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="2870" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="2871"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="2872" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="2873"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="2874" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="2875"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="2876" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="2877"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="2878" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="2879"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="2880" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="2881"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="2882" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="2883"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="2884" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="2885"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="2886" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="2887"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="2888" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="2889"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="2890" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="2891"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="2892" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="2893"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="2894" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="2895"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="2896" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="2897"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="2898" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="2899"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="2900" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="2901"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="2902" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="2903"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="2904" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="2905"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="2906" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="2907"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="2908" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="2909"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="2910" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="2911"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="2912" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="2913"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="2914" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="2915"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="2916" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="2917"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="2918" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="2919"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="2920" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="2921"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="2922" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="2923"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="2924" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="2925"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="2926" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="2927"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="2928" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="2929"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="2930" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="2931"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="2932" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="2933"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="2934" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="2935"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="2936" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="2937"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="2938" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="2939"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="2940" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="2941"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="2942" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="2943"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="2944" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="2945"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="2946" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="2947"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="2948" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="2949"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="2950" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="2951"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="2952" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="2953"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="2954" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="2955"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="2956" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="2957"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="2958" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="2959"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="2960" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="2961"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="2962" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="2963"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="2964" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="2965"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="2966" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="2967"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="2968" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="2969"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="2970" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="2971"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="2972" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="2973"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="2974" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="2975"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="2976" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="2977"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="2978" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="2979"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="2980" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="2981"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="2982" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="2983"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="2984" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="2985"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="2986" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="2987"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="2988" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="2989"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="2990" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="2991"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="2992" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="2993"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="2994" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="2995"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="2996" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="2997"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="2998" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="2999"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="3000" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="3001"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="3002" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="3003"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="3004" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="3005"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="3006" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="3007"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="3008" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="3009"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="3010" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="3011"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="3012" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="3013"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="3014" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="3015"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="3016" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="3017"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="3018" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="3019"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="3020" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="3021"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="3022" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="3023"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="3024" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="3025"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="3026" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="3027"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="3028" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="3029"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="3030" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="3031"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="3032" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="3033"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="3034" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="3035"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="3036" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="3037"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="3038" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="3039"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="3040" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="3041"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="3042" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="3043"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="3044" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="3045"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="3046" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="3047"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="3048" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="3049"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="3050" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="3051"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="3052" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="3053"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="3054" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="3055"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="3056" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="3057"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="3058" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="3059"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="3060" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="3061"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="3062" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="3063"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="3064" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="3065"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="3066" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="3067"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="3068" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="3069"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="3070" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="3071"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="3072" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="3073"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="3074" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="3075"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="3076" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="3077"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="3078" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="3079"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="3080" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="3081"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="3082" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="3083"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="3084" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="3085"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="3086" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="3087"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="3088" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="3089"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="3090" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="3091"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="3092" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="3093"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="3094" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="3095"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="3096" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="3097"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="3098" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="3099"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="3100" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="3101"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="3102" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="3103"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="3104" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="3105"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="3106" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="3107"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="3108" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="3109"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="3110" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="3111"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="3112" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="3113"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="3114" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="3115"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="3116" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="3117"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="3118" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="3119"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="3120" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="3121"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="3122" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="3123"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="3124" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="3125"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="3126" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="3127"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="3128" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="3129"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="3130" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="3131"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="3132" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="3133"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="3134" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="3135"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="3136" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="3137"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="3138" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="3139"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="3140" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="3141"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="3142" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="3143"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="3144" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="3145"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="3146" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="3147"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="3148" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="3149"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record></t:root>
\ No newline at end of file diff --git a/xsd/examples/cxx/tree/performance/test-50k.xml b/xsd/examples/cxx/tree/performance/test-50k.xml new file mode 100644 index 0000000..42e22f3 --- /dev/null +++ b/xsd/examples/cxx/tree/performance/test-50k.xml @@ -0,0 +1 @@ +<t:root xmlns:t='test' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:schemaLocation='test test.xsd'><record orange="0" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="1"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="2" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="3"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="4" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="5"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="6" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="7"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="8" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="9"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="10" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="11"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="12" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="13"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="14" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="15"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="16" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="17"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="18" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="19"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="20" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="21"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="22" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="23"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="24" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="25"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="26" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="27"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="28" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="29"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="30" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="31"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="32" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="33"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="34" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="35"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="36" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="37"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="38" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="39"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="40" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="41"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="42" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="43"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="44" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="45"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="46" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="47"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="48" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="49"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="50" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="51"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="52" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="53"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="54" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="55"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="56" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="57"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="58" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="59"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="60" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="61"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="62" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="63"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="64" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="65"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="66" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="67"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="68" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="69"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="70" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="71"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="72" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="73"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="74" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="75"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="76" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="77"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="78" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="79"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="80" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="81"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="82" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="83"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="84" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="85"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="86" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="87"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="88" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="89"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="90" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="91"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="92" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="93"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="94" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="95"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="96" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="97"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="98" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="99"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="100" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="101"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="102" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="103"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="104" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="105"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="106" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="107"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="108" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="109"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="110" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="111"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="112" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="113"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="114" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="115"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="116" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="117"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="118" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="119"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="120" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="121"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="122" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="123"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="124" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="125"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="126" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="127"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="128" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="129"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="130" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="131"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="132" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="133"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="134" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="135"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="136" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="137"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="138" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="139"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="140" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="141"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="142" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="143"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="144" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="145"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="146" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="147"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="148" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="149"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="150" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="151"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="152" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="153"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="154" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="155"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="156" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="157"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="158" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="159"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="160" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="161"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="162" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="163"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="164" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="165"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="166" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="167"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="168" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="169"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="170" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="171"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="172" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="173"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="174" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="175"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="176" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="177"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="178" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="179"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="180" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="181"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="182" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="183"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="184" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="185"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="186" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="187"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="188" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="189"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="190" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="191"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="192" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="193"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="194" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="195"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="196" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="197"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="198" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="199"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="200" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="201"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="202" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="203"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="204" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="205"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="206" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="207"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="208" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="209"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="210" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="211"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="212" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="213"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="214" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="215"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="216" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="217"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="218" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="219"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="220" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="221"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="222" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="223"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="224" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="225"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="226" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="227"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="228" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="229"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="230" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="231"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="232" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="233"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="234" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="235"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="236" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="237"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="238" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="239"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="240" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="241"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="242" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="243"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="244" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="245"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="246" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="247"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="248" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="249"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="250" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="251"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="252" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="253"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="254" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="255"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="256" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="257"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="258" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="259"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="260" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="261"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="262" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="263"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="264" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="265"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="266" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="267"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="268" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="269"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="270" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="271"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="272" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="273"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="274" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="275"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="276" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="277"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="278" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="279"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="280" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="281"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="282" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="283"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="284" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="285"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="286" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="287"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="288" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="289"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="290" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="291"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="292" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="293"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="294" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="295"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="296" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="297"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="298" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="299"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="300" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="301"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="302" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="303"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="304" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="305"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="306" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="307"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="308" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="309"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="310" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="311"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="312" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="313"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="314" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="315"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="316" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record></t:root>
\ No newline at end of file diff --git a/xsd/examples/cxx/tree/performance/test-5k.xml b/xsd/examples/cxx/tree/performance/test-5k.xml new file mode 100644 index 0000000..168cb09 --- /dev/null +++ b/xsd/examples/cxx/tree/performance/test-5k.xml @@ -0,0 +1 @@ +<t:root xmlns:t='test' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:schemaLocation='test test.xsd'><record orange="0" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="1"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="2" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="3"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="4" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="5"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="6" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="7"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="8" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="9"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="10" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="11"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record><record orange="12" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>horror</enum></record><record orange="13"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>history</enum></record><record orange="14" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>philosophy</enum></record><record orange="15"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>romance</enum></record><record orange="16" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>fiction</enum></record><record orange="17"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>horror</enum></record><record orange="18" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>history</enum></record><record orange="19"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>philosophy</enum></record><record orange="20" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>romance</enum></record><record orange="21"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>fiction</enum></record><record orange="22" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>horror</enum></record><record orange="23"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>history</enum></record><record orange="24" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>philosophy</enum></record><record orange="25"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>romance</enum></record><record orange="26" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>fiction</enum></record><record orange="27"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>horror</enum></record><record orange="28" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice1>1 choice</choice1><enum>history</enum></record><record orange="29"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice2>2 choice</choice2><enum>philosophy</enum></record><record orange="30" apple="true"><int>42</int><double>42345.4232</double><name>name123_45</name><choice3>3 choice</choice3><enum>romance</enum></record><record orange="31"><int>42</int><double>42345.4232</double><name>name123_45</name><string>one two three</string><choice4>4 choice</choice4><enum>fiction</enum></record></t:root>
\ No newline at end of file diff --git a/xsd/examples/cxx/tree/performance/test.xsd b/xsd/examples/cxx/tree/performance/test.xsd new file mode 100644 index 0000000..cf1f046 --- /dev/null +++ b/xsd/examples/cxx/tree/performance/test.xsd @@ -0,0 +1,50 @@ +<?xml version="1.0"?> + +<!-- + +file : examples/cxx/tree/performance/test.xsd +author : Boris Kolpackov <boris@codesynthesis.com> +copyright : not copyrighted - public domain + +--> + +<schema targetNamespace="test" xmlns:t="test" + xmlns="http://www.w3.org/2001/XMLSchema"> + + <simpleType name="enum"> + <restriction base="string"> + <enumeration value="romance"/> + <enumeration value="fiction"/> + <enumeration value="horror"/> + <enumeration value="history"/> + <enumeration value="philosophy"/> + </restriction> + </simpleType> + + <complexType name="record"> + <sequence> + <element name="int" type="unsignedInt"/> + <element name="double" type="double"/> + <element name="name" type="NCName"/> + <element name="string" type="string" minOccurs="0" maxOccurs="1"/> + <choice> + <element name="choice1" type="string"/> + <element name="choice2" type="string"/> + <element name="choice3" type="string"/> + <element name="choice4" type="string"/> + </choice> + <element name="enum" type="t:enum"/> + </sequence> + <attribute name="apple" type="boolean"/> + <attribute name="orange" type="unsignedLong" use="required"/> + </complexType> + + <complexType name="root"> + <sequence> + <element name="record" type="t:record" maxOccurs="unbounded"/> + </sequence> + </complexType> + + <element name="root" type="t:root"/> + +</schema> diff --git a/xsd/examples/cxx/tree/performance/time.cxx b/xsd/examples/cxx/tree/performance/time.cxx new file mode 100644 index 0000000..c2de6dc --- /dev/null +++ b/xsd/examples/cxx/tree/performance/time.cxx @@ -0,0 +1,47 @@ +// file : examples/cxx/tree/performance/time.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : not copyrighted - public domain + +#include "time.hxx" + +#if defined (WIN32) || defined (__WIN32__) +# define WIN32_LEAN_AND_MEAN +# include <windows.h> // GetSystemTimeAsFileTime +#else +# include <time.h> // gettimeofday +# include <sys/time.h> // timeval +#endif + +#include <ostream> // std::ostream +#include <iomanip> // std::setfill, std::setw + +namespace os +{ + time:: + time () + { +#if defined (WIN32) || defined (__WIN32__) + FILETIME ft; + GetSystemTimeAsFileTime (&ft); + unsigned long long v ( + (unsigned long long (ft.dwHighDateTime) << 32) + ft.dwLowDateTime); + + sec_ = static_cast<unsigned long> (v / 10000000ULL); + nsec_ = static_cast<unsigned long> ((v % 10000000ULL) * 100); +#else + timeval tv; + if (gettimeofday(&tv, 0) != 0) + throw failed (); + + sec_ = static_cast<unsigned long> (tv.tv_sec); + nsec_ = static_cast<unsigned long> (tv.tv_usec * 1000); +#endif + } + + std::ostream& + operator<< (std::ostream& o, time const& t) + { + return o << t.sec () << '.' + << std::setfill ('0') << std::setw (9) << t.nsec (); + } +} diff --git a/xsd/examples/cxx/tree/performance/time.hxx b/xsd/examples/cxx/tree/performance/time.hxx new file mode 100644 index 0000000..f83e628 --- /dev/null +++ b/xsd/examples/cxx/tree/performance/time.hxx @@ -0,0 +1,111 @@ +// file : examples/cxx/tree/performance/time.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : not copyrighted - public domain + +#ifndef TIME_HXX +#define TIME_HXX + +#include <iosfwd> // std::ostream& + +namespace os +{ + class time + { + public: + class failed {}; + + // Create a time object representing the current time. + // + time (); + + time (unsigned long long nsec) + { + sec_ = static_cast<unsigned long> (nsec / 1000000000ULL); + nsec_ = static_cast<unsigned long> (nsec % 1000000000ULL); + } + + time (unsigned long sec, unsigned long nsec) + { + sec_ = sec; + nsec_ = nsec; + } + + public: + unsigned long + sec () const + { + return sec_; + } + + unsigned long + nsec () const + { + return nsec_; + } + + public: + class overflow {}; + class underflow {}; + + time + operator+= (time const& b) + { + unsigned long long tmp = 0ULL + nsec_ + b.nsec_; + + sec_ += static_cast<unsigned long> (b.sec_ + tmp / 1000000000ULL); + nsec_ = static_cast<unsigned long> (tmp % 1000000000ULL); + + return *this; + } + + time + operator-= (time const& b) + { + if (*this < b) + throw underflow (); + + sec_ -= b.sec_; + + if (nsec_ < b.nsec_) + { + --sec_; + nsec_ += 1000000000ULL - b.nsec_; + } + else + nsec_ -= b.nsec_; + + return *this; + } + + friend time + operator+ (time const& a, time const& b) + { + time r (a); + r += b; + return r; + } + + friend time + operator- (time const& a, time const& b) + { + time r (a); + r -= b; + return r; + } + + friend bool + operator < (time const& a, time const& b) + { + return (a.sec_ < b.sec_) || (a.sec_ == b.sec_ && a.nsec_ < b.nsec_); + } + + private: + unsigned long sec_; + unsigned long nsec_; + }; + + std::ostream& + operator<< (std::ostream&, time const&); +} + +#endif // TIME_HXX diff --git a/xsd/examples/cxx/tree/polymorphism/README b/xsd/examples/cxx/tree/polymorphism/README new file mode 100644 index 0000000..6e54e49 --- /dev/null +++ b/xsd/examples/cxx/tree/polymorphism/README @@ -0,0 +1,32 @@ +This example shows how to use XML Schema polymorphism features such as +xsi:type attributes and substitution groups in the C++/Tree mapping. + +The example consists of the following files: + +supermen.xsd + XML Schema which describes the "supermen" instance documents. + +supermen.xml + Sample XML instance document. + +supermen.hxx +supermen.cxx + C++ types that represent the given vocabulary, a set of parsing + functions that convert XML instance documents to a tree-like in-memory + object model, and a set of serialization functions that convert the + object model back to XML. These are generated by XSD from supermen.xsd. + Note also that we use the --generate-polymorphic command line option + and that we don't need to use --polymorphic-type to explicitly mark + types as polymorphic because this is automatically deduced by the + XSD compiler from the substitution groups used in the supermen.xsd + schema. + +driver.cxx + Driver for the example. It first calls one of the parsing functions + that constructs the object model from the input file. It then prints + the content of the object model to STDERR. Finally, the driver serializes + the object model back to XML. + +To run the example on the sample XML instance document simply execute: + +$ ./driver instance.xml diff --git a/xsd/examples/cxx/tree/polymorphism/driver.cxx b/xsd/examples/cxx/tree/polymorphism/driver.cxx new file mode 100644 index 0000000..582e2dd --- /dev/null +++ b/xsd/examples/cxx/tree/polymorphism/driver.cxx @@ -0,0 +1,60 @@ +// file : examples/cxx/tree/polymorphism/driver.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : not copyrighted - public domain + +#include <memory> // std::auto_ptr +#include <iostream> + +#include "supermen.hxx" + +using std::cerr; +using std::endl; +using std::auto_ptr; + +int +main (int argc, char* argv[]) +{ + if (argc != 2) + { + cerr << "usage: " << argv[0] << " supermen.xml" << endl; + return 1; + } + + try + { + auto_ptr<supermen> sm (supermen_ (argv[1])); + + supermen copy (*sm); // Dynamic types are preserved in copies. + + // Print what we've got. + // + for (supermen::person_const_iterator i (copy.person ().begin ()); + i != copy.person ().end (); + ++i) + { + cerr << i->name (); + + if (const superman* s = dynamic_cast<const superman*> (&*i)) + { + if (s->can_fly ()) + cerr << ", flying superman"; + else + cerr << ", superman"; + } + + cerr << endl; + } + + // Serialize back to XML. + // + xml_schema::namespace_infomap map; + map[""].schema = "supermen.xsd"; + + supermen_ (std::cout, copy, map); + } + catch (const xml_schema::exception& e) + { + cerr << e << endl; + return 1; + } +} diff --git a/xsd/examples/cxx/tree/polymorphism/makefile b/xsd/examples/cxx/tree/polymorphism/makefile new file mode 100644 index 0000000..cde1904 --- /dev/null +++ b/xsd/examples/cxx/tree/polymorphism/makefile @@ -0,0 +1,105 @@ +# file : examples/cxx/tree/polymorphism/makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../../build/bootstrap.make + +xsd := supermen.xsd +cxx := driver.cxx + +obj := $(addprefix $(out_base)/,$(cxx:.cxx=.o) $(xsd:.xsd=.o)) +dep := $(obj:.o=.o.d) + +driver := $(out_base)/driver +install := $(out_base)/.install +dist := $(out_base)/.dist +dist-win := $(out_base)/.dist-win +clean := $(out_base)/.clean + + +# Import. +# +$(call import,\ + $(scf_root)/import/libxerces-c/stub.make,\ + l: xerces_c.l,cpp-options: xerces_c.l.cpp-options) + + +# Build. +# +$(driver): $(obj) $(xerces_c.l) + +$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): $(xerces_c.l.cpp-options) + +genf := $(xsd:.xsd=.hxx) $(xsd:.xsd=.ixx) $(xsd:.xsd=.cxx) +gen := $(addprefix $(out_base)/,$(genf)) + +$(gen): xsd := $(out_root)/xsd/xsd +$(gen): xsd_options := --generate-polymorphic --generate-serialization \ +--root-element-last +$(gen): $(out_root)/xsd/xsd + +$(call include-dep,$(dep)) + + +# Convenience alias for default target. +# +$(out_base)/: $(driver) + + +# Install & Dist. +# +dist-common := $(out_base)/.dist-common + +$(install) $(dist) $(dist-win) $(dist-common): path := $(subst $(src_root)/,,$(src_base)) + +$(install): + $(call install-data,$(src_base)/README,$(install_doc_dir)/xsd/$(path)/README) + $(call install-data,$(src_base)/driver.cxx,$(install_doc_dir)/xsd/$(path)/driver.cxx) + $(call install-data,$(src_base)/supermen.xsd,$(install_doc_dir)/xsd/$(path)/supermen.xsd) + $(call install-data,$(src_base)/supermen.xml,$(install_doc_dir)/xsd/$(path)/supermen.xml) + +$(dist-common): + $(call install-data,$(src_base)/driver.cxx,$(dist_prefix)/$(path)/driver.cxx) + $(call install-data,$(src_base)/supermen.xsd,$(dist_prefix)/$(path)/supermen.xsd) + $(call install-data,$(src_base)/supermen.xml,$(dist_prefix)/$(path)/supermen.xml) + +$(dist): $(dist-common) + $(call install-data,$(src_base)/README,$(dist_prefix)/$(path)/README) + +$(dist-win): $(dist-common) + $(call install-data,$(src_base)/README,$(dist_prefix)/$(path)/README.txt) + $(call message,,unix2dos $(dist_prefix)/$(path)/README.txt) + + +# Clean. +# +$(clean): $(driver).o.clean \ + $(addsuffix .cxx.clean,$(obj)) \ + $(addsuffix .cxx.clean,$(dep)) \ + $(addprefix $(out_base)/,$(xsd:.xsd=.cxx.xsd.clean)) + +# Generated .gitignore. +# +ifeq ($(out_base),$(src_base)) +$(gen): | $(out_base)/.gitignore +$(driver): | $(out_base)/.gitignore + +$(out_base)/.gitignore: files := driver $(genf) +$(clean): $(out_base)/.gitignore.clean + +$(call include,$(bld_root)/git/gitignore.make) +endif + +# How to. +# +$(call include,$(bld_root)/cxx/o-e.make) +$(call include,$(bld_root)/cxx/cxx-o.make) +$(call include,$(bld_root)/cxx/cxx-d.make) +$(call include,$(bld_root)/install.make) +$(call include,$(scf_root)/xsd/tree/xsd-cxx.make) + +# Dependencies. +# +$(call import,$(src_root)/xsd/makefile) diff --git a/xsd/examples/cxx/tree/polymorphism/supermen.xml b/xsd/examples/cxx/tree/polymorphism/supermen.xml new file mode 100644 index 0000000..5053142 --- /dev/null +++ b/xsd/examples/cxx/tree/polymorphism/supermen.xml @@ -0,0 +1,26 @@ +<?xml version="1.0"?> + +<!-- + +file : examples/cxx/tree/polymorphism/supermen.xml +author : Boris Kolpackov <boris@codesynthesis.com> +copyright : not copyrighted - public domain + +--> + +<supermen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="supermen.xsd"> + + <person> + <name>John Doe</name> + </person> + + <superman can-fly="false"> + <name>James "007" Bond</name> + </superman> + + <superman can-fly="true" wing-span="10" xsi:type="batman"> + <name>Bruce Wayne</name> + </superman> + +</supermen> diff --git a/xsd/examples/cxx/tree/polymorphism/supermen.xsd b/xsd/examples/cxx/tree/polymorphism/supermen.xsd new file mode 100644 index 0000000..ffdd21c --- /dev/null +++ b/xsd/examples/cxx/tree/polymorphism/supermen.xsd @@ -0,0 +1,49 @@ +<?xml version="1.0"?> + +<!-- + +file : examples/cxx/tree/polymorphism/supermen.xsd +author : Boris Kolpackov <boris@codesynthesis.com> +copyright : not copyrighted - public domain + +--> + +<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + + <xsd:complexType name="person"> + <xsd:sequence> + <xsd:element name="name" type="xsd:string"/> + </xsd:sequence> + </xsd:complexType> + + <!-- substitution group root --> + <xsd:element name="person" type="person"/> + + + <xsd:complexType name="superman"> + <xsd:complexContent> + <xsd:extension base="person"> + <xsd:attribute name="can-fly" type="xsd:boolean" use="required"/> + </xsd:extension> + </xsd:complexContent> + </xsd:complexType> + + <xsd:element name="superman" type="superman" substitutionGroup="person"/> + + <xsd:complexType name="batman"> + <xsd:complexContent> + <xsd:extension base="superman"> + <xsd:attribute name="wing-span" type="xsd:unsignedInt" use="required"/> + </xsd:extension> + </xsd:complexContent> + </xsd:complexType> + + <xsd:complexType name="supermen"> + <xsd:sequence> + <xsd:element ref="person" maxOccurs="unbounded"/> + </xsd:sequence> + </xsd:complexType> + + <xsd:element name="supermen" type="supermen"/> + +</xsd:schema> diff --git a/xsd/examples/cxx/tree/streaming/README b/xsd/examples/cxx/tree/streaming/README new file mode 100644 index 0000000..ac7e7f0 --- /dev/null +++ b/xsd/examples/cxx/tree/streaming/README @@ -0,0 +1,46 @@ +This example shows how to perform stream-oriented, partially in-memory +XML processing using the C++/Tree mapping. With the partially in-memory +parsing and serialization only a part of the object model is in memory at +any given time. With this approach we can process parts of the document +as they become available as well as handle documents that are too large +to fit into memory. + +The example consists of the following files: + +position.xsd + XML Schema which describes a simple object position vocabulary. The + position is represented as a potentially large series of latitude and + longitude measurements. + +position.xml + Sample object position document. + +position.hxx +position.cxx + C++ types that represent the position vocabulary as well as parsing + and serialization functions. These are generated by XSD from + position.xsd. + +parser.hxx +parser.cxx + Stream-oriented DOM parser implementation that is built on top of the + Xerces-C++ SAX2 parser in the progressive parsing mode. This parser + allows us to parse an XML document as a series of DOM fragments. + +serializer.hxx +serializer.cxx + Stream-oriented DOM serializer implementation that allows us to + serialize an XML Document as a series of object model fragments. + +driver.cxx + Driver for the example. It first parses the input file into a series + of DOM fragments which are then parsed into the object model fragments. + The driver prints the information from the document as it becomes + available. The driver then creates a new XML document (out.xml) by + creating and serializing a series of object model fragments. + +To run the example simply execute: + +$ ./driver position.xml + +The serialization results are written to the out.xml file. diff --git a/xsd/examples/cxx/tree/streaming/driver.cxx b/xsd/examples/cxx/tree/streaming/driver.cxx new file mode 100644 index 0000000..6c6fd51 --- /dev/null +++ b/xsd/examples/cxx/tree/streaming/driver.cxx @@ -0,0 +1,176 @@ +// file : examples/cxx/tree/streaming/driver.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : not copyrighted - public domain + +#include <iostream> +#include <fstream> + +#include <xercesc/dom/DOM.hpp> + +#include <xsd/cxx/xml/string.hxx> // xml::string + +#include "parser.hxx" +#include "serializer.hxx" +#include "position.hxx" + +using namespace std; +using namespace xercesc; + +static void +measure_position (unsigned int n, float& lat, float& lon); + +int +main (int argc, char* argv[]) +{ + if (argc != 2) + { + cerr << "usage: " << argv[0] << " position.xml" << endl; + return 1; + } + + int r (0); + + // We need to initialize the Xerces-C++ runtime because we are doing + // the XML-to-DOM parsing ourselves. + // + xercesc::XMLPlatformUtils::Initialize (); + + try + { + using namespace op; + namespace xml = xsd::cxx::xml; + + // Parse. + // + + ifstream ifs; + ifs.exceptions (ifstream::badbit | ifstream::failbit); + ifs.open (argv[1]); + + parser p; + + // The first document we get is the "carcase" of the complete document. + // That is, the root element with all the attributes but without any + // content. We may need it to get to the attributes in the root element. + // + // There are two ways this can be done. The easiest approach is to + // instantiate the root element's type (object in our case). This + // will only work if all the content in the root element is optional. + // Alternatively, we can manually look up attributes that we are + // interested in and instantiate the corresponding type. The following + // fragment shows how to use the second approach. + // + xml_schema::dom::auto_ptr<DOMDocument> doc (p.start (ifs, argv[1], true)); + + // Find the id attribute. + // + DOMAttr* id_attr ( + doc->getDocumentElement ()->getAttributeNode ( + xml::string ("id").c_str ())); + + // Use the type and traits aliases from the object model. + // + object::id_type id (object::id_traits::create (*id_attr, 0, 0)); + cerr << "id: " << id << endl; + + // The next chunk we get is the header element. + // + doc = p.next (); + header hdr (*doc->getDocumentElement ()); + cerr << "name: " << hdr.name () << endl + << "type: " << hdr.type () << endl; + + // The rest is position elements. + // + for (doc = p.next (); doc.get () != 0; doc = p.next ()) + { + position p (*doc->getDocumentElement ()); + cerr << "lat: " << p.lat () << " lon: " << p.lon () << endl; + } + + // Serialize. + // + + ofstream ofs; + ofs.exceptions (ios_base::badbit | ios_base::failbit); + ofs.open ("out.xml"); + + serializer s; + + // With this approach we manually write the XML declaration, opening + // and closing root element tags, as well as any attributes in the + // root element. + // + ofs << "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" << endl + << "<op:object xmlns:op=\"http://www.codesynthesis.com/op\"" << endl + << " xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"" << endl + << " xsi:schemaLocation=\"http://www.codesynthesis.com/op " << + "position.xsd\"" << endl + << " id=\"" << 123 << "\">" << endl; + + s.start (ofs); + + // Serialize the header. + // + header h ("Lion's Head", "rock"); + s.next ("header", h); + + // Serialize position elements, one at a time. + // + for (unsigned short i (0); i < 8; i++) + { + float lat, lon; + measure_position (i, lat, lon); + position p (lat, lon); + s.next ("position", p); + } + + // Close the root element. + // + ofs << endl + << "</op:object>" << endl; + + } + catch (const xml_schema::exception& e) + { + cerr << e << endl; + r = 1; + } + catch (const ios_base::failure&) + { + cerr << "io failure" << endl; + r = 1; + } + + xercesc::XMLPlatformUtils::Terminate (); + return r; +} + +// Position measurement instrument interface. +// +struct measurements +{ + float lat; + float lon; +}; + +measurements test_measurements [8] = +{ + {-33.8569F, 18.5083F}, + {-33.8568F, 18.5083F}, + {-33.8568F, 18.5082F}, + {-33.8570F, 18.5083F}, + {-33.8569F, 18.5084F}, + {-33.8570F, 18.5084F}, + {-33.8570F, 18.5082F}, + {-33.8569F, 18.5082F} +}; + +static void +measure_position (unsigned int n, float& lat, float& lon) +{ + // Call the instrument to measure the position. + // + lat = test_measurements[n].lat; + lon = test_measurements[n].lon; +} diff --git a/xsd/examples/cxx/tree/streaming/makefile b/xsd/examples/cxx/tree/streaming/makefile new file mode 100644 index 0000000..750ad20 --- /dev/null +++ b/xsd/examples/cxx/tree/streaming/makefile @@ -0,0 +1,112 @@ +# file : examples/cxx/tree/streaming/makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../../build/bootstrap.make + +xsd := position.xsd +cxx := driver.cxx parser.cxx serializer.cxx + +obj := $(addprefix $(out_base)/,$(cxx:.cxx=.o) $(xsd:.xsd=.o)) +dep := $(obj:.o=.o.d) + +driver := $(out_base)/driver +install := $(out_base)/.install +dist := $(out_base)/.dist +dist-win := $(out_base)/.dist-win +clean := $(out_base)/.clean + + +# Import. +# +$(call import,\ + $(scf_root)/import/libxerces-c/stub.make,\ + l: xerces_c.l,cpp-options: xerces_c.l.cpp-options) + + +# Build. +# +$(driver): $(obj) $(xerces_c.l) + +$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): $(xerces_c.l.cpp-options) + +genf := $(xsd:.xsd=.hxx) $(xsd:.xsd=.ixx) $(xsd:.xsd=.cxx) +gen := $(addprefix $(out_base)/,$(genf)) + +$(gen): xsd := $(out_root)/xsd/xsd +$(gen): xsd_options := --generate-serialization +$(gen): $(out_root)/xsd/xsd + +$(call include-dep,$(dep)) + +# Convenience alias for default target. +# +$(out_base)/: $(driver) + + +# Install & Dist. +# +dist-common := $(out_base)/.dist-common + +$(install) $(dist) $(dist-win) $(dist-common): path := $(subst $(src_root)/,,$(src_base)) + +$(install): + $(call install-data,$(src_base)/README,$(install_doc_dir)/xsd/$(path)/README) + $(call install-data,$(src_base)/driver.cxx,$(install_doc_dir)/xsd/$(path)/driver.cxx) + $(call install-data,$(src_base)/parser.cxx,$(install_doc_dir)/xsd/$(path)/parser.cxx) + $(call install-data,$(src_base)/parser.hxx,$(install_doc_dir)/xsd/$(path)/parser.hxx) + $(call install-data,$(src_base)/serializer.cxx,$(install_doc_dir)/xsd/$(path)/serializer.cxx) + $(call install-data,$(src_base)/serializer.hxx,$(install_doc_dir)/xsd/$(path)/serializer.hxx) + $(call install-data,$(src_base)/position.xsd,$(install_doc_dir)/xsd/$(path)/position.xsd) + $(call install-data,$(src_base)/position.xml,$(install_doc_dir)/xsd/$(path)/position.xml) + +$(dist-common): + $(call install-data,$(src_base)/driver.cxx,$(dist_prefix)/$(path)/driver.cxx) + $(call install-data,$(src_base)/parser.cxx,$(dist_prefix)/$(path)/parser.cxx) + $(call install-data,$(src_base)/parser.hxx,$(dist_prefix)/$(path)/parser.hxx) + $(call install-data,$(src_base)/serializer.cxx,$(dist_prefix)/$(path)/serializer.cxx) + $(call install-data,$(src_base)/serializer.hxx,$(dist_prefix)/$(path)/serializer.hxx) + $(call install-data,$(src_base)/position.xsd,$(dist_prefix)/$(path)/position.xsd) + $(call install-data,$(src_base)/position.xml,$(dist_prefix)/$(path)/position.xml) + +$(dist): $(dist-common) + $(call install-data,$(src_base)/README,$(dist_prefix)/$(path)/README) + +$(dist-win): $(dist-common) + $(call install-data,$(src_base)/README,$(dist_prefix)/$(path)/README.txt) + $(call message,,unix2dos $(dist_prefix)/$(path)/README.txt) + + +# Clean. +# +$(clean): $(driver).o.clean \ + $(addsuffix .cxx.clean,$(obj)) \ + $(addsuffix .cxx.clean,$(dep)) \ + $(addprefix $(out_base)/,$(xsd:.xsd=.cxx.xsd.clean)) + $(call message,rm $$1,rm -f $$1,$(out_base)/out.xml) + +# Generated .gitignore. +# +ifeq ($(out_base),$(src_base)) +$(gen): | $(out_base)/.gitignore +$(driver): | $(out_base)/.gitignore + +$(out_base)/.gitignore: files := driver out.xml $(genf) +$(clean): $(out_base)/.gitignore.clean + +$(call include,$(bld_root)/git/gitignore.make) +endif + +# How to. +# +$(call include,$(bld_root)/cxx/o-e.make) +$(call include,$(bld_root)/cxx/cxx-o.make) +$(call include,$(bld_root)/cxx/cxx-d.make) +$(call include,$(bld_root)/install.make) +$(call include,$(scf_root)/xsd/tree/xsd-cxx.make) + +# Dependencies. +# +$(call import,$(src_root)/xsd/makefile) diff --git a/xsd/examples/cxx/tree/streaming/parser.cxx b/xsd/examples/cxx/tree/streaming/parser.cxx new file mode 100644 index 0000000..b0d9df7 --- /dev/null +++ b/xsd/examples/cxx/tree/streaming/parser.cxx @@ -0,0 +1,300 @@ +// file : examples/cxx/tree/streaming/parser.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : not copyrighted - public domain + +#include <xercesc/util/XMLUni.hpp> +#include <xercesc/util/XMLString.hpp> + +#include <xercesc/sax2/Attributes.hpp> +#include <xercesc/sax2/DefaultHandler.hpp> +#include <xercesc/sax2/SAX2XMLReader.hpp> +#include <xercesc/sax2/XMLReaderFactory.hpp> + +#include <xercesc/dom/DOM.hpp> + +#if _XERCES_VERSION >= 30000 +# include <xercesc/dom/impl/DOMTextImpl.hpp> +#endif + +#include <xsd/cxx/auto-array.hxx> + +#include <xsd/cxx/xml/sax/std-input-source.hxx> +#include <xsd/cxx/xml/sax/bits/error-handler-proxy.hxx> + +#include <xsd/cxx/tree/exceptions.hxx> +#include <xsd/cxx/tree/error-handler.hxx> + +#include "parser.hxx" + +using namespace std; +using namespace xercesc; + +namespace xml = xsd::cxx::xml; +namespace tree = xsd::cxx::tree; + +class parser_impl: public DefaultHandler +{ +public: + parser_impl (); + + xml::dom::auto_ptr<DOMDocument> + start (istream& is, const string& id, bool validate); + + xml::dom::auto_ptr<DOMDocument> + next (); + + // SAX event handlers. + // +private: + virtual void + startElement (const XMLCh* const uri, + const XMLCh* const lname, + const XMLCh* const qname, + const Attributes& attributes); + + virtual void + endElement (const XMLCh* const uri, + const XMLCh* const lname, + const XMLCh* const qname); + + virtual void + characters (const XMLCh* const s, +#if _XERCES_VERSION >= 30000 + const XMLSize_t length +#else + const unsigned int length +#endif + ); + +private: + // SAX parser. + // + bool clean_; + auto_ptr<SAX2XMLReader> parser_; + XMLPScanToken token_; + tree::error_handler<char> error_handler_; + xml::sax::bits::error_handler_proxy<char> error_proxy_; + auto_ptr<xml::sax::std_input_source> isrc_; + + size_t depth_; + + // DOM document being built. + // + DOMImplementation& dom_impl_; + xml::dom::auto_ptr<DOMDocument> doc_; + DOMElement* cur_; +}; + +const XMLCh ls[] = {chLatin_L, chLatin_S, chNull}; + +parser_impl:: +parser_impl () + : clean_ (true), + parser_ (XMLReaderFactory::createXMLReader ()), + error_proxy_ (error_handler_), + dom_impl_ (*DOMImplementationRegistry::getDOMImplementation (ls)) +{ + parser_->setFeature (XMLUni::fgSAX2CoreNameSpaces, true); + parser_->setFeature (XMLUni::fgSAX2CoreNameSpacePrefixes, true); + parser_->setFeature (XMLUni::fgXercesValidationErrorAsFatal, true); + parser_->setFeature (XMLUni::fgXercesSchemaFullChecking, false); + + // Xerces-C++ 3.1.0 is the first version with working multi import + // support. It also allows us to disable buffering in the parser + // so that the date is parsed and returned as soon as it is + // available. + // +#if _XERCES_VERSION >= 30100 + parser_->setFeature (XMLUni::fgXercesHandleMultipleImports, true); + + XMLSize_t lwm = 0; + parser_->setProperty (XMLUni::fgXercesLowWaterMark, &lwm); +#endif + + parser_->setErrorHandler (&error_proxy_); + parser_->setContentHandler (this); +} + +xml::dom::auto_ptr<DOMDocument> parser_impl:: +start (istream& is, const string& id, bool val) +{ + // Reset our state. + // + depth_ = 0; + doc_.reset (); + error_handler_.reset (); + + if (!clean_) + parser_->parseReset (token_); + else + clean_ = false; + + isrc_.reset (new xml::sax::std_input_source (is, id)); + + parser_->setFeature (XMLUni::fgSAX2CoreValidation, val); + parser_->setFeature (XMLUni::fgXercesSchema, val); + + // Start parsing. The first document that we return is a "carcase" + // of the complete document. That is, the root element with all the + // attributes but without any content. + // + bool r (parser_->parseFirst (*isrc_, token_)); + error_handler_.throw_if_failed<tree::parsing<char> > (); + + while (r && depth_ == 0) + { + r = parser_->parseNext (token_); + error_handler_.throw_if_failed<tree::parsing<char> > (); + } + + if (!r) + return xml::dom::auto_ptr<DOMDocument> (0); + + return doc_; +} + +xml::dom::auto_ptr<DOMDocument> parser_impl:: +next () +{ + // We should be at depth 1. If not, then we are done parsing. + // + if (depth_ != 1) + return xml::dom::auto_ptr<DOMDocument> (0); + + bool r (true); + + // Keep calling parseNext() until we either move to a greater depth or + // get a document. This way we skip the text (presumably whitespaces) + // that may be preceding the next chunk. + // + while (r && depth_ == 1 && doc_.get () == 0) + { + parser_->parseNext (token_); + error_handler_.throw_if_failed<tree::parsing<char> > (); + } + + if (!r) + return xml::dom::auto_ptr<DOMDocument> (0); + + // If we are not at depth 1, keep calling parseNext() until we get + // there. + // + while (r && depth_ != 1) + { + r = parser_->parseNext (token_); + error_handler_.throw_if_failed<tree::parsing<char> > (); + } + + if (!r) + return xml::dom::auto_ptr<DOMDocument> (0); + + return doc_; +} + +// DOM builder. +// + +void parser_impl:: +startElement (const XMLCh* const uri, + const XMLCh* const /*lname*/, + const XMLCh* const qname, + const Attributes& attr) +{ + if (doc_.get () == 0) + { + doc_.reset (dom_impl_.createDocument (uri, qname, 0)); + cur_ = doc_->getDocumentElement (); + } + else + { + DOMElement* e = doc_->createElementNS (uri, qname); + cur_->appendChild (e); + cur_ = e; + } + + // Set attributes. + // +#if _XERCES_VERSION >= 30000 + for (XMLSize_t i (0), end (attr.getLength()); i < end; ++i) +#else + for (unsigned int i (0), end (attr.getLength()); i < end; ++i) +#endif + { + cur_->setAttributeNS (attr.getURI (i), + attr.getQName (i), + attr.getValue (i)); + } + + depth_++; +} + +void parser_impl:: +endElement (const XMLCh* const /*uri*/, + const XMLCh* const /*lname*/, + const XMLCh* const /*qname*/) +{ + // We have an element parent only on depth 2 or greater. + // + if (--depth_ > 1) + cur_ = static_cast<DOMElement*> (cur_->getParentNode ()); +} + +#if _XERCES_VERSION >= 30000 +void parser_impl:: +characters (const XMLCh* const s, const XMLSize_t length) +{ + const XMLCh empty[] = {chNull}; + + // Ignore text content (presumably whitespaces) in the root element. + // + if (depth_ > 1) + { + DOMText* t = doc_->createTextNode (empty); + static_cast<DOMTextImpl*> (t)->appendData (s, length); + cur_->appendChild (t); + } +} +#else +void parser_impl:: +characters (const XMLCh* const s, const unsigned int length) +{ + // Ignore text content (presumably whitespaces) in the root element. + // + if (depth_ > 1) + { + // For Xerces-C++ 2-series we have to make copy. + // + xsd::cxx::auto_array<XMLCh> tmp (new XMLCh[length + 1]); + XMLString::copyNString (tmp.get (), s, length); + cur_->appendChild (doc_->createTextNode (tmp.get ())); + } +} +#endif + + +// +// parser +// + +parser:: +~parser () +{ +} + +parser:: +parser () + : impl_ (new parser_impl) +{ +} + +xml::dom::auto_ptr<DOMDocument> parser:: +start (istream& is, const string& id, bool val) +{ + return impl_->start (is, id, val); +} + +xml::dom::auto_ptr<DOMDocument> parser:: +next () +{ + return impl_->next (); +} diff --git a/xsd/examples/cxx/tree/streaming/parser.hxx b/xsd/examples/cxx/tree/streaming/parser.hxx new file mode 100644 index 0000000..000d022 --- /dev/null +++ b/xsd/examples/cxx/tree/streaming/parser.hxx @@ -0,0 +1,46 @@ +// file : examples/cxx/tree/streaming/parser.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : not copyrighted - public domain + +#ifndef PARSER_HXX +#define PARSER_HXX + +#include <string> +#include <iosfwd> +#include <memory> // std::auto_ptr + +#include <xercesc/dom/DOMDocument.hpp> + +#include <xsd/cxx/xml/dom/auto-ptr.hxx> + +class parser_impl; + +class parser +{ +public: + ~parser (); + parser (); + + // The start function returns a "carcase" of the complete document. That + // is, the root element with all the attributes but without any content. + // + xsd::cxx::xml::dom::auto_ptr<xercesc::DOMDocument> + start (std::istream& is, const std::string& id, bool validate); + + // The next function returns next first-level element with all its + // attributes and content or 0 if no more available. + // + xsd::cxx::xml::dom::auto_ptr<xercesc::DOMDocument> + next (); + +private: + parser (const parser&); + + parser& + operator= (const parser&); + +private: + std::auto_ptr<parser_impl> impl_; +}; + +#endif // PARSER_HXX diff --git a/xsd/examples/cxx/tree/streaming/position.xml b/xsd/examples/cxx/tree/streaming/position.xml new file mode 100644 index 0000000..e40b0c8 --- /dev/null +++ b/xsd/examples/cxx/tree/streaming/position.xml @@ -0,0 +1,30 @@ +<?xml version="1.0"?> + +<!-- + +file : examples/cxx/tree/streaming/position.xml +author : Boris Kolpackov <boris@codesynthesis.com> +copyright : not copyrighted - public domain + +--> + +<op:object xmlns:op="http://www.codesynthesis.com/op" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.codesynthesis.com/op position.xsd" + id="123"> + + <header> + <name>Lion's Head</name> + <type>rock</type> + </header> + + <position lat="-33.8569" lon="18.5083"/> + <position lat="-33.8568" lon="18.5083"/> + <position lat="-33.8568" lon="18.5082"/> + <position lat="-33.8570" lon="18.5083"/> + <position lat="-33.8569" lon="18.5084"/> + <position lat="-33.8570" lon="18.5084"/> + <position lat="-33.8570" lon="18.5082"/> + <position lat="-33.8569" lon="18.5082"/> + +</op:object> diff --git a/xsd/examples/cxx/tree/streaming/position.xsd b/xsd/examples/cxx/tree/streaming/position.xsd new file mode 100644 index 0000000..13f6e9a --- /dev/null +++ b/xsd/examples/cxx/tree/streaming/position.xsd @@ -0,0 +1,38 @@ +<?xml version="1.0"?> + +<!-- + +file : examples/cxx/tree/streaming/position.xsd +author : Boris Kolpackov <boris@codesynthesis.com> +copyright : not copyrighted - public domain + +--> + +<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns:op="http://www.codesynthesis.com/op" + targetNamespace="http://www.codesynthesis.com/op"> + + + <xsd:complexType name="header"> + <xsd:sequence> + <xsd:element name="name" type="xsd:string"/> + <xsd:element name="type" type="xsd:string"/> + </xsd:sequence> + </xsd:complexType> + + <xsd:complexType name="position"> + <xsd:attribute name="lat" type="xsd:float" use="required"/> + <xsd:attribute name="lon" type="xsd:float" use="required"/> + </xsd:complexType> + + <xsd:complexType name="object"> + <xsd:sequence> + <xsd:element name="header" type="op:header"/> + <xsd:element name="position" type="op:position" maxOccurs="unbounded"/> + </xsd:sequence> + <xsd:attribute name="id" type="xsd:unsignedInt" use="required"/> + </xsd:complexType> + + <xsd:element name="object" type="op:object"/> + +</xsd:schema> diff --git a/xsd/examples/cxx/tree/streaming/serializer.cxx b/xsd/examples/cxx/tree/streaming/serializer.cxx new file mode 100644 index 0000000..58bc5cb --- /dev/null +++ b/xsd/examples/cxx/tree/streaming/serializer.cxx @@ -0,0 +1,165 @@ +// file : examples/cxx/tree/streaming/serializer.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : not copyrighted - public domain + +#include <xercesc/util/XMLUni.hpp> + +#include <xercesc/dom/DOM.hpp> + +#include <xsd/cxx/xml/string.hxx> +#include <xsd/cxx/xml/dom/bits/error-handler-proxy.hxx> +#include <xsd/cxx/xml/dom/serialization-source.hxx> + +#include <xsd/cxx/tree/exceptions.hxx> +#include <xsd/cxx/tree/error-handler.hxx> + +#include "serializer.hxx" + +using namespace std; +using namespace xercesc; + +namespace xml = xsd::cxx::xml; +namespace tree = xsd::cxx::tree; + +class serializer_impl +{ +public: + serializer_impl (); + + void + start (ostream& os, const string& encoding); + + DOMElement* + create (const string& name); + + DOMElement* + create (const string& ns, const string& qname); + + void + serialize (DOMElement& e); + +private: + // Serializer. + // +#if _XERCES_VERSION >= 30000 + xml::dom::auto_ptr<DOMLSOutput> out_; + xml::dom::auto_ptr<DOMLSSerializer> serializer_; +#else + xml::dom::auto_ptr<DOMWriter> serializer_; +#endif + + auto_ptr<xml::dom::ostream_format_target> oft_; + + tree::error_handler<char> error_handler_; + xml::dom::bits::error_handler_proxy<char> error_proxy_; + + // DOM document that we use to create the elements. + // + DOMImplementation& dom_impl_; + xml::dom::auto_ptr<DOMDocument> doc_; +}; + +const XMLCh ls[] = {chLatin_L, chLatin_S, chNull}; + +serializer_impl:: +serializer_impl () + : error_proxy_ (error_handler_), + dom_impl_ (*DOMImplementationRegistry::getDOMImplementation (ls)), + doc_ (dom_impl_.createDocument ()) +{ +#if _XERCES_VERSION >= 30000 + serializer_.reset (dom_impl_.createLSSerializer ()); + DOMConfiguration* conf (serializer_->getDomConfig ()); + + conf->setParameter (XMLUni::fgDOMErrorHandler, &error_proxy_); + conf->setParameter (XMLUni::fgDOMWRTDiscardDefaultContent, true); + conf->setParameter (XMLUni::fgDOMWRTFormatPrettyPrint, true); + conf->setParameter (XMLUni::fgDOMXMLDeclaration, false); +#else + serializer_.reset (dom_impl_.createDOMWriter ()); + + serializer_->setErrorHandler (&error_proxy_); + serializer_->setFeature (XMLUni::fgDOMWRTDiscardDefaultContent, true); + serializer_->setFeature (XMLUni::fgDOMWRTFormatPrettyPrint, true); + serializer_->setFeature (XMLUni::fgDOMXMLDeclaration, false); +#endif +} + +void serializer_impl:: +start (ostream& os, const string& encoding) +{ + error_handler_.reset (); + oft_.reset (new xml::dom::ostream_format_target (os)); + +#if _XERCES_VERSION >= 30000 + out_.reset (dom_impl_.createLSOutput ()); + out_->setEncoding (xml::string (encoding).c_str ()); + out_->setByteStream (oft_.get ()); +#else + serializer_->setEncoding (xml::string (encoding).c_str ()); +#endif +} + +DOMElement* serializer_impl:: +create (const string& name) +{ + return doc_->createElement (xml::string (name).c_str ()); +} + +DOMElement* serializer_impl:: +create (const string& ns, const string& qname) +{ + return doc_->createElementNS ( + xml::string (ns).c_str (), xml::string (qname).c_str ()); +} + +void serializer_impl:: +serialize (DOMElement& e) +{ +#if _XERCES_VERSION >= 30000 + serializer_->write (&e, out_.get ()); +#else + serializer_->writeNode (oft_.get (), e); +#endif + + error_handler_.throw_if_failed<tree::serialization<char> > (); +} + +// +// serializer +// + +serializer:: +~serializer () +{ +} + +serializer:: +serializer () + : impl_ (new serializer_impl) +{ +} + +void serializer:: +start (ostream& os, const string& encoding) +{ + impl_->start (os, encoding); +} + +DOMElement* serializer:: +create (const string& name) +{ + return impl_->create (name); +} + +DOMElement* serializer:: +create (const string& ns, const string& qname) +{ + return impl_->create (ns, qname); +} + +void serializer:: +serialize (DOMElement& e) +{ + impl_->serialize (e); +} diff --git a/xsd/examples/cxx/tree/streaming/serializer.hxx b/xsd/examples/cxx/tree/streaming/serializer.hxx new file mode 100644 index 0000000..6ff0114 --- /dev/null +++ b/xsd/examples/cxx/tree/streaming/serializer.hxx @@ -0,0 +1,81 @@ +// file : examples/cxx/tree/streaming/serializer.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : not copyrighted - public domain + +#ifndef SERIALIZER_HXX +#define SERIALIZER_HXX + +#include <string> +#include <iosfwd> +#include <memory> // std::auto_ptr + +#include <xercesc/dom/DOMElement.hpp> + +#include <xsd/cxx/xml/dom/auto-ptr.hxx> + +class serializer_impl; + +class serializer +{ +public: + ~serializer (); + serializer (); + + // Start the serialization process. + // + void + start (std::ostream& is, const std::string& encoding = "UTF-8"); + + // Serialize next object model fragment into an element with the specified + // name. + // + template <typename T> + void + next (const std::string& name, const T& x); + + // Serialize next object model fragment into an element with the specified + // namespace and qualified name. + // + template <typename T> + void + next (const std::string& ns, const std::string& name, const T& x); + +private: + serializer (const serializer&); + + serializer& + operator= (const serializer&); + +private: + xercesc::DOMElement* + create (const std::string& name); + + xercesc::DOMElement* + create (const std::string& ns, const std::string& name); + + void + serialize (xercesc::DOMElement&); + +private: + std::auto_ptr<serializer_impl> impl_; +}; + +template <typename T> +inline void serializer:: +next (const std::string& name, const T& x) +{ + xsd::cxx::xml::dom::auto_ptr<xercesc::DOMElement> e (create (name)); + *e << x; + serialize (*e); +} + +template <typename T> +inline void serializer:: +next (const std::string& ns, const std::string& name, const T& x) +{ + xsd::cxx::xml::dom::auto_ptr<xercesc::DOMElement> e (create (ns, name)); + *e << x; + serialize (*e); +} + +#endif // SERIALIZER_HXX diff --git a/xsd/examples/cxx/tree/wildcard/README b/xsd/examples/cxx/tree/wildcard/README new file mode 100644 index 0000000..d451509 --- /dev/null +++ b/xsd/examples/cxx/tree/wildcard/README @@ -0,0 +1,34 @@ +This example shows how to use the optional wildcard mapping provided +by C++/Tree to parse, access, modify, and serialize the XML data +matched by XML Schema wildcards (any and anyAttribute). For an +alternative approach that employes type customization see the +custom/wildcard example. + +The example consists of the following files: + +email.xsd + XML Schema which describes a simple email format with the + extensible envelope type. + +email.xml + Sample email message. + +email.hxx +email.ixx +email.cxx + C++ types that represent the given vocabulary, a set of parsing + functions that convert XML instance documents to a tree-like in-memory + object model, and a set of serialization functions that convert the + object model back to XML. These are generated by XSD from email.xsd. + Note that the --generate-wildcard option is used to request the + wildcard mapping. + +driver.cxx + Driver for the example. It first calls one of the parsing functions + that constructs the object model from the input file. It then prints + the content of the object model to STDERR. Next the driver creates a + reply email which is then serialized to XML. + +To run the example on the sample XML instance document simply execute: + +$ ./driver email.xml diff --git a/xsd/examples/cxx/tree/wildcard/driver.cxx b/xsd/examples/cxx/tree/wildcard/driver.cxx new file mode 100644 index 0000000..5fc6abf --- /dev/null +++ b/xsd/examples/cxx/tree/wildcard/driver.cxx @@ -0,0 +1,160 @@ +// file : examples/cxx/tree/wildcard/driver.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : not copyrighted - public domain + +#include <string> +#include <memory> // std::auto_ptr +#include <cstring> // std::memcpy +#include <iostream> + +#include <xercesc/dom/DOM.hpp> +#include <xercesc/util/PlatformUtils.hpp> + +#include "email.hxx" + +// The following string class keeps us sane when working with Xerces. +// Include it after the generated header in order to get only char or +// wchar_t version depending on how you compiled your schemas. +// +#include <xsd/cxx/xml/string.hxx> + +using std::cerr; +using std::endl; +using std::string; + +int +main (int argc, char* argv[]) +{ + if (argc != 2) + { + cerr << "usage: " << argv[0] << " email.xml" << endl; + return 1; + } + + using namespace xercesc; + + int r (0); + + // The Xerces-C++ DOM objects that will be used to store the + // content matched by wildcards "out-live" the call to the + // parsing function. Therefore we need to initialize the + // Xerces-C++ runtime ourselves. + // + XMLPlatformUtils::Initialize (); + + try + { + using namespace email; + namespace xml = xsd::cxx::xml; + + // Read in the message. + // + std::auto_ptr<envelope> msg ( + message (argv[1], xml_schema::flags::dont_initialize)); + + // Print what we've got. + // + cerr << "To: " << msg->to () << endl + << "From: " << msg->from () << endl + << "Subject: " << msg->subject () << endl; + + envelope::any_sequence& body (msg->any ()); + + for (envelope::any_iterator i (body.begin ()); i != body.end (); ++i) + { + DOMElement& e (*i); + string name (xml::transcode<char> (e.getLocalName ())); + + if (name == "text") + { + // Create object representation for the text element. + // + xml_schema::string text (e); + + cerr << text << endl + << endl; + } + else if (name == "binary") + { + // Create object representation for the binary element. + // + binary bin (e); + + cerr << "binary: " << bin.name () << " type: " << bin.mime () << endl + << endl; + } + else + { + cerr << "unknown body type: " << name << endl; + } + } + + // Create a reply message. + // + envelope reply (msg->from (), msg->to (), "Re: " + msg->subject ()); + + // Copy the thread-id attribute from the original message if any. + // + envelope::any_attribute_set& as (msg->any_attribute ()); + envelope::any_attribute_iterator ti ( + as.find ("http://www.codesynthesis.com/email", "thread-id")); + + if (ti != as.end ()) + reply.any_attribute ().insert (*ti); + + // Add a text body. + // + DOMDocument& doc (reply.dom_document ()); + envelope::any_sequence& rbody (reply.any ()); + + xml_schema::string text ("Hi!\n\n" + "Indeed nice pictures. Check out mine.\n\n" + "Jane"); + + DOMElement* e ( + doc.createElementNS ( + xml::string ("http://www.codesynthesis.com/email").c_str (), + xml::string ("eml:text").c_str ())); + + *e << text; + rbody.push_back (e); + + // Add a (fake) image. + // + binary pic ("pic.jpg", "image/jpeg"); + pic.size (3); + std::memcpy (pic.data (), "123", 3); + + e = doc.createElementNS ( + xml::string ("http://www.codesynthesis.com/email").c_str (), + xml::string ("eml:binary").c_str ()); + + *e << pic; + rbody.push_back (e); + + + // Prepare namespace mapping and schema location information for + // serialization. + // + xml_schema::namespace_infomap map; + + map["eml"].name = "http://www.codesynthesis.com/email"; + map["eml"].schema = "email.xsd"; + + // Write it out. + // + message (std::cout, + reply, + map, + "UTF-8", + xml_schema::flags::dont_initialize); + } + catch (const xml_schema::exception& e) + { + cerr << e << endl; + r = 1; + } + + XMLPlatformUtils::Terminate (); + return r; +} diff --git a/xsd/examples/cxx/tree/wildcard/email.xml b/xsd/examples/cxx/tree/wildcard/email.xml new file mode 100644 index 0000000..517c3c6 --- /dev/null +++ b/xsd/examples/cxx/tree/wildcard/email.xml @@ -0,0 +1,32 @@ +<?xml version="1.0"?> + +<!-- + +file : examples/cxx/tree/wildcard/email.xml +author : Boris Kolpackov <boris@codesynthesis.com> +copyright : not copyrighted - public domain + +--> + +<eml:message xmlns:eml="http://www.codesynthesis.com/email" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.codesynthesis.com/email email.xsd" + eml:thread-id="123456789"> + + <to>Jane Doe <jane@doe.com></to> + <from>John Doe <john@doe.com></from> + <subject>Surfing pictures</subject> + + <eml:text> +Hi Jane, + +Here are cool pictures of me surfing. + +Cheers, +John + </eml:text> + + <eml:binary name="pic1.jpg" mime="image/jpeg">YmFzZTY0IGJpbmFyeQ==</eml:binary> + <eml:binary name="pic2.jpg" mime="image/jpeg">YmFzZTY0IGJpbmFyeQ==</eml:binary> + +</eml:message> diff --git a/xsd/examples/cxx/tree/wildcard/email.xsd b/xsd/examples/cxx/tree/wildcard/email.xsd new file mode 100644 index 0000000..c14eebe --- /dev/null +++ b/xsd/examples/cxx/tree/wildcard/email.xsd @@ -0,0 +1,51 @@ +<?xml version="1.0"?> + +<!-- + +file : examples/cxx/tree/wildcard/email.xsd +author : Boris Kolpackov <boris@codesynthesis.com> +copyright : not copyrighted - public domain + +--> + +<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns:eml="http://www.codesynthesis.com/email" + targetNamespace="http://www.codesynthesis.com/email"> + + <!-- Predefined envolop body types. --> + + <xsd:element name="text" type="xsd:string"/> + + <xsd:complexType name="binary"> + <xsd:simpleContent> + <xsd:extension base="xsd:base64Binary"> + <xsd:attribute name="name" type="xsd:string" use="required"/> + <xsd:attribute name="mime" type="xsd:string" use="required"/> + </xsd:extension> + </xsd:simpleContent> + </xsd:complexType> + + <xsd:element name="binary" type="eml:binary"/> + + <!-- Predefined envelop attributes. --> + + <xsd:attribute name="thread-id" type="xsd:unsignedInt"/> + + + <xsd:complexType name="envelope"> + <xsd:sequence> + <xsd:element name="to" type="xsd:string"/> + <xsd:element name="from" type="xsd:string"/> + <xsd:element name="subject" type="xsd:string"/> + + <!-- Extensible envelope body. --> + + <xsd:any namespace="##targetNamespace" processContents="strict" + maxOccurs="unbounded" /> + </xsd:sequence> + <xsd:anyAttribute namespace="##targetNamespace" processContents="strict"/> + </xsd:complexType> + + <xsd:element name="message" type="eml:envelope"/> + +</xsd:schema> diff --git a/xsd/examples/cxx/tree/wildcard/makefile b/xsd/examples/cxx/tree/wildcard/makefile new file mode 100644 index 0000000..36a645b --- /dev/null +++ b/xsd/examples/cxx/tree/wildcard/makefile @@ -0,0 +1,103 @@ +# file : examples/cxx/tree/wildcard/makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../../build/bootstrap.make + +xsd := email.xsd +cxx := driver.cxx + +obj := $(addprefix $(out_base)/,$(cxx:.cxx=.o) $(xsd:.xsd=.o)) +dep := $(obj:.o=.o.d) + +driver := $(out_base)/driver +install := $(out_base)/.install +dist := $(out_base)/.dist +dist-win := $(out_base)/.dist-win +clean := $(out_base)/.clean + + +# Import. +# +$(call import,\ + $(scf_root)/import/libxerces-c/stub.make,\ + l: xerces_c.l,cpp-options: xerces_c.l.cpp-options) + + +# Build. +# +$(driver): $(obj) $(xerces_c.l) + +$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): $(xerces_c.l.cpp-options) + +genf := $(xsd:.xsd=.hxx) $(xsd:.xsd=.ixx) $(xsd:.xsd=.cxx) +gen := $(addprefix $(out_base)/,$(genf)) + +$(gen): xsd := $(out_root)/xsd/xsd +$(gen): xsd_options := --generate-inline --generate-wildcard \ +--generate-serialization --root-element message +$(gen): $(out_root)/xsd/xsd + +$(call include-dep,$(dep)) + +# Convenience alias for default target. +# +$(out_base)/: $(driver) + + +# Install & Dist. +# +dist-common := $(out_base)/.dist-common + +$(install) $(dist) $(dist-win) $(dist-common): path := $(subst $(src_root)/,,$(src_base)) + +$(install): + $(call install-data,$(src_base)/README,$(install_doc_dir)/xsd/$(path)/README) + $(call install-data,$(src_base)/driver.cxx,$(install_doc_dir)/xsd/$(path)/driver.cxx) + $(call install-data,$(src_base)/email.xsd,$(install_doc_dir)/xsd/$(path)/email.xsd) + $(call install-data,$(src_base)/email.xml,$(install_doc_dir)/xsd/$(path)/email.xml) + +$(dist-common): + $(call install-data,$(src_base)/driver.cxx,$(dist_prefix)/$(path)/driver.cxx) + $(call install-data,$(src_base)/email.xsd,$(dist_prefix)/$(path)/email.xsd) + $(call install-data,$(src_base)/email.xml,$(dist_prefix)/$(path)/email.xml) + +$(dist): $(dist-common) + $(call install-data,$(src_base)/README,$(dist_prefix)/$(path)/README) + +$(dist-win): $(dist-common) + $(call install-data,$(src_base)/README,$(dist_prefix)/$(path)/README.txt) + $(call message,,unix2dos $(dist_prefix)/$(path)/README.txt) + +# Clean. +# +$(clean): $(driver).o.clean \ + $(addsuffix .cxx.clean,$(obj)) \ + $(addsuffix .cxx.clean,$(dep)) \ + $(addprefix $(out_base)/,$(xsd:.xsd=.cxx.xsd.clean)) + +# Generated .gitignore. +# +ifeq ($(out_base),$(src_base)) +$(gen): | $(out_base)/.gitignore +$(driver): | $(out_base)/.gitignore + +$(out_base)/.gitignore: files := driver $(genf) +$(clean): $(out_base)/.gitignore.clean + +$(call include,$(bld_root)/git/gitignore.make) +endif + +# How to. +# +$(call include,$(bld_root)/cxx/o-e.make) +$(call include,$(bld_root)/cxx/cxx-o.make) +$(call include,$(bld_root)/cxx/cxx-d.make) +$(call include,$(bld_root)/install.make) +$(call include,$(scf_root)/xsd/tree/xsd-cxx.make) + +# Dependencies. +# +$(call import,$(src_root)/xsd/makefile) diff --git a/xsd/examples/cxx/tree/xpath/README b/xsd/examples/cxx/tree/xpath/README new file mode 100644 index 0000000..48d40d6 --- /dev/null +++ b/xsd/examples/cxx/tree/xpath/README @@ -0,0 +1,47 @@ +This example shows how to use the C++/Tree mapping together with XPath. +In particular, it shows how to execute an XPath query on the underlying +DOM document and then handle the result using the more convenient object +model representation. For more information on maintaining association +with the underlying DOM document, refer to Section 5.1, "DOM Association" +in the C++/Tree Mapping User Manual. + +You will need the XQilla library[1] which provides XQuery and XPath 2 +support on top of Xerces-C++ in order to build and run this example. + +[1] http://xqilla.sourceforge.net + +The example consists of the following files: + +people.xsd + XML Schema definition for a simple person record vocabulary. + +people.xml + Sample XML instance document. + +people.hxx +people.cxx + C++ types that represent the person record vocabulary and a set of + parsing functions that convert XML instance documents to a tree-like + in-memory object model. These are generated by XSD from people.xsd. + +dom-parse.hxx +dom-parse.cxx + Definition and implementation of the parse() function that parses an + XML document to a DOM document. + +driver.cxx + Driver for Xerces-C++ 3.x.y/XQilla 2.2.x. It first calls the above + parse() function to parse the input file to a DOM document using + XQilla-provided DOM Implementation with support for XPath 2. It + then parses the DOM document to the object model. Finally, it + prepares and executes an XPath query on the underlying DOM + document and then handles the result by getting back from the + returned DOM nodes to object model nodes. + +driver-2.cxx + Driver for Xerces-C++ 2.x.y/XQilla 2.1.x. It performs the same set + of actions as driver.cxx above. + +To run the example on the sample XML document simply execute: + +$ ./driver people.xml diff --git a/xsd/examples/cxx/tree/xpath/dom-parse.cxx b/xsd/examples/cxx/tree/xpath/dom-parse.cxx new file mode 100644 index 0000000..82e87b6 --- /dev/null +++ b/xsd/examples/cxx/tree/xpath/dom-parse.cxx @@ -0,0 +1,120 @@ +// file : examples/cxx/tree/xpath/dom-parse.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : not copyrighted - public domain + +#include "dom-parse.hxx" + +#include <istream> + +#include <xercesc/dom/DOM.hpp> +#include <xercesc/framework/Wrapper4InputSource.hpp> + +#include <xsd/cxx/xml/sax/std-input-source.hxx> +#include <xsd/cxx/xml/dom/bits/error-handler-proxy.hxx> + +#include <xsd/cxx/tree/exceptions.hxx> +#include <xsd/cxx/tree/error-handler.hxx> + +using namespace xercesc; +namespace xml = xsd::cxx::xml; +namespace tree = xsd::cxx::tree; + +xml::dom::auto_ptr<DOMDocument> +parse (std::istream& is, + const std::string& id, + bool validate, + DOMImplementation* impl) +{ +#if _XERCES_VERSION >= 30000 + + // Xerces-C++ 3.0.0 and later. + // + xml::dom::auto_ptr<DOMLSParser> parser ( + impl->createLSParser (DOMImplementationLS::MODE_SYNCHRONOUS, 0)); + + DOMConfiguration* conf (parser->getDomConfig ()); + + // Discard comment nodes in the document. + // + conf->setParameter (XMLUni::fgDOMComments, false); + + // Enable datatype normalization. + // + conf->setParameter (XMLUni::fgDOMDatatypeNormalization, true); + + // Do not create EntityReference nodes in the DOM tree. No + // EntityReference nodes will be created, only the nodes + // corresponding to their fully expanded substitution text + // will be created. + // + conf->setParameter (XMLUni::fgDOMEntities, false); + + // Perform namespace processing. + // + conf->setParameter (XMLUni::fgDOMNamespaces, true); + + // Do not include ignorable whitespace in the DOM tree. + // + conf->setParameter (XMLUni::fgDOMElementContentWhitespace, false); + + // Enable/Disable validation. + // + conf->setParameter (XMLUni::fgDOMValidate, validate); + conf->setParameter (XMLUni::fgXercesSchema, validate); + conf->setParameter (XMLUni::fgXercesSchemaFullChecking, false); + + // Xerces-C++ 3.1.0 is the first version with working multi import + // support. + // +#if _XERCES_VERSION >= 30100 + conf->setParameter (XMLUni::fgXercesHandleMultipleImports, true); +#endif + + // We will release the DOM document ourselves. + // + conf->setParameter (XMLUni::fgXercesUserAdoptsDOMDocument, true); + + // Set error handler. + // + tree::error_handler<char> eh; + xml::dom::bits::error_handler_proxy<char> ehp (eh); + conf->setParameter (XMLUni::fgDOMErrorHandler, &ehp); + +#else // _XERCES_VERSION >= 30000 + + // Same as above but for Xerces-C++ 2 series. + // + xml::dom::auto_ptr<DOMBuilder> parser ( + impl->createDOMBuilder (DOMImplementationLS::MODE_SYNCHRONOUS, 0)); + + parser->setFeature (XMLUni::fgDOMComments, false); + parser->setFeature (XMLUni::fgDOMDatatypeNormalization, true); + parser->setFeature (XMLUni::fgDOMEntities, false); + parser->setFeature (XMLUni::fgDOMNamespaces, true); + parser->setFeature (XMLUni::fgDOMWhitespaceInElementContent, false); + parser->setFeature (XMLUni::fgDOMValidation, validate); + parser->setFeature (XMLUni::fgXercesSchema, validate); + parser->setFeature (XMLUni::fgXercesSchemaFullChecking, false); + parser->setFeature (XMLUni::fgXercesUserAdoptsDOMDocument, true); + + tree::error_handler<char> eh; + xml::dom::bits::error_handler_proxy<char> ehp (eh); + parser->setErrorHandler (&ehp); + +#endif // _XERCES_VERSION >= 30000 + + // Prepare input stream. + // + xml::sax::std_input_source isrc (is, id); + Wrapper4InputSource wrap (&isrc, false); + +#if _XERCES_VERSION >= 30000 + xml::dom::auto_ptr<DOMDocument> doc (parser->parse (&wrap)); +#else + xml::dom::auto_ptr<DOMDocument> doc (parser->parse (wrap)); +#endif + + eh.throw_if_failed<tree::parsing<char> > (); + + return doc; +} diff --git a/xsd/examples/cxx/tree/xpath/dom-parse.hxx b/xsd/examples/cxx/tree/xpath/dom-parse.hxx new file mode 100644 index 0000000..cfa1555 --- /dev/null +++ b/xsd/examples/cxx/tree/xpath/dom-parse.hxx @@ -0,0 +1,26 @@ +// file : examples/cxx/tree/xpath/dom-parse.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : not copyrighted - public domain + +#ifndef DOM_PARSE +#define DOM_PARSE + +#include <string> +#include <iosfwd> + +#include <xercesc/dom/DOMDocument.hpp> +#include <xercesc/dom/DOMImplementation.hpp> + +#include <xsd/cxx/xml/dom/auto-ptr.hxx> + +// Parse an XML document from the standard input stream with an +// optional resource id. Resource id is used in diagnostics as +// well as to locate schemas referenced from inside the document. +// +xsd::cxx::xml::dom::auto_ptr<xercesc::DOMDocument> +parse (std::istream& is, + const std::string& id, + bool validate, + xercesc::DOMImplementation*); + +#endif // DOM_PARSE diff --git a/xsd/examples/cxx/tree/xpath/driver-2.cxx b/xsd/examples/cxx/tree/xpath/driver-2.cxx new file mode 100644 index 0000000..ccbdd7c --- /dev/null +++ b/xsd/examples/cxx/tree/xpath/driver-2.cxx @@ -0,0 +1,139 @@ +// file : examples/cxx/tree/xpath/driver.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : not copyrighted - public domain + +#include <memory> // std::auto_ptr +#include <string> +#include <fstream> +#include <iostream> + +#include <xercesc/dom/DOM.hpp> + +#include <xqilla/xqilla-dom3.hpp> + +#include <xsd/cxx/xml/string.hxx> // xml::string, xml::transcode + +#include "dom-parse.hxx" + +#include "people.hxx" + +using namespace std; +using namespace xercesc; +namespace xml = xsd::cxx::xml; + +int +main (int argc, char* argv[]) +{ + if (argc != 2) + { + cerr << "usage: " << argv[0] << " people.xml" << endl; + return 1; + } + + int r (0); + + // Initialise Xerces-C++ and XQilla. + // + XQillaPlatformUtils::initialize(); + + // Get the XQilla DOMImplementation object with support for XPath. + // + DOMImplementation* impl ( + DOMImplementationRegistry::getDOMImplementation( + xml::string ("XPath2 3.0").c_str ())); + + try + { + using namespace people; + + ifstream ifs; + ifs.exceptions (ifstream::badbit | ifstream::failbit); + ifs.open (argv[1]); + + // Parse the XML file to DOM using the XQilla DOMImplementation. + // + xml_schema::dom::auto_ptr<xercesc::DOMDocument> dom ( + parse (ifs, argv[1], true, impl)); + + // Parse the DOM document to the object model. We also request that + // the DOM document to be associated with the object model. + // + std::auto_ptr<directory> d ( + directory_ (dom, + xml_schema::flags::keep_dom | xml_schema::flags::own_dom)); + + // Obtain the root element and document corresponding to the + // directory object. + // + DOMElement* root (static_cast<DOMElement*> (d->_node ())); + DOMDocument* doc (root->getOwnerDocument ()); + + // Obtain namespace resolver. + // + xml_schema::dom::auto_ptr<XQillaNSResolver> resolver ( + (XQillaNSResolver*)doc->createNSResolver (root)); + + // Set the namespace prefix for the people namespace that we can + // use reliably in XPath expressions regardless of what is used + // in XML documents. + // + resolver->addNamespaceBinding ( + xml::string ("p").c_str (), + xml::string ("http://www.codesynthesis.com/people").c_str ()); + + // Create XPath expression. + // + xml_schema::dom::auto_ptr<const XQillaExpression> expr ( + static_cast<const XQillaExpression*> ( + doc->createExpression ( + xml::string ("p:directory/person[age > 30]").c_str (), + resolver.get ()))); + + // Execute the query. + // + xml_schema::dom::auto_ptr<XPath2Result> r ( + static_cast<XPath2Result*> ( + expr->evaluate (doc, XPath2Result::ITERATOR_RESULT, 0))); + + // Iterate over the result. + // + cout << "Records matching the query:" << endl; + + while (r->iterateNext ()) + { + const DOMNode* n (r->asNode ()); + + // Obtain the object model node corresponding to this DOM node. + // + person* p ( + static_cast<person*> ( + n->getUserData (xml_schema::dom::tree_node_key))); + + // Print the data using the object model. + // + cout << endl + << "First : " << p->first_name () << endl + << "Last : " << p->last_name () << endl + << "Gender : " << p->gender () << endl + << "Age : " << p->age () << endl; + } + } + catch(const DOMException& e) + { + cerr << xml::transcode<char> (e.getMessage ()) << std::endl; + r = 1; + } + catch (const xml_schema::exception& e) + { + cerr << e << endl; + r = 1; + } + catch (const std::ios_base::failure&) + { + cerr << argv[1] << ": unable to open or read failure" << endl; + r = 1; + } + + XQillaPlatformUtils::terminate(); + return r; +} diff --git a/xsd/examples/cxx/tree/xpath/driver.cxx b/xsd/examples/cxx/tree/xpath/driver.cxx new file mode 100644 index 0000000..f49e186 --- /dev/null +++ b/xsd/examples/cxx/tree/xpath/driver.cxx @@ -0,0 +1,137 @@ +// file : examples/cxx/tree/xpath/driver.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : not copyrighted - public domain + +#include <memory> // std::auto_ptr +#include <string> +#include <fstream> +#include <iostream> + +#include <xercesc/dom/DOM.hpp> + +#include <xqilla/xqilla-dom3.hpp> + +#include <xsd/cxx/xml/string.hxx> // xml::string, xml::transcode + +#include "dom-parse.hxx" + +#include "people.hxx" + +using namespace std; +using namespace xercesc; +namespace xml = xsd::cxx::xml; + +int +main (int argc, char* argv[]) +{ + if (argc != 2) + { + cerr << "usage: " << argv[0] << " people.xml" << endl; + return 1; + } + + int r (0); + + // Initialise Xerces-C++ and XQilla. + // + XQillaPlatformUtils::initialize(); + + // Get the XQilla DOMImplementation object with support for XPath. + // + DOMImplementation* impl ( + DOMImplementationRegistry::getDOMImplementation( + xml::string ("XPath2 3.0").c_str ())); + + try + { + using namespace people; + + ifstream ifs; + ifs.exceptions (ifstream::badbit | ifstream::failbit); + ifs.open (argv[1]); + + // Parse the XML file to DOM using the XQilla DOMImplementation. + // + xml_schema::dom::auto_ptr<xercesc::DOMDocument> dom ( + parse (ifs, argv[1], true, impl)); + + // Parse the DOM document to the object model. We also request that + // the DOM document to be associated with the object model. + // + std::auto_ptr<directory> d ( + directory_ (dom, + xml_schema::flags::keep_dom | xml_schema::flags::own_dom)); + + // Obtain the root element and document corresponding to the + // directory object. + // + DOMElement* root (static_cast<DOMElement*> (d->_node ())); + DOMDocument* doc (root->getOwnerDocument ()); + + // Obtain namespace resolver. + // + xml_schema::dom::auto_ptr<DOMXPathNSResolver> resolver ( + doc->createNSResolver (root)); + + // Set the namespace prefix for the people namespace that we can + // use reliably in XPath expressions regardless of what is used + // in XML documents. + // + resolver->addNamespaceBinding ( + xml::string ("p").c_str (), + xml::string ("http://www.codesynthesis.com/people").c_str ()); + + // Create XPath expression. + // + xml_schema::dom::auto_ptr<DOMXPathExpression> expr ( + doc->createExpression ( + xml::string ("p:directory/person[age > 30]").c_str (), + resolver.get ())); + + // Execute the query. + // + xml_schema::dom::auto_ptr<DOMXPathResult> r ( + expr->evaluate (doc, DOMXPathResult::ITERATOR_RESULT_TYPE, 0)); + + // Iterate over the result. + // + cerr << "Records matching the query:" << endl; + + while (r->iterateNext ()) + { + DOMNode* n (r->getNodeValue ()); + + // Obtain the object model node corresponding to this DOM node. + // + person* p ( + static_cast<person*> ( + n->getUserData (xml_schema::dom::tree_node_key))); + + // Print the data using the object model. + // + cerr << endl + << "First : " << p->first_name () << endl + << "Last : " << p->last_name () << endl + << "Gender : " << p->gender () << endl + << "Age : " << p->age () << endl; + } + } + catch(const DOMException& e) + { + cerr << xml::transcode<char> (e.getMessage ()) << std::endl; + r = 1; + } + catch (const xml_schema::exception& e) + { + cerr << e << endl; + r = 1; + } + catch (const std::ios_base::failure&) + { + cerr << argv[1] << ": unable to open or read failure" << endl; + r = 1; + } + + XQillaPlatformUtils::terminate(); + return r; +} diff --git a/xsd/examples/cxx/tree/xpath/makefile b/xsd/examples/cxx/tree/xpath/makefile new file mode 100644 index 0000000..73457f3 --- /dev/null +++ b/xsd/examples/cxx/tree/xpath/makefile @@ -0,0 +1,113 @@ +# file : examples/cxx/tree/xpath/makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../../build/bootstrap.make + +xsd := people.xsd +cxx := driver.cxx dom-parse.cxx + +obj := $(addprefix $(out_base)/,$(cxx:.cxx=.o) $(xsd:.xsd=.o)) +dep := $(obj:.o=.o.d) + +driver := $(out_base)/driver +install := $(out_base)/.install +dist := $(out_base)/.dist +dist-win := $(out_base)/.dist-win +clean := $(out_base)/.clean + + +# Import. +# +$(call import,\ + $(scf_root)/import/libxerces-c/stub.make,\ + l: xerces_c.l,cpp-options: xerces_c.l.cpp-options) + +ifeq ($(filter $(MAKECMDGOALS),dist dist-win install),) +$(call import,\ + $(scf_root)/import/libxqilla/stub.make,\ + l: xqilla.l,cpp-options: xqilla.l.cpp-options) +endif + + +# Build. +# +$(driver): $(obj) $(xqilla.l) $(xerces_c.l) + +$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): $(xqilla.l.cpp-options) $(xerces_c.l.cpp-options) + +genf := $(xsd:.xsd=.hxx) $(xsd:.xsd=.ixx) $(xsd:.xsd=.cxx) +gen := $(addprefix $(out_base)/,$(genf)) + +$(gen): xsd := $(out_root)/xsd/xsd +$(gen): xsd_options := +$(gen): $(out_root)/xsd/xsd + +$(call include-dep,$(dep)) + +# Convenience alias for default target. +# +$(out_base)/: $(driver) + +# Install & Dist. +# +dist-common := $(out_base)/.dist-common + +$(install) $(dist) $(dist-win) $(dist-common): path := $(subst $(src_root)/,,$(src_base)) + +$(install): + $(call install-data,$(src_base)/README,$(install_doc_dir)/xsd/$(path)/README) + $(call install-data,$(src_base)/driver.cxx,$(install_doc_dir)/xsd/$(path)/driver.cxx) + $(call install-data,$(src_base)/driver-2.cxx,$(install_doc_dir)/xsd/$(path)/driver-2.cxx) + $(call install-data,$(src_base)/people.xsd,$(install_doc_dir)/xsd/$(path)/people.xsd) + $(call install-data,$(src_base)/people.xml,$(install_doc_dir)/xsd/$(path)/people.xml) + $(call install-data,$(src_base)/dom-parse.hxx,$(install_doc_dir)/xsd/$(path)/dom-parse.hxx) + $(call install-data,$(src_base)/dom-parse.cxx,$(install_doc_dir)/xsd/$(path)/dom-parse.cxx) + +$(dist-common): + $(call install-data,$(src_base)/driver.cxx,$(dist_prefix)/$(path)/driver.cxx) + $(call install-data,$(src_base)/driver-2.cxx,$(dist_prefix)/$(path)/driver-2.cxx) + $(call install-data,$(src_base)/people.xsd,$(dist_prefix)/$(path)/people.xsd) + $(call install-data,$(src_base)/people.xml,$(dist_prefix)/$(path)/people.xml) + $(call install-data,$(src_base)/dom-parse.hxx,$(dist_prefix)/$(path)/dom-parse.hxx) + $(call install-data,$(src_base)/dom-parse.cxx,$(dist_prefix)/$(path)/dom-parse.cxx) + +$(dist): $(dist-common) + $(call install-data,$(src_base)/README,$(dist_prefix)/$(path)/README) + +$(dist-win): $(dist-common) + $(call install-data,$(src_base)/README,$(dist_prefix)/$(path)/README.txt) + $(call message,,unix2dos $(dist_prefix)/$(path)/README.txt) + +# Clean. +# +$(clean): $(driver).o.clean \ + $(addsuffix .cxx.clean,$(obj)) \ + $(addsuffix .cxx.clean,$(dep)) \ + $(addprefix $(out_base)/,$(xsd:.xsd=.cxx.xsd.clean)) + +# Generated .gitignore. +# +ifeq ($(out_base),$(src_base)) +$(gen): | $(out_base)/.gitignore +$(driver): | $(out_base)/.gitignore + +$(out_base)/.gitignore: files := driver $(genf) +$(clean): $(out_base)/.gitignore.clean + +$(call include,$(bld_root)/git/gitignore.make) +endif + +# How to. +# +$(call include,$(bld_root)/cxx/o-e.make) +$(call include,$(bld_root)/cxx/cxx-o.make) +$(call include,$(bld_root)/cxx/cxx-d.make) +$(call include,$(bld_root)/install.make) +$(call include,$(scf_root)/xsd/tree/xsd-cxx.make) + +# Dependencies. +# +$(call import,$(src_root)/xsd/makefile) diff --git a/xsd/examples/cxx/tree/xpath/people.xml b/xsd/examples/cxx/tree/xpath/people.xml new file mode 100644 index 0000000..24af876 --- /dev/null +++ b/xsd/examples/cxx/tree/xpath/people.xml @@ -0,0 +1,29 @@ +<?xml version="1.0"?> + +<!-- + +file : examples/cxx/tree/xpath/people.xml +author : Boris Kolpackov <boris@codesynthesis.com> +copyright : not copyrighted - public domain + +--> + +<ppl:directory xmlns:ppl="http://www.codesynthesis.com/people" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.codesynthesis.com/people people.xsd"> + + <person> + <first-name>John</first-name> + <last-name>Doe</last-name> + <gender>male</gender> + <age>32</age> + </person> + + <person> + <first-name>Jane</first-name> + <last-name>Doe</last-name> + <gender>female</gender> + <age>28</age> + </person> + +</ppl:directory> diff --git a/xsd/examples/cxx/tree/xpath/people.xsd b/xsd/examples/cxx/tree/xpath/people.xsd new file mode 100644 index 0000000..12c8aef --- /dev/null +++ b/xsd/examples/cxx/tree/xpath/people.xsd @@ -0,0 +1,39 @@ +<?xml version="1.0"?> + +<!-- + +file : examples/cxx/tree/xpath/people.xsd +author : Boris Kolpackov <boris@codesynthesis.com> +copyright : not copyrighted - public domain + +--> + +<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns:ppl="http://www.codesynthesis.com/people" + targetNamespace="http://www.codesynthesis.com/people"> + + <xsd:simpleType name="gender"> + <xsd:restriction base="xsd:string"> + <xsd:enumeration value="male"/> + <xsd:enumeration value="female"/> + </xsd:restriction> + </xsd:simpleType> + + <xsd:complexType name="person"> + <xsd:sequence> + <xsd:element name="first-name" type="xsd:string"/> + <xsd:element name="last-name" type="xsd:string"/> + <xsd:element name="gender" type="ppl:gender"/> + <xsd:element name="age" type="xsd:unsignedShort"/> + </xsd:sequence> + </xsd:complexType> + + <xsd:complexType name="directory"> + <xsd:sequence> + <xsd:element name="person" type="ppl:person" maxOccurs="unbounded"/> + </xsd:sequence> + </xsd:complexType> + + <xsd:element name="directory" type="ppl:directory"/> + +</xsd:schema> diff --git a/xsd/examples/makefile b/xsd/examples/makefile new file mode 100644 index 0000000..b6879e6 --- /dev/null +++ b/xsd/examples/makefile @@ -0,0 +1,21 @@ +# file : examples/makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../build/bootstrap.make + +default := $(out_base)/ +install := $(out_base)/.install +dist := $(out_base)/.dist +dist-win := $(out_base)/.dist-win +clean := $(out_base)/.clean + +$(default): $(out_base)/cxx/parser/ $(out_base)/cxx/tree/ +$(install): $(out_base)/cxx/parser/.install $(out_base)/cxx/tree/.install +$(dist): $(out_base)/cxx/parser/.dist $(out_base)/cxx/tree/.dist +$(dist-win): $(out_base)/cxx/parser/.dist-win $(out_base)/cxx/tree/.dist-win +$(clean): $(out_base)/cxx/parser/.clean $(out_base)/cxx/tree/.clean + +$(call import,$(src_base)/cxx/parser/makefile) +$(call import,$(src_base)/cxx/tree/makefile) diff --git a/xsd/libxsd/FLOSSE b/xsd/libxsd/FLOSSE new file mode 100644 index 0000000..cbf8b2c --- /dev/null +++ b/xsd/libxsd/FLOSSE @@ -0,0 +1,89 @@ +1. Intent + +We want specified Free/Libre and Open Source Software ("FLOSS") to be +able to use the specified GPL-licensed XSD runtime library (libxsd) and +XSD generated code (collectively called the "Program") despite the fact +that not all FLOSS licenses are compatible with version 2 of the GNU +General Public License (the "GPL"). + +It is our intent to allow distribution of the entire Derivative Work +(including the Program) under one or more of the FLOSS licenses listed +in section 3 (section 2.a). It is also our intent to disallow simple +relicensing of the Program for the sole purpose of using it in +proprietary applications (section 2.b and 2.c). As an example, consider +two hypothetical scenarios: + + a) You created a program that uses the XSD generated code and the XSD + runtime library to access information in XML instance documents. + Your program performs useful computations based on this information + (sections 2.b and 2.c are satisfied). You distribute your program, + including the XSD generated code and the XSD runtime library under + the BSD license and make it available at no charge to all third + parties (section 2.a is satisfied). Later you (or someone else) may + choose to base their proprietary application on your code since the + BSD license does not prohibit it. + + This scenario falls under this FLOSS Exception. + + + b) You created a library that uses the XSD generated code and the XSD + runtime library to access information in XML instance documents. You + did not add to the library any other useful code that uses the XSD + generated code or the XSD runtime library (neither section 2.b nor + 2.c is satisfied). You distribute your library, including the XSD + generated code and the XSD runtime library under the BSD license and + make it available at no charge to all third parties (section 2.a + is satisfied). Later you base your proprietary application on this + library since the BSD license does not prohibit it. + + This scenario does not fall under this FLOSS Exception (neither + section 2.b nor 2.c is satisfied). You created the library for the + sole purpose of making the XSD generated code and the XSD runtime + library available to your proprietary application. + + +2. Legal Terms and Conditions + +As a special exception to the terms and conditions of version 2 of +the GPL you are free to distribute a verbatim copy of the Program +as part of the Derivative Work that is formed from the Program or +any part thereof and one or more works (each, a "FLOSS Work") as +long as you also meet all of these conditions: + + a) You must cause the Derivative Work that in whole or in part + contains or is derived from the Program or any part thereof, + to be licensed as a whole at no charge to all third parties + under the terms of one or more of the licenses listed in + section 3. + + b) The Derivative Work should contain one or more FLOSS Work that + can be reasonably considered as derived from the Program or some + part thereof. + + c) The Derivative Work should not contain any part of the Program + that cannot be reasonably considered as a base of one or more + FLOSS Work. + + +3. FLOSS License List + + a) Any license listed in the "GPL-Compatible Free Software Licenses" + and the "GPL-Incompatible Free Software Licenses" sections of the + License List as published by the Free Software Foundation (FSF): + + http://www.gnu.org/licenses/license-list.html + + +4. Definitions + +Terms used, but not defined, herein shall have the meaning provided in +the GPL. + +Derivative Work means a derivative work under copyright law. + + +5. Applicability + +You may choose to redistribute a copy of the Program exclusively under +the terms of the GPL by removing the FLOSS Exception notice from that +copy of the Program. diff --git a/xsd/libxsd/GPLv2 b/xsd/libxsd/GPLv2 new file mode 100644 index 0000000..3912109 --- /dev/null +++ b/xsd/libxsd/GPLv2 @@ -0,0 +1,340 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (C) <year> <name of author> + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + <signature of Ty Coon>, 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. diff --git a/xsd/libxsd/INSTALL b/xsd/libxsd/INSTALL new file mode 100644 index 0000000..537f00a --- /dev/null +++ b/xsd/libxsd/INSTALL @@ -0,0 +1,17 @@ +Prerequisites + + run-time: + + - libxerces-c >= 2.5.0 http://xerces.apache.org/xerces-c/ + + +Building libxsd + + No building is necessary at the moment. + + +Installing libxsd + + Not supported in this version. You may want to copy libxsd/xsd + to $(prefix)/include so that you have $(prefix)/include/xsd/*. + diff --git a/xsd/libxsd/LICENSE b/xsd/libxsd/LICENSE new file mode 100644 index 0000000..42346bf --- /dev/null +++ b/xsd/libxsd/LICENSE @@ -0,0 +1,26 @@ +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License version 2 as +published by the Free Software Foundation. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +In addition, as a special exception, Code Synthesis Tools CC gives +permission to link this program with the Xerces-C++ library (or with +modified versions of Xerces-C++ that use the same license as Xerces-C++), +and distribute linked combinations including the two. You must obey +the GNU General Public License version 2 in all respects for all of +the code used other than Xerces-C++. If you modify this copy of the +program, you may extend this exception to your version of the program, +but you are not obligated to do so. If you do not wish to do so, delete +this exception statement from your version. + +In addition, Code Synthesis Tools CC makes a special exception for +the Free/Libre and Open Source Software (FLOSS) which is described +in the accompanying FLOSSE file. diff --git a/xsd/libxsd/README b/xsd/libxsd/README new file mode 100644 index 0000000..25fd38a --- /dev/null +++ b/xsd/libxsd/README @@ -0,0 +1,12 @@ +libxsd is a runtime library for language mappings generated by +CodeSynthesis XSD, a W3C XML Schema to C++ data binding compiler. + +See the LICENSE file for distribution conditions. + +See the INSTALL file for prerequisites and installation instructions. + +The project page is at http://www.codesynthesis.com/projects/xsd/ + +Send bug reports or any other feedback to the xsd-users@codesynthesis.com +mailing list. + diff --git a/xsd/libxsd/makefile b/xsd/libxsd/makefile new file mode 100644 index 0000000..b7fbb77 --- /dev/null +++ b/xsd/libxsd/makefile @@ -0,0 +1,45 @@ +# file : libxsd/makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../build/bootstrap.make + +install := $(out_base)/.install +dist := $(out_base)/.dist +dist-win := $(out_base)/.dist-win + + +# Install. +# +$(install): + $(call install-dir,$(src_base)/xsd,$(install_inc_dir)/xsd) + $(call install-data,$(src_base)/FLOSSE,$(install_doc_dir)/libxsd/FLOSSE) + $(call install-data,$(src_base)/GPLv2,$(install_doc_dir)/libxsd/GPLv2) + $(call install-data,$(src_base)/LICENSE,$(install_doc_dir)/libxsd/LICENSE) + $(call install-data,$(src_base)/README,$(install_doc_dir)/libxsd/README) + +# Dist. +# +dist-common := $(out_base)/.dist-common + +$(dist-common): + $(call install-dir,$(src_base)/xsd,$(dist_prefix)/libxsd/xsd) + +$(dist): $(dist-common) + $(call install-data,$(src_base)/GPLv2,$(dist_prefix)/libxsd/GPLv2) + $(call install-data,$(src_base)/FLOSSE,$(dist_prefix)/libxsd/FLOSSE) + $(call install-data,$(src_base)/LICENSE,$(dist_prefix)/libxsd/LICENSE) + $(call install-data,$(src_base)/README,$(dist_prefix)/libxsd/README) + +$(dist-win): $(dist-common) + $(call install-data,$(src_base)/GPLv2,$(dist_prefix)/libxsd/GPLv2.txt) + $(call message,,unix2dos $(dist_prefix)/libxsd/GPLv2.txt) + $(call install-data,$(src_base)/FLOSSE,$(dist_prefix)/libxsd/FLOSSE.txt) + $(call message,,unix2dos $(dist_prefix)/libxsd/FLOSSE.txt) + $(call install-data,$(src_base)/LICENSE,$(dist_prefix)/libxsd/LICENSE.txt) + $(call message,,unix2dos $(dist_prefix)/libxsd/LICENSE.txt) + $(call install-data,$(src_base)/README,$(dist_prefix)/libxsd/README.txt) + $(call message,,unix2dos $(dist_prefix)/libxsd/README.txt) + +$(call include,$(bld_root)/install.make) diff --git a/xsd/libxsd/xsd/cxx/auto-array.hxx b/xsd/libxsd/xsd/cxx/auto-array.hxx new file mode 100644 index 0000000..2b4e100 --- /dev/null +++ b/xsd/libxsd/xsd/cxx/auto-array.hxx @@ -0,0 +1,114 @@ +// file : xsd/cxx/auto-array.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_CXX_AUTO_ARRAY_HXX +#define XSD_CXX_AUTO_ARRAY_HXX + +#include <cstddef> // std::size_t + +namespace xsd +{ + namespace cxx + { + template <typename T> + struct std_deallocator + { + void + deallocate (T* p) + { + delete[] p; + } + }; + + // Simple automatic array. The second template parameter is + // an optional deallocator type. If not specified, delete[] + // is used. + // + template <typename T, typename D = std_deallocator<T> > + struct auto_array + { + auto_array (T a[]) + : a_ (a), d_ (0) + { + } + + auto_array (T a[], D& d) + : a_ (a), d_ (&d) + { + } + + ~auto_array () + { + if (d_ != 0) + d_->deallocate (a_); + else + delete[] a_; + } + + T& + operator[] (std::size_t index) const + { + return a_[index]; + } + + T* + get () const + { + return a_; + } + + T* + release () + { + T* tmp (a_); + a_ = 0; + return tmp; + } + + void + reset (T a[] = 0) + { + if (a_ != a) + { + if (d_ != 0) + d_->deallocate (a_); + else + delete[] a_; + + a_ = a; + } + } + + typedef void (auto_array::*bool_convertible)(); + + operator bool_convertible () const + { + return a_ ? &auto_array<T, D>::true_ : 0; + } + + private: + auto_array (const auto_array&); + + auto_array& + operator= (const auto_array&); + + private: + void + true_ (); + + private: + T* a_; + D* d_; + }; + + template <typename T, typename D> + void auto_array<T, D>:: + true_ () + { + } + } +} + +#endif // XSD_CXX_AUTO_ARRAY_HXX diff --git a/xsd/libxsd/xsd/cxx/compilers/vc-7/post.hxx b/xsd/libxsd/xsd/cxx/compilers/vc-7/post.hxx new file mode 100644 index 0000000..5357cd4 --- /dev/null +++ b/xsd/libxsd/xsd/cxx/compilers/vc-7/post.hxx @@ -0,0 +1,6 @@ +// file : xsd/cxx/compilers/vc-7/post.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#pragma warning (pop) diff --git a/xsd/libxsd/xsd/cxx/compilers/vc-7/pre.hxx b/xsd/libxsd/xsd/cxx/compilers/vc-7/pre.hxx new file mode 100644 index 0000000..6b9b5fb --- /dev/null +++ b/xsd/libxsd/xsd/cxx/compilers/vc-7/pre.hxx @@ -0,0 +1,36 @@ +// file : xsd/cxx/compilers/vc-7/pre.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + + +#if (_MSC_VER < 1310) +# error Microsoft Visual C++ 7.0 (.NET 2002) is not supported. +#endif + + +// These warnings had to be disabled "for good". +// +#pragma warning (disable:4250) // inherits via dominance +#pragma warning (disable:4505) // unreferenced local function has been removed +#pragma warning (disable:4661) // no definition for explicit instantiation + + +// Push warning state. +// +#pragma warning (push, 3) + + +// Disabled warnings. +// +#pragma warning (disable:4355) // passing 'this' to a member +#pragma warning (disable:4584) // is already a base-class +#pragma warning (disable:4800) // forcing value to bool +#pragma warning (disable:4275) // non dll-interface base +#pragma warning (disable:4251) // base needs to have dll-interface +#pragma warning (disable:4224) // nonstandard extension (/Za option) + + +// Elevated warnings. +// +#pragma warning (2:4239) // standard doesn't allow this conversion diff --git a/xsd/libxsd/xsd/cxx/compilers/vc-8/post.hxx b/xsd/libxsd/xsd/cxx/compilers/vc-8/post.hxx new file mode 100644 index 0000000..c7d3b3f --- /dev/null +++ b/xsd/libxsd/xsd/cxx/compilers/vc-8/post.hxx @@ -0,0 +1,6 @@ +// file : xsd/cxx/compilers/vc-8/post.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#pragma warning (pop) diff --git a/xsd/libxsd/xsd/cxx/compilers/vc-8/pre.hxx b/xsd/libxsd/xsd/cxx/compilers/vc-8/pre.hxx new file mode 100644 index 0000000..02161a4 --- /dev/null +++ b/xsd/libxsd/xsd/cxx/compilers/vc-8/pre.hxx @@ -0,0 +1,28 @@ +// file : xsd/cxx/compilers/vc-8/pre.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +// These warnings had to be disabled "for good". +// +#pragma warning (disable:4250) // inherits via dominance +#pragma warning (disable:4661) // no definition for explicit instantiation + + +// Push warning state. +// +#pragma warning (push, 3) + + +// Disabled warnings. +// +#pragma warning (disable:4355) // passing 'this' to a member +#pragma warning (disable:4800) // forcing value to bool +#pragma warning (disable:4275) // non dll-interface base +#pragma warning (disable:4251) // base needs to have dll-interface +#pragma warning (disable:4224) // nonstandard extension (/Za option) + + +// Elevated warnings. +// +#pragma warning (2:4239) // standard doesn't allow this conversion diff --git a/xsd/libxsd/xsd/cxx/config.hxx b/xsd/libxsd/xsd/cxx/config.hxx new file mode 100644 index 0000000..badfe03 --- /dev/null +++ b/xsd/libxsd/xsd/cxx/config.hxx @@ -0,0 +1,15 @@ +// file : xsd/cxx/config.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_CXX_CONFIG_HXX +#define XSD_CXX_CONFIG_HXX + +#include <xsd/cxx/version.hxx> + +// Macro to suppress unused variable warning. +// +#define XSD_UNUSED(x) (void)x + +#endif // XSD_CXX_CONFIG_HXX diff --git a/xsd/libxsd/xsd/cxx/exceptions.hxx b/xsd/libxsd/xsd/cxx/exceptions.hxx new file mode 100644 index 0000000..d5f01c1 --- /dev/null +++ b/xsd/libxsd/xsd/cxx/exceptions.hxx @@ -0,0 +1,21 @@ +// file : xsd/cxx/exceptions.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_CXX_EXCEPTIONS_HXX +#define XSD_CXX_EXCEPTIONS_HXX + +#include <exception> // std::exception + +namespace xsd +{ + namespace cxx + { + struct exception: std::exception + { + }; + } +} + +#endif // XSD_CXX_EXCEPTIONS_HXX diff --git a/xsd/libxsd/xsd/cxx/parser/document.hxx b/xsd/libxsd/xsd/cxx/parser/document.hxx new file mode 100644 index 0000000..992b800 --- /dev/null +++ b/xsd/libxsd/xsd/cxx/parser/document.hxx @@ -0,0 +1,90 @@ +// file : xsd/cxx/parser/document.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_CXX_PARSER_DOCUMENT_HXX +#define XSD_CXX_PARSER_DOCUMENT_HXX + +#include <string> +#include <cstddef> // std::size_t + +#include <xsd/cxx/ro-string.hxx> +#include <xsd/cxx/parser/elements.hxx> + +namespace xsd +{ + namespace cxx + { + namespace parser + { + // If you want to use a different underlying XML parser, all you + // need to do is to route events to this interface. + // + template <typename C> + class document + { + public: + virtual + ~document (); + + document (parser_base<C>& root, + const std::basic_string<C>& ns, + const std::basic_string<C>& name); + + public: + // The type argument is a type name and namespace from the + // xsi:type attribute in the form "<name> <namespace>" with + // the space and namespace part absent if the type does not + // have a namespace or 0 if xsi:type is not present. + // + void + start_element (const ro_string<C>& ns, + const ro_string<C>& name, + const ro_string<C>* type); + + void + end_element (const ro_string<C>& ns, const ro_string<C>& name); + + void + attribute (const ro_string<C>& ns, + const ro_string<C>& name, + const ro_string<C>& value); + + void + characters (const ro_string<C>&); + + protected: + document (); + + // This function is called to obtain the root element type parser. + // If the returned pointed is 0 then the whole document content + // is ignored. + // + virtual parser_base<C>* + start_root_element (const ro_string<C>& ns, + const ro_string<C>& name, + const ro_string<C>* type); + + // This function is called to indicate the completion of document + // parsing. The parser argument contains the pointer returned by + // start_root_element. + // + virtual void + end_root_element (const ro_string<C>& ns, + const ro_string<C>& name, + parser_base<C>* parser); + + private: + parser_base<C>* root_; + std::basic_string<C> ns_; + std::basic_string<C> name_; + std::size_t depth_; + }; + } + } +} + +#include <xsd/cxx/parser/document.txx> + +#endif // XSD_CXX_PARSER_DOCUMENT_HXX diff --git a/xsd/libxsd/xsd/cxx/parser/document.txx b/xsd/libxsd/xsd/cxx/parser/document.txx new file mode 100644 index 0000000..cad49ce --- /dev/null +++ b/xsd/libxsd/xsd/cxx/parser/document.txx @@ -0,0 +1,129 @@ +// file : xsd/cxx/parser/document.txx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <cassert> + +#include <xsd/cxx/parser/schema-exceptions.hxx> + +namespace xsd +{ + namespace cxx + { + namespace parser + { + // document + // + template <typename C> + document<C>:: + ~document () + { + } + + template <typename C> + document<C>:: + document (parser_base<C>& root, + const std::basic_string<C>& ns, + const std::basic_string<C>& name) + : root_ (&root), ns_ (ns), name_ (name), depth_ (0) + { + } + + template <typename C> + document<C>:: + document () + : root_ (0), depth_ (0) + { + } + + template <typename C> + void document<C>:: + start_element (const ro_string<C>& ns, + const ro_string<C>& name, + const ro_string<C>* type) + { + if (depth_++ > 0) + { + if (root_) + root_->_start_element (ns, name, type); + } + else + { + root_ = start_root_element (ns, name, type); + + if (root_) + { + // pre () is called by the user. + // + root_->_pre_impl (); + } + } + } + + template <typename C> + void document<C>:: + end_element (const ro_string<C>& ns, const ro_string<C>& name) + { + assert (depth_ > 0); + + if (--depth_ > 0) + { + if (root_) + root_->_end_element (ns, name); + } + else + { + if (root_) + { + root_->_post_impl (); + // + // post() is called by the user. + } + + end_root_element (ns, name, root_); + } + } + + template <typename C> + void document<C>:: + attribute (const ro_string<C>& ns, + const ro_string<C>& name, + const ro_string<C>& value) + { + if (root_) + root_->_attribute (ns, name, value); + } + + template <typename C> + void document<C>:: + characters (const ro_string<C>& s) + { + if (root_) + root_->_characters (s); + } + + template <typename C> + parser_base<C>* document<C>:: + start_root_element (const ro_string<C>& ns, + const ro_string<C>& name, + const ro_string<C>*) + { + if (name_ == name && ns_ == ns) + { + return root_; + } + else + throw expected_element<C> (ns_, name_, ns, name); + } + + template <typename C> + void document<C>:: + end_root_element (const ro_string<C>&, + const ro_string<C>&, + parser_base<C>*) + { + } + } + } +} diff --git a/xsd/libxsd/xsd/cxx/parser/elements.hxx b/xsd/libxsd/xsd/cxx/parser/elements.hxx new file mode 100644 index 0000000..5f0bead --- /dev/null +++ b/xsd/libxsd/xsd/cxx/parser/elements.hxx @@ -0,0 +1,95 @@ +// file : xsd/cxx/parser/elements.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_CXX_PARSER_ELEMENTS_HXX +#define XSD_CXX_PARSER_ELEMENTS_HXX + +#include <xsd/cxx/ro-string.hxx> + +namespace xsd +{ + namespace cxx + { + namespace parser + { + // pre() and post() are overridable pre/post callbacks, i.e., the + // derived parser can override them without calling the base version. + // _pre() and _post() are not overridable pre/post callbacks in the + // sense that the derived parser may override them but has to call + // the base version. The call sequence is as shown below: + // + // pre () + // _pre () + // _post () + // post () + // + template <typename C> + class parser_base + { + public: + virtual + ~parser_base (); + + virtual void + pre (); + + virtual void + _pre (); + + // The type argument is a type name and namespace from the + // xsi:type attribute in the form "<name> <namespace>" with + // the space and namespace part absent if the type does not + // have a namespace or 0 if xsi:type is not present. + // + virtual void + _start_element (const ro_string<C>& ns, + const ro_string<C>& name, + const ro_string<C>* type) = 0; + + virtual void + _end_element (const ro_string<C>& ns, + const ro_string<C>& name) = 0; + + virtual void + _attribute (const ro_string<C>& ns, + const ro_string<C>& name, + const ro_string<C>& value) = 0; + + virtual void + _characters (const ro_string<C>&) = 0; + + virtual void + _post (); + + // The post() signature varies depending on the parser return + // type. + // + + // Implementation callbacks for _pre and _post. The _pre and _post + // callbacks should never be called directly. Instead, the *_impl + // versions should be used. By default _pre_impl and _post_impl + // simply call _pre and _post respectively. + // + virtual void + _pre_impl (); + + virtual void + _post_impl (); + + public: + // Dynamic type in the form "<name> <namespace>" with + // the space and namespace part absent if the type does + // not have a namespace. Used in polymorphism-aware code. + // + virtual const C* + _dynamic_type () const; + }; + } + } +} + +#include <xsd/cxx/parser/elements.txx> + +#endif // XSD_CXX_PARSER_ELEMENTS_HXX diff --git a/xsd/libxsd/xsd/cxx/parser/elements.txx b/xsd/libxsd/xsd/cxx/parser/elements.txx new file mode 100644 index 0000000..5706107 --- /dev/null +++ b/xsd/libxsd/xsd/cxx/parser/elements.txx @@ -0,0 +1,60 @@ +// file : xsd/cxx/parser/elements.txx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +namespace xsd +{ + namespace cxx + { + namespace parser + { + // parser_base + // + template <typename C> + parser_base<C>:: + ~parser_base () + { + } + + template <typename C> + void parser_base<C>:: + pre () + { + } + + template <typename C> + void parser_base<C>:: + _pre () + { + } + + template <typename C> + void parser_base<C>:: + _post () + { + } + + template <typename C> + void parser_base<C>:: + _pre_impl () + { + _pre (); + } + + template <typename C> + void parser_base<C>:: + _post_impl () + { + _post (); + } + + template <typename C> + const C* parser_base<C>:: + _dynamic_type () const + { + return 0; + } + } + } +} diff --git a/xsd/libxsd/xsd/cxx/parser/error-handler.hxx b/xsd/libxsd/xsd/cxx/parser/error-handler.hxx new file mode 100644 index 0000000..b83c0a8 --- /dev/null +++ b/xsd/libxsd/xsd/cxx/parser/error-handler.hxx @@ -0,0 +1,57 @@ +// file : xsd/cxx/parser/error-handler.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_CXX_PARSER_ERROR_HANDLER_HXX +#define XSD_CXX_PARSER_ERROR_HANDLER_HXX + +#include <xsd/cxx/xml/error-handler.hxx> + +#include <xsd/cxx/parser/exceptions.hxx> + +namespace xsd +{ + namespace cxx + { + namespace parser + { + template <typename C> + class error_handler: public xml::error_handler<C> + { + public: + typedef typename xml::error_handler<C>::severity severity; + + error_handler () + : failed_ (false) + { + } + + virtual bool + handle (const std::basic_string<C>& id, + unsigned long line, + unsigned long column, + severity s, + const std::basic_string<C>& message); + + void + throw_if_failed () const; + + void + reset () + { + failed_ = false; + diagnostics_.clear (); + } + + private: + bool failed_; + diagnostics<C> diagnostics_; + }; + } + } +} + +#include <xsd/cxx/parser/error-handler.txx> + +#endif // XSD_CXX_PARSER_ERROR_HANDLER_HXX diff --git a/xsd/libxsd/xsd/cxx/parser/error-handler.txx b/xsd/libxsd/xsd/cxx/parser/error-handler.txx new file mode 100644 index 0000000..23751d2 --- /dev/null +++ b/xsd/libxsd/xsd/cxx/parser/error-handler.txx @@ -0,0 +1,41 @@ +// file : xsd/cxx/parser/error-handler.txx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +namespace xsd +{ + namespace cxx + { + namespace parser + { + template <typename C> + bool error_handler<C>:: + handle (const std::basic_string<C>& id, + unsigned long line, + unsigned long column, + severity s, + const std::basic_string<C>& message) + { + diagnostics_.push_back ( + error<C> (s == severity::warning + ? cxx::parser::severity::warning + : cxx::parser::severity::error, + id, line, column, message)); + + if (!failed_ && s != severity::warning) + failed_ = true; + + return true; + } + + template <typename C> + void error_handler<C>:: + throw_if_failed () const + { + if (failed_) + throw parsing<C> (diagnostics_); + } + } + } +} diff --git a/xsd/libxsd/xsd/cxx/parser/exceptions.hxx b/xsd/libxsd/xsd/cxx/parser/exceptions.hxx new file mode 100644 index 0000000..c0e90dd --- /dev/null +++ b/xsd/libxsd/xsd/cxx/parser/exceptions.hxx @@ -0,0 +1,153 @@ +// file : xsd/cxx/parser/exceptions.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_CXX_PARSER_EXCEPTIONS_HXX +#define XSD_CXX_PARSER_EXCEPTIONS_HXX + +#include <string> +#include <vector> +#include <ostream> + +#include <xsd/cxx/exceptions.hxx> // xsd::cxx::exception +#include <xsd/cxx/ro-string.hxx> + +namespace xsd +{ + namespace cxx + { + namespace parser + { + // + // + template <typename C> + struct exception: xsd::cxx::exception + { + friend + std::basic_ostream<C>& + operator<< (std::basic_ostream<C>& os, const exception& e) + { + e.print (os); + return os; + } + + protected: + virtual void + print (std::basic_ostream<C>&) const = 0; + }; + + + // + // + struct severity + { + enum value + { + warning, + error + }; + + severity (value v) : v_ (v) {} + operator value () const { return v_; } + + private: + value v_; + }; + + template <typename C> + struct error + { + error (cxx::parser::severity, + const std::basic_string<C>& id, + unsigned long line, + unsigned long column, + const std::basic_string<C>& message); + + cxx::parser::severity + severity () const + { + return severity_; + } + + const std::basic_string<C>& + id () const + { + return id_; + } + + unsigned long + line () const + { + return line_; + } + + unsigned long + column () const + { + return column_; + } + + const std::basic_string<C>& + message () const + { + return message_; + } + + private: + cxx::parser::severity severity_; + std::basic_string<C> id_; + unsigned long line_; + unsigned long column_; + std::basic_string<C> message_; + }; + + // See exceptions.ixx for operator<< (error). + + + // + // + template <typename C> + struct diagnostics: std::vector<error<C> > + { + }; + + // See exceptions.ixx for operator<< (diagnostics). + + // + // + template <typename C> + struct parsing: exception<C> + { + virtual + ~parsing () throw (); + + parsing (); + + parsing (const cxx::parser::diagnostics<C>&); + + const cxx::parser::diagnostics<C>& + diagnostics () const + { + return diagnostics_; + } + + virtual const char* + what () const throw (); + + protected: + virtual void + print (std::basic_ostream<C>&) const; + + private: + cxx::parser::diagnostics<C> diagnostics_; + }; + } + } +} + +#include <xsd/cxx/parser/exceptions.txx> + +#endif // XSD_CXX_PARSER_EXCEPTIONS_HXX + +#include <xsd/cxx/parser/exceptions.ixx> diff --git a/xsd/libxsd/xsd/cxx/parser/exceptions.ixx b/xsd/libxsd/xsd/cxx/parser/exceptions.ixx new file mode 100644 index 0000000..d4e13f3 --- /dev/null +++ b/xsd/libxsd/xsd/cxx/parser/exceptions.ixx @@ -0,0 +1,129 @@ +// file : xsd/cxx/parser/exceptions.ixx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#if defined(XSD_CXX_PARSER_USE_CHAR) || !defined(XSD_CXX_PARSER_USE_WCHAR) + +#ifndef XSD_CXX_PARSER_EXCEPTIONS_IXX_CHAR +#define XSD_CXX_PARSER_EXCEPTIONS_IXX_CHAR + +namespace xsd +{ + namespace cxx + { + namespace parser + { + // error + // + inline + std::basic_ostream<char>& + operator<< (std::basic_ostream<char>& os, const error<char>& e) + { + return os << e.id () << ':' << e.line () << ':' << e.column () + << (e.severity () == severity::error + ? " error: " + : " warning: ") << e.message (); + } + + + // diagnostics + // + inline + std::basic_ostream<char>& + operator<< (std::basic_ostream<char>& os, const diagnostics<char>& d) + { + for (diagnostics<char>::const_iterator b (d.begin ()), i (b); + i != d.end (); + ++i) + { + if (i != b) + os << "\n"; + + os << *i; + } + + return os; + } + + // parsing + // + template<> + inline + void parsing<char>:: + print (std::basic_ostream<char>& os) const + { + if (diagnostics_.empty ()) + os << "instance document parsing failed"; + else + os << diagnostics_; + } + } + } +} + +#endif // XSD_CXX_PARSER_EXCEPTIONS_IXX_CHAR +#endif // XSD_CXX_PARSER_USE_CHAR + + +#if defined(XSD_CXX_PARSER_USE_WCHAR) || !defined(XSD_CXX_PARSER_USE_CHAR) + +#ifndef XSD_CXX_PARSER_EXCEPTIONS_IXX_WCHAR +#define XSD_CXX_PARSER_EXCEPTIONS_IXX_WCHAR + +namespace xsd +{ + namespace cxx + { + namespace parser + { + // error + // + inline + std::basic_ostream<wchar_t>& + operator<< (std::basic_ostream<wchar_t>& os, const error<wchar_t>& e) + { + return os << e.id () << L':' << e.line () << L':' << e.column () + << (e.severity () == severity::error + ? L" error: " + : L" warning: ") << e.message (); + } + + // diagnostics + // + inline + std::basic_ostream<wchar_t>& + operator<< (std::basic_ostream<wchar_t>& os, + const diagnostics<wchar_t>& d) + { + for (diagnostics<wchar_t>::const_iterator b (d.begin ()), i (b); + i != d.end (); + ++i) + { + if (i != b) + os << L"\n"; + + os << *i; + } + + return os; + } + + // parsing + // + template<> + inline + void parsing<wchar_t>:: + print (std::basic_ostream<wchar_t>& os) const + { + if (diagnostics_.empty ()) + os << L"instance document parsing failed"; + else + os << diagnostics_; + } + } + } +} + +#endif // XSD_CXX_PARSER_EXCEPTIONS_IXX_WCHAR +#endif // XSD_CXX_PARSER_USE_WCHAR diff --git a/xsd/libxsd/xsd/cxx/parser/exceptions.txx b/xsd/libxsd/xsd/cxx/parser/exceptions.txx new file mode 100644 index 0000000..5423cdd --- /dev/null +++ b/xsd/libxsd/xsd/cxx/parser/exceptions.txx @@ -0,0 +1,59 @@ +// file : xsd/cxx/parser/exceptions.txx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +namespace xsd +{ + namespace cxx + { + namespace parser + { + // error + // + template <typename C> + error<C>:: + error (cxx::parser::severity s, + const std::basic_string<C>& id, + unsigned long line, + unsigned long column, + const std::basic_string<C>& message) + : severity_ (s), + id_ (id), + line_ (line), + column_ (column), + message_ (message) + { + } + + + // parsing + // + template <typename C> + parsing<C>:: + ~parsing () throw () + { + } + + template <typename C> + parsing<C>:: + parsing () + { + } + + template <typename C> + parsing<C>:: + parsing (const cxx::parser::diagnostics<C>& diagnostics) + : diagnostics_ (diagnostics) + { + } + + template <typename C> + const char* parsing<C>:: + what () const throw () + { + return "instance document parsing failed"; + } + } + } +} diff --git a/xsd/libxsd/xsd/cxx/parser/expat/elements.hxx b/xsd/libxsd/xsd/cxx/parser/expat/elements.hxx new file mode 100644 index 0000000..c9f3de0 --- /dev/null +++ b/xsd/libxsd/xsd/cxx/parser/expat/elements.hxx @@ -0,0 +1,344 @@ +// file : xsd/cxx/parser/expat/elements.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_CXX_PARSER_EXPAT_ELEMENTS_HXX +#define XSD_CXX_PARSER_EXPAT_ELEMENTS_HXX + +#include <string> +#include <iosfwd> +#include <cstddef> // std::size_t +#include <vector> + +#include <expat.h> + +// We only support UTF-8 expat for now. +// +#ifdef XML_UNICODE +#error UTF-16 expat (XML_UNICODE defined) is not supported +#endif + +#include <xsd/cxx/xml/error-handler.hxx> + +#include <xsd/cxx/parser/exceptions.hxx> +#include <xsd/cxx/parser/elements.hxx> +#include <xsd/cxx/parser/document.hxx> +#include <xsd/cxx/parser/error-handler.hxx> +#include <xsd/cxx/parser/schema-exceptions.hxx> + +namespace xsd +{ + namespace cxx + { + namespace parser + { + namespace expat + { + // Simple auto pointer for Expat's XML_Parser object. + // + struct parser_auto_ptr + { + ~parser_auto_ptr () + { + if (parser_ != 0) + XML_ParserFree (parser_); + } + + explicit + parser_auto_ptr (XML_Parser parser = 0) + : parser_ (parser) + { + } + + parser_auto_ptr& + operator= (XML_Parser parser) + { + if (parser_ != 0) + XML_ParserFree (parser_); + + parser_ = parser; + return *this; + } + + public: + operator XML_Parser () + { + return parser_; + } + + private: + parser_auto_ptr (const parser_auto_ptr&); + + parser_auto_ptr& + operator= (const parser_auto_ptr&); + + private: + XML_Parser parser_; + }; + + + // + // + template <typename C> + struct document: cxx::parser::document<C> // VC 7.1 likes it qualified + { + public: + document (parser_base<C>&, + const C* root_element_name, + bool polymorphic = false); + + document (parser_base<C>&, + const std::basic_string<C>& root_element_name, + bool polymorphic = false); + + document (parser_base<C>&, + const C* root_element_namespace, + const C* root_element_name, + bool polymorphic = false); + + document (parser_base<C>&, + const std::basic_string<C>& root_element_namespace, + const std::basic_string<C>& root_element_name, + bool polymorphic = false); + + protected: + document (bool polymorphic = false); + + public: + // Parse a local file. The file is accessed with std::ifstream + // in binary mode. The std::ios_base::failure exception is used + // to report io errors (badbit and failbit). + void + parse (const std::basic_string<C>& file); + + // Parse a local file with a user-provided error_handler + // object. The file is accessed with std::ifstream in binary + // mode. The std::ios_base::failure exception is used to report + // io errors (badbit and failbit). + // + void + parse (const std::basic_string<C>& file, xml::error_handler<C>&); + + public: + // System id is a "system" identifier of the resources (e.g., + // URI or a full file path). Public id is a "public" identifier + // of the resource (e.g., application-specific name or relative + // file path). System id is used to resolve relative paths. + // In diagnostics messages system id is used if public id is + // not available. Otherwise public id is used. + // + + // Parse std::istream. + // + void + parse (std::istream&); + + // Parse std::istream with a user-provided error_handler object. + // + void + parse (std::istream&, xml::error_handler<C>&); + + // Parse std::istream with a system id. + // + void + parse (std::istream&, const std::basic_string<C>& system_id); + + // Parse std::istream with a system id and a user-provided + // error_handler object. + // + void + parse (std::istream&, + const std::basic_string<C>& system_id, + xml::error_handler<C>&); + + // Parse std::istream with system and public ids. + // + void + parse (std::istream&, + const std::basic_string<C>& system_id, + const std::basic_string<C>& public_id); + + // Parse std::istream with system and public ids and a user-provided + // error_handler object. + // + void + parse (std::istream&, + const std::basic_string<C>& system_id, + const std::basic_string<C>& public_id, + xml::error_handler<C>&); + + public: + // Parse a chunk of input. You can call these functions multiple + // times with the last call having the last argument true. + // + void + parse (const void* data, std::size_t size, bool last); + + void + parse (const void* data, std::size_t size, bool last, + xml::error_handler<C>&); + + void + parse (const void* data, std::size_t size, bool last, + const std::basic_string<C>& system_id); + + void + parse (const void* data, std::size_t size, bool last, + const std::basic_string<C>& system_id, + xml::error_handler<C>&); + + void + parse (const void* data, std::size_t size, bool last, + const std::basic_string<C>& system_id, + const std::basic_string<C>& public_id); + + void + parse (const void* data, std::size_t size, bool last, + const std::basic_string<C>& system_id, + const std::basic_string<C>& public_id, + xml::error_handler<C>&); + + public: + // Low-level Expat-specific parsing API. A typical use case + // would look like this (pseudo-code): + // + // xxx_pimpl root; + // document doc (root, "root"); + // + // root.pre (); + // doc.parse_begin (xml_parser, "file.xml"); + // + // while (more_stuff_to_parse &&) + // { + // // Call XML_Parse or XML_ParseBuffer. + // + // if (status == XML_STATUS_ERROR) + // break; + // } + // + // // Call parse_end even in case of an error to translate + // // XML and Schema errors to exceptions or error_handler + // // calls. + // // + // doc.parse_end (); + // result_type result (root.post_xxx ()); + // + // Notes: + // + // 1. If your XML instances use XML namespaces, the + // XML_ParserCreateNS functions should be used to create the + // XML parser. Space (XML_Char (' ')) should be used as a + // separator (the second argument to XML_ParserCreateNS). + // + void + parse_begin (XML_Parser); + + void + parse_begin (XML_Parser, const std::basic_string<C>& public_id); + + void + parse_begin (XML_Parser, xml::error_handler<C>&); + + void + parse_begin (XML_Parser, + const std::basic_string<C>& public_id, + xml::error_handler<C>&); + void + parse_end (); + + // Event routing. + // + public: + static void XMLCALL + start_element_thunk_ (void*, const XML_Char*, const XML_Char**); + + static void XMLCALL + end_element_thunk_ (void*, const XML_Char*); + + static void XMLCALL + characters_thunk_ (void*, const XML_Char*, int); + + static void XMLCALL + start_namespace_decl_thunk_ ( + void*, const XML_Char*, const XML_Char*); + + static void XMLCALL + end_namespace_decl_thunk_ (void*, const XML_Char*); + + protected: + void + start_element_ (const XML_Char* ns_name, const XML_Char** atts); + + void + end_element_ (const XML_Char* ns_name); + + void + characters_ (const XML_Char* s, std::size_t n); + + void + start_namespace_decl_ (const XML_Char* prefix, const XML_Char* ns); + + void + end_namespace_decl_ (const XML_Char* prefix); + + protected: + void + set (); + + void + clear (); + + bool + parse (std::istream&, + const std::basic_string<C>* system_id, + const std::basic_string<C>* public_id, + xml::error_handler<C>&); + + bool + parse (const void* data, std::size_t size, bool last, + const std::basic_string<C>* system_id, + const std::basic_string<C>* public_id, + xml::error_handler<C>&); + + + void + translate_schema_exception (const schema_exception<C>& e); + + protected: + XML_Parser xml_parser_; + parser_auto_ptr auto_xml_parser_; + + xml::error_handler<C>* eh_; + error_handler<C> default_eh_; + std::basic_string<C> public_id_; + + bool polymorphic_; + + // Namespace-prefix mapping. Only maintained in the polymorphic + // case. + // + struct ns_decl + { + ns_decl (const std::basic_string<C>& p, + const std::basic_string<C>& n) + : prefix (p), ns (n) + { + } + + std::basic_string<C> prefix; + std::basic_string<C> ns; + }; + + typedef std::vector<ns_decl> ns_decls; + + ns_decls ns_decls_; + }; + } + } + } +} + +#include <xsd/cxx/parser/expat/elements.txx> + +#endif // XSD_CXX_PARSER_EXPAT_ELEMENTS_HXX diff --git a/xsd/libxsd/xsd/cxx/parser/expat/elements.txx b/xsd/libxsd/xsd/cxx/parser/expat/elements.txx new file mode 100644 index 0000000..08ecf21 --- /dev/null +++ b/xsd/libxsd/xsd/cxx/parser/expat/elements.txx @@ -0,0 +1,822 @@ +// file : xsd/cxx/parser/expat/elements.txx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <new> // std::bad_alloc +#include <istream> +#include <fstream> +#include <cstring> // std::strchr +#include <cassert> + +#include <xsd/cxx/xml/bits/literals.hxx> // xml::bits::{xml_prefix, etc} + +namespace xsd +{ + namespace cxx + { + namespace parser + { + namespace expat + { + + // document + // + + template <typename C> + document<C>:: + document (parser_base<C>& p, + const std::basic_string<C>& name, + bool polymorphic) + : cxx::parser::document<C> (p, std::basic_string<C> (), name), + xml_parser_ (0), + eh_ (0), + polymorphic_ (polymorphic) + { + } + + template <typename C> + document<C>:: + document (parser_base<C>& p, + const C* name, + bool polymorphic) + : cxx::parser::document<C> (p, std::basic_string<C> (), name), + xml_parser_ (0), + eh_ (0), + polymorphic_ (polymorphic) + { + } + + template <typename C> + document<C>:: + document (parser_base<C>& p, + const C* ns, + const C* name, + bool polymorphic) + : cxx::parser::document<C> (p, ns, name), + xml_parser_ (0), + eh_ (0), + polymorphic_ (polymorphic) + { + } + + template <typename C> + document<C>:: + document (parser_base<C>& p, + const std::basic_string<C>& ns, + const std::basic_string<C>& name, + bool polymorphic) + : cxx::parser::document<C> (p, ns, name), + xml_parser_ (0), + eh_ (0), + polymorphic_ (polymorphic) + { + } + + template <typename C> + document<C>:: + document (bool polymorphic) + : xml_parser_ (0), + eh_ (0), + polymorphic_ (polymorphic) + { + } + + // file + // + + template <typename C> + void document<C>:: + parse (const std::basic_string<C>& file) + { + std::ifstream ifs; + ifs.exceptions (std::ios_base::badbit | std::ios_base::failbit); + ifs.open (file.c_str (), std::ios_base::in | std::ios_base::binary); + + parse (ifs, file); + } + + template <typename C> + void document<C>:: + parse (const std::basic_string<C>& file, xml::error_handler<C>& eh) + { + std::ifstream ifs; + ifs.exceptions (std::ios_base::badbit | std::ios_base::failbit); + ifs.open (file.c_str (), std::ios_base::in | std::ios_base::binary); + + parse (ifs, file, eh); + } + + + // istream + // + + template <typename C> + void document<C>:: + parse (std::istream& is) + { + parse (is, 0, 0, default_eh_); + } + + template <typename C> + void document<C>:: + parse (std::istream& is, xml::error_handler<C>& eh) + { + if (!parse (is, 0, 0, eh)) + throw parsing<C> (); + } + + template <typename C> + void document<C>:: + parse (std::istream& is, const std::basic_string<C>& system_id) + { + default_eh_.reset (); + parse (is, &system_id, 0, default_eh_); + } + + template <typename C> + void document<C>:: + parse (std::istream& is, + const std::basic_string<C>& system_id, + xml::error_handler<C>& eh) + { + if (!parse (is, &system_id, 0, eh)) + throw parsing<C> (); + } + + template <typename C> + void document<C>:: + parse (std::istream& is, + const std::basic_string<C>& system_id, + const std::basic_string<C>& public_id) + { + default_eh_.reset (); + parse (is, &system_id, &public_id, default_eh_); + } + + template <typename C> + void document<C>:: + parse (std::istream& is, + const std::basic_string<C>& system_id, + const std::basic_string<C>& public_id, + xml::error_handler<C>& eh) + { + if (!parse (is, &system_id, &public_id, eh)) + throw parsing<C> (); + } + + // data + // + + template <typename C> + void document<C>:: + parse (const void* data, std::size_t size, bool last) + { + default_eh_.reset (); + parse (data, size, last, 0, 0, default_eh_); + } + + template <typename C> + void document<C>:: + parse (const void* data, std::size_t size, bool last, + xml::error_handler<C>& eh) + { + if (!parse (data, size, last, 0, 0, eh)) + throw parsing<C> (); + } + + template <typename C> + void document<C>:: + parse (const void* data, std::size_t size, bool last, + const std::basic_string<C>& system_id) + { + default_eh_.reset (); + parse (data, size, last, &system_id, 0, default_eh_); + } + + template <typename C> + void document<C>:: + parse (const void* data, std::size_t size, bool last, + const std::basic_string<C>& system_id, + xml::error_handler<C>& eh) + { + if (!parse (data, size, last, &system_id, 0, eh)) + throw parsing<C> (); + } + + template <typename C> + void document<C>:: + parse (const void* data, std::size_t size, bool last, + const std::basic_string<C>& system_id, + const std::basic_string<C>& public_id) + { + default_eh_.reset (); + parse (data, size, last, &system_id, &public_id, default_eh_); + } + + template <typename C> + void document<C>:: + parse (const void* data, std::size_t size, bool last, + const std::basic_string<C>& system_id, + const std::basic_string<C>& public_id, + xml::error_handler<C>& eh) + { + if (!parse (data, size, last, &system_id, &public_id, eh)) + throw parsing<C> (); + } + + // Implementation details. + // + + namespace bits + { + struct stream_exception_controller + { + ~stream_exception_controller () + { + std::ios_base::iostate s = is_.rdstate (); + s &= ~std::ios_base::failbit; + + // If our error state (sans failbit) intersects with the + // exception state then that means we have an active + // exception and changing error/exception state will + // cause another to be thrown. + // + if (!(old_state_ & s)) + { + // Clear failbit if it was caused by eof. + // + if (is_.fail () && is_.eof ()) + is_.clear (s); + + is_.exceptions (old_state_); + } + } + + stream_exception_controller (std::istream& is) + : is_ (is), old_state_ (is_.exceptions ()) + { + is_.exceptions (old_state_ & ~std::ios_base::failbit); + } + + private: + stream_exception_controller (const stream_exception_controller&); + + stream_exception_controller& + operator= (const stream_exception_controller&); + + private: + std::istream& is_; + std::ios_base::iostate old_state_; + }; + }; + + template <typename C> + bool document<C>:: + parse (std::istream& is, + const std::basic_string<C>* system_id, + const std::basic_string<C>* public_id, + xml::error_handler<C>& eh) + { + parser_auto_ptr parser (XML_ParserCreateNS (0, XML_Char (' '))); + + if (parser == 0) + throw std::bad_alloc (); + + if (system_id || public_id) + parse_begin (parser, system_id ? *system_id : *public_id, eh); + else + parse_begin (parser, eh); + + // Temporarily unset the exception failbit. Also clear the + // fail bit when we reset the old state if it was caused + // by eof. + // + bits::stream_exception_controller sec (is); + + char buf[16384]; // 4 x page size. + + bool r (true); + + do + { + is.read (buf, sizeof (buf)); + + if (is.bad () || (is.fail () && !is.eof ())) + { + // If the stream is not using exceptions then the user + // will have to test for stream failures before calling + // post. + // + break; + } + + if (XML_Parse ( + parser, buf, is.gcount (), is.eof ()) == XML_STATUS_ERROR) + { + r = false; + break; + } + } while (!is.eof ()); + + parse_end (); + return r; + } + + template <typename C> + bool document<C>:: + parse (const void* data, + std::size_t size, + bool last, + const std::basic_string<C>* system_id, + const std::basic_string<C>* public_id, + xml::error_handler<C>& eh) + { + // First call. + // + if (auto_xml_parser_ == 0) + { + auto_xml_parser_ = XML_ParserCreateNS (0, XML_Char (' ')); + + if (auto_xml_parser_ == 0) + throw std::bad_alloc (); + + if (system_id || public_id) + parse_begin (auto_xml_parser_, + system_id ? *system_id : *public_id, eh); + else + parse_begin (auto_xml_parser_, eh); + } + + bool r (XML_Parse (xml_parser_, + static_cast<const char*> (data), + static_cast<int> (size), + last) != XML_STATUS_ERROR); + parse_end (); + return r; + } + + // XML_Parser + // + + template <typename C> + void document<C>:: + parse_begin (XML_Parser parser) + { + xml_parser_ = parser; + eh_ = &default_eh_; + public_id_.clear (); + set (); + } + + template <typename C> + void document<C>:: + parse_begin (XML_Parser parser, + const std::basic_string<C>& public_id) + { + xml_parser_ = parser; + eh_ = &default_eh_; + public_id_ = public_id; + set (); + } + + template <typename C> + void document<C>:: + parse_begin (XML_Parser parser, xml::error_handler<C>& eh) + { + xml_parser_ = parser; + eh_ = &eh; + public_id_.clear (); + set (); + } + + template <typename C> + void document<C>:: + parse_begin (XML_Parser parser, + const std::basic_string<C>& public_id, + xml::error_handler<C>& eh) + { + xml_parser_ = parser; + eh_ = &eh; + public_id_ = public_id; + set (); + } + + template <typename C> + void document<C>:: + parse_end () + { + XML_Error e (XML_GetErrorCode (xml_parser_)); + + if (e == XML_ERROR_NONE || e == XML_ERROR_ABORTED) + { + clear (); + xml_parser_ = 0; + auto_xml_parser_ = 0; + } + else + { + unsigned long l = XML_GetCurrentLineNumber (xml_parser_); + unsigned long c = XML_GetCurrentColumnNumber (xml_parser_); + std::basic_string<C> message (XML_ErrorString (e)); + + eh_->handle (public_id_, + l, c, + xml::error_handler<C>::severity::fatal, + message); + + clear (); + xml_parser_ = 0; + auto_xml_parser_ = 0; + + // We don't want to throw an empty parsing exception here + // since the user probably already knows about the error. + } + + if (eh_ == &default_eh_) + default_eh_.throw_if_failed (); + } + + // + // + template <typename C> + void document<C>:: + set () + { + assert (xml_parser_ != 0); + + XML_SetUserData(xml_parser_, this); + + XML_SetStartElementHandler (xml_parser_, start_element_thunk_); + XML_SetEndElementHandler (xml_parser_, end_element_thunk_); + XML_SetCharacterDataHandler (xml_parser_, characters_thunk_); + + if (polymorphic_) + { + XML_SetNamespaceDeclHandler (xml_parser_, + start_namespace_decl_thunk_, + end_namespace_decl_thunk_); + } + } + + template <typename C> + void document<C>:: + clear () + { + assert (xml_parser_ != 0); + + XML_SetUserData (xml_parser_, 0); + XML_SetStartElementHandler (xml_parser_, 0); + XML_SetEndElementHandler (xml_parser_, 0); + XML_SetCharacterDataHandler (xml_parser_, 0); + + if (polymorphic_) + XML_SetNamespaceDeclHandler (xml_parser_, 0, 0); + } + + template <typename C> + void document<C>:: + translate_schema_exception (const schema_exception<C>& e) + { + unsigned long l = XML_GetCurrentLineNumber (xml_parser_); + unsigned long c = XML_GetCurrentColumnNumber (xml_parser_); + + eh_->handle (public_id_, + l, c, + xml::error_handler<C>::severity::fatal, + e.message ()); + + XML_StopParser (xml_parser_, false); + } + + // Event routing. + // + + // Expat thunks. + // + template <typename C> + void XMLCALL document<C>:: + start_element_thunk_ (void* data, + const XML_Char* ns_name, + const XML_Char** atts) + { + document& d (*reinterpret_cast<document*> (data)); + d.start_element_ (ns_name, atts); + } + + template <typename C> + void XMLCALL document<C>:: + end_element_thunk_ (void* data, const XML_Char* ns_name) + { + document& d (*reinterpret_cast<document*> (data)); + d.end_element_ (ns_name); + } + + template <typename C> + void XMLCALL document<C>:: + characters_thunk_ (void* data, const XML_Char* s, int n) + { + document& d (*reinterpret_cast<document*> (data)); + d.characters_ (s, static_cast<std::size_t> (n)); + } + + template <typename C> + void XMLCALL document<C>:: + start_namespace_decl_thunk_ (void* data, + const XML_Char* prefix, + const XML_Char* ns) + { + document& d (*reinterpret_cast<document*> (data)); + d.start_namespace_decl_ (prefix, ns); + } + + template <typename C> + void XMLCALL document<C>:: + end_namespace_decl_thunk_ (void* data, const XML_Char* prefix) + { + document& d (*reinterpret_cast<document*> (data)); + d.end_namespace_decl_ (prefix); + } + + namespace bits + { + inline void + split_name (const XML_Char* s, + const char*& ns, std::size_t& ns_s, + const char*& name, std::size_t& name_s) + { + const char* p (std::strchr (s, ' ')); + + if (p) + { + ns = s; + ns_s = p - s; + name = p + 1; + } + else + { + ns = s; + ns_s = 0; + name = s; + } + + name_s = std::char_traits<char>::length (name); + } + } + + template <typename C> + void document<C>:: + start_element_ (const XML_Char* ns_name, const XML_Char** atts) + { + // Current Expat (2.0.0) has a (mis)-feature of a possibility of + // calling callbacks even after the non-resumable XML_StopParser + // call. The following code accounts for this. + // + { + XML_ParsingStatus s; + XML_GetParsingStatus (xml_parser_, &s); + if (s.parsing == XML_FINISHED) + return; + } + + typedef std::basic_string<C> string; + + const char* ns_p; + const char* name_p; + size_t ns_s, name_s; + + bits::split_name (ns_name, ns_p, ns_s, name_p, name_s); + + { + const ro_string<C> ns (ns_p, ns_s), name (name_p, name_s); + + if (!polymorphic_) + { + try + { + this->start_element (ns, name, 0); + } + catch (const schema_exception<C>& e) + { + translate_schema_exception (e); + return; + } + } + else + { + // Search for the xsi:type attribute. + // + const XML_Char** p = atts; // VC8 can't handle p (atts) + for (; *p != 0; p += 2) + { + bits::split_name (*p, ns_p, ns_s, name_p, name_s); + const ro_string<C> ns (ns_p, ns_s), name (name_p, name_s); + + if (name == xml::bits::type<C> () && + ns == xml::bits::xsi_namespace<C> ()) + break; + } + + if (*p == 0) + { + try + { + this->start_element (ns, name, 0); + } + catch (const schema_exception<C>& e) + { + translate_schema_exception (e); + return; + } + } + else + { + // @@ Need proper QName validation. + // + // Get the qualified type name and try to resolve it. + // + ro_string<C> qn (*(p + 1)); + + ro_string<C> tp, tn; + typename ro_string<C>::size_type pos (qn.find (C (':'))); + + try + { + if (pos != ro_string<C>::npos) + { + tp.assign (qn.data (), pos); + tn.assign (qn.data () + pos + 1); + + if (tp.empty ()) + throw dynamic_type<C> (qn); + } + else + tn.assign (qn.data (), qn.size ()); + + if (tn.empty ()) + throw dynamic_type<C> (qn); + + // Search our namespace declaration stack. Note that + // we need to do this even if prefix is empty. Sun CC + // 5.7 blows if we use const_reverse_iterator. + // + ro_string<C> tns; + for (typename ns_decls::reverse_iterator + it (ns_decls_.rbegin ()), e (ns_decls_.rend ()); + it != e; ++it) + { + if (it->prefix == tp) + { + tns.assign (it->ns); + break; + } + } + + if (!tp.empty () && tns.empty ()) + { + // The 'xml' prefix requires special handling. + // + if (tp == xml::bits::xml_prefix<C> ()) + tns.assign (xml::bits::xml_namespace<C> ()); + else + throw dynamic_type<C> (qn); + } + + // Construct the compound type id. + // + string id (tn.data (), tn.size ()); + + if (!tns.empty ()) + { + id += C (' '); + id.append (tns.data (), tns.size ()); + } + + ro_string<C> ro_id (id); + this->start_element (ns, name, &ro_id); + } + catch (const schema_exception<C>& e) + { + translate_schema_exception (e); + return; + } + } + } + } + + for (; *atts != 0; atts += 2) + { + bits::split_name (*atts, ns_p, ns_s, name_p, name_s); + + const ro_string<C> ns (ns_p, ns_s), name (name_p, name_s); + const ro_string<C> value (*(atts + 1)); + + try + { + this->attribute (ns, name, value); + } + catch (const schema_exception<C>& e) + { + translate_schema_exception (e); + break; + } + } + } + + template <typename C> + void document<C>:: + end_element_ (const XML_Char* ns_name) + { + // Current Expat (2.0.0) has a (mis)-feature of a possibility of + // calling callbacks even after the non-resumable XML_StopParser + // call. The following code accounts for this. + // + { + XML_ParsingStatus s; + XML_GetParsingStatus (xml_parser_, &s); + if (s.parsing == XML_FINISHED) + return; + } + + const char* ns_p; + const char* name_p; + size_t ns_s, name_s; + + bits::split_name (ns_name, ns_p, ns_s, name_p, name_s); + + const ro_string<C> ns (ns_p, ns_s), name (name_p, name_s); + + try + { + this->end_element (ns, name); + } + catch (const schema_exception<C>& e) + { + translate_schema_exception (e); + } + } + + template <typename C> + void document<C>:: + characters_ (const XML_Char* s, std::size_t n) + { + // Current Expat (2.0.0) has a (mis)-feature of a possibility of + // calling callbacks even after the non-resumable XML_StopParser + // call. The following code accounts for this. + // + { + XML_ParsingStatus s; + XML_GetParsingStatus (xml_parser_, &s); + if (s.parsing == XML_FINISHED) + return; + } + + if (n != 0) + { + const ro_string<C> str (s, n); + + try + { + this->characters (str); + } + catch (const schema_exception<C>& e) + { + translate_schema_exception (e); + } + } + } + + template <typename C> + void document<C>:: + start_namespace_decl_ (const XML_Char* p, const XML_Char* ns) + { + // prefix is 0 for default namespace + // namespace is 0 when unsetting default namespace + // + if (polymorphic_) + ns_decls_.push_back (ns_decl ((p ? p : ""), (ns ? ns : ""))); + } + + template <typename C> + void document<C>:: + end_namespace_decl_ (const XML_Char* p) + { + // prefix is 0 for default namespace + // + if (polymorphic_) + { + // Here we assume the prefixes are removed in the reverse + // order of them being added. This appears to how every + // sensible implementation works. + // + assert (p + ? ns_decls_.back ().prefix == p + : ns_decls_.back ().prefix.empty ()); + + ns_decls_.pop_back (); + } + } + } + } + } +} diff --git a/xsd/libxsd/xsd/cxx/parser/map.hxx b/xsd/libxsd/xsd/cxx/parser/map.hxx new file mode 100644 index 0000000..663b178 --- /dev/null +++ b/xsd/libxsd/xsd/cxx/parser/map.hxx @@ -0,0 +1,79 @@ +// file : xsd/cxx/parser/map.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_CXX_PARSER_MAP_HXX +#define XSD_CXX_PARSER_MAP_HXX + +#include <map> +#include <string> + +#include <xsd/cxx/ro-string.hxx> +#include <xsd/cxx/parser/elements.hxx> + +namespace xsd +{ + namespace cxx + { + namespace parser + { + // Parser map. Used in the polymorphic document parsing. + // + template <typename C> + struct parser_map + { + virtual + ~parser_map (); + + // The type argument is the type name and namespace from the + // xsi:type attribute or substitution group map in the form + // "<name> <namespace>" with the space and namespace part + // absent if the type does not have a namespace. + // + virtual parser_base<C>* + find (const ro_string<C>& type) const = 0; + }; + + + // Parser map implementation. + // + template <typename C> + struct parser_map_impl: parser_map<C> + { + parser_map_impl (); + + void + insert (parser_base<C>&); + + virtual parser_base<C>* + find (const ro_string<C>& type) const; + + private: + parser_map_impl (const parser_map_impl&); + + parser_map_impl& + operator= (const parser_map_impl&); + + private: + struct string_comparison + { + bool + operator() (const C* x, const C* y) const + { + ro_string<C> s (x); + return s.compare (y) < 0; + } + }; + + typedef std::map<const C*, parser_base<C>*, string_comparison> map; + map map_; + }; + } + } +} + +#include <xsd/cxx/parser/map.ixx> +#include <xsd/cxx/parser/map.txx> + +#endif // XSD_CXX_PARSER_MAP_HXX diff --git a/xsd/libxsd/xsd/cxx/parser/map.ixx b/xsd/libxsd/xsd/cxx/parser/map.ixx new file mode 100644 index 0000000..0b70680 --- /dev/null +++ b/xsd/libxsd/xsd/cxx/parser/map.ixx @@ -0,0 +1,27 @@ +// file : xsd/cxx/parser/map.ixx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +namespace xsd +{ + namespace cxx + { + namespace parser + { + // parser_map_impl + // + template <typename C> + inline parser_map_impl<C>::parser_map_impl () + { + } + + template <typename C> + inline void parser_map_impl<C>:: + insert (parser_base<C>& parser) + { + map_[parser._dynamic_type ()] = &parser; + } + } + } +} diff --git a/xsd/libxsd/xsd/cxx/parser/map.txx b/xsd/libxsd/xsd/cxx/parser/map.txx new file mode 100644 index 0000000..aa7099d --- /dev/null +++ b/xsd/libxsd/xsd/cxx/parser/map.txx @@ -0,0 +1,31 @@ +// file : xsd/cxx/parser/map.txx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +namespace xsd +{ + namespace cxx + { + namespace parser + { + // parser_map + // + template <typename C> + parser_map<C>:: + ~parser_map () + { + } + + // parser_map_impl + // + template <typename C> + parser_base<C>* parser_map_impl<C>:: + find (const ro_string<C>& type) const + { + typename map::const_iterator i (map_.find (type.data ())); + return i != map_.end () ? i->second : 0; + } + } + } +} diff --git a/xsd/libxsd/xsd/cxx/parser/non-validating/parser.hxx b/xsd/libxsd/xsd/cxx/parser/non-validating/parser.hxx new file mode 100644 index 0000000..9eda6f4 --- /dev/null +++ b/xsd/libxsd/xsd/cxx/parser/non-validating/parser.hxx @@ -0,0 +1,248 @@ +// file : xsd/cxx/parser/non-validating/parser.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_CXX_PARSER_NON_VALIDATING_PARSER_HXX +#define XSD_CXX_PARSER_NON_VALIDATING_PARSER_HXX + +#include <stack> +#include <string> +#include <cstddef> // std::size_t + +#include <xsd/cxx/ro-string.hxx> +#include <xsd/cxx/parser/elements.hxx> + +namespace xsd +{ + namespace cxx + { + namespace parser + { + namespace non_validating + { + // + // + template <typename C> + struct empty_content: parser_base<C> + { + // The _*_any_* functions are called when wildcard content + // is encountered. Use them to handle mixed content models, + // any/anyAttribute, and anyType/anySimpleType. By default + // these functions do nothing. + // + + // The type argument is a type name and namespace from the + // xsi:type attribute in the form "<name> <namespace>" with + // the space and namespace part absent if the type does not + // have a namespace or 0 if xsi:type is not present. + // + virtual void + _start_any_element (const ro_string<C>& ns, + const ro_string<C>& name, + const ro_string<C>* type); + + virtual void + _end_any_element (const ro_string<C>& ns, + const ro_string<C>& name); + + virtual void + _any_attribute (const ro_string<C>& ns, + const ro_string<C>& name, + const ro_string<C>& value); + + virtual void + _any_characters (const ro_string<C>&); + + + // + // + virtual bool + _start_element_impl (const ro_string<C>&, + const ro_string<C>&, + const ro_string<C>*); + + virtual bool + _end_element_impl (const ro_string<C>&, + const ro_string<C>&); + + virtual bool + _attribute_impl (const ro_string<C>&, + const ro_string<C>&, + const ro_string<C>&); + + virtual bool + _characters_impl (const ro_string<C>&); + + + // + // + virtual void + _start_element (const ro_string<C>& ns, + const ro_string<C>& name, + const ro_string<C>* type); + + virtual void + _end_element (const ro_string<C>& ns, + const ro_string<C>& name); + + virtual void + _attribute (const ro_string<C>& ns, + const ro_string<C>& name, + const ro_string<C>& value); + + virtual void + _characters (const ro_string<C>& s); + }; + + + // + // + template <typename C> + struct simple_content: empty_content<C> + { + // + // + virtual void + _attribute (const ro_string<C>& ns, + const ro_string<C>& name, + const ro_string<C>& value); + + virtual void + _characters (const ro_string<C>&); + }; + + + // + // + template <typename C> + struct complex_content: empty_content<C> + { + // + // + virtual void + _start_element (const ro_string<C>& ns, + const ro_string<C>& name, + const ro_string<C>* type); + + virtual void + _end_element (const ro_string<C>& ns, + const ro_string<C>& name); + + virtual void + _attribute (const ro_string<C>& ns, + const ro_string<C>& name, + const ro_string<C>& value); + + virtual void + _characters (const ro_string<C>&); + + + // + // + virtual void + _pre_impl (); + + virtual void + _post_impl (); + + protected: + struct state + { + state () + : any_ (false), depth_ (0), parser_ (0) + { + } + + bool any_; + std::size_t depth_; + parser_base<C>* parser_; + }; + + // Optimized state stack for non-recursive case (one element). + // + struct state_stack + { + state_stack () + : size_ (0) + { + } + + void + push (const state& s) + { + if (size_ > 0) + rest_.push (top_); + + top_ = s; + ++size_; + } + + void + pop () + { + if (size_ > 1) + { + top_ = rest_.top (); + rest_.pop (); + } + + --size_; + } + + const state& + top () const + { + return top_; + } + + state& + top () + { + return top_; + } + + state& + under_top () + { + return rest_.top (); + } + + private: + state top_; + std::stack<state> rest_; + std::size_t size_; + }; + + state_stack context_; + }; + + + // Base for xsd:list. + // + template <typename C> + struct list_base: simple_content<C> + { + virtual void + _xsd_parse_item (const ro_string<C>&) = 0; + + virtual void + _pre_impl (); + + virtual void + _characters (const ro_string<C>&); + + virtual void + _post_impl (); + + protected: + std::basic_string<C> buf_; + }; + } + } + } +} + +#include <xsd/cxx/parser/non-validating/parser.txx> + +#endif // XSD_CXX_PARSER_NON_VALIDATING_PARSER_HXX diff --git a/xsd/libxsd/xsd/cxx/parser/non-validating/parser.txx b/xsd/libxsd/xsd/cxx/parser/non-validating/parser.txx new file mode 100644 index 0000000..c95b92e --- /dev/null +++ b/xsd/libxsd/xsd/cxx/parser/non-validating/parser.txx @@ -0,0 +1,464 @@ +// file : xsd/cxx/parser/non-validating/parser.txx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <cassert> + +#include <xsd/cxx/xml/bits/literals.hxx> + +namespace xsd +{ + namespace cxx + { + namespace parser + { + namespace non_validating + { + + // empty_content + // + + template <typename C> + void empty_content<C>:: + _start_any_element (const ro_string<C>&, + const ro_string<C>&, + const ro_string<C>*) + { + } + + template <typename C> + void empty_content<C>:: + _end_any_element (const ro_string<C>&, + const ro_string<C>&) + { + } + + template <typename C> + void empty_content<C>:: + _any_attribute (const ro_string<C>&, + const ro_string<C>&, + const ro_string<C>&) + { + } + + template <typename C> + void empty_content<C>:: + _any_characters (const ro_string<C>&) + { + } + + // + // + template <typename C> + bool empty_content<C>:: + _start_element_impl (const ro_string<C>&, + const ro_string<C>&, + const ro_string<C>*) + { + return false; + } + + template <typename C> + bool empty_content<C>:: + _end_element_impl (const ro_string<C>&, + const ro_string<C>&) + { + return false; + } + + template <typename C> + bool empty_content<C>:: + _attribute_impl (const ro_string<C>&, + const ro_string<C>&, + const ro_string<C>&) + { + return false; + } + + template <typename C> + bool empty_content<C>:: + _characters_impl (const ro_string<C>&) + { + return false; + } + + template <typename C> + void empty_content<C>:: + _start_element (const ro_string<C>& ns, + const ro_string<C>& name, + const ro_string<C>* type) + { + if (!_start_element_impl (ns, name, type)) + _start_any_element (ns, name, type); + } + + template <typename C> + void empty_content<C>:: + _end_element (const ro_string<C>& ns, + const ro_string<C>& name) + { + if (!_end_element_impl (ns, name)) + _end_any_element (ns, name); + } + + template <typename C> + void empty_content<C>:: + _attribute (const ro_string<C>& ns, + const ro_string<C>& name, + const ro_string<C>& value) + { + // Weed out special attributes: xsi:type, xsi:nil, + // xsi:schemaLocation and noNamespaceSchemaLocation. + // See section 3.2.7 in Structures for details. + // + if (ns == xml::bits::xsi_namespace<C> () && + (name == xml::bits::type<C> () || + name == xml::bits::nil_lit<C> () || + name == xml::bits::schema_location<C> () || + name == xml::bits::no_namespace_schema_location<C> ())) + return; + + // Also some parsers (notably Xerces-C++) supplies us with + // namespace-prefix mapping attributes. + // + if (ns == xml::bits::xmlns_namespace<C> ()) + return; + + if (!_attribute_impl (ns, name, value)) + _any_attribute (ns, name, value); + } + + template <typename C> + void empty_content<C>:: + _characters (const ro_string<C>& s) + { + if (!_characters_impl (s)) + _any_characters (s); + } + + + // simple_content + // + + template <typename C> + void simple_content<C>:: + _attribute (const ro_string<C>& ns, + const ro_string<C>& name, + const ro_string<C>& value) + { + // Weed out special attributes: xsi:type, xsi:nil, + // xsi:schemaLocation and xsi:noNamespaceSchemaLocation. + // See section 3.2.7 in Structures for details. + // + if (ns == xml::bits::xsi_namespace<C> () && + (name == xml::bits::type<C> () || + name == xml::bits::nil_lit<C> () || + name == xml::bits::schema_location<C> () || + name == xml::bits::no_namespace_schema_location<C> ())) + return; + + // Also some parsers (notably Xerces-C++) supplies us with + // namespace-prefix mapping attributes. + // + if (ns == xml::bits::xmlns_namespace<C> ()) + return; + + if (!this->_attribute_impl (ns, name, value)) + this->_any_attribute (ns, name, value); + } + + template <typename C> + void simple_content<C>:: + _characters (const ro_string<C>& str) + { + this->_characters_impl (str); + } + + + // complex_content + // + + template <typename C> + void complex_content<C>:: + _start_element (const ro_string<C>& ns, + const ro_string<C>& name, + const ro_string<C>* type) + { + state& s (context_.top ()); + + if (s.depth_++ > 0) + { + if (s.any_) + this->_start_any_element (ns, name, type); + else if (s.parser_) + s.parser_->_start_element (ns, name, type); + } + else + { + if (!this->_start_element_impl (ns, name, type)) + { + this->_start_any_element (ns, name, type); + s.any_ = true; + } + else if (s.parser_ != 0) + s.parser_->_pre_impl (); + } + } + + template <typename C> + void complex_content<C>:: + _end_element (const ro_string<C>& ns, + const ro_string<C>& name) + { + // To understand what's going on here it is helpful to think of + // a "total depth" as being the sum of individual depths over + // all elements. + // + + if (context_.top ().depth_ == 0) + { + state& s (context_.under_top ()); // One before last. + + if (--s.depth_ > 0) + { + // Indirect recursion. + // + if (s.parser_) + s.parser_->_end_element (ns, name); + } + else + { + // Direct recursion. + // + assert (this == s.parser_); + + this->_post_impl (); + + if (!this->_end_element_impl (ns, name)) + assert (false); + } + } + else + { + state& s (context_.top ()); + + if (--s.depth_ > 0) + { + if (s.any_) + this->_end_any_element (ns, name); + else if (s.parser_) + s.parser_->_end_element (ns, name); + } + else + { + if (s.parser_ != 0 && !s.any_) + s.parser_->_post_impl (); + + if (!this->_end_element_impl (ns, name)) + { + s.any_ = false; + this->_end_any_element (ns, name); + } + } + } + } + + template <typename C> + void complex_content<C>:: + _attribute (const ro_string<C>& ns, + const ro_string<C>& name, + const ro_string<C>& value) + { + // Weed out special attributes: xsi:type, xsi:nil, + // xsi:schemaLocation and xsi:noNamespaceSchemaLocation. + // See section 3.2.7 in Structures for details. + // + if (ns == xml::bits::xsi_namespace<C> () && + (name == xml::bits::type<C> () || + name == xml::bits::nil_lit<C> () || + name == xml::bits::schema_location<C> () || + name == xml::bits::no_namespace_schema_location<C> ())) + return; + + // Also some parsers (notably Xerces-C++) supplies us with + // namespace-prefix mapping attributes. + // + if (ns == xml::bits::xmlns_namespace<C> ()) + return; + + state& s (context_.top ()); + + if (s.depth_ > 0) + { + if (s.any_) + this->_any_attribute (ns, name, value); + else if (s.parser_) + s.parser_->_attribute (ns, name, value); + } + else + { + if (!this->_attribute_impl (ns, name, value)) + this->_any_attribute (ns, name, value); + } + } + + template <typename C> + void complex_content<C>:: + _characters (const ro_string<C>& str) + { + state& s (context_.top ()); + + if (s.depth_ > 0) + { + if (s.any_) + this->_any_characters (str); + else if (s.parser_) + s.parser_->_characters (str); + } + else + { + if (!this->_characters_impl (str)) + this->_any_characters (str); + } + } + + template <typename C> + void complex_content<C>:: + _pre_impl () + { + context_.push (state ()); + this->_pre (); + } + + template <typename C> + void complex_content<C>:: + _post_impl () + { + this->_post (); + context_.pop (); + } + + // list_base + // + namespace bits + { + // Find first non-space character. + // + template <typename C> + typename ro_string<C>::size_type + find_ns (const C* s, + typename ro_string<C>::size_type size, + typename ro_string<C>::size_type pos) + { + while (pos < size && + (s[pos] == C (0x20) || s[pos] == C (0x0A) || + s[pos] == C (0x0D) || s[pos] == C (0x09))) + ++pos; + + return pos < size ? pos : ro_string<C>::npos; + } + + // Find first space character. + // + template <typename C> + typename ro_string<C>::size_type + find_s (const C* s, + typename ro_string<C>::size_type size, + typename ro_string<C>::size_type pos) + { + while (pos < size && + s[pos] != C (0x20) && s[pos] != C (0x0A) && + s[pos] != C (0x0D) && s[pos] != C (0x09)) + ++pos; + + return pos < size ? pos : ro_string<C>::npos; + } + } + + // Relevant XML Schema Part 2: Datatypes sections: 4.2.1.2, 4.3.6. + // + + template <typename C> + void list_base<C>:: + _pre_impl () + { + simple_content<C>::_pre_impl (); + buf_.clear (); + } + + template <typename C> + void list_base<C>:: + _characters (const ro_string<C>& s) + { + typedef typename ro_string<C>::size_type size_type; + + const C* data (s.data ()); + size_type size (s.size ()); + + // Handle the previous chunk if we start with a ws. + // + if (!buf_.empty () && + (data[0] == C (0x20) || data[0] == C (0x0A) || + data[0] == C (0x0D) || data[0] == C (0x09))) + { + ro_string<C> tmp (buf_); // Private copy ctor. + _xsd_parse_item (tmp); + buf_.clear (); + } + + // Traverse the data while logically collapsing spaces. + // + for (size_type i (bits::find_ns (data, size, 0)); + i != ro_string<C>::npos;) + { + size_type j (bits::find_s (data, size, i)); + + if (j != ro_string<C>::npos) + { + if (buf_.empty ()) + { + ro_string<C> tmp (data + i, j - i); // Private copy ctor. + _xsd_parse_item (tmp); + } + else + { + // Assemble the first item in str from buf_ and s. + // + std::basic_string<C> str; + str.swap (buf_); + str.append (data + i, j - i); + ro_string<C> tmp (str); // Private copy ctor. + _xsd_parse_item (tmp); + } + + i = bits::find_ns (data, size, j); + } + else + { + // Last fragment, append it to the buf_. + // + buf_.append (data + i, size - i); + break; + } + } + } + + template <typename C> + void list_base<C>:: + _post_impl () + { + // Handle the last item. + // + if (!buf_.empty ()) + { + ro_string<C> tmp (buf_); // Private copy ctor. + _xsd_parse_item (tmp); + } + + simple_content<C>::_post_impl (); + } + } + } + } +} diff --git a/xsd/libxsd/xsd/cxx/parser/non-validating/xml-schema-pimpl.hxx b/xsd/libxsd/xsd/cxx/parser/non-validating/xml-schema-pimpl.hxx new file mode 100644 index 0000000..397386d --- /dev/null +++ b/xsd/libxsd/xsd/cxx/parser/non-validating/xml-schema-pimpl.hxx @@ -0,0 +1,791 @@ +// file : xsd/cxx/parser/non-validating/xml-schema-pimpl.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_CXX_PARSER_NON_VALIDATING_XML_SCHEMA_PIMPL_HXX +#define XSD_CXX_PARSER_NON_VALIDATING_XML_SCHEMA_PIMPL_HXX + +#include <string> + +#include <xsd/cxx/parser/non-validating/xml-schema-pskel.hxx> + +namespace xsd +{ + namespace cxx + { + namespace parser + { + namespace non_validating + { + // any_type + // + template <typename C> + struct any_type_pimpl: virtual any_type_pskel<C> + { + virtual void + post_any_type (); + }; + + // any_simple_type + // + template <typename C> + struct any_simple_type_pimpl: virtual any_simple_type_pskel<C> + { + virtual void + post_any_simple_type (); + }; + + // boolean + // + template <typename C> + struct boolean_pimpl: virtual boolean_pskel<C> + { + virtual void + _pre (); + + virtual void + _characters (const ro_string<C>&); + + virtual bool + post_boolean (); + + protected: + std::basic_string<C> str_; + }; + + + // 8-bit + // + template <typename C> + struct byte_pimpl: virtual byte_pskel<C> + { + virtual void + _pre (); + + virtual void + _characters (const ro_string<C>&); + + virtual signed char + post_byte (); + + protected: + std::basic_string<C> str_; + }; + + + template <typename C> + struct unsigned_byte_pimpl: virtual unsigned_byte_pskel<C> + { + virtual void + _pre (); + + virtual void + _characters (const ro_string<C>&); + + virtual unsigned char + post_unsigned_byte (); + + protected: + std::basic_string<C> str_; + }; + + + // 16-bit + // + template <typename C> + struct short_pimpl: virtual short_pskel<C> + { + virtual void + _pre (); + + virtual void + _characters (const ro_string<C>&); + + virtual short + post_short (); + + protected: + std::basic_string<C> str_; + }; + + + template <typename C> + struct unsigned_short_pimpl: virtual unsigned_short_pskel<C> + { + virtual void + _pre (); + + virtual void + _characters (const ro_string<C>&); + + virtual unsigned short + post_unsigned_short (); + + protected: + std::basic_string<C> str_; + }; + + + // 32-bit + // + template <typename C> + struct int_pimpl: virtual int_pskel<C> + { + virtual void + _pre (); + + virtual void + _characters (const ro_string<C>&); + + virtual int + post_int (); + + protected: + std::basic_string<C> str_; + }; + + + template <typename C> + struct unsigned_int_pimpl: virtual unsigned_int_pskel<C> + { + virtual void + _pre (); + + virtual void + _characters (const ro_string<C>&); + + virtual unsigned int + post_unsigned_int (); + + protected: + std::basic_string<C> str_; + }; + + + // 64-bit + // + template <typename C> + struct long_pimpl: virtual long_pskel<C> + { + virtual void + _pre (); + + virtual void + _characters (const ro_string<C>&); + + virtual long long + post_long (); + + protected: + std::basic_string<C> str_; + }; + + + template <typename C> + struct unsigned_long_pimpl: virtual unsigned_long_pskel<C> + { + virtual void + _pre (); + + virtual void + _characters (const ro_string<C>&); + + virtual unsigned long long + post_unsigned_long (); + + protected: + std::basic_string<C> str_; + }; + + + // Arbitrary-length integers. + // + template <typename C> + struct integer_pimpl: virtual integer_pskel<C> + { + virtual void + _pre (); + + virtual void + _characters (const ro_string<C>&); + + virtual long long + post_integer (); + + protected: + std::basic_string<C> str_; + }; + + template <typename C> + struct negative_integer_pimpl: virtual negative_integer_pskel<C> + { + virtual void + _pre (); + + virtual void + _characters (const ro_string<C>&); + + virtual long long + post_negative_integer (); + + protected: + std::basic_string<C> str_; + }; + + template <typename C> + struct non_positive_integer_pimpl: virtual non_positive_integer_pskel<C> + { + virtual void + _pre (); + + virtual void + _characters (const ro_string<C>&); + + virtual long long + post_non_positive_integer (); + + protected: + std::basic_string<C> str_; + }; + + template <typename C> + struct positive_integer_pimpl: virtual positive_integer_pskel<C> + { + virtual void + _pre (); + + virtual void + _characters (const ro_string<C>&); + + virtual unsigned long long + post_positive_integer (); + + protected: + std::basic_string<C> str_; + }; + + template <typename C> + struct non_negative_integer_pimpl: virtual non_negative_integer_pskel<C> + { + virtual void + _pre (); + + virtual void + _characters (const ro_string<C>&); + + virtual unsigned long long + post_non_negative_integer (); + + protected: + std::basic_string<C> str_; + }; + + + // Floats. + // + template <typename C> + struct float_pimpl: virtual float_pskel<C> + { + virtual void + _pre (); + + virtual void + _characters (const ro_string<C>&); + + virtual float + post_float (); + + protected: + std::basic_string<C> str_; + }; + + + template <typename C> + struct double_pimpl: virtual double_pskel<C> + { + virtual void + _pre (); + + virtual void + _characters (const ro_string<C>&); + + virtual double + post_double (); + + protected: + std::basic_string<C> str_; + }; + + + template <typename C> + struct decimal_pimpl: virtual decimal_pskel<C> + { + virtual void + _pre (); + + virtual void + _characters (const ro_string<C>&); + + virtual double + post_decimal (); + + protected: + std::basic_string<C> str_; + }; + + + // Strings. + // + template <typename C> + struct string_pimpl: virtual string_pskel<C> + { + virtual void + _pre (); + + virtual void + _characters (const ro_string<C>&); + + virtual std::basic_string<C> + post_string (); + + protected: + std::basic_string<C> str_; + }; + + template <typename C> + struct normalized_string_pimpl: virtual normalized_string_pskel<C> + { + virtual void + _pre (); + + virtual void + _characters (const ro_string<C>&); + + virtual std::basic_string<C> + post_normalized_string (); + + protected: + std::basic_string<C> str_; + }; + + template <typename C> + struct token_pimpl: virtual token_pskel<C> + { + virtual void + _pre (); + + virtual void + _characters (const ro_string<C>&); + + virtual std::basic_string<C> + post_token (); + + protected: + std::basic_string<C> str_; + }; + + template <typename C> + struct name_pimpl: virtual name_pskel<C> + { + virtual void + _pre (); + + virtual void + _characters (const ro_string<C>&); + + virtual std::basic_string<C> + post_name (); + + protected: + std::basic_string<C> str_; + }; + + template <typename C> + struct nmtoken_pimpl: virtual nmtoken_pskel<C> + { + virtual void + _pre (); + + virtual void + _characters (const ro_string<C>&); + + virtual std::basic_string<C> + post_nmtoken (); + + protected: + std::basic_string<C> str_; + }; + + template <typename C> + struct nmtokens_pimpl: virtual nmtokens_pskel<C> + { + virtual void + _pre (); + + virtual void + _xsd_parse_item (const ro_string<C>&); + + virtual string_sequence<C> + post_nmtokens (); + + protected: + string_sequence<C> seq_; + nmtoken_pimpl<C> parser_; + }; + + template <typename C> + struct ncname_pimpl: virtual ncname_pskel<C> + { + virtual void + _pre (); + + virtual void + _characters (const ro_string<C>&); + + virtual std::basic_string<C> + post_ncname (); + + protected: + std::basic_string<C> str_; + }; + + template <typename C> + struct id_pimpl: virtual id_pskel<C> + { + virtual void + _pre (); + + virtual void + _characters (const ro_string<C>&); + + virtual std::basic_string<C> + post_id (); + + protected: + std::basic_string<C> str_; + }; + + template <typename C> + struct idref_pimpl: virtual idref_pskel<C> + { + virtual void + _pre (); + + virtual void + _characters (const ro_string<C>&); + + virtual std::basic_string<C> + post_idref (); + + protected: + std::basic_string<C> str_; + }; + + template <typename C> + struct idrefs_pimpl: virtual idrefs_pskel<C> + { + virtual void + _pre (); + + virtual void + _xsd_parse_item (const ro_string<C>&); + + virtual string_sequence<C> + post_idrefs (); + + protected: + string_sequence<C> seq_; + idref_pimpl<C> parser_; + }; + + // language + // + template <typename C> + struct language_pimpl: virtual language_pskel<C> + { + virtual void + _pre (); + + virtual void + _characters (const ro_string<C>&); + + virtual std::basic_string<C> + post_language (); + + protected: + std::basic_string<C> str_; + }; + + // anyURI + // + template <typename C> + struct uri_pimpl: virtual uri_pskel<C> + { + virtual void + _pre (); + + virtual void + _characters (const ro_string<C>&); + + virtual std::basic_string<C> + post_uri (); + + protected: + std::basic_string<C> str_; + }; + + // QName + // + template <typename C> + struct qname_pimpl: virtual qname_pskel<C> + { + virtual void + _pre (); + + virtual void + _characters (const ro_string<C>&); + + virtual qname<C> + post_qname (); + + protected: + std::basic_string<C> str_; + }; + + // base64Binary + // + template <typename C> + struct base64_binary_pimpl: virtual base64_binary_pskel<C> + { + virtual void + _pre (); + + virtual void + _characters (const ro_string<C>&); + + virtual std::auto_ptr<buffer> + post_base64_binary (); + + protected: + std::basic_string<C> str_; + }; + + // hexBinary + // + template <typename C> + struct hex_binary_pimpl: virtual hex_binary_pskel<C> + { + virtual void + _pre (); + + virtual void + _characters (const ro_string<C>&); + + virtual std::auto_ptr<buffer> + post_hex_binary (); + + protected: + std::basic_string<C> str_; + }; + + // gday + // + template <typename C> + struct gday_pimpl: virtual gday_pskel<C> + { + virtual void + _pre (); + + virtual void + _characters (const ro_string<C>&); + + virtual gday + post_gday (); + + protected: + std::basic_string<C> str_; + }; + + // gmonth + // + template <typename C> + struct gmonth_pimpl: virtual gmonth_pskel<C> + { + virtual void + _pre (); + + virtual void + _characters (const ro_string<C>&); + + virtual gmonth + post_gmonth (); + + protected: + std::basic_string<C> str_; + }; + + // gyear + // + template <typename C> + struct gyear_pimpl: virtual gyear_pskel<C> + { + virtual void + _pre (); + + virtual void + _characters (const ro_string<C>&); + + virtual gyear + post_gyear (); + + protected: + std::basic_string<C> str_; + }; + + // gmonth_day + // + template <typename C> + struct gmonth_day_pimpl: virtual gmonth_day_pskel<C> + { + virtual void + _pre (); + + virtual void + _characters (const ro_string<C>&); + + virtual gmonth_day + post_gmonth_day (); + + protected: + std::basic_string<C> str_; + }; + + // gyear_month + // + template <typename C> + struct gyear_month_pimpl: virtual gyear_month_pskel<C> + { + virtual void + _pre (); + + virtual void + _characters (const ro_string<C>&); + + virtual gyear_month + post_gyear_month (); + + protected: + std::basic_string<C> str_; + }; + + // date + // + template <typename C> + struct date_pimpl: virtual date_pskel<C> + { + virtual void + _pre (); + + virtual void + _characters (const ro_string<C>&); + + virtual date + post_date (); + + protected: + std::basic_string<C> str_; + }; + + // time + // + template <typename C> + struct time_pimpl: virtual time_pskel<C> + { + virtual void + _pre (); + + virtual void + _characters (const ro_string<C>&); + + virtual time + post_time (); + + protected: + std::basic_string<C> str_; + }; + + // date_time + // + template <typename C> + struct date_time_pimpl: virtual date_time_pskel<C> + { + virtual void + _pre (); + + virtual void + _characters (const ro_string<C>&); + + virtual date_time + post_date_time (); + + protected: + std::basic_string<C> str_; + }; + + // duration + // + template <typename C> + struct duration_pimpl: virtual duration_pskel<C> + { + virtual void + _pre (); + + virtual void + _characters (const ro_string<C>&); + + virtual duration + post_duration (); + + protected: + std::basic_string<C> str_; + }; + + // + // + namespace bits + { + // float literals: INF -INF NaN + // + template<typename C> + const C* + positive_inf (); + + template<typename C> + const C* + negative_inf (); + + template<typename C> + const C* + nan (); + + // boolean literals + // + template<typename C> + const C* + true_ (); + + template<typename C> + const C* + one (); + } + } + } + } +} + +#include <xsd/cxx/parser/non-validating/xml-schema-pimpl.txx> + +#endif // XSD_CXX_PARSER_NON_VALIDATING_XML_SCHEMA_PIMPL_HXX + +#include <xsd/cxx/parser/non-validating/xml-schema-pimpl.ixx> diff --git a/xsd/libxsd/xsd/cxx/parser/non-validating/xml-schema-pimpl.ixx b/xsd/libxsd/xsd/cxx/parser/non-validating/xml-schema-pimpl.ixx new file mode 100644 index 0000000..db9a5d1 --- /dev/null +++ b/xsd/libxsd/xsd/cxx/parser/non-validating/xml-schema-pimpl.ixx @@ -0,0 +1,129 @@ +// file : xsd/cxx/parser/non-validating/xml-schema-pimpl.ixx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#if defined(XSD_CXX_PARSER_USE_CHAR) || !defined(XSD_CXX_PARSER_USE_WCHAR) + +#ifndef XSD_CXX_PARSER_NON_VALIDATING_XML_SCHEMA_PIMPL_IXX_CHAR +#define XSD_CXX_PARSER_NON_VALIDATING_XML_SCHEMA_PIMPL_IXX_CHAR + +namespace xsd +{ + namespace cxx + { + namespace parser + { + namespace non_validating + { + namespace bits + { + // + // + template<> + inline const char* + positive_inf<char> () + { + return "INF"; + } + + template<> + inline const char* + negative_inf<char> () + { + return "-INF"; + } + + template<> + inline const char* + nan<char> () + { + return "NaN"; + } + + // + // + template<> + inline const char* + true_<char> () + { + return "true"; + } + + template<> + inline const char* + one<char> () + { + return "1"; + } + } + } + } + } +} + +#endif // XSD_CXX_PARSER_NON_VALIDATING_XML_SCHEMA_PIMPL_IXX_CHAR +#endif // XSD_CXX_PARSER_USE_CHAR + + +#if defined(XSD_CXX_PARSER_USE_WCHAR) || !defined(XSD_CXX_PARSER_USE_CHAR) + +#ifndef XSD_CXX_PARSER_NON_VALIDATING_XML_SCHEMA_PIMPL_IXX_WCHAR +#define XSD_CXX_PARSER_NON_VALIDATING_XML_SCHEMA_PIMPL_IXX_WCHAR + +namespace xsd +{ + namespace cxx + { + namespace parser + { + namespace non_validating + { + namespace bits + { + // + // + template<> + inline const wchar_t* + positive_inf<wchar_t> () + { + return L"INF"; + } + + template<> + inline const wchar_t* + negative_inf<wchar_t> () + { + return L"-INF"; + } + + template<> + inline const wchar_t* + nan<wchar_t> () + { + return L"NaN"; + } + + // + // + template<> + inline const wchar_t* + true_<wchar_t> () + { + return L"true"; + } + + template<> + inline const wchar_t* + one<wchar_t> () + { + return L"1"; + } + } + } + } + } +} + +#endif // XSD_CXX_PARSER_NON_VALIDATING_XML_SCHEMA_PIMPL_IXX_WCHAR +#endif // XSD_CXX_PARSER_USE_WCHAR diff --git a/xsd/libxsd/xsd/cxx/parser/non-validating/xml-schema-pimpl.txx b/xsd/libxsd/xsd/cxx/parser/non-validating/xml-schema-pimpl.txx new file mode 100644 index 0000000..c430f49 --- /dev/null +++ b/xsd/libxsd/xsd/cxx/parser/non-validating/xml-schema-pimpl.txx @@ -0,0 +1,2068 @@ +// file : xsd/cxx/parser/non-validating/xml-schema-pimpl.txx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <limits> +#include <locale> + +#include <xsd/cxx/zc-istream.hxx> + +namespace xsd +{ + namespace cxx + { + namespace parser + { + namespace non_validating + { + // Note that most of the types implemented here cannot have + // whitespaces in the value. As result we don't need to waste + // time collapsing whitespaces. All we need to do is trim the + // string representation which can be done without copying. + // + + // any_type + // + + template <typename C> + void any_type_pimpl<C>:: + post_any_type () + { + } + + // any_simple_type + // + + template <typename C> + void any_simple_type_pimpl<C>:: + post_any_simple_type () + { + } + + // boolean + // + template <typename C> + void boolean_pimpl<C>:: + _pre () + { + str_.clear (); + } + + template <typename C> + void boolean_pimpl<C>:: + _characters (const ro_string<C>& s) + { + str_ += s; + } + + template <typename C> + bool boolean_pimpl<C>:: + post_boolean () + { + std::basic_string<C> tmp; + tmp.swap (str_); + + ro_string<C> str (tmp); + trim (str); + + return str == bits::true_<C> () || str == bits::one<C> (); + } + + // byte + // + + template <typename C> + void byte_pimpl<C>:: + _pre () + { + str_.clear (); + } + + template <typename C> + void byte_pimpl<C>:: + _characters (const ro_string<C>& s) + { + str_ += s; + } + + template <typename C> + signed char byte_pimpl<C>:: + post_byte () + { + std::basic_string<C> tmp; + tmp.swap (str_); + + ro_string<C> str (tmp); + trim (str); + + short t; + zc_istream<C> is (str); + is >> t; + + return static_cast<signed char> (t); + } + + // unsigned_byte + // + + template <typename C> + void unsigned_byte_pimpl<C>:: + _pre () + { + str_.clear (); + } + + template <typename C> + void unsigned_byte_pimpl<C>:: + _characters (const ro_string<C>& s) + { + str_ += s; + } + + template <typename C> + unsigned char unsigned_byte_pimpl<C>:: + post_unsigned_byte () + { + std::basic_string<C> tmp; + tmp.swap (str_); + + ro_string<C> str (tmp); + trim (str); + + unsigned short t; + zc_istream<C> is (str); + is >> t; + + return static_cast<unsigned char> (t); + } + + // short + // + + template <typename C> + void short_pimpl<C>:: + _pre () + { + str_.clear (); + } + + template <typename C> + void short_pimpl<C>:: + _characters (const ro_string<C>& s) + { + str_ += s; + } + + template <typename C> + short short_pimpl<C>:: + post_short () + { + std::basic_string<C> tmp; + tmp.swap (str_); + + ro_string<C> str (tmp); + trim (str); + + short t; + zc_istream<C> is (str); + is >> t; + + return t; + } + + // unsigned_short + // + + template <typename C> + void unsigned_short_pimpl<C>:: + _pre () + { + str_.clear (); + } + + template <typename C> + void unsigned_short_pimpl<C>:: + _characters (const ro_string<C>& s) + { + str_ += s; + } + + template <typename C> + unsigned short unsigned_short_pimpl<C>:: + post_unsigned_short () + { + std::basic_string<C> tmp; + tmp.swap (str_); + + ro_string<C> str (tmp); + trim (str); + + unsigned short t; + zc_istream<C> is (str); + is >> t; + + return t; + } + + // int + // + + template <typename C> + void int_pimpl<C>:: + _pre () + { + str_.clear (); + } + + template <typename C> + void int_pimpl<C>:: + _characters (const ro_string<C>& s) + { + str_ += s; + } + + template <typename C> + int int_pimpl<C>:: + post_int () + { + std::basic_string<C> tmp; + tmp.swap (str_); + + ro_string<C> str (tmp); + trim (str); + + int t; + zc_istream<C> is (str); + is >> t; + + return t; + } + + // unsigned_int + // + + template <typename C> + void unsigned_int_pimpl<C>:: + _pre () + { + str_.clear (); + } + + template <typename C> + void unsigned_int_pimpl<C>:: + _characters (const ro_string<C>& s) + { + str_ += s; + } + + template <typename C> + unsigned int unsigned_int_pimpl<C>:: + post_unsigned_int () + { + std::basic_string<C> tmp; + tmp.swap (str_); + + ro_string<C> str (tmp); + trim (str); + + unsigned int t; + zc_istream<C> is (str); + is >> t; + + return t; + } + + // long + // + template <typename C> + void long_pimpl<C>:: + _pre () + { + str_.clear (); + } + + template <typename C> + void long_pimpl<C>:: + _characters (const ro_string<C>& s) + { + str_ += s; + } + + template <typename C> + long long long_pimpl<C>:: + post_long () + { + std::basic_string<C> tmp; + tmp.swap (str_); + + ro_string<C> str (tmp); + trim (str); + + long long t; + zc_istream<C> is (str); + is >> t; + + return t; + } + + // unsigned_long + // + template <typename C> + void unsigned_long_pimpl<C>:: + _pre () + { + str_.clear (); + } + + template <typename C> + void unsigned_long_pimpl<C>:: + _characters (const ro_string<C>& s) + { + str_ += s; + } + + template <typename C> + unsigned long long unsigned_long_pimpl<C>:: + post_unsigned_long () + { + std::basic_string<C> tmp; + tmp.swap (str_); + + ro_string<C> str (tmp); + trim (str); + + unsigned long long t; + zc_istream<C> is (str); + is >> t; + + return t; + } + + // integer + // + template <typename C> + void integer_pimpl<C>:: + _pre () + { + str_.clear (); + } + + template <typename C> + void integer_pimpl<C>:: + _characters (const ro_string<C>& s) + { + str_ += s; + } + + template <typename C> + long long integer_pimpl<C>:: + post_integer () + { + std::basic_string<C> tmp; + tmp.swap (str_); + + ro_string<C> str (tmp); + trim (str); + + long long t; + zc_istream<C> is (str); + is >> t; + + return t; + } + + // negative_integer + // + template <typename C> + void negative_integer_pimpl<C>:: + _pre () + { + str_.clear (); + } + + template <typename C> + void negative_integer_pimpl<C>:: + _characters (const ro_string<C>& s) + { + str_ += s; + } + + template <typename C> + long long negative_integer_pimpl<C>:: + post_negative_integer () + { + std::basic_string<C> tmp; + tmp.swap (str_); + + ro_string<C> str (tmp); + trim (str); + + long long t; + zc_istream<C> is (str); + is >> t; + + return t; + } + + // non_positive_integer + // + template <typename C> + void non_positive_integer_pimpl<C>:: + _pre () + { + str_.clear (); + } + + template <typename C> + void non_positive_integer_pimpl<C>:: + _characters (const ro_string<C>& s) + { + str_ += s; + } + + template <typename C> + long long non_positive_integer_pimpl<C>:: + post_non_positive_integer () + { + std::basic_string<C> tmp; + tmp.swap (str_); + + ro_string<C> str (tmp); + trim (str); + + long long t; + zc_istream<C> is (str); + is >> t; + + return t; + } + + // positive_integer + // + template <typename C> + void positive_integer_pimpl<C>:: + _pre () + { + str_.clear (); + } + + template <typename C> + void positive_integer_pimpl<C>:: + _characters (const ro_string<C>& s) + { + str_ += s; + } + + template <typename C> + unsigned long long positive_integer_pimpl<C>:: + post_positive_integer () + { + std::basic_string<C> tmp; + tmp.swap (str_); + + ro_string<C> str (tmp); + trim (str); + + unsigned long long t; + zc_istream<C> is (str); + is >> t; + + return t; + } + + // non_negative_integer + // + template <typename C> + void non_negative_integer_pimpl<C>:: + _pre () + { + str_.clear (); + } + + template <typename C> + void non_negative_integer_pimpl<C>:: + _characters (const ro_string<C>& s) + { + str_ += s; + } + + template <typename C> + unsigned long long non_negative_integer_pimpl<C>:: + post_non_negative_integer () + { + std::basic_string<C> tmp; + tmp.swap (str_); + + ro_string<C> str (tmp); + trim (str); + + unsigned long long t; + zc_istream<C> is (str); + is >> t; + + return t; + } + + // float + // + template <typename C> + void float_pimpl<C>:: + _pre () + { + str_.clear (); + } + + template <typename C> + void float_pimpl<C>:: + _characters (const ro_string<C>& s) + { + str_ += s; + } + + template <typename C> + float float_pimpl<C>:: + post_float () + { + std::basic_string<C> tmp; + tmp.swap (str_); + + ro_string<C> str (tmp); + trim (str); + + if (str == bits::positive_inf<C> ()) + return std::numeric_limits<float>::infinity (); + + if (str == bits::negative_inf<C> ()) + return -std::numeric_limits<float>::infinity (); + + if (str == bits::nan<C> ()) + return std::numeric_limits<float>::quiet_NaN (); + + float t; + zc_istream<C> is (str); + is.imbue (std::locale::classic ()); + is >> t; + + return t; + } + + // double + // + template <typename C> + void double_pimpl<C>:: + _pre () + { + str_.clear (); + } + + template <typename C> + void double_pimpl<C>:: + _characters (const ro_string<C>& s) + { + str_ += s; + } + + template <typename C> + double double_pimpl<C>:: + post_double () + { + std::basic_string<C> tmp; + tmp.swap (str_); + + ro_string<C> str (tmp); + trim (str); + + if (str == bits::positive_inf<C> ()) + return std::numeric_limits<double>::infinity (); + + if (str == bits::negative_inf<C> ()) + return -std::numeric_limits<double>::infinity (); + + if (str == bits::nan<C> ()) + return std::numeric_limits<double>::quiet_NaN (); + + double t; + zc_istream<C> is (str); + is.imbue (std::locale::classic ()); + is >> t; + + return t; + } + + // decimal + // + template <typename C> + void decimal_pimpl<C>:: + _pre () + { + str_.clear (); + } + + template <typename C> + void decimal_pimpl<C>:: + _characters (const ro_string<C>& s) + { + str_ += s; + } + + template <typename C> + double decimal_pimpl<C>:: + post_decimal () + { + std::basic_string<C> tmp; + tmp.swap (str_); + + ro_string<C> str (tmp); + trim (str); + + double t; + zc_istream<C> is (str); + is.imbue (std::locale::classic ()); + is >> t; + + return t; + } + + + // string + // + template <typename C> + void string_pimpl<C>:: + _pre () + { + str_.clear (); + } + + template <typename C> + void string_pimpl<C>:: + _characters (const ro_string<C>& s) + { + str_ += s; + } + + template <typename C> + std::basic_string<C> string_pimpl<C>:: + post_string () + { + std::basic_string<C> r; + r.swap (str_); + return r; + } + + // normalized_string + // + template <typename C> + void normalized_string_pimpl<C>:: + _pre () + { + str_.clear (); + } + + template <typename C> + void normalized_string_pimpl<C>:: + _characters (const ro_string<C>& s) + { + str_ += s; + } + + template <typename C> + std::basic_string<C> normalized_string_pimpl<C>:: + post_normalized_string () + { + typedef typename std::basic_string<C>::size_type size_type; + + size_type size (str_.size ()); + + for (size_type i (0); i < size; ++i) + { + C& c = str_[i]; + + if (c == C (0x0A) || c == C (0x0D) || c == C (0x09)) + c = C (0x20); + } + + std::basic_string<C> r; + r.swap (str_); + return r; + } + + // token + // + template <typename C> + void token_pimpl<C>:: + _pre () + { + str_.clear (); + } + + template <typename C> + void token_pimpl<C>:: + _characters (const ro_string<C>& s) + { + if (str_.size () == 0) + { + ro_string<C> tmp (s.data (), s.size ()); + + if (trim_left (tmp) != 0) + str_ += tmp; + } + else + str_ += s; + } + + template <typename C> + std::basic_string<C> token_pimpl<C>:: + post_token () + { + typedef typename std::basic_string<C>::size_type size_type; + + size_type size (str_.size ()); + size_type j (0); + + bool subs (false); + + for (size_type i (0); i < size; ++i) + { + C c = str_[i]; + + if (c == C (0x20) || c == C (0x0A) || + c == C (0x0D) || c == C (0x09)) + { + subs = true; + } + else + { + if (subs) + { + subs = false; + str_[j++] = C (0x20); + } + + str_[j++] = c; + } + } + + str_.resize (j); + + std::basic_string<C> r; + r.swap (str_); + return r; + } + + // name + // + template <typename C> + void name_pimpl<C>:: + _pre () + { + str_.clear (); + } + + template <typename C> + void name_pimpl<C>:: + _characters (const ro_string<C>& s) + { + if (str_.size () == 0) + { + ro_string<C> tmp (s.data (), s.size ()); + + if (trim_left (tmp) != 0) + str_ += tmp; + } + else + str_ += s; + } + + template <typename C> + std::basic_string<C> name_pimpl<C>:: + post_name () + { + ro_string<C> tmp (str_); + str_.resize (trim_right (tmp)); + + std::basic_string<C> r; + r.swap (str_); + return r; + } + + // nmtoken + // + template <typename C> + void nmtoken_pimpl<C>:: + _pre () + { + str_.clear (); + } + + template <typename C> + void nmtoken_pimpl<C>:: + _characters (const ro_string<C>& s) + { + if (str_.size () == 0) + { + ro_string<C> tmp (s.data (), s.size ()); + + if (trim_left (tmp) != 0) + str_ += tmp; + } + else + str_ += s; + } + + template <typename C> + std::basic_string<C> nmtoken_pimpl<C>:: + post_nmtoken () + { + ro_string<C> tmp (str_); + str_.resize (trim_right (tmp)); + + std::basic_string<C> r; + r.swap (str_); + return r; + } + + // nmtokens + // + template <typename C> + void nmtokens_pimpl<C>:: + _pre () + { + nmtokens_pskel<C>::_pre (); + seq_.clear (); + } + + template <typename C> + string_sequence<C> nmtokens_pimpl<C>:: + post_nmtokens () + { + string_sequence<C> r; + r.swap (seq_); + return r; + } + + template <typename C> + void nmtokens_pimpl<C>:: + _xsd_parse_item (const ro_string<C>& s) + { + parser_.pre (); + parser_._pre (); + parser_._characters (s); + parser_._post (); + seq_.push_back (parser_.post_nmtoken ()); + } + + // ncname + // + template <typename C> + void ncname_pimpl<C>:: + _pre () + { + str_.clear (); + } + + template <typename C> + void ncname_pimpl<C>:: + _characters (const ro_string<C>& s) + { + if (str_.size () == 0) + { + ro_string<C> tmp (s.data (), s.size ()); + + if (trim_left (tmp) != 0) + str_ += tmp; + } + else + str_ += s; + } + + template <typename C> + std::basic_string<C> ncname_pimpl<C>:: + post_ncname () + { + ro_string<C> tmp (str_); + str_.resize (trim_right (tmp)); + + std::basic_string<C> r; + r.swap (str_); + return r; + } + + // id + // + template <typename C> + void id_pimpl<C>:: + _pre () + { + str_.clear (); + } + + template <typename C> + void id_pimpl<C>:: + _characters (const ro_string<C>& s) + { + if (str_.size () == 0) + { + ro_string<C> tmp (s.data (), s.size ()); + + if (trim_left (tmp) != 0) + str_ += tmp; + } + else + str_ += s; + } + + template <typename C> + std::basic_string<C> id_pimpl<C>:: + post_id () + { + ro_string<C> tmp (str_); + str_.resize (trim_right (tmp)); + + std::basic_string<C> r; + r.swap (str_); + return r; + } + + // idref + // + template <typename C> + void idref_pimpl<C>:: + _pre () + { + str_.clear (); + } + + template <typename C> + void idref_pimpl<C>:: + _characters (const ro_string<C>& s) + { + if (str_.size () == 0) + { + ro_string<C> tmp (s.data (), s.size ()); + + if (trim_left (tmp) != 0) + str_ += tmp; + } + else + str_ += s; + } + + template <typename C> + std::basic_string<C> idref_pimpl<C>:: + post_idref () + { + ro_string<C> tmp (str_); + str_.resize (trim_right (tmp)); + + std::basic_string<C> r; + r.swap (str_); + return r; + } + + // idrefs + // + template <typename C> + void idrefs_pimpl<C>:: + _pre () + { + idrefs_pskel<C>::_pre (); + seq_.clear (); + } + + template <typename C> + string_sequence<C> idrefs_pimpl<C>:: + post_idrefs () + { + string_sequence<C> r; + r.swap (seq_); + return r; + } + + template <typename C> + void idrefs_pimpl<C>:: + _xsd_parse_item (const ro_string<C>& s) + { + parser_.pre (); + parser_._pre (); + parser_._characters (s); + parser_._post (); + seq_.push_back (parser_.post_idref ()); + } + + // language + // + template <typename C> + void language_pimpl<C>:: + _pre () + { + str_.clear (); + } + + template <typename C> + void language_pimpl<C>:: + _characters (const ro_string<C>& s) + { + if (str_.size () == 0) + { + ro_string<C> tmp (s.data (), s.size ()); + + if (trim_left (tmp) != 0) + str_ += tmp; + } + else + str_ += s; + } + + template <typename C> + std::basic_string<C> language_pimpl<C>:: + post_language () + { + ro_string<C> tmp (str_); + str_.resize (trim_right (tmp)); + + std::basic_string<C> r; + r.swap (str_); + return r; + } + + // uri + // + template <typename C> + void uri_pimpl<C>:: + _pre () + { + str_.clear (); + } + + template <typename C> + void uri_pimpl<C>:: + _characters (const ro_string<C>& s) + { + if (str_.size () == 0) + { + ro_string<C> tmp (s.data (), s.size ()); + + if (trim_left (tmp) != 0) + str_ += tmp; + } + else + str_ += s; + } + + template <typename C> + std::basic_string<C> uri_pimpl<C>:: + post_uri () + { + ro_string<C> tmp (str_); + str_.resize (trim_right (tmp)); + + std::basic_string<C> r; + r.swap (str_); + return r; + } + + // qname + // + template <typename C> + void qname_pimpl<C>:: + _pre () + { + str_.clear (); + } + + template <typename C> + void qname_pimpl<C>:: + _characters (const ro_string<C>& s) + { + if (str_.size () == 0) + { + ro_string<C> tmp (s.data (), s.size ()); + + if (trim_left (tmp) != 0) + str_ += tmp; + } + else + str_ += s; + } + + template <typename C> + qname<C> qname_pimpl<C>:: + post_qname () + { + typedef typename ro_string<C>::size_type size_type; + + ro_string<C> tmp (str_); + size_type size (trim_right (tmp)); + size_type pos (tmp.find (C (':'))); + + if (pos != ro_string<C>::npos) + { + std::basic_string<C> prefix (tmp.data (), pos++); + std::basic_string<C> name (tmp.data () + pos, size - pos); + return qname<C> (prefix, name); + } + else + { + str_.resize (size); + return qname<C> (str_); + } + } + + // base64_binary + // + template <typename C> + void base64_binary_pimpl<C>:: + _pre () + { + str_.clear (); + } + + template <typename C> + void base64_binary_pimpl<C>:: + _characters (const ro_string<C>& s) + { + if (str_.size () == 0) + { + ro_string<C> tmp (s.data (), s.size ()); + + if (trim_left (tmp) != 0) + str_ += tmp; + } + else + str_ += s; + } + + namespace bits + { + template <typename C> + inline unsigned char + base64_decode (C c) + { + unsigned char r (0xFF); + + if (c >= C('A') && c <= C ('Z')) + r = static_cast<unsigned char> (c - C ('A')); + else if (c >= C('a') && c <= C ('z')) + r = static_cast<unsigned char> (c - C ('a') + 26); + else if (c >= C('0') && c <= C ('9')) + r = static_cast<unsigned char> (c - C ('0') + 52); + else if (c == C ('+')) + r = 62; + else if (c == C ('/')) + r = 63; + + return r; + } + } + + template <typename C> + std::auto_ptr<buffer> base64_binary_pimpl<C>:: + post_base64_binary () + { + typedef typename std::basic_string<C>::size_type size_type; + + size_type size (str_.size ()); + const C* src (str_.c_str ()); + + // Remove all whitespaces. + // + { + size_type j (0); + + bool subs (false); + + for (size_type i (0); i < size; ++i) + { + C c = str_[i]; + + if (c == C (0x20) || c == C (0x0A) || + c == C (0x0D) || c == C (0x09)) + { + subs = true; + } + else + { + if (subs) + subs = false; + + str_[j++] = c; + } + } + + size = j; + str_.resize (size); + } + + // Our length should be a multiple of four. + // + size_type quad_count (size / 4); + size_type capacity (quad_count * 3 + 1); + + std::auto_ptr<buffer> buf (new buffer (capacity, capacity)); + char* dst (buf->data ()); + + size_type si (0), di (0); // Source and destination indexes. + + // Process all quads except the last one. + // + unsigned char b1, b2, b3, b4; + + for (size_type q (0); q < quad_count - 1; ++q) + { + b1 = bits::base64_decode (src[si++]); + b2 = bits::base64_decode (src[si++]); + b3 = bits::base64_decode (src[si++]); + b4 = bits::base64_decode (src[si++]); + + dst[di++] = (b1 << 2) | (b2 >> 4); + dst[di++] = (b2 << 4) | (b3 >> 2); + dst[di++] = (b3 << 6) | b4; + } + + // Process the last quad. The first two octets are always there. + // + b1 = bits::base64_decode (src[si++]); + b2 = bits::base64_decode (src[si++]); + + C e3 (src[si++]); + C e4 (src[si++]); + + if (e4 == C ('=')) + { + if (e3 == C ('=')) + { + // Two pads. Last 4 bits in b2 should be zero. + // + dst[di++] = (b1 << 2) | (b2 >> 4); + } + else + { + // One pad. Last 2 bits in b3 should be zero. + // + b3 = bits::base64_decode (e3); + + dst[di++] = (b1 << 2) | (b2 >> 4); + dst[di++] = (b2 << 4) | (b3 >> 2); + } + } + else + { + // No pads. + // + b3 = bits::base64_decode (e3); + b4 = bits::base64_decode (e4); + + dst[di++] = (b1 << 2) | (b2 >> 4); + dst[di++] = (b2 << 4) | (b3 >> 2); + dst[di++] = (b3 << 6) | b4; + } + + // Set the real size. + // + buf->size (di); + + return buf; + } + + // hex_binary + // + template <typename C> + void hex_binary_pimpl<C>:: + _pre () + { + str_.clear (); + } + + template <typename C> + void hex_binary_pimpl<C>:: + _characters (const ro_string<C>& s) + { + if (str_.size () == 0) + { + ro_string<C> tmp (s.data (), s.size ()); + + if (trim_left (tmp) != 0) + str_ += tmp; + } + else + str_ += s; + } + + namespace bits + { + template <typename C> + inline unsigned char + hex_decode (C c) + { + unsigned char r (0xFF); + + if (c >= C('0') && c <= C ('9')) + r = static_cast<unsigned char> (c - C ('0')); + else if (c >= C ('A') && c <= C ('F')) + r = static_cast<unsigned char> (10 + (c - C ('A'))); + else if (c >= C ('a') && c <= C ('f')) + r = static_cast<unsigned char> (10 + (c - C ('a'))); + + return r; + } + } + + template <typename C> + std::auto_ptr<buffer> hex_binary_pimpl<C>:: + post_hex_binary () + { + typedef typename ro_string<C>::size_type size_type; + + ro_string<C> tmp (str_); + size_type size (trim_right (tmp)); + + buffer::size_t n (size / 2); + std::auto_ptr<buffer> buf (new buffer (n)); + + const C* src (tmp.data ()); + char* dst (buf->data ()); + + for (buffer::size_t i (0); i < n; ++i) + { + unsigned char h (bits::hex_decode (src[2 * i])); + unsigned char l (bits::hex_decode (src[2 * i + 1])); + dst[i] = (h << 4) | l; + } + + return buf; + } + + // time_zone + // + namespace bits + { + // Datatypes 3.2.7.3. + // + template <typename C> + void + parse_tz (const C* s, + typename std::basic_string<C>::size_type n, + short& h, short& m) + { + // time_zone := Z|(+|-)HH:MM + // + if (n == 0) + { + return; + } + else if (s[0] == 'Z') + { + h = 0; + m = 0; + } + else if (n == 6) + { + // Parse hours. + // + h = 10 * (s[1] - '0') + (s[2] - '0'); + + // Parse minutes. + // + m = 10 * (s[4] - '0') + (s[5] - '0'); + + if (s[0] == '-') + { + h = -h; + m = -m; + } + } + } + } + + // gday + // + template <typename C> + void gday_pimpl<C>:: + _pre () + { + str_.clear (); + } + + template <typename C> + void gday_pimpl<C>:: + _characters (const ro_string<C>& s) + { + if (str_.size () == 0) + { + ro_string<C> tmp (s.data (), s.size ()); + + if (trim_left (tmp) != 0) + str_ += tmp; + } + else + str_ += s; + } + + template <typename C> + gday gday_pimpl<C>:: + post_gday () + { + typedef typename ro_string<C>::size_type size_type; + + ro_string<C> tmp (str_); + size_type size (trim_right (tmp)); + const C* s (tmp.data ()); + + unsigned short day (0); + bool z (false); + short zh (0), zm (0); + + // gday := ---DD[Z|(+|-)HH:MM] + // + if (size >= 5) + { + day = 10 * (s[3] - '0') + (s[4] - '0'); + + if (size > 5) + { + bits::parse_tz (s + 5, size - 5, zh, zm); + z = true; + } + } + + return z ? gday (day, zh, zm) : gday (day); + } + + // gmonth + // + template <typename C> + void gmonth_pimpl<C>:: + _pre () + { + str_.clear (); + } + + template <typename C> + void gmonth_pimpl<C>:: + _characters (const ro_string<C>& s) + { + if (str_.size () == 0) + { + ro_string<C> tmp (s.data (), s.size ()); + + if (trim_left (tmp) != 0) + str_ += tmp; + } + else + str_ += s; + } + + template <typename C> + gmonth gmonth_pimpl<C>:: + post_gmonth () + { + typedef typename ro_string<C>::size_type size_type; + + ro_string<C> tmp (str_); + size_type size (trim_right (tmp)); + const C* s (tmp.data ()); + + unsigned short month (0); + bool z (false); + short zh (0), zm (0); + + // gmonth := --MM[Z|(+|-)HH:MM] + // + if (size >= 4) + { + month = 10 * (s[2] - '0') + (s[3] - '0'); + + if (size > 4) + { + bits::parse_tz (s + 4, size - 4, zh, zm); + z = true; + } + } + + return z ? gmonth (month, zh, zm) : gmonth (month); + } + + // gyear + // + template <typename C> + void gyear_pimpl<C>:: + _pre () + { + str_.clear (); + } + + template <typename C> + void gyear_pimpl<C>:: + _characters (const ro_string<C>& s) + { + if (str_.size () == 0) + { + ro_string<C> tmp (s.data (), s.size ()); + + if (trim_left (tmp) != 0) + str_ += tmp; + } + else + str_ += s; + } + + template <typename C> + gyear gyear_pimpl<C>:: + post_gyear () + { + typedef typename ro_string<C>::size_type size_type; + + ro_string<C> tmp (str_); + size_type size (trim_right (tmp)); + const C* s (tmp.data ()); + + int year (0); + bool z (false); + short zh (0), zm (0); + + // gyear := [-]CCYY[N]*[Z|(+|-)HH:MM] + // + + if (size >= 4) + { + // Find the end of the year token. + // + size_type pos (4); + for (; pos < size; ++pos) + { + C c (s[pos]); + + if (c == C ('Z') || c == C ('+') || c == C ('-')) + break; + } + + ro_string<C> year_fragment (s, pos); + zc_istream<C> is (year_fragment); + is >> year; + + if (pos < size) + { + bits::parse_tz (s + pos, size - pos, zh, zm); + z = true; + } + } + + return z ? gyear (year, zh, zm) : gyear (year); + } + + // gmonth_day + // + template <typename C> + void gmonth_day_pimpl<C>:: + _pre () + { + str_.clear (); + } + + template <typename C> + void gmonth_day_pimpl<C>:: + _characters (const ro_string<C>& s) + { + if (str_.size () == 0) + { + ro_string<C> tmp (s.data (), s.size ()); + + if (trim_left (tmp) != 0) + str_ += tmp; + } + else + str_ += s; + } + + template <typename C> + gmonth_day gmonth_day_pimpl<C>:: + post_gmonth_day () + { + typedef typename ro_string<C>::size_type size_type; + + ro_string<C> tmp (str_); + size_type size (trim_right (tmp)); + const C* s (tmp.data ()); + + unsigned short month (0), day (0); + bool z (false); + short zh (0), zm (0); + + // gmonth_day := --MM-DD[Z|(+|-)HH:MM] + // + if (size >= 7) + { + month = 10 * (s[2] - '0') + (s[3] - '0'); + day = 10 * (s[5] - '0') + (s[6] - '0'); + + if (size > 7) + { + bits::parse_tz (s + 7, size - 7, zh, zm); + z = true; + } + } + + return z + ? gmonth_day (month, day, zh, zm) + : gmonth_day (month, day); + } + + // gyear_month + // + template <typename C> + void gyear_month_pimpl<C>:: + _pre () + { + str_.clear (); + } + + template <typename C> + void gyear_month_pimpl<C>:: + _characters (const ro_string<C>& s) + { + if (str_.size () == 0) + { + ro_string<C> tmp (s.data (), s.size ()); + + if (trim_left (tmp) != 0) + str_ += tmp; + } + else + str_ += s; + } + + template <typename C> + gyear_month gyear_month_pimpl<C>:: + post_gyear_month () + { + typedef typename ro_string<C>::size_type size_type; + + ro_string<C> tmp (str_); + size_type size (trim_right (tmp)); + const C* s (tmp.data ()); + + int year (0); + unsigned short month (0); + bool z (false); + short zh (0), zm (0); + + // gyear_month := [-]CCYY[N]*-MM[Z|(+|-)HH:MM] + // + + if (size >= 7) + { + // Find the end of the year token. + // + size_type pos (tmp.find (C ('-'), 4)); + + if (pos != ro_string<C>::npos && (size - pos - 1) >= 2) + { + ro_string<C> year_fragment (s, pos); + zc_istream<C> yis (year_fragment); + yis >> year; + + month = 10 * (s[pos + 1] - '0') + (s[pos + 2] - '0'); + + pos += 3; + + if (pos < size) + { + bits::parse_tz (s + pos, size - pos, zh, zm); + z = true; + } + } + } + + return z + ? gyear_month (year, month, zh, zm) + : gyear_month (year, month); + } + + // date + // + template <typename C> + void date_pimpl<C>:: + _pre () + { + str_.clear (); + } + + template <typename C> + void date_pimpl<C>:: + _characters (const ro_string<C>& s) + { + if (str_.size () == 0) + { + ro_string<C> tmp (s.data (), s.size ()); + + if (trim_left (tmp) != 0) + str_ += tmp; + } + else + str_ += s; + } + + template <typename C> + date date_pimpl<C>:: + post_date () + { + typedef typename ro_string<C>::size_type size_type; + + ro_string<C> tmp (str_); + size_type size (trim_right (tmp)); + const C* s (tmp.data ()); + + int year (0); + unsigned short month (0), day (0); + bool z (false); + short zh (0), zm (0); + + // date := [-]CCYY[N]*-MM-DD[Z|(+|-)HH:MM] + // + + if (size >= 10) + { + // Find the end of the year token. + // + size_type pos (tmp.find (C ('-'), 4)); + + if (pos != ro_string<C>::npos && (size - pos - 1) >= 5) + { + ro_string<C> year_fragment (s, pos); + zc_istream<C> yis (year_fragment); + yis >> year; + + month = 10 * (s[pos + 1] - '0') + (s[pos + 2] - '0'); + day = 10 * (s[pos + 4] - '0') + (s[pos + 5] - '0'); + + pos += 6; + + if (pos < size) + { + bits::parse_tz (s + pos, size - pos, zh, zm); + z = true; + } + } + } + + return z + ? date (year, month, day, zh, zm) + : date (year, month, day); + } + + // time + // + template <typename C> + void time_pimpl<C>:: + _pre () + { + str_.clear (); + } + + template <typename C> + void time_pimpl<C>:: + _characters (const ro_string<C>& s) + { + if (str_.size () == 0) + { + ro_string<C> tmp (s.data (), s.size ()); + + if (trim_left (tmp) != 0) + str_ += tmp; + } + else + str_ += s; + } + + template <typename C> + time time_pimpl<C>:: + post_time () + { + typedef typename ro_string<C>::size_type size_type; + + ro_string<C> tmp (str_); + size_type size (trim_right (tmp)); + const C* s (tmp.data ()); + + unsigned short hours (0), minutes (0); + double seconds (0.0); + bool z (false); + short zh (0), zm (0); + + // time := HH:MM:SS[.S+][Z|(+|-)HH:MM] + // + + if (size >= 8) + { + hours = 10 * (s[0] - '0') + (s[1] - '0'); + minutes = 10 * (s[3] - '0') + (s[4] - '0'); + + // Find the end of the seconds fragment. + // + size_type pos (8); + for (; pos < size; ++pos) + { + C c (s[pos]); + + if (c == C ('Z') || c == C ('+') || c == C ('-')) + break; + } + + ro_string<C> seconds_fragment (s + 6, pos - 6); + zc_istream<C> sis (seconds_fragment); + sis >> seconds; + + if (pos < size) + { + bits::parse_tz (s + pos, size - pos, zh, zm); + z = true; + } + } + + return z + ? time (hours, minutes, seconds, zh, zm) + : time (hours, minutes, seconds); + } + + + // date_time + // + template <typename C> + void date_time_pimpl<C>:: + _pre () + { + str_.clear (); + } + + template <typename C> + void date_time_pimpl<C>:: + _characters (const ro_string<C>& s) + { + if (str_.size () == 0) + { + ro_string<C> tmp (s.data (), s.size ()); + + if (trim_left (tmp) != 0) + str_ += tmp; + } + else + str_ += s; + } + + template <typename C> + date_time date_time_pimpl<C>:: + post_date_time () + { + typedef typename ro_string<C>::size_type size_type; + + ro_string<C> tmp (str_); + size_type size (trim_right (tmp)); + const C* s (tmp.data ()); + + int year (0); + unsigned short month (0), day (0), hours (0), minutes (0); + double seconds (0.0); + bool z (false); + short zh (0), zm (0); + + // date_time := [-]CCYY[N]*-MM-DDTHH:MM:SS[.S+][Z|(+|-)HH:MM] + // + + if (size >= 19) + { + // Find the end of the year token. + // + size_type pos (tmp.find (C ('-'), 4)); + + if (pos != ro_string<C>::npos && (size - pos - 1) >= 14) + { + ro_string<C> year_fragment (s, pos); + zc_istream<C> yis (year_fragment); + yis >> year; + + month = 10 * (s[pos + 1] - '0') + (s[pos + 2] - '0'); + day = 10 * (s[pos + 4] - '0') + (s[pos + 5] - '0'); + + pos += 7; // Point to the first H. + + hours = 10 * (s[pos] - '0') + (s[pos + 1] - '0'); + minutes = 10 * (s[pos + 3] - '0') + (s[pos + 4] - '0'); + + // Find the end of the seconds fragment. + // + pos += 6; // Point to the first S. + + size_type sec_end (pos + 2); + for (; sec_end < size; ++sec_end) + { + C c (s[sec_end]); + + if (c == C ('Z') || c == C ('+') || c == C ('-')) + break; + } + + ro_string<C> seconds_fragment (s + pos, sec_end - pos); + zc_istream<C> sis (seconds_fragment); + sis >> seconds; + + if (sec_end < size) + { + bits::parse_tz (s + sec_end, size - sec_end, zh, zm); + z = true; + } + } + } + + return z + ? date_time (year, month, day, hours, minutes, seconds, zh, zm) + : date_time (year, month, day, hours, minutes, seconds); + } + + // duration + // + template <typename C> + void duration_pimpl<C>:: + _pre () + { + str_.clear (); + } + + template <typename C> + void duration_pimpl<C>:: + _characters (const ro_string<C>& s) + { + if (str_.size () == 0) + { + ro_string<C> tmp (s.data (), s.size ()); + + if (trim_left (tmp) != 0) + str_ += tmp; + } + else + str_ += s; + } + + namespace bits + { + template <typename C> + inline typename ro_string<C>::size_type + duration_delim (const C* s, + typename ro_string<C>::size_type pos, + typename ro_string<C>::size_type size) + { + const C* p (s + pos); + for (; p < (s + size); ++p) + { + if (*p == C ('Y') || *p == C ('D') || *p == C ('M') || + *p == C ('H') || *p == C ('M') || *p == C ('S') || + *p == C ('T')) + break; + } + + return p - s; + } + } + + template <typename C> + duration duration_pimpl<C>:: + post_duration () + { + typedef typename ro_string<C>::size_type size_type; + + ro_string<C> tmp (str_); + size_type size (trim_right (tmp)); + + bool negative (false); + unsigned int years (0), months (0), days (0), hours (0), minutes (0); + double seconds (0.0); + + // duration := [-]P[nY][nM][nD][TnHnMn[.n+]S] + // + const C* s (tmp.data ()); + + if (size >= 3) + { + size_type pos (0); + + if (s[0] == C ('-')) + { + negative = true; + pos++; + } + + pos++; // Skip 'P'. + + size_type del (bits::duration_delim (s, pos, size)); + + if (del != size && s[del] == C ('Y')) + { + ro_string<C> fragment (s + pos, del - pos); + zc_istream<C> is (fragment); + is >> years; + + pos = del + 1; + del = bits::duration_delim (s, pos, size); + } + + if (del != size && s[del] == C ('M')) + { + ro_string<C> fragment (s + pos, del - pos); + zc_istream<C> is (fragment); + is >> months; + + pos = del + 1; + del = bits::duration_delim (s, pos, size); + } + + if (del != size && s[del] == C ('D')) + { + ro_string<C> fragment (s + pos, del - pos); + zc_istream<C> is (fragment); + is >> days; + + pos = del + 1; + del = bits::duration_delim (s, pos, size); + } + + if (del != size && s[del] == C ('T')) + { + pos = del + 1; + del = bits::duration_delim (s, pos, size); + + if (del != size && s[del] == C ('H')) + { + ro_string<C> fragment (s + pos, del - pos); + zc_istream<C> is (fragment); + is >> hours; + + pos = del + 1; + del = bits::duration_delim (s, pos, size); + } + + if (del != size && s[del] == C ('M')) + { + ro_string<C> fragment (s + pos, del - pos); + zc_istream<C> is (fragment); + is >> minutes; + + pos = del + 1; + del = bits::duration_delim (s, pos, size); + } + + if (del != size && s[del] == C ('S')) + { + ro_string<C> fragment (s + pos, del - pos); + zc_istream<C> is (fragment); + is >> seconds; + } + } + } + + return duration ( + negative, years, months, days, hours, minutes, seconds); + } + } + } + } +} diff --git a/xsd/libxsd/xsd/cxx/parser/non-validating/xml-schema-pskel.hxx b/xsd/libxsd/xsd/cxx/parser/non-validating/xml-schema-pskel.hxx new file mode 100644 index 0000000..8e4972a --- /dev/null +++ b/xsd/libxsd/xsd/cxx/parser/non-validating/xml-schema-pskel.hxx @@ -0,0 +1,647 @@ +// file : xsd/cxx/parser/non-validating/xml-schema-pskel.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_CXX_PARSER_NON_VALIDATING_XML_SCHEMA_PSKEL_HXX +#define XSD_CXX_PARSER_NON_VALIDATING_XML_SCHEMA_PSKEL_HXX + +#include <string> +#include <memory> // auto_ptr + +#include <xsd/cxx/parser/xml-schema.hxx> +#include <xsd/cxx/parser/non-validating/parser.hxx> + +namespace xsd +{ + namespace cxx + { + namespace parser + { + namespace non_validating + { + // anyType and anySimpleType. All events are routed to the + // _any_* callbacks. + // + template <typename C> + struct any_type_pskel: complex_content<C> + { + virtual bool + _start_element_impl (const ro_string<C>&, + const ro_string<C>&, + const ro_string<C>*); + + virtual bool + _end_element_impl (const ro_string<C>&, + const ro_string<C>&); + + virtual bool + _attribute_impl (const ro_string<C>&, + const ro_string<C>&, + const ro_string<C>&); + + virtual bool + _characters_impl (const ro_string<C>&); + + virtual void + post_any_type () = 0; + + static const C* + _static_type (); + + virtual const C* + _dynamic_type () const; + }; + + template <typename C> + struct any_simple_type_pskel: simple_content<C> + { + virtual bool + _characters_impl (const ro_string<C>&); + + virtual void + post_any_simple_type () = 0; + + static const C* + _static_type (); + + virtual const C* + _dynamic_type () const; + }; + + + // Boolean. + // + template <typename C> + struct boolean_pskel: simple_content<C> + { + virtual bool + post_boolean () = 0; + + static const C* + _static_type (); + + virtual const C* + _dynamic_type () const; + }; + + + // 8-bit + // + template <typename C> + struct byte_pskel: simple_content<C> + { + virtual signed char + post_byte () = 0; + + static const C* + _static_type (); + + virtual const C* + _dynamic_type () const; + }; + + template <typename C> + struct unsigned_byte_pskel: simple_content<C> + { + virtual unsigned char + post_unsigned_byte () = 0; + + static const C* + _static_type (); + + virtual const C* + _dynamic_type () const; + }; + + + // 16-bit + // + template <typename C> + struct short_pskel: simple_content<C> + { + virtual short + post_short () = 0; + + static const C* + _static_type (); + + virtual const C* + _dynamic_type () const; + }; + + template <typename C> + struct unsigned_short_pskel: simple_content<C> + { + virtual unsigned short + post_unsigned_short () = 0; + + static const C* + _static_type (); + + virtual const C* + _dynamic_type () const; + }; + + + // 32-bit + // + template <typename C> + struct int_pskel: simple_content<C> + { + virtual int + post_int () = 0; + + static const C* + _static_type (); + + virtual const C* + _dynamic_type () const; + }; + + template <typename C> + struct unsigned_int_pskel: simple_content<C> + { + virtual unsigned int + post_unsigned_int () = 0; + + static const C* + _static_type (); + + virtual const C* + _dynamic_type () const; + }; + + + // 64-bit + // + template <typename C> + struct long_pskel: simple_content<C> + { + virtual long long + post_long () = 0; + + static const C* + _static_type (); + + virtual const C* + _dynamic_type () const; + }; + + template <typename C> + struct unsigned_long_pskel: simple_content<C> + { + virtual unsigned long long + post_unsigned_long () = 0; + + static const C* + _static_type (); + + virtual const C* + _dynamic_type () const; + }; + + + // Arbitrary-length integers. + // + template <typename C> + struct integer_pskel: simple_content<C> + { + virtual long long + post_integer () = 0; + + static const C* + _static_type (); + + virtual const C* + _dynamic_type () const; + }; + + template <typename C> + struct negative_integer_pskel: simple_content<C> + { + virtual long long + post_negative_integer () = 0; + + static const C* + _static_type (); + + virtual const C* + _dynamic_type () const; + }; + + template <typename C> + struct non_positive_integer_pskel: simple_content<C> + { + virtual long long + post_non_positive_integer () = 0; + + static const C* + _static_type (); + + virtual const C* + _dynamic_type () const; + }; + + template <typename C> + struct positive_integer_pskel: simple_content<C> + { + virtual unsigned long long + post_positive_integer () = 0; + + static const C* + _static_type (); + + virtual const C* + _dynamic_type () const; + }; + + template <typename C> + struct non_negative_integer_pskel: simple_content<C> + { + virtual unsigned long long + post_non_negative_integer () = 0; + + static const C* + _static_type (); + + virtual const C* + _dynamic_type () const; + }; + + + // Floats. + // + template <typename C> + struct float_pskel: simple_content<C> + { + virtual float + post_float () = 0; + + static const C* + _static_type (); + + virtual const C* + _dynamic_type () const; + }; + + template <typename C> + struct double_pskel: simple_content<C> + { + virtual double + post_double () = 0; + + static const C* + _static_type (); + + virtual const C* + _dynamic_type () const; + }; + + template <typename C> + struct decimal_pskel: simple_content<C> + { + virtual double + post_decimal () = 0; + + static const C* + _static_type (); + + virtual const C* + _dynamic_type () const; + }; + + + // Strings. + // + template <typename C> + struct string_pskel: simple_content<C> + { + virtual std::basic_string<C> + post_string () = 0; + + static const C* + _static_type (); + + virtual const C* + _dynamic_type () const; + }; + + template <typename C> + struct normalized_string_pskel: simple_content<C> + { + virtual std::basic_string<C> + post_normalized_string () = 0; + + static const C* + _static_type (); + + virtual const C* + _dynamic_type () const; + }; + + template <typename C> + struct token_pskel: simple_content<C> + { + virtual std::basic_string<C> + post_token () = 0; + + static const C* + _static_type (); + + virtual const C* + _dynamic_type () const; + }; + + template <typename C> + struct name_pskel: simple_content<C> + { + virtual std::basic_string<C> + post_name () = 0; + + static const C* + _static_type (); + + virtual const C* + _dynamic_type () const; + }; + + template <typename C> + struct nmtoken_pskel: simple_content<C> + { + virtual std::basic_string<C> + post_nmtoken () = 0; + + static const C* + _static_type (); + + virtual const C* + _dynamic_type () const; + }; + + template <typename C> + struct nmtokens_pskel: list_base<C> + { + virtual string_sequence<C> + post_nmtokens () = 0; + + static const C* + _static_type (); + + virtual const C* + _dynamic_type () const; + }; + + template <typename C> + struct ncname_pskel: simple_content<C> + { + virtual std::basic_string<C> + post_ncname () = 0; + + static const C* + _static_type (); + + virtual const C* + _dynamic_type () const; + }; + + template <typename C> + struct id_pskel: simple_content<C> + { + virtual std::basic_string<C> + post_id () = 0; + + static const C* + _static_type (); + + virtual const C* + _dynamic_type () const; + }; + + template <typename C> + struct idref_pskel: simple_content<C> + { + virtual std::basic_string<C> + post_idref () = 0; + + static const C* + _static_type (); + + virtual const C* + _dynamic_type () const; + }; + + template <typename C> + struct idrefs_pskel: list_base<C> + { + virtual string_sequence<C> + post_idrefs () = 0; + + static const C* + _static_type (); + + virtual const C* + _dynamic_type () const; + }; + + // Language. + // + template <typename C> + struct language_pskel: simple_content<C> + { + virtual std::basic_string<C> + post_language () = 0; + + static const C* + _static_type (); + + virtual const C* + _dynamic_type () const; + }; + + // URI. + // + template <typename C> + struct uri_pskel: simple_content<C> + { + virtual std::basic_string<C> + post_uri () = 0; + + static const C* + _static_type (); + + virtual const C* + _dynamic_type () const; + }; + + // QName. + // + template <typename C> + struct qname_pskel: simple_content<C> + { + virtual qname<C> + post_qname () = 0; + + static const C* + _static_type (); + + virtual const C* + _dynamic_type () const; + }; + + // Base64 and hex binaries. + // + template <typename C> + struct base64_binary_pskel: simple_content<C> + { + virtual std::auto_ptr<buffer> + post_base64_binary () = 0; + + static const C* + _static_type (); + + virtual const C* + _dynamic_type () const; + }; + + template <typename C> + struct hex_binary_pskel: simple_content<C> + { + virtual std::auto_ptr<buffer> + post_hex_binary () = 0; + + static const C* + _static_type (); + + virtual const C* + _dynamic_type () const; + }; + + // Time and date types. + // + template <typename C> + struct gday_pskel: simple_content<C> + { + virtual gday + post_gday () = 0; + + static const C* + _static_type (); + + virtual const C* + _dynamic_type () const; + }; + + template <typename C> + struct gmonth_pskel: simple_content<C> + { + virtual gmonth + post_gmonth () = 0; + + static const C* + _static_type (); + + virtual const C* + _dynamic_type () const; + }; + + template <typename C> + struct gyear_pskel: simple_content<C> + { + virtual gyear + post_gyear () = 0; + + static const C* + _static_type (); + + virtual const C* + _dynamic_type () const; + }; + + template <typename C> + struct gmonth_day_pskel: simple_content<C> + { + virtual gmonth_day + post_gmonth_day () = 0; + + static const C* + _static_type (); + + virtual const C* + _dynamic_type () const; + }; + + template <typename C> + struct gyear_month_pskel: simple_content<C> + { + virtual gyear_month + post_gyear_month () = 0; + + static const C* + _static_type (); + + virtual const C* + _dynamic_type () const; + }; + + template <typename C> + struct date_pskel: simple_content<C> + { + virtual date + post_date () = 0; + + static const C* + _static_type (); + + virtual const C* + _dynamic_type () const; + }; + + template <typename C> + struct time_pskel: simple_content<C> + { + virtual time + post_time () = 0; + + static const C* + _static_type (); + + virtual const C* + _dynamic_type () const; + }; + + template <typename C> + struct date_time_pskel: simple_content<C> + { + virtual date_time + post_date_time () = 0; + + static const C* + _static_type (); + + virtual const C* + _dynamic_type () const; + }; + + template <typename C> + struct duration_pskel: simple_content<C> + { + virtual duration + post_duration () = 0; + + static const C* + _static_type (); + + virtual const C* + _dynamic_type () const; + }; + } + } + } +} + +#include <xsd/cxx/parser/non-validating/xml-schema-pskel.txx> + +#endif // XSD_CXX_PARSER_NON_VALIDATING_XML_SCHEMA_PSKEL_HXX + +#include <xsd/cxx/parser/non-validating/xml-schema-pskel.ixx> diff --git a/xsd/libxsd/xsd/cxx/parser/non-validating/xml-schema-pskel.ixx b/xsd/libxsd/xsd/cxx/parser/non-validating/xml-schema-pskel.ixx new file mode 100644 index 0000000..13b1fab --- /dev/null +++ b/xsd/libxsd/xsd/cxx/parser/non-validating/xml-schema-pskel.ixx @@ -0,0 +1,1249 @@ +// file : xsd/cxx/parser/non-validating/xml-schema-pskel.ixx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#if defined(XSD_CXX_PARSER_USE_CHAR) || !defined(XSD_CXX_PARSER_USE_WCHAR) + +#ifndef XSD_CXX_PARSER_NON_VALIDATING_XML_SCHEMA_PSKEL_IXX_CHAR +#define XSD_CXX_PARSER_NON_VALIDATING_XML_SCHEMA_PSKEL_IXX_CHAR + +namespace xsd +{ + namespace cxx + { + namespace parser + { + namespace non_validating + { + template<> + inline const char* any_type_pskel<char>:: + _static_type () + { + return "anyType http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const char* any_type_pskel<char>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const char* any_simple_type_pskel<char>:: + _static_type () + { + return "anySimpleType http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const char* any_simple_type_pskel<char>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const char* boolean_pskel<char>:: + _static_type () + { + return "boolean http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const char* boolean_pskel<char>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const char* byte_pskel<char>:: + _static_type () + { + return "byte http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const char* byte_pskel<char>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const char* unsigned_byte_pskel<char>:: + _static_type () + { + return "unsignedByte http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const char* unsigned_byte_pskel<char>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const char* short_pskel<char>:: + _static_type () + { + return "short http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const char* short_pskel<char>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const char* unsigned_short_pskel<char>:: + _static_type () + { + return "unsignedShort http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const char* unsigned_short_pskel<char>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const char* int_pskel<char>:: + _static_type () + { + return "int http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const char* int_pskel<char>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const char* unsigned_int_pskel<char>:: + _static_type () + { + return "unsignedInt http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const char* unsigned_int_pskel<char>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const char* long_pskel<char>:: + _static_type () + { + return "long http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const char* long_pskel<char>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const char* unsigned_long_pskel<char>:: + _static_type () + { + return "unsignedLong http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const char* unsigned_long_pskel<char>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const char* integer_pskel<char>:: + _static_type () + { + return "integer http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const char* integer_pskel<char>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const char* negative_integer_pskel<char>:: + _static_type () + { + return "negativeInteger http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const char* negative_integer_pskel<char>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const char* non_positive_integer_pskel<char>:: + _static_type () + { + return "nonPositiveInteger http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const char* non_positive_integer_pskel<char>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const char* positive_integer_pskel<char>:: + _static_type () + { + return "positiveInteger http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const char* positive_integer_pskel<char>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const char* non_negative_integer_pskel<char>:: + _static_type () + { + return "nonNegativeInteger http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const char* non_negative_integer_pskel<char>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const char* float_pskel<char>:: + _static_type () + { + return "float http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const char* float_pskel<char>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const char* double_pskel<char>:: + _static_type () + { + return "double http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const char* double_pskel<char>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const char* decimal_pskel<char>:: + _static_type () + { + return "decimal http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const char* decimal_pskel<char>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const char* string_pskel<char>:: + _static_type () + { + return "string http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const char* string_pskel<char>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const char* normalized_string_pskel<char>:: + _static_type () + { + return "normalizedString http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const char* normalized_string_pskel<char>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const char* token_pskel<char>:: + _static_type () + { + return "token http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const char* token_pskel<char>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const char* name_pskel<char>:: + _static_type () + { + return "Name http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const char* name_pskel<char>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const char* nmtoken_pskel<char>:: + _static_type () + { + return "NMTOKEN http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const char* nmtoken_pskel<char>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const char* nmtokens_pskel<char>:: + _static_type () + { + return "NMTOKENS http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const char* nmtokens_pskel<char>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const char* ncname_pskel<char>:: + _static_type () + { + return "NCName http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const char* ncname_pskel<char>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const char* id_pskel<char>:: + _static_type () + { + return "ID http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const char* id_pskel<char>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const char* idref_pskel<char>:: + _static_type () + { + return "IDREF http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const char* idref_pskel<char>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const char* idrefs_pskel<char>:: + _static_type () + { + return "IDREFS http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const char* idrefs_pskel<char>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const char* language_pskel<char>:: + _static_type () + { + return "language http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const char* language_pskel<char>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const char* uri_pskel<char>:: + _static_type () + { + return "anyURI http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const char* uri_pskel<char>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const char* qname_pskel<char>:: + _static_type () + { + return "QName http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const char* qname_pskel<char>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const char* base64_binary_pskel<char>:: + _static_type () + { + return "base64Binary http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const char* base64_binary_pskel<char>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const char* hex_binary_pskel<char>:: + _static_type () + { + return "hexBinary http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const char* hex_binary_pskel<char>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const char* gday_pskel<char>:: + _static_type () + { + return "gDay http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const char* gday_pskel<char>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const char* gmonth_pskel<char>:: + _static_type () + { + return "gMonth http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const char* gmonth_pskel<char>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const char* gyear_pskel<char>:: + _static_type () + { + return "gYear http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const char* gyear_pskel<char>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const char* gmonth_day_pskel<char>:: + _static_type () + { + return "gMonthDay http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const char* gmonth_day_pskel<char>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const char* gyear_month_pskel<char>:: + _static_type () + { + return "gYearMonth http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const char* gyear_month_pskel<char>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const char* date_pskel<char>:: + _static_type () + { + return "date http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const char* date_pskel<char>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const char* time_pskel<char>:: + _static_type () + { + return "time http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const char* time_pskel<char>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const char* date_time_pskel<char>:: + _static_type () + { + return "dateTime http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const char* date_time_pskel<char>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const char* duration_pskel<char>:: + _static_type () + { + return "duration http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const char* duration_pskel<char>:: + _dynamic_type () const + { + return _static_type (); + } + } + } + } +} + +#endif // XSD_CXX_PARSER_NON_VALIDATING_XML_SCHEMA_PSKEL_IXX_CHAR +#endif // XSD_CXX_PARSER_USE_CHAR + + +#if defined(XSD_CXX_PARSER_USE_WCHAR) || !defined(XSD_CXX_PARSER_USE_CHAR) + +#ifndef XSD_CXX_PARSER_NON_VALIDATING_XML_SCHEMA_PSKEL_IXX_WCHAR +#define XSD_CXX_PARSER_NON_VALIDATING_XML_SCHEMA_PSKEL_IXX_WCHAR + +namespace xsd +{ + namespace cxx + { + namespace parser + { + namespace non_validating + { + template<> + inline const wchar_t* any_type_pskel<wchar_t>:: + _static_type () + { + return L"anyType http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const wchar_t* any_type_pskel<wchar_t>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const wchar_t* any_simple_type_pskel<wchar_t>:: + _static_type () + { + return L"anySimpleType http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const wchar_t* any_simple_type_pskel<wchar_t>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const wchar_t* boolean_pskel<wchar_t>:: + _static_type () + { + return L"boolean http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const wchar_t* boolean_pskel<wchar_t>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const wchar_t* byte_pskel<wchar_t>:: + _static_type () + { + return L"byte http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const wchar_t* byte_pskel<wchar_t>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const wchar_t* unsigned_byte_pskel<wchar_t>:: + _static_type () + { + return L"unsignedByte http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const wchar_t* unsigned_byte_pskel<wchar_t>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const wchar_t* short_pskel<wchar_t>:: + _static_type () + { + return L"short http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const wchar_t* short_pskel<wchar_t>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const wchar_t* unsigned_short_pskel<wchar_t>:: + _static_type () + { + return L"unsignedShort http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const wchar_t* unsigned_short_pskel<wchar_t>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const wchar_t* int_pskel<wchar_t>:: + _static_type () + { + return L"int http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const wchar_t* int_pskel<wchar_t>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const wchar_t* unsigned_int_pskel<wchar_t>:: + _static_type () + { + return L"unsignedInt http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const wchar_t* unsigned_int_pskel<wchar_t>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const wchar_t* long_pskel<wchar_t>:: + _static_type () + { + return L"long http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const wchar_t* long_pskel<wchar_t>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const wchar_t* unsigned_long_pskel<wchar_t>:: + _static_type () + { + return L"unsignedLong http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const wchar_t* unsigned_long_pskel<wchar_t>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const wchar_t* integer_pskel<wchar_t>:: + _static_type () + { + return L"integer http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const wchar_t* integer_pskel<wchar_t>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const wchar_t* negative_integer_pskel<wchar_t>:: + _static_type () + { + return L"negativeInteger http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const wchar_t* negative_integer_pskel<wchar_t>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const wchar_t* non_positive_integer_pskel<wchar_t>:: + _static_type () + { + return L"nonPositiveInteger http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const wchar_t* non_positive_integer_pskel<wchar_t>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const wchar_t* positive_integer_pskel<wchar_t>:: + _static_type () + { + return L"positiveInteger http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const wchar_t* positive_integer_pskel<wchar_t>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const wchar_t* non_negative_integer_pskel<wchar_t>:: + _static_type () + { + return L"nonNegativeInteger http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const wchar_t* non_negative_integer_pskel<wchar_t>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const wchar_t* float_pskel<wchar_t>:: + _static_type () + { + return L"float http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const wchar_t* float_pskel<wchar_t>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const wchar_t* double_pskel<wchar_t>:: + _static_type () + { + return L"double http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const wchar_t* double_pskel<wchar_t>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const wchar_t* decimal_pskel<wchar_t>:: + _static_type () + { + return L"decimal http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const wchar_t* decimal_pskel<wchar_t>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const wchar_t* string_pskel<wchar_t>:: + _static_type () + { + return L"string http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const wchar_t* string_pskel<wchar_t>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const wchar_t* normalized_string_pskel<wchar_t>:: + _static_type () + { + return L"normalizedString http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const wchar_t* normalized_string_pskel<wchar_t>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const wchar_t* token_pskel<wchar_t>:: + _static_type () + { + return L"token http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const wchar_t* token_pskel<wchar_t>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const wchar_t* name_pskel<wchar_t>:: + _static_type () + { + return L"Name http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const wchar_t* name_pskel<wchar_t>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const wchar_t* nmtoken_pskel<wchar_t>:: + _static_type () + { + return L"NMTOKEN http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const wchar_t* nmtoken_pskel<wchar_t>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const wchar_t* nmtokens_pskel<wchar_t>:: + _static_type () + { + return L"NMTOKENS http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const wchar_t* nmtokens_pskel<wchar_t>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const wchar_t* ncname_pskel<wchar_t>:: + _static_type () + { + return L"NCName http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const wchar_t* ncname_pskel<wchar_t>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const wchar_t* id_pskel<wchar_t>:: + _static_type () + { + return L"ID http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const wchar_t* id_pskel<wchar_t>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const wchar_t* idref_pskel<wchar_t>:: + _static_type () + { + return L"IDREF http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const wchar_t* idref_pskel<wchar_t>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const wchar_t* idrefs_pskel<wchar_t>:: + _static_type () + { + return L"IDREFS http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const wchar_t* idrefs_pskel<wchar_t>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const wchar_t* language_pskel<wchar_t>:: + _static_type () + { + return L"language http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const wchar_t* language_pskel<wchar_t>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const wchar_t* uri_pskel<wchar_t>:: + _static_type () + { + return L"anyURI http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const wchar_t* uri_pskel<wchar_t>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const wchar_t* qname_pskel<wchar_t>:: + _static_type () + { + return L"QName http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const wchar_t* qname_pskel<wchar_t>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const wchar_t* base64_binary_pskel<wchar_t>:: + _static_type () + { + return L"base64Binary http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const wchar_t* base64_binary_pskel<wchar_t>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const wchar_t* hex_binary_pskel<wchar_t>:: + _static_type () + { + return L"hexBinary http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const wchar_t* hex_binary_pskel<wchar_t>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const wchar_t* gday_pskel<wchar_t>:: + _static_type () + { + return L"gDay http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const wchar_t* gday_pskel<wchar_t>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const wchar_t* gmonth_pskel<wchar_t>:: + _static_type () + { + return L"gMonth http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const wchar_t* gmonth_pskel<wchar_t>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const wchar_t* gyear_pskel<wchar_t>:: + _static_type () + { + return L"gYear http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const wchar_t* gyear_pskel<wchar_t>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const wchar_t* gmonth_day_pskel<wchar_t>:: + _static_type () + { + return L"gMonthDay http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const wchar_t* gmonth_day_pskel<wchar_t>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const wchar_t* gyear_month_pskel<wchar_t>:: + _static_type () + { + return L"gYearMonth http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const wchar_t* gyear_month_pskel<wchar_t>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const wchar_t* date_pskel<wchar_t>:: + _static_type () + { + return L"date http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const wchar_t* date_pskel<wchar_t>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const wchar_t* time_pskel<wchar_t>:: + _static_type () + { + return L"time http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const wchar_t* time_pskel<wchar_t>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const wchar_t* date_time_pskel<wchar_t>:: + _static_type () + { + return L"dateTime http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const wchar_t* date_time_pskel<wchar_t>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const wchar_t* duration_pskel<wchar_t>:: + _static_type () + { + return L"duration http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const wchar_t* duration_pskel<wchar_t>:: + _dynamic_type () const + { + return _static_type (); + } + } + } + } +} + +#endif // XSD_CXX_PARSER_NON_VALIDATING_XML_SCHEMA_PSKEL_IXX_WCHAR +#endif // XSD_CXX_PARSER_USE_WCHAR diff --git a/xsd/libxsd/xsd/cxx/parser/non-validating/xml-schema-pskel.txx b/xsd/libxsd/xsd/cxx/parser/non-validating/xml-schema-pskel.txx new file mode 100644 index 0000000..b6352df --- /dev/null +++ b/xsd/libxsd/xsd/cxx/parser/non-validating/xml-schema-pskel.txx @@ -0,0 +1,69 @@ +// file : xsd/cxx/parser/non-validating/xml-schema-pskel.txx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +namespace xsd +{ + namespace cxx + { + namespace parser + { + namespace non_validating + { + // any_type + // + + template <typename C> + bool any_type_pskel<C>:: + _start_element_impl (const ro_string<C>& ns, + const ro_string<C>& name, + const ro_string<C>* type) + { + this->_start_any_element (ns, name, type); + this->complex_content<C>::context_.top ().any_ = true; + return true; + } + + template <typename C> + bool any_type_pskel<C>:: + _end_element_impl (const ro_string<C>& ns, const ro_string<C>& name) + { + this->complex_content<C>::context_.top ().any_ = false; + this->_end_any_element (ns, name); + return true; + } + + + template <typename C> + bool any_type_pskel<C>:: + _attribute_impl (const ro_string<C>& ns, + const ro_string<C>& name, + const ro_string<C>& value) + { + this->_any_attribute (ns, name, value); + return true; + } + + template <typename C> + bool any_type_pskel<C>:: + _characters_impl (const ro_string<C>& s) + { + this->_any_characters (s); + return true; + } + + // any_simple_type + // + + template <typename C> + bool any_simple_type_pskel<C>:: + _characters_impl (const ro_string<C>& s) + { + this->_any_characters (s); + return true; + } + } + } + } +} diff --git a/xsd/libxsd/xsd/cxx/parser/schema-exceptions.hxx b/xsd/libxsd/xsd/cxx/parser/schema-exceptions.hxx new file mode 100644 index 0000000..9af39d7 --- /dev/null +++ b/xsd/libxsd/xsd/cxx/parser/schema-exceptions.hxx @@ -0,0 +1,187 @@ +// file : xsd/cxx/parser/schema-exceptions.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_CXX_PARSER_SCHEMA_EXCEPTIONS_HXX +#define XSD_CXX_PARSER_SCHEMA_EXCEPTIONS_HXX + +#include <string> + +namespace xsd +{ + namespace cxx + { + namespace parser + { + template <typename C> + struct schema_exception + { + public: + virtual + ~schema_exception () + { + } + + unsigned long + line () const + { + return line_; + } + + void + line (unsigned long l) + { + line_ = l; + } + + unsigned long + column () const + { + return column_; + } + + void + column (unsigned long c) + { + column_ = c; + } + + const std::basic_string<C>& + id () const + { + return id_; + } + + void + id (const std::basic_string<C>& id) + { + id_ = id; + } + + virtual std::basic_string<C> + message () const = 0; + + protected: + unsigned long line_; + unsigned long column_; + std::basic_string<C> id_; + }; + + // + // + template <typename C> + struct expected_element: schema_exception<C> + { + virtual + ~expected_element (); + + expected_element (const std::basic_string<C>& expected_namespace, + const std::basic_string<C>& expected_name); + + expected_element (const std::basic_string<C>& expected_namespace, + const std::basic_string<C>& expected_name, + const std::basic_string<C>& encountered_namespace, + const std::basic_string<C>& encountered_name); + + const std::basic_string<C>& + expected_namespace () const + { + return expected_namespace_; + } + + const std::basic_string<C>& + expected_name () const + { + return expected_name_; + } + + // Encountered element namespace and name are empty if none + // encountered. + // + const std::basic_string<C>& + encountered_namespace () const + { + return encountered_namespace_; + } + + const std::basic_string<C>& + encountered_name () const + { + return encountered_name_; + } + + virtual std::basic_string<C> + message () const; + + private: + std::basic_string<C> expected_namespace_; + std::basic_string<C> expected_name_; + + std::basic_string<C> encountered_namespace_; + std::basic_string<C> encountered_name_; + }; + + + // + // + template <typename C> + struct unexpected_element: schema_exception<C> + { + virtual + ~unexpected_element (); + + unexpected_element (const std::basic_string<C>& encountered_namespace, + const std::basic_string<C>& encountered_name); + + const std::basic_string<C>& + encountered_namespace () const + { + return encountered_namespace_; + } + + const std::basic_string<C>& + encountered_name () const + { + return encountered_name_; + } + + virtual std::basic_string<C> + message () const; + + private: + std::basic_string<C> encountered_namespace_; + std::basic_string<C> encountered_name_; + }; + + // + // + template <typename C> + struct dynamic_type: schema_exception<C> + { + virtual + ~dynamic_type () throw (); + + dynamic_type (const std::basic_string<C>& type); + + const std::basic_string<C>& + type () const + { + return type_; + } + + virtual std::basic_string<C> + message () const; + + private: + std::basic_string<C> type_; + }; + } + } +} + +#include <xsd/cxx/parser/schema-exceptions.txx> + +#endif // XSD_CXX_PARSER_SCHEMA_EXCEPTIONS_HXX + +#include <xsd/cxx/parser/schema-exceptions.ixx> diff --git a/xsd/libxsd/xsd/cxx/parser/schema-exceptions.ixx b/xsd/libxsd/xsd/cxx/parser/schema-exceptions.ixx new file mode 100644 index 0000000..cfd2d18 --- /dev/null +++ b/xsd/libxsd/xsd/cxx/parser/schema-exceptions.ixx @@ -0,0 +1,145 @@ +// file : xsd/cxx/parser/schema-exceptions.ixx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#if defined(XSD_CXX_PARSER_USE_CHAR) || !defined(XSD_CXX_PARSER_USE_WCHAR) + +#ifndef XSD_CXX_PARSER_SCHEMA_EXCEPTIONS_IXX_CHAR +#define XSD_CXX_PARSER_SCHEMA_EXCEPTIONS_IXX_CHAR + +namespace xsd +{ + namespace cxx + { + namespace parser + { + // expected_element + // + template<> + inline + std::basic_string<char> expected_element<char>:: + message () const + { + std::basic_string<char> r ("expected element '"); + r += expected_namespace_; + r += expected_namespace_.empty () ? "" : "#"; + r += expected_name_; + r += "'"; + + if (!encountered_name_.empty ()) + { + r += " instead of '"; + r += encountered_namespace_; + r += encountered_namespace_.empty () ? "" : "#"; + r += encountered_name_; + r += "'"; + } + + return r; + } + + // unexpected_element + // + template<> + inline + std::basic_string<char> unexpected_element<char>:: + message () const + { + std::basic_string<char> r ("unexpected element '"); + r += encountered_namespace_; + r += encountered_namespace_.empty () ? "" : "#"; + r += encountered_name_; + r += "'"; + return r; + } + + // dynamic_type + // + template<> + inline + std::basic_string<char> dynamic_type<char>:: + message () const + { + std::basic_string<char> r ("invalid xsi:type '"); + r += type_; + r += "'"; + return r; + } + } + } +} + +#endif // XSD_CXX_PARSER_SCHEMA_EXCEPTIONS_IXX_CHAR +#endif // XSD_CXX_PARSER_USE_CHAR + + +#if defined(XSD_CXX_PARSER_USE_WCHAR) || !defined(XSD_CXX_PARSER_USE_CHAR) + +#ifndef XSD_CXX_PARSER_SCHEMA_EXCEPTIONS_IXX_WCHAR +#define XSD_CXX_PARSER_SCHEMA_EXCEPTIONS_IXX_WCHAR + +namespace xsd +{ + namespace cxx + { + namespace parser + { + // expected_element + // + template<> + inline + std::basic_string<wchar_t> expected_element<wchar_t>:: + message () const + { + std::basic_string<wchar_t> r (L"expected element '"); + r += expected_namespace_; + r += expected_namespace_.empty () ? L"" : L"#"; + r += expected_name_; + r += L"'"; + + if (!encountered_name_.empty ()) + { + r += L" instead of '"; + r += encountered_namespace_; + r += encountered_namespace_.empty () ? L"" : L"#"; + r += encountered_name_; + r += L"'"; + } + + return r; + } + + // unexpected_element + // + template<> + inline + std::basic_string<wchar_t> unexpected_element<wchar_t>:: + message () const + { + std::basic_string<wchar_t> r (L"unexpected element '"); + r += encountered_namespace_; + r += encountered_namespace_.empty () ? L"" : L"#"; + r += encountered_name_; + r += L"'"; + return r; + } + + // dynamic_type + // + template<> + inline + std::basic_string<wchar_t> dynamic_type<wchar_t>:: + message () const + { + std::basic_string<wchar_t> r (L"invalid xsi:type '"); + r += type_; + r += L"'"; + return r; + } + } + } +} + +#endif // XSD_CXX_PARSER_SCHEMA_EXCEPTIONS_IXX_WCHAR +#endif // XSD_CXX_PARSER_USE_WCHAR diff --git a/xsd/libxsd/xsd/cxx/parser/schema-exceptions.txx b/xsd/libxsd/xsd/cxx/parser/schema-exceptions.txx new file mode 100644 index 0000000..7ac45ae --- /dev/null +++ b/xsd/libxsd/xsd/cxx/parser/schema-exceptions.txx @@ -0,0 +1,75 @@ +// file : xsd/cxx/parser/schema-exceptions.txx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +namespace xsd +{ + namespace cxx + { + namespace parser + { + // expected_element + // + template <typename C> + expected_element<C>:: + ~expected_element () + { + } + + template <typename C> + expected_element<C>:: + expected_element (const std::basic_string<C>& expected_namespace, + const std::basic_string<C>& expected_name) + : expected_namespace_ (expected_namespace), + expected_name_ (expected_name) + { + } + + template <typename C> + expected_element<C>:: + expected_element (const std::basic_string<C>& expected_namespace, + const std::basic_string<C>& expected_name, + const std::basic_string<C>& encountered_namespace, + const std::basic_string<C>& encountered_name) + : expected_namespace_ (expected_namespace), + expected_name_ (expected_name), + encountered_namespace_ (encountered_namespace), + encountered_name_ (encountered_name) + { + } + + // unexpected_element + // + template <typename C> + unexpected_element<C>:: + ~unexpected_element () + { + } + + template <typename C> + unexpected_element<C>:: + unexpected_element (const std::basic_string<C>& encountered_namespace, + const std::basic_string<C>& encountered_name) + : encountered_namespace_ (encountered_namespace), + encountered_name_ (encountered_name) + { + } + + // dynamic_type + // + template <typename C> + dynamic_type<C>:: + ~dynamic_type () throw () + { + } + + template <typename C> + dynamic_type<C>:: + dynamic_type (const std::basic_string<C>& type) + : type_ (type) + { + } + } + } +} diff --git a/xsd/libxsd/xsd/cxx/parser/substitution-map.hxx b/xsd/libxsd/xsd/cxx/parser/substitution-map.hxx new file mode 100644 index 0000000..416d1ec --- /dev/null +++ b/xsd/libxsd/xsd/cxx/parser/substitution-map.hxx @@ -0,0 +1,241 @@ +// file : xsd/cxx/parser/substitution-map.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_CXX_PARSER_SUBSTITUTION_MAP_HXX +#define XSD_CXX_PARSER_SUBSTITUTION_MAP_HXX + +#include <map> +#include <cstddef> // std::size_t + +#include <xsd/cxx/ro-string.hxx> + +namespace xsd +{ + namespace cxx + { + namespace parser + { + template <typename C> + struct substitution_map_key + { + substitution_map_key (const C* ns, const C* name) + : ns_ (ns), name_ (name) + { + } + + substitution_map_key (const ro_string<C>& ns, + const ro_string<C>& name) + : ns_ (ns.data (), ns.size ()), + name_ (name.data (), name.size ()) + { + } + + substitution_map_key (const substitution_map_key& x) + : ns_ (x.ns_.data (), x.ns_.size ()), + name_ (x.name_.data (), x.name_.size ()) + { + } + + private: + substitution_map_key& + operator= (const substitution_map_key&); + + public: + const ro_string<C>& + ns () const + { + return ns_; + } + + const ro_string<C>& + name () const + { + return name_; + } + + private: + const ro_string<C> ns_; + const ro_string<C> name_; + }; + + template <typename C> + inline bool + operator< (const substitution_map_key<C>& x, + const substitution_map_key<C>& y) + { + int r (x.name ().compare (y.name ())); + return r < 0 || (r == 0 && x.ns () < y.ns ()); + } + + template <typename C> + struct substitution_map_value + { + substitution_map_value (const C* ns, const C* name, const C* type) + : ns_ (ns), name_ (name), type_ (type) + { + } + + substitution_map_value (const substitution_map_value& x) + : ns_ (x.ns_.data (), x.ns_.size ()), + name_ (x.name_.data (), x.name_.size ()), + type_ (x.type_.data (), x.type_.size ()) + { + } + + substitution_map_value& + operator= (const substitution_map_value& x) + { + if (this != &x) + { + ns_.assign (x.ns_.data (), x.ns_.size ()); + name_.assign (x.name_.data (), x.name_.size ()); + type_.assign (x.type_.data (), x.type_.size ()); + } + + return *this; + } + + public: + const ro_string<C>& + ns () const + { + return ns_; + } + + const ro_string<C>& + name () const + { + return name_; + } + + const ro_string<C>& + type () const + { + return type_; + } + + private: + ro_string<C> ns_; + ro_string<C> name_; + ro_string<C> type_; + }; + + template <typename C> + struct substitution_map + { + void + insert (const C* member_ns, + const C* member_name, + const C* root_ns, + const C* root_name, + const C* member_type) + { + key k (member_ns, member_name); + value v (root_ns, root_name, member_type); + map_.insert (std::pair<key, value> (k, v)); + } + + void + erase (const C* member_ns, const C* member_name) + { + map_.erase (key (member_ns, member_name)); + } + + // Check and get the type set if found. + // + bool + check (const ro_string<C>& ns, + const ro_string<C>& name, + const C* root_ns, + const C* root_name, + const ro_string<C>*& type) const + { + + return map_.empty () + ? false + : check_ (ns, name, root_ns, root_name, &type); + } + + // Check but don't care about the type. + // + bool + check (const ro_string<C>& ns, + const ro_string<C>& name, + const C* root_ns, + const C* root_name) const + { + + return map_.empty () + ? false + : check_ (ns, name, root_ns, root_name, 0); + } + + private: + bool + check_ (const ro_string<C>& ns, + const ro_string<C>& name, + const C* root_ns, + const C* root_name, + const ro_string<C>** type) const; + + private: + typedef substitution_map_key<C> key; + typedef substitution_map_value<C> value; + typedef std::map<key, value> map; + + map map_; + }; + + + // Translation unit initializer. + // + template<typename C> + struct substitution_map_init + { + static substitution_map<C>* map; + static std::size_t count; + + substitution_map_init (); + ~substitution_map_init (); + }; + + template<typename C> + substitution_map<C>* substitution_map_init<C>::map = 0; + + template<typename C> + std::size_t substitution_map_init<C>::count = 0; + + template<typename C> + inline substitution_map<C>& + substitution_map_instance () + { + return *substitution_map_init<C>::map; + } + + + // Map entry initializer. + // + template<typename C> + struct substitution_map_entry + { + substitution_map_entry (const C* member_ns, + const C* member_name, + const C* root_ns, + const C* root_name, + const C* member_type); + + ~substitution_map_entry (); + + private: + const C* member_ns_; + const C* member_name_; + }; + } + } +} + +#include <xsd/cxx/parser/substitution-map.txx> + +#endif // XSD_CXX_PARSER_SUBSTITUTION_MAP_HXX diff --git a/xsd/libxsd/xsd/cxx/parser/substitution-map.txx b/xsd/libxsd/xsd/cxx/parser/substitution-map.txx new file mode 100644 index 0000000..dad0ec6 --- /dev/null +++ b/xsd/libxsd/xsd/cxx/parser/substitution-map.txx @@ -0,0 +1,84 @@ +// file : xsd/cxx/parser/substitution-map.txx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +namespace xsd +{ + namespace cxx + { + namespace parser + { + template <typename C> + bool substitution_map<C>:: + check_ (const ro_string<C>& ns, + const ro_string<C>& name, + const C* root_ns, + const C* root_name, + const ro_string<C>** type) const + { + key k (ns, name); + typename map::const_iterator i (map_.find (k)); + + if (i == map_.end ()) + return false; + + const value& v (i->second); + + bool r (false); + + if (v.name () == root_name && v.ns () == root_ns) + r = true; + else + r = check_ (v.ns (), v.name (), root_ns, root_name, 0); + + if (r && type != 0 && *type == 0) + *type = &v.type (); + + return r; + } + + // substitution_map_init + // + template<typename C> + substitution_map_init<C>:: + substitution_map_init () + { + if (count == 0) + map = new substitution_map<C>; + + ++count; + } + + template<typename C> + substitution_map_init<C>:: + ~substitution_map_init () + { + if (--count == 0) + delete map; + } + + // substitution_map_entry + // + template<typename C> + substitution_map_entry<C>:: + substitution_map_entry (const C* member_ns, + const C* member_name, + const C* root_ns, + const C* root_name, + const C* member_type) + : member_ns_ (member_ns), member_name_ (member_name) + { + substitution_map_instance<C> ().insert ( + member_ns, member_name, root_ns, root_name, member_type); + } + + template<typename C> + substitution_map_entry<C>:: + ~substitution_map_entry () + { + substitution_map_instance<C> ().erase (member_ns_, member_name_); + } + } + } +} diff --git a/xsd/libxsd/xsd/cxx/parser/validating/exceptions.hxx b/xsd/libxsd/xsd/cxx/parser/validating/exceptions.hxx new file mode 100644 index 0000000..c0efda8 --- /dev/null +++ b/xsd/libxsd/xsd/cxx/parser/validating/exceptions.hxx @@ -0,0 +1,153 @@ +// file : xsd/cxx/parser/validating/exceptions.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_CXX_PARSER_VALIDATING_EXCEPTIONS_HXX +#define XSD_CXX_PARSER_VALIDATING_EXCEPTIONS_HXX + +#include <string> + +#include <xsd/cxx/parser/schema-exceptions.hxx> +#include <xsd/cxx/ro-string.hxx> + +namespace xsd +{ + namespace cxx + { + namespace parser + { + namespace validating + { + // + // + template <typename C> + struct expected_attribute: schema_exception<C> + { + virtual + ~expected_attribute (); + + expected_attribute (const std::basic_string<C>& expected_namespace, + const std::basic_string<C>& expected_name); + + const std::basic_string<C>& + expected_namespace () const + { + return expected_namespace_; + } + + const std::basic_string<C>& + expected_name () const + { + return expected_name_; + } + + virtual std::basic_string<C> + message () const; + + private: + std::basic_string<C> expected_namespace_; + std::basic_string<C> expected_name_; + }; + + // + // + template <typename C> + struct unexpected_attribute: schema_exception<C> + { + virtual + ~unexpected_attribute (); + + unexpected_attribute ( + const std::basic_string<C>& encountered_namespace, + const std::basic_string<C>& encountered_name); + + + const std::basic_string<C>& + encountered_namespace () const + { + return encountered_namespace_; + } + + const std::basic_string<C>& + encountered_name () const + { + return encountered_name_; + } + + virtual std::basic_string<C> + message () const; + + private: + std::basic_string<C> encountered_namespace_; + std::basic_string<C> encountered_name_; + }; + + + // + // + template <typename C> + struct unexpected_characters: schema_exception<C> + { + virtual + ~unexpected_characters (); + + unexpected_characters (const std::basic_string<C>& s); + + const std::basic_string<C>& + characters () const + { + return characters_; + } + + virtual std::basic_string<C> + message () const; + + private: + std::basic_string<C> characters_; + }; + + // + // + template <typename C> + struct invalid_value: schema_exception<C> + { + virtual + ~invalid_value (); + + invalid_value (const C* type, const std::basic_string<C>& value); + + invalid_value (const C* type, const ro_string<C>& value); + + invalid_value (const std::basic_string<C>& type, + const std::basic_string<C>& value); + + const std::basic_string<C>& + type () const + { + return type_; + } + + const std::basic_string<C>& + value () const + { + return value_; + } + + virtual std::basic_string<C> + message () const; + + private: + std::basic_string<C> type_; + std::basic_string<C> value_; + }; + } + } + } +} + +#include <xsd/cxx/parser/validating/exceptions.txx> + +#endif // XSD_CXX_PARSER_VALIDATING_EXCEPTIONS_HXX + +#include <xsd/cxx/parser/validating/exceptions.ixx> diff --git a/xsd/libxsd/xsd/cxx/parser/validating/exceptions.ixx b/xsd/libxsd/xsd/cxx/parser/validating/exceptions.ixx new file mode 100644 index 0000000..74bb909 --- /dev/null +++ b/xsd/libxsd/xsd/cxx/parser/validating/exceptions.ixx @@ -0,0 +1,163 @@ +// file : xsd/cxx/parser/validating/exceptions.ixx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#if defined(XSD_CXX_PARSER_USE_CHAR) || !defined(XSD_CXX_PARSER_USE_WCHAR) + +#ifndef XSD_CXX_PARSER_VALIDATING_EXCEPTIONS_IXX_CHAR +#define XSD_CXX_PARSER_VALIDATING_EXCEPTIONS_IXX_CHAR + +namespace xsd +{ + namespace cxx + { + namespace parser + { + namespace validating + { + // expected_attribute + // + template<> + inline + std::basic_string<char> expected_attribute<char>:: + message () const + { + std::basic_string<char> r ("expected attribute '"); + r += expected_namespace_; + r += expected_namespace_.empty () ? "" : "#"; + r += expected_name_; + r += "'"; + return r; + } + + // unexpected_attribute + // + template<> + inline + std::basic_string<char> unexpected_attribute<char>:: + message () const + { + std::basic_string<char> r ("unexpected attribute '"); + r += encountered_namespace_; + r += encountered_namespace_.empty () ? "" : "#"; + r += encountered_name_; + r += "'"; + return r; + } + + // unexpected_characters + // + template<> + inline + std::basic_string<char> unexpected_characters<char>:: + message () const + { + std::basic_string<char> r ("unexpected characters '"); + r += characters_; + r += "'"; + return r; + } + + // invalid_value + // + template<> + inline + std::basic_string<char> invalid_value<char>:: + message () const + { + std::basic_string<char> r ("'"); + r += value_; + r += "' is not a valid value representation "; + r += "for type '"; + r += type_; + r += "'"; + return r; + } + } + } + } +} + +#endif // XSD_CXX_PARSER_VALIDATING_EXCEPTIONS_IXX_CHAR +#endif // XSD_CXX_PARSER_USE_CHAR + + +#if defined(XSD_CXX_PARSER_USE_WCHAR) || !defined(XSD_CXX_PARSER_USE_CHAR) + +#ifndef XSD_CXX_PARSER_VALIDATING_EXCEPTIONS_IXX_WCHAR +#define XSD_CXX_PARSER_VALIDATING_EXCEPTIONS_IXX_WCHAR + +namespace xsd +{ + namespace cxx + { + namespace parser + { + namespace validating + { + // expected_attribute + // + template<> + inline + std::basic_string<wchar_t> expected_attribute<wchar_t>:: + message () const + { + std::basic_string<wchar_t> r (L"expected attribute '"); + r += expected_namespace_; + r += expected_namespace_.empty () ? L"" : L"#"; + r += expected_name_; + r += L"'"; + return r; + } + + // unexpected_attribute + // + template<> + inline + std::basic_string<wchar_t> unexpected_attribute<wchar_t>:: + message () const + { + std::basic_string<wchar_t> r (L"unexpected attribute '"); + r += encountered_namespace_; + r += encountered_namespace_.empty () ? L"" : L"#"; + r += encountered_name_; + r += L"'"; + return r; + } + + // unexpected_characters + // + template<> + inline + std::basic_string<wchar_t> unexpected_characters<wchar_t>:: + message () const + { + std::basic_string<wchar_t> r (L"unexpected characters '"); + r += characters_; + r += L"'"; + return r; + } + + // invalid_value + // + template<> + inline + std::basic_string<wchar_t> invalid_value<wchar_t>:: + message () const + { + std::basic_string<wchar_t> r (L"'"); + r += value_; + r += L"' is not a valid value representation "; + r += L"for type '"; + r += type_; + r += L"'"; + return r; + } + } + } + } +} + +#endif // XSD_CXX_PARSER_VALIDATING_EXCEPTIONS_IXX_WCHAR +#endif // XSD_CXX_PARSER_USE_WCHAR diff --git a/xsd/libxsd/xsd/cxx/parser/validating/exceptions.txx b/xsd/libxsd/xsd/cxx/parser/validating/exceptions.txx new file mode 100644 index 0000000..6205215 --- /dev/null +++ b/xsd/libxsd/xsd/cxx/parser/validating/exceptions.txx @@ -0,0 +1,97 @@ +// file : xsd/cxx/parser/validating/exceptions.txx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +namespace xsd +{ + namespace cxx + { + namespace parser + { + namespace validating + { + // expected_attribute + // + template <typename C> + expected_attribute<C>:: + ~expected_attribute () + { + } + + template <typename C> + expected_attribute<C>:: + expected_attribute (const std::basic_string<C>& expected_namespace, + const std::basic_string<C>& expected_name) + : expected_namespace_ (expected_namespace), + expected_name_ (expected_name) + { + } + + // unexpected_attribute + // + template <typename C> + unexpected_attribute<C>:: + ~unexpected_attribute () + { + } + + template <typename C> + unexpected_attribute<C>:: + unexpected_attribute (const std::basic_string<C>& encountered_namespace, + const std::basic_string<C>& encountered_name) + : encountered_namespace_ (encountered_namespace), + encountered_name_ (encountered_name) + { + } + + // unexpected_characters + // + template <typename C> + unexpected_characters<C>:: + ~unexpected_characters () + { + } + + template <typename C> + unexpected_characters<C>:: + unexpected_characters (const std::basic_string<C>& s) + : characters_ (s) + { + } + + // invalid_value + // + template <typename C> + invalid_value<C>:: + ~invalid_value () + { + } + + template <typename C> + invalid_value<C>:: + invalid_value (const C* type, + const std::basic_string<C>& value) + : type_ (type), value_ (value) + { + } + + template <typename C> + invalid_value<C>:: + invalid_value (const C* type, + const ro_string<C>& value) + : type_ (type), value_ (value) + { + } + + template <typename C> + invalid_value<C>:: + invalid_value (const std::basic_string<C>& type, + const std::basic_string<C>& value) + : type_ (type), value_ (value) + { + } + } + } + } +} diff --git a/xsd/libxsd/xsd/cxx/parser/validating/inheritance-map.hxx b/xsd/libxsd/xsd/cxx/parser/validating/inheritance-map.hxx new file mode 100644 index 0000000..d9307b4 --- /dev/null +++ b/xsd/libxsd/xsd/cxx/parser/validating/inheritance-map.hxx @@ -0,0 +1,101 @@ +// file : xsd/cxx/parser/validating/inheritance-map.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_CXX_PARSER_VALIDATING_INHERITANCE_MAP_HXX +#define XSD_CXX_PARSER_VALIDATING_INHERITANCE_MAP_HXX + +#include <map> +#include <cstddef> // std::size_t + +#include <xsd/cxx/ro-string.hxx> + +namespace xsd +{ + namespace cxx + { + namespace parser + { + namespace validating + { + template <typename C> + struct string_comparison + { + bool + operator() (const C* x, const C* y) const + { + ro_string<C> s (x); + return s.compare (y) < 0; + } + }; + + template <typename C> + struct inheritance_map + { + void + insert (const C* derived, const C* base) + { + map_[derived] = base; + } + + void + erase (const C* derived) + { + map_.erase (derived); + } + + bool + check (const C* derived, const ro_string<C>& base) const; + + private: + typedef std::map<const C*, const C*, string_comparison<C> > map; + map map_; + }; + + + // Translation unit initializer. + // + template<typename C> + struct inheritance_map_init + { + static inheritance_map<C>* map; + static std::size_t count; + + inheritance_map_init (); + ~inheritance_map_init (); + }; + + template<typename C> + inheritance_map<C>* inheritance_map_init<C>::map = 0; + + template<typename C> + std::size_t inheritance_map_init<C>::count = 0; + + template<typename C> + inline inheritance_map<C>& + inheritance_map_instance () + { + return *inheritance_map_init<C>::map; + } + + + // Map entry initializer. + // + template<typename C> + struct inheritance_map_entry + { + inheritance_map_entry (const C* derived, const C* base); + ~inheritance_map_entry (); + + private: + const C* derived_; + }; + } + } + } +} + +#include <xsd/cxx/parser/validating/inheritance-map.txx> + +#endif // XSD_CXX_PARSER_VALIDATING_INHERITANCE_MAP_HXX diff --git a/xsd/libxsd/xsd/cxx/parser/validating/inheritance-map.txx b/xsd/libxsd/xsd/cxx/parser/validating/inheritance-map.txx new file mode 100644 index 0000000..1a63e65 --- /dev/null +++ b/xsd/libxsd/xsd/cxx/parser/validating/inheritance-map.txx @@ -0,0 +1,73 @@ +// file : xsd/cxx/parser/validating/inheritance-map.txx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +namespace xsd +{ + namespace cxx + { + namespace parser + { + namespace validating + { + template <typename C> + bool inheritance_map<C>:: + check (const C* derived, const ro_string<C>& base) const + { + if (base == derived) + return true; + + typename map::const_iterator i (map_.find (derived)); + + if (i != map_.end ()) + { + if (base == i->second) + return true; + else + return check (i->second, base); + } + + return false; + } + + // inheritance_map_init + // + template<typename C> + inheritance_map_init<C>:: + inheritance_map_init () + { + if (count == 0) + map = new inheritance_map<C>; + + ++count; + } + + template<typename C> + inheritance_map_init<C>:: + ~inheritance_map_init () + { + if (--count == 0) + delete map; + } + + // inheritance_map_entry + // + template<typename C> + inheritance_map_entry<C>:: + inheritance_map_entry (const C* derived, const C* base) + : derived_ (derived) + { + inheritance_map_instance<C> ().insert (derived, base); + } + + template<typename C> + inheritance_map_entry<C>:: + ~inheritance_map_entry () + { + inheritance_map_instance<C> ().erase (derived_); + } + } + } + } +} diff --git a/xsd/libxsd/xsd/cxx/parser/validating/parser.hxx b/xsd/libxsd/xsd/cxx/parser/validating/parser.hxx new file mode 100644 index 0000000..da297d9 --- /dev/null +++ b/xsd/libxsd/xsd/cxx/parser/validating/parser.hxx @@ -0,0 +1,471 @@ +// file : xsd/cxx/parser/validating/parser.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_CXX_PARSER_VALIDATING_PARSER_HXX +#define XSD_CXX_PARSER_VALIDATING_PARSER_HXX + +#include <stack> +#include <cstddef> // std::size_t +#include <cstring> // std::memcpy + +#include <xsd/cxx/ro-string.hxx> +#include <xsd/cxx/parser/elements.hxx> + +namespace xsd +{ + namespace cxx + { + namespace parser + { + namespace validating + { + // + // + template <typename C> + struct empty_content: parser_base<C> + { + // These functions are called when wildcard content + // is encountered. Use them to handle mixed content + // models, any/anyAttribute, and anyType/anySimpleType. + // By default these functions do nothing. + // + + // The type argument is a type name and namespace from the + // xsi:type attribute in the form "<name> <namespace>" with + // the space and namespace part absent if the type does not + // have a namespace or 0 if xsi:type is not present. + // + virtual void + _start_any_element (const ro_string<C>& ns, + const ro_string<C>& name, + const ro_string<C>* type); + + virtual void + _end_any_element (const ro_string<C>& ns, + const ro_string<C>& name); + + virtual void + _any_attribute (const ro_string<C>& ns, + const ro_string<C>& name, + const ro_string<C>& value); + + virtual void + _any_characters (const ro_string<C>&); + + + // + // + virtual bool + _start_element_impl (const ro_string<C>&, + const ro_string<C>&, + const ro_string<C>*); + + virtual bool + _end_element_impl (const ro_string<C>&, + const ro_string<C>&); + + virtual bool + _attribute_impl (const ro_string<C>&, + const ro_string<C>&, + const ro_string<C>&); + + virtual bool + _characters_impl (const ro_string<C>&); + + + // + // + virtual void + _start_element (const ro_string<C>&, + const ro_string<C>&, + const ro_string<C>*); + + virtual void + _end_element (const ro_string<C>&, + const ro_string<C>&); + + virtual void + _attribute (const ro_string<C>&, + const ro_string<C>&, + const ro_string<C>&); + + virtual void + _characters (const ro_string<C>&); + + + // + // + virtual void + _expected_element (const C* expected_ns, + const C* expected_name); + + virtual void + _expected_element (const C* expected_ns, + const C* expected_name, + const ro_string<C>& encountered_ns, + const ro_string<C>& encountered_name); + + virtual void + _unexpected_element (const ro_string<C>& ns, + const ro_string<C>& name); + + virtual void + _expected_attribute (const C* expected_ns, + const C* expected_name); + + virtual void + _unexpected_attribute (const ro_string<C>& ns, + const ro_string<C>& name, + const ro_string<C>& value); + + virtual void + _unexpected_characters (const ro_string<C>&); + }; + + + // + // + template <typename C> + struct simple_content: empty_content<C> + { + // + // + virtual void + _attribute (const ro_string<C>& ns, + const ro_string<C>& name, + const ro_string<C>& value); + + virtual void + _characters (const ro_string<C>&); + + // + // + virtual bool + _attribute_impl (const ro_string<C>&, + const ro_string<C>&, + const ro_string<C>&); + + // + // + virtual void + _pre_impl (); + + virtual void + _post_impl (); + + + // Implementation callbacks. + // + virtual void + _pre_a_validate (); + + virtual void + _post_a_validate (); + + + // Attribute validation: during phase one we are searching for + // matching attributes (Structures, section 3.4.4, clause 2.1). + // During phase two we are searching for attribute wildcards + // (section 3.4.4, clause 2.2). Both phases run across + // inheritance hierarchy from derived to base for extension + // only. Both functions return true if the match was found and + // validation has been performed. + // + virtual bool + _attribute_impl_phase_one (const ro_string<C>& ns, + const ro_string<C>& name, + const ro_string<C>& value); + + virtual bool + _attribute_impl_phase_two (const ro_string<C>& ns, + const ro_string<C>& name, + const ro_string<C>& value); + }; + + + // + // + template <typename C> + struct complex_content: empty_content<C> + { + // + // + virtual void + _start_element (const ro_string<C>& ns, + const ro_string<C>& name, + const ro_string<C>* type); + + virtual void + _end_element (const ro_string<C>& ns, + const ro_string<C>& name); + + virtual void + _attribute (const ro_string<C>& ns, + const ro_string<C>& name, + const ro_string<C>& value); + + virtual void + _characters (const ro_string<C>&); + + // + // + virtual bool + _attribute_impl (const ro_string<C>&, + const ro_string<C>&, + const ro_string<C>&); + + // + // + virtual void + _pre_impl (); + + virtual void + _post_impl (); + + + // Implementation callbacks. + // + virtual void + _pre_e_validate (); + + virtual void + _post_e_validate (); + + virtual void + _pre_a_validate (); + + virtual void + _post_a_validate (); + + + // Attribute validation: during phase one we are searching for + // matching attributes (Structures, section 3.4.4, clause 2.1). + // During phase two we are searching for attribute wildcards + // (section 3.4.4, clause 2.2). Both phases run across + // inheritance hierarchy from derived to base for extension + // only. Both functions return true if the match was found and + // validation has been performed. + // + virtual bool + _attribute_impl_phase_one (const ro_string<C>& ns, + const ro_string<C>& name, + const ro_string<C>& value); + + virtual bool + _attribute_impl_phase_two (const ro_string<C>& ns, + const ro_string<C>& name, + const ro_string<C>& value); + protected: + struct state + { + state () + : any_ (false), depth_ (0), parser_ (0) + { + } + + bool any_; + std::size_t depth_; + parser_base<C>* parser_; + }; + + // Optimized state stack for non-recursive case (one element). + // + struct state_stack + { + state_stack () + : size_ (0) + { + } + + void + push (const state& s) + { + if (size_ > 0) + rest_.push (top_); + + top_ = s; + ++size_; + } + + void + pop () + { + if (size_ > 1) + { + top_ = rest_.top (); + rest_.pop (); + } + + --size_; + } + + const state& + top () const + { + return top_; + } + + state& + top () + { + return top_; + } + + state& + under_top () + { + return rest_.top (); + } + + private: + state top_; + std::stack<state> rest_; + std::size_t size_; + }; + + state_stack context_; + }; + + // Base for xsd:list. + // + template <typename C> + struct list_base: simple_content<C> + { + virtual void + _xsd_parse_item (const ro_string<C>&) = 0; + + virtual void + _pre_impl (); + + virtual void + _characters (const ro_string<C>&); + + virtual void + _post_impl (); + + protected: + std::basic_string<C> buf_; + }; + } + + // POD stack with pre-allocated first element. You may + // need to pad your elements to get the proper alignment. + // + struct pod_stack + { + ~pod_stack () + { + delete[] data_; + } + + pod_stack (std::size_t element_size, void* first_element) + : el_size_ (element_size), first_ (first_element), + data_ (0), size_ (0), capacity_ (0) + { + } + + public: + void + pop () + { + --size_; + } + + void + push () + { + if (size_ > capacity_) + grow (); + + ++size_; + } + + void* + top () + { + return size_ == 1 ? first_ : data_ + (size_ - 1) * el_size_; + } + + void* + under_top () + { + return size_ == 2 ? first_ : data_ + (size_ - 2) * el_size_; + } + + std::size_t + element_size () const + { + return el_size_; + } + + private: + void + grow () + { + std::size_t c (capacity_ ? capacity_ * 2 : 8); + char* d (new char[c * el_size_]); + + if (size_ > 1) + std::memcpy (d, data_, (size_ - 1) * el_size_); + + delete[] data_; + + data_ = d; + capacity_ = c; + } + + private: + std::size_t el_size_; + void* first_; + char* data_; + std::size_t size_; + std::size_t capacity_; + }; + + namespace validating + { + // Validation state stack for the 'all' particle. + // + struct all_stack + { + all_stack (std::size_t n, unsigned char* first) + : stack_ (n, first) + { + } + + void + push () + { + stack_.push (); + + unsigned char* p (static_cast<unsigned char*> (stack_.top ())); + + for (std::size_t i (0); i < stack_.element_size (); ++i) + p[i] = 0; + } + + void + pop () + { + stack_.pop (); + } + + unsigned char* + top () + { + return static_cast<unsigned char*> (stack_.top ()); + } + + private: + pod_stack stack_; + }; + } + } + } +} + +#include <xsd/cxx/parser/validating/parser.txx> + +#endif // XSD_CXX_PARSER_VALIDATING_PARSER_HXX diff --git a/xsd/libxsd/xsd/cxx/parser/validating/parser.txx b/xsd/libxsd/xsd/cxx/parser/validating/parser.txx new file mode 100644 index 0000000..d447725 --- /dev/null +++ b/xsd/libxsd/xsd/cxx/parser/validating/parser.txx @@ -0,0 +1,667 @@ +// file : xsd/cxx/parser/validating/parser.txx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <cassert> + +#include <xsd/cxx/xml/bits/literals.hxx> +#include <xsd/cxx/parser/validating/exceptions.hxx> + +namespace xsd +{ + namespace cxx + { + namespace parser + { + namespace validating + { + + // empty_content + // + + + template <typename C> + void empty_content<C>:: + _start_any_element (const ro_string<C>&, + const ro_string<C>&, + const ro_string<C>*) + { + } + + template <typename C> + void empty_content<C>:: + _end_any_element (const ro_string<C>&, + const ro_string<C>&) + { + } + + template <typename C> + void empty_content<C>:: + _any_attribute (const ro_string<C>&, + const ro_string<C>&, + const ro_string<C>&) + { + } + + template <typename C> + void empty_content<C>:: + _any_characters (const ro_string<C>&) + { + } + + // + // + template <typename C> + bool empty_content<C>:: + _start_element_impl (const ro_string<C>&, + const ro_string<C>&, + const ro_string<C>*) + { + return false; + } + + template <typename C> + bool empty_content<C>:: + _end_element_impl (const ro_string<C>&, + const ro_string<C>&) + { + return false; + } + + template <typename C> + bool empty_content<C>:: + _attribute_impl (const ro_string<C>&, + const ro_string<C>&, + const ro_string<C>&) + { + return false; + } + + template <typename C> + bool empty_content<C>:: + _characters_impl (const ro_string<C>&) + { + return false; + } + + // + // + template <typename C> + void empty_content<C>:: + _start_element (const ro_string<C>& ns, + const ro_string<C>& name, + const ro_string<C>* type) + { + if (!this->_start_element_impl (ns, name, type)) + this->_unexpected_element (ns, name); + } + + template <typename C> + void empty_content<C>:: + _end_element (const ro_string<C>& ns, + const ro_string<C>& name) + { + if (!this->_end_element_impl (ns, name)) + this->_unexpected_element (ns, name); + } + + template <typename C> + void empty_content<C>:: + _attribute (const ro_string<C>& ns, + const ro_string<C>& name, + const ro_string<C>& value) + { + // Weed out special attributes: xsi:type, xsi:nil, + // xsi:schemaLocation and noNamespaceSchemaLocation. + // See section 3.2.7 in Structures for details. + // + if (ns == xml::bits::xsi_namespace<C> () && + (name == xml::bits::type<C> () || + name == xml::bits::nil_lit<C> () || + name == xml::bits::schema_location<C> () || + name == xml::bits::no_namespace_schema_location<C> ())) + return; + + // Also some parsers (notably Xerces-C++) supplies us with + // namespace-prefix mapping attributes. + // + if (ns == xml::bits::xmlns_namespace<C> ()) + return; + + if (!this->_attribute_impl (ns, name, value)) + this->_unexpected_attribute (ns, name, value); + } + + template <typename C> + void empty_content<C>:: + _characters (const ro_string<C>& s) + { + if (!this->_characters_impl (s)) + this->_unexpected_characters (s); + } + + // + // + template <typename C> + void empty_content<C>:: + _expected_element (const C* ex_ns, const C* ex_name) + { + throw expected_element<C> (ex_ns, ex_name); + } + + template <typename C> + void empty_content<C>:: + _expected_element (const C* ex_ns, + const C* ex_name, + const ro_string<C>& en_ns, + const ro_string<C>& en_name) + { + throw expected_element<C> (ex_ns, ex_name, en_ns, en_name); + } + + template <typename C> + void empty_content<C>:: + _unexpected_element (const ro_string<C>& ns, + const ro_string<C>& name) + { + throw unexpected_element<C> (ns, name); + } + + template <typename C> + void empty_content<C>:: + _expected_attribute (const C* ex_ns, const C* ex_name) + { + throw expected_attribute<C> (ex_ns, ex_name); + } + + template <typename C> + void empty_content<C>:: + _unexpected_attribute (const ro_string<C>& ns, + const ro_string<C>& name, + const ro_string<C>&) + { + throw unexpected_attribute<C> (ns, name); + } + + template <typename C> + void empty_content<C>:: + _unexpected_characters (const ro_string<C>& s) + { + throw unexpected_characters<C> (s); + } + + + // simple_content + // + + template <typename C> + void simple_content<C>:: + _attribute (const ro_string<C>& ns, + const ro_string<C>& name, + const ro_string<C>& value) + { + // Weed out special attributes: xsi:type, xsi:nil, + // xsi:schemaLocation and xsi:noNamespaceSchemaLocation. + // See section 3.2.7 in Structures for details. + // + if (ns == xml::bits::xsi_namespace<C> () && + (name == xml::bits::type<C> () || + name == xml::bits::nil_lit<C> () || + name == xml::bits::schema_location<C> () || + name == xml::bits::no_namespace_schema_location<C> ())) + return; + + // Also some parsers (notably Xerces-C++) supplies us with + // namespace-prefix mapping attributes. + // + if (ns == xml::bits::xmlns_namespace<C> ()) + return; + + if (!this->_attribute_impl (ns, name, value)) + this->_unexpected_attribute (ns, name, value); + } + + template <typename C> + void simple_content<C>:: + _characters (const ro_string<C>& str) + { + if (!this->_characters_impl (str)) + { + // Mixed content is implemented in the generated code + // by overriding _characters_impl and forwarding to + // _any_characters. + // + + // Scan the string for any non-whitespace characters + // (Structures, section 3.4.4, clause 1.3). + // + for (typename ro_string<C>::size_type i (0), e (str.size ()); + i < e; ++i) + { + C c (str[i]); + + if (c != C (0x20) && // space + c != C (0x0D) && // carriage return + c != C (0x09) && // tab + c != C (0x0A)) + this->_unexpected_characters (str); + } + } + } + + template <typename C> + void simple_content<C>:: + _pre_impl () + { + this->_pre (); + _pre_a_validate (); + } + + template <typename C> + void simple_content<C>:: + _post_impl () + { + _post_a_validate (); + this->_post (); + } + + template <typename C> + void simple_content<C>:: + _pre_a_validate () + { + } + + template <typename C> + void simple_content<C>:: + _post_a_validate () + { + } + + template <typename C> + bool simple_content<C>:: + _attribute_impl (const ro_string<C>& ns, + const ro_string<C>& name, + const ro_string<C>& value) + { + return _attribute_impl_phase_one (ns, name, value) || + _attribute_impl_phase_two (ns, name, value); + } + + template <typename C> + bool simple_content<C>:: + _attribute_impl_phase_one (const ro_string<C>&, + const ro_string<C>&, + const ro_string<C>&) + { + return false; + } + + template <typename C> + bool simple_content<C>:: + _attribute_impl_phase_two (const ro_string<C>&, + const ro_string<C>&, + const ro_string<C>&) + { + return false; + } + + + // complex_content + // + + + template <typename C> + void complex_content<C>:: + _start_element (const ro_string<C>& ns, + const ro_string<C>& name, + const ro_string<C>* type) + { + state& s (context_.top ()); + + if (s.depth_++ > 0) + { + if (s.any_) + this->_start_any_element (ns, name, type); + else if (s.parser_) + s.parser_->_start_element (ns, name, type); + } + else + { + if (!this->_start_element_impl (ns, name, type)) + this->_unexpected_element (ns, name); + else if (s.parser_ != 0) + s.parser_->_pre_impl (); + } + } + + template <typename C> + void complex_content<C>:: + _end_element (const ro_string<C>& ns, + const ro_string<C>& name) + { + // To understand what's going on here it is helpful to think of + // a "total depth" as being the sum of individual depths over + // all elements. + // + + if (context_.top ().depth_ == 0) + { + state& s (context_.under_top ()); // One before last. + + if (--s.depth_ > 0) + { + // Indirect recursion. + // + if (s.parser_) + s.parser_->_end_element (ns, name); + } + else + { + // Direct recursion. + // + assert (this == s.parser_); + + this->_post_impl (); + + if (!this->_end_element_impl (ns, name)) + assert (false); + } + } + else + { + state& s (context_.top ()); + + if (--s.depth_ > 0) + { + if (s.any_) + this->_end_any_element (ns, name); + else if (s.parser_) + s.parser_->_end_element (ns, name); + } + else + { + if (s.parser_ != 0 && !s.any_) + s.parser_->_post_impl (); + + if (!this->_end_element_impl (ns, name)) + this->_unexpected_element (ns, name); + } + } + } + + template <typename C> + void complex_content<C>:: + _attribute (const ro_string<C>& ns, + const ro_string<C>& name, + const ro_string<C>& value) + { + // Weed out special attributes: xsi:type, xsi:nil, + // xsi:schemaLocation and xsi:noNamespaceSchemaLocation. + // See section 3.2.7 in Structures for details. + // + if (ns == xml::bits::xsi_namespace<C> () && + (name == xml::bits::type<C> () || + name == xml::bits::nil_lit<C> () || + name == xml::bits::schema_location<C> () || + name == xml::bits::no_namespace_schema_location<C> ())) + return; + + // Also some parsers (notably Xerces-C++) supplies us with + // namespace-prefix mapping attributes. + // + if (ns == xml::bits::xmlns_namespace<C> ()) + return; + + const state& s (context_.top ()); + + if (s.depth_ > 0) + { + if (s.any_) + this->_any_attribute (ns, name, value); + else if (s.parser_) + s.parser_->_attribute (ns, name, value); + } + else + { + if (!this->_attribute_impl (ns, name, value)) + this->_unexpected_attribute (ns, name, value); + } + } + + template <typename C> + void complex_content<C>:: + _characters (const ro_string<C>& str) + { + const state& s (context_.top ()); + + if (s.depth_ > 0) + { + if (s.any_) + this->_any_characters (str); + else if (s.parser_) + s.parser_->_characters (str); + } + else + { + if (!this->_characters_impl (str)) + { + // Mixed content is implemented in the generated code + // by overriding _characters_impl and forwarding to + // _any_characters. + // + + // Scan the string for any non-whitespace characters + // (Structures, section 3.4.4, clause 1.3). + // + for (typename ro_string<C>::size_type i (0), e (str.size ()); + i < e; ++i) + { + C c (str[i]); + + if (c != C (0x20) && // space + c != C (0x0D) && // carriage return + c != C (0x09) && // tab + c != C (0x0A)) + this->_unexpected_characters (str); + } + } + } + } + + template <typename C> + void complex_content<C>:: + _pre_impl () + { + context_.push (state ()); + this->_pre (); + _pre_a_validate (); + _pre_e_validate (); + } + + template <typename C> + void complex_content<C>:: + _post_impl () + { + _post_e_validate (); + _post_a_validate (); + this->_post (); + context_.pop (); + } + + template <typename C> + void complex_content<C>:: + _pre_e_validate () + { + } + + template <typename C> + void complex_content<C>:: + _post_e_validate () + { + } + + template <typename C> + void complex_content<C>:: + _pre_a_validate () + { + } + + template <typename C> + void complex_content<C>:: + _post_a_validate () + { + } + + template <typename C> + bool complex_content<C>:: + _attribute_impl (const ro_string<C>& ns, + const ro_string<C>& name, + const ro_string<C>& value) + { + return _attribute_impl_phase_one (ns, name, value) || + _attribute_impl_phase_two (ns, name, value); + } + + template <typename C> + bool complex_content<C>:: + _attribute_impl_phase_one (const ro_string<C>&, + const ro_string<C>&, + const ro_string<C>&) + { + return false; + } + + template <typename C> + bool complex_content<C>:: + _attribute_impl_phase_two (const ro_string<C>&, + const ro_string<C>&, + const ro_string<C>&) + { + return false; + } + + + // list_base + // + namespace bits + { + // Find first non-space character. + // + template <typename C> + typename ro_string<C>::size_type + find_ns (const C* s, + typename ro_string<C>::size_type size, + typename ro_string<C>::size_type pos) + { + while (pos < size && + (s[pos] == C (0x20) || s[pos] == C (0x0A) || + s[pos] == C (0x0D) || s[pos] == C (0x09))) + ++pos; + + return pos < size ? pos : ro_string<C>::npos; + } + + // Find first space character. + // + template <typename C> + typename ro_string<C>::size_type + find_s (const C* s, + typename ro_string<C>::size_type size, + typename ro_string<C>::size_type pos) + { + while (pos < size && + s[pos] != C (0x20) && s[pos] != C (0x0A) && + s[pos] != C (0x0D) && s[pos] != C (0x09)) + ++pos; + + return pos < size ? pos : ro_string<C>::npos; + } + } + + // Relevant XML Schema Part 2: Datatypes sections: 4.2.1.2, 4.3.6. + // + + template <typename C> + void list_base<C>:: + _pre_impl () + { + simple_content<C>::_pre_impl (); + buf_.clear (); + } + + template <typename C> + void list_base<C>:: + _characters (const ro_string<C>& s) + { + typedef typename ro_string<C>::size_type size_type; + + const C* data (s.data ()); + size_type size (s.size ()); + + // Handle the previous chunk if we start with a ws. + // + if (!buf_.empty () && + (data[0] == C (0x20) || data[0] == C (0x0A) || + data[0] == C (0x0D) || data[0] == C (0x09))) + { + ro_string<C> tmp (buf_); // Private copy ctor. + _xsd_parse_item (tmp); + buf_.clear (); + } + + // Traverse the data while logically collapsing spaces. + // + for (size_type i (bits::find_ns (data, size, 0)); + i != ro_string<C>::npos;) + { + size_type j (bits::find_s (data, size, i)); + + if (j != ro_string<C>::npos) + { + if (buf_.empty ()) + { + ro_string<C> tmp (data + i, j - i); // Private copy ctor. + _xsd_parse_item (tmp); + } + else + { + // Assemble the first item in str from buf_ and s. + // + std::basic_string<C> str; + str.swap (buf_); + str.append (data + i, j - i); + ro_string<C> tmp (str); // Private copy ctor. + _xsd_parse_item (tmp); + } + + i = bits::find_ns (data, size, j); + } + else + { + // Last fragment, append it to the buf_. + // + buf_.append (data + i, size - i); + break; + } + } + } + + template <typename C> + void list_base<C>:: + _post_impl () + { + // Handle the last item. + // + if (!buf_.empty ()) + { + ro_string<C> tmp (buf_); // Private copy ctor. + _xsd_parse_item (tmp); + } + + simple_content<C>::_post_impl (); + } + } + } + } +} diff --git a/xsd/libxsd/xsd/cxx/parser/validating/xml-schema-pimpl.hxx b/xsd/libxsd/xsd/cxx/parser/validating/xml-schema-pimpl.hxx new file mode 100644 index 0000000..619a8c7 --- /dev/null +++ b/xsd/libxsd/xsd/cxx/parser/validating/xml-schema-pimpl.hxx @@ -0,0 +1,1121 @@ +// file : xsd/cxx/parser/validating/xml-schema-pimpl.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_CXX_PARSER_VALIDATING_XML_SCHEMA_PIMPL_HXX +#define XSD_CXX_PARSER_VALIDATING_XML_SCHEMA_PIMPL_HXX + +#include <string> + +#include <xsd/cxx/parser/validating/xml-schema-pskel.hxx> + +namespace xsd +{ + namespace cxx + { + namespace parser + { + namespace validating + { + // any_type + // + template <typename C> + struct any_type_pimpl: virtual any_type_pskel<C> + { + virtual void + post_any_type (); + }; + + // any_simple_type + // + template <typename C> + struct any_simple_type_pimpl: virtual any_simple_type_pskel<C> + { + virtual void + post_any_simple_type (); + }; + + // boolean + // + template <typename C> + struct boolean_pimpl: virtual boolean_pskel<C> + { + virtual void + _pre (); + + virtual void + _characters (const ro_string<C>&); + + virtual void + _post (); + + virtual bool + post_boolean (); + + protected: + std::basic_string<C> str_; + bool value_; + }; + + + // 8-bit + // + template <typename C> + struct byte_pimpl: virtual byte_pskel<C> + { + virtual void + _pre (); + + virtual void + _characters (const ro_string<C>&); + + virtual void + _post (); + + virtual signed char + post_byte (); + + protected: + std::basic_string<C> str_; + signed char value_; + }; + + + template <typename C> + struct unsigned_byte_pimpl: virtual unsigned_byte_pskel<C> + { + virtual void + _pre (); + + virtual void + _characters (const ro_string<C>&); + + virtual void + _post (); + + virtual unsigned char + post_unsigned_byte (); + + protected: + std::basic_string<C> str_; + unsigned char value_; + }; + + + // 16-bit + // + template <typename C> + struct short_pimpl: virtual short_pskel<C> + { + virtual void + _pre (); + + virtual void + _characters (const ro_string<C>&); + + virtual void + _post (); + + virtual short + post_short (); + + protected: + std::basic_string<C> str_; + short value_; + }; + + + template <typename C> + struct unsigned_short_pimpl: virtual unsigned_short_pskel<C> + { + virtual void + _pre (); + + virtual void + _characters (const ro_string<C>&); + + virtual void + _post (); + + virtual unsigned short + post_unsigned_short (); + + protected: + std::basic_string<C> str_; + unsigned short value_; + }; + + + // 32-bit + // + template <typename C> + struct int_pimpl: virtual int_pskel<C> + { + virtual void + _pre (); + + virtual void + _characters (const ro_string<C>&); + + virtual void + _post (); + + virtual int + post_int (); + + protected: + std::basic_string<C> str_; + int value_; + }; + + + template <typename C> + struct unsigned_int_pimpl: virtual unsigned_int_pskel<C> + { + virtual void + _pre (); + + virtual void + _characters (const ro_string<C>&); + + virtual void + _post (); + + virtual unsigned int + post_unsigned_int (); + + protected: + std::basic_string<C> str_; + unsigned int value_; + }; + + + // 64-bit + // + template <typename C> + struct long_pimpl: virtual long_pskel<C> + { + virtual void + _pre (); + + virtual void + _characters (const ro_string<C>&); + + virtual void + _post (); + + virtual long long + post_long (); + + protected: + std::basic_string<C> str_; + long long value_; + }; + + + template <typename C> + struct unsigned_long_pimpl: virtual unsigned_long_pskel<C> + { + virtual void + _pre (); + + virtual void + _characters (const ro_string<C>&); + + virtual void + _post (); + + virtual unsigned long long + post_unsigned_long (); + + protected: + std::basic_string<C> str_; + unsigned long long value_; + }; + + + // Arbitrary-length integers. + // + template <typename C> + struct integer_pimpl: virtual integer_pskel<C> + { + virtual void + _pre (); + + virtual void + _characters (const ro_string<C>&); + + virtual void + _post (); + + virtual long long + post_integer (); + + protected: + std::basic_string<C> str_; + long long value_; + }; + + template <typename C> + struct negative_integer_pimpl: virtual negative_integer_pskel<C> + { + virtual void + _pre (); + + virtual void + _characters (const ro_string<C>&); + + virtual void + _post (); + + virtual long long + post_negative_integer (); + + protected: + std::basic_string<C> str_; + long long value_; + }; + + template <typename C> + struct non_positive_integer_pimpl: virtual non_positive_integer_pskel<C> + { + virtual void + _pre (); + + virtual void + _characters (const ro_string<C>&); + + virtual void + _post (); + + virtual long long + post_non_positive_integer (); + + protected: + std::basic_string<C> str_; + long long value_; + }; + + template <typename C> + struct positive_integer_pimpl: virtual positive_integer_pskel<C> + { + virtual void + _pre (); + + virtual void + _characters (const ro_string<C>&); + + virtual void + _post (); + + virtual unsigned long long + post_positive_integer (); + + protected: + std::basic_string<C> str_; + unsigned long long value_; + }; + + template <typename C> + struct non_negative_integer_pimpl: virtual non_negative_integer_pskel<C> + { + virtual void + _pre (); + + virtual void + _characters (const ro_string<C>&); + + virtual void + _post (); + + virtual unsigned long long + post_non_negative_integer (); + + protected: + std::basic_string<C> str_; + unsigned long long value_; + }; + + + // Floats. + // + template <typename C> + struct float_pimpl: virtual float_pskel<C> + { + virtual void + _pre (); + + virtual void + _characters (const ro_string<C>&); + + virtual void + _post (); + + virtual float + post_float (); + + protected: + std::basic_string<C> str_; + float value_; + }; + + + template <typename C> + struct double_pimpl: virtual double_pskel<C> + { + virtual void + _pre (); + + virtual void + _characters (const ro_string<C>&); + + virtual void + _post (); + + virtual double + post_double (); + + protected: + std::basic_string<C> str_; + double value_; + }; + + + template <typename C> + struct decimal_pimpl: virtual decimal_pskel<C> + { + virtual void + _pre (); + + virtual void + _characters (const ro_string<C>&); + + virtual void + _post (); + + virtual double + post_decimal (); + + protected: + std::basic_string<C> str_; + double value_; + }; + + + // Strings. + // + template <typename C> + struct string_pimpl: virtual string_pskel<C> + { + virtual void + _pre (); + + virtual void + _characters (const ro_string<C>&); + + virtual std::basic_string<C> + post_string (); + + protected: + std::basic_string<C> str_; + }; + + template <typename C> + struct normalized_string_pimpl: virtual normalized_string_pskel<C> + { + virtual void + _pre (); + + virtual void + _characters (const ro_string<C>&); + + virtual std::basic_string<C> + post_normalized_string (); + + protected: + std::basic_string<C> str_; + }; + + template <typename C> + struct token_pimpl: virtual token_pskel<C> + { + virtual void + _pre (); + + virtual void + _characters (const ro_string<C>&); + + virtual std::basic_string<C> + post_token (); + + protected: + std::basic_string<C> str_; + }; + + template <typename C> + struct name_pimpl: virtual name_pskel<C> + { + virtual void + _pre (); + + virtual void + _characters (const ro_string<C>&); + + virtual void + _post (); + + virtual std::basic_string<C> + post_name (); + + protected: + std::basic_string<C> str_; + }; + + template <typename C> + struct nmtoken_pimpl: virtual nmtoken_pskel<C> + { + virtual void + _pre (); + + virtual void + _characters (const ro_string<C>&); + + virtual void + _post (); + + virtual std::basic_string<C> + post_nmtoken (); + + protected: + std::basic_string<C> str_; + }; + + template <typename C> + struct nmtokens_pimpl: virtual nmtokens_pskel<C> + { + virtual void + _pre (); + + virtual void + _xsd_parse_item (const ro_string<C>&); + + virtual void + _post (); + + virtual string_sequence<C> + post_nmtokens (); + + protected: + string_sequence<C> seq_; + nmtoken_pimpl<C> parser_; + }; + + template <typename C> + struct ncname_pimpl: virtual ncname_pskel<C> + { + virtual void + _pre (); + + virtual void + _characters (const ro_string<C>&); + + virtual void + _post (); + + virtual std::basic_string<C> + post_ncname (); + + protected: + std::basic_string<C> str_; + }; + + template <typename C> + struct id_pimpl: virtual id_pskel<C> + { + virtual void + _pre (); + + virtual void + _characters (const ro_string<C>&); + + virtual void + _post (); + + virtual std::basic_string<C> + post_id (); + + protected: + std::basic_string<C> str_; + }; + + template <typename C> + struct idref_pimpl: virtual idref_pskel<C> + { + virtual void + _pre (); + + virtual void + _characters (const ro_string<C>&); + + virtual void + _post (); + + virtual std::basic_string<C> + post_idref (); + + protected: + std::basic_string<C> str_; + }; + + template <typename C> + struct idrefs_pimpl: virtual idrefs_pskel<C> + { + virtual void + _pre (); + + virtual void + _xsd_parse_item (const ro_string<C>&); + + virtual void + _post (); + + virtual string_sequence<C> + post_idrefs (); + + protected: + string_sequence<C> seq_; + idref_pimpl<C> parser_; + }; + + // language + // + template <typename C> + struct language_pimpl: virtual language_pskel<C> + { + virtual void + _pre (); + + virtual void + _characters (const ro_string<C>&); + + virtual void + _post (); + + virtual std::basic_string<C> + post_language (); + + protected: + std::basic_string<C> str_; + }; + + // anyURI + // + template <typename C> + struct uri_pimpl: virtual uri_pskel<C> + { + virtual void + _pre (); + + virtual void + _characters (const ro_string<C>&); + + virtual std::basic_string<C> + post_uri (); + + protected: + std::basic_string<C> str_; + }; + + // QName + // + template <typename C> + struct qname_pimpl: virtual qname_pskel<C> + { + virtual void + _pre (); + + virtual void + _characters (const ro_string<C>&); + + virtual void + _post (); + + virtual qname<C> + post_qname (); + + protected: + std::basic_string<C> str_; + std::basic_string<C> name_; + std::basic_string<C> prefix_; + }; + + // base64Binary + // + template <typename C> + struct base64_binary_pimpl: virtual base64_binary_pskel<C> + { + virtual void + _pre (); + + virtual void + _characters (const ro_string<C>&); + + virtual void + _post (); + + virtual std::auto_ptr<buffer> + post_base64_binary (); + + protected: + std::basic_string<C> str_; + std::auto_ptr<buffer> buf_; + }; + + // hexBinary + // + template <typename C> + struct hex_binary_pimpl: virtual hex_binary_pskel<C> + { + virtual void + _pre (); + + virtual void + _characters (const ro_string<C>&); + + virtual void + _post (); + + virtual std::auto_ptr<buffer> + post_hex_binary (); + + protected: + std::basic_string<C> str_; + std::auto_ptr<buffer> buf_; + }; + + // gday + // + template <typename C> + struct gday_pimpl: virtual gday_pskel<C> + { + virtual void + _pre (); + + virtual void + _characters (const ro_string<C>&); + + virtual void + _post (); + + virtual gday + post_gday (); + + protected: + std::basic_string<C> str_; + unsigned short day_; + bool z_; + short zh_, zm_; + }; + + // gmonth + // + template <typename C> + struct gmonth_pimpl: virtual gmonth_pskel<C> + { + virtual void + _pre (); + + virtual void + _characters (const ro_string<C>&); + + virtual void + _post (); + + virtual gmonth + post_gmonth (); + + protected: + std::basic_string<C> str_; + unsigned short month_; + bool z_; + short zh_, zm_; + }; + + // gyear + // + template <typename C> + struct gyear_pimpl: virtual gyear_pskel<C> + { + virtual void + _pre (); + + virtual void + _characters (const ro_string<C>&); + + virtual void + _post (); + + virtual gyear + post_gyear (); + + protected: + std::basic_string<C> str_; + int year_; + bool z_; + short zh_, zm_; + }; + + // gmonth_day + // + template <typename C> + struct gmonth_day_pimpl: virtual gmonth_day_pskel<C> + { + virtual void + _pre (); + + virtual void + _characters (const ro_string<C>&); + + virtual void + _post (); + + virtual gmonth_day + post_gmonth_day (); + + protected: + std::basic_string<C> str_; + unsigned short month_; + unsigned short day_; + bool z_; + short zh_, zm_; + }; + + // gyear_month + // + template <typename C> + struct gyear_month_pimpl: virtual gyear_month_pskel<C> + { + virtual void + _pre (); + + virtual void + _characters (const ro_string<C>&); + + virtual void + _post (); + + virtual gyear_month + post_gyear_month (); + + protected: + std::basic_string<C> str_; + int year_; + unsigned short month_; + bool z_; + short zh_, zm_; + }; + + // date + // + template <typename C> + struct date_pimpl: virtual date_pskel<C> + { + virtual void + _pre (); + + virtual void + _characters (const ro_string<C>&); + + virtual void + _post (); + + virtual date + post_date (); + + protected: + std::basic_string<C> str_; + int year_; + unsigned short month_; + unsigned short day_; + bool z_; + short zh_, zm_; + }; + + // time + // + template <typename C> + struct time_pimpl: virtual time_pskel<C> + { + virtual void + _pre (); + + virtual void + _characters (const ro_string<C>&); + + virtual void + _post (); + + virtual time + post_time (); + + protected: + std::basic_string<C> str_; + unsigned short hours_; + unsigned short minutes_; + double seconds_; + bool z_; + short zh_, zm_; + }; + + // date_time + // + template <typename C> + struct date_time_pimpl: virtual date_time_pskel<C> + { + virtual void + _pre (); + + virtual void + _characters (const ro_string<C>&); + + virtual void + _post (); + + virtual date_time + post_date_time (); + + protected: + std::basic_string<C> str_; + int year_; + unsigned short month_; + unsigned short day_; + unsigned short hours_; + unsigned short minutes_; + double seconds_; + bool z_; + short zh_, zm_; + }; + + // duration + // + template <typename C> + struct duration_pimpl: virtual duration_pskel<C> + { + virtual void + _pre (); + + virtual void + _characters (const ro_string<C>&); + + virtual void + _post (); + + virtual duration + post_duration (); + + protected: + std::basic_string<C> str_; + bool negative_; + unsigned int years_; + unsigned int months_; + unsigned int days_; + unsigned int hours_; + unsigned int minutes_; + double seconds_; + }; + + // Literals. + // + namespace bits + { + template<typename C> + const C* + boolean (); + + template<typename C> + const C* + byte (); + + template<typename C> + const C* + unsigned_byte (); + + template<typename C> + const C* + short_ (); + + template<typename C> + const C* + unsigned_short (); + + template<typename C> + const C* + int_ (); + + template<typename C> + const C* + unsigned_int (); + + template<typename C> + const C* + long_ (); + + template<typename C> + const C* + unsigned_long (); + + template<typename C> + const C* + integer (); + + template<typename C> + const C* + negative_integer (); + + template<typename C> + const C* + non_positive_integer (); + + template<typename C> + const C* + non_negative_integer (); + + template<typename C> + const C* + positive_integer (); + + template<typename C> + const C* + float_ (); + + template<typename C> + const C* + double_ (); + + template<typename C> + const C* + decimal (); + + template<typename C> + const C* + name (); + + template<typename C> + const C* + nmtoken (); + + template<typename C> + const C* + nmtokens (); + + template<typename C> + const C* + ncname (); + + template<typename C> + const C* + id (); + + template<typename C> + const C* + idref (); + + template<typename C> + const C* + idrefs (); + + template<typename C> + const C* + language (); + + template<typename C> + const C* + qname (); + + template<typename C> + const C* + base64_binary (); + + template<typename C> + const C* + hex_binary (); + + template<typename C> + const C* + gday (); + + template<typename C> + const C* + gmonth (); + + template<typename C> + const C* + gyear (); + + template<typename C> + const C* + gmonth_day (); + + template<typename C> + const C* + gyear_month (); + + template<typename C> + const C* + date (); + + template<typename C> + const C* + time (); + + template<typename C> + const C* + date_time (); + + template<typename C> + const C* + duration (); + + // float literals: INF -INF NaN + // + template<typename C> + const C* + positive_inf (); + + template<typename C> + const C* + negative_inf (); + + template<typename C> + const C* + nan (); + + // boolean literals + // + template<typename C> + const C* + true_ (); + + template<typename C> + const C* + false_ (); + + template<typename C> + const C* + one (); + + template<typename C> + const C* + zero (); + } + } + } + } +} + +#include <xsd/cxx/parser/validating/xml-schema-pimpl.txx> + +#endif // XSD_CXX_PARSER_VALIDATING_XML_SCHEMA_PIMPL_HXX + +#include <xsd/cxx/parser/validating/xml-schema-pimpl.ixx> diff --git a/xsd/libxsd/xsd/cxx/parser/validating/xml-schema-pimpl.ixx b/xsd/libxsd/xsd/cxx/parser/validating/xml-schema-pimpl.ixx new file mode 100644 index 0000000..c6f8127 --- /dev/null +++ b/xsd/libxsd/xsd/cxx/parser/validating/xml-schema-pimpl.ixx @@ -0,0 +1,676 @@ +// file : xsd/cxx/parser/validating/xml-schema-pimpl.ixx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#if defined(XSD_CXX_PARSER_USE_CHAR) || !defined(XSD_CXX_PARSER_USE_WCHAR) + +#ifndef XSD_CXX_PARSER_VALIDATING_XML_SCHEMA_PIMPL_IXX_CHAR +#define XSD_CXX_PARSER_VALIDATING_XML_SCHEMA_PIMPL_IXX_CHAR + +namespace xsd +{ + namespace cxx + { + namespace parser + { + namespace validating + { + namespace bits + { + template<> + inline const char* + boolean<char> () + { + return "boolean"; + } + + template<> + inline const char* + byte<char> () + { + return "byte"; + } + + template<> + inline const char* + unsigned_byte<char> () + { + return "unsignedByte"; + } + + template<> + inline const char* + short_<char> () + { + return "short"; + } + + template<> + inline const char* + unsigned_short<char> () + { + return "unsignedShort"; + } + + template<> + inline const char* + int_<char> () + { + return "int"; + } + + template<> + inline const char* + unsigned_int<char> () + { + return "unsignedInt"; + } + + template<> + inline const char* + long_<char> () + { + return "long"; + } + + template<> + inline const char* + unsigned_long<char> () + { + return "unsignedLong"; + } + + template<> + inline const char* + integer<char> () + { + return "integer"; + } + + template<> + inline const char* + negative_integer<char> () + { + return "negativeInteger"; + } + + template<> + inline const char* + non_positive_integer<char> () + { + return "nonPositiveInteger"; + } + + template<> + inline const char* + non_negative_integer<char> () + { + return "nonNegativeInteger"; + } + + template<> + inline const char* + positive_integer<char> () + { + return "positiveInteger"; + } + + template<> + inline const char* + float_<char> () + { + return "float"; + } + + template<> + inline const char* + double_<char> () + { + return "double"; + } + + template<> + inline const char* + decimal<char> () + { + return "decimal"; + } + + template<> + inline const char* + name<char> () + { + return "Name"; + } + + template<> + inline const char* + nmtoken<char> () + { + return "NMTOKEN"; + } + + template<> + inline const char* + nmtokens<char> () + { + return "NMTOKENS"; + } + + template<> + inline const char* + ncname<char> () + { + return "NCName"; + } + + template<> + inline const char* + id<char> () + { + return "ID"; + } + + template<> + inline const char* + idref<char> () + { + return "IDREF"; + } + + template<> + inline const char* + idrefs<char> () + { + return "IDREFS"; + } + + template<> + inline const char* + language<char> () + { + return "language"; + } + + template<> + inline const char* + qname<char> () + { + return "QName"; + } + + template<> + inline const char* + base64_binary<char> () + { + return "base64Binary"; + } + + template<> + inline const char* + hex_binary<char> () + { + return "hexBinary"; + } + + template<> + inline const char* + gday<char> () + { + return "gDay"; + } + + template<> + inline const char* + gmonth<char> () + { + return "gMonth"; + } + + template<> + inline const char* + gyear<char> () + { + return "gYear"; + } + + template<> + inline const char* + gmonth_day<char> () + { + return "gMonthDay"; + } + + template<> + inline const char* + gyear_month<char> () + { + return "gYearMonth"; + } + + template<> + inline const char* + date<char> () + { + return "date"; + } + + template<> + inline const char* + time<char> () + { + return "time"; + } + + template<> + inline const char* + date_time<char> () + { + return "dateTime"; + } + + template<> + inline const char* + duration<char> () + { + return "duration"; + } + + // + // + template<> + inline const char* + positive_inf<char> () + { + return "INF"; + } + + template<> + inline const char* + negative_inf<char> () + { + return "-INF"; + } + + template<> + inline const char* + nan<char> () + { + return "NaN"; + } + + // + // + template<> + inline const char* + true_<char> () + { + return "true"; + } + + template<> + inline const char* + false_<char> () + { + return "false"; + } + + template<> + inline const char* + one<char> () + { + return "1"; + } + + template<> + inline const char* + zero<char> () + { + return "0"; + } + } + } + } + } +} + +#endif // XSD_CXX_PARSER_VALIDATING_XML_SCHEMA_PIMPL_IXX_CHAR +#endif // XSD_CXX_PARSER_USE_CHAR + + +#if defined(XSD_CXX_PARSER_USE_WCHAR) || !defined(XSD_CXX_PARSER_USE_CHAR) + +#ifndef XSD_CXX_PARSER_VALIDATING_XML_SCHEMA_PIMPL_IXX_WCHAR +#define XSD_CXX_PARSER_VALIDATING_XML_SCHEMA_PIMPL_IXX_WCHAR + +namespace xsd +{ + namespace cxx + { + namespace parser + { + namespace validating + { + namespace bits + { + template<> + inline const wchar_t* + boolean<wchar_t> () + { + return L"boolean"; + } + + template<> + inline const wchar_t* + byte<wchar_t> () + { + return L"byte"; + } + + template<> + inline const wchar_t* + unsigned_byte<wchar_t> () + { + return L"unsignedByte"; + } + + template<> + inline const wchar_t* + short_<wchar_t> () + { + return L"short"; + } + + template<> + inline const wchar_t* + unsigned_short<wchar_t> () + { + return L"unsignedShort"; + } + + template<> + inline const wchar_t* + int_<wchar_t> () + { + return L"int"; + } + + template<> + inline const wchar_t* + unsigned_int<wchar_t> () + { + return L"unsignedInt"; + } + + template<> + inline const wchar_t* + long_<wchar_t> () + { + return L"long"; + } + + template<> + inline const wchar_t* + unsigned_long<wchar_t> () + { + return L"unsignedLong"; + } + + template<> + inline const wchar_t* + integer<wchar_t> () + { + return L"integer"; + } + + template<> + inline const wchar_t* + negative_integer<wchar_t> () + { + return L"negativeInteger"; + } + + template<> + inline const wchar_t* + non_positive_integer<wchar_t> () + { + return L"nonPositiveInteger"; + } + + template<> + inline const wchar_t* + non_negative_integer<wchar_t> () + { + return L"nonNegativeInteger"; + } + + template<> + inline const wchar_t* + positive_integer<wchar_t> () + { + return L"positiveInteger"; + } + + template<> + inline const wchar_t* + float_<wchar_t> () + { + return L"float"; + } + + template<> + inline const wchar_t* + double_<wchar_t> () + { + return L"double"; + } + + template<> + inline const wchar_t* + decimal<wchar_t> () + { + return L"decimal"; + } + + template<> + inline const wchar_t* + name<wchar_t> () + { + return L"Name"; + } + + template<> + inline const wchar_t* + nmtoken<wchar_t> () + { + return L"NMTOKEN"; + } + + template<> + inline const wchar_t* + nmtokens<wchar_t> () + { + return L"NMTOKENS"; + } + + template<> + inline const wchar_t* + ncname<wchar_t> () + { + return L"NCName"; + } + + template<> + inline const wchar_t* + id<wchar_t> () + { + return L"ID"; + } + + template<> + inline const wchar_t* + idref<wchar_t> () + { + return L"IDREF"; + } + + template<> + inline const wchar_t* + idrefs<wchar_t> () + { + return L"IDREFS"; + } + + template<> + inline const wchar_t* + language<wchar_t> () + { + return L"language"; + } + + template<> + inline const wchar_t* + qname<wchar_t> () + { + return L"QName"; + } + + template<> + inline const wchar_t* + base64_binary<wchar_t> () + { + return L"base64Binary"; + } + + template<> + inline const wchar_t* + hex_binary<wchar_t> () + { + return L"hexBinary"; + } + + template<> + inline const wchar_t* + gday<wchar_t> () + { + return L"gDay"; + } + + template<> + inline const wchar_t* + gmonth<wchar_t> () + { + return L"gMonth"; + } + + template<> + inline const wchar_t* + gyear<wchar_t> () + { + return L"gYear"; + } + + template<> + inline const wchar_t* + gmonth_day<wchar_t> () + { + return L"gMonthDay"; + } + + template<> + inline const wchar_t* + gyear_month<wchar_t> () + { + return L"gYearMonth"; + } + + template<> + inline const wchar_t* + date<wchar_t> () + { + return L"date"; + } + + template<> + inline const wchar_t* + time<wchar_t> () + { + return L"time"; + } + + template<> + inline const wchar_t* + date_time<wchar_t> () + { + return L"dateTime"; + } + + template<> + inline const wchar_t* + duration<wchar_t> () + { + return L"duration"; + } + + + // + // + template<> + inline const wchar_t* + positive_inf<wchar_t> () + { + return L"INF"; + } + + template<> + inline const wchar_t* + negative_inf<wchar_t> () + { + return L"-INF"; + } + + template<> + inline const wchar_t* + nan<wchar_t> () + { + return L"NaN"; + } + + // + // + template<> + inline const wchar_t* + true_<wchar_t> () + { + return L"true"; + } + + template<> + inline const wchar_t* + false_<wchar_t> () + { + return L"false"; + } + + template<> + inline const wchar_t* + one<wchar_t> () + { + return L"1"; + } + + template<> + inline const wchar_t* + zero<wchar_t> () + { + return L"0"; + } + } + } + } + } +} + +#endif // XSD_CXX_PARSER_VALIDATING_XML_SCHEMA_PIMPL_IXX_WCHAR +#endif // XSD_CXX_PARSER_USE_WCHAR diff --git a/xsd/libxsd/xsd/cxx/parser/validating/xml-schema-pimpl.txx b/xsd/libxsd/xsd/cxx/parser/validating/xml-schema-pimpl.txx new file mode 100644 index 0000000..55121c2 --- /dev/null +++ b/xsd/libxsd/xsd/cxx/parser/validating/xml-schema-pimpl.txx @@ -0,0 +1,2746 @@ +// file : xsd/cxx/parser/validating/xml-schema-pimpl.txx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <limits> +#include <locale> + +#include <xsd/cxx/zc-istream.hxx> +#include <xsd/cxx/parser/validating/exceptions.hxx> + +namespace xsd +{ + namespace cxx + { + namespace parser + { + namespace validating + { + // Note that most of the types implemented here cannot have + // whitespaces in the value. As result we don't need to waste + // time collapsing whitespaces. All we need to do is trim the + // string representation which can be done without copying. + // + + // Character table. + // + namespace bits + { + const unsigned char ncname_mask = 0x1; + const unsigned char name_first_mask = 0x2; + const unsigned char name_mask = 0x4; + + template <typename C> + struct char_table + { + static C table[0x80]; + }; + + template <typename C> + C char_table<C>::table[0x80] = + { + 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD8, 0xD0, 0x00, 0x00, 0xD0, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xD8, 0x48, 0x58, 0x48, 0x48, 0x48, 0x40, 0x58, 0x48, 0x48, 0x48, 0x48, 0x48, 0x4D, 0x4D, 0x58, + 0x4D, 0x4D, 0x4D, 0x4D, 0x4D, 0x4D, 0x4D, 0x4D, 0x4D, 0x4D, 0x4E, 0x48, 0x50, 0x48, 0x58, 0x48, + 0x48, 0x4F, 0x4F, 0x4F, 0x4F, 0x4F, 0x4F, 0x4F, 0x4F, 0x4F, 0x4F, 0x4F, 0x4F, 0x4F, 0x4F, 0x4F, + 0x4F, 0x4F, 0x4F, 0x4F, 0x4F, 0x4F, 0x4F, 0x4F, 0x4F, 0x4F, 0x4F, 0x48, 0x48, 0x40, 0x48, 0x4F, + 0x48, 0x4F, 0x4F, 0x4F, 0x4F, 0x4F, 0x4F, 0x4F, 0x4F, 0x4F, 0x4F, 0x4F, 0x4F, 0x4F, 0x4F, 0x4F, + 0x4F, 0x4F, 0x4F, 0x4F, 0x4F, 0x4F, 0x4F, 0x4F, 0x4F, 0x4F, 0x4F, 0x48, 0x48, 0x48, 0x48, 0x48 + }; + } + + // any_type + // + + template <typename C> + void any_type_pimpl<C>:: + post_any_type () + { + } + + // any_simple_type + // + + template <typename C> + void any_simple_type_pimpl<C>:: + post_any_simple_type () + { + } + + // boolean + // + + template <typename C> + void boolean_pimpl<C>:: + _pre () + { + str_.clear (); + } + + template <typename C> + void boolean_pimpl<C>:: + _characters (const ro_string<C>& s) + { + str_ += s; + } + + template <typename C> + void boolean_pimpl<C>:: + _post () + { + ro_string<C> str (str_); + trim (str); + + if (str == bits::true_<C> () || str == bits::one<C> ()) + value_ = true; + else if (str == bits::false_<C> () || str == bits::zero<C> ()) + value_ = false; + else + throw invalid_value<C> (bits::boolean<C> (), str); + } + + template <typename C> + bool boolean_pimpl<C>:: + post_boolean () + { + return value_; + } + + // byte + // + + template <typename C> + void byte_pimpl<C>:: + _pre () + { + str_.clear (); + } + + template <typename C> + void byte_pimpl<C>:: + _characters (const ro_string<C>& s) + { + str_ += s; + } + + template <typename C> + void byte_pimpl<C>:: + _post () + { + ro_string<C> str (str_); + trim (str); + + short t; + zc_istream<C> is (str); + + if (is >> t && is.exhausted () && t >= -128 && t <= 127) + value_ = static_cast<signed char> (t); + else + throw invalid_value<C> (bits::byte<C> (), str); + } + + template <typename C> + signed char byte_pimpl<C>:: + post_byte () + { + return value_; + } + + // unsigned_byte + // + + template <typename C> + void unsigned_byte_pimpl<C>:: + _pre () + { + str_.clear (); + } + + template <typename C> + void unsigned_byte_pimpl<C>:: + _characters (const ro_string<C>& s) + { + str_ += s; + } + + template <typename C> + void unsigned_byte_pimpl<C>:: + _post () + { + ro_string<C> str (str_); + trim (str); + + unsigned short t; + zc_istream<C> is (str); + + if (is >> t && is.exhausted () && t <= 255) + value_ = static_cast<unsigned char> (t); + else + throw invalid_value<C> (bits::unsigned_byte<C> (), str); + } + + template <typename C> + unsigned char unsigned_byte_pimpl<C>:: + post_unsigned_byte () + { + return value_; + } + + // short + // + + template <typename C> + void short_pimpl<C>:: + _pre () + { + str_.clear (); + } + + template <typename C> + void short_pimpl<C>:: + _characters (const ro_string<C>& s) + { + str_ += s; + } + + template <typename C> + void short_pimpl<C>:: + _post () + { + ro_string<C> str (str_); + trim (str); + + zc_istream<C> is (str); + + if (!(is >> value_ && is.exhausted ())) + throw invalid_value<C> (bits::short_<C> (), str); + } + + template <typename C> + short short_pimpl<C>:: + post_short () + { + return value_; + } + + + // unsigned_short + // + + template <typename C> + void unsigned_short_pimpl<C>:: + _pre () + { + str_.clear (); + } + + template <typename C> + void unsigned_short_pimpl<C>:: + _characters (const ro_string<C>& s) + { + str_ += s; + } + + template <typename C> + void unsigned_short_pimpl<C>:: + _post () + { + ro_string<C> str (str_); + trim (str); + + zc_istream<C> is (str); + + if (!(is >> value_ && is.exhausted ())) + throw invalid_value<C> (bits::unsigned_short<C> (), str); + } + + template <typename C> + unsigned short unsigned_short_pimpl<C>:: + post_unsigned_short () + { + return value_; + } + + // int + // + + template <typename C> + void int_pimpl<C>:: + _pre () + { + str_.clear (); + } + + template <typename C> + void int_pimpl<C>:: + _characters (const ro_string<C>& s) + { + str_ += s; + } + + template <typename C> + void int_pimpl<C>:: + _post () + { + ro_string<C> str (str_); + trim (str); + + zc_istream<C> is (str); + + if (!(is >> value_ && is.exhausted ())) + throw invalid_value<C> (bits::int_<C> (), str); + } + + template <typename C> + int int_pimpl<C>:: + post_int () + { + return value_; + } + + + // unsigned_int + // + + template <typename C> + void unsigned_int_pimpl<C>:: + _pre () + { + str_.clear (); + } + + template <typename C> + void unsigned_int_pimpl<C>:: + _characters (const ro_string<C>& s) + { + str_ += s; + } + + template <typename C> + void unsigned_int_pimpl<C>:: + _post () + { + ro_string<C> str (str_); + trim (str); + + zc_istream<C> is (str); + + if (!(is >> value_ && is.exhausted ())) + throw invalid_value<C> (bits::unsigned_int<C> (), str); + } + + template <typename C> + unsigned int unsigned_int_pimpl<C>:: + post_unsigned_int () + { + return value_; + } + + + // long + // + template <typename C> + void long_pimpl<C>:: + _pre () + { + str_.clear (); + } + + template <typename C> + void long_pimpl<C>:: + _characters (const ro_string<C>& s) + { + str_ += s; + } + + template <typename C> + void long_pimpl<C>:: + _post () + { + ro_string<C> str (str_); + trim (str); + + zc_istream<C> is (str); + + if (!(is >> value_ && is.exhausted ())) + throw invalid_value<C> (bits::long_<C> (), str); + } + + template <typename C> + long long long_pimpl<C>:: + post_long () + { + return value_; + } + + // unsigned_long + // + template <typename C> + void unsigned_long_pimpl<C>:: + _pre () + { + str_.clear (); + } + + template <typename C> + void unsigned_long_pimpl<C>:: + _characters (const ro_string<C>& s) + { + str_ += s; + } + + template <typename C> + void unsigned_long_pimpl<C>:: + _post () + { + ro_string<C> str (str_); + trim (str); + + zc_istream<C> is (str); + + if (!(is >> value_ && is.exhausted ())) + throw invalid_value<C> (bits::unsigned_long<C> (), str); + } + + template <typename C> + unsigned long long unsigned_long_pimpl<C>:: + post_unsigned_long () + { + return value_; + } + + + // integer + // + template <typename C> + void integer_pimpl<C>:: + _pre () + { + str_.clear (); + } + + template <typename C> + void integer_pimpl<C>:: + _characters (const ro_string<C>& s) + { + str_ += s; + } + + template <typename C> + void integer_pimpl<C>:: + _post () + { + ro_string<C> str (str_); + trim (str); + + zc_istream<C> is (str); + + if (!(is >> value_ && is.exhausted ())) + throw invalid_value<C> (bits::integer<C> (), str); + } + + template <typename C> + long long integer_pimpl<C>:: + post_integer () + { + return value_; + } + + // negative_integer + // + template <typename C> + void negative_integer_pimpl<C>:: + _pre () + { + str_.clear (); + } + + template <typename C> + void negative_integer_pimpl<C>:: + _characters (const ro_string<C>& s) + { + str_ += s; + } + + template <typename C> + void negative_integer_pimpl<C>:: + _post () + { + ro_string<C> str (str_); + trim (str); + + zc_istream<C> is (str); + + if (!(is >> value_ && is.exhausted () && value_ < 0)) + throw invalid_value<C> (bits::negative_integer<C> (), str); + } + + template <typename C> + long long negative_integer_pimpl<C>:: + post_negative_integer () + { + return value_; + } + + + // non_positive_integer + // + template <typename C> + void non_positive_integer_pimpl<C>:: + _pre () + { + str_.clear (); + } + + template <typename C> + void non_positive_integer_pimpl<C>:: + _characters (const ro_string<C>& s) + { + str_ += s; + } + + template <typename C> + void non_positive_integer_pimpl<C>:: + _post () + { + ro_string<C> str (str_); + trim (str); + + zc_istream<C> is (str); + + if (!(is >> value_ && is.exhausted () && value_ <= 0)) + throw invalid_value<C> (bits::non_positive_integer<C> (), str); + } + + template <typename C> + long long non_positive_integer_pimpl<C>:: + post_non_positive_integer () + { + return value_; + } + + // positive_integer + // + template <typename C> + void positive_integer_pimpl<C>:: + _pre () + { + str_.clear (); + } + + template <typename C> + void positive_integer_pimpl<C>:: + _characters (const ro_string<C>& s) + { + str_ += s; + } + + template <typename C> + void positive_integer_pimpl<C>:: + _post () + { + ro_string<C> str (str_); + trim (str); + + zc_istream<C> is (str); + + if (!(is >> value_ && is.exhausted () && value_ > 0)) + throw invalid_value<C> (bits::positive_integer<C> (), str); + } + + template <typename C> + unsigned long long positive_integer_pimpl<C>:: + post_positive_integer () + { + return value_; + } + + + // non_negative_integer + // + template <typename C> + void non_negative_integer_pimpl<C>:: + _pre () + { + str_.clear (); + } + + template <typename C> + void non_negative_integer_pimpl<C>:: + _characters (const ro_string<C>& s) + { + str_ += s; + } + + template <typename C> + void non_negative_integer_pimpl<C>:: + _post () + { + ro_string<C> str (str_); + trim (str); + + zc_istream<C> is (str); + + if (!(is >> value_ && is.exhausted ())) + throw invalid_value<C> (bits::non_negative_integer<C> (), str); + } + + template <typename C> + unsigned long long non_negative_integer_pimpl<C>:: + post_non_negative_integer () + { + return value_; + } + + + // float + // + template <typename C> + void float_pimpl<C>:: + _pre () + { + str_.clear (); + } + + template <typename C> + void float_pimpl<C>:: + _characters (const ro_string<C>& s) + { + str_ += s; + } + + template <typename C> + void float_pimpl<C>:: + _post () + { + ro_string<C> str (str_); + trim (str); + + if (str == bits::positive_inf<C> ()) + value_ = std::numeric_limits<float>::infinity (); + else if (str == bits::negative_inf<C> ()) + value_ = -std::numeric_limits<float>::infinity (); + else if (str == bits::nan<C> ()) + value_ = std::numeric_limits<float>::quiet_NaN (); + else + { + zc_istream<C> is (str); + is.imbue (std::locale::classic ()); + + if (!(is >> value_ && is.exhausted ())) + throw invalid_value<C> (bits::float_<C> (), str); + } + } + + template <typename C> + float float_pimpl<C>:: + post_float () + { + return value_; + } + + + // double + // + template <typename C> + void double_pimpl<C>:: + _pre () + { + str_.clear (); + } + + template <typename C> + void double_pimpl<C>:: + _characters (const ro_string<C>& s) + { + str_ += s; + } + + template <typename C> + void double_pimpl<C>:: + _post () + { + ro_string<C> str (str_); + trim (str); + + if (str == bits::positive_inf<C> ()) + value_ = std::numeric_limits<double>::infinity (); + else if (str == bits::negative_inf<C> ()) + value_ = -std::numeric_limits<double>::infinity (); + else if (str == bits::nan<C> ()) + value_ = std::numeric_limits<double>::quiet_NaN (); + else + { + zc_istream<C> is (str); + is.imbue (std::locale::classic ()); + + if (!(is >> value_ && is.exhausted ())) + throw invalid_value<C> (bits::double_<C> (), str); + } + } + + template <typename C> + double double_pimpl<C>:: + post_double () + { + return value_; + } + + // decimal + // + template <typename C> + void decimal_pimpl<C>:: + _pre () + { + str_.clear (); + } + + template <typename C> + void decimal_pimpl<C>:: + _characters (const ro_string<C>& s) + { + str_ += s; + } + + template <typename C> + void decimal_pimpl<C>:: + _post () + { + ro_string<C> str (str_); + trim (str); + + zc_istream<C> is (str); + is.imbue (std::locale::classic ()); + + //@@ TODO: now we accept scientific notations and INF/NaN. + // + if (!(is >> value_ && is.exhausted ())) + throw invalid_value<C> (bits::decimal<C> (), str); + } + + template <typename C> + double decimal_pimpl<C>:: + post_decimal () + { + return value_; + } + + // string + // + template <typename C> + void string_pimpl<C>:: + _pre () + { + str_.clear (); + } + + template <typename C> + void string_pimpl<C>:: + _characters (const ro_string<C>& s) + { + str_ += s; + } + + template <typename C> + std::basic_string<C> string_pimpl<C>:: + post_string () + { + std::basic_string<C> r; + r.swap (str_); + return r; + } + + // normalized_string + // + template <typename C> + void normalized_string_pimpl<C>:: + _pre () + { + str_.clear (); + } + + template <typename C> + void normalized_string_pimpl<C>:: + _characters (const ro_string<C>& s) + { + str_ += s; + } + + template <typename C> + std::basic_string<C> normalized_string_pimpl<C>:: + post_normalized_string () + { + typedef typename std::basic_string<C>::size_type size_type; + + size_type size (str_.size ()); + + for (size_type i (0); i < size; ++i) + { + C& c = str_[i]; + + if (c == C (0x0A) || c == C (0x0D) || c == C (0x09)) + c = C (0x20); + } + + std::basic_string<C> r; + r.swap (str_); + return r; + } + + // token + // + template <typename C> + void token_pimpl<C>:: + _pre () + { + str_.clear (); + } + + template <typename C> + void token_pimpl<C>:: + _characters (const ro_string<C>& s) + { + if (str_.size () == 0) + { + ro_string<C> tmp (s.data (), s.size ()); + + if (trim_left (tmp) != 0) + str_ += tmp; + } + else + str_ += s; + } + + template <typename C> + std::basic_string<C> token_pimpl<C>:: + post_token () + { + typedef typename std::basic_string<C>::size_type size_type; + + size_type size (str_.size ()); + size_type j (0); + + bool subs (false); + + for (size_type i (0); i < size; ++i) + { + C c = str_[i]; + + if (c == C (0x20) || c == C (0x0A) || + c == C (0x0D) || c == C (0x09)) + { + subs = true; + } + else + { + if (subs) + { + subs = false; + str_[j++] = C (0x20); + } + + str_[j++] = c; + } + } + + str_.resize (j); + + std::basic_string<C> r; + r.swap (str_); + return r; + } + + // name + // + template <typename C> + void name_pimpl<C>:: + _pre () + { + str_.clear (); + } + + template <typename C> + void name_pimpl<C>:: + _characters (const ro_string<C>& s) + { + if (str_.size () == 0) + { + ro_string<C> tmp (s.data (), s.size ()); + + if (trim_left (tmp) != 0) + str_ += tmp; + } + else + str_ += s; + } + + template <typename C> + void name_pimpl<C>:: + _post () + { + typedef typename ro_string<C>::size_type size_type; + + ro_string<C> tmp (str_); + size_type size (trim_right (tmp)); + + // For now we are only checking the US-ASCII characters. + // + + bool ok (size != 0); + + if (ok) + { + unsigned int c (static_cast<unsigned int> (str_[0])); + + ok = c >= 0x80 || + (bits::char_table<unsigned char>::table[c] & + bits::name_first_mask); + + if (ok) + { + for (size_type i (1); i < size; ++i) + { + c = static_cast<unsigned int> (str_[i]); + + if (c < 0x80 && + !(bits::char_table<unsigned char>::table[c] & + bits::name_mask)) + { + ok = false; + break; + } + } + } + } + + if (!ok) + throw invalid_value<C> (bits::name<C> (), tmp); + + str_.resize (size); + } + + template <typename C> + std::basic_string<C> name_pimpl<C>:: + post_name () + { + std::basic_string<C> r; + r.swap (str_); + return r; + } + + // nmtoken + // + template <typename C> + void nmtoken_pimpl<C>:: + _pre () + { + str_.clear (); + } + + template <typename C> + void nmtoken_pimpl<C>:: + _characters (const ro_string<C>& s) + { + if (str_.size () == 0) + { + ro_string<C> tmp (s.data (), s.size ()); + + if (trim_left (tmp) != 0) + str_ += tmp; + } + else + str_ += s; + } + + template <typename C> + void nmtoken_pimpl<C>:: + _post () + { + typedef typename ro_string<C>::size_type size_type; + + ro_string<C> tmp (str_); + size_type size (trim_right (tmp)); + + // For now we are only checking the US-ASCII characters. + // + + bool ok (size != 0); + + if (ok) + { + for (size_type i (0); i < size; ++i) + { + unsigned int c (static_cast<unsigned int> (str_[i])); + + if (c < 0x80 && + !(bits::char_table<unsigned char>::table[c] & + bits::name_mask)) + { + ok = false; + break; + } + } + } + + if (!ok) + throw invalid_value<C> (bits::nmtoken<C> (), tmp); + + str_.resize (size); + } + + template <typename C> + std::basic_string<C> nmtoken_pimpl<C>:: + post_nmtoken () + { + std::basic_string<C> r; + r.swap (str_); + return r; + } + + // nmtokens + // + template <typename C> + void nmtokens_pimpl<C>:: + _pre () + { + nmtokens_pskel<C>::_pre (); + seq_.clear (); + } + + template <typename C> + void nmtokens_pimpl<C>:: + _post () + { + nmtokens_pskel<C>::_post (); + + // Should have at least one element. + // + if (seq_.size () < 1) + { + ro_string<C> tmp; + throw invalid_value<C> (bits::nmtokens<C> (), tmp); + } + } + + template <typename C> + string_sequence<C> nmtokens_pimpl<C>:: + post_nmtokens () + { + string_sequence<C> r; + r.swap (seq_); + return r; + } + + template <typename C> + void nmtokens_pimpl<C>:: + _xsd_parse_item (const ro_string<C>& s) + { + parser_.pre (); + parser_._pre (); + parser_._characters (s); + parser_._post (); + seq_.push_back (parser_.post_nmtoken ()); + } + + // ncname + // + namespace bits + { + template <typename C> + bool + valid_ncname (const C* s, typename ro_string<C>::size_type size) + { + typedef typename ro_string<C>::size_type size_type; + + // For now we are only checking the US-ASCII characters. + // + bool ok (size != 0); + + if (ok) + { + unsigned int c (static_cast<unsigned int> (s[0])); + + ok = c >= 0x80 || + ((bits::char_table<unsigned char>::table[c] & + bits::name_first_mask) && c != C (':')); + + if (ok) + { + for (size_type i (1); i < size; ++i) + { + c = static_cast<unsigned int> (s[i]); + + if (c < 0x80 && + !(bits::char_table<unsigned char>::table[c] & + bits::ncname_mask)) + { + ok = false; + break; + } + } + } + } + + return ok; + } + } + + template <typename C> + void ncname_pimpl<C>:: + _pre () + { + str_.clear (); + } + + template <typename C> + void ncname_pimpl<C>:: + _characters (const ro_string<C>& s) + { + if (str_.size () == 0) + { + ro_string<C> tmp (s.data (), s.size ()); + + if (trim_left (tmp) != 0) + str_ += tmp; + } + else + str_ += s; + } + + template <typename C> + void ncname_pimpl<C>:: + _post () + { + typedef typename ro_string<C>::size_type size_type; + + ro_string<C> tmp (str_); + size_type size (trim_right (tmp)); + + if (!bits::valid_ncname (tmp.data (), size)) + throw invalid_value<C> (bits::ncname<C> (), tmp); + + str_.resize (size); + } + + template <typename C> + std::basic_string<C> ncname_pimpl<C>:: + post_ncname () + { + std::basic_string<C> r; + r.swap (str_); + return r; + } + + // id + // + template <typename C> + void id_pimpl<C>:: + _pre () + { + str_.clear (); + } + + template <typename C> + void id_pimpl<C>:: + _characters (const ro_string<C>& s) + { + if (str_.size () == 0) + { + ro_string<C> tmp (s.data (), s.size ()); + + if (trim_left (tmp) != 0) + str_ += tmp; + } + else + str_ += s; + } + + template <typename C> + void id_pimpl<C>:: + _post () + { + typedef typename ro_string<C>::size_type size_type; + + ro_string<C> tmp (str_); + size_type size (trim_right (tmp)); + + if (!bits::valid_ncname (tmp.data (), size)) + throw invalid_value<C> (bits::id<C> (), tmp); + + str_.resize (size); + } + + template <typename C> + std::basic_string<C> id_pimpl<C>:: + post_id () + { + std::basic_string<C> r; + r.swap (str_); + return r; + } + + // idref + // + template <typename C> + void idref_pimpl<C>:: + _pre () + { + str_.clear (); + } + + template <typename C> + void idref_pimpl<C>:: + _characters (const ro_string<C>& s) + { + if (str_.size () == 0) + { + ro_string<C> tmp (s.data (), s.size ()); + + if (trim_left (tmp) != 0) + str_ += tmp; + } + else + str_ += s; + } + + template <typename C> + void idref_pimpl<C>:: + _post () + { + typedef typename ro_string<C>::size_type size_type; + + ro_string<C> tmp (str_); + size_type size (trim_right (tmp)); + + if (!bits::valid_ncname (tmp.data (), size)) + throw invalid_value<C> (bits::idref<C> (), tmp); + + str_.resize (size); + } + + template <typename C> + std::basic_string<C> idref_pimpl<C>:: + post_idref () + { + std::basic_string<C> r; + r.swap (str_); + return r; + } + + // idrefs + // + template <typename C> + void idrefs_pimpl<C>:: + _pre () + { + idrefs_pskel<C>::_pre (); + seq_.clear (); + } + + template <typename C> + void idrefs_pimpl<C>:: + _post () + { + idrefs_pskel<C>::_post (); + + // Should have at least one element. + // + if (seq_.size () < 1) + { + ro_string<C> tmp; + throw invalid_value<C> (bits::idrefs<C> (), tmp); + } + } + + template <typename C> + string_sequence<C> idrefs_pimpl<C>:: + post_idrefs () + { + string_sequence<C> r; + r.swap (seq_); + return r; + } + + template <typename C> + void idrefs_pimpl<C>:: + _xsd_parse_item (const ro_string<C>& s) + { + parser_.pre (); + parser_._pre (); + parser_._characters (s); + parser_._post (); + seq_.push_back (parser_.post_idref ()); + } + + // language + // + template <typename C> + void language_pimpl<C>:: + _pre () + { + str_.clear (); + } + + template <typename C> + void language_pimpl<C>:: + _characters (const ro_string<C>& s) + { + if (str_.size () == 0) + { + ro_string<C> tmp (s.data (), s.size ()); + + if (trim_left (tmp) != 0) + str_ += tmp; + } + else + str_ += s; + } + + template <typename C> + void language_pimpl<C>:: + _post () + { + typedef typename ro_string<C>::size_type size_type; + + ro_string<C> tmp (str_); + size_type size (trim_right (tmp)); + + // language := ALPHA{1,8} *(-(ALPHA | DIGIT){1,8}) + // + bool ok (true); + + for (size_type tag (0), i (0); ; ++tag) + { + size_type n (0); + + for (; i < size && n < 8; ++n, ++i) + { + C c (tmp[i]); + + if (!((c >= C ('a') && c <= C ('z')) || + (c >= C ('A') && c <= C ('Z')) || + (tag != 0 && c >= C ('0') && c <= C ('9')))) + break; + } + + if (n == 0) + { + ok = false; + break; + } + + if (i == size) + break; + + if (tmp[i++] != C ('-')) + { + ok = false; + break; + } + } + + if (!ok) + throw invalid_value<C> (bits::language<C> (), tmp); + + str_.resize (size); + } + + template <typename C> + std::basic_string<C> language_pimpl<C>:: + post_language () + { + std::basic_string<C> r; + r.swap (str_); + return r; + } + + // uri + // + template <typename C> + void uri_pimpl<C>:: + _pre () + { + str_.clear (); + } + + template <typename C> + void uri_pimpl<C>:: + _characters (const ro_string<C>& s) + { + if (str_.size () == 0) + { + ro_string<C> tmp (s.data (), s.size ()); + + if (trim_left (tmp) != 0) + str_ += tmp; + } + else + str_ += s; + } + + template <typename C> + std::basic_string<C> uri_pimpl<C>:: + post_uri () + { + // According to Datatypes 3.2.17 and RFC2396 pretty much anything + // can be a URI and conforming processors do not need to figure + // out and verify particular URI schemes. + // + ro_string<C> tmp (str_); + str_.resize (trim_right (tmp)); + + std::basic_string<C> r; + r.swap (str_); + return r; + } + + // qname + // + template <typename C> + void qname_pimpl<C>:: + _pre () + { + str_.clear (); + } + + template <typename C> + void qname_pimpl<C>:: + _characters (const ro_string<C>& s) + { + if (str_.size () == 0) + { + ro_string<C> tmp (s.data (), s.size ()); + + if (trim_left (tmp) != 0) + str_ += tmp; + } + else + str_ += s; + } + + template <typename C> + void qname_pimpl<C>:: + _post () + { + typedef typename ro_string<C>::size_type size_type; + + ro_string<C> tmp (str_); + size_type size (trim_right (tmp)); + size_type pos (tmp.find (C (':'))); + + const C* s (tmp.data ()); + + if (pos != ro_string<C>::npos) + { + if (!bits::valid_ncname (s, pos) || + !bits::valid_ncname (s + pos + 1, size - pos - 1)) + throw invalid_value<C> (bits::qname<C> (), tmp); + + prefix_.assign (s, pos); + name_.assign (s + pos + 1, size - pos - 1); + } + else + { + if (!bits::valid_ncname (s, size)) + throw invalid_value<C> (bits::qname<C> (), tmp); + + prefix_.clear (); + str_.resize (size); + name_.swap (str_); + } + } + + template <typename C> + qname<C> qname_pimpl<C>:: + post_qname () + { + return prefix_.empty () + ? qname<C> (name_) + : qname<C> (prefix_, name_); + } + + // base64_binary + // + template <typename C> + void base64_binary_pimpl<C>:: + _pre () + { + str_.clear (); + } + + template <typename C> + void base64_binary_pimpl<C>:: + _characters (const ro_string<C>& s) + { + if (str_.size () == 0) + { + ro_string<C> tmp (s.data (), s.size ()); + + if (trim_left (tmp) != 0) + str_ += tmp; + } + else + str_ += s; + } + + namespace bits + { + template <typename C> + inline unsigned char + base64_decode (C c) + { + unsigned char r (0xFF); + + if (c >= C('A') && c <= C ('Z')) + r = static_cast<unsigned char> (c - C ('A')); + else if (c >= C('a') && c <= C ('z')) + r = static_cast<unsigned char> (c - C ('a') + 26); + else if (c >= C('0') && c <= C ('9')) + r = static_cast<unsigned char> (c - C ('0') + 52); + else if (c == C ('+')) + r = 62; + else if (c == C ('/')) + r = 63; + + return r; + } + } + + template <typename C> + void base64_binary_pimpl<C>:: + _post () + { + typedef typename std::basic_string<C>::size_type size_type; + + size_type size (str_.size ()); + const C* src (str_.c_str ()); + + // Remove all whitespaces. + // + { + size_type j (0); + + bool subs (false); + + for (size_type i (0); i < size; ++i) + { + C c = str_[i]; + + if (c == C (0x20) || c == C (0x0A) || + c == C (0x0D) || c == C (0x09)) + { + subs = true; + } + else + { + if (subs) + subs = false; + + str_[j++] = c; + } + } + + size = j; + str_.resize (size); + } + + // Our length should be a multiple of four. + // + if (size == 0 || size % 4 != 0) + throw invalid_value<C> (bits::base64_binary<C> (), str_); + + size_type quad_count (size / 4); + size_type capacity (quad_count * 3 + 1); + + buf_.reset (new buffer (capacity, capacity)); + char* dst (buf_->data ()); + + size_type si (0), di (0); // Source and destination indexes. + + // Process all quads except the last one. + // + unsigned char b1, b2, b3, b4; + + for (size_type q (0); q < quad_count - 1; ++q) + { + b1 = bits::base64_decode (src[si++]); + b2 = bits::base64_decode (src[si++]); + b3 = bits::base64_decode (src[si++]); + b4 = bits::base64_decode (src[si++]); + + if (b1 == 0xFF || b2 == 0xFF || b3 == 0xFF || b4 == 0xFF) + throw invalid_value<C> (bits::base64_binary<C> (), str_); + + dst[di++] = (b1 << 2) | (b2 >> 4); + dst[di++] = (b2 << 4) | (b3 >> 2); + dst[di++] = (b3 << 6) | b4; + } + + // Process the last quad. The first two octets are always there. + // + b1 = bits::base64_decode (src[si++]); + b2 = bits::base64_decode (src[si++]); + + if (b1 == 0xFF || b2 == 0xFF) + throw invalid_value<C> (bits::base64_binary<C> (), str_); + + C e3 (src[si++]); + C e4 (src[si++]); + + if (e4 == C ('=')) + { + if (e3 == C ('=')) + { + // Two pads. Last 4 bits in b2 should be zero. + // + if ((b2 & 0x0F) != 0) + throw invalid_value<C> (bits::base64_binary<C> (), str_); + + dst[di++] = (b1 << 2) | (b2 >> 4); + } + else + { + // One pad. Last 2 bits in b3 should be zero. + // + b3 = bits::base64_decode (e3); + + if (b3 == 0xFF || (b3 & 0x03) != 0) + throw invalid_value<C> (bits::base64_binary<C> (), str_); + + dst[di++] = (b1 << 2) | (b2 >> 4); + dst[di++] = (b2 << 4) | (b3 >> 2); + } + } + else + { + // No pads. + // + b3 = bits::base64_decode (e3); + b4 = bits::base64_decode (e4); + + if (b3 == 0xFF || b4 == 0xFF) + throw invalid_value<C> (bits::base64_binary<C> (), str_); + + dst[di++] = (b1 << 2) | (b2 >> 4); + dst[di++] = (b2 << 4) | (b3 >> 2); + dst[di++] = (b3 << 6) | b4; + } + + // Set the real size. + // + buf_->size (di); + } + + template <typename C> + std::auto_ptr<buffer> base64_binary_pimpl<C>:: + post_base64_binary () + { + return buf_; + } + + // hex_binary + // + template <typename C> + void hex_binary_pimpl<C>:: + _pre () + { + str_.clear (); + } + + template <typename C> + void hex_binary_pimpl<C>:: + _characters (const ro_string<C>& s) + { + if (str_.size () == 0) + { + ro_string<C> tmp (s.data (), s.size ()); + + if (trim_left (tmp) != 0) + str_ += tmp; + } + else + str_ += s; + } + + namespace bits + { + template <typename C> + inline unsigned char + hex_decode (C c) + { + unsigned char r (0xFF); + + if (c >= C('0') && c <= C ('9')) + r = static_cast<unsigned char> (c - C ('0')); + else if (c >= C ('A') && c <= C ('F')) + r = static_cast<unsigned char> (10 + (c - C ('A'))); + else if (c >= C ('a') && c <= C ('f')) + r = static_cast<unsigned char> (10 + (c - C ('a'))); + + return r; + } + } + + template <typename C> + void hex_binary_pimpl<C>:: + _post () + { + typedef typename ro_string<C>::size_type size_type; + + ro_string<C> tmp (str_); + size_type size (trim_right (tmp)); + + if (size % 2 != 0) + throw invalid_value<C> (bits::hex_binary<C> (), tmp); + + buffer::size_t n (size / 2); + buf_.reset (new buffer (n)); + + if (n != 0) + { + const C* src (tmp.data ()); + char* dst (buf_->data ()); + buffer::size_t i (0); + + for (; i < n; ++i) + { + unsigned char h (bits::hex_decode (src[2 * i])); + unsigned char l (bits::hex_decode (src[2 * i + 1])); + + if (h == 0xFF || l == 0xFF) + break; + + dst[i] = (h << 4) | l; + } + + if (i != n) + throw invalid_value<C> (bits::hex_binary<C> (), tmp); + } + } + + template <typename C> + std::auto_ptr<buffer> hex_binary_pimpl<C>:: + post_hex_binary () + { + return buf_; + } + + // time_zone + // + namespace bits + { + // Datatypes 3.2.7.3. Return false if time zone is invalid. + // + template <typename C> + bool + parse_tz (const C* s, + typename std::basic_string<C>::size_type n, + short& h, short& m) + { + // time_zone := Z|(+|-)HH:MM + // + if (n == 0) + { + return false; + } + else if (s[0] == 'Z') + { + if (n != 1) + return false; + + h = 0; + m = 0; + } + else + { + if (n != 6 || (s[0] != '-' && s[0] != '+') || s[3] != ':') + return false; + + // Parse hours. + // + char d1 = s[1]; + char d2 = s[2]; + + if (d1 < '0' || d1 > '9' || d2 < '0' || d2 > '9') + return false; + + h = 10 * (d1 - '0') + (d2 - '0'); + + if (h > 14) + return false; + + // Parse minutes. + // + d1 = s[4]; + d2 = s[5]; + + if (d1 < '0' || d1 > '9' || d2 < '0' || d2 > '9') + return false; + + m = 10 * (d1 - '0') + (d2 - '0'); + + if (m > 59 || (h == 14 && m != 0)) + return false; + + if (s[0] == '-') + { + h = -h; + m = -m; + } + } + + return true; + } + } + + // gday + // + template <typename C> + void gday_pimpl<C>:: + _pre () + { + str_.clear (); + } + + template <typename C> + void gday_pimpl<C>:: + _characters (const ro_string<C>& s) + { + if (str_.size () == 0) + { + ro_string<C> tmp (s.data (), s.size ()); + + if (trim_left (tmp) != 0) + str_ += tmp; + } + else + str_ += s; + } + + template <typename C> + void gday_pimpl<C>:: + _post () + { + typedef typename ro_string<C>::size_type size_type; + + ro_string<C> tmp (str_); + size_type size (trim_right (tmp)); + const C* s (tmp.data ()); + + // gday := ---DD[Z|(+|-)HH:MM] + // + if (size < 5 || + s[0] != C ('-') || s[1] != C ('-') || s[2] != C ('-')) + throw invalid_value<C> (bits::gday<C> (), tmp); + + C d1 (s[3]), d2 (s[4]); + + if (d1 < '0' || d1 > '9' || d2 < '0' || d2 > '9') + throw invalid_value<C> (bits::gday<C> (), tmp); + + day_ = 10 * (d1 - '0') + (d2 - '0'); + + if (day_ < 1 || day_ > 31) + throw invalid_value<C> (bits::gday<C> (), tmp); + + if (size > 5) + { + if (!bits::parse_tz (s + 5, size - 5, zh_, zm_)) + throw invalid_value<C> (bits::gday<C> (), tmp); + + z_ = true; + } + else + z_ = false; + } + + template <typename C> + gday gday_pimpl<C>:: + post_gday () + { + return z_ ? gday (day_, zh_, zm_) : gday (day_); + } + + // gmonth + // + template <typename C> + void gmonth_pimpl<C>:: + _pre () + { + str_.clear (); + } + + template <typename C> + void gmonth_pimpl<C>:: + _characters (const ro_string<C>& s) + { + if (str_.size () == 0) + { + ro_string<C> tmp (s.data (), s.size ()); + + if (trim_left (tmp) != 0) + str_ += tmp; + } + else + str_ += s; + } + + template <typename C> + void gmonth_pimpl<C>:: + _post () + { + typedef typename ro_string<C>::size_type size_type; + + ro_string<C> tmp (str_); + size_type size (trim_right (tmp)); + const C* s (tmp.data ()); + + // gmonth := --MM[Z|(+|-)HH:MM] + // + if (size < 4 || s[0] != C ('-') || s[1] != C ('-')) + throw invalid_value<C> (bits::gmonth<C> (), tmp); + + C d1 (s[2]), d2 (s[3]); + + if (d1 < '0' || d1 > '9' || d2 < '0' || d2 > '9') + throw invalid_value<C> (bits::gmonth<C> (), tmp); + + month_ = 10 * (d1 - '0') + (d2 - '0'); + + if (month_ < 1 || month_ > 12) + throw invalid_value<C> (bits::gmonth<C> (), tmp); + + if (size > 4) + { + if (!bits::parse_tz (s + 4, size - 4, zh_, zm_)) + throw invalid_value<C> (bits::gmonth<C> (), tmp); + + z_ = true; + } + else + z_ = false; + } + + template <typename C> + gmonth gmonth_pimpl<C>:: + post_gmonth () + { + return z_ ? gmonth (month_, zh_, zm_) : gmonth (month_); + } + + // gyear + // + template <typename C> + void gyear_pimpl<C>:: + _pre () + { + str_.clear (); + } + + template <typename C> + void gyear_pimpl<C>:: + _characters (const ro_string<C>& s) + { + if (str_.size () == 0) + { + ro_string<C> tmp (s.data (), s.size ()); + + if (trim_left (tmp) != 0) + str_ += tmp; + } + else + str_ += s; + } + + template <typename C> + void gyear_pimpl<C>:: + _post () + { + typedef typename ro_string<C>::size_type size_type; + + ro_string<C> tmp (str_); + size_type size (trim_right (tmp)); + const C* s (tmp.data ()); + + // gyear := [-]CCYY[N]*[Z|(+|-)HH:MM] + // + + if (size < 4 || (s[0] == C ('-') && size < 5)) + throw invalid_value<C> (bits::gyear<C> (), tmp); + + // Find the end of the year token. + // + size_type pos (s[0] == C ('-') ? 5 : 4); + for (; pos < size; ++pos) + { + C c (s[pos]); + + if (c == C ('Z') || c == C ('+') || c == C ('-')) + break; + } + + ro_string<C> year_fragment (s, pos); + zc_istream<C> is (year_fragment); + + if (!(is >> year_ && is.exhausted () && year_ != 0)) + throw invalid_value<C> (bits::gyear<C> (), tmp); + + if (pos < size) + { + if (!bits::parse_tz (s + pos, size - pos, zh_, zm_)) + throw invalid_value<C> (bits::gyear<C> (), tmp); + + z_ = true; + } + else + z_ = false; + } + + template <typename C> + gyear gyear_pimpl<C>:: + post_gyear () + { + return z_ ? gyear (year_, zh_, zm_) : gyear (year_); + } + + // gmonth_day + // + template <typename C> + void gmonth_day_pimpl<C>:: + _pre () + { + str_.clear (); + } + + template <typename C> + void gmonth_day_pimpl<C>:: + _characters (const ro_string<C>& s) + { + if (str_.size () == 0) + { + ro_string<C> tmp (s.data (), s.size ()); + + if (trim_left (tmp) != 0) + str_ += tmp; + } + else + str_ += s; + } + + template <typename C> + void gmonth_day_pimpl<C>:: + _post () + { + typedef typename ro_string<C>::size_type size_type; + + ro_string<C> tmp (str_); + size_type size (trim_right (tmp)); + const C* s (tmp.data ()); + + // gmonth_day := --MM-DD[Z|(+|-)HH:MM] + // + if (size < 7 || + s[0] != C ('-') || s[1] != C ('-') || s[4] != C ('-')) + throw invalid_value<C> (bits::gmonth_day<C> (), tmp); + + // month + // + C d1 (s[2]), d2 (s[3]); + + if (d1 < '0' || d1 > '9' || d2 < '0' || d2 > '9') + throw invalid_value<C> (bits::gmonth_day<C> (), tmp); + + month_ = 10 * (d1 - '0') + (d2 - '0'); + + if (month_ < 1 || month_ > 12) + throw invalid_value<C> (bits::gmonth_day<C> (), tmp); + + // day + // + d1 = s[5]; + d2 = s[6]; + + if (d1 < '0' || d1 > '9' || d2 < '0' || d2 > '9') + throw invalid_value<C> (bits::gmonth_day<C> (), tmp); + + day_ = 10 * (d1 - '0') + (d2 - '0'); + + if (day_ < 1 || day_ > 31) + throw invalid_value<C> (bits::gmonth_day<C> (), tmp); + + // zone + // + if (size > 7) + { + if (!bits::parse_tz (s + 7, size - 7, zh_, zm_)) + throw invalid_value<C> (bits::gmonth_day<C> (), tmp); + + z_ = true; + } + else + z_ = false; + } + + template <typename C> + gmonth_day gmonth_day_pimpl<C>:: + post_gmonth_day () + { + return z_ + ? gmonth_day (month_, day_, zh_, zm_) + : gmonth_day (month_, day_); + } + + // gyear_month + // + template <typename C> + void gyear_month_pimpl<C>:: + _pre () + { + str_.clear (); + } + + template <typename C> + void gyear_month_pimpl<C>:: + _characters (const ro_string<C>& s) + { + if (str_.size () == 0) + { + ro_string<C> tmp (s.data (), s.size ()); + + if (trim_left (tmp) != 0) + str_ += tmp; + } + else + str_ += s; + } + + template <typename C> + void gyear_month_pimpl<C>:: + _post () + { + typedef typename ro_string<C>::size_type size_type; + + ro_string<C> tmp (str_); + size_type size (trim_right (tmp)); + const C* s (tmp.data ()); + + // gyear_month := [-]CCYY[N]*-MM[Z|(+|-)HH:MM] + // + + if (size < 7 || (s[0] == C ('-') && size < 8)) + throw invalid_value<C> (bits::gyear_month<C> (), tmp); + + // Find the end of the year token. + // + size_type pos (tmp.find (C ('-'), s[0] == C ('-') ? 5 : 4)); + + if (pos == ro_string<C>::npos || (size - pos - 1) < 2) + throw invalid_value<C> (bits::gyear_month<C> (), tmp); + + ro_string<C> year_fragment (s, pos); + zc_istream<C> yis (year_fragment); + + if (!(yis >> year_ && yis.exhausted () && year_ != 0)) + throw invalid_value<C> (bits::gyear_month<C> (), tmp); + + // month + // + C d1 (s[pos + 1]), d2 (s[pos + 2]); + + if (d1 < '0' || d1 > '9' || d2 < '0' || d2 > '9') + throw invalid_value<C> (bits::gyear_month<C> (), tmp); + + month_ = 10 * (d1 - '0') + (d2 - '0'); + + if (month_ < 1 || month_ > 12) + throw invalid_value<C> (bits::gyear_month<C> (), tmp); + + // zone + // + pos += 3; + + if (pos < size) + { + if (!bits::parse_tz (s + pos, size - pos, zh_, zm_)) + throw invalid_value<C> (bits::gyear_month<C> (), tmp); + + z_ = true; + } + else + z_ = false; + } + + template <typename C> + gyear_month gyear_month_pimpl<C>:: + post_gyear_month () + { + return z_ + ? gyear_month (year_, month_, zh_, zm_) + : gyear_month (year_, month_); + } + + // date + // + template <typename C> + void date_pimpl<C>:: + _pre () + { + str_.clear (); + } + + template <typename C> + void date_pimpl<C>:: + _characters (const ro_string<C>& s) + { + if (str_.size () == 0) + { + ro_string<C> tmp (s.data (), s.size ()); + + if (trim_left (tmp) != 0) + str_ += tmp; + } + else + str_ += s; + } + + template <typename C> + void date_pimpl<C>:: + _post () + { + typedef typename ro_string<C>::size_type size_type; + + ro_string<C> tmp (str_); + size_type size (trim_right (tmp)); + const C* s (tmp.data ()); + + // date := [-]CCYY[N]*-MM-DD[Z|(+|-)HH:MM] + // + + if (size < 10 || (s[0] == C ('-') && size < 11)) + throw invalid_value<C> (bits::date<C> (), tmp); + + // Find the end of the year token. + // + size_type pos (tmp.find (C ('-'), s[0] == C ('-') ? 5 : 4)); + + if (pos == ro_string<C>::npos + || (size - pos - 1) < 5 + || s[pos + 3] != C ('-')) + throw invalid_value<C> (bits::date<C> (), tmp); + + ro_string<C> year_fragment (s, pos); + zc_istream<C> yis (year_fragment); + + if (!(yis >> year_ && yis.exhausted () && year_ != 0)) + throw invalid_value<C> (bits::date<C> (), tmp); + + // month + // + C d1 (s[pos + 1]), d2 (s[pos + 2]); + + if (d1 < '0' || d1 > '9' || d2 < '0' || d2 > '9') + throw invalid_value<C> (bits::date<C> (), tmp); + + month_ = 10 * (d1 - '0') + (d2 - '0'); + + if (month_ < 1 || month_ > 12) + throw invalid_value<C> (bits::date<C> (), tmp); + + // day + // + d1 = s[pos + 4]; + d2 = s[pos + 5]; + + if (d1 < '0' || d1 > '9' || d2 < '0' || d2 > '9') + throw invalid_value<C> (bits::date<C> (), tmp); + + day_ = 10 * (d1 - '0') + (d2 - '0'); + + if (day_ < 1 || day_ > 31) + throw invalid_value<C> (bits::date<C> (), tmp); + + // zone + // + pos += 6; + + if (pos < size) + { + if (!bits::parse_tz (s + pos, size - pos, zh_, zm_)) + throw invalid_value<C> (bits::date<C> (), tmp); + + z_ = true; + } + else + z_ = false; + } + + template <typename C> + date date_pimpl<C>:: + post_date () + { + return z_ + ? date (year_, month_, day_, zh_, zm_) + : date (year_, month_, day_); + } + + // time + // + template <typename C> + void time_pimpl<C>:: + _pre () + { + str_.clear (); + } + + template <typename C> + void time_pimpl<C>:: + _characters (const ro_string<C>& s) + { + if (str_.size () == 0) + { + ro_string<C> tmp (s.data (), s.size ()); + + if (trim_left (tmp) != 0) + str_ += tmp; + } + else + str_ += s; + } + + template <typename C> + void time_pimpl<C>:: + _post () + { + typedef typename ro_string<C>::size_type size_type; + + ro_string<C> tmp (str_); + size_type size (trim_right (tmp)); + const C* s (tmp.data ()); + + // time := HH:MM:SS[.S+][Z|(+|-)HH:MM] + // + + if (size < 8 || s[2] != C (':') || s[5] != C (':')) + throw invalid_value<C> (bits::time<C> (), tmp); + + // hours + // + C d1 (s[0]), d2 (s[1]); + + if (d1 < '0' || d1 > '9' || d2 < '0' || d2 > '9') + throw invalid_value<C> (bits::time<C> (), tmp); + + hours_ = 10 * (d1 - '0') + (d2 - '0'); + + if (hours_ > 24) + throw invalid_value<C> (bits::time<C> (), tmp); + + // minutes + // + d1 = s[3]; + d2 = s[4]; + + if (d1 < '0' || d1 > '9' || d2 < '0' || d2 > '9') + throw invalid_value<C> (bits::time<C> (), tmp); + + minutes_ = 10 * (d1 - '0') + (d2 - '0'); + + if (minutes_ > 59) + throw invalid_value<C> (bits::time<C> (), tmp); + + // Find the end of the seconds fragment. + // + size_type pos (8); + for (; pos < size; ++pos) + { + C c (s[pos]); + + if (c == C ('Z') || c == C ('+') || c == C ('-')) + break; + } + + // At least one digit should follow the fraction point. + // + if ((pos - 6) == 3) + throw invalid_value<C> (bits::time<C> (), tmp); + + ro_string<C> seconds_fragment (s + 6, pos - 6); + zc_istream<C> sis (seconds_fragment); + + if (!(sis >> seconds_ && sis.exhausted () && seconds_ < 60.0)) + throw invalid_value<C> (bits::time<C> (), tmp); + + if (hours_ == 24 && (minutes_ != 0 || seconds_ != 0.0)) + throw invalid_value<C> (bits::time<C> (), tmp); + + // zone + // + if (pos < size) + { + if (!bits::parse_tz (s + pos, size - pos, zh_, zm_)) + throw invalid_value<C> (bits::time<C> (), tmp); + + z_ = true; + } + else + z_ = false; + } + + template <typename C> + time time_pimpl<C>:: + post_time () + { + return z_ + ? time (hours_, minutes_, seconds_, zh_, zm_) + : time (hours_, minutes_, seconds_); + } + + + // date_time + // + template <typename C> + void date_time_pimpl<C>:: + _pre () + { + str_.clear (); + } + + template <typename C> + void date_time_pimpl<C>:: + _characters (const ro_string<C>& s) + { + if (str_.size () == 0) + { + ro_string<C> tmp (s.data (), s.size ()); + + if (trim_left (tmp) != 0) + str_ += tmp; + } + else + str_ += s; + } + + template <typename C> + void date_time_pimpl<C>:: + _post () + { + typedef typename ro_string<C>::size_type size_type; + + ro_string<C> tmp (str_); + size_type size (trim_right (tmp)); + const C* s (tmp.data ()); + + // date_time := [-]CCYY[N]*-MM-DDTHH:MM:SS[.S+][Z|(+|-)HH:MM] + // + + if (size < 19 || (s[0] == C ('-') && size < 20)) + throw invalid_value<C> (bits::date_time<C> (), tmp); + + // Find the end of the year token. + // + size_type pos (tmp.find (C ('-'), s[0] == C ('-') ? 5 : 4)); + + if (pos == ro_string<C>::npos || (size - pos - 1) < 14 + || s[pos + 3] != C ('-') || s[pos + 6] != C ('T') + || s[pos + 9] != C (':') || s[pos + 12] != C (':')) + throw invalid_value<C> (bits::date_time<C> (), tmp); + + // year + // + ro_string<C> year_fragment (s, pos); + zc_istream<C> yis (year_fragment); + + if (!(yis >> year_ && yis.exhausted () && year_ != 0)) + throw invalid_value<C> (bits::date_time<C> (), tmp); + + // month + // + C d1 (s[pos + 1]), d2 (s[pos + 2]); + + if (d1 < '0' || d1 > '9' || d2 < '0' || d2 > '9') + throw invalid_value<C> (bits::date_time<C> (), tmp); + + month_ = 10 * (d1 - '0') + (d2 - '0'); + + if (month_ < 1 || month_ > 12) + throw invalid_value<C> (bits::date_time<C> (), tmp); + + // day + // + d1 = s[pos + 4]; + d2 = s[pos + 5]; + + if (d1 < '0' || d1 > '9' || d2 < '0' || d2 > '9') + throw invalid_value<C> (bits::date_time<C> (), tmp); + + day_ = 10 * (d1 - '0') + (d2 - '0'); + + if (day_ < 1 || day_ > 31) + throw invalid_value<C> (bits::date_time<C> (), tmp); + + pos += 7; // Point to the first H. + + // hours + // + d1 = s[pos]; + d2 = s[pos + 1]; + + if (d1 < '0' || d1 > '9' || d2 < '0' || d2 > '9') + throw invalid_value<C> (bits::date_time<C> (), tmp); + + hours_ = 10 * (d1 - '0') + (d2 - '0'); + + if (hours_ > 24) + throw invalid_value<C> (bits::date_time<C> (), tmp); + + // minutes + // + d1 = s[pos + 3]; + d2 = s[pos + 4]; + + if (d1 < '0' || d1 > '9' || d2 < '0' || d2 > '9') + throw invalid_value<C> (bits::date_time<C> (), tmp); + + minutes_ = 10 * (d1 - '0') + (d2 - '0'); + + if (minutes_ > 59) + throw invalid_value<C> (bits::date_time<C> (), tmp); + + // Find the end of the seconds fragment. + // + pos += 6; // Point to the first S. + + size_type sec_end (pos + 2); + for (; sec_end < size; ++sec_end) + { + C c (s[sec_end]); + + if (c == C ('Z') || c == C ('+') || c == C ('-')) + break; + } + + // At least one digit should should follow the fraction point. + // + if ((sec_end - pos) == 3) + throw invalid_value<C> (bits::date_time<C> (), tmp); + + ro_string<C> seconds_fragment (s + pos, sec_end - pos); + zc_istream<C> sis (seconds_fragment); + + if (!(sis >> seconds_ && sis.exhausted () && seconds_ < 60.0)) + throw invalid_value<C> (bits::date_time<C> (), tmp); + + if (hours_ == 24 && (minutes_ != 0 || seconds_ != 0.0)) + throw invalid_value<C> (bits::date_time<C> (), tmp); + + // zone + // + if (sec_end < size) + { + if (!bits::parse_tz (s + sec_end, size - sec_end, zh_, zm_)) + throw invalid_value<C> (bits::date_time<C> (), tmp); + + z_ = true; + } + else + z_ = false; + } + + template <typename C> + date_time date_time_pimpl<C>:: + post_date_time () + { + return z_ + ? date_time (year_, month_, day_, hours_, minutes_, seconds_, + zh_, zm_) + : date_time (year_, month_, day_, hours_, minutes_, seconds_); + } + + // duration + // + template <typename C> + void duration_pimpl<C>:: + _pre () + { + str_.clear (); + } + + template <typename C> + void duration_pimpl<C>:: + _characters (const ro_string<C>& s) + { + if (str_.size () == 0) + { + ro_string<C> tmp (s.data (), s.size ()); + + if (trim_left (tmp) != 0) + str_ += tmp; + } + else + str_ += s; + } + + namespace bits + { + template <typename C> + inline typename ro_string<C>::size_type + duration_delim (const C* s, + typename ro_string<C>::size_type pos, + typename ro_string<C>::size_type size) + { + const C* p (s + pos); + for (; p < (s + size); ++p) + { + if (*p == C ('Y') || *p == C ('D') || *p == C ('M') || + *p == C ('H') || *p == C ('M') || *p == C ('S') || + *p == C ('T')) + break; + } + + return p - s; + } + } + + template <typename C> + void duration_pimpl<C>:: + _post () + { + typedef typename ro_string<C>::size_type size_type; + + ro_string<C> tmp (str_); + size_type size (trim_right (tmp)); + + negative_ = false; + years_ = 0; + months_ = 0; + days_ = 0; + hours_ = 0; + minutes_ = 0; + seconds_ = 0.0; + + // duration := [-]P[nY][nM][nD][TnHnMn[.n+]S] + // + const C* s (tmp.data ()); + + if (size < 3 || (s[0] == C ('-') && size < 4)) + throw invalid_value<C> (bits::duration<C> (), tmp); + + size_type pos (0); + + if (s[0] == C ('-')) + { + negative_ = true; + pos++; + } + + if (s[pos++] != C ('P')) + throw invalid_value<C> (bits::duration<C> (), tmp); + + size_type del (bits::duration_delim (s, pos, size)); + + // Duration should contain at least one component. + // + if (del == size) + throw invalid_value<C> (bits::duration<C> (), tmp); + + if (s[del] == C ('Y')) + { + ro_string<C> fragment (s + pos, del - pos); + zc_istream<C> is (fragment); + + if (!(is >> years_ && is.exhausted ())) + throw invalid_value<C> (bits::duration<C> (), tmp); + + pos = del + 1; + del = bits::duration_delim (s, pos, size); + } + + if (del != size && s[del] == C ('M')) + { + ro_string<C> fragment (s + pos, del - pos); + zc_istream<C> is (fragment); + + if (!(is >> months_ && is.exhausted ())) + throw invalid_value<C> (bits::duration<C> (), tmp); + + pos = del + 1; + del = bits::duration_delim (s, pos, size); + } + + if (del != size && s[del] == C ('D')) + { + ro_string<C> fragment (s + pos, del - pos); + zc_istream<C> is (fragment); + + if (!(is >> days_ && is.exhausted ())) + throw invalid_value<C> (bits::duration<C> (), tmp); + + pos = del + 1; + del = bits::duration_delim (s, pos, size); + } + + if (del != size && s[del] == C ('T')) + { + pos = del + 1; + del = bits::duration_delim (s, pos, size); + + // At least one time component should be present. + // + if (del == size) + throw invalid_value<C> (bits::duration<C> (), tmp); + + if (s[del] == C ('H')) + { + ro_string<C> fragment (s + pos, del - pos); + zc_istream<C> is (fragment); + + if (!(is >> hours_ && is.exhausted ())) + throw invalid_value<C> (bits::duration<C> (), tmp); + + pos = del + 1; + del = bits::duration_delim (s, pos, size); + } + + if (del != size && s[del] == C ('M')) + { + ro_string<C> fragment (s + pos, del - pos); + zc_istream<C> is (fragment); + + if (!(is >> minutes_ && is.exhausted ())) + throw invalid_value<C> (bits::duration<C> (), tmp); + + pos = del + 1; + del = bits::duration_delim (s, pos, size); + } + + if (del != size && s[del] == C ('S')) + { + ro_string<C> fragment (s + pos, del - pos); + zc_istream<C> is (fragment); + + if (!(is >> seconds_ && is.exhausted () && seconds_ >= 0.0)) + throw invalid_value<C> (bits::duration<C> (), tmp); + + pos = del + 1; + } + } + + // Something did not match or appeared in the wrong order. + // + if (pos != size) + throw invalid_value<C> (bits::duration<C> (), tmp); + } + + template <typename C> + duration duration_pimpl<C>:: + post_duration () + { + return duration ( + negative_, years_, months_, days_, hours_, minutes_, seconds_); + } + } + } + } +} diff --git a/xsd/libxsd/xsd/cxx/parser/validating/xml-schema-pskel.hxx b/xsd/libxsd/xsd/cxx/parser/validating/xml-schema-pskel.hxx new file mode 100644 index 0000000..67c8057 --- /dev/null +++ b/xsd/libxsd/xsd/cxx/parser/validating/xml-schema-pskel.hxx @@ -0,0 +1,647 @@ +// file : xsd/cxx/parser/validating/xml-schema-pskel.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_CXX_PARSER_VALIDATING_XML_SCHEMA_PSKEL_HXX +#define XSD_CXX_PARSER_VALIDATING_XML_SCHEMA_PSKEL_HXX + +#include <string> +#include <memory> // auto_ptr + +#include <xsd/cxx/parser/xml-schema.hxx> +#include <xsd/cxx/parser/validating/parser.hxx> + +namespace xsd +{ + namespace cxx + { + namespace parser + { + namespace validating + { + // anyType and anySimpleType. All events are routed to the + // _any_* callbacks. + // + template <typename C> + struct any_type_pskel: complex_content<C> + { + virtual bool + _start_element_impl (const ro_string<C>&, + const ro_string<C>&, + const ro_string<C>*); + + virtual bool + _end_element_impl (const ro_string<C>&, + const ro_string<C>&); + + virtual bool + _attribute_impl_phase_two (const ro_string<C>&, + const ro_string<C>&, + const ro_string<C>&); + + virtual bool + _characters_impl (const ro_string<C>&); + + virtual void + post_any_type () = 0; + + static const C* + _static_type (); + + virtual const C* + _dynamic_type () const; + }; + + template <typename C> + struct any_simple_type_pskel: simple_content<C> + { + virtual bool + _characters_impl (const ro_string<C>&); + + virtual void + post_any_simple_type () = 0; + + static const C* + _static_type (); + + virtual const C* + _dynamic_type () const; + }; + + + // Boolean. + // + template <typename C> + struct boolean_pskel: simple_content<C> + { + virtual bool + post_boolean () = 0; + + static const C* + _static_type (); + + virtual const C* + _dynamic_type () const; + }; + + + // 8-bit + // + template <typename C> + struct byte_pskel: simple_content<C> + { + virtual signed char + post_byte () = 0; + + static const C* + _static_type (); + + virtual const C* + _dynamic_type () const; + }; + + template <typename C> + struct unsigned_byte_pskel: simple_content<C> + { + virtual unsigned char + post_unsigned_byte () = 0; + + static const C* + _static_type (); + + virtual const C* + _dynamic_type () const; + }; + + + // 16-bit + // + template <typename C> + struct short_pskel: simple_content<C> + { + virtual short + post_short () = 0; + + static const C* + _static_type (); + + virtual const C* + _dynamic_type () const; + }; + + template <typename C> + struct unsigned_short_pskel: simple_content<C> + { + virtual unsigned short + post_unsigned_short () = 0; + + static const C* + _static_type (); + + virtual const C* + _dynamic_type () const; + }; + + + // 32-bit + // + template <typename C> + struct int_pskel: simple_content<C> + { + virtual int + post_int () = 0; + + static const C* + _static_type (); + + virtual const C* + _dynamic_type () const; + }; + + template <typename C> + struct unsigned_int_pskel: simple_content<C> + { + virtual unsigned int + post_unsigned_int () = 0; + + static const C* + _static_type (); + + virtual const C* + _dynamic_type () const; + }; + + + // 64-bit + // + template <typename C> + struct long_pskel: simple_content<C> + { + virtual long long + post_long () = 0; + + static const C* + _static_type (); + + virtual const C* + _dynamic_type () const; + }; + + template <typename C> + struct unsigned_long_pskel: simple_content<C> + { + virtual unsigned long long + post_unsigned_long () = 0; + + static const C* + _static_type (); + + virtual const C* + _dynamic_type () const; + }; + + + // Arbitrary-length integers. + // + template <typename C> + struct integer_pskel: simple_content<C> + { + virtual long long + post_integer () = 0; + + static const C* + _static_type (); + + virtual const C* + _dynamic_type () const; + }; + + template <typename C> + struct negative_integer_pskel: simple_content<C> + { + virtual long long + post_negative_integer () = 0; + + static const C* + _static_type (); + + virtual const C* + _dynamic_type () const; + }; + + template <typename C> + struct non_positive_integer_pskel: simple_content<C> + { + virtual long long + post_non_positive_integer () = 0; + + static const C* + _static_type (); + + virtual const C* + _dynamic_type () const; + }; + + template <typename C> + struct positive_integer_pskel: simple_content<C> + { + virtual unsigned long long + post_positive_integer () = 0; + + static const C* + _static_type (); + + virtual const C* + _dynamic_type () const; + }; + + template <typename C> + struct non_negative_integer_pskel: simple_content<C> + { + virtual unsigned long long + post_non_negative_integer () = 0; + + static const C* + _static_type (); + + virtual const C* + _dynamic_type () const; + }; + + + // Floats. + // + template <typename C> + struct float_pskel: simple_content<C> + { + virtual float + post_float () = 0; + + static const C* + _static_type (); + + virtual const C* + _dynamic_type () const; + }; + + template <typename C> + struct double_pskel: simple_content<C> + { + virtual double + post_double () = 0; + + static const C* + _static_type (); + + virtual const C* + _dynamic_type () const; + }; + + template <typename C> + struct decimal_pskel: simple_content<C> + { + virtual double + post_decimal () = 0; + + static const C* + _static_type (); + + virtual const C* + _dynamic_type () const; + }; + + + // Strings. + // + template <typename C> + struct string_pskel: simple_content<C> + { + virtual std::basic_string<C> + post_string () = 0; + + static const C* + _static_type (); + + virtual const C* + _dynamic_type () const; + }; + + template <typename C> + struct normalized_string_pskel: simple_content<C> + { + virtual std::basic_string<C> + post_normalized_string () = 0; + + static const C* + _static_type (); + + virtual const C* + _dynamic_type () const; + }; + + template <typename C> + struct token_pskel: simple_content<C> + { + virtual std::basic_string<C> + post_token () = 0; + + static const C* + _static_type (); + + virtual const C* + _dynamic_type () const; + }; + + template <typename C> + struct name_pskel: simple_content<C> + { + virtual std::basic_string<C> + post_name () = 0; + + static const C* + _static_type (); + + virtual const C* + _dynamic_type () const; + }; + + template <typename C> + struct nmtoken_pskel: simple_content<C> + { + virtual std::basic_string<C> + post_nmtoken () = 0; + + static const C* + _static_type (); + + virtual const C* + _dynamic_type () const; + }; + + template <typename C> + struct nmtokens_pskel: list_base<C> + { + virtual string_sequence<C> + post_nmtokens () = 0; + + static const C* + _static_type (); + + virtual const C* + _dynamic_type () const; + }; + + template <typename C> + struct ncname_pskel: simple_content<C> + { + virtual std::basic_string<C> + post_ncname () = 0; + + static const C* + _static_type (); + + virtual const C* + _dynamic_type () const; + }; + + template <typename C> + struct id_pskel: simple_content<C> + { + virtual std::basic_string<C> + post_id () = 0; + + static const C* + _static_type (); + + virtual const C* + _dynamic_type () const; + }; + + template <typename C> + struct idref_pskel: simple_content<C> + { + virtual std::basic_string<C> + post_idref () = 0; + + static const C* + _static_type (); + + virtual const C* + _dynamic_type () const; + }; + + template <typename C> + struct idrefs_pskel: list_base<C> + { + virtual string_sequence<C> + post_idrefs () = 0; + + static const C* + _static_type (); + + virtual const C* + _dynamic_type () const; + }; + + // Language. + // + template <typename C> + struct language_pskel: simple_content<C> + { + virtual std::basic_string<C> + post_language () = 0; + + static const C* + _static_type (); + + virtual const C* + _dynamic_type () const; + }; + + // URI. + // + template <typename C> + struct uri_pskel: simple_content<C> + { + virtual std::basic_string<C> + post_uri () = 0; + + static const C* + _static_type (); + + virtual const C* + _dynamic_type () const; + }; + + // QName. + // + template <typename C> + struct qname_pskel: simple_content<C> + { + virtual qname<C> + post_qname () = 0; + + static const C* + _static_type (); + + virtual const C* + _dynamic_type () const; + }; + + // Base64 and hex binaries. + // + template <typename C> + struct base64_binary_pskel: simple_content<C> + { + virtual std::auto_ptr<buffer> + post_base64_binary () = 0; + + static const C* + _static_type (); + + virtual const C* + _dynamic_type () const; + }; + + template <typename C> + struct hex_binary_pskel: simple_content<C> + { + virtual std::auto_ptr<buffer> + post_hex_binary () = 0; + + static const C* + _static_type (); + + virtual const C* + _dynamic_type () const; + }; + + // Time and date types. + // + template <typename C> + struct gday_pskel: simple_content<C> + { + virtual gday + post_gday () = 0; + + static const C* + _static_type (); + + virtual const C* + _dynamic_type () const; + }; + + template <typename C> + struct gmonth_pskel: simple_content<C> + { + virtual gmonth + post_gmonth () = 0; + + static const C* + _static_type (); + + virtual const C* + _dynamic_type () const; + }; + + template <typename C> + struct gyear_pskel: simple_content<C> + { + virtual gyear + post_gyear () = 0; + + static const C* + _static_type (); + + virtual const C* + _dynamic_type () const; + }; + + template <typename C> + struct gmonth_day_pskel: simple_content<C> + { + virtual gmonth_day + post_gmonth_day () = 0; + + static const C* + _static_type (); + + virtual const C* + _dynamic_type () const; + }; + + template <typename C> + struct gyear_month_pskel: simple_content<C> + { + virtual gyear_month + post_gyear_month () = 0; + + static const C* + _static_type (); + + virtual const C* + _dynamic_type () const; + }; + + template <typename C> + struct date_pskel: simple_content<C> + { + virtual date + post_date () = 0; + + static const C* + _static_type (); + + virtual const C* + _dynamic_type () const; + }; + + template <typename C> + struct time_pskel: simple_content<C> + { + virtual time + post_time () = 0; + + static const C* + _static_type (); + + virtual const C* + _dynamic_type () const; + }; + + template <typename C> + struct date_time_pskel: simple_content<C> + { + virtual date_time + post_date_time () = 0; + + static const C* + _static_type (); + + virtual const C* + _dynamic_type () const; + }; + + template <typename C> + struct duration_pskel: simple_content<C> + { + virtual duration + post_duration () = 0; + + static const C* + _static_type (); + + virtual const C* + _dynamic_type () const; + }; + } + } + } +} + +#include <xsd/cxx/parser/validating/xml-schema-pskel.txx> + +#endif // XSD_CXX_PARSER_VALIDATING_XML_SCHEMA_PSKEL_HXX + +#include <xsd/cxx/parser/validating/xml-schema-pskel.ixx> diff --git a/xsd/libxsd/xsd/cxx/parser/validating/xml-schema-pskel.ixx b/xsd/libxsd/xsd/cxx/parser/validating/xml-schema-pskel.ixx new file mode 100644 index 0000000..6958bea --- /dev/null +++ b/xsd/libxsd/xsd/cxx/parser/validating/xml-schema-pskel.ixx @@ -0,0 +1,1249 @@ +// file : xsd/cxx/parser/validating/xml-schema-pskel.ixx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#if defined(XSD_CXX_PARSER_USE_CHAR) || !defined(XSD_CXX_PARSER_USE_WCHAR) + +#ifndef XSD_CXX_PARSER_VALIDATING_XML_SCHEMA_PSKEL_IXX_CHAR +#define XSD_CXX_PARSER_VALIDATING_XML_SCHEMA_PSKEL_IXX_CHAR + +namespace xsd +{ + namespace cxx + { + namespace parser + { + namespace validating + { + template<> + inline const char* any_type_pskel<char>:: + _static_type () + { + return "anyType http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const char* any_type_pskel<char>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const char* any_simple_type_pskel<char>:: + _static_type () + { + return "anySimpleType http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const char* any_simple_type_pskel<char>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const char* boolean_pskel<char>:: + _static_type () + { + return "boolean http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const char* boolean_pskel<char>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const char* byte_pskel<char>:: + _static_type () + { + return "byte http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const char* byte_pskel<char>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const char* unsigned_byte_pskel<char>:: + _static_type () + { + return "unsignedByte http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const char* unsigned_byte_pskel<char>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const char* short_pskel<char>:: + _static_type () + { + return "short http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const char* short_pskel<char>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const char* unsigned_short_pskel<char>:: + _static_type () + { + return "unsignedShort http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const char* unsigned_short_pskel<char>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const char* int_pskel<char>:: + _static_type () + { + return "int http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const char* int_pskel<char>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const char* unsigned_int_pskel<char>:: + _static_type () + { + return "unsignedInt http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const char* unsigned_int_pskel<char>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const char* long_pskel<char>:: + _static_type () + { + return "long http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const char* long_pskel<char>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const char* unsigned_long_pskel<char>:: + _static_type () + { + return "unsignedLong http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const char* unsigned_long_pskel<char>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const char* integer_pskel<char>:: + _static_type () + { + return "integer http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const char* integer_pskel<char>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const char* negative_integer_pskel<char>:: + _static_type () + { + return "negativeInteger http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const char* negative_integer_pskel<char>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const char* non_positive_integer_pskel<char>:: + _static_type () + { + return "nonPositiveInteger http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const char* non_positive_integer_pskel<char>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const char* positive_integer_pskel<char>:: + _static_type () + { + return "positiveInteger http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const char* positive_integer_pskel<char>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const char* non_negative_integer_pskel<char>:: + _static_type () + { + return "nonNegativeInteger http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const char* non_negative_integer_pskel<char>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const char* float_pskel<char>:: + _static_type () + { + return "float http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const char* float_pskel<char>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const char* double_pskel<char>:: + _static_type () + { + return "double http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const char* double_pskel<char>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const char* decimal_pskel<char>:: + _static_type () + { + return "decimal http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const char* decimal_pskel<char>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const char* string_pskel<char>:: + _static_type () + { + return "string http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const char* string_pskel<char>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const char* normalized_string_pskel<char>:: + _static_type () + { + return "normalizedString http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const char* normalized_string_pskel<char>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const char* token_pskel<char>:: + _static_type () + { + return "token http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const char* token_pskel<char>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const char* name_pskel<char>:: + _static_type () + { + return "Name http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const char* name_pskel<char>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const char* nmtoken_pskel<char>:: + _static_type () + { + return "NMTOKEN http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const char* nmtoken_pskel<char>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const char* nmtokens_pskel<char>:: + _static_type () + { + return "NMTOKENS http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const char* nmtokens_pskel<char>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const char* ncname_pskel<char>:: + _static_type () + { + return "NCName http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const char* ncname_pskel<char>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const char* id_pskel<char>:: + _static_type () + { + return "ID http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const char* id_pskel<char>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const char* idref_pskel<char>:: + _static_type () + { + return "IDREF http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const char* idref_pskel<char>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const char* idrefs_pskel<char>:: + _static_type () + { + return "IDREFS http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const char* idrefs_pskel<char>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const char* language_pskel<char>:: + _static_type () + { + return "language http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const char* language_pskel<char>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const char* uri_pskel<char>:: + _static_type () + { + return "anyURI http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const char* uri_pskel<char>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const char* qname_pskel<char>:: + _static_type () + { + return "QName http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const char* qname_pskel<char>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const char* base64_binary_pskel<char>:: + _static_type () + { + return "base64Binary http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const char* base64_binary_pskel<char>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const char* hex_binary_pskel<char>:: + _static_type () + { + return "hexBinary http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const char* hex_binary_pskel<char>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const char* gday_pskel<char>:: + _static_type () + { + return "gDay http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const char* gday_pskel<char>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const char* gmonth_pskel<char>:: + _static_type () + { + return "gMonth http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const char* gmonth_pskel<char>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const char* gyear_pskel<char>:: + _static_type () + { + return "gYear http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const char* gyear_pskel<char>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const char* gmonth_day_pskel<char>:: + _static_type () + { + return "gMonthDay http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const char* gmonth_day_pskel<char>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const char* gyear_month_pskel<char>:: + _static_type () + { + return "gYearMonth http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const char* gyear_month_pskel<char>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const char* date_pskel<char>:: + _static_type () + { + return "date http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const char* date_pskel<char>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const char* time_pskel<char>:: + _static_type () + { + return "time http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const char* time_pskel<char>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const char* date_time_pskel<char>:: + _static_type () + { + return "dateTime http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const char* date_time_pskel<char>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const char* duration_pskel<char>:: + _static_type () + { + return "duration http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const char* duration_pskel<char>:: + _dynamic_type () const + { + return _static_type (); + } + } + } + } +} + +#endif // XSD_CXX_PARSER_VALIDATING_XML_SCHEMA_PSKEL_IXX_CHAR +#endif // XSD_CXX_PARSER_USE_CHAR + + +#if defined(XSD_CXX_PARSER_USE_WCHAR) || !defined(XSD_CXX_PARSER_USE_CHAR) + +#ifndef XSD_CXX_PARSER_VALIDATING_XML_SCHEMA_PSKEL_IXX_WCHAR +#define XSD_CXX_PARSER_VALIDATING_XML_SCHEMA_PSKEL_IXX_WCHAR + +namespace xsd +{ + namespace cxx + { + namespace parser + { + namespace validating + { + template<> + inline const wchar_t* any_type_pskel<wchar_t>:: + _static_type () + { + return L"anyType http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const wchar_t* any_type_pskel<wchar_t>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const wchar_t* any_simple_type_pskel<wchar_t>:: + _static_type () + { + return L"anySimpleType http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const wchar_t* any_simple_type_pskel<wchar_t>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const wchar_t* boolean_pskel<wchar_t>:: + _static_type () + { + return L"boolean http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const wchar_t* boolean_pskel<wchar_t>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const wchar_t* byte_pskel<wchar_t>:: + _static_type () + { + return L"byte http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const wchar_t* byte_pskel<wchar_t>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const wchar_t* unsigned_byte_pskel<wchar_t>:: + _static_type () + { + return L"unsignedByte http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const wchar_t* unsigned_byte_pskel<wchar_t>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const wchar_t* short_pskel<wchar_t>:: + _static_type () + { + return L"short http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const wchar_t* short_pskel<wchar_t>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const wchar_t* unsigned_short_pskel<wchar_t>:: + _static_type () + { + return L"unsignedShort http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const wchar_t* unsigned_short_pskel<wchar_t>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const wchar_t* int_pskel<wchar_t>:: + _static_type () + { + return L"int http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const wchar_t* int_pskel<wchar_t>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const wchar_t* unsigned_int_pskel<wchar_t>:: + _static_type () + { + return L"unsignedInt http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const wchar_t* unsigned_int_pskel<wchar_t>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const wchar_t* long_pskel<wchar_t>:: + _static_type () + { + return L"long http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const wchar_t* long_pskel<wchar_t>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const wchar_t* unsigned_long_pskel<wchar_t>:: + _static_type () + { + return L"unsignedLong http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const wchar_t* unsigned_long_pskel<wchar_t>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const wchar_t* integer_pskel<wchar_t>:: + _static_type () + { + return L"integer http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const wchar_t* integer_pskel<wchar_t>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const wchar_t* negative_integer_pskel<wchar_t>:: + _static_type () + { + return L"negativeInteger http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const wchar_t* negative_integer_pskel<wchar_t>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const wchar_t* non_positive_integer_pskel<wchar_t>:: + _static_type () + { + return L"nonPositiveInteger http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const wchar_t* non_positive_integer_pskel<wchar_t>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const wchar_t* positive_integer_pskel<wchar_t>:: + _static_type () + { + return L"positiveInteger http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const wchar_t* positive_integer_pskel<wchar_t>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const wchar_t* non_negative_integer_pskel<wchar_t>:: + _static_type () + { + return L"nonNegativeInteger http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const wchar_t* non_negative_integer_pskel<wchar_t>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const wchar_t* float_pskel<wchar_t>:: + _static_type () + { + return L"float http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const wchar_t* float_pskel<wchar_t>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const wchar_t* double_pskel<wchar_t>:: + _static_type () + { + return L"double http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const wchar_t* double_pskel<wchar_t>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const wchar_t* decimal_pskel<wchar_t>:: + _static_type () + { + return L"decimal http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const wchar_t* decimal_pskel<wchar_t>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const wchar_t* string_pskel<wchar_t>:: + _static_type () + { + return L"string http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const wchar_t* string_pskel<wchar_t>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const wchar_t* normalized_string_pskel<wchar_t>:: + _static_type () + { + return L"normalizedString http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const wchar_t* normalized_string_pskel<wchar_t>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const wchar_t* token_pskel<wchar_t>:: + _static_type () + { + return L"token http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const wchar_t* token_pskel<wchar_t>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const wchar_t* name_pskel<wchar_t>:: + _static_type () + { + return L"Name http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const wchar_t* name_pskel<wchar_t>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const wchar_t* nmtoken_pskel<wchar_t>:: + _static_type () + { + return L"NMTOKEN http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const wchar_t* nmtoken_pskel<wchar_t>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const wchar_t* nmtokens_pskel<wchar_t>:: + _static_type () + { + return L"NMTOKENS http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const wchar_t* nmtokens_pskel<wchar_t>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const wchar_t* ncname_pskel<wchar_t>:: + _static_type () + { + return L"NCName http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const wchar_t* ncname_pskel<wchar_t>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const wchar_t* id_pskel<wchar_t>:: + _static_type () + { + return L"ID http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const wchar_t* id_pskel<wchar_t>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const wchar_t* idref_pskel<wchar_t>:: + _static_type () + { + return L"IDREF http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const wchar_t* idref_pskel<wchar_t>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const wchar_t* idrefs_pskel<wchar_t>:: + _static_type () + { + return L"IDREFS http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const wchar_t* idrefs_pskel<wchar_t>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const wchar_t* language_pskel<wchar_t>:: + _static_type () + { + return L"language http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const wchar_t* language_pskel<wchar_t>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const wchar_t* uri_pskel<wchar_t>:: + _static_type () + { + return L"anyURI http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const wchar_t* uri_pskel<wchar_t>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const wchar_t* qname_pskel<wchar_t>:: + _static_type () + { + return L"QName http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const wchar_t* qname_pskel<wchar_t>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const wchar_t* base64_binary_pskel<wchar_t>:: + _static_type () + { + return L"base64Binary http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const wchar_t* base64_binary_pskel<wchar_t>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const wchar_t* hex_binary_pskel<wchar_t>:: + _static_type () + { + return L"hexBinary http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const wchar_t* hex_binary_pskel<wchar_t>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const wchar_t* gday_pskel<wchar_t>:: + _static_type () + { + return L"gDay http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const wchar_t* gday_pskel<wchar_t>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const wchar_t* gmonth_pskel<wchar_t>:: + _static_type () + { + return L"gMonth http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const wchar_t* gmonth_pskel<wchar_t>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const wchar_t* gyear_pskel<wchar_t>:: + _static_type () + { + return L"gYear http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const wchar_t* gyear_pskel<wchar_t>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const wchar_t* gmonth_day_pskel<wchar_t>:: + _static_type () + { + return L"gMonthDay http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const wchar_t* gmonth_day_pskel<wchar_t>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const wchar_t* gyear_month_pskel<wchar_t>:: + _static_type () + { + return L"gYearMonth http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const wchar_t* gyear_month_pskel<wchar_t>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const wchar_t* date_pskel<wchar_t>:: + _static_type () + { + return L"date http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const wchar_t* date_pskel<wchar_t>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const wchar_t* time_pskel<wchar_t>:: + _static_type () + { + return L"time http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const wchar_t* time_pskel<wchar_t>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const wchar_t* date_time_pskel<wchar_t>:: + _static_type () + { + return L"dateTime http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const wchar_t* date_time_pskel<wchar_t>:: + _dynamic_type () const + { + return _static_type (); + } + + template<> + inline const wchar_t* duration_pskel<wchar_t>:: + _static_type () + { + return L"duration http://www.w3.org/2001/XMLSchema"; + } + + template<> + inline const wchar_t* duration_pskel<wchar_t>:: + _dynamic_type () const + { + return _static_type (); + } + } + } + } +} + +#endif // XSD_CXX_PARSER_VALIDATING_XML_SCHEMA_PSKEL_IXX_WCHAR +#endif // XSD_CXX_PARSER_USE_WCHAR diff --git a/xsd/libxsd/xsd/cxx/parser/validating/xml-schema-pskel.txx b/xsd/libxsd/xsd/cxx/parser/validating/xml-schema-pskel.txx new file mode 100644 index 0000000..4ae50e3 --- /dev/null +++ b/xsd/libxsd/xsd/cxx/parser/validating/xml-schema-pskel.txx @@ -0,0 +1,69 @@ +// file : xsd/cxx/parser/validating/xml-schema-pskel.txx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +namespace xsd +{ + namespace cxx + { + namespace parser + { + namespace validating + { + // any_type + // + + template <typename C> + bool any_type_pskel<C>:: + _start_element_impl (const ro_string<C>& ns, + const ro_string<C>& name, + const ro_string<C>* type) + { + this->_start_any_element (ns, name, type); + this->complex_content<C>::context_.top ().any_ = true; + return true; + } + + template <typename C> + bool any_type_pskel<C>:: + _end_element_impl (const ro_string<C>& ns, const ro_string<C>& name) + { + this->complex_content<C>::context_.top ().any_ = false; + this->_end_any_element (ns, name); + return true; + } + + + template <typename C> + bool any_type_pskel<C>:: + _attribute_impl_phase_two (const ro_string<C>& ns, + const ro_string<C>& name, + const ro_string<C>& value) + { + this->_any_attribute (ns, name, value); + return true; + } + + template <typename C> + bool any_type_pskel<C>:: + _characters_impl (const ro_string<C>& s) + { + this->_any_characters (s); + return true; + } + + // any_simple_type + // + + template <typename C> + bool any_simple_type_pskel<C>:: + _characters_impl (const ro_string<C>& s) + { + this->_any_characters (s); + return true; + } + } + } + } +} diff --git a/xsd/libxsd/xsd/cxx/parser/xerces/elements.hxx b/xsd/libxsd/xsd/cxx/parser/xerces/elements.hxx new file mode 100644 index 0000000..e0439f3 --- /dev/null +++ b/xsd/libxsd/xsd/cxx/parser/xerces/elements.hxx @@ -0,0 +1,462 @@ +// file : xsd/cxx/parser/xerces/elements.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_CXX_PARSER_XERCES_ELEMENTS_HXX +#define XSD_CXX_PARSER_XERCES_ELEMENTS_HXX + +#include <memory> // std::auto_ptr +#include <string> +#include <iosfwd> +#include <vector> + +#include <xercesc/sax/Locator.hpp> +#include <xercesc/sax/InputSource.hpp> +#include <xercesc/sax2/SAX2XMLReader.hpp> +#include <xercesc/sax2/DefaultHandler.hpp> + +#include <xsd/cxx/xml/elements.hxx> +#include <xsd/cxx/xml/error-handler.hxx> + +#include <xsd/cxx/parser/exceptions.hxx> +#include <xsd/cxx/parser/elements.hxx> +#include <xsd/cxx/parser/document.hxx> + +namespace xsd +{ + namespace cxx + { + namespace parser + { + namespace xerces + { + // + // + struct flags + { + // Use the following flags to modify the default behavior + // of the parsing functions. + // + + // Do not try to validate instance documents. + // + static const unsigned long dont_validate = 0x00000001; + + // Do not initialize the Xerces-C++ runtime. + // + static const unsigned long dont_initialize = 0x00000002; + + // Disable handling of subsequent imports for the same namespace + // in Xerces-C++ 3.1.0 and later. + // + static const unsigned long no_multiple_imports = 0x00000004; + + public: + flags (unsigned long x = 0) + : x_ (x) + { + } + + operator unsigned long () const + { + return x_; + } + + private: + unsigned long x_; + }; + + + // Parsing properties. Refer to xsd/cxx/xml/elements.hxx for + // XML-related properties. + // + template <typename C> + class properties: public xml::properties<C> + { + }; + + // + // + template <typename C> + struct document: cxx::parser::document<C> // VC 7.1 likes it qualified + { + public: + document (parser_base<C>& root, + const C* root_element_name, + bool polymorphic = false); + + document (parser_base<C>& root, + const std::basic_string<C>& root_element_name, + bool polymorphic = false); + + document (parser_base<C>& root, + const C* root_element_namespace, + const C* root_element_name, + bool polymorphic = false); + + document (parser_base<C>& root, + const std::basic_string<C>& root_element_namespace, + const std::basic_string<C>& root_element_name, + bool polymorphic = false); + + protected: + explicit + document (bool polymorphic = false); + + public: + // Parse URI or a local file. We have to overload it for const C* + // bacause xercesc::InputSource has an implicit constructor that + // takes const char*. + // + void + parse (const std::basic_string<C>& uri, + flags = 0, + const properties<C>& = properties<C> ()); + + void + parse (const C* uri, + flags = 0, + const properties<C>& = properties<C> ()); + + + // Parse URI or a local file with a user-provided error_handler + // object. + // + void + parse (const std::basic_string<C>& uri, + xml::error_handler<C>&, + flags = 0, + const properties<C>& = properties<C> ()); + + void + parse (const C* uri, + xml::error_handler<C>&, + flags = 0, + const properties<C>& = properties<C> ()); + + + // Parse URI or a local file with a user-provided ErrorHandler + // object. Note that you must initialize the Xerces-C++ runtime + // before calling these functions. + // + void + parse (const std::basic_string<C>& uri, + xercesc::ErrorHandler&, + flags = 0, + const properties<C>& = properties<C> ()); + + void + parse (const C* uri, + xercesc::ErrorHandler&, + flags = 0, + const properties<C>& = properties<C> ()); + + + // Parse URI or a local file using a user-provided SAX2XMLReader + // object. Note that you must initialize the Xerces-C++ runtime + // before calling these functions. + // + void + parse (const std::basic_string<C>& uri, + xercesc::SAX2XMLReader&, + flags = 0, + const properties<C>& = properties<C> ()); + + void + parse (const C* uri, + xercesc::SAX2XMLReader&, + flags = 0, + const properties<C>& = properties<C> ()); + + + public: + // System id is a "system" identifier of the resources (e.g., + // URI or a full file path). Public id is a "public" identifier + // of the resource (e.g., an application-specific name or a + // relative file path). System id is used to resolve relative + // paths. In diagnostics messages system id is used if public + // id is not available. Otherwise public id is used. + // + + // Parse std::istream. + // + void + parse (std::istream&, + flags = 0, + const properties<C>& = properties<C> ()); + + + // Parse std::istream with a user-provided error_handler object. + // + void + parse (std::istream&, + xml::error_handler<C>&, + flags = 0, + const properties<C>& = properties<C> ()); + + + // Parse std::istream with a user-provided ErrorHandler object. + // Note that you must initialize the Xerces-C++ runtime before + // calling this function. + // + void + parse (std::istream&, + xercesc::ErrorHandler&, + flags = 0, + const properties<C>& = properties<C> ()); + + + // Parse std::istream using a user-provided SAX2XMLReader object. + // Note that you must initialize the Xerces-C++ runtime before + // calling this function. + // + void + parse (std::istream&, + xercesc::SAX2XMLReader&, + flags = 0, + const properties<C>& = properties<C> ()); + + + public: + // Parse std::istream with a system id. + // + void + parse (std::istream&, + const std::basic_string<C>& system_id, + flags = 0, + const properties<C>& = properties<C> ()); + + + // Parse std::istream with a system id and a user-provided + // error_handler object. + // + void + parse (std::istream&, + const std::basic_string<C>& system_id, + xml::error_handler<C>&, + flags = 0, + const properties<C>& = properties<C> ()); + + + // Parse std::istream with a system id and a user-provided + // ErrorHandler object. Note that you must initialize the + // Xerces-C++ runtime before calling this function. + // + void + parse (std::istream&, + const std::basic_string<C>& system_id, + xercesc::ErrorHandler&, + flags = 0, + const properties<C>& = properties<C> ()); + + + // Parse std::istream with a system id using a user-provided + // SAX2XMLReader object. Note that you must initialize the + // Xerces-C++ runtime before calling this function. + // + void + parse (std::istream&, + const std::basic_string<C>& system_id, + xercesc::SAX2XMLReader&, + flags = 0, + const properties<C>& = properties<C> ()); + + + + public: + // Parse std::istream with system and public ids. + // + void + parse (std::istream&, + const std::basic_string<C>& system_id, + const std::basic_string<C>& public_id, + flags = 0, + const properties<C>& = properties<C> ()); + + + // Parse std::istream with system and public ids and a user-provided + // error_handler object. + // + void + parse (std::istream&, + const std::basic_string<C>& system_id, + const std::basic_string<C>& public_id, + xml::error_handler<C>&, + flags = 0, + const properties<C>& = properties<C> ()); + + + // Parse std::istream with system and public ids and a user-provided + // ErrorHandler object. Note that you must initialize the Xerces-C++ + // runtime before calling this function. + // + void + parse (std::istream&, + const std::basic_string<C>& system_id, + const std::basic_string<C>& public_id, + xercesc::ErrorHandler&, + flags = 0, + const properties<C>& = properties<C> ()); + + + // Parse std::istream with system and public ids using a user- + // provided SAX2XMLReader object. Note that you must initialize + // the Xerces-C++ runtime before calling this function. + // + void + parse (std::istream&, + const std::basic_string<C>& system_id, + const std::basic_string<C>& public_id, + xercesc::SAX2XMLReader&, + flags = 0, + const properties<C>& = properties<C> ()); + + + public: + // Parse InputSource. Note that you must initialize the Xerces-C++ + // runtime before calling this function. + // + void + parse (const xercesc::InputSource&, + flags = 0, + const properties<C>& = properties<C> ()); + + + // Parse InputSource with a user-provided error_handler object. + // Note that you must initialize the Xerces-C++ runtime before + // calling this function. + // + void + parse (const xercesc::InputSource&, + xml::error_handler<C>&, + flags = 0, + const properties<C>& = properties<C> ()); + + + // Parse InputSource with a user-provided ErrorHandler object. + // Note that you must initialize the Xerces-C++ runtime before + // calling this function. + // + void + parse (const xercesc::InputSource&, + xercesc::ErrorHandler&, + flags = 0, + const properties<C>& = properties<C> ()); + + + // Parse InputSource using a user-provided SAX2XMLReader object. + // Note that you must initialize the Xerces-C++ runtime before + // calling this function. + // + void + parse (const xercesc::InputSource&, + xercesc::SAX2XMLReader&, + flags = 0, + const properties<C>& = properties<C> ()); + + private: + void + parse (const std::basic_string<C>& uri, + xercesc::ErrorHandler&, + xercesc::SAX2XMLReader&, + flags, + const properties<C>&); + + void + parse (const xercesc::InputSource&, + xercesc::ErrorHandler&, + xercesc::SAX2XMLReader&, + flags, + const properties<C>&); + + private: + std::auto_ptr<xercesc::SAX2XMLReader> + create_sax_ (flags, const properties<C>&); + + private: + bool polymorphic_; + }; + + // + // + template <typename C> + struct event_router: xercesc::DefaultHandler + { + event_router (cxx::parser::document<C>&, bool polymorphic); + + // I know, some of those consts are stupid. But that's what + // Xerces folks put into their interfaces and VC 7.1 thinks + // there are different signatures if one strips this fluff off. + // + virtual void + setDocumentLocator (const xercesc::Locator* const); + + virtual void + startElement (const XMLCh* const uri, + const XMLCh* const lname, + const XMLCh* const qname, + const xercesc::Attributes& attributes); + + virtual void + endElement (const XMLCh* const uri, + const XMLCh* const lname, + const XMLCh* const qname); + +#if _XERCES_VERSION >= 30000 + virtual void + characters (const XMLCh* const s, const XMLSize_t length); +#else + virtual void + characters (const XMLCh* const s, const unsigned int length); +#endif + + virtual void + startPrefixMapping (const XMLCh* const prefix, + const XMLCh* const uri); + + virtual void + endPrefixMapping (const XMLCh* const prefix); + + private: + void + set_location (schema_exception<C>&); + + private: + const xercesc::Locator* loc_; + cxx::parser::document<C>& consumer_; + bool polymorphic_; + + // Last element name cache. + // + bool last_valid_; + std::basic_string<C> last_ns_; + std::basic_string<C> last_name_; + + // Namespace-prefix mapping. Only maintained in the polymorphic + // case. + // + struct ns_decl + { + ns_decl (const std::basic_string<C>& p, + const std::basic_string<C>& n) + : prefix (p), ns (n) + { + } + + std::basic_string<C> prefix; + std::basic_string<C> ns; + }; + + typedef std::vector<ns_decl> ns_decls; + + ns_decls ns_decls_; + }; + } + } + } +} + +#include <xsd/cxx/parser/xerces/elements.txx> + +#endif // XSD_CXX_PARSER_XERCES_ELEMENTS_HXX diff --git a/xsd/libxsd/xsd/cxx/parser/xerces/elements.txx b/xsd/libxsd/xsd/cxx/parser/xerces/elements.txx new file mode 100644 index 0000000..2c1e2a1 --- /dev/null +++ b/xsd/libxsd/xsd/cxx/parser/xerces/elements.txx @@ -0,0 +1,967 @@ +// file : xsd/cxx/parser/xerces/elements.txx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <istream> +#include <cstddef> // std::size_t +#include <cassert> + +#include <xercesc/sax/SAXParseException.hpp> +#include <xercesc/sax2/Attributes.hpp> +#include <xercesc/sax2/XMLReaderFactory.hpp> +#include <xercesc/validators/schema/SchemaSymbols.hpp> +#include <xercesc/util/XMLUni.hpp> + +#include <xsd/cxx/xml/string.hxx> +#include <xsd/cxx/xml/sax/std-input-source.hxx> +#include <xsd/cxx/xml/sax/bits/error-handler-proxy.hxx> +#include <xsd/cxx/xml/bits/literals.hxx> // xml::bits::{xml_prefix, etc} + +#include <xsd/cxx/parser/error-handler.hxx> +#include <xsd/cxx/parser/schema-exceptions.hxx> + +namespace xsd +{ + namespace cxx + { + namespace parser + { + namespace xerces + { + + // document + // + + template <typename C> + document<C>:: + document (parser_base<C>& parser, + const C* name, + bool polymorphic) + : cxx::parser::document<C> (parser, std::basic_string<C> (), name), + polymorphic_ (polymorphic) + { + } + + template <typename C> + document<C>:: + document (parser_base<C>& parser, + const std::basic_string<C>& name, + bool polymorphic) + : cxx::parser::document<C> (parser, std::basic_string<C> (), name), + polymorphic_ (polymorphic) + { + } + + template <typename C> + document<C>:: + document (parser_base<C>& parser, + const C* ns, + const C* name, + bool polymorphic) + : cxx::parser::document<C> (parser, ns, name), + polymorphic_ (polymorphic) + { + } + + template <typename C> + document<C>:: + document (parser_base<C>& parser, + const std::basic_string<C>& ns, + const std::basic_string<C>& name, + bool polymorphic) + : cxx::parser::document<C> (parser, ns, name), + polymorphic_ (polymorphic) + { + } + + template <typename C> + document<C>:: + document (bool polymorphic) + : polymorphic_ (polymorphic) + { + } + + // parse (uri) + // + template <typename C> + void document<C>:: + parse (const std::basic_string<C>& uri, + flags f, + const properties<C>& p) + { + xml::auto_initializer init ((f & flags::dont_initialize) == 0); + + error_handler<C> eh; + xml::sax::bits::error_handler_proxy<C> eh_proxy (eh); + std::auto_ptr<xercesc::SAX2XMLReader> sax (create_sax_ (f, p)); + + parse (uri, eh_proxy, *sax, f, p); + + eh.throw_if_failed (); + } + + template <typename C> + void document<C>:: + parse (const C* uri, + flags f, + const properties<C>& p) + { + parse (std::basic_string<C> (uri), f, p); + } + + // error_handler + // + + template <typename C> + void document<C>:: + parse (const std::basic_string<C>& uri, + xml::error_handler<C>& eh, + flags f, + const properties<C>& p) + { + xml::auto_initializer init ((f & flags::dont_initialize) == 0); + + xml::sax::bits::error_handler_proxy<C> eh_proxy (eh); + std::auto_ptr<xercesc::SAX2XMLReader> sax (create_sax_ (f, p)); + + parse (uri, eh_proxy, *sax, f, p); + + if (eh_proxy.failed ()) + throw parsing<C> (); + } + + template <typename C> + void document<C>:: + parse (const C* uri, + xml::error_handler<C>& eh, + flags f, + const properties<C>& p) + { + parse (std::basic_string<C> (uri), eh, f, p); + } + + // ErrorHandler + // + + template <typename C> + void document<C>:: + parse (const std::basic_string<C>& uri, + xercesc::ErrorHandler& eh, + flags f, + const properties<C>& p) + { + xml::sax::bits::error_handler_proxy<C> eh_proxy (eh); + std::auto_ptr<xercesc::SAX2XMLReader> sax (create_sax_ (f, p)); + + parse (uri, eh_proxy, *sax, f, p); + + if (eh_proxy.failed ()) + throw parsing<C> (); + } + + template <typename C> + void document<C>:: + parse (const C* uri, + xercesc::ErrorHandler& eh, + flags f, + const properties<C>& p) + { + parse (std::basic_string<C> (uri), eh, f, p); + } + + // SAX2XMLReader + // + + template <typename C> + void document<C>:: + parse (const std::basic_string<C>& uri, + xercesc::SAX2XMLReader& sax, + flags f, + const properties<C>& p) + { + // If there is no error handler, then fall back on the default + // implementation. + // + xercesc::ErrorHandler* eh (sax.getErrorHandler ()); + + if (eh) + { + xml::sax::bits::error_handler_proxy<C> eh_proxy (*eh); + + parse (uri, eh_proxy, sax, f, p); + + if (eh_proxy.failed ()) + throw parsing<C> (); + } + else + { + error_handler<C> fallback_eh; + xml::sax::bits::error_handler_proxy<C> eh_proxy (fallback_eh); + + parse (uri, eh_proxy, sax, f, p); + + fallback_eh.throw_if_failed (); + } + } + + template <typename C> + void document<C>:: + parse (const C* uri, + xercesc::SAX2XMLReader& sax, + flags f, + const properties<C>& p) + { + parse (std::basic_string<C> (uri), sax, f, p); + } + + // parse (istream) + // + + template <typename C> + void document<C>:: + parse (std::istream& is, + flags f, + const properties<C>& p) + { + xml::auto_initializer init ((f & flags::dont_initialize) == 0); + + xml::sax::std_input_source isrc (is); + + parse (isrc, f, p); + } + + template <typename C> + void document<C>:: + parse (std::istream& is, + xml::error_handler<C>& eh, + flags f, + const properties<C>& p) + { + xml::auto_initializer init ((f & flags::dont_initialize) == 0); + xml::sax::std_input_source isrc (is); + parse (isrc, eh, f, p); + } + + template <typename C> + void document<C>:: + parse (std::istream& is, + xercesc::ErrorHandler& eh, + flags f, + const properties<C>& p) + { + xml::sax::std_input_source isrc (is); + parse (isrc, eh, f, p); + } + + template <typename C> + void document<C>:: + parse (std::istream& is, + xercesc::SAX2XMLReader& sax, + flags f, + const properties<C>& p) + { + xml::sax::std_input_source isrc (is); + parse (isrc, sax, f, p); + } + + + // parse (istream, system_id) + // + + + template <typename C> + void document<C>:: + parse (std::istream& is, + const std::basic_string<C>& system_id, + flags f, + const properties<C>& p) + { + xml::auto_initializer init ((f & flags::dont_initialize) == 0); + xml::sax::std_input_source isrc (is, system_id); + parse (isrc, f, p); + } + + template <typename C> + void document<C>:: + parse (std::istream& is, + const std::basic_string<C>& system_id, + xml::error_handler<C>& eh, + flags f, + const properties<C>& p) + { + xml::auto_initializer init ((f & flags::dont_initialize) == 0); + xml::sax::std_input_source isrc (is, system_id); + parse (isrc, eh, f, p); + } + + template <typename C> + void document<C>:: + parse (std::istream& is, + const std::basic_string<C>& system_id, + xercesc::ErrorHandler& eh, + flags f, + const properties<C>& p) + { + xml::sax::std_input_source isrc (is, system_id); + parse (isrc, eh, f, p); + } + + template <typename C> + void document<C>:: + parse (std::istream& is, + const std::basic_string<C>& system_id, + xercesc::SAX2XMLReader& sax, + flags f, + const properties<C>& p) + { + xml::sax::std_input_source isrc (is, system_id); + parse (isrc, sax, f, p); + } + + + // parse (istream, system_id, public_id) + // + + template <typename C> + void document<C>:: + parse (std::istream& is, + const std::basic_string<C>& system_id, + const std::basic_string<C>& public_id, + flags f, + const properties<C>& p) + { + xml::auto_initializer init ((f & flags::dont_initialize) == 0); + xml::sax::std_input_source isrc (is, system_id, public_id); + parse (isrc, f, p); + } + + template <typename C> + void document<C>:: + parse (std::istream& is, + const std::basic_string<C>& system_id, + const std::basic_string<C>& public_id, + xml::error_handler<C>& eh, + flags f, + const properties<C>& p) + { + xml::auto_initializer init ((f & flags::dont_initialize) == 0); + xml::sax::std_input_source isrc (is, system_id, public_id); + parse (isrc, eh, f, p); + } + + template <typename C> + void document<C>:: + parse (std::istream& is, + const std::basic_string<C>& system_id, + const std::basic_string<C>& public_id, + xercesc::ErrorHandler& eh, + flags f, + const properties<C>& p) + { + xml::sax::std_input_source isrc (is, system_id, public_id); + parse (isrc, eh, f, p); + } + + template <typename C> + void document<C>:: + parse (std::istream& is, + const std::basic_string<C>& system_id, + const std::basic_string<C>& public_id, + xercesc::SAX2XMLReader& sax, + flags f, + const properties<C>& p) + { + xml::sax::std_input_source isrc (is, system_id, public_id); + parse (isrc, sax, f, p); + } + + + // parse (InputSource) + // + + + template <typename C> + void document<C>:: + parse (const xercesc::InputSource& is, + flags f, + const properties<C>& p) + { + error_handler<C> eh; + xml::sax::bits::error_handler_proxy<C> eh_proxy (eh); + std::auto_ptr<xercesc::SAX2XMLReader> sax (create_sax_ (f, p)); + + parse (is, eh_proxy, *sax, f, p); + + eh.throw_if_failed (); + } + + template <typename C> + void document<C>:: + parse (const xercesc::InputSource& is, + xml::error_handler<C>& eh, + flags f, + const properties<C>& p) + { + xml::sax::bits::error_handler_proxy<C> eh_proxy (eh); + std::auto_ptr<xercesc::SAX2XMLReader> sax (create_sax_ (f, p)); + + parse (is, eh_proxy, *sax, f, p); + + if (eh_proxy.failed ()) + throw parsing<C> (); + } + + template <typename C> + void document<C>:: + parse (const xercesc::InputSource& is, + xercesc::ErrorHandler& eh, + flags f, + const properties<C>& p) + { + xml::sax::bits::error_handler_proxy<C> eh_proxy (eh); + std::auto_ptr<xercesc::SAX2XMLReader> sax (create_sax_ (f, p)); + + parse (is, eh_proxy, *sax, f, p); + + if (eh_proxy.failed ()) + throw parsing<C> (); + } + + + template <typename C> + void document<C>:: + parse (const xercesc::InputSource& is, + xercesc::SAX2XMLReader& sax, + flags f, + const properties<C>& p) + { + // If there is no error handler, then fall back on the default + // implementation. + // + xercesc::ErrorHandler* eh (sax.getErrorHandler ()); + + if (eh) + { + xml::sax::bits::error_handler_proxy<C> eh_proxy (*eh); + + parse (is, eh_proxy, sax, f, p); + + if (eh_proxy.failed ()) + throw parsing<C> (); + } + else + { + error_handler<C> fallback_eh; + xml::sax::bits::error_handler_proxy<C> eh_proxy (fallback_eh); + + parse (is, eh_proxy, sax, f, p); + + fallback_eh.throw_if_failed (); + } + } + + namespace Bits + { + struct ErrorHandlingController + { + ErrorHandlingController (xercesc::SAX2XMLReader& sax, + xercesc::ErrorHandler& eh) + : sax_ (sax), eh_ (sax_.getErrorHandler ()) + { + sax_.setErrorHandler (&eh); + } + + ~ErrorHandlingController () + { + sax_.setErrorHandler (eh_); + } + + private: + xercesc::SAX2XMLReader& sax_; + xercesc::ErrorHandler* eh_; + }; + + struct ContentHandlingController + { + ContentHandlingController (xercesc::SAX2XMLReader& sax, + xercesc::ContentHandler& ch) + : sax_ (sax), ch_ (sax_.getContentHandler ()) + { + sax_.setContentHandler (&ch); + } + + ~ContentHandlingController () + { + sax_.setContentHandler (ch_); + } + + private: + xercesc::SAX2XMLReader& sax_; + xercesc::ContentHandler* ch_; + }; + }; + + template <typename C> + void document<C>:: + parse (const std::basic_string<C>& uri, + xercesc::ErrorHandler& eh, + xercesc::SAX2XMLReader& sax, + flags, + const properties<C>&) + { + event_router<C> router (*this, polymorphic_); + + Bits::ErrorHandlingController ehc (sax, eh); + Bits::ContentHandlingController chc (sax, router); + + try + { + sax.parse (xml::string (uri).c_str ()); + } + catch (const schema_exception<C>& e) + { + xml::string id (e.id ()); + + xercesc::SAXParseException se ( + xml::string (e.message ()).c_str (), + id.c_str (), + id.c_str (), +#if _XERCES_VERSION >= 30000 + static_cast<XMLFileLoc> (e.line ()), + static_cast<XMLFileLoc> (e.column ()) +#else + static_cast<XMLSSize_t> (e.line ()), + static_cast<XMLSSize_t> (e.column ()) +#endif + ); + + eh.fatalError (se); + } + } + + template <typename C> + void document<C>:: + parse (const xercesc::InputSource& is, + xercesc::ErrorHandler& eh, + xercesc::SAX2XMLReader& sax, + flags, + const properties<C>&) + { + event_router<C> router (*this, polymorphic_); + + Bits::ErrorHandlingController controller (sax, eh); + Bits::ContentHandlingController chc (sax, router); + + try + { + sax.parse (is); + } + catch (const schema_exception<C>& e) + { + xml::string id (e.id ()); + + xercesc::SAXParseException se ( + xml::string (e.message ()).c_str (), + id.c_str (), + id.c_str (), +#if _XERCES_VERSION >= 30000 + static_cast<XMLFileLoc> (e.line ()), + static_cast<XMLFileLoc> (e.column ()) +#else + static_cast<XMLSSize_t> (e.line ()), + static_cast<XMLSSize_t> (e.column ()) +#endif + ); + + eh.fatalError (se); + } + } + + + template <typename C> + std::auto_ptr<xercesc::SAX2XMLReader> document<C>:: + create_sax_ (flags f, const properties<C>& p) + { + // HP aCC cannot handle using namespace xercesc; + // + using xercesc::SAX2XMLReader; + using xercesc::XMLReaderFactory; + using xercesc::XMLUni; + + std::auto_ptr<SAX2XMLReader> sax ( + XMLReaderFactory::createXMLReader ()); + + sax->setFeature (XMLUni::fgSAX2CoreNameSpaces, true); + sax->setFeature (XMLUni::fgSAX2CoreNameSpacePrefixes, true); + sax->setFeature (XMLUni::fgXercesValidationErrorAsFatal, true); + + if (f & flags::dont_validate) + { + sax->setFeature (XMLUni::fgSAX2CoreValidation, false); + sax->setFeature (XMLUni::fgXercesSchema, false); + sax->setFeature (XMLUni::fgXercesSchemaFullChecking, false); + } + else + { + sax->setFeature (XMLUni::fgSAX2CoreValidation, true); + sax->setFeature (XMLUni::fgXercesSchema, true); + + // Xerces-C++ 3.1.0 is the first version with working multi import + // support. + // +#if _XERCES_VERSION >= 30100 + if (!(f & flags::no_multiple_imports)) + sax->setFeature (XMLUni::fgXercesHandleMultipleImports, true); +#endif + // This feature checks the schema grammar for additional + // errors. We most likely do not need it when validating + // instances (assuming the schema is valid). + // + sax->setFeature (XMLUni::fgXercesSchemaFullChecking, false); + } + + // Transfer properies if any. + // + + if (!p.schema_location ().empty ()) + { + xml::string sl (p.schema_location ()); + const void* v (sl.c_str ()); + + sax->setProperty ( + XMLUni::fgXercesSchemaExternalSchemaLocation, + const_cast<void*> (v)); + } + + if (!p.no_namespace_schema_location ().empty ()) + { + xml::string sl (p.no_namespace_schema_location ()); + const void* v (sl.c_str ()); + + sax->setProperty ( + XMLUni::fgXercesSchemaExternalNoNameSpaceSchemaLocation, + const_cast<void*> (v)); + } + + return sax; + } + + // event_router + // + template <typename C> + event_router<C>:: + event_router (cxx::parser::document<C>& consumer, bool polymorphic) + : loc_ (0), consumer_ (consumer), polymorphic_ (polymorphic) + { + } + + template <typename C> + void event_router<C>:: + setDocumentLocator (const xercesc::Locator* const loc) + { + loc_ = loc; + } + + template <typename C> + void event_router<C>:: + startElement(const XMLCh* const uri, + const XMLCh* const lname, + const XMLCh* const /*qname*/, + const xercesc::Attributes& attributes) + { + typedef std::basic_string<C> string; + + { + last_valid_ = true; + last_ns_ = xml::transcode<C> (uri); + last_name_ = xml::transcode<C> (lname); + + // Without this explicit construction IBM XL C++ complains + // about ro_string's copy ctor being private even though the + // temporary has been eliminated. Note that we cannot + // eliminate ns, name and value since ro_string does not make + // a copy. + // + ro_string<C> ro_ns (last_ns_); + ro_string<C> ro_name (last_name_); + + if (!polymorphic_) + { + try + { + consumer_.start_element (ro_ns, ro_name, 0); + } + catch (schema_exception<C>& e) + { + set_location (e); + throw; + } + } + else + { + // Search for the xsi:type attribute. + // + int i (attributes.getIndex ( + xercesc::SchemaSymbols::fgURI_XSI, + xercesc::SchemaSymbols::fgXSI_TYPE)); + + if (i == -1) + { + try + { + consumer_.start_element (ro_ns, ro_name, 0); + } + catch (schema_exception<C>& e) + { + set_location (e); + throw; + } + } + else + { + try + { + // @@ Probably need proper QName validation. + // + // Get the qualified type name and try to resolve it. + // + string qn (xml::transcode<C> (attributes.getValue (i))); + + ro_string<C> tp, tn; + typename string::size_type pos (qn.find (C (':'))); + + if (pos != string::npos) + { + tp.assign (qn.c_str (), pos); + tn.assign (qn.c_str () + pos + 1); + + if (tp.empty ()) + throw dynamic_type<C> (qn); + } + else + tn.assign (qn); + + if (tn.empty ()) + throw dynamic_type<C> (qn); + + // Search our namespace declaration stack. Sun CC 5.7 + // blows if we use const_reverse_iterator. + // + ro_string<C> tns; + for (typename ns_decls::reverse_iterator + it (ns_decls_.rbegin ()), e (ns_decls_.rend ()); + it != e; ++it) + { + if (it->prefix == tp) + { + tns.assign (it->ns); + break; + } + } + + if (!tp.empty () && tns.empty ()) + { + // The 'xml' prefix requires special handling. + // + if (tp == xml::bits::xml_prefix<C> ()) + tns.assign (xml::bits::xml_namespace<C> ()); + else + throw dynamic_type<C> (qn); + } + + // Construct the compound type id. + // + string id (tn.data (), tn.size ()); + + if (!tns.empty ()) + { + id += C (' '); + id.append (tns.data (), tns.size ()); + } + + ro_string<C> ro_id (id); + consumer_.start_element (ro_ns, ro_name, &ro_id); + } + catch (schema_exception<C>& e) + { + set_location (e); + throw; + } + } + } + } + +#if _XERCES_VERSION >= 30000 + for (XMLSize_t i (0), end (attributes.getLength()); i < end; ++i) +#else + for (unsigned int i (0), end (attributes.getLength()); i < end; ++i) +#endif + { + string ns (xml::transcode<C> (attributes.getURI (i))); + string name (xml::transcode<C> (attributes.getLocalName (i))); + string value (xml::transcode<C> (attributes.getValue (i))); + + // Without this explicit construction IBM XL C++ complains + // about ro_string's copy ctor being private even though the + // temporary has been eliminated. Note that we cannot + // eliminate ns, name and value since ro_string does not make + // a copy. + // + ro_string<C> ro_ns (ns); + ro_string<C> ro_name (name); + ro_string<C> ro_value (value); + + try + { + consumer_.attribute (ro_ns, ro_name, ro_value); + } + catch (schema_exception<C>& e) + { + set_location (e); + throw; + } + } + } + + template <typename C> + void event_router<C>:: + endElement(const XMLCh* const uri, + const XMLCh* const lname, + const XMLCh* const /*qname*/) + { + typedef std::basic_string<C> string; + + try + { + // Without this explicit construction IBM XL C++ complains + // about ro_string's copy ctor being private even though the + // temporary has been eliminated. Note that we cannot + // eliminate ns, name and value since ro_string does not make + // a copy. + // + if (last_valid_) + { + last_valid_ = false; + ro_string<C> ro_ns (last_ns_); + ro_string<C> ro_name (last_name_); + + consumer_.end_element (ro_ns, ro_name); + } + else + { + string ns (xml::transcode<C> (uri)); + string name (xml::transcode<C> (lname)); + + ro_string<C> ro_ns (ns); + ro_string<C> ro_name (name); + + consumer_.end_element (ro_ns, ro_name); + } + } + catch (schema_exception<C>& e) + { + set_location (e); + throw; + } + } + + template <typename C> + void event_router<C>:: +#if _XERCES_VERSION >= 30000 + characters (const XMLCh* const s, const XMLSize_t n) +#else + characters (const XMLCh* const s, const unsigned int n) +#endif + { + typedef std::basic_string<C> string; + + if (n != 0) + { + string str (xml::transcode<C> (s, n)); + + // Without this explicit construction IBM XL C++ complains + // about ro_string's copy ctor being private even though the + // temporary has been eliminated. Note that we cannot + // eliminate str since ro_string does not make a copy. + // + ro_string<C> ro_str (str); + + try + { + consumer_.characters (ro_str); + } + catch (schema_exception<C>& e) + { + set_location (e); + throw; + } + } + } + + template <typename C> + void event_router<C>:: + startPrefixMapping (const XMLCh* const prefix, + const XMLCh* const uri) + { + if (polymorphic_) + { + typedef std::basic_string<C> string; + + string p (xml::transcode<C> (prefix)); + string ns (xml::transcode<C> (uri)); + + ns_decls_.push_back (ns_decl (p, ns)); + } + } + + template <typename C> + void event_router<C>:: + endPrefixMapping (const XMLCh* const prefix) + { + if (polymorphic_) + { + typedef std::basic_string<C> string; + + string p (xml::transcode<C> (prefix)); + + // Here we assume the prefixes are removed in the reverse + // order of them being added. This appears to how every + // sensible implementation works. + // + assert (ns_decls_.back ().prefix == p); + + ns_decls_.pop_back (); + } + } + + template <typename C> + void event_router<C>:: + set_location (schema_exception<C>& e) + { + if (loc_ != 0) + { + const XMLCh* id (loc_->getPublicId ()); + + if (id == 0) + id = loc_->getSystemId (); + + if (id != 0) + e.id (xml::transcode<C> (id)); + +#if _XERCES_VERSION >= 30000 + e.line (static_cast<unsigned long> (loc_->getLineNumber ())); + e.column (static_cast<unsigned long> (loc_->getColumnNumber ())); +#else + XMLSSize_t l (loc_->getLineNumber ()); + XMLSSize_t c (loc_->getColumnNumber ()); + + e.line (l == -1 ? 0 : static_cast<unsigned long> (l)); + e.column (c == -1 ? 0: static_cast<unsigned long> (c)); +#endif + } + } + } + } + } +} diff --git a/xsd/libxsd/xsd/cxx/parser/xml-schema.hxx b/xsd/libxsd/xsd/cxx/parser/xml-schema.hxx new file mode 100644 index 0000000..5d1f1c6 --- /dev/null +++ b/xsd/libxsd/xsd/cxx/parser/xml-schema.hxx @@ -0,0 +1,572 @@ +// file : xsd/cxx/parser/xml-schema.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_CXX_PARSER_XML_SCHEMA_HXX +#define XSD_CXX_PARSER_XML_SCHEMA_HXX + +#include <string> +#include <vector> +#include <cstddef> // std::size_t + +namespace xsd +{ + namespace cxx + { + namespace parser + { + // String sequence. Used for the NMTOKENS and IDREFS types. + // + template <typename C> + class string_sequence: public std::vector<std::basic_string<C> > + { + public: + typedef std::basic_string<C> value_type; + typedef std::vector<value_type> base; + typedef typename base::size_type size_type; + + string_sequence (); + + explicit + string_sequence (size_type n, const value_type& x = value_type ()); + + template <typename I> + string_sequence (const I& begin, const I& end); + }; + + template <typename C> + bool + operator== (const string_sequence<C>&, const string_sequence<C>&); + + template <typename C> + bool + operator!= (const string_sequence<C>&, const string_sequence<C>&); + + + // QName + // + template <typename C> + class qname + { + public: + explicit + qname (const std::basic_string<C>& name); + + qname (const std::basic_string<C>& prefix, + const std::basic_string<C>& name); + + void + swap (qname&); + + const std::basic_string<C>& + prefix () const; + + std::basic_string<C>& + prefix (); + + void + prefix (const std::basic_string<C>&); + + const std::basic_string<C>& + name () const; + + std::basic_string<C>& + name (); + + void + name (const std::basic_string<C>&); + + private: + std::basic_string<C> prefix_; + std::basic_string<C> name_; + }; + + template <typename C> + bool + operator== (const qname<C>&, const qname<C>&); + + template <typename C> + bool + operator!= (const qname<C>&, const qname<C>&); + + + // Binary buffer. Used for the base64Binary and hexBinary types. + // + class buffer + { + public: + typedef std::size_t size_t; + + class bounds {}; // Out of bounds exception. + + public: + ~buffer (); + + explicit + buffer (size_t size = 0); + buffer (size_t size, size_t capacity); + buffer (const void* data, size_t size); + buffer (const void* data, size_t size, size_t capacity); + + // If the assume_ownership argument is true, the buffer will + // assume the ownership of the data and will release the memory + // by calling operator delete (). + // + buffer (void* data, + size_t size, + size_t capacity, + bool assume_ownership); + + buffer (const buffer&); + + public: + buffer& + operator= (const buffer&); + + public: + size_t + capacity () const; + + // Returns true if the underlying buffer has moved. + // + bool + capacity (size_t); + + public: + size_t + size () const; + + // Returns true if the underlying buffer has moved. + // + bool + size (size_t); + + public: + const char* + data () const; + + char* + data (); + + const char* + begin () const; + + char* + begin (); + + const char* + end () const; + + char* + end (); + + public: + void + swap (buffer&); + + private: + bool + capacity (size_t capacity, bool copy); + + private: + char* data_; + size_t size_; + size_t capacity_; + }; + + bool + operator== (const buffer&, const buffer&); + + bool + operator!= (const buffer&, const buffer&); + + + // Time and date types. + // + + class time_zone + { + public: + time_zone (); + time_zone (short hours, short minutes); + + // Returns true if time zone is specified. + // + bool + zone_present () const; + + // Resets the time zone to the 'not specified' state. + // + void + zone_reset (); + + short + zone_hours () const; + + void + zone_hours (short); + + short + zone_minutes () const; + + void + zone_minutes (short); + + private: + bool present_; + short hours_; + short minutes_; + }; + + bool + operator== (const time_zone&, const time_zone&); + + bool + operator!= (const time_zone&, const time_zone&); + + + class gday: public time_zone + { + public: + explicit + gday (unsigned short day); + gday (unsigned short day, short zone_hours, short zone_minutes); + + unsigned short + day () const; + + void + day (unsigned short); + + private: + unsigned short day_; + }; + + bool + operator== (const gday&, const gday&); + + bool + operator!= (const gday&, const gday&); + + + class gmonth: public time_zone + { + public: + explicit + gmonth (unsigned short month); + gmonth (unsigned short month, short zone_hours, short zone_minutes); + + unsigned short + month () const; + + void + month (unsigned short); + + private: + unsigned short month_; + }; + + bool + operator== (const gmonth&, const gmonth&); + + bool + operator!= (const gmonth&, const gmonth&); + + + class gyear: public time_zone + { + public: + explicit + gyear (int year); + gyear (int year, short zone_hours, short zone_minutes); + + int + year () const; + + void + year (int); + + private: + int year_; + }; + + bool + operator== (const gyear&, const gyear&); + + bool + operator!= (const gyear&, const gyear&); + + + class gmonth_day: public time_zone + { + public: + gmonth_day (unsigned short month, unsigned short day); + gmonth_day (unsigned short month, unsigned short day, + short zone_hours, short zone_minutes); + + unsigned short + month () const; + + void + month (unsigned short); + + unsigned short + day () const; + + void + day (unsigned short); + + private: + unsigned short month_; + unsigned short day_; + }; + + bool + operator== (const gmonth_day&, const gmonth_day&); + + bool + operator!= (const gmonth_day&, const gmonth_day&); + + + class gyear_month: public time_zone + { + public: + gyear_month (int year, unsigned short month); + gyear_month (int year, unsigned short month, + short zone_hours, short zone_minutes); + + int + year () const; + + void + year (int); + + unsigned short + month () const; + + void + month (unsigned short); + + private: + int year_; + unsigned short month_; + }; + + bool + operator== (const gyear_month&, const gyear_month&); + + bool + operator!= (const gyear_month&, const gyear_month&); + + + class date: public time_zone + { + public: + date (int year, unsigned short month, unsigned short day); + date (int year, unsigned short month, unsigned short day, + short zone_hours, short zone_minutes); + + int + year () const; + + void + year (int); + + unsigned short + month () const; + + void + month (unsigned short); + + unsigned short + day () const; + + void + day (unsigned short); + + private: + int year_; + unsigned short month_; + unsigned short day_; + }; + + bool + operator== (const date&, const date&); + + bool + operator!= (const date&, const date&); + + + class time: public time_zone + { + public: + time (unsigned short hours, unsigned short minutes, double seconds); + time (unsigned short hours, unsigned short minutes, double seconds, + short zone_hours, short zone_minutes); + + unsigned short + hours () const; + + void + hours (unsigned short); + + unsigned short + minutes () const; + + void + minutes (unsigned short); + + double + seconds () const; + + void + seconds (double); + + private: + unsigned short hours_; + unsigned short minutes_; + double seconds_; + }; + + bool + operator== (const time&, const time&); + + bool + operator!= (const time&, const time&); + + + class date_time: public time_zone + { + public: + date_time (int year, unsigned short month, unsigned short day, + unsigned short hours, unsigned short minutes, double seconds); + + date_time (int year, unsigned short month, unsigned short day, + unsigned short hours, unsigned short minutes, double seconds, + short zone_hours, short zone_minutes); + + int + year () const; + + void + year (int); + + unsigned short + month () const; + + void + month (unsigned short); + + unsigned short + day () const; + + void + day (unsigned short); + + unsigned short + hours () const; + + void + hours (unsigned short); + + unsigned short + minutes () const; + + void + minutes (unsigned short); + + double + seconds () const; + + void + seconds (double); + + private: + int year_; + unsigned short month_; + unsigned short day_; + unsigned short hours_; + unsigned short minutes_; + double seconds_; + }; + + bool + operator== (const date_time&, const date_time&); + + bool + operator!= (const date_time&, const date_time&); + + + class duration + { + public: + duration (bool negative, + unsigned int years, unsigned int months, unsigned int days, + unsigned int hours, unsigned int minutes, double seconds); + + bool + negative () const; + + void + negative (bool); + + unsigned int + years () const; + + void + years (unsigned int); + + unsigned int + months () const; + + void + months (unsigned int); + + unsigned int + days () const; + + void + days (unsigned int); + + unsigned int + hours () const; + + void + hours (unsigned int); + + unsigned int + minutes () const; + + void + minutes (unsigned int); + + double + seconds () const; + + void + seconds (double); + + private: + bool negative_; + unsigned int years_; + unsigned int months_; + unsigned int days_; + unsigned int hours_; + unsigned int minutes_; + double seconds_; + }; + + bool + operator== (const duration&, const duration&); + + bool + operator!= (const duration&, const duration&); + } + } +} + +#include <xsd/cxx/parser/xml-schema.ixx> +#include <xsd/cxx/parser/xml-schema.txx> + +#endif // XSD_CXX_PARSER_XML_SCHEMA_HXX diff --git a/xsd/libxsd/xsd/cxx/parser/xml-schema.ixx b/xsd/libxsd/xsd/cxx/parser/xml-schema.ixx new file mode 100644 index 0000000..891bc6f --- /dev/null +++ b/xsd/libxsd/xsd/cxx/parser/xml-schema.ixx @@ -0,0 +1,1022 @@ +// file : xsd/cxx/parser/xml-schema.ixx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <new> // operator new/delete +#include <cstring> // std::memcpy, std::memcmp + +namespace xsd +{ + namespace cxx + { + namespace parser + { + // string_sequence + // + template <typename C> + string_sequence<C>:: + string_sequence () + { + } + + template <typename C> + string_sequence<C>:: + string_sequence (size_type n, const value_type& x) + : base (n, x) + { + } + + template <typename C> + template <typename I> + string_sequence<C>:: + string_sequence (const I& begin, const I& end) + : base (begin, end) + { + } + + template <typename C> + inline bool + operator!= (const string_sequence<C>& a, const string_sequence<C>& b) + { + return !(a == b); + } + + // qname + // + template <typename C> + inline qname<C>:: + qname (const std::basic_string<C>& name) + : name_ (name) + { + } + + template <typename C> + inline qname<C>:: + qname (const std::basic_string<C>& prefix, + const std::basic_string<C>& name) + : prefix_ (prefix), name_ (name) + { + } + + template <typename C> + void qname<C>:: + swap (qname<C>& x) + { + prefix_.swap (x.prefix_); + name_.swap (x.name_); + } + + template <typename C> + inline const std::basic_string<C>& qname<C>:: + prefix () const + { + return prefix_; + } + + template <typename C> + inline std::basic_string<C>& qname<C>:: + prefix () + { + return prefix_; + } + + template <typename C> + inline void qname<C>:: + prefix (const std::basic_string<C>& prefix) + { + prefix_ = prefix; + } + + template <typename C> + inline const std::basic_string<C>& qname<C>:: + name () const + { + return name_; + } + + template <typename C> + inline std::basic_string<C>& qname<C>:: + name () + { + return name_; + } + + template <typename C> + inline void qname<C>:: + name (const std::basic_string<C>& name) + { + name_ = name; + } + + template <typename C> + inline bool + operator== (const qname<C>& a, const qname<C>& b) + { + return a.prefix () == b.prefix () && a.name () == b.name (); + } + + template <typename C> + inline bool + operator!= (const qname<C>& a, const qname<C>& b) + { + return !(a == b); + } + + // buffer + // + inline buffer:: + ~buffer () + { + if (data_) + operator delete (data_); + } + + inline buffer:: + buffer (size_t size) + : data_ (0), size_ (0), capacity_ (0) + { + capacity (size); + size_ = size; + } + + inline buffer:: + buffer (size_t size, size_t cap) + : data_ (0), size_ (0), capacity_ (0) + { + if (size > cap) + throw bounds (); + + capacity (cap); + size_ = size; + } + + inline buffer:: + buffer (const void* data, size_t size) + : data_ (0), size_ (0), capacity_ (0) + { + capacity (size); + size_ = size; + + if (size_) + std::memcpy (data_, data, size_); + } + + inline buffer:: + buffer (const void* data, size_t size, size_t cap) + : data_ (0), size_ (0), capacity_ (0) + { + if (size > cap) + throw bounds (); + + capacity (cap); + size_ = size; + + if (size_) + std::memcpy (data_, data, size_); + } + + inline buffer:: + buffer (void* data, size_t size, size_t cap, bool own) + : data_ (0), size_ (0), capacity_ (0) + { + if (size > cap) + throw bounds (); + + if (own) + { + data_ = reinterpret_cast<char*> (data); + size_ = size; + capacity_ = cap; + } + else + { + capacity (cap); + size_ = size; + + if (size_) + std::memcpy (data_, data, size_); + } + } + + inline buffer:: + buffer (const buffer& other) + : data_ (0), size_ (0), capacity_ (0) + { + capacity (other.capacity_); + size_ = other.size_; + + if (size_) + std::memcpy (data_, other.data_, size_); + } + + inline buffer& buffer:: + operator= (const buffer& other) + { + if (this != &other) + { + capacity (other.capacity_, false); + size_ = other.size_; + + if (size_) + std::memcpy (data_, other.data_, size_); + } + + return *this; + } + + inline size_t buffer:: + capacity () const + { + return capacity_; + } + + inline bool buffer:: + capacity (size_t cap) + { + return capacity (cap, true); + } + + inline size_t buffer:: + size () const + { + return size_; + } + + inline bool buffer:: + size (size_t size) + { + bool r (false); + + if (size > capacity_) + r = capacity (size); + + size_ = size; + + return r; + } + + inline const char* buffer:: + data () const + { + return data_; + } + + inline char* buffer:: + data () + { + return data_; + } + + inline const char* buffer:: + begin () const + { + return data_; + } + + inline char* buffer:: + begin () + { + return data_; + } + + inline const char* buffer:: + end () const + { + return data_ + size_; + } + + inline char* buffer:: + end () + { + return data_ + size_; + } + + inline void buffer:: + swap (buffer& other) + { + char* tmp_data (data_); + size_t tmp_size (size_); + size_t tmp_capacity (capacity_); + + data_ = other.data_; + size_ = other.size_; + capacity_ = other.capacity_; + + other.data_ = tmp_data; + other.size_ = tmp_size; + other.capacity_ = tmp_capacity; + } + + inline bool buffer:: + capacity (size_t capacity, bool copy) + { + if (size_ > capacity) + throw bounds (); + + if (capacity <= capacity_) + { + return false; // Do nothing if shrinking is requested. + } + else + { + char* data (reinterpret_cast<char*> (operator new (capacity))); + + if (copy && size_ > 0) + std::memcpy (data, data_, size_); + + if (data_) + operator delete (data_); + + data_ = data; + capacity_ = capacity; + + return true; + } + } + + inline bool + operator== (const buffer& a, const buffer& b) + { + return a.size () == b.size () && + std::memcmp (a.data (), b.data (), a.size ()) == 0; + } + + inline bool + operator!= (const buffer& a, const buffer& b) + { + return !(a == b); + } + + // time_zone + // + inline time_zone:: + time_zone () + : present_ (false) + { + } + + inline time_zone:: + time_zone (short h, short m) + : present_ (true), hours_ (h), minutes_ (m) + { + } + + inline bool time_zone:: + zone_present () const + { + return present_; + } + + inline void time_zone:: + zone_reset () + { + present_ = false; + } + + inline short time_zone:: + zone_hours () const + { + return hours_; + } + + inline void time_zone:: + zone_hours (short h) + { + hours_ = h; + present_ = true; + } + + inline short time_zone:: + zone_minutes () const + { + return minutes_; + } + + inline void time_zone:: + zone_minutes (short m) + { + minutes_ = m; + present_ = true; + } + + inline bool + operator== (const time_zone& x, const time_zone& y) + { + return x.zone_present () + ? y.zone_present () && + x.zone_hours () == y.zone_hours () && + x.zone_minutes () == y.zone_minutes () + : !y.zone_present (); + } + + inline bool + operator!= (const time_zone& x, const time_zone& y) + { + return !(x == y); + } + + // gday + // + inline gday:: + gday (unsigned short day) + : day_ (day) + { + } + + inline gday:: + gday (unsigned short day, short zh, short zm) + : time_zone (zh, zm), day_ (day) + { + } + + inline unsigned short gday:: + day () const + { + return day_; + } + + inline void gday:: + day (unsigned short day) + { + day_ = day; + } + + inline bool + operator== (const gday& a, const gday& b) + { + const time_zone& az = a; + const time_zone& bz = b; + + return a.day () == b.day () && az == bz; + } + + inline bool + operator!= (const gday& a, const gday& b) + { + return !(a == b); + } + + // gmonth + // + inline gmonth:: + gmonth (unsigned short month) + : month_ (month) + { + } + + inline gmonth:: + gmonth (unsigned short month, short zh, short zm) + : time_zone (zh, zm), month_ (month) + { + } + + inline unsigned short gmonth:: + month () const + { + return month_; + } + + inline void gmonth:: + month (unsigned short month) + { + month_ = month; + } + + inline bool + operator== (const gmonth& a, const gmonth& b) + { + const time_zone& az = a; + const time_zone& bz = b; + + return a.month () == b.month () && az == bz; + } + + inline bool + operator!= (const gmonth& a, const gmonth& b) + { + return !(a == b); + } + + // gyear + // + inline gyear:: + gyear (int year) + : year_ (year) + { + } + + inline gyear:: + gyear (int year, short zh, short zm) + : time_zone (zh, zm), year_ (year) + { + } + + inline int gyear:: + year () const + { + return year_; + } + + inline void gyear:: + year (int year) + { + year_ = year; + } + + inline bool + operator== (const gyear& a, const gyear& b) + { + const time_zone& az = a; + const time_zone& bz = b; + + return a.year () == b.year () && az == bz; + } + + inline bool + operator!= (const gyear& a, const gyear& b) + { + return !(a == b); + } + + // gmonth_day + // + inline gmonth_day:: + gmonth_day (unsigned short month, unsigned short day) + : month_ (month), day_ (day) + { + } + + inline gmonth_day:: + gmonth_day (unsigned short month, + unsigned short day, + short zh, short zm) + : time_zone (zh, zm), month_ (month), day_ (day) + { + } + + inline unsigned short gmonth_day:: + month () const + { + return month_; + } + + inline void gmonth_day:: + month (unsigned short month) + { + month_ = month; + } + + inline unsigned short gmonth_day:: + day () const + { + return day_; + } + + inline void gmonth_day:: + day (unsigned short day) + { + day_ = day; + } + + inline bool + operator== (const gmonth_day& a, const gmonth_day& b) + { + const time_zone& az = a; + const time_zone& bz = b; + + return a.month () == b.month () && + a.day () == b.day () && + az == bz; + } + + inline bool + operator!= (const gmonth_day& a, const gmonth_day& b) + { + return !(a == b); + } + + // gyear_month + // + inline gyear_month:: + gyear_month (int year, unsigned short month) + : year_ (year), month_ (month) + { + } + + inline gyear_month:: + gyear_month (int year, unsigned short month, + short zh, short zm) + : time_zone (zh, zm), year_ (year), month_ (month) + { + } + + inline int gyear_month:: + year () const + { + return year_; + } + + inline void gyear_month:: + year (int year) + { + year_ = year; + } + + inline unsigned short gyear_month:: + month () const + { + return month_; + } + + inline void gyear_month:: + month (unsigned short month) + { + month_ = month; + } + + inline bool + operator== (const gyear_month& a, const gyear_month& b) + { + const time_zone& az = a; + const time_zone& bz = b; + + return a.year () == b.year () && + a.month () == b.month () && + az == bz; + } + + inline bool + operator!= (const gyear_month& a, const gyear_month& b) + { + return !(a == b); + } + + // date + // + inline date:: + date (int year, unsigned short month, unsigned short day) + : year_ (year), month_ (month), day_ (day) + { + } + + inline date:: + date (int year, unsigned short month, unsigned short day, + short zh, short zm) + : time_zone (zh, zm), year_ (year), month_ (month), day_ (day) + { + } + + inline int date:: + year () const + { + return year_; + } + + inline void date:: + year (int year) + { + year_ = year; + } + + inline unsigned short date:: + month () const + { + return month_; + } + + inline void date:: + month (unsigned short month) + { + month_ = month; + } + + inline unsigned short date:: + day () const + { + return day_; + } + + inline void date:: + day (unsigned short day) + { + day_ = day; + } + + inline bool + operator== (const date& a, const date& b) + { + const time_zone& az = a; + const time_zone& bz = b; + + return a.year () == b.year () && + a.month () == b.month () && + a.day () == b.day () && + az == bz; + } + + inline bool + operator!= (const date& a, const date& b) + { + return !(a == b); + } + + // time + // + inline time:: + time (unsigned short hours, unsigned short minutes, double seconds) + : hours_ (hours), minutes_ (minutes), seconds_ (seconds) + { + } + + inline time:: + time (unsigned short hours, unsigned short minutes, double seconds, + short zh, short zm) + : time_zone (zh, zm), + hours_ (hours), minutes_ (minutes), seconds_ (seconds) + { + } + + inline unsigned short time:: + hours () const + { + return hours_; + } + + inline void time:: + hours (unsigned short hours) + { + hours_ = hours; + } + + inline unsigned short time:: + minutes () const + { + return minutes_; + } + + inline void time:: + minutes (unsigned short minutes) + { + minutes_ = minutes; + } + + inline double time:: + seconds () const + { + return seconds_; + } + + inline void time:: + seconds (double seconds) + { + seconds_ = seconds; + } + + inline bool + operator== (const time& a, const time& b) + { + const time_zone& az = a; + const time_zone& bz = b; + + return a.hours () == b.hours () && + a.minutes () == b.minutes () && + a.seconds () == b.seconds () && + az == bz; + } + + inline bool + operator!= (const time& a, const time& b) + { + return !(a == b); + } + + // date_time + // + inline date_time:: + date_time (int year, unsigned short month, unsigned short day, + unsigned short hours, unsigned short minutes, double seconds) + : year_ (year), month_ (month), day_ (day), + hours_ (hours), minutes_ (minutes), seconds_ (seconds) + { + } + + inline date_time:: + date_time (int year, unsigned short month, unsigned short day, + unsigned short hours, unsigned short minutes, double seconds, + short zh, short zm) + : time_zone (zh, zm), + year_ (year), month_ (month), day_ (day), + hours_ (hours), minutes_ (minutes), seconds_ (seconds) + { + } + + inline int date_time:: + year () const + { + return year_; + } + + inline void date_time:: + year (int year) + { + year_ = year; + } + + inline unsigned short date_time:: + month () const + { + return month_; + } + + inline void date_time:: + month (unsigned short month) + { + month_ = month; + } + + inline unsigned short date_time:: + day () const + { + return day_; + } + + inline void date_time:: + day (unsigned short day) + { + day_ = day; + } + + inline unsigned short date_time:: + hours () const + { + return hours_; + } + + inline void date_time:: + hours (unsigned short hours) + { + hours_ = hours; + } + + inline unsigned short date_time:: + minutes () const + { + return minutes_; + } + + inline void date_time:: + minutes (unsigned short minutes) + { + minutes_ = minutes; + } + + inline double date_time:: + seconds () const + { + return seconds_; + } + + inline void date_time:: + seconds (double seconds) + { + seconds_ = seconds; + } + + inline bool + operator== (const date_time& a, const date_time& b) + { + const time_zone& az = a; + const time_zone& bz = b; + + return a.year () == b.year () && + a.month () == b.month () && + a.day () == b.day () && + a.hours () == b.hours () && + a.minutes () == b.minutes () && + a.seconds () == b.seconds () && + az == bz; + } + + inline bool + operator!= (const date_time& a, const date_time& b) + { + return !(a == b); + } + + // duration + // + inline duration:: + duration (bool negative, + unsigned int years, unsigned int months, unsigned int days, + unsigned int hours, unsigned int minutes, double seconds) + : negative_ (negative), + years_ (years), months_ (months), days_ (days), + hours_ (hours), minutes_ (minutes), seconds_ (seconds) + { + } + + inline bool duration:: + negative () const + { + return negative_; + } + + inline void duration:: + negative (bool negative) + { + negative_ = negative; + } + + inline unsigned int duration:: + years () const + { + return years_; + } + + inline void duration:: + years (unsigned int years) + { + years_ = years; + } + + inline unsigned int duration:: + months () const + { + return months_; + } + + inline void duration:: + months (unsigned int months) + { + months_ = months; + } + + inline unsigned int duration:: + days () const + { + return days_; + } + + inline void duration:: + days (unsigned int days) + { + days_ = days; + } + + inline unsigned int duration:: + hours () const + { + return hours_; + } + + inline void duration:: + hours (unsigned int hours) + { + hours_ = hours; + } + + inline unsigned int duration:: + minutes () const + { + return minutes_; + } + + inline void duration:: + minutes (unsigned int minutes) + { + minutes_ = minutes; + } + + inline double duration:: + seconds () const + { + return seconds_; + } + + inline void duration:: + seconds (double seconds) + { + seconds_ = seconds; + } + + inline bool + operator== (const duration& a, const duration& b) + { + return a.negative () == b.negative () && + a.years () == b.years () && + a.months () == b.months () && + a.days () == b.days () && + a.hours () == b.hours () && + a.minutes () == b.minutes () && + a.seconds () == b.seconds (); + } + + inline bool + operator!= (const duration& a, const duration& b) + { + return !(a == b); + } + } + } +} diff --git a/xsd/libxsd/xsd/cxx/parser/xml-schema.txx b/xsd/libxsd/xsd/cxx/parser/xml-schema.txx new file mode 100644 index 0000000..5f41a18 --- /dev/null +++ b/xsd/libxsd/xsd/cxx/parser/xml-schema.txx @@ -0,0 +1,34 @@ +// file : xsd/cxx/parser/xml-schema.txx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +namespace xsd +{ + namespace cxx + { + namespace parser + { + // string_sequence + // + template <typename C> + bool + operator== (const string_sequence<C>& a, const string_sequence<C>& b) + { + if (a.size () != b.size ()) + return false; + + for (typename string_sequence<C>::const_iterator + ai (a.begin ()), bi (b.begin ()), ae (a.end ()); + ai != ae; ++ai, ++bi) + { + if (*ai != *bi) + return false; + } + + return true; + } + } + } +} + diff --git a/xsd/libxsd/xsd/cxx/post.hxx b/xsd/libxsd/xsd/cxx/post.hxx new file mode 100644 index 0000000..b119bb4 --- /dev/null +++ b/xsd/libxsd/xsd/cxx/post.hxx @@ -0,0 +1,13 @@ +// file : xsd/cxx/post.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + + +#ifdef _MSC_VER +# if (_MSC_VER >= 1400) +# include <xsd/cxx/compilers/vc-8/post.hxx> +# elif (_MSC_VER >= 1300) +# include <xsd/cxx/compilers/vc-7/post.hxx> +# endif +#endif diff --git a/xsd/libxsd/xsd/cxx/pre.hxx b/xsd/libxsd/xsd/cxx/pre.hxx new file mode 100644 index 0000000..845a854 --- /dev/null +++ b/xsd/libxsd/xsd/cxx/pre.hxx @@ -0,0 +1,15 @@ +// file : xsd/cxx/pre.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + + +#ifdef _MSC_VER +# if (_MSC_VER >= 1400) +# include <xsd/cxx/compilers/vc-8/pre.hxx> +# elif (_MSC_VER >= 1300) +# include <xsd/cxx/compilers/vc-7/pre.hxx> +# else +# error Microsoft Visual C++ 6 is not supported. +# endif +#endif diff --git a/xsd/libxsd/xsd/cxx/ro-string.hxx b/xsd/libxsd/xsd/cxx/ro-string.hxx new file mode 100644 index 0000000..fd80cac --- /dev/null +++ b/xsd/libxsd/xsd/cxx/ro-string.hxx @@ -0,0 +1,430 @@ +// file : xsd/cxx/ro-string.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_CXX_RO_STRING_HXX +#define XSD_CXX_RO_STRING_HXX + +#include <string> +#include <cstddef> // std::size_t +#include <ostream> + +namespace xsd +{ + namespace cxx + { + // Read-only string class template. + // + template <typename C> + class ro_string + { + public: + typedef std::char_traits<C> traits_type; + typedef std::size_t size_type; + + static const size_type npos = ~(size_type (0)); + + public: + ro_string () + : data_ (0), size_ (0) + { + } + + ro_string (const C* s) + : data_ (s), size_ (traits_type::length (s)) + { + } + + ro_string (const C* s, size_type size) + : data_ (s), size_ (size) + { + } + + ro_string (const std::basic_string<C>& s) + : data_ (s.data ()), size_ (s.size ()) + { + } + + operator std::basic_string<C> () const + { + return std::basic_string<C> (data (), size ()); + } + + private: + ro_string (const ro_string&); + + ro_string& + operator= (const ro_string&); + + public: + // The returned string is not necessarily terminated with '\0'. + // If size() returns 0, the returned pointer may be 0. + // + const C* + data () const + { + return data_; + } + + size_type + size () const + { + return size_; + } + + size_type + length () const + { + return size (); + } + + public: + bool + empty () const + { + return size () == 0; + } + + const C& + operator[] (size_type pos) const + { + return data ()[pos]; + } + + public: + void + assign (const C* s) + { + data_ = s; + size_ = traits_type::length (s); + } + + void + assign (const C* s, size_type size) + { + data_ = s; + size_ = size; + } + + void + assign (const std::basic_string<C>& s) + { + data_ = s.c_str (); + size_ = s.size (); + } + + public: + int + compare (const ro_string& str) const + { + return compare (str.data (), str.size ()); + } + + int + compare (const std::basic_string<C>& str) const + { + return compare (str.c_str (), str.size ()); + } + + int + compare (const C* str) const + { + return compare (str, traits_type::length (str)); + } + + int + compare (const C* str, size_type n) const + { + size_type s1 (size ()); + size_type s (s1 < n ? s1 : n); + + int r (s != 0 ? traits_type::compare (data (), str, s) : 0); + + if (!r && s1 != n) + r = s1 < n ? -1 : 1; + + return r; + } + + public: + size_type + find (C c, size_type pos = 0) const; + + private: + const C* data_; + size_type size_; + }; + + // operator== + // + template <typename C> + inline bool + operator== (const ro_string<C>& a, const ro_string<C>& b) + { + return a.compare (b) == 0; + } + + template <typename C> + inline bool + operator== (const ro_string<C>& a, const std::basic_string<C>& b) + { + return a.compare (b) == 0; + } + + template <typename C> + inline bool + operator== (const std::basic_string<C>& a, const ro_string<C>& b) + { + return b.compare (a) == 0; + } + + template <typename C> + inline bool + operator== (const ro_string<C>& a, const C* b) + { + return a.compare (b) == 0; + } + + template <typename C> + inline bool + operator== (const C* a, const ro_string<C>& b) + { + return b.compare (a) == 0; + } + + // operator!= + // + template <typename C> + inline bool + operator!= (const ro_string<C>& a, const ro_string<C>& b) + { + return a.compare (b) != 0; + } + + template <typename C> + inline bool + operator!= (const ro_string<C>& a, const std::basic_string<C>& b) + { + return a.compare (b) != 0; + } + + template <typename C> + inline bool + operator!= (const std::basic_string<C>& a, const ro_string<C>& b) + { + return b.compare (a) != 0; + } + + template <typename C> + inline bool + operator!= (const ro_string<C>& a, const C* b) + { + return a.compare (b) != 0; + } + + template <typename C> + inline bool + operator!= (const C* a, const ro_string<C>& b) + { + return b.compare (a) != 0; + } + + // operator< + // + template <typename C> + inline bool + operator< (const ro_string<C>& l, const ro_string<C>& r) + { + return l.compare (r) < 0; + } + + template <typename C> + inline bool + operator< (const ro_string<C>& l, const std::basic_string<C>& r) + { + return l.compare (r) < 0; + } + + template <typename C> + inline bool + operator< (const std::basic_string<C>& l, const ro_string<C>& r) + { + return r.compare (l) > 0; + } + + template <typename C> + inline bool + operator< (const ro_string<C>& l, const C* r) + { + return l.compare (r) < 0; + } + + template <typename C> + inline bool + operator< (const C* l, const ro_string<C>& r) + { + return r.compare (l) > 0; + } + + + // operator> + // + template <typename C> + inline bool + operator> (const ro_string<C>& l, const ro_string<C>& r) + { + return l.compare (r) > 0; + } + + template <typename C> + inline bool + operator> (const ro_string<C>& l, const std::basic_string<C>& r) + { + return l.compare (r) > 0; + } + + template <typename C> + inline bool + operator> (const std::basic_string<C>& l, const ro_string<C>& r) + { + return r.compare (l) < 0; + } + + template <typename C> + inline bool + operator> (const ro_string<C>& l, const C* r) + { + return l.compare (r) > 0; + } + + template <typename C> + inline bool + operator> (const C* l, const ro_string<C>& r) + { + return r.compare (l) < 0; + } + + // operator<= + // + template <typename C> + inline bool + operator<= (const ro_string<C>& l, const ro_string<C>& r) + { + return l.compare (r) <= 0; + } + + template <typename C> + inline bool + operator<= (const ro_string<C>& l, const std::basic_string<C>& r) + { + return l.compare (r) <= 0; + } + + template <typename C> + inline bool + operator<= (const std::basic_string<C>& l, const ro_string<C>& r) + { + return r.compare (l) >= 0; + } + + template <typename C> + inline bool + operator<= (const ro_string<C>& l, const C* r) + { + return l.compare (r) <= 0; + } + + template <typename C> + inline bool + operator<= (const C* l, const ro_string<C>& r) + { + return r.compare (l) >= 0; + } + + + // operator>= + // + template <typename C> + inline bool + operator>= (const ro_string<C>& l, const ro_string<C>& r) + { + return l.compare (r) >= 0; + } + + template <typename C> + inline bool + operator>= (const ro_string<C>& l, const std::basic_string<C>& r) + { + return l.compare (r) >= 0; + } + + template <typename C> + inline bool + operator>= (const std::basic_string<C>& l, const ro_string<C>& r) + { + return r.compare (l) <= 0; + } + + template <typename C> + inline bool + operator>= (const ro_string<C>& l, const C* r) + { + return l.compare (r) >= 0; + } + + template <typename C> + inline bool + operator>= (const C* l, const ro_string<C>& r) + { + return r.compare (l) <= 0; + } + + // operator<< + // + template<typename C> + std::basic_ostream<C>& + operator<< (std::basic_ostream<C>& os, const ro_string<C>& str) + { + if (str.size () != 0) + os.write (str.data (), static_cast<std::streamsize> (str.size ())); + + return os; + } + + // operator+= + // + template<typename C> + std::basic_string<C>& + operator+= (std::basic_string<C>& l, const ro_string<C>& r) + { + l.append (r.data (), r.size ()); + return l; + } + + // Trim leading and trailing XML whitespaces. Return the new + // string size. + // + template <typename C> + typename ro_string<C>::size_type + trim_left (ro_string<C>&); + + template <typename C> + typename ro_string<C>::size_type + trim_right (ro_string<C>&); + + template <typename C> + typename ro_string<C>::size_type + trim (ro_string<C>&); + + // Trim leading and trailing XML whitespaces. + // + template<typename C> + std::basic_string<C> + trim (const std::basic_string<C>&); + } +} + +#include <xsd/cxx/ro-string.txx> + +#endif // XSD_CXX_RO_STRING_HXX diff --git a/xsd/libxsd/xsd/cxx/ro-string.txx b/xsd/libxsd/xsd/cxx/ro-string.txx new file mode 100644 index 0000000..58efef0 --- /dev/null +++ b/xsd/libxsd/xsd/cxx/ro-string.txx @@ -0,0 +1,133 @@ +// file : xsd/cxx/ro-string.txx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +namespace xsd +{ + namespace cxx + { + template <typename C> + typename ro_string<C>::size_type ro_string<C>:: + find (C c, size_type pos) const + { + size_type r (npos); + + if (pos < size_) + { + if (const C* p = traits_type::find(data_ + pos, size_ - pos, c)) + r = p - data_; + } + + return r; + } + + template<typename C> + typename ro_string<C>::size_type + trim_left (ro_string<C>& s) + { + typename ro_string<C>::size_type size (s.size ()); + + if (size != 0) + { + const C* f (s.data ()); + const C* l (f + size); + const C* of (f); + + while (f < l && + (*f == C (0x20) || *f == C (0x0A) || + *f == C (0x0D) || *f == C (0x09))) + ++f; + + if (f != of) + { + size = f <= l ? l - f : 0; + s.assign ((f <= l ? f : 0), size); + } + } + + return size; + } + + template<typename C> + typename ro_string<C>::size_type + trim_right (ro_string<C>& s) + { + typename ro_string<C>::size_type size (s.size ()); + + if (size != 0) + { + const C* f (s.data ()); + const C* l (f + size - 1); + const C* ol (l); + + while (l > f && + (*l == C (0x20) || *l == C (0x0A) || + *l == C (0x0D) || *l == C (0x09))) + --l; + + if (l != ol) + { + size = f <= l ? l - f + 1 : 0; + s.assign ((f <= l ? f : 0), size); + } + } + + return size; + } + + template<typename C> + typename ro_string<C>::size_type + trim (ro_string<C>& s) + { + typename ro_string<C>::size_type size (s.size ()); + + if (size != 0) + { + const C* f (s.data ()); + const C* l (f + size); + + const C* of (f); + + while (f < l && + (*f == C (0x20) || *f == C (0x0A) || + *f == C (0x0D) || *f == C (0x09))) + ++f; + + --l; + + const C* ol (l); + + while (l > f && + (*l == C (0x20) || *l == C (0x0A) || + *l == C (0x0D) || *l == C (0x09))) + --l; + + if (f != of || l != ol) + { + size = f <= l ? l - f + 1 : 0; + s.assign ((f <= l ? f : 0), size); + } + } + + return size; + } + + template<typename C> + std::basic_string<C> + trim (const std::basic_string<C>& s) + { + ro_string<C> tmp (s); + typename ro_string<C>::size_type size (tmp.size ()); + trim (tmp); + + // If we didn't change the string then return the original to help + // avoid copying for smart (ref counted) string implementations. + // + if (size == tmp.size ()) + return s; + else + return tmp; + } + } +} diff --git a/xsd/libxsd/xsd/cxx/tree/ace-cdr-stream-common.hxx b/xsd/libxsd/xsd/cxx/tree/ace-cdr-stream-common.hxx new file mode 100644 index 0000000..7c3fc96 --- /dev/null +++ b/xsd/libxsd/xsd/cxx/tree/ace-cdr-stream-common.hxx @@ -0,0 +1,26 @@ +// file : xsd/cxx/tree/ace-cdr-stream-common.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_CXX_TREE_ACE_CDR_STREAM_COMMON_HXX +#define XSD_CXX_TREE_ACE_CDR_STREAM_COMMON_HXX + +#include <xsd/cxx/exceptions.hxx> + +namespace xsd +{ + namespace cxx + { + namespace tree + { + // Base exception for ACE CDR insertion/extraction exceptions. + // + struct ace_cdr_stream_operation: xsd::cxx::exception + { + }; + } + } +} + +#endif // XSD_CXX_TREE_ACE_CDR_STREAM_COMMON_HXX diff --git a/xsd/libxsd/xsd/cxx/tree/ace-cdr-stream-extraction.hxx b/xsd/libxsd/xsd/cxx/tree/ace-cdr-stream-extraction.hxx new file mode 100644 index 0000000..53e1f6c --- /dev/null +++ b/xsd/libxsd/xsd/cxx/tree/ace-cdr-stream-extraction.hxx @@ -0,0 +1,334 @@ +// file : xsd/cxx/tree/ace-cdr-stream-extraction.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_CXX_TREE_ACE_CDR_STREAM_EXTRACTION_HXX +#define XSD_CXX_TREE_ACE_CDR_STREAM_EXTRACTION_HXX + +#include <cstddef> // std::size_t +#include <string> + +#include <ace/ACE.h> // ACE::strdelete +#include <ace/CDR_Stream.h> + +#include <xsd/cxx/auto-array.hxx> + +#include <xsd/cxx/tree/buffer.hxx> +#include <xsd/cxx/tree/istream.hxx> +#include <xsd/cxx/tree/ace-cdr-stream-common.hxx> + +namespace xsd +{ + namespace cxx + { + namespace tree + { + struct ace_cdr_stream_extraction: ace_cdr_stream_operation + { + virtual const char* + what () const throw () + { + return "ACE CDR stream extraction operation failed"; + } + }; + + + // as_size + // + +#ifdef XSD_CXX_TREE_USE_64_BIT_SIZE + template <typename T> + inline istream<ACE_InputCDR>& + operator>> (istream<ACE_InputCDR>& s, + istream<ACE_InputCDR>::as_size<T>& x) + { + ACE_CDR::ULongLong r; + + if (!s.impl ().read_ulonglong (r) || + r > ~(T (0))) + throw ace_cdr_stream_extraction (); + + x.x_ = static_cast<T> (r); + + return s; + } +#else + template <typename T> + inline istream<ACE_InputCDR>& + operator>> (istream<ACE_InputCDR>& s, + istream<ACE_InputCDR>::as_size<T>& x) + { + ACE_CDR::ULong r; + + if (!s.impl ().read_ulong (r)) + throw ace_cdr_stream_extraction (); + + x.x_ = static_cast<T> (r); + + return s; + } +#endif + + + // 8-bit + // + template <typename T> + inline istream<ACE_InputCDR>& + operator>> (istream<ACE_InputCDR>& s, + istream<ACE_InputCDR>::as_int8<T>& x) + { + ACE_CDR::Octet r; + + if (!s.impl ().read_octet (r)) + throw ace_cdr_stream_extraction (); + + x.x_ = static_cast<T> (r); + + return s; + } + + template <typename T> + inline istream<ACE_InputCDR>& + operator>> (istream<ACE_InputCDR>& s, + istream<ACE_InputCDR>::as_uint8<T>& x) + { + ACE_CDR::Octet r; + + if (!s.impl ().read_octet (r)) + throw ace_cdr_stream_extraction (); + + x.x_ = static_cast<T> (r); + + return s; + } + + + // 16-bit + // + template <typename T> + inline istream<ACE_InputCDR>& + operator>> (istream<ACE_InputCDR>& s, + istream<ACE_InputCDR>::as_int16<T>& x) + { + ACE_CDR::Short r; + + if (!s.impl ().read_short (r)) + throw ace_cdr_stream_extraction (); + + x.x_ = static_cast<T> (r); + + return s; + } + + template <typename T> + inline istream<ACE_InputCDR>& + operator>> (istream<ACE_InputCDR>& s, + istream<ACE_InputCDR>::as_uint16<T>& x) + { + ACE_CDR::UShort r; + + if (!s.impl ().read_ushort (r)) + throw ace_cdr_stream_extraction (); + + x.x_ = static_cast<T> (r); + + return s; + } + + + // 32-bit + // + template <typename T> + inline istream<ACE_InputCDR>& + operator>> (istream<ACE_InputCDR>& s, + istream<ACE_InputCDR>::as_int32<T>& x) + { + ACE_CDR::Long r; + + if (!s.impl ().read_long (r)) + throw ace_cdr_stream_extraction (); + + x.x_ = static_cast<T> (r); + + return s; + } + + template <typename T> + inline istream<ACE_InputCDR>& + operator>> (istream<ACE_InputCDR>& s, + istream<ACE_InputCDR>::as_uint32<T>& x) + { + ACE_CDR::ULong r; + + if (!s.impl ().read_ulong (r)) + throw ace_cdr_stream_extraction (); + + x.x_ = static_cast<T> (r); + + return s; + } + + + // 64-bit + // + template <typename T> + inline istream<ACE_InputCDR>& + operator>> (istream<ACE_InputCDR>& s, + istream<ACE_InputCDR>::as_int64<T>& x) + { + ACE_CDR::LongLong r; + + if (!s.impl ().read_longlong (r)) + throw ace_cdr_stream_extraction (); + + x.x_ = static_cast<T> (r); + + return s; + } + + template <typename T> + inline istream<ACE_InputCDR>& + operator>> (istream<ACE_InputCDR>& s, + istream<ACE_InputCDR>::as_uint64<T>& x) + { + ACE_CDR::ULongLong r; + + if (!s.impl ().read_ulonglong (r)) + throw ace_cdr_stream_extraction (); + + x.x_ = static_cast<T> (r); + + return s; + } + + + // Boolean + // + template <typename T> + inline istream<ACE_InputCDR>& + operator>> (istream<ACE_InputCDR>& s, + istream<ACE_InputCDR>::as_bool<T>& x) + { + ACE_CDR::Boolean r; + + if (!s.impl ().read_boolean (r)) + throw ace_cdr_stream_extraction (); + + x.x_ = static_cast<T> (r); + + return s; + } + + + // Floating-point + // + template <typename T> + inline istream<ACE_InputCDR>& + operator>> (istream<ACE_InputCDR>& s, + istream<ACE_InputCDR>::as_float32<T>& x) + { + ACE_CDR::Float r; + + if (!s.impl ().read_float (r)) + throw ace_cdr_stream_extraction (); + + x.x_ = static_cast<T> (r); + + return s; + } + + template <typename T> + inline istream<ACE_InputCDR>& + operator>> (istream<ACE_InputCDR>& s, + istream<ACE_InputCDR>::as_float64<T>& x) + { + ACE_CDR::Double r; + + if (!s.impl ().read_double (r)) + throw ace_cdr_stream_extraction (); + + x.x_ = static_cast<T> (r); + + return s; + } + + // Extraction of std::basic_string. + // + + namespace bits + { + template<typename C> + struct ace_str_deallocator + { + void + deallocate (C* s) + { + ACE::strdelete (s); + } + }; + } + + inline istream<ACE_InputCDR>& + operator>> (istream<ACE_InputCDR>& s, std::basic_string<char>& x) + { + typedef bits::ace_str_deallocator<char> deallocator; + + deallocator d; + char* r; + + if (!s.impl ().read_string (r)) + throw ace_cdr_stream_extraction (); + + auto_array<char, deallocator> ar (r, d); + + x = r; + + return s; + } + +#ifdef ACE_HAS_WCHAR + inline istream<ACE_InputCDR>& + operator>> (istream<ACE_InputCDR>& s, std::basic_string<wchar_t>& x) + { + typedef bits::ace_str_deallocator<wchar_t> deallocator; + + deallocator d; + wchar_t* r; + + if (!s.impl ().read_wstring (r)) + throw ace_cdr_stream_extraction (); + + auto_array<wchar_t, deallocator> ar (r, d); + + x = r; + + return s; + } +#endif + + + // Extraction of a binary buffer. + // + template <typename C> + istream<ACE_InputCDR>& + operator>> (istream<ACE_InputCDR>& s, buffer<C>& x) + { + ACE_CDR::ULong size; + + if (!s.impl ().read_ulong (size)) + throw ace_cdr_stream_extraction (); + + x.size (size); + + if (!s.impl ().read_octet_array ( + reinterpret_cast<ACE_CDR::Octet*> (x.data ()), size)) + throw ace_cdr_stream_extraction (); + + return s; + } + } + } +} + +#endif // XSD_CXX_TREE_ACE_CDR_STREAM_EXTRACTION_HXX diff --git a/xsd/libxsd/xsd/cxx/tree/ace-cdr-stream-insertion.hxx b/xsd/libxsd/xsd/cxx/tree/ace-cdr-stream-insertion.hxx new file mode 100644 index 0000000..0f723d0 --- /dev/null +++ b/xsd/libxsd/xsd/cxx/tree/ace-cdr-stream-insertion.hxx @@ -0,0 +1,249 @@ +// file : xsd/cxx/tree/ace-cdr-stream-insertion.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_CXX_TREE_ACE_CDR_STREAM_INSERTION_HXX +#define XSD_CXX_TREE_ACE_CDR_STREAM_INSERTION_HXX + +#include <cstddef> // std::size_t +#include <string> + +#include <ace/CDR_Stream.h> + +#include <xsd/cxx/tree/buffer.hxx> +#include <xsd/cxx/tree/ostream.hxx> +#include <xsd/cxx/tree/ace-cdr-stream-common.hxx> + +namespace xsd +{ + namespace cxx + { + namespace tree + { + struct ace_cdr_stream_insertion: ace_cdr_stream_operation + { + virtual const char* + what () const throw () + { + return "ACE CDR stream insertion operation failed"; + } + }; + + + // as_size + // + +#ifdef XSD_CXX_TREE_USE_64_BIT_SIZE + template <typename T> + inline ostream<ACE_OutputCDR>& + operator<< (ostream<ACE_OutputCDR>& s, + ostream<ACE_OutputCDR>::as_size<T> x) + { + if (!s.impl ().write_ulonglong ( + static_cast<ACE_CDR::ULongLong> (x.x_))) + throw ace_cdr_stream_insertion (); + return s; + } +#else + template <typename T> + inline ostream<ACE_OutputCDR>& + operator<< (ostream<ACE_OutputCDR>& s, + ostream<ACE_OutputCDR>::as_size<T> x) + { + if (x.x_ > ~(ACE_CDR::ULong (0)) || + !s.impl ().write_ulong (static_cast<ACE_CDR::ULong> (x.x_))) + throw ace_cdr_stream_insertion (); + + return s; + } +#endif + + + // 8-bit + // + template <typename T> + inline ostream<ACE_OutputCDR>& + operator<< (ostream<ACE_OutputCDR>& s, + ostream<ACE_OutputCDR>::as_int8<T> x) + { + ACE_CDR::Octet r (static_cast<ACE_CDR::Octet> (x.x_)); + + if (!s.impl ().write_octet (r)) + throw ace_cdr_stream_insertion (); + + return s; + } + + template <typename T> + inline ostream<ACE_OutputCDR>& + operator<< (ostream<ACE_OutputCDR>& s, + ostream<ACE_OutputCDR>::as_uint8<T> x) + { + ACE_CDR::Octet r (static_cast<ACE_CDR::Octet> (x.x_)); + + if (!s.impl ().write_octet (r)) + throw ace_cdr_stream_insertion (); + + return s; + } + + + // 16-bit + // + template <typename T> + inline ostream<ACE_OutputCDR>& + operator<< (ostream<ACE_OutputCDR>& s, + ostream<ACE_OutputCDR>::as_int16<T> x) + { + if (!s.impl ().write_short (static_cast<ACE_CDR::Short> (x.x_))) + throw ace_cdr_stream_insertion (); + return s; + } + + template <typename T> + inline ostream<ACE_OutputCDR>& + operator<< (ostream<ACE_OutputCDR>& s, + ostream<ACE_OutputCDR>::as_uint16<T> x) + { + if (!s.impl ().write_ushort (static_cast<ACE_CDR::UShort> (x.x_))) + throw ace_cdr_stream_insertion (); + return s; + } + + + // 32-bit + // + template <typename T> + inline ostream<ACE_OutputCDR>& + operator<< (ostream<ACE_OutputCDR>& s, + ostream<ACE_OutputCDR>::as_int32<T> x) + { + if (!s.impl ().write_long (static_cast<ACE_CDR::Long> (x.x_))) + throw ace_cdr_stream_insertion (); + return s; + } + + template <typename T> + inline ostream<ACE_OutputCDR>& + operator<< (ostream<ACE_OutputCDR>& s, + ostream<ACE_OutputCDR>::as_uint32<T> x) + { + if (!s.impl ().write_ulong (static_cast<ACE_CDR::ULong> (x.x_))) + throw ace_cdr_stream_insertion (); + return s; + } + + + // 64-bit + // + template <typename T> + inline ostream<ACE_OutputCDR>& + operator<< (ostream<ACE_OutputCDR>& s, + ostream<ACE_OutputCDR>::as_int64<T> x) + { + if (!s.impl ().write_longlong (static_cast<ACE_CDR::LongLong> (x.x_))) + throw ace_cdr_stream_insertion (); + return s; + } + + template <typename T> + inline ostream<ACE_OutputCDR>& + operator<< (ostream<ACE_OutputCDR>& s, + ostream<ACE_OutputCDR>::as_uint64<T> x) + { + if (!s.impl ().write_ulonglong ( + static_cast<ACE_CDR::ULongLong> (x.x_))) + throw ace_cdr_stream_insertion (); + return s; + } + + + // Boolean + // + template <typename T> + inline ostream<ACE_OutputCDR>& + operator<< (ostream<ACE_OutputCDR>& s, + ostream<ACE_OutputCDR>::as_bool<T> x) + { + if (!s.impl ().write_boolean (static_cast<ACE_CDR::Boolean> (x.x_))) + throw ace_cdr_stream_insertion (); + return s; + } + + + // Floating-point + // + template <typename T> + inline ostream<ACE_OutputCDR>& + operator<< (ostream<ACE_OutputCDR>& s, + ostream<ACE_OutputCDR>::as_float32<T> x) + { + if (!s.impl ().write_float (static_cast<ACE_CDR::Float> (x.x_))) + throw ace_cdr_stream_insertion (); + return s; + } + + template <typename T> + inline ostream<ACE_OutputCDR>& + operator<< (ostream<ACE_OutputCDR>& s, + ostream<ACE_OutputCDR>::as_float64<T> x) + { + if (!s.impl ().write_double (static_cast<ACE_CDR::Double> (x.x_))) + throw ace_cdr_stream_insertion (); + return s; + } + + // Insertion of std::basic_string. + // + + inline ostream<ACE_OutputCDR>& + operator<< (ostream<ACE_OutputCDR>& s, const std::basic_string<char>& x) + { + // ACE CDR strings are hard-wired with a 32 bit length. + // + if (x.length () > ~(ACE_CDR::ULong (0)) || + !s.impl ().write_string ( + static_cast<ACE_CDR::ULong> (x.length ()), x.c_str ())) + throw ace_cdr_stream_insertion (); + return s; + } + +#ifdef ACE_HAS_WCHAR + inline ostream<ACE_OutputCDR>& + operator<< (ostream<ACE_OutputCDR>& s, + const std::basic_string<wchar_t>& x) + { + // ACE CDR strings are hard-wired with a 32 bit length. + // + if (x.length () > ~(ACE_CDR::ULong (0)) || + !s.impl ().write_wstring ( + static_cast<ACE_CDR::ULong> (x.length ()), x.c_str ())) + throw ace_cdr_stream_insertion (); + return s; + } +#endif + + // Insertion of a binary buffer. + // + template <typename C> + ostream<ACE_OutputCDR>& + operator<< (ostream<ACE_OutputCDR>& s, const buffer<C>& x) + { + std::size_t size (x.size ()); + + // It is not possible to write an array with a 64-bit size. + // + if (size > ~(ACE_CDR::ULong (0)) || + !s.impl ().write_ulong (static_cast<ACE_CDR::ULong> (size)) || + !s.impl ().write_octet_array ( + reinterpret_cast<const ACE_CDR::Octet*> (x.data ()), size)) + throw ace_cdr_stream_insertion (); + + return s; + } + } + } +} + +#endif // XSD_CXX_TREE_ACE_CDR_STREAM_INSERTION_HXX diff --git a/xsd/libxsd/xsd/cxx/tree/bits/literals.hxx b/xsd/libxsd/xsd/cxx/tree/bits/literals.hxx new file mode 100644 index 0000000..49ac0ca --- /dev/null +++ b/xsd/libxsd/xsd/cxx/tree/bits/literals.hxx @@ -0,0 +1,261 @@ +// file : xsd/cxx/tree/bits/literals.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_CXX_TREE_BITS_LITERALS_HXX +#define XSD_CXX_TREE_BITS_LITERALS_HXX + +namespace xsd +{ + namespace cxx + { + namespace tree + { + namespace bits + { + // Boolean literals + // + template<typename C> + const C* + true_ (); + + template<typename C> + const C* + one (); + + // Float literals: INF -INF NaN. + // + template<typename C> + const C* + positive_inf (); + + template<typename C> + const C* + negative_inf (); + + template<typename C> + const C* + nan (); + + // Optional "not present" literal. + // + template<typename C> + const C* + not_present (); + + // XML Schema namespace + // + template <typename C> + const C* + xml_schema (); + + // Built-in XML Schema type names. + // + template <typename C> + const C* + any_type (); + + template <typename C> + const C* + any_simple_type (); + + template <typename C> + const C* + string (); + + template <typename C> + const C* + normalized_string (); + + template <typename C> + const C* + token (); + + template <typename C> + const C* + name (); + + template <typename C> + const C* + nmtoken (); + + template <typename C> + const C* + nmtokens (); + + template <typename C> + const C* + ncname (); + + template <typename C> + const C* + language (); + + template <typename C> + const C* + id (); + + template <typename C> + const C* + idref (); + + template <typename C> + const C* + idrefs (); + + template <typename C> + const C* + any_uri (); + + template <typename C> + const C* + qname (); + + template <typename C> + const C* + base64_binary (); + + template <typename C> + const C* + hex_binary (); + + template <typename C> + const C* + date (); + + template <typename C> + const C* + date_time (); + + template <typename C> + const C* + duration (); + + template <typename C> + const C* + gday (); + + template <typename C> + const C* + gmonth (); + + template <typename C> + const C* + gmonth_day (); + + template <typename C> + const C* + gyear (); + + template <typename C> + const C* + gyear_month (); + + template <typename C> + const C* + time (); + + template <typename C> + const C* + entity (); + + template <typename C> + const C* + entities (); + + // gday ("---") and gmonth ("--") prefixes. + // + template <typename C> + const C* + gday_prefix (); + + template <typename C> + const C* + gmonth_prefix (); + + // Exception and diagnostics string literals. + // + template <typename C> + const C* + ex_error_error (); // " error: " + + template <typename C> + const C* + ex_error_warning (); // " warning: " + + template <typename C> + const C* + ex_parsing_msg (); // "instance document parsing failed" + + template <typename C> + const C* + ex_eel_expected (); // "expected element '" + + template <typename C> + const C* + ex_uel_expected (); // "expected element '" + + template <typename C> + const C* + ex_uel_instead (); // "' instead of '" + + template <typename C> + const C* + ex_uel_unexpected (); // "unexpected element '" + + template <typename C> + const C* + ex_eat_expected (); // "expected attribute '" + + template <typename C> + const C* + ex_uen_unexpected (); // "unexpected enumerator '" + + template <typename C> + const C* + ex_etc_msg (); // "expected text content" + + template <typename C> + const C* + ex_nti_no_type_info (); // "no type information available for type '" + + template <typename C> + const C* + ex_nei_no_element_info (); // "no parsing or serialization information + // available for element '" + template <typename C> + const C* + ex_nd_type (); // "type '" + + template <typename C> + const C* + ex_nd_not_derived (); // "' is not derived from '" + + template <typename C> + const C* + ex_di_id (); // "ID '" + + template <typename C> + const C* + ex_di_already_exist (); // "' already exist" + + template <typename C> + const C* + ex_serialization_msg (); // "serialization failed" + + template <typename C> + const C* + ex_npm_no_mapping (); // "no mapping provided for namespace prefix '" + + template <typename C> + const C* + ex_bounds_msg (); // "buffer boundary rules have been violated" + } + } + } +} + +#endif // XSD_CXX_TREE_BITS_LITERALS_HXX + +#include <xsd/cxx/tree/bits/literals.ixx> diff --git a/xsd/libxsd/xsd/cxx/tree/bits/literals.ixx b/xsd/libxsd/xsd/cxx/tree/bits/literals.ixx new file mode 100644 index 0000000..260a9e7 --- /dev/null +++ b/xsd/libxsd/xsd/cxx/tree/bits/literals.ixx @@ -0,0 +1,876 @@ +// file : xsd/cxx/tree/bits/literals.ixx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_CXX_TREE_BITS_LITERALS_IXX +#define XSD_CXX_TREE_BITS_LITERALS_IXX + +// The char versions of the following literals are required even +// if we are using wchar_t as the character type. +// +namespace xsd +{ + namespace cxx + { + namespace tree + { + namespace bits + { + // + // + template<> + inline const char* + positive_inf<char> () + { + return "INF"; + } + + template<> + inline const char* + negative_inf<char> () + { + return "-INF"; + } + + template<> + inline const char* + nan<char> () + { + return "NaN"; + } + } + } + } +} + +#endif // XSD_CXX_TREE_BITS_LITERALS_IXX + + +#if defined(XSD_CXX_TREE_USE_CHAR) || !defined(XSD_CXX_TREE_USE_WCHAR) + +#ifndef XSD_CXX_TREE_BITS_LITERALS_IXX_CHAR +#define XSD_CXX_TREE_BITS_LITERALS_IXX_CHAR + +namespace xsd +{ + namespace cxx + { + namespace tree + { + namespace bits + { + // + // + template<> + inline const char* + true_<char> () + { + return "true"; + } + + template<> + inline const char* + one<char> () + { + return "1"; + } + + // + // + template<> + inline const char* + not_present<char> () + { + return "<not present>"; + } + + // + // + template <> + inline const char* + xml_schema<char> () + { + return "http://www.w3.org/2001/XMLSchema"; + } + + // + // + template <> + inline const char* + any_type<char> () + { + return "anyType"; + } + + template <> + inline const char* + any_simple_type<char> () + { + return "anySimpleType"; + } + + template <> + inline const char* + string<char> () + { + return "string"; + } + + template <> + inline const char* + normalized_string<char> () + { + return "normalizedString"; + } + + template <> + inline const char* + token<char> () + { + return "token"; + } + + template <> + inline const char* + name<char> () + { + return "Name"; + } + + template <> + inline const char* + nmtoken<char> () + { + return "NMTOKEN"; + } + + template <> + inline const char* + nmtokens<char> () + { + return "NMTOKENS"; + } + + template <> + inline const char* + ncname<char> () + { + return "NCName"; + } + + template <> + inline const char* + language<char> () + { + return "language"; + } + + + template <> + inline const char* + id<char> () + { + return "ID"; + } + + template <> + inline const char* + idref<char> () + { + return "IDREF"; + } + + template <> + inline const char* + idrefs<char> () + { + return "IDREFS"; + } + + template <> + inline const char* + any_uri<char> () + { + return "anyURI"; + } + + template <> + inline const char* + qname<char> () + { + return "QName"; + } + + template <> + inline const char* + base64_binary<char> () + { + return "base64Binary"; + } + + template <> + inline const char* + hex_binary<char> () + { + return "hexBinary"; + } + + template <> + inline const char* + date<char> () + { + return "date"; + } + + template <> + inline const char* + date_time<char> () + { + return "dateTime"; + } + + template <> + inline const char* + duration<char> () + { + return "duration"; + } + + template <> + inline const char* + gday<char> () + { + return "gDay"; + } + + template <> + inline const char* + gmonth<char> () + { + return "gMonth"; + } + + template <> + inline const char* + gmonth_day<char> () + { + return "gMonthDay"; + } + + template <> + inline const char* + gyear<char> () + { + return "gYear"; + } + + template <> + inline const char* + gyear_month<char> () + { + return "gYearMonth"; + } + + template <> + inline const char* + time<char> () + { + return "time"; + } + + template <> + inline const char* + entity<char> () + { + return "ENTITY"; + } + + template <> + inline const char* + entities<char> () + { + return "ENTITIES"; + } + + template <> + inline const char* + gday_prefix<char> () + { + return "---"; + } + + template <> + inline const char* + gmonth_prefix<char> () + { + return "--"; + } + + // + // + template <> + inline const char* + ex_error_error<char> () + { + return " error: "; + } + + template <> + inline const char* + ex_error_warning<char> () + { + return " warning: "; + } + + template <> + inline const char* + ex_parsing_msg<char> () + { + return "instance document parsing failed"; + } + + template <> + inline const char* + ex_eel_expected<char> () + { + return "expected element '"; + } + + template <> + inline const char* + ex_uel_expected<char> () + { + return "expected element '"; + } + + template <> + inline const char* + ex_uel_instead<char> () + { + return "' instead of '"; + } + + template <> + inline const char* + ex_uel_unexpected<char> () + { + return "unexpected element '"; + } + + template <> + inline const char* + ex_eat_expected<char> () + { + return "expected attribute '"; + } + + template <> + inline const char* + ex_uen_unexpected<char> () + { + return "unexpected enumerator '"; + } + + template <> + inline const char* + ex_etc_msg<char> () + { + return "expected text content"; + } + + template <> + inline const char* + ex_nti_no_type_info<char> () + { + return "no type information available for type '"; + } + + template <> + inline const char* + ex_nei_no_element_info<char> () + { + return "no parsing or serialization information available for " + "element '"; + } + template <> + inline const char* + ex_nd_type<char> () + { + return "type '"; + } + + template <> + inline const char* + ex_nd_not_derived<char> () + { + return "' is not derived from '"; + } + + template <> + inline const char* + ex_di_id<char> () + { + return "ID '"; + } + + template <> + inline const char* + ex_di_already_exist<char> () + { + return "' already exist"; + } + + template <> + inline const char* + ex_serialization_msg<char> () + { + return "serialization failed"; + } + + template <> + inline const char* + ex_npm_no_mapping<char> () + { + return "no mapping provided for namespace prefix '"; + } + + template <> + inline const char* + ex_bounds_msg<char> () + { + return "buffer boundary rules have been violated"; + } + } + } + } +} + +#endif // XSD_CXX_TREE_BITS_LITERALS_IXX_CHAR +#endif // XSD_CXX_TREE_USE_CHAR + + +#if defined(XSD_CXX_TREE_USE_WCHAR) || !defined(XSD_CXX_TREE_USE_CHAR) + +#ifndef XSD_CXX_TREE_BITS_LITERALS_IXX_WCHAR +#define XSD_CXX_TREE_BITS_LITERALS_IXX_WCHAR + +namespace xsd +{ + namespace cxx + { + namespace tree + { + namespace bits + { + // + // + template<> + inline const wchar_t* + true_<wchar_t> () + { + return L"true"; + } + + template<> + inline const wchar_t* + one<wchar_t> () + { + return L"1"; + } + + // + // + template<> + inline const wchar_t* + positive_inf<wchar_t> () + { + return L"INF"; + } + + template<> + inline const wchar_t* + negative_inf<wchar_t> () + { + return L"-INF"; + } + + template<> + inline const wchar_t* + nan<wchar_t> () + { + return L"NaN"; + } + + // + // + template<> + inline const wchar_t* + not_present<wchar_t> () + { + return L"<not present>"; + } + + // + // + template <> + inline const wchar_t* + xml_schema<wchar_t> () + { + return L"http://www.w3.org/2001/XMLSchema"; + } + + // + // + template <> + inline const wchar_t* + any_type<wchar_t> () + { + return L"anyType"; + } + + template <> + inline const wchar_t* + any_simple_type<wchar_t> () + { + return L"anySimpleType"; + } + + template <> + inline const wchar_t* + string<wchar_t> () + { + return L"string"; + } + + template <> + inline const wchar_t* + normalized_string<wchar_t> () + { + return L"normalizedString"; + } + + template <> + inline const wchar_t* + token<wchar_t> () + { + return L"token"; + } + + template <> + inline const wchar_t* + name<wchar_t> () + { + return L"Name"; + } + + template <> + inline const wchar_t* + nmtoken<wchar_t> () + { + return L"NMTOKEN"; + } + + template <> + inline const wchar_t* + nmtokens<wchar_t> () + { + return L"NMTOKENS"; + } + + template <> + inline const wchar_t* + ncname<wchar_t> () + { + return L"NCName"; + } + + template <> + inline const wchar_t* + language<wchar_t> () + { + return L"language"; + } + + + template <> + inline const wchar_t* + id<wchar_t> () + { + return L"ID"; + } + + template <> + inline const wchar_t* + idref<wchar_t> () + { + return L"IDREF"; + } + + template <> + inline const wchar_t* + idrefs<wchar_t> () + { + return L"IDREFS"; + } + + template <> + inline const wchar_t* + any_uri<wchar_t> () + { + return L"anyURI"; + } + + template <> + inline const wchar_t* + qname<wchar_t> () + { + return L"QName"; + } + + template <> + inline const wchar_t* + base64_binary<wchar_t> () + { + return L"base64Binary"; + } + + template <> + inline const wchar_t* + hex_binary<wchar_t> () + { + return L"hexBinary"; + } + + template <> + inline const wchar_t* + date<wchar_t> () + { + return L"date"; + } + + template <> + inline const wchar_t* + date_time<wchar_t> () + { + return L"dateTime"; + } + + template <> + inline const wchar_t* + duration<wchar_t> () + { + return L"duration"; + } + + template <> + inline const wchar_t* + gday<wchar_t> () + { + return L"gDay"; + } + + template <> + inline const wchar_t* + gmonth<wchar_t> () + { + return L"gMonth"; + } + + template <> + inline const wchar_t* + gmonth_day<wchar_t> () + { + return L"gMonthDay"; + } + + template <> + inline const wchar_t* + gyear<wchar_t> () + { + return L"gYear"; + } + + template <> + inline const wchar_t* + gyear_month<wchar_t> () + { + return L"gYearMonth"; + } + + template <> + inline const wchar_t* + time<wchar_t> () + { + return L"time"; + } + + template <> + inline const wchar_t* + entity<wchar_t> () + { + return L"ENTITY"; + } + + template <> + inline const wchar_t* + entities<wchar_t> () + { + return L"ENTITIES"; + } + + template <> + inline const wchar_t* + gday_prefix<wchar_t> () + { + return L"---"; + } + + template <> + inline const wchar_t* + gmonth_prefix<wchar_t> () + { + return L"--"; + } + + // + // + template <> + inline const wchar_t* + ex_error_error<wchar_t> () + { + return L" error: "; + } + + template <> + inline const wchar_t* + ex_error_warning<wchar_t> () + { + return L" warning: "; + } + + template <> + inline const wchar_t* + ex_parsing_msg<wchar_t> () + { + return L"instance document parsing failed"; + } + + template <> + inline const wchar_t* + ex_eel_expected<wchar_t> () + { + return L"expected element '"; + } + + template <> + inline const wchar_t* + ex_uel_expected<wchar_t> () + { + return L"expected element '"; + } + + template <> + inline const wchar_t* + ex_uel_instead<wchar_t> () + { + return L"' instead of '"; + } + + template <> + inline const wchar_t* + ex_uel_unexpected<wchar_t> () + { + return L"unexpected element '"; + } + + template <> + inline const wchar_t* + ex_eat_expected<wchar_t> () + { + return L"expected attribute '"; + } + + template <> + inline const wchar_t* + ex_uen_unexpected<wchar_t> () + { + return L"unexpected enumerator '"; + } + + template <> + inline const wchar_t* + ex_etc_msg<wchar_t> () + { + return L"expected text content"; + } + + template <> + inline const wchar_t* + ex_nti_no_type_info<wchar_t> () + { + return L"no type information available for type '"; + } + + template <> + inline const wchar_t* + ex_nei_no_element_info<wchar_t> () + { + return L"no parsing or serialization information available for " + L"element '"; + } + template <> + inline const wchar_t* + ex_nd_type<wchar_t> () + { + return L"type '"; + } + + template <> + inline const wchar_t* + ex_nd_not_derived<wchar_t> () + { + return L"' is not derived from '"; + } + + template <> + inline const wchar_t* + ex_di_id<wchar_t> () + { + return L"ID '"; + } + + template <> + inline const wchar_t* + ex_di_already_exist<wchar_t> () + { + return L"' already exist"; + } + + template <> + inline const wchar_t* + ex_serialization_msg<wchar_t> () + { + return L"serialization failed"; + } + + template <> + inline const wchar_t* + ex_npm_no_mapping<wchar_t> () + { + return L"no mapping provided for namespace prefix '"; + } + + template <> + inline const wchar_t* + ex_bounds_msg<wchar_t> () + { + return L"buffer boundary rules have been violated"; + } + } + } + } +} + +#endif // XSD_CXX_TREE_BITS_LITERALS_IXX_WCHAR +#endif // XSD_CXX_TREE_USE_WCHAR diff --git a/xsd/libxsd/xsd/cxx/tree/buffer.hxx b/xsd/libxsd/xsd/cxx/tree/buffer.hxx new file mode 100644 index 0000000..24da287 --- /dev/null +++ b/xsd/libxsd/xsd/cxx/tree/buffer.hxx @@ -0,0 +1,337 @@ +// file : xsd/cxx/tree/buffer.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +/** + * @file + * + * @brief Contains a simple binary buffer abstraction that is used to + * implement the base64Binary and hexBinary XML Schema built-in types. + * + * This is an internal header and is included by the generated code. You + * normally should not include it directly. + * + */ + +#ifndef XSD_CXX_TREE_BUFFER_HXX +#define XSD_CXX_TREE_BUFFER_HXX + +#include <new> // operator new/delete +#include <cstddef> // std::size_t +#include <cstring> // std::memcpy, std::memcmp + +#include <xsd/cxx/tree/exceptions.hxx> + +namespace xsd +{ + namespace cxx + { + /** + * @brief C++/Tree mapping runtime namespace. + * + * This is an internal namespace and normally should not be referenced + * directly. Instead you should use the aliases for types in this + * namespaces that are created in the generated code. + * + */ + namespace tree + { + //@cond + + class buffer_base + { + protected: + virtual + ~buffer_base () + { + if (free_ && data_) + operator delete (data_); + } + + buffer_base () + : data_ (0), size_ (0), capacity_ (0), free_ (true) + { + } + + protected: + char* data_; + size_t size_; + size_t capacity_; + bool free_; + }; + + //@endcond + + /** + * @brief Simple binary %buffer abstraction + * + * The %buffer class manages a continuous binary %buffer. The base + * concepts are data (actual memory region), size (the portion of + * the %buffer that contains useful information), and capacity (the + * actual size of the underlying memory region). The bounds + * %exception is thrown from the constructors and modifier functions + * if the (size <= capacity) constraint is violated. + * + * Note that the template parameter is only used to instantiate + * %exception types. The underlying %buffer type is always @c char. + * + * @nosubgrouping + */ + template<typename C> + class buffer: protected buffer_base + { + public: + /** + * @brief Size type + */ + typedef std::size_t size_t; + + public: + /** + * @name Constructors + */ + //@{ + + /** + * @brief Allocate a %buffer of the specified size. + * + * The resulting %buffer has the same size and capacity. + * + * @param size A %buffer size in bytes. + */ + explicit + buffer (size_t size = 0); + + /** + * @brief Allocate a %buffer of the specified size and capacity. + * + * @param size A %buffer size in bytes. + * @param capacity A %buffer capacity in bytes. + * @throw bounds If @a size exceeds @a capacity + */ + buffer (size_t size, size_t capacity); + + /** + * @brief Allocate a %buffer of the specified size and copy + * the data. + * + * The resulting %buffer has the same size and capacity with + * @a size bytes copied from @a data. + * + * @param data A %buffer to copy the data from. + * @param size A %buffer size in bytes. + */ + buffer (const void* data, size_t size); + + /** + * @brief Allocate a %buffer of the specified size and capacity + * and copy the data. + * + * @a size bytes are copied from @a data to the resulting + * %buffer. + * + * @param data A %buffer to copy the data from. + * @param size A %buffer size in bytes. + * @param capacity A %buffer capacity in bytes. + * @throw bounds If @a size exceeds @a capacity + */ + buffer (const void* data, size_t size, size_t capacity); + + /** + * @brief Reuse an existing %buffer. + * + * If the @a assume_ownership argument is true, the %buffer will + * assume ownership of @a data and will release the memory + * by calling @c operator @c delete(). + * + * @param data A %buffer to reuse. + * @param size A %buffer size in bytes. + * @param capacity A %buffer capacity in bytes. + * @param assume_ownership A boolean value indication whether to + * assume ownership. + * @throw bounds If @a size exceeds @a capacity + */ + buffer (void* data, + size_t size, + size_t capacity, + bool assume_ownership); + + /** + * @brief Copy constructor. + * + * The copy constructor performs a deep copy of the underlying + * memory %buffer. + * + * @param x An instance to make a copy of. + */ + buffer (const buffer& x); + + //@} + + public: + /** + * @brief Copy assignment operator. + * + * The copy assignment operator changes the buffer's capacity + * to @c x.capacity() and copies @c x.size() bytes from @a x. + * + * @param x An instance to assign. + * @return A reference to the instance. + */ + buffer& + operator= (const buffer& x); + + public: + /** + * @brief Get buffer's capacity. + * + * @return A number of bytes that the %buffer can hold without + * reallocation. + */ + size_t + capacity () const + { + return capacity_; + } + + /** + * @brief Set buffer's capacity. + * + * @param c The new capacity in bytes. + * @return True if the underlying %buffer has moved, false otherwise. + */ + bool + capacity (size_t c) + { + return this->capacity (c, true); + } + + public: + /** + * @brief Get buffer's size. + * + * @return A number of bytes that the %buffer holds. + */ + size_t + size () const {return size_;} + + /** + * @brief Set buffer's size. + * + * @param s The new size in bytes. + * @return True if the underlying %buffer has moved, false otherwise. + */ + bool + size (size_t s) + { + bool r (false); + + if (s > capacity_) + r = capacity (s); + + size_ = s; + + return r; + } + + public: + /** + * @brief Get the underlying memory region. + * + * @return A constant pointer to the underlying memory region. + */ + const char* + data () const {return data_;} + + /** + * @brief Get the underlying memory region. + * + * @return A pointer to the underlying memory region. + */ + char* + data () {return data_;} + + /** + * @brief Get the beginning of the underlying memory region. + * + * @return A constant pointer to the first byte of the underlying + * memory region. + */ + const char* + begin () const {return data_;} + + /** + * @brief Get the beginning of the underlying memory region. + * + * @return A pointer to the first byte of the underlying memory + * region. + */ + char* + begin () {return data_;} + + /** + * @brief Get the end of the underlying memory region. + * + * @return A constant pointer to the one past last byte of the + * underlying memory region (that is @c %begin() @c + @c %size() ). + */ + const char* + end () const {return data_ + size_;} + + /** + * @brief Get the end of the underlying memory region. + * + * @return A pointer to the one past last byte of the underlying + * memory region (that is @c %begin() @c + @c %size() ). + */ + char* + end () {return data_ + size_;} + + public: + /** + * @brief Swap data with another %buffer. + * + * @param x A %buffer to swap with. + */ + void + swap (buffer& x); + + private: + bool + capacity (size_t capacity, bool copy); + }; + + /** + * @brief %buffer comparison operator. + * + * @return True if the buffers have the same sizes and the same + * data. + */ + template <typename C> + inline bool + operator== (const buffer<C>& a, const buffer<C>& b) + { + return a.size () == b.size () && + std::memcmp (a.data (), b.data (), a.size ()) == 0; + } + + /** + * @brief %buffer comparison operator. + * + * @return True if the buffers have different sizes or different + * data. + */ + template <typename C> + inline bool + operator!= (const buffer<C>& a, const buffer<C>& b) + { + return !(a == b); + } + } + } +} + +#include <xsd/cxx/tree/buffer.txx> + +#endif // XSD_CXX_TREE_BUFFER_HXX diff --git a/xsd/libxsd/xsd/cxx/tree/buffer.txx b/xsd/libxsd/xsd/cxx/tree/buffer.txx new file mode 100644 index 0000000..f88f140 --- /dev/null +++ b/xsd/libxsd/xsd/cxx/tree/buffer.txx @@ -0,0 +1,147 @@ +// file : xsd/cxx/tree/buffer.txx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +namespace xsd +{ + namespace cxx + { + namespace tree + { + template <typename C> + buffer<C>:: + buffer (size_t size) + { + capacity (size); + size_ = size; + } + + template <typename C> + buffer<C>:: + buffer (size_t size, size_t capacity) + { + if (size > capacity) + throw bounds<C> (); + + this->capacity (capacity); + size_ = size; + } + + template <typename C> + buffer<C>:: + buffer (const void* data, size_t size) + { + capacity (size); + size_ = size; + + if (size_) + std::memcpy (data_, data, size_); + } + + template <typename C> + buffer<C>:: + buffer (const void* data, size_t size, size_t capacity) + { + if (size > capacity) + throw bounds<C> (); + + this->capacity (capacity); + size_ = size; + + if (size_) + std::memcpy (data_, data, size_); + } + + template <typename C> + buffer<C>:: + buffer (void* data, size_t size, size_t capacity, bool own) + { + if (size > capacity) + throw bounds<C> (); + + data_ = reinterpret_cast<char*> (data); + size_ = size; + capacity_ = capacity; + free_ = own; + } + + template <typename C> + buffer<C>:: + buffer (const buffer& other) + : buffer_base () + { + capacity (other.capacity_); + size_ = other.size_; + + if (size_) + std::memcpy (data_, other.data_, size_); + } + + template <typename C> + buffer<C>& buffer<C>:: + operator= (const buffer& other) + { + if (this != &other) + { + capacity (other.capacity_, false); + size_ = other.size_; + + if (size_) + std::memcpy (data_, other.data_, size_); + } + + return *this; + } + + template <typename C> + void buffer<C>:: + swap (buffer& other) + { + char* tmp_data (data_); + size_t tmp_size (size_); + size_t tmp_capacity (capacity_); + bool tmp_free (free_); + + data_ = other.data_; + size_ = other.size_; + capacity_ = other.capacity_; + free_ = other.free_; + + other.data_ = tmp_data; + other.size_ = tmp_size; + other.capacity_ = tmp_capacity; + other.free_ = tmp_free; + } + + template <typename C> + bool buffer<C>:: + capacity (size_t capacity, bool copy) + { + if (size_ > capacity) + throw bounds<C> (); + + if (capacity <= capacity_) + { + return false; // Do nothing if shrinking is requested. + } + else + { + char* data (reinterpret_cast<char*> (operator new (capacity))); + + if (copy && size_ > 0) + std::memcpy (data, data_, size_); + + if (free_ && data_) + operator delete (data_); + + data_ = data; + capacity_ = capacity; + free_ = true; + + return true; + } + } + } + } +} diff --git a/xsd/libxsd/xsd/cxx/tree/comparison-map.hxx b/xsd/libxsd/xsd/cxx/tree/comparison-map.hxx new file mode 100644 index 0000000..b7794f4 --- /dev/null +++ b/xsd/libxsd/xsd/cxx/tree/comparison-map.hxx @@ -0,0 +1,113 @@ +// file : xsd/cxx/tree/comparison-map.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_CXX_TREE_COMPARISON_MAP_HXX +#define XSD_CXX_TREE_COMPARISON_MAP_HXX + +#include <map> +#include <cstddef> // std::size_t +#include <typeinfo> + +#include <xsd/cxx/tree/elements.hxx> + +namespace xsd +{ + namespace cxx + { + namespace tree + { + template <typename C> + struct comparison_map + { + typedef std::type_info type_id; + typedef bool (*comparator) (const type&, const type&); + + comparison_map (); + + void + register_type (const type_id&, comparator, bool override = true); + + void + unregister_type (const type_id&); + + bool + compare (const type&, const type&); + + public: + comparator + find (const type_id&) const; + + private: + struct type_id_comparator + { + bool + operator() (const type_id* x, const type_id* y) const + { + // XL C++ on AIX has buggy type_info::before() in that + // it returns true for two different type_info objects + // that happened to be for the same type. + // +#if defined(__xlC__) && defined(_AIX) + return *x != *y && x->before (*y); +#else + return x->before (*y); +#endif + } + }; + + typedef + std::map<const type_id*, comparator, type_id_comparator> + type_map; + + type_map type_map_; + }; + + // + // + template<unsigned long id, typename C> + struct comparison_plate + { + static comparison_map<C>* map; + static std::size_t count; + + comparison_plate (); + ~comparison_plate (); + }; + + template<unsigned long id, typename C> + comparison_map<C>* comparison_plate<id, C>::map = 0; + + template<unsigned long id, typename C> + std::size_t comparison_plate<id, C>::count = 0; + + + // + // + template<unsigned long id, typename C> + inline comparison_map<C>& + comparison_map_instance () + { + return *comparison_plate<id, C>::map; + } + + // + // + template<typename T> + bool + comparator_impl (const type&, const type&); + + template<unsigned long id, typename C, typename T> + struct comparison_initializer + { + comparison_initializer (); + ~comparison_initializer (); + }; + } + } +} + +#include <xsd/cxx/tree/comparison-map.txx> + +#endif // XSD_CXX_TREE_COMPARISON_MAP_HXX diff --git a/xsd/libxsd/xsd/cxx/tree/comparison-map.txx b/xsd/libxsd/xsd/cxx/tree/comparison-map.txx new file mode 100644 index 0000000..e638ed4 --- /dev/null +++ b/xsd/libxsd/xsd/cxx/tree/comparison-map.txx @@ -0,0 +1,301 @@ +// file : xsd/cxx/tree/comparison-map.txx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <xsd/cxx/tree/types.hxx> + +namespace xsd +{ + namespace cxx + { + namespace tree + { + // comparison_map + // + template <typename C> + comparison_map<C>:: + comparison_map () + { + // anyType and anySimpleType. + // + + //register_type ( + // typeid (type), + // &comparator_impl<type>, + // false); + + typedef simple_type<type> simple_type; + + //register_type ( + // typeid (simple_type), + // &comparator_impl<simple_type>, + // false); + + + // Strings + // + typedef string<C, simple_type> string; + register_type ( + typeid (string), + &comparator_impl<string>, + false); + + typedef normalized_string<C, string> normalized_string; + register_type ( + typeid (normalized_string), + &comparator_impl<normalized_string>, + false); + + typedef token<C, normalized_string> token; + register_type ( + typeid (token), + &comparator_impl<token>, + false); + + typedef name<C, token> name; + register_type ( + typeid (name), + &comparator_impl<name>, + false); + + typedef nmtoken<C, token> nmtoken; + register_type ( + typeid (nmtoken), + &comparator_impl<nmtoken>, + false); + + typedef nmtokens<C, simple_type, nmtoken> nmtokens; + register_type ( + typeid (nmtokens), + &comparator_impl<nmtokens>, + false); + + typedef ncname<C, name> ncname; + register_type ( + typeid (ncname), + &comparator_impl<ncname>, + false); + + typedef language<C, token> language; + register_type ( + typeid (language), + &comparator_impl<language>, + false); + + + // ID/IDREF. + // + typedef id<C, ncname> id; + register_type ( + typeid (id), + &comparator_impl<id>, + false); + + typedef idref<C, ncname, type> idref; + register_type ( + typeid (idref), + &comparator_impl<idref>, + false); + + typedef idrefs<C, simple_type, idref> idrefs; + register_type ( + typeid (idrefs), + &comparator_impl<idrefs>, + false); + + + // URI. + // + typedef uri<C, simple_type> uri; + register_type ( + typeid (uri), + &comparator_impl<uri>, + false); + + + // Qualified name. + // + typedef qname<C, simple_type, uri, ncname> qname; + register_type ( + typeid (qname), + &comparator_impl<qname>, + false); + + + // Binary. + // + typedef base64_binary<C, simple_type> base64_binary; + register_type ( + typeid (base64_binary), + &comparator_impl<base64_binary>, + false); + + typedef hex_binary<C, simple_type> hex_binary; + register_type ( + typeid (hex_binary), + &comparator_impl<hex_binary>, + false); + + + // Date/time. + // + typedef gday<C, simple_type> gday; + register_type ( + typeid (gday), + &comparator_impl<gday>, + false); + + typedef gmonth<C, simple_type> gmonth; + register_type ( + typeid (gmonth), + &comparator_impl<gmonth>, + false); + + typedef gyear<C, simple_type> gyear; + register_type ( + typeid (gyear), + &comparator_impl<gyear>, + false); + + typedef gmonth_day<C, simple_type> gmonth_day; + register_type ( + typeid (gmonth_day), + &comparator_impl<gmonth_day>, + false); + + typedef gyear_month<C, simple_type> gyear_month; + register_type ( + typeid (gyear_month), + &comparator_impl<gyear_month>, + false); + + typedef date<C, simple_type> date; + register_type ( + typeid (date), + &comparator_impl<date>, + false); + + typedef time<C, simple_type> time; + register_type ( + typeid (time), + &comparator_impl<time>, + false); + + typedef date_time<C, simple_type> date_time; + register_type ( + typeid (date_time), + &comparator_impl<date_time>, + false); + + typedef duration<C, simple_type> duration; + register_type ( + typeid (duration), + &comparator_impl<duration>, + false); + + + // Entity. + // + typedef entity<C, ncname> entity; + register_type ( + typeid (entity), + &comparator_impl<entity>, + false); + + typedef entities<C, simple_type, entity> entities; + register_type ( + typeid (entities), + &comparator_impl<entities>, + false); + } + + template <typename C> + void comparison_map<C>:: + register_type (const type_id& tid, comparator c, bool override) + { + if (override || type_map_.find (&tid) == type_map_.end ()) + type_map_[&tid] = c; + } + + template <typename C> + void comparison_map<C>:: + unregister_type (const type_id& tid) + { + type_map_.erase (&tid); + } + + template <typename C> + bool comparison_map<C>:: + compare (const type& x, const type& y) + { + const type_id& xi (typeid (x)); + + if (xi != typeid (y)) + return false; + + if (comparator c = find (xi)) + return c (x, y); + else + throw no_type_info<C> (std::basic_string<C> (), + std::basic_string<C> ()); // @@ TODO + } + + template <typename C> + typename comparison_map<C>::comparator + comparison_map<C>:: + find (const type_id& tid) const + { + typename type_map::const_iterator i (type_map_.find (&tid)); + return i == type_map_.end () ? 0 : i->second; + } + + + // comparison_plate + // + template<unsigned long id, typename C> + comparison_plate<id, C>:: + comparison_plate () + { + if (count == 0) + map = new comparison_map<C>; + + ++count; + } + + template<unsigned long id, typename C> + comparison_plate<id, C>:: + ~comparison_plate () + { + if (--count == 0) + delete map; + } + + // + // + template<typename T> + bool + comparator_impl (const type& x, const type& y) + { + return static_cast<const T&> (x) == static_cast<const T&> (y); + } + + // comparison_initializer + // + template<unsigned long id, typename C, typename T> + comparison_initializer<id, C, T>:: + comparison_initializer () + { + comparison_map_instance<id, C> ().register_type ( + typeid (T), &comparator_impl<T>); + } + + template<unsigned long id, typename C, typename T> + comparison_initializer<id, C, T>:: + ~comparison_initializer () + { + comparison_map_instance<id, C> ().unregister_type (typeid (T)); + } + } + } +} diff --git a/xsd/libxsd/xsd/cxx/tree/containers-wildcard.hxx b/xsd/libxsd/xsd/cxx/tree/containers-wildcard.hxx new file mode 100644 index 0000000..5313507 --- /dev/null +++ b/xsd/libxsd/xsd/cxx/tree/containers-wildcard.hxx @@ -0,0 +1,1335 @@ +// file : xsd/cxx/tree/containers-wildcard.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_CXX_TREE_CONTAINERS_WILDCARD_HXX +#define XSD_CXX_TREE_CONTAINERS_WILDCARD_HXX + +#include <set> +#include <string> + +#include <xercesc/dom/DOMAttr.hpp> +#include <xercesc/dom/DOMElement.hpp> +#include <xercesc/dom/DOMDocument.hpp> +#include <xercesc/util/XMLString.hpp> + +#include <xsd/cxx/xml/string.hxx> + +#include <xsd/cxx/tree/containers.hxx> // iterator_adapter + +namespace xsd +{ + namespace cxx + { + namespace tree + { + // one (for internal use only) + // + class element_one + { + public: + ~element_one () + { + if (x_) + x_->release (); + } + + explicit + element_one (xercesc::DOMDocument& doc) + : x_ (0), doc_ (doc) + { + } + + element_one (const xercesc::DOMElement& x, xercesc::DOMDocument& doc) + : x_ (0), doc_ (doc) + { + set (x); + } + + element_one (const element_one& x, xercesc::DOMDocument& doc) + : x_ (0), doc_ (doc) + { + if (x.present ()) + set (x.get ()); + } + + element_one& + operator= (const element_one& x) + { + if (this == &x) + return *this; + + if (x.present ()) + set (x.get ()); + else if (x_) + { + x_->release (); + x_ = 0; + } + + return *this; + } + + public: + const xercesc::DOMElement& + get () const + { + return *x_; + } + + xercesc::DOMElement& + get () + { + return *x_; + } + + void + set (const xercesc::DOMElement& x) + { + using xercesc::DOMElement; + + DOMElement* r ( + static_cast<DOMElement*> ( + doc_.importNode (const_cast<DOMElement*> (&x), true))); + + if (x_) + x_->release (); + + x_ = r; + } + + void + set (xercesc::DOMElement* x) + { + assert (x->getOwnerDocument () == &doc_); + + if (x_) + x_->release (); + + x_ = x; + } + + bool + present () const + { + return x_ != 0; + } + + protected: + xercesc::DOMElement* x_; + xercesc::DOMDocument& doc_; + }; + + + // + // + class element_optional + { + public: + ~element_optional () + { + if (x_) + x_->release (); + } + + explicit + element_optional (xercesc::DOMDocument& doc) + : x_ (0), doc_ (doc) + { + } + + element_optional (const xercesc::DOMElement& x, + xercesc::DOMDocument& doc) + : x_ (0), doc_ (doc) + { + set (x); + } + + element_optional (xercesc::DOMElement* x, xercesc::DOMDocument& doc) + : x_ (0), doc_ (doc) + { + set (x); + } + + element_optional (const element_optional& x, + xercesc::DOMDocument& doc) + : x_ (0), doc_ (doc) + { + if (x) + set (*x); + } + + element_optional& + operator= (const xercesc::DOMElement& x) + { + if (x_ == &x) + return *this; + + set (x); + + return *this; + } + + element_optional& + operator= (const element_optional& x) + { + if (this == &x) + return *this; + + if (x) + set (*x); + else + reset (); + + return *this; + } + + // Pointer-like interface. + // + public: + const xercesc::DOMElement* + operator-> () const + { + return x_; + } + + xercesc::DOMElement* + operator-> () + { + return x_; + } + + const xercesc::DOMElement& + operator* () const + { + return *x_; + } + + xercesc::DOMElement& + operator* () + { + return *x_; + } + + typedef void (element_optional::*bool_convertible) (); + + operator bool_convertible () const + { + return x_ != 0 ? &element_optional::true_ : 0; + } + + // Get/set interface. + // + public: + bool + present () const + { + return x_ != 0; + } + + const xercesc::DOMElement& + get () const + { + return *x_; + } + + xercesc::DOMElement& + get () + { + return *x_; + } + + void + set (const xercesc::DOMElement& x) + { + using xercesc::DOMElement; + + DOMElement* r ( + static_cast<DOMElement*> ( + doc_.importNode (const_cast<DOMElement*> (&x), true))); + + if (x_) + x_->release (); + + x_ = r; + } + + void + set (xercesc::DOMElement* x) + { + assert (x->getOwnerDocument () == &doc_); + + if (x_) + x_->release (); + + x_ = x; + } + + void + reset () + { + if (x_) + x_->release (); + + x_ = 0; + } + + private: + void + true_ () + { + } + + private: + xercesc::DOMElement* x_; + xercesc::DOMDocument& doc_; + }; + + // Comparison operators. + // + + inline bool + operator== (const element_optional& a, const element_optional& b) + { + return !a || !b + ? a.present () == b.present () + : a->isEqualNode (&b.get ()); + } + + inline bool + operator!= (const element_optional& a, const element_optional& b) + { + return !(a == b); + } + + + // + // + class element_sequence + { + protected: + // This is a dangerously destructive automatic pointer. We are going + // to use it in a controlled environment to save us a lot of coding. + // + struct ptr + { + ~ptr () + { + if (x_) + x_->release (); + } + + explicit + ptr (xercesc::DOMElement* x = 0) + : x_ (x) + { + } + + ptr (const ptr& y) + : x_ (y.x_) + { + // Yes, hostile takeover. + // + y.x_ = 0; + } + + ptr& + operator= (const ptr& y) + { + if (this != &y) + { + // Yes, hostile takeover. + // + if (x_) + x_->release (); + + x_ = y.x_; + y.x_ = 0; + } + + return *this; + } + + public: + xercesc::DOMElement& + operator* () const + { + return *x_; + } + + xercesc::DOMElement* + get () const + { + return x_; + } + + private: + mutable xercesc::DOMElement* x_; + }; + + typedef std::vector<ptr> base_sequence; + typedef base_sequence::iterator base_iterator; + typedef base_sequence::const_iterator base_const_iterator; + + public: + typedef xercesc::DOMElement value_type; + typedef xercesc::DOMElement* pointer; + typedef const xercesc::DOMElement* const_pointer; + typedef xercesc::DOMElement& reference; + typedef const xercesc::DOMElement& const_reference; + + typedef + iterator_adapter<base_sequence::iterator, xercesc::DOMElement> + iterator; + + typedef + iterator_adapter<base_sequence::const_iterator, + const xercesc::DOMElement> + const_iterator; + + typedef + iterator_adapter<base_sequence::reverse_iterator, xercesc::DOMElement> + reverse_iterator; + + typedef + iterator_adapter<base_sequence::const_reverse_iterator, + const xercesc::DOMElement> + const_reverse_iterator; + + typedef base_sequence::size_type size_type; + typedef base_sequence::difference_type difference_type; + typedef base_sequence::allocator_type allocator_type; + + public: + explicit + element_sequence (xercesc::DOMDocument& doc) + : doc_ (doc) + { + } + + // DOMElement cannot be default-constructed. + // + // explicit + // element_sequence (size_type n); + + element_sequence (size_type n, + const xercesc::DOMElement& x, + xercesc::DOMDocument& doc) + : doc_ (doc) + { + assign (n, x); + } + + template <typename I> + element_sequence (const I& begin, const I& end, + xercesc::DOMDocument& doc) + : doc_ (doc) + { + assign (begin, end); + } + + element_sequence (const element_sequence& v, + xercesc::DOMDocument& doc) + : doc_ (doc) + { + v_.reserve (v.v_.size ()); + + for (base_const_iterator i (v.v_.begin ()), e (v.v_.end ()); + i != e; ++i) + { + ptr p (static_cast<xercesc::DOMElement*> ( + doc_.importNode (i->get (), true))); + + v_.push_back (p); + } + } + + element_sequence& + operator= (const element_sequence& v) + { + if (this == &v) + return *this; + + v_.assign (v.v_.size (), ptr ()); + + base_iterator di (v_.begin ()), de (v_.end ()); + base_const_iterator si (v.v_.begin ()), se (v.v_.end ()); + + for (; si != se && di != de; ++si, ++di) + { + ptr p (static_cast<xercesc::DOMElement*> ( + doc_.importNode (si->get (), true))); + *di = p; + } + + return *this; + } + + public: + void + assign (size_type n, const xercesc::DOMElement& x) + { + v_.assign (n, ptr ()); + + for (base_iterator i (v_.begin ()), e (v_.end ()); i != e; ++i) + { + ptr p (static_cast<xercesc::DOMElement*> ( + doc_.importNode ( + const_cast<xercesc::DOMElement*> (&x), true))); + *i = p; + } + } + + template <typename I> + void + assign (const I& begin, const I& end) + { + // This is not the fastest way to do it. + // + v_.clear (); + + for (I i (begin); i != end; ++i) + { + ptr p (static_cast<xercesc::DOMElement*> ( + doc_.importNode ( + const_cast<xercesc::DOMElement*> (&(*i)), true))); + v_.push_back (p); + } + } + + public: + // This version of resize can only be used to shrink the + // sequence because DOMElement cannot be default-constructed. + // + void + resize (size_type n) + { + assert (n <= v_.size ()); + v_.resize (n, ptr ()); + } + + void + resize (size_type n, const xercesc::DOMElement& x) + { + size_type old (v_.size ()); + v_.resize (n, ptr ()); + + if (old < n) + { + for (base_iterator i (v_.begin () + old), e (v_.end ()); + i != e; ++i) + { + ptr p (static_cast<xercesc::DOMElement*> ( + doc_.importNode ( + const_cast<xercesc::DOMElement*> (&x), true))); + *i = p; + } + } + } + + public: + size_type + size () const + { + return v_.size (); + } + + size_type + max_size () const + { + return v_.max_size (); + } + + size_type + capacity () const + { + return v_.capacity (); + } + + bool + empty () const + { + return v_.empty (); + } + + void + reserve (size_type n) + { + v_.reserve (n); + } + + void + clear () + { + v_.clear (); + } + + public: + const_iterator + begin () const + { + return const_iterator (v_.begin ()); + } + + const_iterator + end () const + { + return const_iterator (v_.end ()); + } + + iterator + begin () + { + return iterator (v_.begin ()); + } + + iterator + end () + { + return iterator (v_.end ()); + } + + // reverse + // + + const_reverse_iterator + rbegin () const + { + return const_reverse_iterator (v_.rbegin ()); + } + + const_reverse_iterator + rend () const + { + return const_reverse_iterator (v_.rend ()); + } + + reverse_iterator + rbegin () + { + return reverse_iterator (v_.rbegin ()); + } + + reverse_iterator + rend () + { + return reverse_iterator (v_.rend ()); + } + + public: + xercesc::DOMElement& + operator[] (size_type n) + { + return *(v_[n]); + } + + const xercesc::DOMElement& + operator[] (size_type n) const + { + return *(v_[n]); + } + + xercesc::DOMElement& + at (size_type n) + { + return *(v_.at (n)); + } + + const xercesc::DOMElement& + at (size_type n) const + { + return *(v_.at (n)); + } + + xercesc::DOMElement& + front () + { + return *(v_.front ()); + } + + const xercesc::DOMElement& + front () const + { + return *(v_.front ()); + } + + xercesc::DOMElement& + back () + { + return *(v_.back ()); + } + + const xercesc::DOMElement& + back () const + { + return *(v_.back ()); + } + + public: + // Makes a deep copy. + // + void + push_back (const xercesc::DOMElement& x) + { + ptr p (static_cast<xercesc::DOMElement*> ( + doc_.importNode ( + const_cast<xercesc::DOMElement*> (&x), true))); + + v_.push_back (p); + } + + // Assumes ownership. + // + void + push_back (xercesc::DOMElement* x) + { + assert (x->getOwnerDocument () == &doc_); + v_.push_back (ptr (x)); + } + + void + pop_back () + { + v_.pop_back (); + } + + // Makes a deep copy. + // + iterator + insert (iterator position, const xercesc::DOMElement& x) + { + ptr p (static_cast<xercesc::DOMElement*> ( + doc_.importNode ( + const_cast<xercesc::DOMElement*> (&x), true))); + + return iterator (v_.insert (position.base (), p)); + } + + // Assumes ownership. + // + iterator + insert (iterator position, xercesc::DOMElement* x) + { + assert (x->getOwnerDocument () == &doc_); + return iterator (v_.insert (position.base (), ptr (x))); + } + + void + insert (iterator position, size_type n, const xercesc::DOMElement& x) + { + difference_type d (v_.end () - position.base ()); + v_.insert (position.base (), n, ptr ()); + + for (base_iterator i (v_.end () - d); n != 0; --n) + { + ptr r (static_cast<xercesc::DOMElement*> ( + doc_.importNode ( + const_cast<xercesc::DOMElement*> (&x), true))); + *(--i) = r; + } + } + + template <typename I> + void + insert (iterator position, const I& begin, const I& end) + { + // This is not the fastest way to do it. + // + if (begin != end) + { + base_iterator p (position.base ()); + + for (I i (end);;) + { + --i; + ptr r (static_cast<xercesc::DOMElement*> ( + doc_.importNode (i->get (), true))); + + p = v_.insert (p, r); + + if (i == begin) + break; + } + } + } + + iterator + erase (iterator position) + { + return iterator (v_.erase (position.base ())); + } + + iterator + erase (iterator begin, iterator end) + { + return iterator (v_.erase (begin.base (), end.base ())); + } + + public: + // Note that the DOMDocument object of the two sequences being + // swapped should be the same. + // + void + swap (element_sequence& x) + { + assert (&doc_ == &x.doc_); + v_.swap (x.v_); + } + + private: + base_sequence v_; + xercesc::DOMDocument& doc_; + }; + + // Comparison operators. + // + + inline bool + operator== (const element_sequence& a, const element_sequence& b) + { + if (a.size () != b.size ()) + return false; + + element_sequence::const_iterator + ai (a.begin ()), ae (a.end ()), bi (b.begin ()); + + for (; ai != ae; ++ai, ++bi) + if (!ai->isEqualNode (&(*bi))) + return false; + + return true; + } + + inline bool + operator!= (const element_sequence& a, const element_sequence& b) + { + return !(a == b); + } + + + // Attribute set. + // + + class attribute_set_common + { + protected: + // Set entry. It can either act as a dangerously destructive + // automatic pointer for DOMAttr or as an entry containing the + // name we are searching for. + // + struct entry + { + ~entry () + { + if (a_) + a_->release (); + } + + explicit + entry (xercesc::DOMAttr* a) + : a_ (a), ns_ (0), name_ (0) + { + ns_ = a->getNamespaceURI (); + name_ = ns_ == 0 ? a->getName () : a->getLocalName (); + } + + // Note: uses shallow copy. + // + explicit + entry (const XMLCh* ns, const XMLCh* name) + : a_ (0), ns_ (ns), name_ (name) + { + } + + entry (const entry& y) + : a_ (y.a_), ns_ (y.ns_), name_ (y.name_) + { + // Yes, hostile takeover. + // + y.a_ = 0; + y.ns_ = 0; + y.name_ = 0; + } + + entry& + operator= (const entry& y) + { + if (this != &y) + { + // Yes, hostile takeover. + // + if (a_) + a_->release (); + + a_ = y.a_; + ns_ = y.ns_; + name_ = y.name_; + + y.a_ = 0; + y.ns_ = 0; + y.name_ = 0; + } + + return *this; + } + + public: + xercesc::DOMAttr& + operator* () const + { + return *a_; + } + + xercesc::DOMAttr* + get () const + { + return a_; + } + + const XMLCh* + ns () const + { + return ns_; + } + + const XMLCh* + name () const + { + return name_; + } + + void + release () + { + a_ = 0; + } + + private: + mutable xercesc::DOMAttr* a_; + mutable const XMLCh* ns_; + mutable const XMLCh* name_; + }; + + struct entry_cmp + { + bool + operator() (const entry& a, const entry& b) const + { + using xercesc::XMLString; + + const XMLCh* ans (a.ns ()); + const XMLCh* bns (b.ns ()); + + const XMLCh* an (a.name ()); + const XMLCh* bn (b.name ()); + + if (ans == 0) + return bns != 0 + ? true + : (XMLString::compareString (an, bn) < 0); + + if (ans != 0 && bns == 0) + return false; + + int r (XMLString::compareString (ans, bns)); + + return r < 0 + ? true + : (r > 0 ? false : XMLString::compareString (an, bn)); + } + }; + + typedef std::set<entry, entry_cmp> base_set; + typedef base_set::iterator base_iterator; + typedef base_set::const_iterator base_const_iterator; + }; + + template <typename C> + class attribute_set: public attribute_set_common + { + public: + typedef xercesc::DOMAttr key_type; + typedef xercesc::DOMAttr value_type; + typedef xercesc::DOMAttr* pointer; + typedef const xercesc::DOMAttr* const_pointer; + typedef xercesc::DOMAttr& reference; + typedef const xercesc::DOMAttr& const_reference; + + typedef + iterator_adapter<base_set::iterator, xercesc::DOMAttr> + iterator; + + typedef + iterator_adapter<base_set::const_iterator, const xercesc::DOMAttr> + const_iterator; + + typedef + iterator_adapter<base_set::reverse_iterator, xercesc::DOMAttr> + reverse_iterator; + + typedef + iterator_adapter<base_set::const_reverse_iterator, + const xercesc::DOMAttr> + const_reverse_iterator; + + typedef base_set::size_type size_type; + typedef base_set::difference_type difference_type; + typedef base_set::allocator_type allocator_type; + + public: + attribute_set (xercesc::DOMDocument& doc) + : doc_ (doc) + { + } + + template <typename I> + attribute_set (const I& begin, + const I& end, + xercesc::DOMDocument& doc) + : doc_ (doc) + { + insert (begin, end); + } + + attribute_set (const attribute_set& s, xercesc::DOMDocument& doc) + : doc_ (doc) + { + // Can be done faster with the "hinted" insert. + // + insert (s.begin (), s.end ()); + } + + attribute_set& + operator= (const attribute_set& s) + { + if (this == &s) + return *this; + + // Can be done faster with the "hinted" insert. + // + clear (); + insert (s.begin (), s.end ()); + + return *this; + } + + public: + const_iterator + begin () const + { + return const_iterator (s_.begin ()); + } + + const_iterator + end () const + { + return const_iterator (s_.end ()); + } + + iterator + begin () + { + return iterator (s_.begin ()); + } + + iterator + end () + { + return iterator (s_.end ()); + } + + // reverse + // + + const_reverse_iterator + rbegin () const + { + return const_reverse_iterator (s_.rbegin ()); + } + + const_reverse_iterator + rend () const + { + return const_reverse_iterator (s_.rend ()); + } + + reverse_iterator + rbegin () + { + return reverse_iterator (s_.rbegin ()); + } + + reverse_iterator + rend () + { + return reverse_iterator (s_.rend ()); + } + + public: + size_type + size () const + { + return s_.size (); + } + + size_type + max_size () const + { + return s_.max_size (); + } + + bool + empty () const + { + return s_.empty (); + } + + void + clear () + { + s_.clear (); + } + + public: + // Makes a deep copy. + // + std::pair<iterator, bool> + insert (const xercesc::DOMAttr& a) + { + entry e (static_cast<xercesc::DOMAttr*> ( + doc_.importNode ( + const_cast<xercesc::DOMAttr*> (&a), true))); + + std::pair<base_iterator, bool> r (s_.insert (e)); + + return std::pair<iterator, bool> (iterator (r.first), r.second); + } + + // Assumes ownership. + // + std::pair<iterator, bool> + insert (xercesc::DOMAttr* a) + { + assert (a->getOwnerDocument () == &doc_); + entry e (a); + std::pair<base_iterator, bool> r (s_.insert (e)); + + if (!r.second) + e.release (); // Detach the attribute of insert failed. + + return std::pair<iterator, bool> (iterator (r.first), r.second); + } + + // Makes a deep copy. + // + iterator + insert (iterator position, const xercesc::DOMAttr& a) + { + entry e (static_cast<xercesc::DOMAttr*> ( + doc_.importNode ( + const_cast<xercesc::DOMAttr*> (&a), true))); + + return iterator (s_.insert (position.base (), e)); + } + + // Assumes ownership. + // + iterator + insert (iterator position, xercesc::DOMAttr* a) + { + assert (a->getOwnerDocument () == &doc_); + entry e (a); + base_iterator r (s_.insert (position.base (), e)); + + if (r->get () != a) + e.release (); // Detach the attribute of insert failed. + + return iterator (r); + } + + template <typename I> + void + insert (const I& begin, const I& end) + { + for (I i (begin); i != end; ++i) + { + entry e (static_cast<xercesc::DOMAttr*> ( + doc_.importNode ( + const_cast<xercesc::DOMAttr*> (&(*i)), true))); + + s_.insert (e); + } + } + + public: + void + erase (iterator position) + { + s_.erase (position.base ()); + } + + size_type + erase (const std::basic_string<C>& name) + { + return s_.erase (entry (0, xml::string (name).c_str ())); + } + + size_type + erase (const std::basic_string<C>& namespace_, + const std::basic_string<C>& name) + { + return s_.erase (entry (xml::string (namespace_).c_str (), + xml::string (name).c_str ())); + } + + size_type + erase (const XMLCh* name) + { + return s_.erase (entry (0, name)); + } + + size_type + erase (const XMLCh* namespace_, const XMLCh* name) + { + return s_.erase (entry (namespace_, name)); + } + + void + erase (iterator begin, iterator end) + { + s_.erase (begin.base (), end.base ()); + } + + public: + size_type + count (const std::basic_string<C>& name) const + { + return s_.count (entry (0, xml::string (name).c_str ())); + } + + size_type + count (const std::basic_string<C>& namespace_, + const std::basic_string<C>& name) const + { + return s_.count (entry (xml::string (namespace_).c_str (), + xml::string (name).c_str ())); + } + + size_type + count (const XMLCh* name) const + { + return s_.count (entry (0, name)); + } + + size_type + count (const XMLCh* namespace_, const XMLCh* name) const + { + return s_.count (entry (namespace_, name)); + } + + // find + // + + iterator + find (const std::basic_string<C>& name) + { + return iterator (s_.find (entry (0, xml::string (name).c_str ()))); + } + + iterator + find (const std::basic_string<C>& namespace_, + const std::basic_string<C>& name) + { + return iterator ( + s_.find (entry (xml::string (namespace_).c_str (), + xml::string (name).c_str ()))); + } + + iterator + find (const XMLCh* name) + { + return iterator (s_.find (entry (0, name))); + } + + iterator + find (const XMLCh* namespace_, const XMLCh* name) + { + return iterator (s_.find (entry (namespace_, name))); + } + + const_iterator + find (const std::basic_string<C>& name) const + { + return const_iterator ( + s_.find (entry (0, xml::string (name).c_str ()))); + } + + const_iterator + find (const std::basic_string<C>& namespace_, + const std::basic_string<C>& name) const + { + return const_iterator ( + s_.find (entry (xml::string (namespace_).c_str (), + xml::string (name).c_str ()))); + } + + const_iterator + find (const XMLCh* name) const + { + return const_iterator (s_.find (entry (0, name))); + } + + const_iterator + find (const XMLCh* namespace_, const XMLCh* name) const + { + return const_iterator (s_.find (entry (namespace_, name))); + } + + public: + // Note that the DOMDocument object of the two sets being + // swapped should be the same. + // + void + swap (attribute_set& x) + { + assert (&doc_ == &x.doc_); + s_.swap (x.s_); + } + + private: + base_set s_; + xercesc::DOMDocument& doc_; + }; + + // Comparison operators. + // + + template <typename C> + inline bool + operator== (const attribute_set<C>& a, const attribute_set<C>& b) + { + if (a.size () != b.size ()) + return false; + + typename attribute_set<C>::const_iterator + ai (a.begin ()), ae (a.end ()), bi (b.begin ()); + + for (; ai != ae; ++ai, ++bi) + if (!ai->isEqualNode (&(*bi))) + return false; + + return true; + } + + template <typename C> + inline bool + operator!= (const attribute_set<C>& a, const attribute_set<C>& b) + { + return !(a == b); + } + } + } +} + +#endif // XSD_CXX_TREE_CONTAINERS_WILDCARD_HXX diff --git a/xsd/libxsd/xsd/cxx/tree/containers.hxx b/xsd/libxsd/xsd/cxx/tree/containers.hxx new file mode 100644 index 0000000..ba76eae --- /dev/null +++ b/xsd/libxsd/xsd/cxx/tree/containers.hxx @@ -0,0 +1,1458 @@ +// file : xsd/cxx/tree/containers.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_CXX_TREE_CONTAINERS_HXX +#define XSD_CXX_TREE_CONTAINERS_HXX + +#include <cstddef> // std::ptrdiff_t +#include <string> +#include <vector> +#include <memory> // std::auto_ptr +#include <iterator> // std::iterator_traits +#include <algorithm> // std::equal, std::lexicographical_compare +#include <iosfwd> + +#include <xsd/cxx/tree/elements.hxx> + +namespace xsd +{ + namespace cxx + { + namespace tree + { + // Test whether T is a fundamental C++ type. + // + + template <typename T> + struct fundamental_p + { + static const bool r = false; + }; + + // byte + // + template <> + struct fundamental_p<signed char> + { + static const bool r = true; + }; + + template <> + struct fundamental_p<unsigned char> + { + static const bool r = true; + }; + + // short + // + template <> + struct fundamental_p<short> + { + static const bool r = true; + }; + + template <> + struct fundamental_p<unsigned short> + { + static const bool r = true; + }; + + // int + // + template <> + struct fundamental_p<int> + { + static const bool r = true; + }; + + template <> + struct fundamental_p<unsigned int> + { + static const bool r = true; + }; + + // long + // + template <> + struct fundamental_p<long> + { + static const bool r = true; + }; + + template <> + struct fundamental_p<unsigned long> + { + static const bool r = true; + }; + + template <> + struct fundamental_p<long long> + { + static const bool r = true; + }; + + template <> + struct fundamental_p<unsigned long long> + { + static const bool r = true; + }; + + // bool + // + template <> + struct fundamental_p<bool> + { + static const bool r = true; + }; + + // float + // + template <> + struct fundamental_p<float> + { + static const bool r = true; + }; + + template <> + struct fundamental_p<double> + { + static const bool r = true; + }; + + // one (for internal use only) + // + template <typename T, bool fund = fundamental_p<T>::r> + class one; + + template <typename T> + class one<T, false> + { + public: + ~one (); + + one (flags, container*); + + one (const T&, flags, container*); + + one (std::auto_ptr<T>, flags, container*); + + one (const one&, flags, container*); + + one& + operator= (const one&); + + public: + const T& + get () const + { + return *x_; + } + + T& + get () + { + return *x_; + } + + void + set (const T&); + + void + set (std::auto_ptr<T>); + + bool + present () const + { + return x_ != 0; + } + + std::auto_ptr<T> + detach () + { + T* x (x_); + x->_container (0); + x_ = 0; + return std::auto_ptr<T> (x); + } + + protected: + T* x_; + flags flags_; + container* container_; + }; + + + template <typename T> + class one<T, true> + { + public: + one (flags, container*) + : present_ (false) + { + } + + one (const T& x, flags, container*) + : x_ (x), present_ (true) + { + } + + one (const one& x, flags, container*) + : x_ (x.x_), present_ (x.present_) + { + } + + one& + operator= (const one& x) + { + if (this == &x) + return *this; + + x_ = x.x_; + present_ = x.present_; + + return *this; + } + + public: + const T& + get () const + { + return x_; + } + + T& + get () + { + return x_; + } + + void + set (const T& x) + { + x_ = x; + present_ = true; + } + + bool + present () const + { + return present_; + } + + protected: + T x_; + bool present_; + }; + + + // Note that I cannot get rid of fund because of HP aCC3. + // + template <typename T, bool fund = fundamental_p<T>::r> + class optional; + + template <typename T> + class optional<T, false> + { + public: + ~optional (); + + explicit + optional (flags = 0, container* = 0); + + explicit + optional (const T&, flags = 0, container* = 0); + + explicit + optional (std::auto_ptr<T>, flags = 0, container* = 0); + + optional (const optional&, flags = 0, container* = 0); + + optional& + operator= (const T&); + + optional& + operator= (const optional&); + + // Pointer-like interface. + // + public: + const T* + operator-> () const + { + return x_; + } + + T* + operator-> () + { + return x_; + } + + const T& + operator* () const + { + return *x_; + } + + T& + operator* () + { + return *x_; + } + + typedef optional self_; // Simplifier for Sun C++ 5.7. + typedef void (self_::*bool_convertible) (); + + operator bool_convertible () const + { + return x_ != 0 ? &self_::true_ : 0; + } + + // Get/set interface. + // + public: + bool + present () const + { + return x_ != 0; + } + + const T& + get () const + { + return *x_; + } + + T& + get () + { + return *x_; + } + + void + set (const T&); + + void + set (std::auto_ptr<T>); + + void + reset (); + + std::auto_ptr<T> + detach () + { + T* x (x_); + x->_container (0); + x_ = 0; + return std::auto_ptr<T> (x); + } + + private: + void + true_ (); + + private: + T* x_; + flags flags_; + container* container_; + }; + + + // + // + template <typename T> + class optional<T, true> + { + public: + explicit + optional (flags = 0, container* = 0) + : present_ (false) + { + } + + explicit + optional (const T&, flags = 0, container* = 0); + + optional (const optional&, flags = 0, container* = 0); + + optional& + operator= (const T&); + + optional& + operator= (const optional&); + + // Pointer-like interface. + // + public: + const T* + operator-> () const + { + return &x_; + } + + T* + operator-> () + { + return &x_; + } + + const T& + operator* () const + { + return get (); + } + + T& + operator* () + { + return get (); + } + + typedef optional self_; // Simplifier for Sun C++ 5.7. + typedef void (self_::*bool_convertible) (); + + operator bool_convertible () const + { + return present () ? &self_::true_ : 0; + } + + // Get/set interface. + // + public: + bool + present () const + { + return present_; + } + + const T& + get () const + { + return x_; + } + + T& + get () + { + return x_; + } + + void + set (const T& y) + { + x_ = y; + present_ = true; + } + + void + reset () + { + present_ = false; + } + + private: + void + true_ (); + + private: + bool present_; + T x_; + }; + + // Comparison operators. + // + + template <typename T, bool fund> + inline bool + operator== (const optional<T, fund>& a, const optional<T, fund>& b) + { + return !a || !b ? a.present () == b.present () : *a == *b; + } + + template <typename T, bool fund> + inline bool + operator!= (const optional<T, fund>& a, const optional<T, fund>& b) + { + return !(a == b); + } + + template <typename T, bool fund> + inline bool + operator< (const optional<T, fund>& a, const optional<T, fund>& b) + { + return a && (!b || *a < *b); + } + + template <typename T, bool fund> + inline bool + operator> (const optional<T, fund>& a, const optional<T, fund>& b) + { + return b < a; + } + + template <typename T, bool fund> + inline bool + operator<= (const optional<T, fund>& a, const optional<T, fund>& b) + { + return !(a > b); + } + + template <typename T, bool fund> + inline bool + operator>= (const optional<T, fund>& a, const optional<T, fund>& b) + { + return !(a < b); + } + + // Provide an ostream insertion opretaor to prevent confusion from + // the implicit bool conversion. + // + template <typename C, typename T, bool fund> + std::basic_ostream<C>& + operator<< (std::basic_ostream<C>&, const optional<T, fund>&); + + + // Sequence. + // + + // Note that I cannot get rid of 'fund' because HP aCC3 likes it + // this way. + // + template <typename T, bool fund = fundamental_p<T>::r> + class sequence; + + + // Sun CC's <iterator> does not have iterator_traits. To overcome + // this, we will wrap std::iterator_traits into our own and also + // specialize it for pointer types. Since Sun CC uses pointer + // for vector::iterator, it will use the specialization and won't + // notice the std::iterator_traits. + // +#ifndef _RWSTD_NO_CLASS_PARTIAL_SPEC + template <typename I> + struct iterator_traits + { + typedef + typename std::iterator_traits<I>::iterator_category + iterator_category; + + typedef + typename std::iterator_traits<I>::value_type + value_type; + + typedef + typename std::iterator_traits<I>::difference_type + difference_type; + }; +#else + // The Pointer specialization does not work for reverse and + // set iterators. But these iterators are user-dfined types + // and have suitable typedefs that we can use. + // + template <typename I> + struct iterator_traits + { + typedef typename I::iterator_category iterator_category; + typedef typename I::value_type value_type; + typedef typename I::difference_type difference_type; + }; + + template <typename T> + struct iterator_traits<T*> + { + typedef std::random_access_iterator_tag iterator_category; + typedef T value_type; + typedef std::ptrdiff_t difference_type; + }; +#endif + + // Iterator adapter for complex types. It expects I to point to + // a smart pointer-like object that has operator*() that returns + // a refernce to a type static_cast'able to T and get() that + // returns a pointer to a type static_cast'able to T. + // + + template <typename I, typename T> + struct iterator_adapter + { + typedef T value_type; + typedef value_type& reference; + typedef value_type* pointer; + + typedef + typename iterator_traits<I>::iterator_category + iterator_category; + + typedef + typename iterator_traits<I>::difference_type + difference_type; + + + public: + iterator_adapter () + : i_ () // i_ can be of a pointer type. + { + } + + // Allow iterator to const_iterator conversion. + // + template <typename J, typename T2> + iterator_adapter (const iterator_adapter<J, T2>& j) + : i_ (j.base ()) + { + } + + explicit + iterator_adapter (const I& i) + : i_ (i) + { + } + + public: + // Forward iterator requirements. + // + reference + operator* () const + { + return static_cast<reference> (**i_); + } + + pointer + operator-> () const + { + return static_cast<pointer> (i_->get ()); + } + + iterator_adapter& + operator++ () + { + ++i_; + return *this; + } + + iterator_adapter + operator++ (int) + { + iterator_adapter r (*this); + ++i_; + return r; + } + + // Bidirectional iterator requirements. + // + iterator_adapter& + operator-- () + { + --i_; + return *this; + } + + iterator_adapter + operator-- (int) + { + iterator_adapter r (*this); + --i_; + return r; + } + + // Random access iterator requirements. + // + reference + operator[] (difference_type n) const + { + return static_cast<reference> (*(i_[n])); + } + + iterator_adapter& + operator+= (difference_type n) + { + i_ += n; + return *this; + } + + iterator_adapter + operator+ (difference_type n) const + { + return iterator_adapter (i_ + n); + } + + iterator_adapter& + operator-= (difference_type n) + { + i_ -= n; + return *this; + } + + iterator_adapter + operator- (difference_type n) const + { + return iterator_adapter (i_ - n); + } + + public: + const I& + base () const + { + return i_; + } + + private: + I i_; + }; + + // Note: We use different types for left- and right-hand-side + // arguments to allow comparison between iterator and const_iterator. + // + + // Forward iterator requirements. + // + template <typename I, typename J, typename T1, typename T2> + inline bool + operator== (const iterator_adapter<I, T1>& i, + const iterator_adapter<J, T2>& j) + { + return i.base () == j.base (); + } + + template <typename I, typename J, typename T1, typename T2> + inline bool + operator!= (const iterator_adapter<I, T1>& i, + const iterator_adapter<J, T2>& j) + { + return i.base () != j.base (); + } + + // Random access iterator requirements + // + template <typename I, typename J, typename T1, typename T2> + inline bool + operator< (const iterator_adapter<I, T1>& i, + const iterator_adapter<J, T2>& j) + { + return i.base () < j.base (); + } + + template <typename I, typename J, typename T1, typename T2> + inline bool + operator> (const iterator_adapter<I, T1>& i, + const iterator_adapter<J, T2>& j) + { + return i.base () > j.base (); + } + + template <typename I, typename J, typename T1, typename T2> + inline bool + operator<= (const iterator_adapter<I, T1>& i, + const iterator_adapter<J, T2>& j) + { + return i.base () <= j.base (); + } + + template <typename I, typename J, typename T1, typename T2> + inline bool + operator>= (const iterator_adapter<I, T1>& i, + const iterator_adapter<J, T2>& j) + { + return i.base () >= j.base (); + } + + template <typename I, typename J, typename T1, typename T2> + inline typename iterator_adapter<I, T1>::difference_type + operator- (const iterator_adapter<I, T1>& i, + const iterator_adapter<J, T2>& j) + { + return i.base () - j.base (); + } + + template <typename I, typename T> + inline iterator_adapter<I, T> + operator+ (typename iterator_adapter<I, T>::difference_type n, + const iterator_adapter<I, T>& i) + { + return iterator_adapter<I, T> (i.base () + n); + } + + // + // + class sequence_common + { + protected: + // This is a dangerously destructive automatic pointer. We are going + // to use it in a controlled environment to save us a lot of coding. + // + struct ptr + { + ~ptr () + { + delete x_; + } + + explicit + ptr (type* x = 0) + : x_ (x) + { + } + + ptr (const ptr& y) + : x_ (y.x_) + { + // Yes, hostile takeover. + // + y.x_ = 0; + } + + ptr& + operator= (const ptr& y) + { + if (this != &y) + { + // Yes, hostile takeover. + // + delete x_; + x_ = y.x_; + y.x_ = 0; + } + + return *this; + } + + public: + type& + operator* () const + { + return *x_; + } + + type* + operator-> () const + { + return x_; + } + + type* + get () const + { + return x_; + } + + type* + release () + { + type* x (x_); + x_ = 0; + return x; + } + + private: + mutable type* x_; + }; + + protected: + typedef std::vector<ptr> base_sequence; + typedef base_sequence::iterator base_iterator; + typedef base_sequence::const_iterator base_const_iterator; + + typedef base_sequence::size_type size_type; + typedef base_sequence::difference_type difference_type; + typedef base_sequence::allocator_type allocator_type; + + protected: + sequence_common (flags f, container* c) + : flags_ (f), container_ (c) + { + } + + sequence_common (size_type n, const type& x, container* c) + : flags_ (0), container_ (c) + { + assign (n, x); + } + + template <typename I> + sequence_common (const I& begin, const I& end, container* c) + : flags_ (0), container_ (c) + { + assign (begin, end); + } + + sequence_common (const sequence_common& v, flags f, container* c) + : flags_ (f), container_ (c) + { + v_.reserve (v.v_.size ()); + + for (base_const_iterator i (v.v_.begin ()), e (v.v_.end ()); + i != e; ++i) + { + ptr p ((**i)._clone (flags_, container_)); + v_.push_back (p); + } + } + + public: + sequence_common& + operator= (const sequence_common& v) + { + if (this == &v) + return *this; + + v_.assign (v.v_.size (), ptr ()); + + base_iterator di (v_.begin ()), de (v_.end ()); + base_const_iterator si (v.v_.begin ()), se (v.v_.end ()); + + for (; si != se && di != de; ++si, ++di) + { + // We have no ptr_ref. + // + ptr p ((**si)._clone (flags_, container_)); + *di = p; + } + + return *this; + } + + public: + size_type + size () const + { + return v_.size (); + } + + size_type + max_size () const + { + return v_.max_size (); + } + + size_type + capacity () const + { + return v_.capacity (); + } + + bool + empty () const + { + return v_.empty (); + } + + void + reserve (size_type n) + { + v_.reserve (n); + } + + void + clear () + { + v_.clear (); + } + + protected: + void + assign (size_type n, const type& x) + { + v_.assign (n, ptr ()); + + for (base_iterator i (v_.begin ()), e (v_.end ()); i != e; ++i) + { + ptr p (x._clone (flags_, container_)); + *i = p; + } + } + + template <typename I> + void + assign (const I& begin, const I& end) + { + // This is not the fastest way to do it. Also I's type may not + // have _clone. + // + v_.clear (); + + for (I i (begin); i != end; ++i) + { + ptr p (i->_clone (flags_, container_)); + v_.push_back (p); + } + } + + void + resize (size_type n, const type& x) + { + size_type old (v_.size ()); + v_.resize (n, ptr ()); + + if (old < n) + { + for (base_iterator i (v_.begin () + old), e (v_.end ()); + i != e; ++i) + { + ptr p (x._clone (flags_, container_)); + *i = p; + } + } + } + + void + insert (base_iterator p, size_type n, const type& x) + { + difference_type d (v_.end () - p); + v_.insert (p, n, ptr ()); + + for (base_iterator i (v_.end () - d); n != 0; --n) + { + ptr r (x._clone (flags_, container_)); + *(--i) = r; + } + } + + template <typename I> + void + insert (base_iterator p, const I& begin, const I& end) + { + // This is not the fastest way to do it. Also I's type may not + // have _clone. + // + if (begin != end) + { + for (I i (end);;) + { + --i; + ptr r (i->_clone (flags_, container_)); + p = v_.insert (p, r); + + if (i == begin) + break; + } + } + } + + protected: + flags flags_; + container* container_; + base_sequence v_; + }; + + // + // + template <typename T> + class sequence<T, false>: public sequence_common + { + protected: + // For IBM XL C++ 8.0. + // + typedef sequence_common::ptr ptr; + + public: + typedef T value_type; + typedef T* pointer; + typedef const T* const_pointer; + typedef T& reference; + typedef const T& const_reference; + + typedef + iterator_adapter<base_sequence::iterator, T> + iterator; + + typedef + iterator_adapter<base_sequence::const_iterator, const T> + const_iterator; + + typedef + iterator_adapter<base_sequence::reverse_iterator, T> + reverse_iterator; + + typedef + iterator_adapter<base_sequence::const_reverse_iterator, const T> + const_reverse_iterator; + + typedef sequence_common::size_type size_type; + typedef sequence_common::difference_type difference_type; + typedef sequence_common::allocator_type allocator_type; + + public: + explicit + sequence (flags f = 0, container* c = 0) + : sequence_common (f, c) + { + } + + // The first version causes trouble on IBM XL C++ 7.0 when + // a type does not have the default c-tor. While the second + // breaks VC++ 8.0 when using dllexport (it appears to + // instantiate everything instead of only what's used). + // +#ifdef _MSC_VER + explicit + sequence (size_type n, const T& x = T (), container* c = 0) + : sequence_common (n, x, c) + { + } +#else + explicit + sequence (size_type n, container* c = 0) + : sequence_common (n, T (), c) + { + } + + sequence (size_type n, const T& x, container* c = 0) + : sequence_common (n, x, c) + { + } +#endif + + template <typename I> + sequence (const I& begin, const I& end, container* c = 0) + : sequence_common (begin, end, c) + { + } + + sequence (const sequence& v, flags f = 0, container* c = 0) + : sequence_common (v, f, c) + { + } + + public: + void + assign (size_type n, const T& x) + { + sequence_common::assign (n, x); + } + + template <typename I> + void + assign (const I& begin, const I& end) + { + sequence_common::assign (begin, end); + } + + public: + // The first version causes trouble on IBM XL C++ 7.0 when + // a type does not have the default c-tor. While the second + // breaks VC++ 8.0 when using dllexport (it appears to + // instantiate everything instead of only what's used). + // +#ifdef _MSC_VER + void + resize (size_type n, const T& x = T ()) + { + sequence_common::resize (n, x); + } +#else + void + resize (size_type n) + { + sequence_common::resize (n, T ()); + } + + void + resize (size_type n, const T& x) + { + sequence_common::resize (n, x); + } +#endif + + public: + const_iterator + begin () const + { + return const_iterator (v_.begin ()); + } + + const_iterator + end () const + { + return const_iterator (v_.end ()); + } + + iterator + begin () + { + return iterator (v_.begin ()); + } + + iterator + end () + { + return iterator (v_.end ()); + } + + // reverse + // + + const_reverse_iterator + rbegin () const + { + return const_reverse_iterator (v_.rbegin ()); + } + + const_reverse_iterator + rend () const + { + return const_reverse_iterator (v_.rend ()); + } + + reverse_iterator + rbegin () + { + return reverse_iterator (v_.rbegin ()); + } + + reverse_iterator + rend () + { + return reverse_iterator (v_.rend ()); + } + + public: + T& + operator[] (size_type n) + { + return static_cast<T&> (*(v_[n])); + } + + const T& + operator[] (size_type n) const + { + return static_cast<const T&> (*(v_[n])); + } + + T& + at (size_type n) + { + return static_cast<T&> (*(v_.at (n))); + } + + const T& + at (size_type n) const + { + return static_cast<const T&> (*(v_.at (n))); + } + + T& + front () + { + return static_cast<T&> (*(v_.front ())); + } + + const T& + front () const + { + return static_cast<const T&> (*(v_.front ())); + } + + T& + back () + { + return static_cast<T&> (*(v_.back ())); + } + + const T& + back () const + { + return static_cast<const T&> (*(v_.back ())); + } + + public: + void + push_back (const T& x) + { + v_.push_back (ptr (x._clone (flags_, container_))); + } + + void + push_back (std::auto_ptr<T> x) + { + if (x->_container () != container_) + x->_container (container_); + + v_.push_back (ptr (x.release ())); + } + + void + pop_back () + { + v_.pop_back (); + } + + std::auto_ptr<T> + detach_back (bool pop = true) + { + ptr& p (v_.back ()); + p->_container (0); + T* x (static_cast<T*> (p.release ())); + + if (pop) + v_.pop_back (); + + return std::auto_ptr<T> (x); + } + + iterator + insert (iterator position, const T& x) + { + return iterator ( + v_.insert ( + position.base (), ptr (x._clone (flags_, container_)))); + } + + iterator + insert (iterator position, std::auto_ptr<T> x) + { + if (x->_container () != container_) + x->_container (container_); + + return iterator (v_.insert (position.base (), ptr (x.release ()))); + } + + void + insert (iterator position, size_type n, const T& x) + { + sequence_common::insert (position.base (), n, x); + } + + template <typename I> + void + insert (iterator position, const I& begin, const I& end) + { + sequence_common::insert (position.base (), begin, end); + } + + iterator + erase (iterator position) + { + return iterator (v_.erase (position.base ())); + } + + iterator + erase (iterator begin, iterator end) + { + return iterator (v_.erase (begin.base (), end.base ())); + } + + iterator + detach (iterator position, std::auto_ptr<T>& r, bool erase = true) + { + ptr& p (*position.base ()); + p->_container (0); + std::auto_ptr<T> tmp (static_cast<T*> (p.release ())); + r = tmp; + + if (erase) + return iterator (v_.erase (position.base ())); + else + return ++position; + } + + // Note that the container object of the two sequences being + // swapped should be the same. + // + void + swap (sequence& x) + { + assert (container_ == x.container_); + v_.swap (x.v_); + } + }; + + + // Specialization for fundamental types. + // + template <typename T> + class sequence<T, true>: public std::vector<T> + { + typedef std::vector<T> base_sequence; + + public: + explicit + sequence (flags = 0, container* = 0) + { + } + + explicit + sequence (typename base_sequence::size_type n, + const T& x = T (), + container* = 0) + : base_sequence (n, x) + { + } + + template <typename I> + sequence (const I& begin, const I& end, container* = 0) + : base_sequence (begin, end) + { + } + + sequence (const sequence& s, flags = 0, container* = 0) + : base_sequence (s) + { + } + }; + + + // Comparison operators. + // + + template <typename T, bool fund> + inline bool + operator== (const sequence<T, fund>& a, const sequence<T, fund>& b) + { + return (a.size () == b.size () + && std::equal (a.begin (), a.end (), b.begin ())); + } + + template <typename T, bool fund> + inline bool + operator!= (const sequence<T, fund>& a, const sequence<T, fund>& b) + { + return !(a == b); + } + + template <typename T, bool fund> + inline bool + operator< (const sequence<T, fund>& a, const sequence<T, fund>& b) + { + return std::lexicographical_compare (a.begin (), a.end (), + b.begin (), b.end ()); + } + + template <typename T, bool fund> + inline bool + operator> (const sequence<T, fund>& a, const sequence<T, fund>& b) + { + return b < a; + } + + template <typename T, bool fund> + inline bool + operator<= (const sequence<T, fund>& a, const sequence<T, fund>& b) + { + return !(a > b); + } + + template <typename T, bool fund> + inline bool + operator>= (const sequence<T, fund>& a, const sequence<T, fund>& b) + { + return !(a < b); + } + + // Note that the container object of the two sequences being + // swapped should be the same. + // + template <typename T, bool fund> + inline void + swap (sequence<T, fund>& x, sequence<T, fund>& y) + { + x.swap (y); + } + } + } +} + +#include <xsd/cxx/tree/containers.txx> + +#endif // XSD_CXX_TREE_CONTAINERS_HXX diff --git a/xsd/libxsd/xsd/cxx/tree/containers.txx b/xsd/libxsd/xsd/cxx/tree/containers.txx new file mode 100644 index 0000000..fdc0bfd --- /dev/null +++ b/xsd/libxsd/xsd/cxx/tree/containers.txx @@ -0,0 +1,284 @@ +// file : xsd/cxx/tree/containers.txx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <ostream> +#include <xsd/cxx/tree/bits/literals.hxx> + +namespace xsd +{ + namespace cxx + { + namespace tree + { + // one + // + template<typename T> + one<T, false>:: + ~one () + { + delete x_; + } + + template<typename T> + one<T, false>:: + one (flags f, container* c) + : x_ (0), flags_ (f), container_ (c) + { + } + + template<typename T> + one<T, false>:: + one (const T& x, flags f, container* c) + : x_ (0), flags_ (f), container_ (c) + { + set (x); + } + + template<typename T> + one<T, false>:: + one (std::auto_ptr<T> x, flags f, container* c) + : x_ (0), flags_ (f), container_ (c) + { + set (x); + } + + template<typename T> + one<T, false>:: + one (const one<T, false>& x, flags f, container* c) + : x_ (0), flags_ (f), container_ (c) + { + if (x.present ()) + set (x.get ()); + } + + template<typename T> + one<T, false>& one<T, false>:: + operator= (const one<T, false>& x) + { + if (this == &x) + return *this; + + if (x.present ()) + set (x.get ()); + else + { + delete x_; + x_ = 0; + } + + return *this; + } + + template<typename T> + void one<T, false>:: + set (const T& x) + { + // We always do a fresh copy because T may not be x's + // dynamic type. + // + T* r (x._clone (flags_, container_)); + + delete x_; + x_ = r; + } + + template<typename T> + void one<T, false>:: + set (std::auto_ptr<T> x) + { + T* r (0); + + if (x.get () != 0) + { + if (x->_container () != container_) + x->_container (container_); + + r = x.release (); + } + + delete x_; + x_ = r; + } + + // optional + // + template <typename T> + optional<T, false>:: + ~optional () + { + delete x_; + } + + template <typename T> + optional<T, false>:: + optional (flags f, container* c) + : x_ (0), flags_ (f), container_ (c) + { + } + + template <typename T> + optional<T, false>:: + optional (const T& x, flags f, container* c) + : x_ (0), flags_ (f), container_ (c) + { + set (x); + } + + template <typename T> + optional<T, false>:: + optional (std::auto_ptr<T> x, flags f, container* c) + : x_ (0), flags_ (f), container_ (c) + { + set (x); + } + + template <typename T> + optional<T, false>:: + optional (const optional<T, false>& x, flags f, container* c) + : x_ (0), flags_ (f), container_ (c) + { + if (x) + set (*x); + } + + template <typename T> + optional<T, false>& optional<T, false>:: + operator= (const T& x) + { + if (x_ == &x) + return *this; + + set (x); + + return *this; + } + + template <typename T> + optional<T, false>& optional<T, false>:: + operator= (const optional<T, false>& x) + { + if (this == &x) + return *this; + + if (x) + set (*x); + else + reset (); + + return *this; + } + + template <typename T> + void optional<T, false>:: + set (const T& x) + { + // We always do a fresh copy because T may not be x's + // dynamic type. + // + T* r (x._clone (flags_, container_)); + + delete x_; + x_ = r; + } + + template <typename T> + void optional<T, false>:: + set (std::auto_ptr<T> x) + { + T* r (0); + + if (x.get () != 0) + { + if (x->_container () != container_) + x->_container (container_); + + r = x.release (); + } + + delete x_; + x_ = r; + } + + template <typename T> + void optional<T, false>:: + reset () + { + delete x_; + x_ = 0; + } + + template <typename T> + void optional<T, false>:: + true_ () + { + } + + + // optional + // + template <typename T> + optional<T, true>:: + optional (const T& y, flags, container*) + : present_ (false) + { + set (y); + } + + template <typename T> + optional<T, true>:: + optional (const optional<T, true>& y, flags, container*) + : present_ (false) + { + if (y) + set (*y); + } + + template <typename T> + optional<T, true>& optional<T, true>:: + operator= (const T& y) + { + if (&x_ == &y) + return *this; + + set (y); + + return *this; + } + + template <typename T> + optional<T, true>& optional<T, true>:: + operator= (const optional<T, true>& y) + { + if (this == &y) + return *this; + + if (y) + set (*y); + else + reset (); + + return *this; + } + + template <typename T> + void optional<T, true>:: + true_ () + { + } + + template <typename C, typename T, bool fund> + std::basic_ostream<C>& + operator<< (std::basic_ostream<C>& os, const optional<T, fund>& x) + { + if (x) + os << *x; + else + os << bits::not_present<C> (); + + return os; + } + } + } +} diff --git a/xsd/libxsd/xsd/cxx/tree/date-time-extraction.txx b/xsd/libxsd/xsd/cxx/tree/date-time-extraction.txx new file mode 100644 index 0000000..317b80f --- /dev/null +++ b/xsd/libxsd/xsd/cxx/tree/date-time-extraction.txx @@ -0,0 +1,157 @@ +// file : xsd/cxx/tree/date-time-extraction.txx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +namespace xsd +{ + namespace cxx + { + namespace tree + { + // time_zone + // + template <typename S> + inline void time_zone:: + zone_extract (istream<S>& s) + { + s >> hours_ >> minutes_; + present_ = true; + } + + // gday + // + template <typename C, typename B> + template <typename S> + gday<C, B>:: + gday (istream<S>& s, flags f, container* c) + : B (s, f, c) + { + bool zp; + s >> day_ >> zp; + + if (zp) + zone_extract (s); + } + + // gmonth + // + template <typename C, typename B> + template <typename S> + gmonth<C, B>:: + gmonth (istream<S>& s, flags f, container* c) + : B (s, f, c) + { + bool zp; + s >> month_ >> zp; + + if (zp) + zone_extract (s); + } + + // gyear + // + template <typename C, typename B> + template <typename S> + gyear<C, B>:: + gyear (istream<S>& s, flags f, container* c) + : B (s, f, c) + { + bool zp; + s >> year_ >> zp; + + if (zp) + zone_extract (s); + } + + // gmonth_day + // + template <typename C, typename B> + template <typename S> + gmonth_day<C, B>:: + gmonth_day (istream<S>& s, flags f, container* c) + : B (s, f, c) + { + bool zp; + s >> month_ >> day_ >> zp; + + if (zp) + zone_extract (s); + } + + // gyear_month + // + template <typename C, typename B> + template <typename S> + gyear_month<C, B>:: + gyear_month (istream<S>& s, flags f, container* c) + : B (s, f, c) + { + bool zp; + s >> year_ >> month_ >> zp; + + if (zp) + zone_extract (s); + } + + // date + // + template <typename C, typename B> + template <typename S> + date<C, B>:: + date (istream<S>& s, flags f, container* c) + : B (s, f, c) + { + bool zp; + s >> year_ >> month_ >> day_ >> zp; + + if (zp) + zone_extract (s); + } + + // time + // + template <typename C, typename B> + template <typename S> + time<C, B>:: + time (istream<S>& s, flags f, container* c) + : B (s, f, c) + { + bool zp; + s >> hours_ >> minutes_ >> seconds_ >> zp; + + if (zp) + zone_extract (s); + } + + // date_time + // + template <typename C, typename B> + template <typename S> + date_time<C, B>:: + date_time (istream<S>& s, flags f, container* c) + : B (s, f, c) + { + bool zp; + s >> year_ >> month_ >> day_ + >> hours_ >> minutes_ >> seconds_ >> zp; + + if (zp) + zone_extract (s); + } + + // duration + // + template <typename C, typename B> + template <typename S> + duration<C, B>:: + duration (istream<S>& s, flags f, container* c) + : B (s, f, c) + { + s >> negative_ + >> years_ >> months_ >> days_ + >> hours_ >> minutes_ >> seconds_; + } + } + } +} diff --git a/xsd/libxsd/xsd/cxx/tree/date-time-insertion.txx b/xsd/libxsd/xsd/cxx/tree/date-time-insertion.txx new file mode 100644 index 0000000..db24ae1 --- /dev/null +++ b/xsd/libxsd/xsd/cxx/tree/date-time-insertion.txx @@ -0,0 +1,188 @@ +// file : xsd/cxx/tree/date-time-insertion.txx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +namespace xsd +{ + namespace cxx + { + namespace tree + { + // time_zone + // + template <typename S> + inline ostream<S>& + operator<< (ostream<S>& s, const time_zone& z) + { + return s << z.zone_hours () << z.zone_minutes (); + } + + // gday + // + template <typename S, typename C, typename B> + ostream<S>& + operator<< (ostream<S>& s, const gday<C, B>& x) + { + bool zp (x.zone_present ()); + + s << x.day () << zp; + + if (zp) + { + const time_zone& z (x); + s << z; + } + + return s; + } + + // gmonth + // + template <typename S, typename C, typename B> + ostream<S>& + operator<< (ostream<S>& s, const gmonth<C, B>& x) + { + bool zp (x.zone_present ()); + + s << x.month () << zp; + + if (zp) + { + const time_zone& z (x); + s << z; + } + + return s; + } + + // gyear + // + template <typename S, typename C, typename B> + ostream<S>& + operator<< (ostream<S>& s, const gyear<C, B>& x) + { + bool zp (x.zone_present ()); + + s << x.year () << zp; + + if (zp) + { + const time_zone& z (x); + s << z; + } + + return s; + } + + // gmonth_day + // + template <typename S, typename C, typename B> + ostream<S>& + operator<< (ostream<S>& s, const gmonth_day<C, B>& x) + { + bool zp (x.zone_present ()); + + s << x.month () << x.day () << zp; + + if (zp) + { + const time_zone& z (x); + s << z; + } + + return s; + } + + // gyear_month + // + template <typename S, typename C, typename B> + ostream<S>& + operator<< (ostream<S>& s, const gyear_month<C, B>& x) + { + bool zp (x.zone_present ()); + + s << x.year () << x.month () << zp; + + if (zp) + { + const time_zone& z (x); + s << z; + } + + return s; + } + + // date + // + template <typename S, typename C, typename B> + ostream<S>& + operator<< (ostream<S>& s, const date<C, B>& x) + { + bool zp (x.zone_present ()); + + s << x.year () << x.month () << x.day () << zp; + + if (zp) + { + const time_zone& z (x); + s << z; + } + + return s; + } + + // time + // + template <typename S, typename C, typename B> + ostream<S>& + operator<< (ostream<S>& s, const time<C, B>& x) + { + bool zp (x.zone_present ()); + + s << x.hours () << x.minutes () << x.seconds () << zp; + + if (zp) + { + const time_zone& z (x); + s << z; + } + + return s; + } + + // date_time + // + template <typename S, typename C, typename B> + ostream<S>& + operator<< (ostream<S>& s, const date_time<C, B>& x) + { + bool zp (x.zone_present ()); + + s << x.year () << x.month () << x.day () + << x.hours () << x.minutes () << x.seconds () << zp; + + if (zp) + { + const time_zone& z (x); + s << z; + } + + return s; + } + + // duration + // + template <typename S, typename C, typename B> + ostream<S>& + operator<< (ostream<S>& s, const duration<C, B>& x) + { + s << x.negative () + << x.years () << x.months () << x.days () + << x.hours () << x.minutes () << x.seconds (); + + return s; + } + } + } +} diff --git a/xsd/libxsd/xsd/cxx/tree/date-time-ostream.txx b/xsd/libxsd/xsd/cxx/tree/date-time-ostream.txx new file mode 100644 index 0000000..90073f4 --- /dev/null +++ b/xsd/libxsd/xsd/cxx/tree/date-time-ostream.txx @@ -0,0 +1,324 @@ +// file : xsd/cxx/tree/date-time-ostream.txx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <ostream> + +namespace xsd +{ + namespace cxx + { + namespace tree + { + // time_zone + // + template <typename C> + std::basic_ostream<C>& + operator<< (std::basic_ostream<C>& os, const time_zone& z) + { + short h = z.zone_hours (); + short m = z.zone_minutes (); + + if (h == 0 && m == 0) + { + os << C ('Z'); + } + else + { + if (h < 0 || m < 0) + { + h = -h; + m = -m; + os << C ('-'); + } + else + os << C ('+'); + + C f (os.fill (C ('0'))); + + os.width (2); + os << h << C (':'); + os.width (2); + os << m; + + os.fill (f); + } + + return os; + } + + // gday + // + template <typename C, typename B> + std::basic_ostream<C>& + operator<< (std::basic_ostream<C>& os, const gday<C, B>& x) + { + C f (os.fill (C ('0'))); + os.width (2); + os << x.day (); + os.fill (f); + + if (x.zone_present ()) + { + const time_zone& z (x); + os << z; + } + + return os; + } + + // gmonth + // + template <typename C, typename B> + std::basic_ostream<C>& + operator<< (std::basic_ostream<C>& os, const gmonth<C, B>& x) + { + C f (os.fill (C ('0'))); + os.width (2); + os << x.month (); + os.fill (f); + + if (x.zone_present ()) + { + const time_zone& z (x); + os << z; + } + + return os; + } + + // gyear + // + template <typename C, typename B> + std::basic_ostream<C>& + operator<< (std::basic_ostream<C>& os, const gyear<C, B>& x) + { + C f (os.fill (C ('0'))); + os.width (4); + os << x.year (); + os.fill (f); + + if (x.zone_present ()) + { + const time_zone& z (x); + os << z; + } + + return os; + } + + // gmonth_day + // + template <typename C, typename B> + std::basic_ostream<C>& + operator<< (std::basic_ostream<C>& os, const gmonth_day<C, B>& x) + { + C f (os.fill (C ('0'))); + + os.width (2); + os << x.month () << C ('-'); + + os.width (2); + os << x.day (); + + os.fill (f); + + if (x.zone_present ()) + { + const time_zone& z (x); + os << z; + } + + return os; + } + + + // gyear_month + // + template <typename C, typename B> + std::basic_ostream<C>& + operator<< (std::basic_ostream<C>& os, const gyear_month<C, B>& x) + { + C f (os.fill (C ('0'))); + + os.width (4); + os << x.year () << C ('-'); + + os.width (2); + os << x.month (); + + os.fill (f); + + if (x.zone_present ()) + { + const time_zone& z (x); + os << z; + } + + return os; + } + + // date + // + template <typename C, typename B> + std::basic_ostream<C>& + operator<< (std::basic_ostream<C>& os, const date<C, B>& x) + { + C f (os.fill (C ('0'))); + + os.width (4); + os << x.year () << C ('-'); + + os.width (2); + os << x.month () << C ('-'); + + os.width (2); + os << x.day (); + + os.fill (f); + + if (x.zone_present ()) + { + const time_zone& z (x); + os << z; + } + + return os; + } + + // time + // + template <typename C, typename B> + std::basic_ostream<C>& + operator<< (std::basic_ostream<C>& os, const time<C, B>& x) + { + C f (os.fill (C ('0'))); + + os.width (2); + os << x.hours () << C (':'); + + os.width (2); + os << x.minutes () << C (':'); + + os.width (9); + std::ios_base::fmtflags ff ( + os.setf (std::ios::fixed, std::ios::floatfield)); + os << x.seconds (); + os.setf (ff, std::ios::floatfield); + + os.fill (f); + + if (x.zone_present ()) + { + const time_zone& z (x); + os << z; + } + + return os; + } + + // date_time + // + template <typename C, typename B> + std::basic_ostream<C>& + operator<< (std::basic_ostream<C>& os, const date_time<C, B>& x) + { + C f (os.fill (C ('0'))); + + os.width (4); + os << x.year () << C ('-'); + + os.width (2); + os << x.month () << C ('-'); + + os.width (2); + os << x.day () << C ('T'); + + os.width (2); + os << x.hours () << C (':'); + + os.width (2); + os << x.minutes () << C (':'); + + os.width (9); + std::ios_base::fmtflags ff ( + os.setf (std::ios::fixed, std::ios::floatfield)); + os << x.seconds (); + os.setf (ff, std::ios::floatfield); + + os.fill (f); + + if (x.zone_present ()) + { + const time_zone& z (x); + os << z; + } + + return os; + } + + // duration + // + template <typename C, typename B> + std::basic_ostream<C>& + operator<< (std::basic_ostream<C>& os, const duration<C, B>& x) + { + if (x.negative ()) + os << C ('-'); + + os << C ('P'); + + // In case it is 0-duration, use the years field to handle + // this case. + // + if (x.years () != 0 || + (x.months () == 0 && + x.days () == 0 && + x.hours () == 0 && + x.minutes () == 0 && + x.seconds () == 0.0)) + { + os << x.years () << C ('Y'); + } + + if (x.months () != 0) + { + os << x.months () << C ('M'); + } + + if (x.days () != 0) + { + os << x.days () << C ('D'); + } + + // Figure out if we need the 'T' delimiter. + // + if (x.hours () != 0 || + x.minutes () != 0 || + x.seconds () != 0.0) + os << C ('T'); + + if (x.hours () != 0) + { + os << x.hours () << C ('H'); + } + + if (x.minutes () != 0) + { + os << x.minutes () << C ('M'); + } + + if (x.seconds () > 0.0) + { + std::ios_base::fmtflags ff ( + os.setf (std::ios::fixed, std::ios::floatfield)); + os << x.seconds () << C ('S'); + os.setf (ff, std::ios::floatfield); + } + + return os; + } + } + } +} diff --git a/xsd/libxsd/xsd/cxx/tree/date-time.hxx b/xsd/libxsd/xsd/cxx/tree/date-time.hxx new file mode 100644 index 0000000..abde516 --- /dev/null +++ b/xsd/libxsd/xsd/cxx/tree/date-time.hxx @@ -0,0 +1,1951 @@ +// file : xsd/cxx/tree/date-time.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +/** + * @file + * + * @brief Contains C++ class definitions for the XML Schema date/time types. + * + * This is an internal header and is included by the generated code. You + * normally should not include it directly. + * + */ + +#ifndef XSD_CXX_TREE_DATE_TIME_HXX +#define XSD_CXX_TREE_DATE_TIME_HXX + +#include <string> +#include <cstddef> // std::size_t + +#include <xercesc/dom/DOMAttr.hpp> +#include <xercesc/dom/DOMElement.hpp> + +#include <xsd/cxx/tree/elements.hxx> +#include <xsd/cxx/tree/istream-fwd.hxx> + +namespace xsd +{ + namespace cxx + { + /** + * @brief C++/Tree mapping runtime namespace. + * + * This is an internal namespace and normally should not be referenced + * directly. Instead you should use the aliases for types in this + * namespaces that are created in the generated code. + * + */ + namespace tree + { + /** + * @brief Time zone representation + * + * The %time_zone class represents an optional %time zone and + * is used as a base class for date/time types. + * + * The %time zone can negative in which case both the hours and + * minutes components should be negative. + * + * @nosubgrouping + */ + class time_zone + { + public: + /** + * @name Constructors + */ + //@{ + + /** + * @brief Default constructor. + * + * This constructor initializes the instance to the 'not specified' + * state. + */ + time_zone (); + + /** + * @brief Initialize an instance with the hours and minutes + * components. + * + * @param hours The %time zone hours component. + * @param minutes The %time zone minutes component. + */ + time_zone (short hours, short minutes); + + //@} + + /** + * @brief Determine if %time zone is specified. + * + * @return True if %time zone is specified, false otherwise. + */ + bool + zone_present () const; + + /** + * @brief Reset the %time zone to the 'not specified' state. + * + */ + void + zone_reset (); + + /** + * @brief Get the hours component of the %time zone. + * + * @return The hours component of the %time zone. + */ + short + zone_hours () const; + + /** + * @brief Set the hours component of the %time zone. + * + * @param h The new hours component. + */ + void + zone_hours (short h); + + + /** + * @brief Get the minutes component of the %time zone. + * + * @return The minutes component of the %time zone. + */ + short + zone_minutes () const; + + /** + * @brief Set the minutes component of the %time zone. + * + * @param m The new minutes component. + */ + void + zone_minutes (short m); + + protected: + //@cond + + template <typename C> + void + zone_parse (const C*, std::size_t); + + template <typename S> + void + zone_extract (istream<S>&); + + //@endcond + + private: + bool present_; + short hours_; + short minutes_; + }; + + /** + * @brief %time_zone comparison operator. + * + * @return True if both %time zones are either not specified or + * have equal hours and minutes components, false otherwise. + */ + bool + operator== (const time_zone&, const time_zone&); + + /** + * @brief %time_zone comparison operator. + * + * @return False if both %time zones are either not specified or + * have equal hours and minutes components, true otherwise. + */ + bool + operator!= (const time_zone&, const time_zone&); + + + /** + * @brief Class corresponding to the XML Schema gDay built-in type. + * + * The %gday class represents a day of the month with an optional + * %time zone. + * + * @nosubgrouping + */ + template <typename C, typename B> + class gday: public B, public time_zone + { + public: + /** + * @name Constructors + */ + //@{ + + /** + * @brief Initialize an instance with the day component. + * + * When this constructor is used, the %time zone is left + * unspecified. + * + * @param day The day component. + */ + explicit + gday (unsigned short day); + + /** + * @brief Initialize an instance with the day component and %time + * zone. + * + * @param day The day component. + * @param zone_hours The %time zone hours component. + * @param zone_minutes The %time zone minutes component. + */ + gday (unsigned short day, short zone_hours, short zone_minutes); + + /** + * @brief Copy constructor. + * + * @param x An instance to make a copy of. + * @param f Flags to create the copy with. + * @param c A pointer to the object that will contain the copy. + * + * For polymorphic object models use the _clone function instead. + */ + gday (const gday& x, flags f = 0, container* c = 0); + + /** + * @brief Copy the instance polymorphically. + * + * @param f Flags to create the copy with. + * @param c A pointer to the object that will contain the copy. + * @return A pointer to the dynamically allocated copy. + * + * This function ensures that the dynamic type of the instance + * is used for copying and should be used for polymorphic object + * models instead of the copy constructor. + */ + virtual gday* + _clone (flags f = 0, container* c = 0) const; + + /** + * @brief Create an instance from a data representation + * stream. + * + * @param s A stream to extract the data from. + * @param f Flags to create the new instance with. + * @param c A pointer to the object that will contain the new + * instance. + */ + template <typename S> + gday (istream<S>& s, flags f = 0, container* c = 0); + + /** + * @brief Create an instance from a DOM element. + * + * @param e A DOM element to extract the data from. + * @param f Flags to create the new instance with. + * @param c A pointer to the object that will contain the new + * instance. + */ + gday (const xercesc::DOMElement& e, flags f = 0, container* c = 0); + + /** + * @brief Create an instance from a DOM Attribute. + * + * @param a A DOM attribute to extract the data from. + * @param f Flags to create the new instance with. + * @param c A pointer to the object that will contain the new + * instance. + */ + gday (const xercesc::DOMAttr& a, flags f = 0, container* c = 0); + + /** + * @brief Create an instance from a %string fragment. + * + * @param s A %string fragment to extract the data from. + * @param e A pointer to DOM element containing the %string fragment. + * @param f Flags to create the new instance with. + * @param c A pointer to the object that will contain the new + * instance. + */ + gday (const std::basic_string<C>& s, + const xercesc::DOMElement* e, + flags f = 0, + container* c = 0); + //@} + + public: + /** + * @brief Get the day component. + * + * @return The day component. + */ + unsigned short + day () const; + + /** + * @brief Set the day component. + * + * @param d The new day component. + */ + void + day (unsigned short d); + + protected: + //@cond + + gday (); + + void + parse (const std::basic_string<C>&); + + //@endcond + + private: + unsigned short day_; + }; + + /** + * @brief %gday comparison operator. + * + * @return True if the day components and %time zones are equal, false + * otherwise. + */ + template <typename C, typename B> + bool + operator== (const gday<C, B>&, const gday<C, B>&); + + /** + * @brief %gday comparison operator. + * + * @return False if the day components and %time zones are equal, true + * otherwise. + */ + template <typename C, typename B> + bool + operator!= (const gday<C, B>&, const gday<C, B>&); + + /** + * @brief Class corresponding to the XML Schema gMonth built-in type. + * + * The %gmonth class represents a month of the year with an optional + * %time zone. + * + * @nosubgrouping + */ + template <typename C, typename B> + class gmonth: public B, public time_zone + { + public: + /** + * @name Constructors + */ + //@{ + + /** + * @brief Initialize an instance with the month component. + * + * When this constructor is used, the %time zone is left + * unspecified. + * + * @param month The month component. + */ + explicit + gmonth (unsigned short month); + + /** + * @brief Initialize an instance with the month component and %time + * zone. + * + * @param month The month component. + * @param zone_hours The %time zone hours component. + * @param zone_minutes The %time zone minutes component. + */ + gmonth (unsigned short month, short zone_hours, short zone_minutes); + + /** + * @brief Copy constructor. + * + * @param x An instance to make a copy of. + * @param f Flags to create the copy with. + * @param c A pointer to the object that will contain the copy. + * + * For polymorphic object models use the _clone function instead. + */ + gmonth (const gmonth& x, flags f = 0, container* c = 0); + + /** + * @brief Copy the instance polymorphically. + * + * @param f Flags to create the copy with. + * @param c A pointer to the object that will contain the copy. + * @return A pointer to the dynamically allocated copy. + * + * This function ensures that the dynamic type of the instance + * is used for copying and should be used for polymorphic object + * models instead of the copy constructor. + */ + virtual gmonth* + _clone (flags f = 0, container* c = 0) const; + + /** + * @brief Create an instance from a data representation + * stream. + * + * @param s A stream to extract the data from. + * @param f Flags to create the new instance with. + * @param c A pointer to the object that will contain the new + * instance. + */ + template <typename S> + gmonth (istream<S>& s, flags f = 0, container* c = 0); + + /** + * @brief Create an instance from a DOM element. + * + * @param e A DOM element to extract the data from. + * @param f Flags to create the new instance with. + * @param c A pointer to the object that will contain the new + * instance. + */ + gmonth (const xercesc::DOMElement& e, flags f = 0, container* c = 0); + + /** + * @brief Create an instance from a DOM Attribute. + * + * @param a A DOM attribute to extract the data from. + * @param f Flags to create the new instance with. + * @param c A pointer to the object that will contain the new + * instance. + */ + gmonth (const xercesc::DOMAttr& a, flags f = 0, container* c = 0); + + /** + * @brief Create an instance from a %string fragment. + * + * @param s A %string fragment to extract the data from. + * @param e A pointer to DOM element containing the %string fragment. + * @param f Flags to create the new instance with. + * @param c A pointer to the object that will contain the new + * instance. + */ + gmonth (const std::basic_string<C>& s, + const xercesc::DOMElement* e, + flags f = 0, + container* c = 0); + //@} + + public: + /** + * @brief Get the month component. + * + * @return The month component. + */ + unsigned short + month () const; + + /** + * @brief Set the month component. + * + * @param m The new month component. + */ + void + month (unsigned short m); + + protected: + //@cond + + gmonth (); + + void + parse (const std::basic_string<C>&); + + //@endcond + + private: + unsigned short month_; + }; + + /** + * @brief %gmonth comparison operator. + * + * @return True if the month components and %time zones are equal, false + * otherwise. + */ + template <typename C, typename B> + bool + operator== (const gmonth<C, B>&, const gmonth<C, B>&); + + /** + * @brief %gmonth comparison operator. + * + * @return False if the month components and %time zones are equal, true + * otherwise. + */ + template <typename C, typename B> + bool + operator!= (const gmonth<C, B>&, const gmonth<C, B>&); + + + /** + * @brief Class corresponding to the XML Schema gYear built-in type. + * + * The %gyear class represents a year with an optional %time zone. + * + * @nosubgrouping + */ + template <typename C, typename B> + class gyear: public B, public time_zone + { + public: + /** + * @name Constructors + */ + //@{ + + /** + * @brief Initialize an instance with the year component. + * + * When this constructor is used, the %time zone is left + * unspecified. + * + * @param year The year component. + */ + explicit + gyear (int year); + + /** + * @brief Initialize an instance with the year component and %time + * zone. + * + * @param year The year component. + * @param zone_hours The %time zone hours component. + * @param zone_minutes The %time zone minutes component. + */ + gyear (int year, short zone_hours, short zone_minutes); + + /** + * @brief Copy constructor. + * + * @param x An instance to make a copy of. + * @param f Flags to create the copy with. + * @param c A pointer to the object that will contain the copy. + * + * For polymorphic object models use the _clone function instead. + */ + gyear (const gyear& x, flags f = 0, container* c = 0); + + /** + * @brief Copy the instance polymorphically. + * + * @param f Flags to create the copy with. + * @param c A pointer to the object that will contain the copy. + * @return A pointer to the dynamically allocated copy. + * + * This function ensures that the dynamic type of the instance + * is used for copying and should be used for polymorphic object + * models instead of the copy constructor. + */ + virtual gyear* + _clone (flags f = 0, container* c = 0) const; + + /** + * @brief Create an instance from a data representation + * stream. + * + * @param s A stream to extract the data from. + * @param f Flags to create the new instance with. + * @param c A pointer to the object that will contain the new + * instance. + */ + template <typename S> + gyear (istream<S>& s, flags f = 0, container* c = 0); + + /** + * @brief Create an instance from a DOM element. + * + * @param e A DOM element to extract the data from. + * @param f Flags to create the new instance with. + * @param c A pointer to the object that will contain the new + * instance. + */ + gyear (const xercesc::DOMElement& e, flags f = 0, container* c = 0); + + /** + * @brief Create an instance from a DOM Attribute. + * + * @param a A DOM attribute to extract the data from. + * @param f Flags to create the new instance with. + * @param c A pointer to the object that will contain the new + * instance. + */ + gyear (const xercesc::DOMAttr& a, flags f = 0, container* c = 0); + + /** + * @brief Create an instance from a %string fragment. + * + * @param s A %string fragment to extract the data from. + * @param e A pointer to DOM element containing the %string fragment. + * @param f Flags to create the new instance with. + * @param c A pointer to the object that will contain the new + * instance. + */ + gyear (const std::basic_string<C>& s, + const xercesc::DOMElement* e, + flags f = 0, + container* c = 0); + //@} + + public: + /** + * @brief Get the year component. + * + * @return The year component. + */ + int + year () const; + + /** + * @brief Set the year component. + * + * @param y The new year component. + */ + void + year (int y); + + protected: + //@cond + + gyear (); + + void + parse (const std::basic_string<C>&); + + //@endcond + + private: + int year_; + }; + + /** + * @brief %gyear comparison operator. + * + * @return True if the year components and %time zones are equal, false + * otherwise. + */ + template <typename C, typename B> + bool + operator== (const gyear<C, B>&, const gyear<C, B>&); + + /** + * @brief %gyear comparison operator. + * + * @return False if the year components and %time zones are equal, true + * otherwise. + */ + template <typename C, typename B> + bool + operator!= (const gyear<C, B>&, const gyear<C, B>&); + + + /** + * @brief Class corresponding to the XML Schema gMonthDay built-in type. + * + * The %gmonth_day class represents day and month of the year with an + * optional %time zone. + * + * @nosubgrouping + */ + template <typename C, typename B> + class gmonth_day: public B, public time_zone + { + public: + /** + * @name Constructors + */ + //@{ + + /** + * @brief Initialize an instance with the month and day components. + * + * When this constructor is used, the %time zone is left + * unspecified. + * + * @param month The month component. + * @param day The day component. + */ + gmonth_day (unsigned short month, unsigned short day); + + /** + * @brief Initialize an instance with the month and day components + * as well as %time zone. + * + * @param month The month component. + * @param day The day component. + * @param zone_hours The %time zone hours component. + * @param zone_minutes The %time zone minutes component. + */ + gmonth_day (unsigned short month, unsigned short day, + short zone_hours, short zone_minutes); + + /** + * @brief Copy constructor. + * + * @param x An instance to make a copy of. + * @param f Flags to create the copy with. + * @param c A pointer to the object that will contain the copy. + * + * For polymorphic object models use the _clone function instead. + */ + gmonth_day (const gmonth_day& x, flags f = 0, container* c = 0); + + /** + * @brief Copy the instance polymorphically. + * + * @param f Flags to create the copy with. + * @param c A pointer to the object that will contain the copy. + * @return A pointer to the dynamically allocated copy. + * + * This function ensures that the dynamic type of the instance + * is used for copying and should be used for polymorphic object + * models instead of the copy constructor. + */ + virtual gmonth_day* + _clone (flags f = 0, container* c = 0) const; + + /** + * @brief Create an instance from a data representation + * stream. + * + * @param s A stream to extract the data from. + * @param f Flags to create the new instance with. + * @param c A pointer to the object that will contain the new + * instance. + */ + template <typename S> + gmonth_day (istream<S>& s, flags f = 0, container* c = 0); + + /** + * @brief Create an instance from a DOM element. + * + * @param e A DOM element to extract the data from. + * @param f Flags to create the new instance with. + * @param c A pointer to the object that will contain the new + * instance. + */ + gmonth_day (const xercesc::DOMElement& e, + flags f = 0, + container* c = 0); + + /** + * @brief Create an instance from a DOM Attribute. + * + * @param a A DOM attribute to extract the data from. + * @param f Flags to create the new instance with. + * @param c A pointer to the object that will contain the new + * instance. + */ + gmonth_day (const xercesc::DOMAttr& a, flags f = 0, container* c = 0); + + /** + * @brief Create an instance from a %string fragment. + * + * @param s A %string fragment to extract the data from. + * @param e A pointer to DOM element containing the %string fragment. + * @param f Flags to create the new instance with. + * @param c A pointer to the object that will contain the new + * instance. + */ + gmonth_day (const std::basic_string<C>& s, + const xercesc::DOMElement* e, + flags f = 0, + container* c = 0); + //@} + + public: + /** + * @brief Get the month component. + * + * @return The month component. + */ + unsigned short + month () const; + + /** + * @brief Set the month component. + * + * @param m The new month component. + */ + void + month (unsigned short m); + + /** + * @brief Get the day component. + * + * @return The day component. + */ + unsigned short + day () const; + + /** + * @brief Set the day component. + * + * @param d The new day component. + */ + void + day (unsigned short d); + + protected: + //@cond + + gmonth_day (); + + void + parse (const std::basic_string<C>&); + + //@endcond + + private: + unsigned short month_; + unsigned short day_; + }; + + /** + * @brief %gmonth_day comparison operator. + * + * @return True if the month and day components as well as %time zones + * are equal, false otherwise. + */ + template <typename C, typename B> + bool + operator== (const gmonth_day<C, B>&, const gmonth_day<C, B>&); + + /** + * @brief %gmonth_day comparison operator. + * + * @return False if the month and day components as well as %time zones + * are equal, true otherwise. + */ + template <typename C, typename B> + bool + operator!= (const gmonth_day<C, B>&, const gmonth_day<C, B>&); + + + /** + * @brief Class corresponding to the XML Schema gYearMonth built-in + * type. + * + * The %gyear_month class represents year and month with an optional + * %time zone. + * + * @nosubgrouping + */ + template <typename C, typename B> + class gyear_month: public B, public time_zone + { + public: + /** + * @name Constructors + */ + //@{ + + /** + * @brief Initialize an instance with the year and month components. + * + * When this constructor is used, the %time zone is left + * unspecified. + * + * @param year The year component. + * @param month The month component. + */ + gyear_month (int year, unsigned short month); + + /** + * @brief Initialize an instance with the year and month components + * as well as %time zone. + * + * @param year The year component. + * @param month The month component. + * @param zone_hours The %time zone hours component. + * @param zone_minutes The %time zone minutes component. + */ + gyear_month (int year, unsigned short month, + short zone_hours, short zone_minutes); + + /** + * @brief Copy constructor. + * + * @param x An instance to make a copy of. + * @param f Flags to create the copy with. + * @param c A pointer to the object that will contain the copy. + * + * For polymorphic object models use the _clone function instead. + */ + gyear_month (const gyear_month& x, flags f = 0, container* c = 0); + + /** + * @brief Copy the instance polymorphically. + * + * @param f Flags to create the copy with. + * @param c A pointer to the object that will contain the copy. + * @return A pointer to the dynamically allocated copy. + * + * This function ensures that the dynamic type of the instance + * is used for copying and should be used for polymorphic object + * models instead of the copy constructor. + */ + virtual gyear_month* + _clone (flags f = 0, container* c = 0) const; + + /** + * @brief Create an instance from a data representation + * stream. + * + * @param s A stream to extract the data from. + * @param f Flags to create the new instance with. + * @param c A pointer to the object that will contain the new + * instance. + */ + template <typename S> + gyear_month (istream<S>& s, flags f = 0, container* c = 0); + + /** + * @brief Create an instance from a DOM element. + * + * @param e A DOM element to extract the data from. + * @param f Flags to create the new instance with. + * @param c A pointer to the object that will contain the new + * instance. + */ + gyear_month (const xercesc::DOMElement& e, + flags f = 0, + container* c = 0); + + /** + * @brief Create an instance from a DOM Attribute. + * + * @param a A DOM attribute to extract the data from. + * @param f Flags to create the new instance with. + * @param c A pointer to the object that will contain the new + * instance. + */ + gyear_month (const xercesc::DOMAttr& a, + flags f = 0, + container* c = 0); + + /** + * @brief Create an instance from a %string fragment. + * + * @param s A %string fragment to extract the data from. + * @param e A pointer to DOM element containing the %string fragment. + * @param f Flags to create the new instance with. + * @param c A pointer to the object that will contain the new + * instance. + */ + gyear_month (const std::basic_string<C>& s, + const xercesc::DOMElement* e, + flags f = 0, + container* c = 0); + //@} + + public: + /** + * @brief Get the year component. + * + * @return The year component. + */ + int + year () const; + + /** + * @brief Set the year component. + * + * @param y The new year component. + */ + void + year (int y); + + /** + * @brief Get the month component. + * + * @return The month component. + */ + unsigned short + month () const; + + /** + * @brief Set the month component. + * + * @param m The new month component. + */ + void + month (unsigned short m); + + protected: + //@cond + + gyear_month (); + + void + parse (const std::basic_string<C>&); + + //@endcond + + private: + int year_; + unsigned short month_; + }; + + /** + * @brief %gyear_month comparison operator. + * + * @return True if the year and month components as well as %time zones + * are equal, false otherwise. + */ + template <typename C, typename B> + bool + operator== (const gyear_month<C, B>&, const gyear_month<C, B>&); + + /** + * @brief %gyear_month comparison operator. + * + * @return False if the year and month components as well as %time zones + * are equal, true otherwise. + */ + template <typename C, typename B> + bool + operator!= (const gyear_month<C, B>&, const gyear_month<C, B>&); + + + /** + * @brief Class corresponding to the XML Schema %date built-in type. + * + * The %date class represents day, month, and year with an optional + * %time zone. + * + * @nosubgrouping + */ + template <typename C, typename B> + class date: public B, public time_zone + { + public: + /** + * @name Constructors + */ + //@{ + + /** + * @brief Initialize an instance with the year, month, and day + * components. + * + * When this constructor is used, the %time zone is left + * unspecified. + * + * @param year The year component. + * @param month The month component. + * @param day The day component. + */ + date (int year, unsigned short month, unsigned short day); + + /** + * @brief Initialize an instance with the year, month, and day + * components as well as %time zone. + * + * @param year The year component. + * @param month The month component. + * @param day The day component. + * @param zone_hours The %time zone hours component. + * @param zone_minutes The %time zone minutes component. + */ + date (int year, unsigned short month, unsigned short day, + short zone_hours, short zone_minutes); + + /** + * @brief Copy constructor. + * + * @param x An instance to make a copy of. + * @param f Flags to create the copy with. + * @param c A pointer to the object that will contain the copy. + * + * For polymorphic object models use the _clone function instead. + */ + date (const date& x, flags f = 0, container* c = 0); + + /** + * @brief Copy the instance polymorphically. + * + * @param f Flags to create the copy with. + * @param c A pointer to the object that will contain the copy. + * @return A pointer to the dynamically allocated copy. + * + * This function ensures that the dynamic type of the instance + * is used for copying and should be used for polymorphic object + * models instead of the copy constructor. + */ + virtual date* + _clone (flags f = 0, container* c = 0) const; + + /** + * @brief Create an instance from a data representation + * stream. + * + * @param s A stream to extract the data from. + * @param f Flags to create the new instance with. + * @param c A pointer to the object that will contain the new + * instance. + */ + template <typename S> + date (istream<S>& s, flags f = 0, container* c = 0); + + /** + * @brief Create an instance from a DOM element. + * + * @param e A DOM element to extract the data from. + * @param f Flags to create the new instance with. + * @param c A pointer to the object that will contain the new + * instance. + */ + date (const xercesc::DOMElement& e, flags f = 0, container* c = 0); + + /** + * @brief Create an instance from a DOM Attribute. + * + * @param a A DOM attribute to extract the data from. + * @param f Flags to create the new instance with. + * @param c A pointer to the object that will contain the new + * instance. + */ + date (const xercesc::DOMAttr& a, flags f = 0, container* c = 0); + + /** + * @brief Create an instance from a %string fragment. + * + * @param s A %string fragment to extract the data from. + * @param e A pointer to DOM element containing the %string fragment. + * @param f Flags to create the new instance with. + * @param c A pointer to the object that will contain the new + * instance. + */ + date (const std::basic_string<C>& s, + const xercesc::DOMElement* e, + flags f = 0, + container* c = 0); + //@} + + public: + /** + * @brief Get the year component. + * + * @return The year component. + */ + int + year () const; + + /** + * @brief Set the year component. + * + * @param y The new year component. + */ + void + year (int y); + + /** + * @brief Get the month component. + * + * @return The month component. + */ + unsigned short + month () const; + + /** + * @brief Set the month component. + * + * @param m The new month component. + */ + void + month (unsigned short m); + + /** + * @brief Get the day component. + * + * @return The day component. + */ + unsigned short + day () const; + + /** + * @brief Set the day component. + * + * @param d The new day component. + */ + void + day (unsigned short d); + + protected: + //@cond + + date (); + + void + parse (const std::basic_string<C>&); + + //@endcond + + private: + int year_; + unsigned short month_; + unsigned short day_; + }; + + /** + * @brief %date comparison operator. + * + * @return True if the year, month, and day components as well as %time + * zones are equal, false otherwise. + */ + template <typename C, typename B> + bool + operator== (const date<C, B>&, const date<C, B>&); + + /** + * @brief %date comparison operator. + * + * @return False if the year, month, and day components as well as %time + * zones are equal, true otherwise. + */ + template <typename C, typename B> + bool + operator!= (const date<C, B>&, const date<C, B>&); + + + /** + * @brief Class corresponding to the XML Schema %time built-in type. + * + * The %time class represents hours, minutes, and seconds with an + * optional %time zone. + * + * @nosubgrouping + */ + template <typename C, typename B> + class time: public B, public time_zone + { + public: + /** + * @name Constructors + */ + //@{ + + /** + * @brief Initialize an instance with the hours, minutes, and + * seconds components. + * + * When this constructor is used, the %time zone is left + * unspecified. + * + * @param hours The hours component. + * @param minutes The minutes component. + * @param seconds The seconds component. + */ + time (unsigned short hours, unsigned short minutes, double seconds); + + /** + * @brief Initialize an instance with the hours, minutes, and + * seconds components as well as %time zone. + * + * @param hours The hours component. + * @param minutes The minutes component. + * @param seconds The seconds component. + * @param zone_hours The %time zone hours component. + * @param zone_minutes The %time zone minutes component. + */ + time (unsigned short hours, unsigned short minutes, double seconds, + short zone_hours, short zone_minutes); + + /** + * @brief Copy constructor. + * + * @param x An instance to make a copy of. + * @param f Flags to create the copy with. + * @param c A pointer to the object that will contain the copy. + * + * For polymorphic object models use the _clone function instead. + */ + time (const time& x, flags f = 0, container* c = 0); + + /** + * @brief Copy the instance polymorphically. + * + * @param f Flags to create the copy with. + * @param c A pointer to the object that will contain the copy. + * @return A pointer to the dynamically allocated copy. + * + * This function ensures that the dynamic type of the instance + * is used for copying and should be used for polymorphic object + * models instead of the copy constructor. + */ + virtual time* + _clone (flags f = 0, container* c = 0) const; + + /** + * @brief Create an instance from a data representation + * stream. + * + * @param s A stream to extract the data from. + * @param f Flags to create the new instance with. + * @param c A pointer to the object that will contain the new + * instance. + */ + template <typename S> + time (istream<S>& s, flags f = 0, container* c = 0); + + /** + * @brief Create an instance from a DOM element. + * + * @param e A DOM element to extract the data from. + * @param f Flags to create the new instance with. + * @param c A pointer to the object that will contain the new + * instance. + */ + time (const xercesc::DOMElement& e, flags f = 0, container* c = 0); + + /** + * @brief Create an instance from a DOM Attribute. + * + * @param a A DOM attribute to extract the data from. + * @param f Flags to create the new instance with. + * @param c A pointer to the object that will contain the new + * instance. + */ + time (const xercesc::DOMAttr& a, flags f = 0, container* c = 0); + + /** + * @brief Create an instance from a %string fragment. + * + * @param s A %string fragment to extract the data from. + * @param e A pointer to DOM element containing the %string fragment. + * @param f Flags to create the new instance with. + * @param c A pointer to the object that will contain the new + * instance. + */ + time (const std::basic_string<C>& s, + const xercesc::DOMElement* e, + flags f = 0, + container* c = 0); + //@} + + public: + /** + * @brief Get the hours component. + * + * @return The hours component. + */ + unsigned short + hours () const; + + /** + * @brief Set the hours component. + * + * @param h The new hours component. + */ + void + hours (unsigned short h); + + /** + * @brief Get the minutes component. + * + * @return The minutes component. + */ + unsigned short + minutes () const; + + /** + * @brief Set the minutes component. + * + * @param m The new minutes component. + */ + void + minutes (unsigned short m); + + /** + * @brief Get the seconds component. + * + * @return The seconds component. + */ + double + seconds () const; + + /** + * @brief Set the seconds component. + * + * @param s The new seconds component. + */ + void + seconds (double s); + + protected: + //@cond + + time (); + + void + parse (const std::basic_string<C>&); + + //@endcond + + private: + unsigned short hours_; + unsigned short minutes_; + double seconds_; + }; + + /** + * @brief %time comparison operator. + * + * @return True if the hours, seconds, and minutes components as well + * as %time zones are equal, false otherwise. + */ + template <typename C, typename B> + bool + operator== (const time<C, B>&, const time<C, B>&); + + /** + * @brief %time comparison operator. + * + * @return False if the hours, seconds, and minutes components as well + * as %time zones are equal, true otherwise. + */ + template <typename C, typename B> + bool + operator!= (const time<C, B>&, const time<C, B>&); + + + /** + * @brief Class corresponding to the XML Schema dateTime built-in type. + * + * The %date_time class represents year, month, day, hours, minutes, + * and seconds with an optional %time zone. + * + * @nosubgrouping + */ + template <typename C, typename B> + class date_time: public B, public time_zone + { + public: + /** + * @name Constructors + */ + //@{ + + /** + * @brief Initialize an instance with the year, month, day, hours, + * minutes, and seconds components. + * + * When this constructor is used, the %time zone is left + * unspecified. + * + * @param year The year component. + * @param month The month component. + * @param day The day component. + * @param hours The hours component. + * @param minutes The minutes component. + * @param seconds The seconds component. + */ + date_time (int year, unsigned short month, unsigned short day, + unsigned short hours, unsigned short minutes, + double seconds); + + /** + * @brief Initialize an instance with the year, month, day, hours, + * minutes, and seconds components as well as %time zone. + * + * @param year The year component. + * @param month The month component. + * @param day The day component. + * @param hours The hours component. + * @param minutes The minutes component. + * @param seconds The seconds component. + * @param zone_hours The %time zone hours component. + * @param zone_minutes The %time zone minutes component. + */ + date_time (int year, unsigned short month, unsigned short day, + unsigned short hours, unsigned short minutes, + double seconds, short zone_hours, short zone_minutes); + + /** + * @brief Copy constructor. + * + * @param x An instance to make a copy of. + * @param f Flags to create the copy with. + * @param c A pointer to the object that will contain the copy. + * + * For polymorphic object models use the _clone function instead. + */ + date_time (const date_time& x, flags f = 0, container* c = 0); + + /** + * @brief Copy the instance polymorphically. + * + * @param f Flags to create the copy with. + * @param c A pointer to the object that will contain the copy. + * @return A pointer to the dynamically allocated copy. + * + * This function ensures that the dynamic type of the instance + * is used for copying and should be used for polymorphic object + * models instead of the copy constructor. + */ + virtual date_time* + _clone (flags f = 0, container* c = 0) const; + + /** + * @brief Create an instance from a data representation + * stream. + * + * @param s A stream to extract the data from. + * @param f Flags to create the new instance with. + * @param c A pointer to the object that will contain the new + * instance. + */ + template <typename S> + date_time (istream<S>& s, flags f = 0, container* c = 0); + + /** + * @brief Create an instance from a DOM element. + * + * @param e A DOM element to extract the data from. + * @param f Flags to create the new instance with. + * @param c A pointer to the object that will contain the new + * instance. + */ + date_time (const xercesc::DOMElement& e, + flags f = 0, + container* c = 0); + + /** + * @brief Create an instance from a DOM Attribute. + * + * @param a A DOM attribute to extract the data from. + * @param f Flags to create the new instance with. + * @param c A pointer to the object that will contain the new + * instance. + */ + date_time (const xercesc::DOMAttr& a, flags f = 0, container* c = 0); + + /** + * @brief Create an instance from a %string fragment. + * + * @param s A %string fragment to extract the data from. + * @param e A pointer to DOM element containing the %string fragment. + * @param f Flags to create the new instance with. + * @param c A pointer to the object that will contain the new + * instance. + */ + date_time (const std::basic_string<C>& s, + const xercesc::DOMElement* e, + flags f = 0, + container* c = 0); + //@} + + public: + /** + * @brief Get the year component. + * + * @return The year component. + */ + int + year () const; + + /** + * @brief Set the year component. + * + * @param y The new year component. + */ + void + year (int y); + + /** + * @brief Get the month component. + * + * @return The month component. + */ + unsigned short + month () const; + + /** + * @brief Set the month component. + * + * @param m The new month component. + */ + void + month (unsigned short m); + + /** + * @brief Get the day component. + * + * @return The day component. + */ + unsigned short + day () const; + + /** + * @brief Set the day component. + * + * @param d The new day component. + */ + void + day (unsigned short d); + + /** + * @brief Get the hours component. + * + * @return The hours component. + */ + unsigned short + hours () const; + + /** + * @brief Set the hours component. + * + * @param h The new hours component. + */ + void + hours (unsigned short h); + + /** + * @brief Get the minutes component. + * + * @return The minutes component. + */ + unsigned short + minutes () const; + + /** + * @brief Set the minutes component. + * + * @param m The new minutes component. + */ + void + minutes (unsigned short m); + + /** + * @brief Get the seconds component. + * + * @return The seconds component. + */ + double + seconds () const; + + /** + * @brief Set the seconds component. + * + * @param s The new seconds component. + */ + void + seconds (double s); + + protected: + //@cond + + date_time (); + + void + parse (const std::basic_string<C>&); + + //@endcond + + private: + int year_; + unsigned short month_; + unsigned short day_; + unsigned short hours_; + unsigned short minutes_; + double seconds_; + }; + + /** + * @brief %date_time comparison operator. + * + * @return True if the year, month, day, hours, seconds, and minutes + * components as well as %time zones are equal, false otherwise. + */ + template <typename C, typename B> + bool + operator== (const date_time<C, B>&, const date_time<C, B>&); + + /** + * @brief %date_time comparison operator. + * + * @return False if the year, month, day, hours, seconds, and minutes + * components as well as %time zones are equal, true otherwise. + */ + template <typename C, typename B> + bool + operator!= (const date_time<C, B>&, const date_time<C, B>&); + + + /** + * @brief Class corresponding to the XML Schema %duration built-in type. + * + * The %duration class represents a potentially negative %duration in + * the form of years, months, days, hours, minutes, and seconds. + * + * @nosubgrouping + */ + template <typename C, typename B> + class duration: public B + { + public: + /** + * @name Constructors + */ + //@{ + /** + * @brief Initialize a potentially negative instance with the years, + * months, days, hours, minutes, and seconds components. + * + * @param negative A boolean value indicating whether the %duration + * is negative (true) or positive (false). + * @param years The years component. + * @param months The months component. + * @param days The days component. + * @param hours The hours component. + * @param minutes The minutes component. + * @param seconds The seconds component. + */ + duration (bool negative, + unsigned int years, unsigned int months, unsigned int days, + unsigned int hours, unsigned int minutes, double seconds); + + /** + * @brief Copy constructor. + * + * @param x An instance to make a copy of. + * @param f Flags to create the copy with. + * @param c A pointer to the object that will contain the copy. + * + * For polymorphic object models use the _clone function instead. + */ + duration (const duration& x, flags f = 0, container* c = 0); + + /** + * @brief Copy the instance polymorphically. + * + * @param f Flags to create the copy with. + * @param c A pointer to the object that will contain the copy. + * @return A pointer to the dynamically allocated copy. + * + * This function ensures that the dynamic type of the instance + * is used for copying and should be used for polymorphic object + * models instead of the copy constructor. + */ + virtual duration* + _clone (flags f = 0, container* c = 0) const; + + /** + * @brief Create an instance from a data representation + * stream. + * + * @param s A stream to extract the data from. + * @param f Flags to create the new instance with. + * @param c A pointer to the object that will contain the new + * instance. + */ + template <typename S> + duration (istream<S>& s, flags f = 0, container* c = 0); + + /** + * @brief Create an instance from a DOM element. + * + * @param e A DOM element to extract the data from. + * @param f Flags to create the new instance with. + * @param c A pointer to the object that will contain the new + * instance. + */ + duration (const xercesc::DOMElement& e, + flags f = 0, + container* c = 0); + + /** + * @brief Create an instance from a DOM Attribute. + * + * @param a A DOM attribute to extract the data from. + * @param f Flags to create the new instance with. + * @param c A pointer to the object that will contain the new + * instance. + */ + duration (const xercesc::DOMAttr& a, flags f = 0, container* c = 0); + + /** + * @brief Create an instance from a %string fragment. + * + * @param s A %string fragment to extract the data from. + * @param e A pointer to DOM element containing the %string fragment. + * @param f Flags to create the new instance with. + * @param c A pointer to the object that will contain the new + * instance. + */ + duration (const std::basic_string<C>& s, + const xercesc::DOMElement* e, + flags f = 0, + container* c = 0); + //@} + + public: + /** + * @brief Determine if %duration is negative. + * + * @return True if %duration is negative, false otherwise. + */ + bool + negative () const; + + /** + * @brief Change %duration sign. + * + * @param n A boolean value indicating whether %duration is + * negative (true) or positive (false). + */ + void + negative (bool n); + + /** + * @brief Get the years component. + * + * @return The years component. + */ + unsigned int + years () const; + + /** + * @brief Set the years component. + * + * @param y The new years component. + */ + void + years (unsigned int y); + + /** + * @brief Get the months component. + * + * @return The months component. + */ + unsigned int + months () const; + + /** + * @brief Set the months component. + * + * @param m The new months component. + */ + void + months (unsigned int m); + + /** + * @brief Get the days component. + * + * @return The days component. + */ + unsigned int + days () const; + + /** + * @brief Set the days component. + * + * @param d The new days component. + */ + void + days (unsigned int d); + + /** + * @brief Get the hours component. + * + * @return The hours component. + */ + unsigned int + hours () const; + + /** + * @brief Set the hours component. + * + * @param h The new hours component. + */ + void + hours (unsigned int h); + + /** + * @brief Get the minutes component. + * + * @return The minutes component. + */ + unsigned int + minutes () const; + + /** + * @brief Set the minutes component. + * + * @param m The new minutes component. + */ + void + minutes (unsigned int m); + + /** + * @brief Get the seconds component. + * + * @return The seconds component. + */ + double + seconds () const; + + /** + * @brief Set the seconds component. + * + * @param s The new seconds component. + */ + void + seconds (double s); + + protected: + //@cond + + duration (); + + void + parse (const std::basic_string<C>&); + + //@endcond + + private: + bool negative_; + unsigned int years_; + unsigned int months_; + unsigned int days_; + unsigned int hours_; + unsigned int minutes_; + double seconds_; + }; + + /** + * @brief %duration comparison operator. + * + * @return True if the sings as well as years, months, days, hours, + * seconds, and minutes components are equal, false otherwise. + */ + template <typename C, typename B> + bool + operator== (const duration<C, B>&, const duration<C, B>&); + + /** + * @brief %duration comparison operator. + * + * @return False if the sings as well as years, months, days, hours, + * seconds, and minutes components are equal, true otherwise. + */ + template <typename C, typename B> + bool + operator!= (const duration<C, B>&, const duration<C, B>&); + } + } +} + +#include <xsd/cxx/tree/date-time.ixx> +#include <xsd/cxx/tree/date-time.txx> + +#endif // XSD_CXX_TREE_DATE_TIME_HXX diff --git a/xsd/libxsd/xsd/cxx/tree/date-time.ixx b/xsd/libxsd/xsd/cxx/tree/date-time.ixx new file mode 100644 index 0000000..5bc7200 --- /dev/null +++ b/xsd/libxsd/xsd/cxx/tree/date-time.ixx @@ -0,0 +1,893 @@ +// file : xsd/cxx/tree/date-time.ixx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +namespace xsd +{ + namespace cxx + { + namespace tree + { + // time_zone + // + inline time_zone:: + time_zone () + : present_ (false) + { + } + + inline time_zone:: + time_zone (short h, short m) + : present_ (true), hours_ (h), minutes_ (m) + { + } + + inline bool time_zone:: + zone_present () const + { + return present_; + } + + inline void time_zone:: + zone_reset () + { + present_ = false; + } + + inline short time_zone:: + zone_hours () const + { + return hours_; + } + + inline void time_zone:: + zone_hours (short h) + { + hours_ = h; + present_ = true; + } + + inline short time_zone:: + zone_minutes () const + { + return minutes_; + } + + inline void time_zone:: + zone_minutes (short m) + { + minutes_ = m; + present_ = true; + } + + inline bool + operator== (const time_zone& x, const time_zone& y) + { + return x.zone_present () + ? y.zone_present () && + x.zone_hours () == y.zone_hours () && + x.zone_minutes () == y.zone_minutes () + : !y.zone_present (); + } + + inline bool + operator!= (const time_zone& x, const time_zone& y) + { + return !(x == y); + } + + // gday + // + template <typename C, typename B> + inline gday<C, B>:: + gday () + { + } + + template <typename C, typename B> + inline gday<C, B>:: + gday (unsigned short day) + : day_ (day) + { + } + + template <typename C, typename B> + inline gday<C, B>:: + gday (unsigned short day, short zone_h, short zone_m) + : time_zone (zone_h, zone_m), day_ (day) + { + } + + template <typename C, typename B> + inline gday<C, B>:: + gday (const gday& x, flags f, container* c) + : B (x, f, c), time_zone (x), day_ (x.day_) + { + } + + template <typename C, typename B> + inline unsigned short gday<C, B>:: + day () const + { + return day_; + } + + template <typename C, typename B> + inline void gday<C, B>:: + day (unsigned short day) + { + day_ = day; + } + + template <typename C, typename B> + inline bool + operator== (const gday<C, B>& x, const gday<C, B>& y) + { + const time_zone& xz = x; + const time_zone& yz = y; + + return x.day () == y.day () && xz == yz; + } + + template <typename C, typename B> + inline bool + operator!= (const gday<C, B>& x, const gday<C, B>& y) + { + return !(x == y); + } + + // gmonth + // + template <typename C, typename B> + inline gmonth<C, B>:: + gmonth () + { + } + + template <typename C, typename B> + inline gmonth<C, B>:: + gmonth (unsigned short month) + : month_ (month) + { + } + + template <typename C, typename B> + inline gmonth<C, B>:: + gmonth (unsigned short month, short zone_h, short zone_m) + : time_zone (zone_h, zone_m), month_ (month) + { + } + + template <typename C, typename B> + inline gmonth<C, B>:: + gmonth (const gmonth& x, flags f, container* c) + : B (x, f, c), time_zone (x), month_ (x.month_) + { + } + + template <typename C, typename B> + inline unsigned short gmonth<C, B>:: + month () const + { + return month_; + } + + template <typename C, typename B> + inline void gmonth<C, B>:: + month (unsigned short month) + { + month_ = month; + } + + template <typename C, typename B> + inline bool + operator== (const gmonth<C, B>& x, const gmonth<C, B>& y) + { + const time_zone& xz = x; + const time_zone& yz = y; + + return x.month () == y.month () && xz == yz; + } + + template <typename C, typename B> + inline bool + operator!= (const gmonth<C, B>& x, const gmonth<C, B>& y) + { + return !(x == y); + } + + // gyear + // + template <typename C, typename B> + inline gyear<C, B>:: + gyear () + { + } + + template <typename C, typename B> + inline gyear<C, B>:: + gyear (int year) + : year_ (year) + { + } + + template <typename C, typename B> + inline gyear<C, B>:: + gyear (int year, short zone_h, short zone_m) + : time_zone (zone_h, zone_m), year_ (year) + { + } + + template <typename C, typename B> + inline gyear<C, B>:: + gyear (const gyear& x, flags f, container* c) + : B (x, f, c), time_zone (x), year_ (x.year_) + { + } + + template <typename C, typename B> + inline int gyear<C, B>:: + year () const + { + return year_; + } + + template <typename C, typename B> + inline void gyear<C, B>:: + year (int year) + { + year_ = year; + } + + template <typename C, typename B> + inline bool + operator== (const gyear<C, B>& x, const gyear<C, B>& y) + { + const time_zone& xz = x; + const time_zone& yz = y; + + return x.year () == y.year () && xz == yz; + } + + template <typename C, typename B> + inline bool + operator!= (const gyear<C, B>& x, const gyear<C, B>& y) + { + return !(x == y); + } + + // gmonth_day + // + template <typename C, typename B> + inline gmonth_day<C, B>:: + gmonth_day () + { + } + + template <typename C, typename B> + inline gmonth_day<C, B>:: + gmonth_day (unsigned short month, unsigned short day) + : month_ (month), day_ (day) + { + } + + template <typename C, typename B> + inline gmonth_day<C, B>:: + gmonth_day (unsigned short month, unsigned short day, + short zone_h, short zone_m) + : time_zone (zone_h, zone_m), month_ (month), day_ (day) + { + } + + template <typename C, typename B> + inline gmonth_day<C, B>:: + gmonth_day (const gmonth_day& x, flags f, container* c) + : B (x, f, c), time_zone (x), month_ (x.month_), day_ (x.day_) + { + } + + template <typename C, typename B> + inline unsigned short gmonth_day<C, B>:: + month () const + { + return month_; + } + + template <typename C, typename B> + inline void gmonth_day<C, B>:: + month (unsigned short month) + { + month_ = month; + } + + template <typename C, typename B> + inline unsigned short gmonth_day<C, B>:: + day () const + { + return day_; + } + + template <typename C, typename B> + inline void gmonth_day<C, B>:: + day (unsigned short day) + { + day_ = day; + } + + template <typename C, typename B> + inline bool + operator== (const gmonth_day<C, B>& x, const gmonth_day<C, B>& y) + { + const time_zone& xz = x; + const time_zone& yz = y; + + return x.month () == y.month () && + x.day () == y.day () && + xz == yz; + } + + template <typename C, typename B> + inline bool + operator!= (const gmonth_day<C, B>& x, const gmonth_day<C, B>& y) + { + return !(x == y); + } + + // gyear_month + // + template <typename C, typename B> + inline gyear_month<C, B>:: + gyear_month () + { + } + + template <typename C, typename B> + inline gyear_month<C, B>:: + gyear_month (int year, unsigned short month) + : year_ (year), month_ (month) + { + } + + template <typename C, typename B> + inline gyear_month<C, B>:: + gyear_month (int year, unsigned short month, + short zone_h, short zone_m) + : time_zone (zone_h, zone_m), year_ (year), month_ (month) + { + } + + template <typename C, typename B> + inline gyear_month<C, B>:: + gyear_month (const gyear_month& x, flags f, container* c) + : B (x, f, c), time_zone (x), year_ (x.year_), month_ (x.month_) + { + } + + template <typename C, typename B> + inline int gyear_month<C, B>:: + year () const + { + return year_; + } + + template <typename C, typename B> + inline void gyear_month<C, B>:: + year (int year) + { + year_ = year; + } + + template <typename C, typename B> + inline unsigned short gyear_month<C, B>:: + month () const + { + return month_; + } + + template <typename C, typename B> + inline void gyear_month<C, B>:: + month (unsigned short month) + { + month_ = month; + } + + template <typename C, typename B> + inline bool + operator== (const gyear_month<C, B>& x, const gyear_month<C, B>& y) + { + const time_zone& xz = x; + const time_zone& yz = y; + + return x.year () == y.year () && + x.month () == y.month () && + xz == yz; + } + + template <typename C, typename B> + inline bool + operator!= (const gyear_month<C, B>& x, const gyear_month<C, B>& y) + { + return !(x == y); + } + + // date + // + template <typename C, typename B> + inline date<C, B>:: + date () + { + } + + template <typename C, typename B> + inline date<C, B>:: + date (int year, unsigned short month, unsigned short day) + : year_ (year), month_ (month), day_ (day) + { + } + + template <typename C, typename B> + inline date<C, B>:: + date (int year, unsigned short month, unsigned short day, + short zone_h, short zone_m) + : time_zone (zone_h, zone_m), + year_ (year), month_ (month), day_ (day) + { + } + + template <typename C, typename B> + inline date<C, B>:: + date (const date& x, flags f, container* c) + : B (x, f, c), time_zone (x), + year_ (x.year_), month_ (x.month_), day_ (x.day_) + { + } + + template <typename C, typename B> + inline int date<C, B>:: + year () const + { + return year_; + } + + template <typename C, typename B> + inline void date<C, B>:: + year (int year) + { + year_ = year; + } + + template <typename C, typename B> + inline unsigned short date<C, B>:: + month () const + { + return month_; + } + + template <typename C, typename B> + inline void date<C, B>:: + month (unsigned short month) + { + month_ = month; + } + + template <typename C, typename B> + inline unsigned short date<C, B>:: + day () const + { + return day_; + } + + template <typename C, typename B> + inline void date<C, B>:: + day (unsigned short day) + { + day_ = day; + } + + template <typename C, typename B> + inline bool + operator== (const date<C, B>& x, const date<C, B>& y) + { + const time_zone& xz = x; + const time_zone& yz = y; + + return x.year () == y.year () && + x.month () == y.month () && + x.day () == y.day () && + xz == yz; + } + + template <typename C, typename B> + inline bool + operator!= (const date<C, B>& x, const date<C, B>& y) + { + return !(x == y); + } + + // time + // + template <typename C, typename B> + inline time<C, B>:: + time () + { + } + + template <typename C, typename B> + inline time<C, B>:: + time (unsigned short hours, unsigned short minutes, double seconds) + : hours_ (hours), minutes_ (minutes), seconds_ (seconds) + { + } + + template <typename C, typename B> + inline time<C, B>:: + time (unsigned short hours, unsigned short minutes, double seconds, + short zone_h, short zone_m) + : time_zone (zone_h, zone_m), + hours_ (hours), minutes_ (minutes), seconds_ (seconds) + { + } + + template <typename C, typename B> + inline time<C, B>:: + time (const time& x, flags f, container* c) + : B (x, f, c), time_zone (x), + hours_ (x.hours_), minutes_ (x.minutes_), seconds_ (x.seconds_) + { + } + + template <typename C, typename B> + inline unsigned short time<C, B>:: + hours () const + { + return hours_; + } + + template <typename C, typename B> + inline void time<C, B>:: + hours (unsigned short hours) + { + hours_ = hours; + } + + template <typename C, typename B> + inline unsigned short time<C, B>:: + minutes () const + { + return minutes_; + } + + template <typename C, typename B> + inline void time<C, B>:: + minutes (unsigned short minutes) + { + minutes_ = minutes; + } + + template <typename C, typename B> + inline double time<C, B>:: + seconds () const + { + return seconds_; + } + + template <typename C, typename B> + inline void time<C, B>:: + seconds (double seconds) + { + seconds_ = seconds; + } + + template <typename C, typename B> + inline bool + operator== (const time<C, B>& x, const time<C, B>& y) + { + const time_zone& xz = x; + const time_zone& yz = y; + + return x.hours () == y.hours () && + x.minutes () == y.minutes () && + x.seconds () == y.seconds () && + xz == yz; + } + + template <typename C, typename B> + inline bool + operator!= (const time<C, B>& x, const time<C, B>& y) + { + return !(x == y); + } + + // date_time + // + template <typename C, typename B> + inline date_time<C, B>:: + date_time () + { + } + + template <typename C, typename B> + inline date_time<C, B>:: + date_time (int year, unsigned short month, unsigned short day, + unsigned short hours, unsigned short minutes, double seconds) + : year_ (year), month_ (month), day_ (day), + hours_ (hours), minutes_ (minutes), seconds_ (seconds) + { + } + + template <typename C, typename B> + inline date_time<C, B>:: + date_time (int year, unsigned short month, unsigned short day, + unsigned short hours, unsigned short minutes, double seconds, + short zone_h, short zone_m) + : time_zone (zone_h, zone_m), + year_ (year), month_ (month), day_ (day), + hours_ (hours), minutes_ (minutes), seconds_ (seconds) + { + } + + template <typename C, typename B> + inline date_time<C, B>:: + date_time (const date_time& x, flags f, container* c) + : B (x, f, c), time_zone (x), + year_ (x.year_), month_ (x.month_), day_ (x.day_), + hours_ (x.hours_), minutes_ (x.minutes_), seconds_ (x.seconds_) + { + } + + template <typename C, typename B> + inline int date_time<C, B>:: + year () const + { + return year_; + } + + template <typename C, typename B> + inline void date_time<C, B>:: + year (int year) + { + year_ = year; + } + + template <typename C, typename B> + inline unsigned short date_time<C, B>:: + month () const + { + return month_; + } + + template <typename C, typename B> + inline void date_time<C, B>:: + month (unsigned short month) + { + month_ = month; + } + + template <typename C, typename B> + inline unsigned short date_time<C, B>:: + day () const + { + return day_; + } + + template <typename C, typename B> + inline void date_time<C, B>:: + day (unsigned short day) + { + day_ = day; + } + + template <typename C, typename B> + inline unsigned short date_time<C, B>:: + hours () const + { + return hours_; + } + + template <typename C, typename B> + inline void date_time<C, B>:: + hours (unsigned short hours) + { + hours_ = hours; + } + + template <typename C, typename B> + inline unsigned short date_time<C, B>:: + minutes () const + { + return minutes_; + } + + template <typename C, typename B> + inline void date_time<C, B>:: + minutes (unsigned short minutes) + { + minutes_ = minutes; + } + + template <typename C, typename B> + inline double date_time<C, B>:: + seconds () const + { + return seconds_; + } + + template <typename C, typename B> + inline void date_time<C, B>:: + seconds (double seconds) + { + seconds_ = seconds; + } + + template <typename C, typename B> + inline bool + operator== (const date_time<C, B>& x, const date_time<C, B>& y) + { + const time_zone& xz = x; + const time_zone& yz = y; + + return x.year () == y.year () && + x.month () == y.month () && + x.day () == y.day () && + x.hours () == y.hours () && + x.minutes () == y.minutes () && + x.seconds () == y.seconds () && + xz == yz; + } + + template <typename C, typename B> + inline bool + operator!= (const date_time<C, B>& x, const date_time<C, B>& y) + { + return !(x == y); + } + + // duration + // + template <typename C, typename B> + inline duration<C, B>:: + duration () + { + } + + template <typename C, typename B> + inline duration<C, B>:: + duration (bool negative, + unsigned int years, unsigned int months, unsigned int days, + unsigned int hours, unsigned int minutes, double seconds) + : negative_ (negative), + years_ (years), months_ (months), days_ (days), + hours_ (hours), minutes_ (minutes), seconds_ (seconds) + { + } + + template <typename C, typename B> + inline duration<C, B>:: + duration (const duration& x, flags f, container* c) + : B (x, f, c), negative_ (x.negative_), + years_ (x.years_), months_ (x.months_), days_ (x.days_), + hours_ (x.hours_), minutes_ (x.minutes_), seconds_ (x.seconds_) + { + } + + template <typename C, typename B> + inline bool duration<C, B>:: + negative () const + { + return negative_; + } + + template <typename C, typename B> + inline void duration<C, B>:: + negative (bool negative) + { + negative_ = negative; + } + + template <typename C, typename B> + inline unsigned int duration<C, B>:: + years () const + { + return years_; + } + + template <typename C, typename B> + inline void duration<C, B>:: + years (unsigned int years) + { + years_ = years; + } + + template <typename C, typename B> + inline unsigned int duration<C, B>:: + months () const + { + return months_; + } + + template <typename C, typename B> + inline void duration<C, B>:: + months (unsigned int months) + { + months_ = months; + } + + template <typename C, typename B> + inline unsigned int duration<C, B>:: + days () const + { + return days_; + } + + template <typename C, typename B> + inline void duration<C, B>:: + days (unsigned int days) + { + days_ = days; + } + + template <typename C, typename B> + inline unsigned int duration<C, B>:: + hours () const + { + return hours_; + } + + template <typename C, typename B> + inline void duration<C, B>:: + hours (unsigned int hours) + { + hours_ = hours; + } + + template <typename C, typename B> + inline unsigned int duration<C, B>:: + minutes () const + { + return minutes_; + } + + template <typename C, typename B> + inline void duration<C, B>:: + minutes (unsigned int minutes) + { + minutes_ = minutes; + } + + template <typename C, typename B> + inline double duration<C, B>:: + seconds () const + { + return seconds_; + } + + template <typename C, typename B> + inline void duration<C, B>:: + seconds (double seconds) + { + seconds_ = seconds; + } + + template <typename C, typename B> + inline bool + operator== (const duration<C, B>& x, const duration<C, B>& y) + { + return x.negative () == y.negative () && + x.years () == y.years () && + x.months () == y.months () && + x.days () == y.days () && + x.hours () == y.hours () && + x.minutes () == y.minutes () && + x.seconds () == y.seconds (); + } + + template <typename C, typename B> + inline bool + operator!= (const duration<C, B>& x, const duration<C, B>& y) + { + return !(x == y); + } + } + } +} diff --git a/xsd/libxsd/xsd/cxx/tree/date-time.txx b/xsd/libxsd/xsd/cxx/tree/date-time.txx new file mode 100644 index 0000000..34c6c84 --- /dev/null +++ b/xsd/libxsd/xsd/cxx/tree/date-time.txx @@ -0,0 +1,94 @@ +// file : xsd/cxx/tree/date-time.txx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +namespace xsd +{ + namespace cxx + { + namespace tree + { + // gday + // + template <typename C, typename B> + gday<C, B>* gday<C, B>:: + _clone (flags f, container* c) const + { + return new gday (*this, f, c); + } + + // gmonth + // + template <typename C, typename B> + gmonth<C, B>* gmonth<C, B>:: + _clone (flags f, container* c) const + { + return new gmonth (*this, f, c); + } + + // gyear + // + template <typename C, typename B> + gyear<C, B>* gyear<C, B>:: + _clone (flags f, container* c) const + { + return new gyear (*this, f, c); + } + + // gmonth_day + // + template <typename C, typename B> + gmonth_day<C, B>* gmonth_day<C, B>:: + _clone (flags f, container* c) const + { + return new gmonth_day (*this, f, c); + } + + // gyear_month + // + template <typename C, typename B> + gyear_month<C, B>* gyear_month<C, B>:: + _clone (flags f, container* c) const + { + return new gyear_month (*this, f, c); + } + + // date + // + template <typename C, typename B> + date<C, B>* date<C, B>:: + _clone (flags f, container* c) const + { + return new date (*this, f, c); + } + + // time + // + template <typename C, typename B> + time<C, B>* time<C, B>:: + _clone (flags f, container* c) const + { + return new time (*this, f, c); + } + + // date_time + // + template <typename C, typename B> + date_time<C, B>* date_time<C, B>:: + _clone (flags f, container* c) const + { + return new date_time (*this, f, c); + } + + // duration + // + template <typename C, typename B> + duration<C, B>* duration<C, B>:: + _clone (flags f, container* c) const + { + return new duration (*this, f, c); + } + } + } +} diff --git a/xsd/libxsd/xsd/cxx/tree/element-map.hxx b/xsd/libxsd/xsd/cxx/tree/element-map.hxx new file mode 100644 index 0000000..2f12b0b --- /dev/null +++ b/xsd/libxsd/xsd/cxx/tree/element-map.hxx @@ -0,0 +1,146 @@ +// file : xsd/cxx/tree/element-map.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_CXX_TREE_ELEMENT_MAP_HXX +#define XSD_CXX_TREE_ELEMENT_MAP_HXX + +#include <map> +#include <memory> // std::auto_ptr +#include <cstddef> // std::size_t +#include <string> + +#include <xsd/cxx/xml/qualified-name.hxx> +#include <xsd/cxx/tree/elements.hxx> + +namespace xsd +{ + namespace cxx + { + namespace tree + { + /** + * @brief Root element map. + * + * This class allows uniform parsing/serialization of multiple + * root elements via the element_type base class. + * + * @nosubgrouping + */ + template <typename C, typename T> + class element_map + { + public: + /** + * @brief Common base class for all element types. + */ + typedef tree::element_type<C, T> element_type; + + /** + * @brief Parse a DOM element. + * + * @param e A DOM element to parse. + * @param f Flags to create the new element object with. + * @return An automatic pointer to the new element object. + */ + static std::auto_ptr<element_type> + parse (const xercesc::DOMElement& e, flags f = 0); + + /** + * @brief Serialize an element object to a DOM element. + * + * @param e A DOM element to serialize to. + * @param x An element object to serialize. + */ + static void + serialize (xercesc::DOMElement& e, const element_type& x); + + public: + //@cond + + typedef xml::qualified_name<C> qualified_name; + + typedef std::auto_ptr<element_type> + (*parser) (const xercesc::DOMElement&, flags f); + + typedef void + (*serializer) (xercesc::DOMElement&, const element_type&); + + static void + register_parser (const qualified_name&, parser); + + static void + register_serializer (const qualified_name&, serializer); + + public: + struct map_entry + { + map_entry () : parser_ (0), serializer_ (0) {} + + parser parser_; + serializer serializer_; + }; + + typedef + std::map<qualified_name, map_entry> + map; + + static map* map_; + static std::size_t count_; + + private: + element_map (); + + //@endcond + }; + + //@cond + + template <typename C, typename T> + typename element_map<C, T>::map* element_map<C, T>::map_ = 0; + + template <typename C, typename T> + std::size_t element_map<C, T>::count_ = 0; + + template <typename C, typename T> + struct element_map_init + { + element_map_init (); + ~element_map_init (); + }; + + // + // + template<typename T, typename C, typename B> + std::auto_ptr<element_type<C, B> > + parser_impl (const xercesc::DOMElement&, flags); + + template<typename T, typename C, typename B> + struct parser_init + { + parser_init (const std::basic_string<C>& name, + const std::basic_string<C>& ns); + }; + + // + // + template<typename T, typename C, typename B> + void + serializer_impl (xercesc::DOMElement&, const element_type<C, B>&); + + template<typename T, typename C, typename B> + struct serializer_init + { + serializer_init (const std::basic_string<C>& name, + const std::basic_string<C>& ns); + }; + + //@endcond + } + } +} + +#include <xsd/cxx/tree/element-map.txx> + +#endif // XSD_CXX_TREE_ELEMENT_MAP_HXX diff --git a/xsd/libxsd/xsd/cxx/tree/element-map.txx b/xsd/libxsd/xsd/cxx/tree/element-map.txx new file mode 100644 index 0000000..0ff5d2a --- /dev/null +++ b/xsd/libxsd/xsd/cxx/tree/element-map.txx @@ -0,0 +1,71 @@ +// file : xsd/cxx/tree/element-map.txx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +namespace xsd +{ + namespace cxx + { + namespace tree + { + // element_map + // + template <typename C, typename T> + void element_map<C, T>:: + register_parser (const qualified_name& n, parser p) + { + (*map_)[n].parser_ = p; + } + + template <typename C, typename T> + void element_map<C, T>:: + register_serializer (const qualified_name& n, serializer s) + { + (*map_)[n].serializer_ = s; + } + + // element_map_init + // + template <typename C, typename T> + element_map_init<C, T>:: + element_map_init () + { + if (element_map<C, T>::count_ == 0) + element_map<C, T>::map_ = new typename element_map<C, T>::map; + + ++element_map<C, T>::count_; + } + + template <typename C, typename T> + element_map_init<C, T>:: + ~element_map_init () + { + if (--element_map<C, T>::count_ == 0) + delete element_map<C, T>::map_; + } + + // parser_init + // + template<typename T, typename C, typename B> + parser_init<T, C, B>:: + parser_init (const std::basic_string<C>& name, + const std::basic_string<C>& ns) + { + element_map<C, B>::register_parser ( + xml::qualified_name<C> (name, ns), &parser_impl<T, C, B>); + } + + // serializer_init + // + template<typename T, typename C, typename B> + serializer_init<T, C, B>:: + serializer_init (const std::basic_string<C>& name, + const std::basic_string<C>& ns) + { + element_map<C, B>::register_serializer ( + xml::qualified_name<C> (name, ns), &serializer_impl<T, C, B>); + } + } + } +} diff --git a/xsd/libxsd/xsd/cxx/tree/elements.hxx b/xsd/libxsd/xsd/cxx/tree/elements.hxx new file mode 100644 index 0000000..403fdb3 --- /dev/null +++ b/xsd/libxsd/xsd/cxx/tree/elements.hxx @@ -0,0 +1,1490 @@ +// file : xsd/cxx/tree/elements.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +/** + * @file + * + * @brief Contains C++ class definitions for XML Schema anyType and + * anySimpleType types as well as supporting code. + * + * This is an internal header and is included by the generated code. You + * normally should not include it directly. + * + */ + +#ifndef XSD_CXX_TREE_ELEMENTS_HXX +#define XSD_CXX_TREE_ELEMENTS_HXX + +#include <map> +#include <string> +#include <memory> // std::auto_ptr +#include <istream> +#include <sstream> +#include <cassert> + +#include <xercesc/dom/DOMNode.hpp> +#include <xercesc/dom/DOMAttr.hpp> +#include <xercesc/dom/DOMElement.hpp> +#include <xercesc/dom/DOMDocument.hpp> +#include <xercesc/dom/DOMNamedNodeMap.hpp> + +#include <xsd/cxx/xml/elements.hxx> // xml::properties +#include <xsd/cxx/xml/dom/auto-ptr.hxx> // dom::auto_ptr + +#include <xsd/cxx/tree/facet.hxx> +#include <xsd/cxx/tree/exceptions.hxx> +#include <xsd/cxx/tree/istream-fwd.hxx> + +namespace xsd +{ + namespace cxx + { + /** + * @brief C++/Tree mapping runtime namespace. + * + * This is an internal namespace and normally should not be referenced + * directly. Instead you should use the aliases for types in this + * namespaces that are created in the generated code. + * + */ + namespace tree + { + /** + * @brief Parsing and %serialization %flags. + * + * Flags are used to modify the default behavior of %parsing and + * %serialization functions as well as %parsing constructors. + * + * @nosubgrouping + */ + class flags + { + public: + /** + * @name Flag constants + */ + //@{ + + /** + * @brief Keep DOM association in the resulting tree. + */ + static const unsigned long keep_dom = 0x00000100UL; + + /** + * @brief Assume ownership of the DOM document. + * + * This flag only makes sense together with the @c keep_dom + * flag in the call to the %parsing function with the + * @c dom::auto_ptr<DOMDocument> argument. + * + */ + static const unsigned long own_dom = 0x00000200UL; + + /** + * @brief Turn off XML Schema validation in the underlying XML + * parser. + */ + static const unsigned long dont_validate = 0x00000400UL; + + /** + * @brief Do not initialize the Xerces-C++ runtime. + */ + static const unsigned long dont_initialize = 0x00000001UL; + + /** + * @brief Do not write XML declaration during %serialization. + */ + static const unsigned long no_xml_declaration = 0x00010000UL; + + /** + * @brief Do not add extra spaces or new lines that make the + * resulting XML easier to read. + */ + static const unsigned long dont_pretty_print = 0x00020000UL; + + //@cond + + // The following flags are for internal use. + // + static const unsigned long base = 0x01000000UL; + + //@endcond + + // Notes on flag blocks: + // + // 0x000000FF - common (applicable to both parsing and serialization) + // 0x0000FF00 - parsing (values aligned with XML parsing) + // 0x00FF0000 - serialization (values aligned with XML serialization) + // 0xFF000000 - internal + + //@} + + public: + /** + * @brief Initialize an instance with an integer value. + * + * @param x A %flags value as an integer. + */ + flags (unsigned long x = 0) + : x_ (x) + { + } + + /** + * @brief Convert an instance to an integer value. + * + * @return An integer %flags value. + */ + operator unsigned long () const + { + return x_; + } + + /** + * @brief Combine two %flags. + * + * @return A %flags object that is a combination of the arguments. + */ + friend flags + operator| (const flags& a, const flags& b) + { + return flags (a.x_ | b.x_); + } + + /** + * @brief Combine two %flags. + * + * @return A %flags object that is a combination of the arguments. + */ + friend flags + operator| (const flags& a, unsigned long b) + { + return flags (a.x_ | b); + } + + /** + * @brief Combine two %flags. + * + * @return A %flags object that is a combination of the arguments. + */ + friend flags + operator| (unsigned long a, const flags& b) + { + return flags (a | b.x_); + } + + private: + unsigned long x_; + }; + + + // Parsing properties. Refer to xsd/cxx/xml/elements.hxx for XML- + // related properties. + // + template <typename C> + class properties: public xml::properties<C> + { + }; + + //@cond + + // DOM user data keys. + // + template <int dummy> + struct user_data_keys_template + { + // Back pointers to tree nodes. + // + static const XMLCh node[21]; + }; + + typedef user_data_keys_template<0> user_data_keys; + + // HP aCC3 complains about unresolved symbols without an explicit + // instantiation. + // +#if defined(__HP_aCC) && __HP_aCC <= 39999 + template struct user_data_keys_template<0>; +#endif + // + // + struct identity + { + virtual + ~identity () + { + } + + identity () + { + } + + virtual bool + before (const identity&) const = 0; + + virtual void + throw_duplicate_id () const = 0; + + private: + identity (const identity&); + + identity& + operator= (const identity&); + }; + + //@endcond + + + // anyType. VC++ has a name injection bug that makes it impossible + // to have a member with the same name as a base type. To address + // that we will have to choose some unique name for the definition + // and typedef it to 'type'. + // + class _type; + + /** + * @brief Class corresponding to the XML Schema anyType built-in type. + * + */ + typedef _type type; + + /** + * @brief Container type. + * + */ + typedef _type container; + + /** + * @brief Class corresponding to the XML Schema anyType built-in type. + * + * This class is a base for every generated and built-in type in the + * C++/Tree mapping. + * + * @nosubgrouping + */ + class _type + { + public: + virtual + ~_type () + { + // Everything should have been unregistered by now. + // + assert (map_.get () == 0 || map_->size () == 0); + } + + public: + /** + * @name Constructors + */ + //@{ + + /** + * @brief Default constructor. + */ + _type () + : container_ (0) + { + } + + public: + /** + * @brief Copy constructor. + * + * @param x An instance to make a copy of. + * @param f Flags to create the copy with. + * @param c A pointer to the object that will contain the copy. + * + * For polymorphic object models use the @c _clone function instead. + */ + _type (const type& x, flags f = 0, container* c = 0); + + /** + * @brief Copy the instance polymorphically. + * + * @param f Flags to create the copy with. + * @param c A pointer to the object that will contain the copy. + * @return A pointer to the dynamically allocated copy. + * + * This function ensures that the dynamic type of the instance + * is used for copying and should be used for polymorphic object + * models instead of the copy constructor. + */ + virtual type* + _clone (flags f = 0, container* c = 0) const + { + return new type (*this, f, c); + } + + public: + /** + * @brief Create an instance from a data representation + * stream. + * + * @param s A stream to extract the data from. + * @param f Flags to create the new instance with. + * @param c A pointer to the object that will contain the new + * instance. + */ + template <typename S> + _type (istream<S>& s, flags f = 0, container* c = 0); + + /** + * @brief Create an instance from a DOM element. + * + * @param e A DOM element to extract the data from. + * @param f Flags to create the new instance with. + * @param c A pointer to the object that will contain the new + * instance. + */ + _type (const xercesc::DOMElement& e, flags f = 0, container* c = 0); + + /** + * @brief Create an instance from a DOM Attribute. + * + * @param a A DOM attribute to extract the data from. + * @param f Flags to create the new instance with. + * @param c A pointer to the object that will contain the new + * instance. + */ + _type (const xercesc::DOMAttr& a, flags f = 0, container* c = 0); + + /** + * @brief Create an instance from a %string fragment. + * + * @param s A %string fragment to extract the data from. + * @param e A pointer to DOM element containing the %string fragment. + * @param f Flags to create the new instance with. + * @param c A pointer to the object that will contain the new + * instance. + */ + template <typename C> + _type (const std::basic_string<C>& s, + const xercesc::DOMElement* e, + flags f = 0, + container* c = 0); + //@} + + public: + /** + * @brief Copy assignment operator. + * + * @param x An instance to assign. + * @return A reference to the instance. + */ + type& + operator= (const type& x) + { + while (&x == 0) /* unused */; + return *this; + } + + // Container API. + // + public: + /** + * @brief Get a constant pointer to container, an object model + * node that contains this instance. + * + * @return A constant pointer to container, or 0 if this instance + * is not contained. + */ + const container* + _container () const + { + return container_; + } + + /** + * @brief Get a pointer to container, an object model node that + * contains this instance. + * + * @return A pointer to container, or 0 if this instance is not + * contained. + */ + container* + _container () + { + return container_; + } + + /** + * @brief Set this instance's new container, an object model node + * that contains this instance. + * + * @param c A pointer to container. + */ + virtual void + _container (container* c) + { + container* dr (0); + + if (c != 0) + { + dr = c->_root (); + + if (dr == 0) + dr = c; + } + + std::auto_ptr<map>& m (dr ? dr->map_ : map_); + + if (container_ == 0) + { + if (c != 0 && map_.get () != 0) + { + // Transfer our IDs to the new root. + // + if (m.get () != 0) + { + m->insert (map_->begin (), map_->end ()); + std::auto_ptr<map> tmp (0); + map_ = tmp; + } + else + m = map_; + } + } + else + { + container* sr (_root ()); + + if (sr->map_.get () != 0) + { + // Transfer IDs that belong to this subtree. + // + for (map::iterator i (sr->map_->begin ()), e (sr->map_->end ()); + i != e;) + { + type* x (i->second); + for (; x != this && x != sr; x = x->_container ()) ; + + if (x != sr) + { + // Part of our subtree. + // + if (m.get () == 0) + { + std::auto_ptr<map> tmp (new map); + m = tmp; + } + + m->insert (*i); + sr->map_->erase (i++); + } + else + ++i; + } + } + } + + container_ = c; + } + + /** + * @brief Get a constant pointer to object model's root node. + * + * @return A constant pointer to root node, or 0 if this instance + * is not contained. + */ + const container* + _root () const + { + const container* r (container_); + + for (const container* c (r); c != 0; c = c->container_) + r = c; + + return r; + } + + /** + * @brief Get a pointer to object model's root node. + * + * @return A pointer to root node, or 0 if this instance is not + * contained. + */ + container* + _root () + { + container* r (container_); + + for (container* c (r); c != 0; c = c->container_) + r = c; + + return r; + } + + // DOM association. + // + public: + /** + * @brief Get a constant pointer to a DOM node associated with + * this object model node. + * + * @return A constant pointer to DOM node, or 0 if none associated. + */ + const xercesc::DOMNode* + _node () const + { + return dom_info_.get () ? dom_info_->node() : 0; + } + + /** + * @brief Get a pointer to a DOM node associated with this object + * model node. + * + * @return A pointer to DOM node, or 0 if none associated. + */ + xercesc::DOMNode* + _node () + { + return dom_info_.get () ? dom_info_->node () : 0; + } + + /** + * @brief Exception indicating that a DOM node cannot be associated + * with an object model node. + */ + class bad_dom_node_type: public std::exception //@@ Inherit exception. + { + public: + /** + * @brief Get %exception description. + * + * @return A C %string describing the %exception. + */ + virtual const char* + what () const throw () + { + return "DOM node is not an attribute node or element node"; + } + }; + + /** + * @brief Manually set a DOM node associated with this object + * model node. + * + * The DOM node should be a child of the parent's DOM node. If + * this object model node is a root of the tree, then it will + * assume the ownership of the whole DOM document to which this + * DOM node belongs. + * + * @param n A pointer to DOM node (should be either an element or + * an attribute). + */ + void + _node (xercesc::DOMNode* n) + { + switch (n->getNodeType ()) + { + case xercesc::DOMNode::ELEMENT_NODE: + { + if (container_ != 0) + { + // @@ Should be a throw. + // + assert (_root ()->_node () != 0); + assert (_root ()->_node ()->getOwnerDocument () == + n->getOwnerDocument ()); + } + + std::auto_ptr<dom_info> r ( + dom_info_factory::create ( + *static_cast<xercesc::DOMElement*> (n), + *this, + container_ == 0)); + + dom_info_ = r; + break; + } + case xercesc::DOMNode::ATTRIBUTE_NODE: + { + //@@ Should be a throw. + // + assert (container_ != 0); + assert (_root ()->_node () != 0); + assert (_root ()->_node ()->getOwnerDocument () == + n->getOwnerDocument ()); + + std::auto_ptr<dom_info> r ( + dom_info_factory::create ( + *static_cast<xercesc::DOMAttr*> (n), + *this)); + + dom_info_ = r; + break; + } + default: + { + throw bad_dom_node_type (); + } + } + } + + public: + //@cond + + void + _register_id (const identity& id, type* t) + { + // We should be the root. + // + assert (container_ == 0); + + if (map_.get () == 0) + { + std::auto_ptr<map> tmp (new map); + map_ = tmp; + } + + if (!map_->insert ( + std::pair<const identity*, type*> (&id, t)).second) + { + id.throw_duplicate_id (); + } + } + + //@@ Does not inherit from exception. + // + struct not_registered: std::exception + { + virtual const char* + what () const throw () + { + return "attempt to unregister non-existent id"; + } + }; + + void + _unregister_id (const identity& id) + { + // We should be the root. + // + assert (container_ == 0); + + if (map_.get () == 0 || map_->erase (&id) == 0) + throw not_registered (); + } + + type* + _lookup_id (const identity& id) const + { + if (map_.get ()) + { + map::const_iterator it (map_->find (&id)); + + if (it != map_->end ()) + return it->second; + } + + return 0; + } + + //@endcond + + private: + //@cond + + struct dom_info + { + virtual + ~dom_info () + { + } + + dom_info () + { + } + + virtual std::auto_ptr<dom_info> + clone (type& tree_node, container*) const = 0; + + virtual xercesc::DOMNode* + node () = 0; + + private: + dom_info (const dom_info&); + + dom_info& + operator= (const dom_info&); + }; + + + struct dom_element_info: public dom_info + { + dom_element_info (xercesc::DOMElement& e, type& n, bool root) + : doc_ (0), e_ (e) + { + e_.setUserData (user_data_keys::node, &n, 0); + + if (root) + { + // The caller should have associated a dom::auto_ptr object + // that owns this document with the document node using the + // xml_schema::dom::tree_node_key key. + // + xml::dom::auto_ptr<xercesc::DOMDocument>* pd ( + reinterpret_cast<xml::dom::auto_ptr<xercesc::DOMDocument>*> ( + e.getOwnerDocument ()->getUserData (user_data_keys::node))); + + assert (pd != 0); + assert (pd->get () == e.getOwnerDocument ()); + + doc_ = *pd; // Transfer ownership. + } + } + + virtual std::auto_ptr<dom_info> + clone (type& tree_node, container* c) const + { + using std::auto_ptr; + + // Check if we are a document root. + // + if (c == 0) + { + // We preserver DOM associations only in complete + // copies from root. + // + if (doc_.get () == 0) + return auto_ptr<dom_info> (0); + + return auto_ptr<dom_info> ( + new dom_element_info (*doc_, tree_node)); + } + + // Check if our container does not have DOM association (e.g., + // because it wasn't a complete copy of the tree). + // + using xercesc::DOMNode; + + DOMNode* cn (c->_node ()); + + if (cn == 0) + return auto_ptr<dom_info> (0); + + + // Now we are going to find the corresponding element in + // the new tree. + // + { + using xercesc::DOMElement; + + DOMNode& pn (*e_.getParentNode ()); + assert (pn.getNodeType () == DOMNode::ELEMENT_NODE); + + DOMNode* sn (pn.getFirstChild ()); // Source. + DOMNode* dn (cn->getFirstChild ()); // Destination. + + // We should have at least one child. + // + assert (sn != 0); + + // Move in parallel until we get to the needed node. + // + for (; sn != 0 && !e_.isSameNode (sn);) + { + sn = sn->getNextSibling (); + dn = dn->getNextSibling (); + } + + // e_ should be on the list. + // + assert (sn != 0); + + assert (dn->getNodeType () == DOMNode::ELEMENT_NODE); + + return auto_ptr<dom_info> ( + new dom_element_info (static_cast<DOMElement&> (*dn), + tree_node, + false)); + } + } + + virtual xercesc::DOMNode* + node () + { + return &e_; + } + + private: + dom_element_info (const xercesc::DOMDocument& d, type& n) + : doc_ (static_cast<xercesc::DOMDocument*> ( + d.cloneNode (true))), + e_ (*doc_->getDocumentElement ()) + { + e_.setUserData (user_data_keys::node, &n, 0); + } + + private: + xml::dom::auto_ptr<xercesc::DOMDocument> doc_; + xercesc::DOMElement& e_; + }; + + + struct dom_attribute_info: public dom_info + { + dom_attribute_info (xercesc::DOMAttr& a, type& n) + : a_ (a) + { + a_.setUserData (user_data_keys::node, &n, 0); + } + + virtual std::auto_ptr<dom_info> + clone (type& tree_node, container* c) const + { + using std::auto_ptr; + + // Check if we are a document root. + // + if (c == 0) + { + // We preserver DOM associations only in complete + // copies from root. + // + return auto_ptr<dom_info> (0); + } + + // Check if our container does not have DOM association (e.g., + // because it wasn't a complete copy of the tree). + // + using xercesc::DOMNode; + + DOMNode* cn (c->_node ()); + + if (cn == 0) + return auto_ptr<dom_info> (0); + + // We are going to find the corresponding attribute in + // the new tree. + // + using xercesc::DOMAttr; + using xercesc::DOMElement; + using xercesc::DOMNamedNodeMap; + + DOMElement& p (*a_.getOwnerElement ()); + DOMNamedNodeMap& nl (*p.getAttributes ()); + + XMLSize_t size (nl.getLength ()), i (0); + + // We should have at least one child. + // + assert (size != 0); + + for ( ;i < size && !a_.isSameNode (nl.item (i)); ++i)/*noop*/; + + // a_ should be in the list. + // + assert (i < size); + + DOMNode& n (*cn->getAttributes ()->item (i)); + assert (n.getNodeType () == DOMNode::ATTRIBUTE_NODE); + + return auto_ptr<dom_info> ( + new dom_attribute_info (static_cast<DOMAttr&> (n), tree_node)); + } + + virtual xercesc::DOMNode* + node () + { + return &a_; + } + + private: + xercesc::DOMAttr& a_; + }; + + // For Sun C++ 5.6. + // + struct dom_info_factory; + friend struct _type::dom_info_factory; + + struct dom_info_factory + { + static std::auto_ptr<dom_info> + create (const xercesc::DOMElement& e, type& n, bool root) + { + return std::auto_ptr<dom_info> ( + new dom_element_info ( + const_cast<xercesc::DOMElement&> (e), n, root)); + } + + static std::auto_ptr<dom_info> + create (const xercesc::DOMAttr& a, type& n) + { + return std::auto_ptr<dom_info> ( + new dom_attribute_info ( + const_cast<xercesc::DOMAttr&> (a), n)); + } + }; + + //@endcond + + std::auto_ptr<dom_info> dom_info_; + + + // ID/IDREF map. + // + private: + + //@cond + + struct identity_comparator + { + bool operator () (const identity* x, const identity* y) const + { + return x->before (*y); + } + }; + + //@endcond + + typedef + std::map<const identity*, type*, identity_comparator> + map; + + std::auto_ptr<map> map_; + + private: + container* container_; + }; + + inline _type:: + _type (const type& x, flags, container* c) + : container_ (c) + { + if (x.dom_info_.get ()) + { + std::auto_ptr<dom_info> r (x.dom_info_->clone (*this, c)); + dom_info_ = r; + } + } + + + /** + * @brief Class corresponding to the XML Schema anySimpleType built-in + * type. + * + * @nosubgrouping + */ + template <typename B> + class simple_type: public B + { + public: + /** + * @name Constructors + */ + //@{ + + /** + * @brief Default constructor. + */ + simple_type (); + + /** + * @brief Create an instance from a string. + * + * @param s A string to initialize the instance with. + */ + template <typename C> + simple_type (const C* s); + + public: + /** + * @brief Copy constructor. + * + * @param x An instance to make a copy of. + * @param f Flags to create the copy with. + * @param c A pointer to the object that will contain the copy. + * + * For polymorphic object models use the @c _clone function instead. + */ + simple_type (const simple_type& x, flags f = 0, container* c = 0); + + /** + * @brief Copy the instance polymorphically. + * + * @param f Flags to create the copy with. + * @param c A pointer to the object that will contain the copy. + * @return A pointer to the dynamically allocated copy. + * + * This function ensures that the dynamic type of the instance + * is used for copying and should be used for polymorphic object + * models instead of the copy constructor. + */ + virtual simple_type* + _clone (flags f = 0, container* c = 0) const; + + public: + /** + * @brief Create an instance from a data representation + * stream. + * + * @param s A stream to extract the data from. + * @param f Flags to create the new instance with. + * @param c A pointer to the object that will contain the new + * instance. + */ + template <typename S> + simple_type (istream<S>& s, flags f = 0, container* c = 0); + + /** + * @brief Create an instance from a DOM element. + * + * @param e A DOM element to extract the data from. + * @param f Flags to create the new instance with. + * @param c A pointer to the object that will contain the new + * instance. + */ + simple_type (const xercesc::DOMElement& e, + flags f = 0, + container* c = 0); + + /** + * @brief Create an instance from a DOM Attribute. + * + * @param a A DOM attribute to extract the data from. + * @param f Flags to create the new instance with. + * @param c A pointer to the object that will contain the new + * instance. + */ + simple_type (const xercesc::DOMAttr& a, + flags f = 0, + container* c = 0); + + /** + * @brief Create an instance from a %string fragment. + * + * @param s A %string fragment to extract the data from. + * @param e A pointer to DOM element containing the %string fragment. + * @param f Flags to create the new instance with. + * @param c A pointer to the object that will contain the new + * instance. + */ + template <typename C> + simple_type (const std::basic_string<C>& s, + const xercesc::DOMElement* e, + flags f = 0, + container* c = 0); + //@} + }; + + + /** + * @brief Base class for element types. + * + * This class is a base for every generated element type. + * + * @nosubgrouping + */ + template <typename C, typename T> + class element_type + { + public: + virtual + ~element_type () + { + } + + /** + * @brief Copy the instance polymorphically. + * + * @param f Flags to create the copy with. + * @return A pointer to the dynamically allocated copy. + * + * This function ensures that the dynamic type of the instance + * is used for copying and should be used for polymorphic object + * models instead of the copy constructor. + */ + virtual element_type* + _clone (flags f = 0) const = 0; + + /** + * @brief Return the element name. + * + * @return A read-only string reference containing the element + * name. + */ + virtual const std::basic_string<C>& + _name () const = 0; + + /** + * @brief Return the element namespace. + * + * @return A read-only string reference containing the element + * namespace. Empty string is returned if the element is + * unqualified. + */ + virtual const std::basic_string<C>& + _namespace () const = 0; + + /** + * @brief Return the element value. + * + * @return A pointer to the element value or 0 if the element + * is of a fundamental type. + */ + virtual T* + _value () = 0; + + /** + * @brief Return the element value. + * + * @return A read-only pointer to the element value or 0 if the + * element is of a fundamental type. + */ + virtual const T* + _value () const = 0; + }; + + + //@cond + + // Extra schema type id to disambiguate certain cases where + // different XML Schema types (e.g., double and decimal) are + // mapped to the same fundamental C++ type (e.g., double). + // + struct schema_type + { + enum value + { + other, + double_, + decimal + }; + }; + + //@endcond + + + //@cond + template <typename T, + typename C, + schema_type::value ST = schema_type::other> + struct traits + { + typedef T type; + + static std::auto_ptr<T> + create (const xercesc::DOMElement& e, flags f, container* c) + { + return std::auto_ptr<T> (new T (e, f, c)); + } + + static std::auto_ptr<T> + create (const xercesc::DOMAttr& a, flags f, container* c) + { + return std::auto_ptr<T> (new T (a, f, c)); + } + + static std::auto_ptr<T> + create (const std::basic_string<C>& s, + const xercesc::DOMElement* e, + flags f, + container* c) + { + return std::auto_ptr<T> (new T (s, e, f, c)); + } + }; + + //@endcond + + + /** + * @brief Class template that emulates inheritance from a + * fundamental C++ type. + * + * @nosubgrouping + */ + template <typename T, + typename C, + typename B, + schema_type::value ST = schema_type::other> + class fundamental_base: public B + { + public: + /** + * @name Constructors + */ + //@{ + + /** + * @brief Default constructor. + */ + fundamental_base () + : facet_table_ (0), x_ () + { + } + + /** + * @brief Initialize an instance with an underlying type value. + * + * @param x An underlying type value. + */ + fundamental_base (T x) + : facet_table_ (0), x_ (x) + { + } + + public: + /** + * @brief Copy constructor. + * + * @param x An instance to make a copy of. + * @param f Flags to create the copy with. + * @param c A pointer to the object that will contain the copy. + * + * For polymorphic object models use the @c _clone function instead. + */ + fundamental_base (const fundamental_base& x, + flags f = 0, + container* c = 0) + : B (x, f, c), facet_table_ (0), x_ (x.x_) + { + } + + /** + * @brief Copy the instance polymorphically. + * + * @param f Flags to create the copy with. + * @param c A pointer to the object that will contain the copy. + * @return A pointer to the dynamically allocated copy. + * + * This function ensures that the dynamic type of the instance + * is used for copying and should be used for polymorphic object + * models instead of the copy constructor. + */ + virtual fundamental_base* + _clone (flags f = 0, container* c = 0) const; + + public: + /** + * @brief Create an instance from a data representation + * stream. + * + * @param s A stream to extract the data from. + * @param f Flags to create the new instance with. + * @param c A pointer to the object that will contain the new + * instance. + */ + template <typename S> + fundamental_base (istream<S>& s, flags f = 0, container* c = 0); + + /** + * @brief Create an instance from a DOM element. + * + * @param e A DOM element to extract the data from. + * @param f Flags to create the new instance with. + * @param c A pointer to the object that will contain the new + * instance. + */ + fundamental_base (const xercesc::DOMElement& e, + flags f = 0, + container* c = 0); + + /** + * @brief Create an instance from a DOM Attribute. + * + * @param a A DOM attribute to extract the data from. + * @param f Flags to create the new instance with. + * @param c A pointer to the object that will contain the new + * instance. + */ + fundamental_base (const xercesc::DOMAttr& a, + flags f = 0, + container* c = 0); + + /** + * @brief Create an instance from a %string fragment. + * + * @param s A %string fragment to extract the data from. + * @param e A pointer to DOM element containing the %string fragment. + * @param f Flags to create the new instance with. + * @param c A pointer to the object that will contain the new + * instance. + */ + fundamental_base (const std::basic_string<C>& s, + const xercesc::DOMElement* e, + flags f = 0, + container* c = 0); + //@} + + public: + /** + * @brief Assign an underlying type value to the instance. + * + * @param x An underlying type value. + * @return A reference to the instance. + */ + fundamental_base& + operator= (const T& x) + { + if (&x_ != &x) + x_ = x; + + return *this; + } + + public: + /** + * @brief Implicitly convert the instance to constant reference to + * the underlying type. + * + * @return A constant reference to the underlying type. + */ + operator const T& () const + { + return x_; + } + + /** + * @brief Implicitly convert the instance to reference to the + * underlying type. + * + * @return A reference to the underlying type. + */ + operator T& () + { + return x_; + } + + // The following extra conversion operators causes problems on + // some compilers (notably VC 7.1 and 9.0) and are disabled by + // default. + // +#ifdef XSD_TREE_EXTRA_FUND_CONV + /** + * @brief Implicitly convert the instance to another type (const + * version). + * + * @return A value converted to the target type. + */ + template <typename T2> + operator T2 () const + { + return x_; + } + + /** + * @brief Implicitly convert the instance to another type. + * + * @return A value converted to the target type. + */ + template <typename T2> + operator T2 () + { + return x_; + } +#endif // XSD_TREE_EXTRA_FUND_CONV + + public: + /** + * @brief Get the facet table associated with this type. + * + * @return A pointer to read-only facet table or 0. + */ + const facet* + _facet_table () const + { + return facet_table_; + } + + protected: + /** + * @brief Set the facet table associated with this type. + * + * @param ft A pointer to read-only facet table. + */ + void + _facet_table (const facet* ft) + { + facet_table_ = ft; + } + + private: + const facet* facet_table_; + T x_; + }; + + // While thse operators are not normally necessary, they + // help resolve ambiguities between implicit conversion and + // construction. + // + + /** + * @brief %fundamental_base comparison operator. + * + * @return True if the underlying values are equal, false otherwise. + */ + template <typename T, typename C, typename B, schema_type::value ST> + inline bool + operator== (const fundamental_base<T, C, B, ST>& x, + const fundamental_base<T, C, B, ST>& y) + { + T x_ (x); + T y_ (y); + return x_ == y_; + } + + /** + * @brief %fundamental_base comparison operator. + * + * @return True if the underlying values are not equal, false otherwise. + */ + template <typename T, typename C, typename B, schema_type::value ST> + inline bool + operator!= (const fundamental_base<T, C, B, ST>& x, + const fundamental_base<T, C, B, ST>& y) + { + T x_ (x); + T y_ (y); + return x_ != y_; + } + + + //@cond + + // Comparator for enum tables. + // + template <typename C> + struct enum_comparator + { + enum_comparator (const C* const* table) + : table_ (table) + { + } + + bool + operator() (std::size_t i, const std::basic_string<C>& s) const + { + return table_[i] < s; + } + + bool + operator() (const std::basic_string<C>& s, std::size_t i) const + { + return s < table_[i]; + } + + bool + operator() (std::size_t i, std::size_t j) const + { + return std::basic_string<C> (table_[i]) < table_[j]; + } + + private: + const C* const* table_; + }; + + //@endcond + } + } +} + +#include <xsd/cxx/tree/elements.ixx> +#include <xsd/cxx/tree/elements.txx> + +#endif // XSD_CXX_TREE_ELEMENTS_HXX diff --git a/xsd/libxsd/xsd/cxx/tree/elements.ixx b/xsd/libxsd/xsd/cxx/tree/elements.ixx new file mode 100644 index 0000000..e4dd60a --- /dev/null +++ b/xsd/libxsd/xsd/cxx/tree/elements.ixx @@ -0,0 +1,29 @@ +// file : xsd/cxx/tree/elements.ixx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +namespace xsd +{ + namespace cxx + { + namespace tree + { + // simple_type + // + + template <typename B> + inline simple_type<B>:: + simple_type () + { + } + + template <typename B> + template <typename C> + inline simple_type<B>:: + simple_type (const C*) + { + } + } + } +} diff --git a/xsd/libxsd/xsd/cxx/tree/elements.txx b/xsd/libxsd/xsd/cxx/tree/elements.txx new file mode 100644 index 0000000..084cb56 --- /dev/null +++ b/xsd/libxsd/xsd/cxx/tree/elements.txx @@ -0,0 +1,57 @@ +// file : xsd/cxx/tree/elements.txx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <xercesc/util/XMLUniDefs.hpp> + +namespace xsd +{ + namespace cxx + { + namespace tree + { + // user_data_keys_template + // + template <int dummy> + const XMLCh user_data_keys_template<dummy>::node[21] = + {xercesc::chLatin_x, xercesc::chLatin_s, xercesc::chLatin_d, // xsd + xercesc::chColon, xercesc::chColon, // :: + xercesc::chLatin_c, xercesc::chLatin_x, xercesc::chLatin_x, // cxx + xercesc::chColon, xercesc::chColon, // :: + xercesc::chLatin_t, xercesc::chLatin_r, xercesc::chLatin_e, // tre + xercesc::chLatin_e, xercesc::chColon, xercesc::chColon, // e:: + xercesc::chLatin_n, xercesc::chLatin_o, xercesc::chLatin_d, // nod + xercesc::chLatin_e, xercesc::chNull // e\0 + }; + + + // simple_type + // + template <typename B> + simple_type<B>:: + simple_type (const simple_type& other, + flags f, + container* c) + : B (other, f, c) + { + } + + template <typename B> + simple_type<B>* simple_type<B>:: + _clone (flags f, container* c) const + { + return new simple_type (*this, f, c); + } + + // fundamental_base + // + template <typename T, typename C, typename B, schema_type::value ST> + fundamental_base<T, C, B, ST>* fundamental_base<T, C, B, ST>:: + _clone (flags f, container* c) const + { + return new fundamental_base (*this, f, c); + } + } + } +} diff --git a/xsd/libxsd/xsd/cxx/tree/error-handler.hxx b/xsd/libxsd/xsd/cxx/tree/error-handler.hxx new file mode 100644 index 0000000..6e4426b --- /dev/null +++ b/xsd/libxsd/xsd/cxx/tree/error-handler.hxx @@ -0,0 +1,62 @@ +// file : xsd/cxx/tree/error-handler.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_CXX_TREE_ERROR_HANDLER_HXX +#define XSD_CXX_TREE_ERROR_HANDLER_HXX + +#include <xsd/cxx/xml/error-handler.hxx> + +#include <xsd/cxx/tree/exceptions.hxx> + +namespace xsd +{ + namespace cxx + { + namespace tree + { + template <typename C> + class error_handler: public xml::error_handler<C> + { + public: + typedef typename xml::error_handler<C>::severity severity; + + error_handler () + : failed_ (false) + { + } + + virtual bool + handle (const std::basic_string<C>& id, + unsigned long line, + unsigned long column, + severity, + const std::basic_string<C>& message); + + template <typename E> + void + throw_if_failed () const + { + if (failed_) + throw E (diagnostics_); + } + + void + reset () + { + failed_ = false; + diagnostics_.clear (); + } + + private: + bool failed_; + diagnostics<C> diagnostics_; + }; + } + } +} + +#include <xsd/cxx/tree/error-handler.txx> + +#endif // XSD_CXX_TREE_ERROR_HANDLER_HXX diff --git a/xsd/libxsd/xsd/cxx/tree/error-handler.txx b/xsd/libxsd/xsd/cxx/tree/error-handler.txx new file mode 100644 index 0000000..c19d354 --- /dev/null +++ b/xsd/libxsd/xsd/cxx/tree/error-handler.txx @@ -0,0 +1,32 @@ +// file : xsd/cxx/tree/error-handler.txx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +namespace xsd +{ + namespace cxx + { + namespace tree + { + template <typename C> + bool error_handler<C>:: + handle (const std::basic_string<C>& id, + unsigned long line, + unsigned long column, + severity s, + const std::basic_string<C>& message) + { + diagnostics_.push_back ( + error<C> (s == severity::warning + ? tree::severity::warning + : tree::severity::error, id, line, column, message)); + + if (!failed_ && s != severity::warning) + failed_ = true; + + return true; + } + } + } +} diff --git a/xsd/libxsd/xsd/cxx/tree/exceptions.hxx b/xsd/libxsd/xsd/cxx/tree/exceptions.hxx new file mode 100644 index 0000000..f6ddb15 --- /dev/null +++ b/xsd/libxsd/xsd/cxx/tree/exceptions.hxx @@ -0,0 +1,1034 @@ +// file : xsd/cxx/tree/exceptions.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +/** + * @file + * + * @brief Contains exception definitions for the C++/Tree mapping. + * + * This is an internal header and is included by the generated code. + * You normally should not include it directly. + * + */ + +#ifndef XSD_CXX_TREE_EXCEPTIONS_HXX +#define XSD_CXX_TREE_EXCEPTIONS_HXX + +#include <string> +#include <vector> +#include <ostream> + +#include <xsd/cxx/exceptions.hxx> // xsd::cxx::exception + +namespace xsd +{ + namespace cxx + { + /** + * @brief C++/Tree mapping runtime namespace. + * + * This is an internal namespace and normally should not be referenced + * directly. Instead you should use the aliases for types in this + * namespaces that are created in the generated code. + * + */ + namespace tree + { + /** + * @brief Root of the C++/Tree %exception hierarchy. + * + * You can catch this %exception in order to handle all C++/Tree + * errors. + * + * @nosubgrouping + */ + template <typename C> + class exception: public xsd::cxx::exception + { + public: + /** + * @brief Stream insertion operator for %exception. + */ + friend + std::basic_ostream<C>& + operator<< (std::basic_ostream<C>& os, const exception& e) + { + e.print (os); + return os; + } + + protected: + //@cond + + virtual void + print (std::basic_ostream<C>&) const = 0; + + //@endcond + }; + + + /** + * @brief Error %severity. + * + * @nosubgrouping + */ + class severity + { + public: + /** + * @brief Underlying enum type. + */ + enum value + { + /** + * @brief Indicates the warning condition. + */ + warning, + + /** + * @brief Indicates the %error condition. + */ + error + }; + + /** + * @brief Initialize an instance with the underlying enum value. + * + * @param v An underlying enum value. + */ + severity (value v) : v_ (v) {} + + /** + * @brief Implicitly convert the instance to the underlying enum + * value. + * + * @return The underlying enum value. + */ + operator value () const { return v_; } + + private: + value v_; + }; + + /** + * @brief Error condition. + * + * @nosubgrouping + */ + template <typename C> + class error + { + public: + /** + * @brief Initialize an instance with %error description. + * + * @param s An %error %severity. + * @param res_id A resource %id where the %error occurred. + * @param line A line number where the %error occurred. + * @param column A column number where the %error occurred. + * @param message A message describing the %error. + */ + error (tree::severity s, + const std::basic_string<C>& res_id, + unsigned long line, + unsigned long column, + const std::basic_string<C>& message); + + /** + * @brief Get %error %severity. + * + * @return The %severity of this %error. + */ + tree::severity + severity () const + { + return severity_; + } + + /** + * @brief Get resource %id. + * + * @return The %id of the resource where this %error occurred. + */ + const std::basic_string<C>& + id () const + { + return id_; + } + + /** + * @brief Get %error line. + * + * @return The line number where this %error occurred. + */ + unsigned long + line () const + { + return line_; + } + + /** + * @brief Get %error column. + * + * @return The column number where this %error occurred. + */ + unsigned long + column () const + { + return column_; + } + + /** + * @brief Get %error message. + * + * @return The message for this %error. + */ + const std::basic_string<C>& + message () const + { + return message_; + } + + //@cond + + // Default c-tor that shouldn't be. Needed when we completely + // instantiate std::vector in diagnostics below. + // + error (); + + //@endcond + + + private: + tree::severity severity_; + std::basic_string<C> id_; + unsigned long line_; + unsigned long column_; + std::basic_string<C> message_; + }; + + // See exceptions.ixx for operator<< (error). + + + /** + * @brief List of %error conditions. + * + * @nosubgrouping + */ + template <typename C> + class diagnostics: public std::vector<error<C> > + { + }; + + // See exceptions.ixx for operator<< (diagnostics). + + /** + * @brief Exception indicating a %parsing failure. + * + * @nosubgrouping + */ + template <typename C> + class parsing: public exception<C> + { + public: + virtual + ~parsing () throw (); + + /** + * @brief Default constructor. + */ + parsing (); + + /** + * @brief Initialize an instance with a %list of %error conditions. + * + * @param d A %list of %error conditions. + */ + parsing (const tree::diagnostics<C>& d); + + public: + /** + * @brief Get the %list of %error conditions. + * + * @return The %list of %error conditions. + */ + const tree::diagnostics<C>& + diagnostics () const + { + return diagnostics_; + } + + /** + * @brief Get %exception description. + * + * @return A C %string describing the %exception. + */ + virtual const char* + what () const throw (); + + protected: + //@cond + + virtual void + print (std::basic_ostream<C>&) const; + + //@endcond + + private: + tree::diagnostics<C> diagnostics_; + }; + + + /** + * @brief Exception indicating that an expected element was not + * encountered. + * + * @nosubgrouping + */ + template <typename C> + class expected_element: public exception<C> + { + public: + virtual + ~expected_element () throw (); + + /** + * @brief Initialize an instance with the expected element + * description. + * + * @param name A name of the expected element. + * @param ns A namespace of the expected element. + */ + expected_element (const std::basic_string<C>& name, + const std::basic_string<C>& ns); + + + public: + /** + * @brief Get the name of the expected element. + * + * @return The name of the expected element. + */ + const std::basic_string<C>& + name () const + { + return name_; + } + + /** + * @brief Get the namespace of the expected element. + * + * @return The namespace of the expected element. + */ + const std::basic_string<C>& + namespace_ () const + { + return namespace__; + } + + /** + * @brief Get %exception description. + * + * @return A C %string describing the %exception. + */ + virtual const char* + what () const throw (); + + protected: + //@cond + + virtual void + print (std::basic_ostream<C>&) const; + + //@endcond + + private: + std::basic_string<C> name_; + std::basic_string<C> namespace__; + }; + + + /** + * @brief Exception indicating that an unexpected element was + * encountered. + * + * @nosubgrouping + */ + template <typename C> + class unexpected_element: public exception<C> + { + public: + virtual + ~unexpected_element () throw (); + + /** + * @brief Initialize an instance with the encountered and expected + * element descriptions. + * + * @param encountered_name A name of the encountered element. + * @param encountered_ns A namespace of the encountered element. + * @param expected_name A name of the expected element. + * @param expected_ns A namespace of the expected element. + */ + unexpected_element (const std::basic_string<C>& encountered_name, + const std::basic_string<C>& encountered_ns, + const std::basic_string<C>& expected_name, + const std::basic_string<C>& expected_ns); + + public: + /** + * @brief Get the name of the encountered element. + * + * @return The name of the encountered element. + */ + const std::basic_string<C>& + encountered_name () const + { + return encountered_name_; + } + + /** + * @brief Get the namespace of the encountered element. + * + * @return The namespace of the encountered element. + */ + const std::basic_string<C>& + encountered_namespace () const + { + return encountered_namespace_; + } + + /** + * @brief Get the name of the expected element. + * + * @return The name of the expected element. + */ + const std::basic_string<C>& + expected_name () const + { + return expected_name_; + } + + /** + * @brief Get the namespace of the expected element. + * + * @return The namespace of the expected element. + */ + const std::basic_string<C>& + expected_namespace () const + { + return expected_namespace_; + } + + /** + * @brief Get %exception description. + * + * @return A C %string describing the %exception. + */ + virtual const char* + what () const throw (); + + protected: + //@cond + + virtual void + print (std::basic_ostream<C>&) const; + + //@endcond + + private: + std::basic_string<C> encountered_name_; + std::basic_string<C> encountered_namespace_; + std::basic_string<C> expected_name_; + std::basic_string<C> expected_namespace_; + }; + + + /** + * @brief Exception indicating that an expected attribute was not + * encountered. + * + * @nosubgrouping + */ + template <typename C> + class expected_attribute: public exception<C> + { + public: + virtual + ~expected_attribute () throw (); + + /** + * @brief Initialize an instance with the expected attribute + * description. + * + * @param name A name of the expected attribute. + * @param ns A namespace of the expected attribute. + */ + expected_attribute (const std::basic_string<C>& name, + const std::basic_string<C>& ns); + + public: + /** + * @brief Get the name of the expected attribute. + * + * @return The name of the expected attribute. + */ + const std::basic_string<C>& + name () const + { + return name_; + } + + /** + * @brief Get the namespace of the expected attribute. + * + * @return The namespace of the expected attribute. + */ + const std::basic_string<C>& + namespace_ () const + { + return namespace__; + } + + /** + * @brief Get %exception description. + * + * @return A C %string describing the %exception. + */ + virtual const char* + what () const throw (); + + protected: + //@cond + + virtual void + print (std::basic_ostream<C>&) const; + + //@endcond + + private: + std::basic_string<C> name_; + std::basic_string<C> namespace__; + }; + + + /** + * @brief Exception indicating that an unexpected enumerator was + * encountered. + * + * @nosubgrouping + */ + template <typename C> + class unexpected_enumerator: public exception<C> + { + public: + virtual + ~unexpected_enumerator () throw (); + + /** + * @brief Initialize an instance with the encountered enumerator. + * + * @param e A value of the encountered enumerator. + */ + unexpected_enumerator (const std::basic_string<C>& e); + + public: + /** + * @brief Get the value of the encountered enumerator. + * + * @return The value of the encountered enumerator. + */ + const std::basic_string<C>& + enumerator () const + { + return enumerator_; + } + + /** + * @brief Get %exception description. + * + * @return A C %string describing the %exception. + */ + virtual const char* + what () const throw (); + + protected: + //@cond + + virtual void + print (std::basic_ostream<C>&) const; + + //@endcond + + private: + std::basic_string<C> enumerator_; + }; + + + /** + * @brief Exception indicating that the text content was expected + * for an element. + * + * @nosubgrouping + */ + template <typename C> + class expected_text_content: public exception<C> + { + public: + /** + * @brief Get %exception description. + * + * @return A C %string describing the %exception. + */ + virtual const char* + what () const throw (); + + protected: + //@cond + + virtual void + print (std::basic_ostream<C>&) const; + + //@endcond + }; + + + /** + * @brief Exception indicating that the type information is not + * available for a type. + * + * @nosubgrouping + */ + template <typename C> + class no_type_info: public exception<C> + { + public: + virtual + ~no_type_info () throw (); + + /** + * @brief Initialize an instance with the type description. + * + * @param type_name A name of the type. + * @param type_ns A namespace of the type. + */ + no_type_info (const std::basic_string<C>& type_name, + const std::basic_string<C>& type_ns); + + public: + /** + * @brief Get the type name. + * + * @return The type name. + */ + const std::basic_string<C>& + type_name () const + { + return type_name_; + } + + /** + * @brief Get the type namespace. + * + * @return The type namespace. + */ + const std::basic_string<C>& + type_namespace () const + { + return type_namespace_; + } + + /** + * @brief Get %exception description. + * + * @return A C %string describing the %exception. + */ + virtual const char* + what () const throw (); + + protected: + //@cond + + virtual void + print (std::basic_ostream<C>&) const; + + //@endcond + + private: + std::basic_string<C> type_name_; + std::basic_string<C> type_namespace_; + }; + + /** + * @brief Exception indicating that %parsing or %serialization + * information is not available for an element. + * + * @nosubgrouping + */ + template <typename C> + class no_element_info: public exception<C> + { + public: + virtual + ~no_element_info () throw (); + + /** + * @brief Initialize an instance with the element description. + * + * @param element_name An element name. + * @param element_ns An element namespace. + */ + no_element_info (const std::basic_string<C>& element_name, + const std::basic_string<C>& element_ns); + + public: + /** + * @brief Get the element name. + * + * @return The element name. + */ + const std::basic_string<C>& + element_name () const + { + return element_name_; + } + + /** + * @brief Get the element namespace. + * + * @return The element namespace. + */ + const std::basic_string<C>& + element_namespace () const + { + return element_namespace_; + } + + /** + * @brief Get %exception description. + * + * @return A C %string describing the %exception. + */ + virtual const char* + what () const throw (); + + protected: + //@cond + + virtual void + print (std::basic_ostream<C>&) const; + + //@endcond + + private: + std::basic_string<C> element_name_; + std::basic_string<C> element_namespace_; + }; + + /** + * @brief Exception indicating that the types are not related by + * inheritance. + * + * @nosubgrouping + */ + template <typename C> + class not_derived: public exception<C> + { + public: + virtual + ~not_derived () throw (); + + //@cond + + // @@ tmp + // + not_derived () + { + } + + //@endcond + + /** + * @brief Initialize an instance with the type descriptions. + * + * @param base_type_name A name of the base type. + * @param base_type_ns A namespace of the base type. + * @param derived_type_name A name of the derived type. + * @param derived_type_ns A namespace of the derived type. + */ + not_derived (const std::basic_string<C>& base_type_name, + const std::basic_string<C>& base_type_ns, + const std::basic_string<C>& derived_type_name, + const std::basic_string<C>& derived_type_ns); + + public: + /** + * @brief Get the base type name. + * + * @return The base type name. + */ + const std::basic_string<C>& + base_type_name () const + { + return base_type_name_; + } + + /** + * @brief Get the base type namespace. + * + * @return The base type namespace. + */ + const std::basic_string<C>& + base_type_namespace () const + { + return base_type_namespace_; + } + + /** + * @brief Get the derived type name. + * + * @return The derived type name. + */ + const std::basic_string<C>& + derived_type_name () const + { + return derived_type_name_; + } + + /** + * @brief Get the derived type namespace. + * + * @return The derived type namespace. + */ + const std::basic_string<C>& + derived_type_namespace () const + { + return derived_type_namespace_; + } + + /** + * @brief Get %exception description. + * + * @return A C %string describing the %exception. + */ + virtual const char* + what () const throw (); + + protected: + //@cond + + virtual void + print (std::basic_ostream<C>&) const; + + //@endcond + + private: + std::basic_string<C> base_type_name_; + std::basic_string<C> base_type_namespace_; + std::basic_string<C> derived_type_name_; + std::basic_string<C> derived_type_namespace_; + }; + + + /** + * @brief Exception indicating that a duplicate ID value was + * encountered in the object model. + * + * @nosubgrouping + */ + template <typename C> + class duplicate_id: public exception<C> + { + public: + virtual + ~duplicate_id () throw (); + + /** + * @brief Initialize an instance with the offending ID value. + * + * @param id An offending ID value. + */ + duplicate_id (const std::basic_string<C>& id); + + public: + /** + * @brief Get the offending ID value. + * + * @return The offending ID value. + */ + const std::basic_string<C>& + id () const + { + return id_; + } + + /** + * @brief Get %exception description. + * + * @return A C %string describing the %exception. + */ + virtual const char* + what () const throw (); + + protected: + //@cond + + virtual void + print (std::basic_ostream<C>&) const; + + //@endcond + + private: + std::basic_string<C> id_; + }; + + + /** + * @brief Exception indicating a %serialization failure. + * + * @nosubgrouping + */ + template <typename C> + class serialization: public exception<C> + { + public: + virtual + ~serialization () throw (); + + /** + * @brief Default constructor. + */ + serialization (); + + /** + * @brief Initialize an instance with a %list of %error conditions. + * + * @param d A %list of %error conditions. + */ + serialization (const tree::diagnostics<C>& d); + + public: + /** + * @brief Get the %list of %error conditions. + * + * @return The %list of %error conditions. + */ + const tree::diagnostics<C>& + diagnostics () const + { + return diagnostics_; + } + + /** + * @brief Get %exception description. + * + * @return A C %string describing the %exception. + */ + virtual const char* + what () const throw (); + + protected: + //@cond + + virtual void + print (std::basic_ostream<C>&) const; + + //@endcond + + private: + tree::diagnostics<C> diagnostics_; + }; + + + /** + * @brief Exception indicating that a prefix-namespace mapping was + * not provided. + * + * @nosubgrouping + */ + template <typename C> + class no_prefix_mapping: public exception<C> + { + public: + virtual + ~no_prefix_mapping () throw (); + + /** + * @brief Initialize an instance with the prefix for which the + * prefix-namespace mapping was not provided. + * + * @param prefix A prefix. + */ + no_prefix_mapping (const std::basic_string<C>& prefix); + + public: + /** + * @brief Get the prefix for which the prefix-namespace mapping was + * not provided. + * + * @return The prefix. + */ + const std::basic_string<C>& + prefix () const + { + return prefix_; + } + + /** + * @brief Get %exception description. + * + * @return A C %string describing the %exception. + */ + virtual const char* + what () const throw (); + + protected: + //@cond + + virtual void + print (std::basic_ostream<C>&) const; + + //@endcond + + private: + std::basic_string<C> prefix_; + }; + + + /** + * @brief Exception indicating that the size argument exceeds + * the capacity argument. + * + * See the buffer class for details. + * + * @nosubgrouping + */ + template <typename C> + class bounds: public exception<C> + { + public: + /** + * @brief Get %exception description. + * + * @return A C %string describing the %exception. + */ + virtual const char* + what () const throw (); + + protected: + //@cond + + virtual void + print (std::basic_ostream<C>&) const; + + //@endcond + }; + } + } +} + +#include <xsd/cxx/tree/exceptions.txx> + +#endif // XSD_CXX_TREE_EXCEPTIONS_HXX diff --git a/xsd/libxsd/xsd/cxx/tree/exceptions.txx b/xsd/libxsd/xsd/cxx/tree/exceptions.txx new file mode 100644 index 0000000..8262fce --- /dev/null +++ b/xsd/libxsd/xsd/cxx/tree/exceptions.txx @@ -0,0 +1,510 @@ +// file : xsd/cxx/tree/exceptions.txx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <xsd/cxx/tree/bits/literals.hxx> + +namespace xsd +{ + namespace cxx + { + namespace tree + { + // error + // + template <typename C> + error<C>:: + error (tree::severity s, + const std::basic_string<C>& id, + unsigned long line, + unsigned long column, + const std::basic_string<C>& message) + : severity_ (s), + id_ (id), + line_ (line), + column_ (column), + message_ (message) + { + } + + template <typename C> + error<C>:: + error () + : severity_ (tree::severity::error), line_ (0), column_ (0) + { + } + + template <typename C> + std::basic_ostream<C>& + operator<< (std::basic_ostream<C>& os, const error<C>& e) + { + return os << e.id () << C (':') << e.line () << C (':') << e.column () + << (e.severity () == severity::error + ? bits::ex_error_error<C> () + : bits::ex_error_warning<C> ()) << e.message (); + } + + // diagnostics + // + template <typename C> + std::basic_ostream<C>& + operator<< (std::basic_ostream<C>& os, const diagnostics<C>& d) + { + for (typename diagnostics<C>::const_iterator b (d.begin ()), i (b); + i != d.end (); + ++i) + { + if (i != b) + os << C ('\n'); + + os << *i; + } + + return os; + } + + // parsing + // + template <typename C> + parsing<C>:: + ~parsing () throw () + { + } + + template <typename C> + parsing<C>:: + parsing () + { + } + + template <typename C> + parsing<C>:: + parsing (const tree::diagnostics<C>& diagnostics) + : diagnostics_ (diagnostics) + { + } + + template <typename C> + const char* parsing<C>:: + what () const throw () + { + return "instance document parsing failed"; + } + + template <typename C> + void parsing<C>:: + print (std::basic_ostream<C>& os) const + { + if (diagnostics_.empty ()) + os << bits::ex_parsing_msg<C> (); + else + os << diagnostics_; + } + + // expected_element + // + template <typename C> + expected_element<C>:: + ~expected_element () throw () + { + } + + template <typename C> + expected_element<C>:: + expected_element (const std::basic_string<C>& name, + const std::basic_string<C>& namespace_) + : name_ (name), namespace__ (namespace_) + { + } + + template <typename C> + const char* expected_element<C>:: + what () const throw () + { + return "expected element not encountered"; + } + + template <typename C> + void expected_element<C>:: + print (std::basic_ostream<C>& os) const + { + os << bits::ex_eel_expected<C> (); + + if (!namespace_ ().empty ()) + os << namespace_ () << C ('#'); + + os << name () << C ('\''); + } + + // unexpected_element + // + template <typename C> + unexpected_element<C>:: + ~unexpected_element () throw () + { + } + + template <typename C> + unexpected_element<C>:: + unexpected_element (const std::basic_string<C>& encountered_name, + const std::basic_string<C>& encountered_namespace, + const std::basic_string<C>& expected_name, + const std::basic_string<C>& expected_namespace) + : encountered_name_ (encountered_name), + encountered_namespace_ (encountered_namespace), + expected_name_ (expected_name), + expected_namespace_ (expected_namespace) + { + } + + template <typename C> + const char* unexpected_element<C>:: + what () const throw () + { + return "unexpected element encountered"; + } + + template <typename C> + void unexpected_element<C>:: + print (std::basic_ostream<C>& os) const + { + if (!expected_name ().empty ()) + { + os << bits::ex_uel_expected<C> (); + + if (!expected_namespace ().empty ()) + os << expected_namespace () << C ('#'); + + os << expected_name () << bits::ex_uel_instead<C> (); + + if (!encountered_namespace ().empty ()) + os << encountered_namespace () << C ('#'); + + os << encountered_name () << C ('\''); + } + else + { + os << bits::ex_uel_unexpected<C> (); + + if (!encountered_namespace ().empty ()) + os << encountered_namespace () << C ('#'); + + os << encountered_name () << C ('\''); + } + } + + // expected_attribute + // + template <typename C> + expected_attribute<C>:: + ~expected_attribute () throw () + { + } + + template <typename C> + expected_attribute<C>:: + expected_attribute (const std::basic_string<C>& name, + const std::basic_string<C>& namespace_) + : name_ (name), namespace__ (namespace_) + { + } + + template <typename C> + const char* expected_attribute<C>:: + what () const throw () + { + return "expected attribute not encountered"; + } + + template <typename C> + void expected_attribute<C>:: + print (std::basic_ostream<C>& os) const + { + os << bits::ex_eat_expected<C> (); + + if (!namespace_ ().empty ()) + os << namespace_ () << C ('#'); + + os << name () << C ('\''); + } + + // unexpected_enumerator + // + template <typename C> + unexpected_enumerator<C>:: + ~unexpected_enumerator () throw () + { + } + + template <typename C> + unexpected_enumerator<C>:: + unexpected_enumerator (const std::basic_string<C>& enumerator) + : enumerator_ (enumerator) + { + } + + template <typename C> + const char* unexpected_enumerator<C>:: + what () const throw () + { + return "unexpected enumerator encountered"; + } + + template <typename C> + void unexpected_enumerator<C>:: + print (std::basic_ostream<C>& os) const + { + os << bits::ex_uen_unexpected<C> () << enumerator () << C ('\''); + } + + // expected_text_content + // + template <typename C> + const char* expected_text_content<C>:: + what () const throw () + { + return "expected text content"; + } + + template <typename C> + void expected_text_content<C>:: + print (std::basic_ostream<C>& os) const + { + os << bits::ex_etc_msg<C> (); + } + + // no_type_info + // + template <typename C> + no_type_info<C>:: + ~no_type_info () throw () + { + } + + template <typename C> + no_type_info<C>:: + no_type_info (const std::basic_string<C>& type_name, + const std::basic_string<C>& type_namespace) + : type_name_ (type_name), + type_namespace_ (type_namespace) + { + } + + template <typename C> + const char* no_type_info<C>:: + what () const throw () + { + return "no type information available for a type"; + } + + template <typename C> + void no_type_info<C>:: + print (std::basic_ostream<C>& os) const + { + os << bits::ex_nti_no_type_info<C> (); + + if (!type_namespace ().empty ()) + os << type_namespace () << C ('#'); + + os << type_name () << C ('\''); + } + + // no_element_info + // + template <typename C> + no_element_info<C>:: + ~no_element_info () throw () + { + } + + template <typename C> + no_element_info<C>:: + no_element_info (const std::basic_string<C>& element_name, + const std::basic_string<C>& element_namespace) + : element_name_ (element_name), + element_namespace_ (element_namespace) + { + } + + template <typename C> + const char* no_element_info<C>:: + what () const throw () + { + return "no parsing or serialization information available for " + "an element"; + } + + template <typename C> + void no_element_info<C>:: + print (std::basic_ostream<C>& os) const + { + os << bits::ex_nei_no_element_info<C> (); + + if (!element_namespace ().empty ()) + os << element_namespace () << C ('#'); + + os << element_name () << C ('\''); + } + + // not_derived + // + template <typename C> + not_derived<C>:: + ~not_derived () throw () + { + } + + template <typename C> + not_derived<C>:: + not_derived (const std::basic_string<C>& base_type_name, + const std::basic_string<C>& base_type_namespace, + const std::basic_string<C>& derived_type_name, + const std::basic_string<C>& derived_type_namespace) + : base_type_name_ (base_type_name), + base_type_namespace_ (base_type_namespace), + derived_type_name_ (derived_type_name), + derived_type_namespace_ (derived_type_namespace) + { + } + + template <typename C> + const char* not_derived<C>:: + what () const throw () + { + return "type is not derived"; + } + + template <typename C> + void not_derived<C>:: + print (std::basic_ostream<C>& os) const + { + os << bits::ex_nd_type<C> (); + + if (!derived_type_namespace ().empty ()) + os << derived_type_namespace () << C ('#'); + + os << derived_type_name () << bits::ex_nd_not_derived<C> (); + + if (!base_type_namespace ().empty ()) + os << base_type_namespace () << C ('#'); + + os << base_type_name () << C ('\''); + } + + // duplicate_id + // + template <typename C> + duplicate_id<C>:: + ~duplicate_id () throw () + { + } + + template <typename C> + duplicate_id<C>:: + duplicate_id (const std::basic_string<C>& id) + : id_ (id) + { + } + + template <typename C> + const char* duplicate_id<C>:: + what () const throw () + { + return "ID already exist"; + } + + template <typename C> + void duplicate_id<C>:: + print (std::basic_ostream<C>& os) const + { + os << bits::ex_di_id<C> () << id () << bits::ex_di_already_exist<C> (); + } + + // serialization + // + template <typename C> + serialization<C>:: + ~serialization () throw () + { + } + + template <typename C> + serialization<C>:: + serialization () + { + } + + template <typename C> + serialization<C>:: + serialization (const tree::diagnostics<C>& diagnostics) + : diagnostics_ (diagnostics) + { + } + + template <typename C> + const char* serialization<C>:: + what () const throw () + { + return "serialization failed"; + } + + template <typename C> + void serialization<C>:: + print (std::basic_ostream<C>& os) const + { + if (diagnostics_.empty ()) + os << bits::ex_serialization_msg<C> (); + else + os << diagnostics_; + } + + + // no_prefix_mapping + // + template <typename C> + no_prefix_mapping<C>:: + ~no_prefix_mapping () throw () + { + } + + template <typename C> + no_prefix_mapping<C>:: + no_prefix_mapping (const std::basic_string<C>& prefix) + : prefix_ (prefix) + { + } + + template <typename C> + const char* no_prefix_mapping<C>:: + what () const throw () + { + return "no mapping provided for a namespace prefix"; + } + + template <typename C> + void no_prefix_mapping<C>:: + print (std::basic_ostream<C>& os) const + { + os << bits::ex_npm_no_mapping<C> () << prefix () << C ('\''); + } + + + // bounds + // + template <typename C> + const char* bounds<C>:: + what () const throw () + { + return "buffer boundary rules have been violated"; + } + + template <typename C> + void bounds<C>:: + print (std::basic_ostream<C>& os) const + { + os << bits::ex_bounds_msg<C> (); + } + } + } +} diff --git a/xsd/libxsd/xsd/cxx/tree/facet.hxx b/xsd/libxsd/xsd/cxx/tree/facet.hxx new file mode 100644 index 0000000..c4fbcbe --- /dev/null +++ b/xsd/libxsd/xsd/cxx/tree/facet.hxx @@ -0,0 +1,43 @@ +// file : xsd/cxx/tree/facet.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_CXX_TREE_FACET_HXX +#define XSD_CXX_TREE_FACET_HXX + +namespace xsd +{ + namespace cxx + { + namespace tree + { + // We need to keep this type POD in order to be able to create a + // static array. + // + struct facet + { + enum id_type + { + none, + total_digits, + fraction_digits + }; + + id_type id; + unsigned long value; + + static const facet* + find (const facet* facets, facet::id_type id) + { + while (facets->id != id && facets->id != none) + ++facets; + + return facets->id != none ? facets : 0; + } + }; + } + } +} + +#endif // XSD_CXX_TREE_FACET_HXX diff --git a/xsd/libxsd/xsd/cxx/tree/istream-fwd.hxx b/xsd/libxsd/xsd/cxx/tree/istream-fwd.hxx new file mode 100644 index 0000000..a523952 --- /dev/null +++ b/xsd/libxsd/xsd/cxx/tree/istream-fwd.hxx @@ -0,0 +1,21 @@ +// file : xsd/cxx/tree/istream-fwd.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_CXX_TREE_ISTREAM_FWD_HXX +#define XSD_CXX_TREE_ISTREAM_FWD_HXX + +namespace xsd +{ + namespace cxx + { + namespace tree + { + template<typename S> + class istream; + } + } +} + +#endif // XSD_CXX_TREE_ISTREAM_FWD_HXX diff --git a/xsd/libxsd/xsd/cxx/tree/istream.hxx b/xsd/libxsd/xsd/cxx/tree/istream.hxx new file mode 100644 index 0000000..2f8f8cb --- /dev/null +++ b/xsd/libxsd/xsd/cxx/tree/istream.hxx @@ -0,0 +1,258 @@ +// file : xsd/cxx/tree/istream.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_CXX_TREE_ISTREAM_HXX +#define XSD_CXX_TREE_ISTREAM_HXX + +#include <cstddef> // std::size_t + +#include <xsd/cxx/tree/istream-fwd.hxx> + +namespace xsd +{ + namespace cxx + { + namespace tree + { + class istream_common + { + public: + template <typename T> + struct as_size + { + explicit as_size (T& x) : x_ (x) {} + T& x_; + }; + + + // 8-bit + // + template <typename T> + struct as_int8 + { + explicit as_int8 (T& x) : x_ (x) {} + T& x_; + }; + + template <typename T> + struct as_uint8 + { + explicit as_uint8 (T& x) : x_ (x) {} + T& x_; + }; + + + // 16-bit + // + template <typename T> + struct as_int16 + { + explicit as_int16 (T& x) : x_ (x) {} + T& x_; + }; + + template <typename T> + struct as_uint16 + { + explicit as_uint16 (T& x) : x_ (x) {} + T& x_; + }; + + + // 32-bit + // + template <typename T> + struct as_int32 + { + explicit as_int32 (T& x) : x_ (x) {} + T& x_; + }; + + template <typename T> + struct as_uint32 + { + explicit as_uint32 (T& x) : x_ (x) {} + T& x_; + }; + + + // 64-bit + // + template <typename T> + struct as_int64 + { + explicit as_int64 (T& x) : x_ (x) {} + T& x_; + }; + + template <typename T> + struct as_uint64 + { + explicit as_uint64 (T& x) : x_ (x) {} + T& x_; + }; + + + // Boolean + // + template <typename T> + struct as_bool + { + explicit as_bool (T& x) : x_ (x) {} + T& x_; + }; + + + // Floating-point + // + template <typename T> + struct as_float32 + { + explicit as_float32 (T& x) : x_ (x) {} + T& x_; + }; + + template <typename T> + struct as_float64 + { + explicit as_float64 (T& x) : x_ (x) {} + T& x_; + }; + }; + + template<typename S> + class istream: public istream_common + { + public: + explicit + istream (S& s) + : s_ (s) + { + } + + S& + impl () + { + return s_; + } + + private: + istream (const istream&); + istream& + operator= (const istream&); + + private: + S& s_; + }; + + + // 8-bit + // + template <typename S> + inline istream<S>& + operator>> (istream<S>& s, signed char& x) + { + istream_common::as_int8<signed char> as_int8 (x); + return s >> as_int8; + } + + template <typename S> + inline istream<S>& + operator>> (istream<S>& s, unsigned char& x) + { + istream_common::as_uint8<unsigned char> as_uint8 (x); + return s >> as_uint8; + } + + + // 16-bit + // + template <typename S> + inline istream<S>& + operator>> (istream<S>& s, short& x) + { + istream_common::as_int16<short> as_int16 (x); + return s >> as_int16; + } + + template <typename S> + inline istream<S>& + operator>> (istream<S>& s, unsigned short& x) + { + istream_common::as_uint16<unsigned short> as_uint16 (x); + return s >> as_uint16; + } + + + // 32-bit + // + template <typename S> + inline istream<S>& + operator>> (istream<S>& s, int& x) + { + istream_common::as_int32<int> as_int32 (x); + return s >> as_int32; + } + + template <typename S> + inline istream<S>& + operator>> (istream<S>& s, unsigned int& x) + { + istream_common::as_uint32<unsigned int> as_uint32 (x); + return s >> as_uint32; + } + + + // 64-bit + // + template <typename S> + inline istream<S>& + operator>> (istream<S>& s, long long& x) + { + istream_common::as_int64<long long> as_int64 (x); + return s >> as_int64; + } + + template <typename S> + inline istream<S>& + operator>> (istream<S>& s, unsigned long long& x) + { + istream_common::as_uint64<unsigned long long> as_uint64 (x); + return s >> as_uint64; + } + + // Boolean + // + template <typename S> + inline istream<S>& + operator>> (istream<S>& s, bool& x) + { + istream_common::as_bool<bool> as_bool (x); + return s >> as_bool; + } + + + // Floating-point + // + template <typename S> + inline istream<S>& + operator>> (istream<S>& s, float& x) + { + istream_common::as_float32<float> as_float32 (x); + return s >> as_float32; + } + + template <typename S> + inline istream<S>& + operator>> (istream<S>& s, double& x) + { + istream_common::as_float64<double> as_float64 (x); + return s >> as_float64; + } + } + } +} + +#endif // XSD_CXX_TREE_ISTREAM_HXX diff --git a/xsd/libxsd/xsd/cxx/tree/list.hxx b/xsd/libxsd/xsd/cxx/tree/list.hxx new file mode 100644 index 0000000..30636e9 --- /dev/null +++ b/xsd/libxsd/xsd/cxx/tree/list.hxx @@ -0,0 +1,134 @@ +// file : xsd/cxx/tree/list.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_CXX_TREE_LIST_HXX +#define XSD_CXX_TREE_LIST_HXX + +#include <string> + +#include <xercesc/dom/DOMAttr.hpp> +#include <xercesc/dom/DOMElement.hpp> + +#include <xsd/cxx/tree/elements.hxx> // tree::istream +#include <xsd/cxx/tree/istream-fwd.hxx> // tree::istream +#include <xsd/cxx/tree/containers.hxx> // fundamental_p, sequence + +namespace xsd +{ + namespace cxx + { + namespace tree + { + // Class template for xsd:list mapping. Based on the sequence + // template. Note that I cannot get rid of 'fund' because HP + // aCC3 likes it this way. + // + template <typename T, + typename C, + schema_type::value ST = schema_type::other, + bool fund = fundamental_p<T>::r> + class list; + + + // + // + template <typename T, typename C, schema_type::value ST> + class list<T, C, ST, false>: public sequence<T> + { + public: + explicit + list (flags f = 0, container* c = 0) + : sequence<T> (f, c) + { + } + + list (typename sequence<T>::size_type n, + const T& x, + container* c = 0) + : sequence<T> (n, x, c) + { + } + + template<typename I> + list (const I& b, const I& e, container* c = 0) + : sequence<T> (b, e, c) + { + } + + template <typename S> + list (istream<S>&, flags = 0, container* c = 0); + + list (const list<T, C, ST, false>& v, flags f = 0, container* c = 0) + : sequence<T> (v, f, c) + { + } + + public: + list (const xercesc::DOMElement&, flags = 0, container* c = 0); + + list (const xercesc::DOMAttr&, flags = 0, container* c = 0); + + list (const std::basic_string<C>&, + const xercesc::DOMElement*, + flags = 0, + container* c = 0); + + private: + void + init (const std::basic_string<C>&, const xercesc::DOMElement*); + }; + + + // + // + template <typename T, typename C, schema_type::value ST> + class list<T, C, ST, true>: public sequence<T> + { + public: + explicit + list (flags f = 0, container* c = 0) + : sequence<T> (f, c) + { + } + + explicit + list (typename sequence<T>::size_type n, const T& x, container* c = 0) + : sequence<T> (n, x, c) + { + } + + template<typename I> + list (const I& b, const I& e, container* c = 0) + : sequence<T> (b, e, c) + { + } + + template <typename S> + list (istream<S>&, flags = 0, container* c = 0); + + list (const list<T, C, ST, true>& s, flags f = 0, container* c = 0) + : sequence<T> (s, f, c) + { + } + + public: + list (const xercesc::DOMElement&, flags = 0, container* c = 0); + + list (const xercesc::DOMAttr&, flags = 0, container* c = 0); + + list (const std::basic_string<C>&, + const xercesc::DOMElement*, + flags = 0, + container* c = 0); + + private: + void + init (const std::basic_string<C>&, const xercesc::DOMElement*); + }; + } + } +} + +#endif // XSD_CXX_TREE_LIST_HXX diff --git a/xsd/libxsd/xsd/cxx/tree/ostream.hxx b/xsd/libxsd/xsd/cxx/tree/ostream.hxx new file mode 100644 index 0000000..cf2d9ee --- /dev/null +++ b/xsd/libxsd/xsd/cxx/tree/ostream.hxx @@ -0,0 +1,245 @@ +// file : xsd/cxx/tree/ostream.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_CXX_TREE_OSTREAM_HXX +#define XSD_CXX_TREE_OSTREAM_HXX + +#include <cstddef> // std::size_t + +namespace xsd +{ + namespace cxx + { + namespace tree + { + class ostream_common + { + public: + template <typename T> + struct as_size + { + explicit as_size (T x) : x_ (x) {} + T x_; + }; + + + // 8-bit + // + template <typename T> + struct as_int8 + { + explicit as_int8 (T x) : x_ (x) {} + T x_; + }; + + template <typename T> + struct as_uint8 + { + explicit as_uint8 (T x) : x_ (x) {} + T x_; + }; + + + // 16-bit + // + template <typename T> + struct as_int16 + { + explicit as_int16 (T x) : x_ (x) {} + T x_; + }; + + template <typename T> + struct as_uint16 + { + explicit as_uint16 (T x) : x_ (x) {} + T x_; + }; + + + // 32-bit + // + template <typename T> + struct as_int32 + { + explicit as_int32 (T x) : x_ (x) {} + T x_; + }; + + template <typename T> + struct as_uint32 + { + explicit as_uint32 (T x) : x_ (x) {} + T x_; + }; + + + // 64-bit + // + template <typename T> + struct as_int64 + { + explicit as_int64 (T x) : x_ (x) {} + T x_; + }; + + template <typename T> + struct as_uint64 + { + explicit as_uint64 (T x) : x_ (x) {} + T x_; + }; + + + // Boolean + // + template <typename T> + struct as_bool + { + explicit as_bool (T x) : x_ (x) {} + T x_; + }; + + + // Floating-point + // + template <typename T> + struct as_float32 + { + explicit as_float32 (T x) : x_ (x) {} + T x_; + }; + + template <typename T> + struct as_float64 + { + explicit as_float64 (T x) : x_ (x) {} + T x_; + }; + }; + + template<typename S> + class ostream: public ostream_common + { + public: + explicit + ostream (S& s) + : s_ (s) + { + } + + S& + impl () + { + return s_; + } + + private: + ostream (const ostream&); + ostream& + operator= (const ostream&); + + private: + S& s_; + }; + + + // 8-bit + // + template <typename S> + inline ostream<S>& + operator<< (ostream<S>& s, signed char x) + { + return s << ostream_common::as_int8<signed char> (x); + } + + template <typename S> + inline ostream<S>& + operator<< (ostream<S>& s, unsigned char x) + { + return s << ostream_common::as_uint8<unsigned char> (x); + } + + + // 16-bit + // + template <typename S> + inline ostream<S>& + operator<< (ostream<S>& s, short x) + { + return s << ostream_common::as_int16<short> (x); + } + + template <typename S> + inline ostream<S>& + operator<< (ostream<S>& s, unsigned short x) + { + return s << ostream_common::as_uint16<unsigned short> (x); + } + + + // 32-bit + // + template <typename S> + inline ostream<S>& + operator<< (ostream<S>& s, int x) + { + return s << ostream_common::as_int32<int> (x); + } + + template <typename S> + inline ostream<S>& + operator<< (ostream<S>& s, unsigned int x) + { + return s << ostream_common::as_uint32<unsigned int> (x); + } + + + // 64-bit + // + template <typename S> + inline ostream<S>& + operator<< (ostream<S>& s, long long x) + { + return s << ostream_common::as_int64<long long> (x); + } + + template <typename S> + inline ostream<S>& + operator<< (ostream<S>& s, unsigned long long x) + { + return s << ostream_common::as_uint64<unsigned long long> (x); + } + + // Boolean + // + template <typename S> + inline ostream<S>& + operator<< (ostream<S>& s, bool x) + { + return s << ostream_common::as_bool<bool> (x); + } + + + // Floating-point + // + template <typename S> + inline ostream<S>& + operator<< (ostream<S>& s, float x) + { + return s << ostream_common::as_float32<float> (x); + } + + template <typename S> + inline ostream<S>& + operator<< (ostream<S>& s, double x) + { + return s << ostream_common::as_float64<double> (x); + } + } + } +} + +#endif // XSD_CXX_TREE_OSTREAM_HXX diff --git a/xsd/libxsd/xsd/cxx/tree/parsing.hxx b/xsd/libxsd/xsd/cxx/tree/parsing.hxx new file mode 100644 index 0000000..84b3898 --- /dev/null +++ b/xsd/libxsd/xsd/cxx/tree/parsing.hxx @@ -0,0 +1,12 @@ +// file : xsd/cxx/tree/parsing.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_CXX_TREE_PARSING_HXX +#define XSD_CXX_TREE_PARSING_HXX + +#include <xsd/cxx/tree/parsing.txx> +#include <xsd/cxx/tree/parsing/date-time.txx> + +#endif // XSD_CXX_TREE_PARSING_HXX diff --git a/xsd/libxsd/xsd/cxx/tree/parsing.txx b/xsd/libxsd/xsd/cxx/tree/parsing.txx new file mode 100644 index 0000000..db50775 --- /dev/null +++ b/xsd/libxsd/xsd/cxx/tree/parsing.txx @@ -0,0 +1,914 @@ +// file : xsd/cxx/tree/parsing.txx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <string> + +#include <xsd/cxx/ro-string.hxx> // trim + +#include <xsd/cxx/xml/string.hxx> // xml::{string, transcode} +#include <xsd/cxx/xml/elements.hxx> // xml::{prefix, uq_name} +#include <xsd/cxx/xml/bits/literals.hxx> // xml::bits::{xml_prefix, + // xml_namespace} + +#include <xsd/cxx/tree/exceptions.hxx> // no_prefix_mapping +#include <xsd/cxx/tree/elements.hxx> +#include <xsd/cxx/tree/types.hxx> +#include <xsd/cxx/tree/list.hxx> +#include <xsd/cxx/tree/text.hxx> // text_content + +namespace xsd +{ + namespace cxx + { + namespace tree + { + // Note that most of the types implemented here (except string, + // (normalizedString, and base64Binary) cannot have whitespaces + // in the value. As result we don't need to waste time collapsing + // whitespaces. All we need to do is trim the string representation + // which can be done without copying. + // + + // type + // + inline _type:: + _type (const xercesc::DOMElement& e, flags f, container* c) + : dom_info_ (0), container_ (c) + { + if (f & flags::keep_dom) + { + std::auto_ptr<dom_info> r ( + dom_info_factory::create (e, *this, c == 0)); + dom_info_ = r; + } + } + + inline _type:: + _type (const xercesc::DOMAttr& a, flags f, container* c) + : dom_info_ (0), container_ (c) + { + if (f & flags::keep_dom) + { + std::auto_ptr<dom_info> r (dom_info_factory::create (a, *this)); + dom_info_ = r; + } + } + + template <typename C> + inline _type:: + _type (const std::basic_string<C>&, + const xercesc::DOMElement*, + flags, + container* c) + : dom_info_ (0), // List elements don't have associated DOM nodes. + container_ (c) + { + } + + // simple_type + // + template <typename B> + inline simple_type<B>:: + simple_type (const xercesc::DOMElement& e, flags f, container* c) + : B (e, f, c) + { + } + + template <typename B> + inline simple_type<B>:: + simple_type (const xercesc::DOMAttr& a, flags f, container* c) + : B (a, f, c) + { + } + + template <typename B> + template <typename C> + inline simple_type<B>:: + simple_type (const std::basic_string<C>& s, + const xercesc::DOMElement* e, + flags f, + container* c) + : B (s, e, f, c) + { + } + + // fundamental_base + // + template <typename T, typename C, typename B, schema_type::value ST> + fundamental_base<T, C, B, ST>:: + fundamental_base (const xercesc::DOMElement& e, flags f, container* c) + : B (e, f, c), + facet_table_ (0), + x_ (traits<T, C, ST>::create (e, f, c)) + { + } + + template <typename T, typename C, typename B, schema_type::value ST> + fundamental_base<T, C, B, ST>:: + fundamental_base (const xercesc::DOMAttr& a, flags f, container* c) + : B (a, f, c), + facet_table_ (0), + x_ (traits<T, C, ST>::create (a, f, c)) + { + } + + template <typename T, typename C, typename B, schema_type::value ST> + fundamental_base<T, C, B, ST>:: + fundamental_base (const std::basic_string<C>& s, + const xercesc::DOMElement* e, + flags f, + container* c) + : B (s, e, f, c), + facet_table_ (0), + x_ (traits<T, C, ST>::create (s, e, f, c)) + { + } + + + // Parsing c-tors for list. + // + + namespace bits + { + // Find first non-space character. + // + template <typename C> + typename std::basic_string<C>::size_type + find_ns (const C* s, + typename std::basic_string<C>::size_type size, + typename std::basic_string<C>::size_type pos) + { + while (pos < size && + (s[pos] == C (0x20) || // space + s[pos] == C (0x0D) || // carriage return + s[pos] == C (0x09) || // tab + s[pos] == C (0x0A))) + ++pos; + + return pos < size ? pos : std::basic_string<C>::npos; + } + + // Find first space character. + // + template <typename C> + typename std::basic_string<C>::size_type + find_s (const C* s, + typename std::basic_string<C>::size_type size, + typename std::basic_string<C>::size_type pos) + { + while (pos < size && + s[pos] != C (0x20) && // space + s[pos] != C (0x0D) && // carriage return + s[pos] != C (0x09) && // tab + s[pos] != C (0x0A)) + ++pos; + + return pos < size ? pos : std::basic_string<C>::npos; + } + } + + // Individual items of the list have no DOM association. Therefore + // I clear keep_dom from flags. + // + + template <typename T, typename C, schema_type::value ST> + list<T, C, ST, false>:: + list (const xercesc::DOMElement& e, flags f, container* c) + : sequence<T> (flags (f & ~flags::keep_dom), c) // ambiguous + { + init (text_content<C> (e), &e); + } + + template <typename T, typename C, schema_type::value ST> + list<T, C, ST, false>:: + list (const xercesc::DOMAttr& a, flags f, container* c) + : sequence<T> (flags (f & ~flags::keep_dom), c) // ambiguous + { + init (xml::transcode<C> (a.getValue ()), a.getOwnerElement ()); + } + + template <typename T, typename C, schema_type::value ST> + list<T, C, ST, false>:: + list (const std::basic_string<C>& s, + const xercesc::DOMElement* e, + flags f, + container* c) + : sequence<T> (flags (f & ~flags::keep_dom), c) // ambiguous + { + init (s, e); + } + + template <typename T, typename C, schema_type::value ST> + void list<T, C, ST, false>:: + init (const std::basic_string<C>& s, const xercesc::DOMElement* parent) + { + if (s.size () == 0) + return; + + using std::basic_string; + typedef typename sequence<T>::ptr ptr; + typedef typename basic_string<C>::size_type size_type; + + const C* data (s.c_str ()); + size_type size (s.size ()); + + // Traverse the data while logically collapsing spaces. + // + for (size_type i (bits::find_ns<C> (data, size, 0)); + i != basic_string<C>::npos;) + { + size_type j (bits::find_s (data, size, i)); + + if (j != basic_string<C>::npos) + { + ptr r ( + new T (basic_string<C> (data + i, j - i), + parent, + this->flags_, + this->container_)); + + this->v_.push_back (r); + + i = bits::find_ns (data, size, j); + } + else + { + // Last element. + // + ptr r ( + new T (basic_string<C> (data + i, size - i), + parent, + this->flags_, + this->container_)); + + this->v_.push_back (r); + + break; + } + } + } + + template <typename T, typename C, schema_type::value ST> + list<T, C, ST, true>:: + list (const xercesc::DOMElement& e, flags f, container* c) + : sequence<T> (flags (f & ~flags::keep_dom), c) // ambiguous + { + init (text_content<C> (e), &e); + } + + template <typename T, typename C, schema_type::value ST> + inline list<T, C, ST, true>:: + list (const xercesc::DOMAttr& a, flags f, container* c) + : sequence<T> (flags (f & ~flags::keep_dom), c) // ambiguous + { + init (xml::transcode<C> (a.getValue ()), a.getOwnerElement ()); + } + + template <typename T, typename C, schema_type::value ST> + inline list<T, C, ST, true>:: + list (const std::basic_string<C>& s, + const xercesc::DOMElement* parent, + flags f, + container* c) + : sequence<T> (flags (f & ~flags::keep_dom), c) // ambiguous + { + init (s, parent); + } + + template <typename T, typename C, schema_type::value ST> + inline void list<T, C, ST, true>:: + init (const std::basic_string<C>& s, const xercesc::DOMElement* parent) + { + if (s.size () == 0) + return; + + using std::basic_string; + typedef typename basic_string<C>::size_type size_type; + + const C* data (s.c_str ()); + size_type size (s.size ()); + + // Traverse the data while logically collapsing spaces. + // + for (size_type i (bits::find_ns<C> (data, size, 0)); + i != basic_string<C>::npos;) + { + size_type j (bits::find_s (data, size, i)); + + if (j != basic_string<C>::npos) + { + this->push_back ( + traits<T, C, ST>::create ( + basic_string<C> (data + i, j - i), parent, 0, 0)); + + i = bits::find_ns (data, size, j); + } + else + { + // Last element. + // + this->push_back ( + traits<T, C, ST>::create ( + basic_string<C> (data + i, size - i), parent, 0, 0)); + + break; + } + } + } + + + // Parsing c-tors for built-in types. + // + + + // string + // + template <typename C, typename B> + string<C, B>:: + string (const xercesc::DOMElement& e, flags f, container* c) + : B (e, f, c), + base_type (text_content<C> (e)) + { + } + + template <typename C, typename B> + string<C, B>:: + string (const xercesc::DOMAttr& a, flags f, container* c) + : B (a, f, c), + base_type (xml::transcode<C> (a.getValue ())) + { + } + + template <typename C, typename B> + string<C, B>:: + string (const std::basic_string<C>& s, + const xercesc::DOMElement* e, + flags f, + container* c) + : B (s, e, f, c), base_type (s) + { + } + + + // normalized_string + // + template <typename C, typename B> + normalized_string<C, B>:: + normalized_string (const xercesc::DOMElement& e, flags f, container* c) + : base_type (e, f, c) + { + normalize (); + } + + template <typename C, typename B> + normalized_string<C, B>:: + normalized_string (const xercesc::DOMAttr& a, flags f, container* c) + : base_type (a, f, c) + { + normalize (); + } + + template <typename C, typename B> + normalized_string<C, B>:: + normalized_string (const std::basic_string<C>& s, + const xercesc::DOMElement* e, + flags f, + container* c) + : base_type (s, e, f, c) + { + normalize (); + } + + template <typename C, typename B> + void normalized_string<C, B>:: + normalize () + { + typedef typename std::basic_string<C>::size_type size_type; + + size_type size (this->size ()); + + for (size_type i (0); i < size; ++i) + { + C& c ((*this)[i]); + + if (c == C (0x0D) || // carriage return + c == C (0x09) || // tab + c == C (0x0A)) + c = C (0x20); + } + } + + + // token + // + template <typename C, typename B> + token<C, B>:: + token (const xercesc::DOMElement& e, flags f, container* c) + : base_type (e, f, c) + { + collapse (); + } + + template <typename C, typename B> + token<C, B>:: + token (const xercesc::DOMAttr& a, flags f, container* c) + : base_type (a, f, c) + { + collapse (); + } + + template <typename C, typename B> + token<C, B>:: + token (const std::basic_string<C>& s, + const xercesc::DOMElement* e, + flags f, + container* c) + : base_type (s, e, f, c) + { + collapse (); + } + + template <typename C, typename B> + void token<C, B>:: + collapse () + { + // We have all whitespace normilized by our base. We just + // need to collapse them. + // + typedef typename std::basic_string<C>::size_type size_type; + + size_type size (this->size ()), j (0); + bool subs (false), trim (true); + + for (size_type i (0); i < size; ++i) + { + C c ((*this)[i]); + + if (c == C (0x20)) + { + subs = true; + } + else + { + if (subs) + { + subs = false; + + if (!trim) + (*this)[j++] = C (0x20); + } + + if (trim) + trim = false; + + (*this)[j++] = c; + } + } + + this->resize (j); + } + + + // nmtoken + // + template <typename C, typename B> + nmtoken<C, B>:: + nmtoken (const xercesc::DOMElement& e, flags f, container* c) + : base_type (e, f, c) + { + } + + template <typename C, typename B> + nmtoken<C, B>:: + nmtoken (const xercesc::DOMAttr& a, flags f, container* c) + : base_type (a, f, c) + { + } + + template <typename C, typename B> + nmtoken<C, B>:: + nmtoken (const std::basic_string<C>& s, + const xercesc::DOMElement* e, + flags f, + container* c) + : base_type (s, e, f, c) + { + } + + + // nmtokens + // + template <typename C, typename B, typename nmtoken> + nmtokens<C, B, nmtoken>:: + nmtokens (const xercesc::DOMElement& e, flags f, container* c) + : B (e, f, c), base_type (e, f, this) + { + } + + template <typename C, typename B, typename nmtoken> + nmtokens<C, B, nmtoken>:: + nmtokens (const xercesc::DOMAttr& a, flags f, container* c) + : B (a, f, c), base_type (a, f, this) + { + } + + template <typename C, typename B, typename nmtoken> + nmtokens<C, B, nmtoken>:: + nmtokens (const std::basic_string<C>& s, + const xercesc::DOMElement* e, + flags f, + container* c) + : B (s, e, f, c), base_type (s, e, f, this) + { + } + + + // name + // + template <typename C, typename B> + name<C, B>:: + name (const xercesc::DOMElement& e, flags f, container* c) + : base_type (e, f, c) + { + } + + template <typename C, typename B> + name<C, B>:: + name (const xercesc::DOMAttr& a, flags f, container* c) + : base_type (a, f, c) + { + } + + template <typename C, typename B> + name<C, B>:: + name (const std::basic_string<C>& s, + const xercesc::DOMElement* e, + flags f, + container* c) + : base_type (s, e, f, c) + { + } + + + // ncname + // + template <typename C, typename B> + ncname<C, B>:: + ncname (const xercesc::DOMElement& e, flags f, container* c) + : base_type (e, f, c) + { + } + + template <typename C, typename B> + ncname<C, B>:: + ncname (const xercesc::DOMAttr& a, flags f, container* c) + : base_type (a, f, c) + { + } + + template <typename C, typename B> + ncname<C, B>:: + ncname (const std::basic_string<C>& s, + const xercesc::DOMElement* e, + flags f, + container* c) + : base_type (s, e, f, c) + { + } + + + // language + // + template <typename C, typename B> + language<C, B>:: + language (const xercesc::DOMElement& e, flags f, container* c) + : base_type (e, f, c) + { + } + + template <typename C, typename B> + language<C, B>:: + language (const xercesc::DOMAttr& a, flags f, container* c) + : base_type (a, f, c) + { + } + + template <typename C, typename B> + language<C, B>:: + language (const std::basic_string<C>& s, + const xercesc::DOMElement* e, + flags f, + container* c) + : base_type (s, e, f, c) + { + } + + + // id + // + template <typename C, typename B> + id<C, B>:: + id (const xercesc::DOMElement& e, flags f, container* c) + : base_type (e, f, c), identity_ (*this) + { + register_id (); + } + + template <typename C, typename B> + id<C, B>:: + id (const xercesc::DOMAttr& a, flags f, container* c) + : base_type (a, f, c), identity_ (*this) + { + register_id (); + } + + template <typename C, typename B> + id<C, B>:: + id (const std::basic_string<C>& s, + const xercesc::DOMElement* e, + flags f, + container* c) + : base_type (s, e, f, c), identity_ (*this) + { + register_id (); + } + + + // idref + // + template <typename C, typename B, typename T> + idref<C, B, T>:: + idref (const xercesc::DOMElement& e, flags f, container* c) + : base_type (e, f, c), identity_ (*this) + { + } + + template <typename C, typename B, typename T> + idref<C, B, T>:: + idref (const xercesc::DOMAttr& a, flags f, container* c) + : base_type (a, f , c), identity_ (*this) + { + } + + template <typename C, typename B, typename T> + idref<C, B, T>:: + idref (const std::basic_string<C>& s, + const xercesc::DOMElement* e, + flags f, + container* c) + : base_type (s, e, f, c), identity_ (*this) + { + } + + + // idrefs + // + template <typename C, typename B, typename idref> + idrefs<C, B, idref>:: + idrefs (const xercesc::DOMElement& e, flags f, container* c) + : B (e, f, c), base_type (e, f, this) + { + } + + template <typename C, typename B, typename idref> + idrefs<C, B, idref>:: + idrefs (const xercesc::DOMAttr& a, flags f, container* c) + : B (a, f, c), base_type (a, f, this) + { + } + + template <typename C, typename B, typename idref> + idrefs<C, B, idref>:: + idrefs (const std::basic_string<C>& s, + const xercesc::DOMElement* e, + flags f, + container* c) + : B (s, e, f, c), base_type (s, e, f, this) + { + } + + + // uri + // + template <typename C, typename B> + uri<C, B>:: + uri (const xercesc::DOMElement& e, flags f, container* c) + : B (e, f, c), + base_type (trim (text_content<C> (e))) + { + } + + template <typename C, typename B> + uri<C, B>:: + uri (const xercesc::DOMAttr& a, flags f, container* c) + : B (a, f, c), + base_type (trim (xml::transcode<C> (a.getValue ()))) + { + } + + template <typename C, typename B> + uri<C, B>:: + uri (const std::basic_string<C>& s, + const xercesc::DOMElement* e, + flags f, + container* c) + : B (s, e, f, c), base_type (trim (s)) + { + } + + + // qname + // + template <typename C, typename B, typename uri, typename ncname> + qname<C, B, uri, ncname>:: + qname (const xercesc::DOMElement& e, flags f, container* c) + : B (e, f, c) + { + std::basic_string<C> v (trim (text_content<C> (e))); + ns_ = resolve (v, &e); + name_ = xml::uq_name (v); + } + + template <typename C, typename B, typename uri, typename ncname> + qname<C, B, uri, ncname>:: + qname (const xercesc::DOMAttr& a, flags f, container* c) + : B (a, f, c) + { + std::basic_string<C> v (trim (xml::transcode<C> (a.getValue ()))); + ns_ = resolve (v, a.getOwnerElement ()); + name_ = xml::uq_name (v); + } + + template <typename C, typename B, typename uri, typename ncname> + qname<C, B, uri, ncname>:: + qname (const std::basic_string<C>& s, + const xercesc::DOMElement* e, + flags f, + container* c) + : B (s, e, f, c) + { + std::basic_string<C> v (trim (s)); + ns_ = resolve (v, e); + name_ = xml::uq_name (v); + } + + template <typename C, typename B, typename uri, typename ncname> + uri qname<C, B, uri, ncname>:: + resolve (const std::basic_string<C>& s, const xercesc::DOMElement* e) + { + std::basic_string<C> p (xml::prefix (s)); + + if (e) + { + // This code is copied verbatim from xml/dom/elements.hxx. + // + + // 'xml' prefix requires special handling and Xerces folks refuse + // to handle this in DOM so I have to do it myself. + // + if (p == xml::bits::xml_prefix<C> ()) + return xml::bits::xml_namespace<C> (); + + const XMLCh* xns ( + e->lookupNamespaceURI ( + p.empty () ? 0 : xml::string (p).c_str ())); + + if (xns != 0) + return xml::transcode<C> (xns); + else if (p.empty ()) + return std::basic_string<C> (); + } + + throw no_prefix_mapping<C> (p); + } + + + // base64_binary + // + // We are not doing whitespace collapsing since the decode + // functions can handle it like this. + // + template <typename C, typename B> + base64_binary<C, B>:: + base64_binary (const xercesc::DOMElement& e, flags f, container* c) + : B (e, f, c) + { + // This implementation is not optimal. + // + std::basic_string<C> str (trim (text_content<C> (e))); + decode (xml::string (str).c_str ()); + } + + template <typename C, typename B> + base64_binary<C, B>:: + base64_binary (const xercesc::DOMAttr& a, flags f, container* c) + : B (a, f, c) + { + std::basic_string<C> str (trim (xml::transcode<C> (a.getValue ()))); + decode (xml::string (str).c_str ()); + } + + template <typename C, typename B> + base64_binary<C, B>:: + base64_binary (const std::basic_string<C>& s, + const xercesc::DOMElement* e, + flags f, + container* c) + : B (s, e, f, c) + { + std::basic_string<C> str (trim (s)); + decode (xml::string (str).c_str ()); + } + + + // hex_binary + // + template <typename C, typename B> + hex_binary<C, B>:: + hex_binary (const xercesc::DOMElement& e, flags f, container* c) + : B (e, f, c) + { + // This implementation is not optimal. + // + std::basic_string<C> str (trim (text_content<C> (e))); + decode (xml::string (str).c_str ()); + } + + template <typename C, typename B> + hex_binary<C, B>:: + hex_binary (const xercesc::DOMAttr& a, flags f, container* c) + : B (a, f, c) + { + std::basic_string<C> str (trim (xml::transcode<C> (a.getValue ()))); + decode (xml::string (str).c_str ()); + } + + template <typename C, typename B> + hex_binary<C, B>:: + hex_binary (const std::basic_string<C>& s, + const xercesc::DOMElement* e, + flags f, + container* c) + : B (s, e, f, c) + { + std::basic_string<C> str (trim (s)); + decode (xml::string (str).c_str ()); + } + + // entity + // + template <typename C, typename B> + entity<C, B>:: + entity (const xercesc::DOMElement& e, flags f, container* c) + : base_type (e, f, c) + { + } + + template <typename C, typename B> + entity<C, B>:: + entity (const xercesc::DOMAttr& a, flags f, container* c) + : base_type (a, f, c) + { + } + + template <typename C, typename B> + entity<C, B>:: + entity (const std::basic_string<C>& s, + const xercesc::DOMElement* e, + flags f, + container* c) + : base_type (s, e, f, c) + { + } + + + // entities + // + template <typename C, typename B, typename entity> + entities<C, B, entity>:: + entities (const xercesc::DOMElement& e, flags f, container* c) + : B (e, f, c), base_type (e, f, this) + { + } + + template <typename C, typename B, typename entity> + entities<C, B, entity>:: + entities (const xercesc::DOMAttr& a, flags f, container* c) + : B (a, f, c), base_type (a, f, this) + { + } + + template <typename C, typename B, typename entity> + entities<C, B, entity>:: + entities (const std::basic_string<C>& s, + const xercesc::DOMElement* e, + flags f, + container* c) + : B (s, e, f, c), base_type (s, e, f, this) + { + } + } + } +} diff --git a/xsd/libxsd/xsd/cxx/tree/parsing/boolean.hxx b/xsd/libxsd/xsd/cxx/tree/parsing/boolean.hxx new file mode 100644 index 0000000..3dafdaa --- /dev/null +++ b/xsd/libxsd/xsd/cxx/tree/parsing/boolean.hxx @@ -0,0 +1,76 @@ +// file : xsd/cxx/tree/parsing/boolean.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_CXX_TREE_PARSING_BOOLEAN_HXX +#define XSD_CXX_TREE_PARSING_BOOLEAN_HXX + +#include <xsd/cxx/ro-string.hxx> +#include <xsd/cxx/zc-istream.hxx> + +#include <xsd/cxx/xml/string.hxx> // xml::transcode + +#include <xsd/cxx/tree/text.hxx> // text_content +#include <xsd/cxx/tree/bits/literals.hxx> + +namespace xsd +{ + namespace cxx + { + namespace tree + { + template <typename C> + struct traits<bool, C, schema_type::other> + { + typedef bool type; + + static type + create (const xercesc::DOMElement& e, flags f, container* c); + + static type + create (const xercesc::DOMAttr& a, flags f, container* c); + + static type + create (const std::basic_string<C>& s, + const xercesc::DOMElement*, + flags, + container*); + }; + + template <typename C> + bool traits<bool, C, schema_type::other>:: + create (const xercesc::DOMElement& e, flags f, container* c) + { + return create (text_content<C> (e), 0, f, c); + } + + template <typename C> + bool traits<bool, C, schema_type::other>:: + create (const xercesc::DOMAttr& a, flags f, container* c) + { + return create (xml::transcode<C> (a.getValue ()), 0, f, c); + } + + template <typename C> + bool traits<bool, C, schema_type::other>:: + create (const std::basic_string<C>& s, + const xercesc::DOMElement*, + flags, + container*) + { + // This type cannot have whitespaces in its values. As result we + // don't need to waste time collapsing whitespaces. All we need to + // do is trim the string representation which can be done without + // copying. + // + ro_string<C> tmp (s); + trim (tmp); + + return tmp == bits::true_<C> () || tmp == bits::one<C> (); + } + } + } +} + +#endif // XSD_CXX_TREE_PARSING_BOOLEAN_HXX diff --git a/xsd/libxsd/xsd/cxx/tree/parsing/byte.hxx b/xsd/libxsd/xsd/cxx/tree/parsing/byte.hxx new file mode 100644 index 0000000..0a127c9 --- /dev/null +++ b/xsd/libxsd/xsd/cxx/tree/parsing/byte.hxx @@ -0,0 +1,80 @@ +// file : xsd/cxx/tree/parsing/byte.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_CXX_TREE_PARSING_BYTE_HXX +#define XSD_CXX_TREE_PARSING_BYTE_HXX + +#include <xsd/cxx/ro-string.hxx> +#include <xsd/cxx/zc-istream.hxx> + +#include <xsd/cxx/xml/string.hxx> // xml::transcode + +#include <xsd/cxx/tree/text.hxx> // text_content + +namespace xsd +{ + namespace cxx + { + namespace tree + { + template <typename C> + struct traits<signed char, C, schema_type::other> + { + typedef signed char type; + + static type + create (const xercesc::DOMElement& e, flags f, container* c); + + static type + create (const xercesc::DOMAttr& a, flags f, container* c); + + static type + create (const std::basic_string<C>& s, + const xercesc::DOMElement*, + flags, + container*); + }; + + template <typename C> + signed char traits<signed char, C, schema_type::other>:: + create (const xercesc::DOMElement& e, flags f, container* c) + { + return create (text_content<C> (e), 0, f, c); + } + + template <typename C> + signed char traits<signed char, C, schema_type::other>:: + create (const xercesc::DOMAttr& a, flags f, container* c) + { + return create (xml::transcode<C> (a.getValue ()), 0, f, c); + } + + template <typename C> + signed char traits<signed char, C, schema_type::other>:: + create (const std::basic_string<C>& s, + const xercesc::DOMElement*, + flags, + container*) + { + // This type cannot have whitespaces in its values. As result we + // don't need to waste time collapsing whitespaces. All we need to + // do is trim the string representation which can be done without + // copying. + // + ro_string<C> tmp (s); + trim (tmp); + + zc_istream<C> is (tmp); + + short t; + is >> t; + + return static_cast<type> (t); + } + } + } +} + +#endif // XSD_CXX_TREE_PARSING_BYTE_HXX diff --git a/xsd/libxsd/xsd/cxx/tree/parsing/date-time.txx b/xsd/libxsd/xsd/cxx/tree/parsing/date-time.txx new file mode 100644 index 0000000..913786c --- /dev/null +++ b/xsd/libxsd/xsd/cxx/tree/parsing/date-time.txx @@ -0,0 +1,702 @@ +// file : xsd/cxx/tree/parsing/date-time.txx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <xsd/cxx/ro-string.hxx> +#include <xsd/cxx/zc-istream.hxx> + +#include <xsd/cxx/xml/string.hxx> // xml::transcode + +#include <xsd/cxx/tree/text.hxx> // text_content + +namespace xsd +{ + namespace cxx + { + namespace tree + { + // time_zone + // + template <typename C> + void time_zone:: + zone_parse (const C* s, std::size_t n) + { + // time_zone := Z|(+|-)HH:MM + // + if (n == 0) + { + return; + } + else if (s[0] == C ('Z')) + { + hours_ = 0; + minutes_ = 0; + present_ = true; + } + else if (n == 6) + { + // Parse hours. + // + hours_ = 10 * (s[1] - C ('0')) + (s[2] - C ('0')); + + // Parse minutes. + // + minutes_ = 10 * (s[4] - C ('0')) + (s[5] - C ('0')); + + if (s[0] == C ('-')) + { + hours_ = -hours_; + minutes_ = -minutes_; + } + present_ = true; + } + } + + // gday + // + template <typename C, typename B> + gday<C, B>:: + gday (const xercesc::DOMElement& e, flags f, container* c) + : B (e, f, c) + { + parse (text_content<C> (e)); + } + + template <typename C, typename B> + gday<C, B>:: + gday (const xercesc::DOMAttr& a, flags f, container* c) + : B (a, f, c) + { + parse (xml::transcode<C> (a.getValue ())); + } + + template <typename C, typename B> + gday<C, B>:: + gday (const std::basic_string<C>& s, + const xercesc::DOMElement* e, + flags f, + container* c) + : B (s, e, f, c) + { + parse (s); + } + + template <typename C, typename B> + void gday<C, B>:: + parse (const std::basic_string<C>& str) + { + typedef typename ro_string<C>::size_type size_type; + + ro_string<C> tmp (str); + size_type n (trim (tmp)); + const C* s (tmp.data ()); + + // gday := ---DD[Z|(+|-)HH:MM] + // + if (n >= 5) + { + day_ = 10 * (s[3] - C ('0')) + (s[4] - C ('0')); + + if (n > 5) + zone_parse (s + 5, n - 5); + } + } + + // gmonth + // + template <typename C, typename B> + gmonth<C, B>:: + gmonth (const xercesc::DOMElement& e, flags f, container* c) + : B (e, f, c) + { + parse (text_content<C> (e)); + } + + template <typename C, typename B> + gmonth<C, B>:: + gmonth (const xercesc::DOMAttr& a, flags f, container* c) + : B (a, f, c) + { + parse (xml::transcode<C> (a.getValue ())); + } + + template <typename C, typename B> + gmonth<C, B>:: + gmonth (const std::basic_string<C>& s, + const xercesc::DOMElement* e, + flags f, + container* c) + : B (s, e, f, c) + { + parse (s); + } + + template <typename C, typename B> + void gmonth<C, B>:: + parse (const std::basic_string<C>& str) + { + typedef typename ro_string<C>::size_type size_type; + + ro_string<C> tmp (str); + size_type n (trim (tmp)); + const C* s (tmp.data ()); + + // gmonth := --MM[Z|(+|-)HH:MM] + // + if (n >= 4) + { + month_ = 10 * (s[2] - C ('0')) + (s[3] - C ('0')); + + if (n > 4) + zone_parse (s + 4, n - 4); + } + } + + // gyear + // + template <typename C, typename B> + gyear<C, B>:: + gyear (const xercesc::DOMElement& e, flags f, container* c) + : B (e, f, c) + { + parse (text_content<C> (e)); + } + + template <typename C, typename B> + gyear<C, B>:: + gyear (const xercesc::DOMAttr& a, flags f, container* c) + : B (a, f, c) + { + parse (xml::transcode<C> (a.getValue ())); + } + + template <typename C, typename B> + gyear<C, B>:: + gyear (const std::basic_string<C>& s, + const xercesc::DOMElement* e, + flags f, + container* c) + : B (s, e, f, c) + { + parse (s); + } + + template <typename C, typename B> + void gyear<C, B>:: + parse (const std::basic_string<C>& str) + { + typedef typename ro_string<C>::size_type size_type; + + ro_string<C> tmp (str); + size_type n (trim (tmp)); + const C* s (tmp.data ()); + + // gyear := [-]CCYY[N]*[Z|(+|-)HH:MM] + // + if (n >= 4) + { + // Find the end of the year token. + // + size_type pos (4); + for (; pos < n; ++pos) + { + C c (s[pos]); + + if (c == C ('Z') || c == C ('+') || c == C ('-')) + break; + } + + ro_string<C> year_fragment (s, pos); + zc_istream<C> is (year_fragment); + is >> year_; + + if (pos < n) + zone_parse (s + pos, n - pos); + } + } + + // gmonth_day + // + template <typename C, typename B> + gmonth_day<C, B>:: + gmonth_day (const xercesc::DOMElement& e, flags f, container* c) + : B (e, f, c) + { + parse (text_content<C> (e)); + } + + template <typename C, typename B> + gmonth_day<C, B>:: + gmonth_day (const xercesc::DOMAttr& a, flags f, container* c) + : B (a, f, c) + { + parse (xml::transcode<C> (a.getValue ())); + } + + template <typename C, typename B> + gmonth_day<C, B>:: + gmonth_day (const std::basic_string<C>& s, + const xercesc::DOMElement* e, + flags f, + container* c) + : B (s, e, f, c) + { + parse (s); + } + + template <typename C, typename B> + void gmonth_day<C, B>:: + parse (const std::basic_string<C>& str) + { + typedef typename ro_string<C>::size_type size_type; + + ro_string<C> tmp (str); + size_type n (trim (tmp)); + const C* s (tmp.data ()); + + // gmonth_day := --MM-DD[Z|(+|-)HH:MM] + // + if (n >= 7) + { + month_ = 10 * (s[2] - C ('0')) + (s[3] - C ('0')); + day_ = 10 * (s[5] - C ('0')) + (s[6] - C ('0')); + + if (n > 7) + zone_parse (s + 7, n - 7); + } + } + + // gyear_month + // + template <typename C, typename B> + gyear_month<C, B>:: + gyear_month (const xercesc::DOMElement& e, flags f, container* c) + : B (e, f, c) + { + parse (text_content<C> (e)); + } + + template <typename C, typename B> + gyear_month<C, B>:: + gyear_month (const xercesc::DOMAttr& a, flags f, container* c) + : B (a, f, c) + { + parse (xml::transcode<C> (a.getValue ())); + } + + template <typename C, typename B> + gyear_month<C, B>:: + gyear_month (const std::basic_string<C>& s, + const xercesc::DOMElement* e, + flags f, + container* c) + : B (s, e, f, c) + { + parse (s); + } + + template <typename C, typename B> + void gyear_month<C, B>:: + parse (const std::basic_string<C>& str) + { + typedef typename ro_string<C>::size_type size_type; + + ro_string<C> tmp (str); + size_type n (trim (tmp)); + const C* s (tmp.data ()); + + // gyear_month := [-]CCYY[N]*-MM[Z|(+|-)HH:MM] + // + + if (n >= 7) + { + // Find the end of the year token. + // + size_type pos (tmp.find (C ('-'), 4)); + + if (pos != ro_string<C>::npos && (n - pos - 1) >= 2) + { + ro_string<C> year_fragment (s, pos); + zc_istream<C> is (year_fragment); + is >> year_; + + month_ = 10 * (s[pos + 1] - C ('0')) + (s[pos + 2] - C ('0')); + + pos += 3; + + if (pos < n) + zone_parse (s + pos, n - pos); + } + } + } + + // date + // + template <typename C, typename B> + date<C, B>:: + date (const xercesc::DOMElement& e, flags f, container* c) + : B (e, f, c) + { + parse (text_content<C> (e)); + } + + template <typename C, typename B> + date<C, B>:: + date (const xercesc::DOMAttr& a, flags f, container* c) + : B (a, f, c) + { + parse (xml::transcode<C> (a.getValue ())); + } + + template <typename C, typename B> + date<C, B>:: + date (const std::basic_string<C>& s, + const xercesc::DOMElement* e, + flags f, + container* c) + : B (s, e, f, c) + { + parse (s); + } + + template <typename C, typename B> + void date<C, B>:: + parse (const std::basic_string<C>& str) + { + typedef typename ro_string<C>::size_type size_type; + + ro_string<C> tmp (str); + size_type n (trim (tmp)); + const C* s (tmp.data ()); + + // date := [-]CCYY[N]*-MM-DD[Z|(+|-)HH:MM] + // + + if (n >= 10) + { + // Find the end of the year token. + // + size_type pos (tmp.find (C ('-'), 4)); + + if (pos != ro_string<C>::npos && (n - pos - 1) >= 5) + { + ro_string<C> year_fragment (s, pos); + zc_istream<C> is (year_fragment); + is >> year_; + + month_ = 10 * (s[pos + 1] - C ('0')) + (s[pos + 2] - C ('0')); + day_ = 10 * (s[pos + 4] - C ('0')) + (s[pos + 5] - C ('0')); + + pos += 6; + + if (pos < n) + zone_parse (s + pos, n - pos); + } + } + } + + // time + // + template <typename C, typename B> + time<C, B>:: + time (const xercesc::DOMElement& e, flags f, container* c) + : B (e, f, c) + { + parse (text_content<C> (e)); + } + + template <typename C, typename B> + time<C, B>:: + time (const xercesc::DOMAttr& a, flags f, container* c) + : B (a, f, c) + { + parse (xml::transcode<C> (a.getValue ())); + } + + template <typename C, typename B> + time<C, B>:: + time (const std::basic_string<C>& s, + const xercesc::DOMElement* e, + flags f, + container* c) + : B (s, e, f, c) + { + parse (s); + } + + template <typename C, typename B> + void time<C, B>:: + parse (const std::basic_string<C>& str) + { + typedef typename ro_string<C>::size_type size_type; + + ro_string<C> tmp (str); + size_type n (trim (tmp)); + const C* s (tmp.data ()); + + // time := HH:MM:SS[.S+][Z|(+|-)HH:MM] + // + + if (n >= 8) + { + hours_ = 10 * (s[0] - '0') + (s[1] - '0'); + minutes_ = 10 * (s[3] - '0') + (s[4] - '0'); + + // Find the end of the seconds fragment. + // + size_type pos (8); + for (; pos < n; ++pos) + { + C c (s[pos]); + + if (c == C ('Z') || c == C ('+') || c == C ('-')) + break; + } + + ro_string<C> seconds_fragment (s + 6, pos - 6); + zc_istream<C> is (seconds_fragment); + is >> seconds_; + + if (pos < n) + zone_parse (s + pos, n - pos); + } + } + + // date_time + // + template <typename C, typename B> + date_time<C, B>:: + date_time (const xercesc::DOMElement& e, flags f, container* c) + : B (e, f, c) + { + parse (text_content<C> (e)); + } + + template <typename C, typename B> + date_time<C, B>:: + date_time (const xercesc::DOMAttr& a, flags f, container* c) + : B (a, f, c) + { + parse (xml::transcode<C> (a.getValue ())); + } + + template <typename C, typename B> + date_time<C, B>:: + date_time (const std::basic_string<C>& s, + const xercesc::DOMElement* e, + flags f, + container* c) + : B (s, e, f, c) + { + parse (s); + } + + template <typename C, typename B> + void date_time<C, B>:: + parse (const std::basic_string<C>& str) + { + typedef typename ro_string<C>::size_type size_type; + + ro_string<C> tmp (str); + size_type n (trim (tmp)); + const C* s (tmp.data ()); + + // date_time := [-]CCYY[N]*-MM-DDTHH:MM:SS[.S+][Z|(+|-)HH:MM] + // + + if (n >= 19) + { + // Find the end of the year token. + // + size_type pos (tmp.find (C ('-'), 4)); + + if (pos != ro_string<C>::npos && (n - pos - 1) >= 14) + { + ro_string<C> year_fragment (s, pos); + zc_istream<C> yis (year_fragment); + yis >> year_; + + month_ = 10 * (s[pos + 1] - C ('0')) + (s[pos + 2] - C ('0')); + pos += 3; + + day_ = 10 * (s[pos + 1] - C ('0')) + (s[pos + 2] - C ('0')); + pos += 3; + + hours_ = 10 * (s[pos + 1] - C ('0')) + (s[pos + 2] - C ('0')); + pos += 3; + + minutes_ = 10 * (s[pos + 1] - C ('0')) + (s[pos + 2] - C ('0')); + pos += 4; // Point to the first S. + + // Find the end of the seconds fragment. + // + size_type sec_end (pos + 2); + for (; sec_end < n; ++sec_end) + { + C c (s[sec_end]); + + if (c == C ('Z') || c == C ('+') || c == C ('-')) + break; + } + + ro_string<C> seconds_fragment (s + pos, sec_end - pos); + zc_istream<C> sis (seconds_fragment); + sis >> seconds_; + + if (sec_end < n) + zone_parse (s + sec_end, n - sec_end); + } + } + } + + // duration + // + template <typename C, typename B> + duration<C, B>:: + duration (const xercesc::DOMElement& e, flags f, container* c) + : B (e, f, c) + { + parse (text_content<C> (e)); + } + + template <typename C, typename B> + duration<C, B>:: + duration (const xercesc::DOMAttr& a, flags f, container* c) + : B (a, f, c) + { + parse (xml::transcode<C> (a.getValue ())); + } + + template <typename C, typename B> + duration<C, B>:: + duration (const std::basic_string<C>& s, + const xercesc::DOMElement* e, + flags f, + container* c) + : B (s, e, f, c) + { + parse (s); + } + + namespace bits + { + template <typename C> + inline typename ro_string<C>::size_type + duration_delim (const C* s, + typename ro_string<C>::size_type pos, + typename ro_string<C>::size_type size) + { + const C* p (s + pos); + for (; p < (s + size); ++p) + { + if (*p == C ('Y') || *p == C ('D') || *p == C ('M') || + *p == C ('H') || *p == C ('M') || *p == C ('S') || + *p == C ('T')) + break; + } + + return p - s; + } + } + + template <typename C, typename B> + void duration<C, B>:: + parse (const std::basic_string<C>& str) + { + typedef typename ro_string<C>::size_type size_type; + + ro_string<C> tmp (str); + size_type n (trim (tmp)); + const C* s (tmp.data ()); + + // Set all the fields since some of them may not be specified. + // + years_ = months_ = days_ = hours_ = minutes_ = 0; + seconds_ = 0.0; + + // duration := [-]P[nY][nM][nD][TnHnMn[.n+]S] + // + if (n >= 3) + { + size_type pos (0); + + if (s[0] == C ('-')) + { + negative_ = true; + pos++; + } + else + negative_ = false; + + pos++; // Skip 'P'. + + size_type del (bits::duration_delim (s, pos, n)); + + if (del != n && s[del] == C ('Y')) + { + ro_string<C> fragment (s + pos, del - pos); + zc_istream<C> is (fragment); + is >> years_; + + pos = del + 1; + del = bits::duration_delim (s, pos, n); + } + + if (del != n && s[del] == C ('M')) + { + ro_string<C> fragment (s + pos, del - pos); + zc_istream<C> is (fragment); + is >> months_; + + pos = del + 1; + del = bits::duration_delim (s, pos, n); + } + + if (del != n && s[del] == C ('D')) + { + ro_string<C> fragment (s + pos, del - pos); + zc_istream<C> is (fragment); + is >> days_; + + pos = del + 1; + del = bits::duration_delim (s, pos, n); + } + + if (del != n && s[del] == C ('T')) + { + pos = del + 1; + del = bits::duration_delim (s, pos, n); + + if (del != n && s[del] == C ('H')) + { + ro_string<C> fragment (s + pos, del - pos); + zc_istream<C> is (fragment); + is >> hours_; + + pos = del + 1; + del = bits::duration_delim (s, pos, n); + } + + if (del != n && s[del] == C ('M')) + { + ro_string<C> fragment (s + pos, del - pos); + zc_istream<C> is (fragment); + is >> minutes_; + + pos = del + 1; + del = bits::duration_delim (s, pos, n); + } + + if (del != n && s[del] == C ('S')) + { + ro_string<C> fragment (s + pos, del - pos); + zc_istream<C> is (fragment); + is >> seconds_; + } + } + } + } + } + } +} diff --git a/xsd/libxsd/xsd/cxx/tree/parsing/decimal.hxx b/xsd/libxsd/xsd/cxx/tree/parsing/decimal.hxx new file mode 100644 index 0000000..636c0f5 --- /dev/null +++ b/xsd/libxsd/xsd/cxx/tree/parsing/decimal.hxx @@ -0,0 +1,85 @@ +// file : xsd/cxx/tree/parsing/decimal.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_CXX_TREE_PARSING_DECIMAL_HXX +#define XSD_CXX_TREE_PARSING_DECIMAL_HXX + +#include <limits> +#include <locale> + +#include <xsd/cxx/ro-string.hxx> +#include <xsd/cxx/zc-istream.hxx> + +#include <xsd/cxx/xml/string.hxx> // xml::transcode + +#include <xsd/cxx/tree/text.hxx> // text_content +#include <xsd/cxx/tree/bits/literals.hxx> + +namespace xsd +{ + namespace cxx + { + namespace tree + { + template <typename C> + struct traits<double, C, schema_type::decimal> + { + typedef double type; + + static type + create (const xercesc::DOMElement& e, flags f, container* c); + + static type + create (const xercesc::DOMAttr& a, flags f, container* c); + + static type + create (const std::basic_string<C>& s, + const xercesc::DOMElement*, + flags, + container*); + }; + + template <typename C> + double traits<double, C, schema_type::decimal>:: + create (const xercesc::DOMElement& e, flags f, container* c) + { + return create (text_content<C> (e), 0, f, c); + } + + template <typename C> + double traits<double, C, schema_type::decimal>:: + create (const xercesc::DOMAttr& a, flags f, container* c) + { + return create (xml::transcode<C> (a.getValue ()), 0, f, c); + } + + template <typename C> + double traits<double, C, schema_type::decimal>:: + create (const std::basic_string<C>& s, + const xercesc::DOMElement*, + flags, + container*) + { + // This type cannot have whitespaces in its values. As result we + // don't need to waste time collapsing whitespaces. All we need to + // do is trim the string representation which can be done without + // copying. + // + ro_string<C> tmp (s); + trim (tmp); + + zc_istream<C> is (tmp); + is.imbue (std::locale::classic ()); + + type t; + is >> t; + + return t; + } + } + } +} + +#endif // XSD_CXX_TREE_PARSING_DECIMAL_HXX diff --git a/xsd/libxsd/xsd/cxx/tree/parsing/double.hxx b/xsd/libxsd/xsd/cxx/tree/parsing/double.hxx new file mode 100644 index 0000000..1507ccf --- /dev/null +++ b/xsd/libxsd/xsd/cxx/tree/parsing/double.hxx @@ -0,0 +1,94 @@ +// file : xsd/cxx/tree/parsing/double.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_CXX_TREE_PARSING_DOUBLE_HXX +#define XSD_CXX_TREE_PARSING_DOUBLE_HXX + +#include <limits> +#include <locale> + +#include <xsd/cxx/ro-string.hxx> +#include <xsd/cxx/zc-istream.hxx> + +#include <xsd/cxx/xml/string.hxx> // xml::transcode + +#include <xsd/cxx/tree/text.hxx> // text_content +#include <xsd/cxx/tree/bits/literals.hxx> + +namespace xsd +{ + namespace cxx + { + namespace tree + { + template <typename C> + struct traits<double, C, schema_type::double_> + { + typedef double type; + + static type + create (const xercesc::DOMElement& e, flags f, container* c); + + static type + create (const xercesc::DOMAttr& a, flags f, container* c); + + static type + create (const std::basic_string<C>& s, + const xercesc::DOMElement*, + flags, + container*); + }; + + template <typename C> + double traits<double, C, schema_type::double_>:: + create (const xercesc::DOMElement& e, flags f, container* c) + { + return create (text_content<C> (e), 0, f, c); + } + + template <typename C> + double traits<double, C, schema_type::double_>:: + create (const xercesc::DOMAttr& a, flags f, container* c) + { + return create (xml::transcode<C> (a.getValue ()), 0, f, c); + } + + template <typename C> + double traits<double, C, schema_type::double_>:: + create (const std::basic_string<C>& s, + const xercesc::DOMElement*, + flags, + container*) + { + // This type cannot have whitespaces in its values. As result we + // don't need to waste time collapsing whitespaces. All we need to + // do is trim the string representation which can be done without + // copying. + // + ro_string<C> tmp (s); + trim (tmp); + + if (tmp == bits::positive_inf<C> ()) + return std::numeric_limits<double>::infinity (); + + if (tmp == bits::negative_inf<C> ()) + return -std::numeric_limits<double>::infinity (); + + if (tmp == bits::nan<C> ()) + return std::numeric_limits<double>::quiet_NaN (); + + zc_istream<C> is (tmp); + is.imbue (std::locale::classic ()); + + type t; + is >> t; + + return t; + } + } + } +} + +#endif // XSD_CXX_TREE_PARSING_DOUBLE_HXX diff --git a/xsd/libxsd/xsd/cxx/tree/parsing/element-map.txx b/xsd/libxsd/xsd/cxx/tree/parsing/element-map.txx new file mode 100644 index 0000000..bb9a4c6 --- /dev/null +++ b/xsd/libxsd/xsd/cxx/tree/parsing/element-map.txx @@ -0,0 +1,42 @@ +// file : xsd/cxx/tree/parsing/element-map.txx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_CXX_TREE_PARSING_ELEMENT_MAP_TXX +#define XSD_CXX_TREE_PARSING_ELEMENT_MAP_TXX + +#include <xsd/cxx/xml/dom/elements.hxx> + +#include <xsd/cxx/tree/exceptions.hxx> + +namespace xsd +{ + namespace cxx + { + namespace tree + { + template <typename C, typename T> + std::auto_ptr<element_type<C, T> > element_map<C, T>:: + parse (const xercesc::DOMElement& e, flags f) + { + const qualified_name n (xml::dom::name<C> (e)); + typename map::const_iterator i (map_->find (n)); + + if (i != map_->end () && i->second.parser_ != 0) + return (i->second.parser_) (e, f); + else + throw no_element_info<C> (n.name (), n.namespace_ ()); + } + + template<typename T, typename C, typename B> + std::auto_ptr<element_type<C, B> > + parser_impl (const xercesc::DOMElement& e, flags f) + { + return std::auto_ptr<element_type<C, B> > (new T (e, f)); + } + } + } +} + +#endif // XSD_CXX_TREE_PARSING_ELEMENT_MAP_TXX diff --git a/xsd/libxsd/xsd/cxx/tree/parsing/float.hxx b/xsd/libxsd/xsd/cxx/tree/parsing/float.hxx new file mode 100644 index 0000000..3e34f93 --- /dev/null +++ b/xsd/libxsd/xsd/cxx/tree/parsing/float.hxx @@ -0,0 +1,94 @@ +// file : xsd/cxx/tree/parsing/float.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_CXX_TREE_PARSING_FLOAT_HXX +#define XSD_CXX_TREE_PARSING_FLOAT_HXX + +#include <limits> +#include <locale> + +#include <xsd/cxx/ro-string.hxx> +#include <xsd/cxx/zc-istream.hxx> + +#include <xsd/cxx/xml/string.hxx> // xml::transcode + +#include <xsd/cxx/tree/text.hxx> // text_content +#include <xsd/cxx/tree/bits/literals.hxx> + +namespace xsd +{ + namespace cxx + { + namespace tree + { + template <typename C> + struct traits<float, C, schema_type::other> + { + typedef float type; + + static type + create (const xercesc::DOMElement& e, flags f, container* c); + + static type + create (const xercesc::DOMAttr& a, flags f, container* c); + + static type + create (const std::basic_string<C>& s, + const xercesc::DOMElement*, + flags, + container*); + }; + + template <typename C> + float traits<float, C, schema_type::other>:: + create (const xercesc::DOMElement& e, flags f, container* c) + { + return create (text_content<C> (e), 0, f, c); + } + + template <typename C> + float traits<float, C, schema_type::other>:: + create (const xercesc::DOMAttr& a, flags f, container* c) + { + return create (xml::transcode<C> (a.getValue ()), 0, f, c); + } + + template <typename C> + float traits<float, C, schema_type::other>:: + create (const std::basic_string<C>& s, + const xercesc::DOMElement*, + flags, + container*) + { + // This type cannot have whitespaces in its values. As result we + // don't need to waste time collapsing whitespaces. All we need to + // do is trim the string representation which can be done without + // copying. + // + ro_string<C> tmp (s); + trim (tmp); + + if (tmp == bits::positive_inf<C> ()) + return std::numeric_limits<float>::infinity (); + + if (tmp == bits::negative_inf<C> ()) + return -std::numeric_limits<float>::infinity (); + + if (tmp == bits::nan<C> ()) + return std::numeric_limits<float>::quiet_NaN (); + + zc_istream<C> is (tmp); + is.imbue (std::locale::classic ()); + + type t; + is >> t; + + return t; + } + } + } +} + +#endif // XSD_CXX_TREE_PARSING_FLOAT_HXX diff --git a/xsd/libxsd/xsd/cxx/tree/parsing/int.hxx b/xsd/libxsd/xsd/cxx/tree/parsing/int.hxx new file mode 100644 index 0000000..d996d3a --- /dev/null +++ b/xsd/libxsd/xsd/cxx/tree/parsing/int.hxx @@ -0,0 +1,80 @@ +// file : xsd/cxx/tree/parsing/int.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_CXX_TREE_PARSING_INT_HXX +#define XSD_CXX_TREE_PARSING_INT_HXX + +#include <xsd/cxx/ro-string.hxx> +#include <xsd/cxx/zc-istream.hxx> + +#include <xsd/cxx/xml/string.hxx> // xml::transcode + +#include <xsd/cxx/tree/text.hxx> // text_content + +namespace xsd +{ + namespace cxx + { + namespace tree + { + template <typename C> + struct traits<int, C, schema_type::other> + { + typedef int type; + + static type + create (const xercesc::DOMElement& e, flags f, container* c); + + static type + create (const xercesc::DOMAttr& a, flags f, container* c); + + static type + create (const std::basic_string<C>& s, + const xercesc::DOMElement*, + flags, + container*); + }; + + template <typename C> + int traits<int, C, schema_type::other>:: + create (const xercesc::DOMElement& e, flags f, container* c) + { + return create (text_content<C> (e), 0, f, c); + } + + template <typename C> + int traits<int, C, schema_type::other>:: + create (const xercesc::DOMAttr& a, flags f, container* c) + { + return create (xml::transcode<C> (a.getValue ()), 0, f, c); + } + + template <typename C> + int traits<int, C, schema_type::other>:: + create (const std::basic_string<C>& s, + const xercesc::DOMElement*, + flags, + container*) + { + // This type cannot have whitespaces in its values. As result we + // don't need to waste time collapsing whitespaces. All we need to + // do is trim the string representation which can be done without + // copying. + // + ro_string<C> tmp (s); + trim (tmp); + + zc_istream<C> is (tmp); + + type t; + is >> t; + + return t; + } + } + } +} + +#endif // XSD_CXX_TREE_PARSING_INT_HXX diff --git a/xsd/libxsd/xsd/cxx/tree/parsing/long.hxx b/xsd/libxsd/xsd/cxx/tree/parsing/long.hxx new file mode 100644 index 0000000..742ade1 --- /dev/null +++ b/xsd/libxsd/xsd/cxx/tree/parsing/long.hxx @@ -0,0 +1,80 @@ +// file : xsd/cxx/tree/parsing/long.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_CXX_TREE_PARSING_LONG_HXX +#define XSD_CXX_TREE_PARSING_LONG_HXX + +#include <xsd/cxx/ro-string.hxx> +#include <xsd/cxx/zc-istream.hxx> + +#include <xsd/cxx/xml/string.hxx> // xml::transcode + +#include <xsd/cxx/tree/text.hxx> // text_content + +namespace xsd +{ + namespace cxx + { + namespace tree + { + template <typename C> + struct traits<long long, C, schema_type::other> + { + typedef long long type; + + static type + create (const xercesc::DOMElement& e, flags f, container* c); + + static type + create (const xercesc::DOMAttr& a, flags f, container* c); + + static type + create (const std::basic_string<C>& s, + const xercesc::DOMElement*, + flags, + container*); + }; + + template <typename C> + long long traits<long long, C, schema_type::other>:: + create (const xercesc::DOMElement& e, flags f, container* c) + { + return create (text_content<C> (e), 0, f, c); + } + + template <typename C> + long long traits<long long, C, schema_type::other>:: + create (const xercesc::DOMAttr& a, flags f, container* c) + { + return create (xml::transcode<C> (a.getValue ()), 0, f, c); + } + + template <typename C> + long long traits<long long, C, schema_type::other>:: + create (const std::basic_string<C>& s, + const xercesc::DOMElement*, + flags, + container*) + { + // This type cannot have whitespaces in its values. As result we + // don't need to waste time collapsing whitespaces. All we need to + // do is trim the string representation which can be done without + // copying. + // + ro_string<C> tmp (s); + trim (tmp); + + zc_istream<C> is (tmp); + + type t; + is >> t; + + return t; + } + } + } +} + +#endif // XSD_CXX_TREE_PARSING_LONG_HXX diff --git a/xsd/libxsd/xsd/cxx/tree/parsing/short.hxx b/xsd/libxsd/xsd/cxx/tree/parsing/short.hxx new file mode 100644 index 0000000..3a7ead8 --- /dev/null +++ b/xsd/libxsd/xsd/cxx/tree/parsing/short.hxx @@ -0,0 +1,80 @@ +// file : xsd/cxx/tree/parsing/short.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_CXX_TREE_PARSING_SHORT_HXX +#define XSD_CXX_TREE_PARSING_SHORT_HXX + +#include <xsd/cxx/ro-string.hxx> +#include <xsd/cxx/zc-istream.hxx> + +#include <xsd/cxx/xml/string.hxx> // xml::transcode + +#include <xsd/cxx/tree/text.hxx> // text_content + +namespace xsd +{ + namespace cxx + { + namespace tree + { + template <typename C> + struct traits<short, C, schema_type::other> + { + typedef short type; + + static type + create (const xercesc::DOMElement& e, flags f, container* c); + + static type + create (const xercesc::DOMAttr& a, flags f, container* c); + + static type + create (const std::basic_string<C>& s, + const xercesc::DOMElement*, + flags, + container*); + }; + + template <typename C> + short traits<short, C, schema_type::other>:: + create (const xercesc::DOMElement& e, flags f, container* c) + { + return create (text_content<C> (e), 0, f, c); + } + + template <typename C> + short traits<short, C, schema_type::other>:: + create (const xercesc::DOMAttr& a, flags f, container* c) + { + return create (xml::transcode<C> (a.getValue ()), 0, f, c); + } + + template <typename C> + short traits<short, C, schema_type::other>:: + create (const std::basic_string<C>& s, + const xercesc::DOMElement*, + flags, + container*) + { + // This type cannot have whitespaces in its values. As result we + // don't need to waste time collapsing whitespaces. All we need to + // do is trim the string representation which can be done without + // copying. + // + ro_string<C> tmp (s); + trim (tmp); + + zc_istream<C> is (tmp); + + type t; + is >> t; + + return t; + } + } + } +} + +#endif // XSD_CXX_TREE_PARSING_SHORT_HXX diff --git a/xsd/libxsd/xsd/cxx/tree/parsing/unsigned-byte.hxx b/xsd/libxsd/xsd/cxx/tree/parsing/unsigned-byte.hxx new file mode 100644 index 0000000..ce336be --- /dev/null +++ b/xsd/libxsd/xsd/cxx/tree/parsing/unsigned-byte.hxx @@ -0,0 +1,80 @@ +// file : xsd/cxx/tree/parsing/unsigned-byte.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_CXX_TREE_PARSING_UNSIGNED_BYTE_HXX +#define XSD_CXX_TREE_PARSING_UNSIGNED_BYTE_HXX + +#include <xsd/cxx/ro-string.hxx> +#include <xsd/cxx/zc-istream.hxx> + +#include <xsd/cxx/xml/string.hxx> // xml::transcode + +#include <xsd/cxx/tree/text.hxx> // text_content + +namespace xsd +{ + namespace cxx + { + namespace tree + { + template <typename C> + struct traits<unsigned char, C, schema_type::other> + { + typedef unsigned char type; + + static type + create (const xercesc::DOMElement& e, flags f, container* c); + + static type + create (const xercesc::DOMAttr& a, flags f, container* c); + + static type + create (const std::basic_string<C>& s, + const xercesc::DOMElement*, + flags, + container*); + }; + + template <typename C> + unsigned char traits<unsigned char, C, schema_type::other>:: + create (const xercesc::DOMElement& e, flags f, container* c) + { + return create (text_content<C> (e), 0, f, c); + } + + template <typename C> + unsigned char traits<unsigned char, C, schema_type::other>:: + create (const xercesc::DOMAttr& a, flags f, container* c) + { + return create (xml::transcode<C> (a.getValue ()), 0, f, c); + } + + template <typename C> + unsigned char traits<unsigned char, C, schema_type::other>:: + create (const std::basic_string<C>& s, + const xercesc::DOMElement*, + flags, + container*) + { + // This type cannot have whitespaces in its values. As result we + // don't need to waste time collapsing whitespaces. All we need to + // do is trim the string representation which can be done without + // copying. + // + ro_string<C> tmp (s); + trim (tmp); + + zc_istream<C> is (tmp); + + unsigned short t; + is >> t; + + return static_cast<type> (t); + } + } + } +} + +#endif // XSD_CXX_TREE_PARSING_UNSIGNED_BYTE_HXX diff --git a/xsd/libxsd/xsd/cxx/tree/parsing/unsigned-int.hxx b/xsd/libxsd/xsd/cxx/tree/parsing/unsigned-int.hxx new file mode 100644 index 0000000..e908dd0 --- /dev/null +++ b/xsd/libxsd/xsd/cxx/tree/parsing/unsigned-int.hxx @@ -0,0 +1,80 @@ +// file : xsd/cxx/tree/parsing/unsigned-int.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_CXX_TREE_PARSING_UNSIGNED_INT_HXX +#define XSD_CXX_TREE_PARSING_UNSIGNED_INT_HXX + +#include <xsd/cxx/ro-string.hxx> +#include <xsd/cxx/zc-istream.hxx> + +#include <xsd/cxx/xml/string.hxx> // xml::transcode + +#include <xsd/cxx/tree/text.hxx> // text_content + +namespace xsd +{ + namespace cxx + { + namespace tree + { + template <typename C> + struct traits<unsigned int, C, schema_type::other> + { + typedef unsigned int type; + + static type + create (const xercesc::DOMElement& e, flags f, container* c); + + static type + create (const xercesc::DOMAttr& a, flags f, container* c); + + static type + create (const std::basic_string<C>& s, + const xercesc::DOMElement*, + flags, + container*); + }; + + template <typename C> + unsigned int traits<unsigned int, C, schema_type::other>:: + create (const xercesc::DOMElement& e, flags f, container* c) + { + return create (text_content<C> (e), 0, f, c); + } + + template <typename C> + unsigned int traits<unsigned int, C, schema_type::other>:: + create (const xercesc::DOMAttr& a, flags f, container* c) + { + return create (xml::transcode<C> (a.getValue ()), 0, f, c); + } + + template <typename C> + unsigned int traits<unsigned int, C, schema_type::other>:: + create (const std::basic_string<C>& s, + const xercesc::DOMElement*, + flags, + container*) + { + // This type cannot have whitespaces in its values. As result we + // don't need to waste time collapsing whitespaces. All we need to + // do is trim the string representation which can be done without + // copying. + // + ro_string<C> tmp (s); + trim (tmp); + + zc_istream<C> is (tmp); + + type t; + is >> t; + + return t; + } + } + } +} + +#endif // XSD_CXX_TREE_PARSING_UNSIGNED_INT_HXX diff --git a/xsd/libxsd/xsd/cxx/tree/parsing/unsigned-long.hxx b/xsd/libxsd/xsd/cxx/tree/parsing/unsigned-long.hxx new file mode 100644 index 0000000..647b8dd --- /dev/null +++ b/xsd/libxsd/xsd/cxx/tree/parsing/unsigned-long.hxx @@ -0,0 +1,80 @@ +// file : xsd/cxx/tree/parsing/unsigned-long.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_CXX_TREE_PARSING_UNSIGNED_LONG_HXX +#define XSD_CXX_TREE_PARSING_UNSIGNED_LONG_HXX + +#include <xsd/cxx/ro-string.hxx> +#include <xsd/cxx/zc-istream.hxx> + +#include <xsd/cxx/xml/string.hxx> // xml::transcode + +#include <xsd/cxx/tree/text.hxx> // text_content + +namespace xsd +{ + namespace cxx + { + namespace tree + { + template <typename C> + struct traits<unsigned long long, C, schema_type::other> + { + typedef unsigned long long type; + + static type + create (const xercesc::DOMElement& e, flags f, container* c); + + static type + create (const xercesc::DOMAttr& a, flags f, container* c); + + static type + create (const std::basic_string<C>& s, + const xercesc::DOMElement*, + flags, + container*); + }; + + template <typename C> + unsigned long long traits<unsigned long long, C, schema_type::other>:: + create (const xercesc::DOMElement& e, flags f, container* c) + { + return create (text_content<C> (e), 0, f, c); + } + + template <typename C> + unsigned long long traits<unsigned long long, C, schema_type::other>:: + create (const xercesc::DOMAttr& a, flags f, container* c) + { + return create (xml::transcode<C> (a.getValue ()), 0, f, c); + } + + template <typename C> + unsigned long long traits<unsigned long long, C, schema_type::other>:: + create (const std::basic_string<C>& s, + const xercesc::DOMElement*, + flags, + container*) + { + // This type cannot have whitespaces in its values. As result we + // don't need to waste time collapsing whitespaces. All we need to + // do is trim the string representation which can be done without + // copying. + // + ro_string<C> tmp (s); + trim (tmp); + + zc_istream<C> is (tmp); + + type t; + is >> t; + + return t; + } + } + } +} + +#endif // XSD_CXX_TREE_PARSING_UNSIGNED_LONG_HXX diff --git a/xsd/libxsd/xsd/cxx/tree/parsing/unsigned-short.hxx b/xsd/libxsd/xsd/cxx/tree/parsing/unsigned-short.hxx new file mode 100644 index 0000000..f53c724 --- /dev/null +++ b/xsd/libxsd/xsd/cxx/tree/parsing/unsigned-short.hxx @@ -0,0 +1,80 @@ +// file : xsd/cxx/tree/parsing/unsigned-short.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_CXX_TREE_PARSING_UNSIGNED_SHORT_HXX +#define XSD_CXX_TREE_PARSING_UNSIGNED_SHORT_HXX + +#include <xsd/cxx/ro-string.hxx> +#include <xsd/cxx/zc-istream.hxx> + +#include <xsd/cxx/xml/string.hxx> // xml::transcode + +#include <xsd/cxx/tree/text.hxx> // text_content + +namespace xsd +{ + namespace cxx + { + namespace tree + { + template <typename C> + struct traits<unsigned short, C, schema_type::other> + { + typedef unsigned short type; + + static type + create (const xercesc::DOMElement& e, flags f, container* c); + + static type + create (const xercesc::DOMAttr& a, flags f, container* c); + + static type + create (const std::basic_string<C>& s, + const xercesc::DOMElement*, + flags, + container*); + }; + + template <typename C> + unsigned short traits<unsigned short, C, schema_type::other>:: + create (const xercesc::DOMElement& e, flags f, container* c) + { + return create (text_content<C> (e), 0, f, c); + } + + template <typename C> + unsigned short traits<unsigned short, C, schema_type::other>:: + create (const xercesc::DOMAttr& a, flags f, container* c) + { + return create (xml::transcode<C> (a.getValue ()), 0, f, c); + } + + template <typename C> + unsigned short traits<unsigned short, C, schema_type::other>:: + create (const std::basic_string<C>& s, + const xercesc::DOMElement*, + flags, + container*) + { + // This type cannot have whitespaces in its values. As result we + // don't need to waste time collapsing whitespaces. All we need to + // do is trim the string representation which can be done without + // copying. + // + ro_string<C> tmp (s); + trim (tmp); + + zc_istream<C> is (tmp); + + type t; + is >> t; + + return t; + } + } + } +} + +#endif // XSD_CXX_TREE_PARSING_UNSIGNED_SHORT_HXX diff --git a/xsd/libxsd/xsd/cxx/tree/serialization.hxx b/xsd/libxsd/xsd/cxx/tree/serialization.hxx new file mode 100644 index 0000000..612185f --- /dev/null +++ b/xsd/libxsd/xsd/cxx/tree/serialization.hxx @@ -0,0 +1,66 @@ +// file : xsd/cxx/tree/serialization.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_CXX_TREE_SERIALIZATION_HXX +#define XSD_CXX_TREE_SERIALIZATION_HXX + +#include <sstream> + +#include <xercesc/dom/DOMElement.hpp> + +namespace xsd +{ + namespace cxx + { + namespace tree + { + // + // + template <typename C> + class list_stream + { + public: + list_stream (std::basic_ostringstream<C>& os, + xercesc::DOMElement& parent) + : os_ (os), parent_ (parent) + { + } + + std::basic_ostringstream<C>& os_; + xercesc::DOMElement& parent_; + }; + + template <typename T> + class as_double + { + public: + as_double (const T& v) + : x (v) + { + } + + const T& x; + }; + + template <typename T> + class as_decimal + { + public: + as_decimal (const T& v, const facet* f = 0) + : x (v), facets (f) + { + } + + const T& x; + const facet* facets; + }; + } + } +} + +#include <xsd/cxx/tree/serialization.txx> +#include <xsd/cxx/tree/serialization/date-time.txx> + +#endif // XSD_CXX_TREE_SERIALIZATION_HXX diff --git a/xsd/libxsd/xsd/cxx/tree/serialization.txx b/xsd/libxsd/xsd/cxx/tree/serialization.txx new file mode 100644 index 0000000..29364f4 --- /dev/null +++ b/xsd/libxsd/xsd/cxx/tree/serialization.txx @@ -0,0 +1,764 @@ +// file : xsd/cxx/tree/serialization.txx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <string> +#include <sstream> + +#include <xercesc/dom/DOMAttr.hpp> +#include <xercesc/dom/DOMElement.hpp> + +#include <xsd/cxx/xml/string.hxx> // xml::{string, transcode} +#include <xsd/cxx/xml/dom/serialization-header.hxx> // dom::{prefix, clear} + +#include <xsd/cxx/tree/elements.hxx> +#include <xsd/cxx/tree/types.hxx> +#include <xsd/cxx/tree/list.hxx> + +// The only way to make the following serialization operators +// for fundamental types work is to defined them in the xercesc +// namespace so that they can be found by ADL. Placing them into +// the global namespace does not work. +// + +namespace XERCES_CPP_NAMESPACE +{ + // Serialization of std::basic_string and C string. Used in other + // serializers. Also used to serialize enumerators. + // + template <typename C> + void + operator<< (xercesc::DOMElement& e, const C* s) + { + xsd::cxx::xml::dom::clear<char> (e); + + if (*s != C (0)) + e.setTextContent (xsd::cxx::xml::string (s).c_str ()); + } + + template <typename C> + void + operator<< (xercesc::DOMAttr& a, const C* s) + { + a.setValue (xsd::cxx::xml::string (s).c_str ()); + } + + // We duplicate the code above instead of delegating in order to + // allow the xml::string type to take advantage of cached string + // sizes. + // + template <typename C> + void + operator<< (xercesc::DOMElement& e, const std::basic_string<C>& s) + { + xsd::cxx::xml::dom::clear<char> (e); + + if (!s.empty ()) + e.setTextContent (xsd::cxx::xml::string (s).c_str ()); + } + + template <typename C> + void + operator<< (xercesc::DOMAttr& a, const std::basic_string<C>& s) + { + a.setValue (xsd::cxx::xml::string (s).c_str ()); + } +} + +namespace xsd +{ + namespace cxx + { + namespace tree + { + // List serialization operators for std::basic_string and C string. + // + + template <typename C> + void + operator<< (list_stream<C>& ls, const C* s) + { + ls.os_ << s; + } + + template <typename C> + void + operator<< (list_stream<C>& ls, const std::basic_string<C>& s) + { + ls.os_ << s; + } + + // Insertion operators for type. + // + inline void + operator<< (xercesc::DOMElement& e, const type&) + { + xml::dom::clear<char> (e); + } + + inline void + operator<< (xercesc::DOMAttr&, const type&) + { + } + + template <typename C> + inline void + operator<< (list_stream<C>&, const type&) + { + } + + // Insertion operators for simple_type. + // + template <typename B> + inline void + operator<< (xercesc::DOMElement& e, const simple_type<B>&) + { + xml::dom::clear<char> (e); + } + + template <typename B> + inline void + operator<< (xercesc::DOMAttr&, const simple_type<B>&) + { + } + + template <typename C, typename B> + inline void + operator<< (list_stream<C>&, const simple_type<B>&) + { + } + + // Insertion operators for list. + // + template <typename C, typename T, schema_type::value ST, bool fund> + void + operator<< (xercesc::DOMElement& e, const list<T, C, ST, fund>& v) + { + std::basic_ostringstream<C> os; + list_stream<C> ls (os, e); + + ls << v; + + e << os.str (); + } + + template <typename C, typename T, schema_type::value ST, bool fund> + void + operator<< (xercesc::DOMAttr& a, const list<T, C, ST, fund>& v) + { + std::basic_ostringstream<C> os; + list_stream<C> ls (os, *a.getOwnerElement ()); + + ls << v; + + a << os.str (); + } + + template <typename C, typename T, schema_type::value ST, bool fund> + void + operator<< (list_stream<C>& ls, const list<T, C, ST, fund>& v) + { + for (typename list<T, C, ST, fund>::const_iterator + b (v.begin ()), e (v.end ()), i (b); i != e; ++i) + { + if (i != b) + ls.os_ << C (' '); + + ls << *i; + } + } + + // Specializations for double and decimal. + // + template <typename C, typename T, bool fund> + void + operator<< (list_stream<C>& ls, + const list<T, C, schema_type::double_, fund>& v) + { + for (typename list<T, C, schema_type::double_, fund>::const_iterator + b (v.begin ()), e (v.end ()), i (b); i != e; ++i) + { + if (i != b) + ls.os_ << C (' '); + + ls << as_double<T> (*i); + } + } + + template <typename C, typename T, bool fund> + void + operator<< (list_stream<C>& ls, + const list<T, C, schema_type::decimal, fund>& v) + { + for (typename list<T, C, schema_type::decimal, fund>::const_iterator + b (v.begin ()), e (v.end ()), i (b); i != e; ++i) + { + if (i != b) + ls.os_ << C (' '); + + ls << as_decimal<T> (*i); + } + } + + + // Insertion operators for fundamental_base. + // + template <typename T, typename C, typename B, schema_type::value ST> + void + operator<< (xercesc::DOMElement& e, + const fundamental_base<T, C, B, ST>& x) + { + const T& r (x); + e << r; + } + + template <typename T, typename C, typename B, schema_type::value ST> + void + operator<< (xercesc::DOMAttr& a, const fundamental_base<T, C, B, ST>& x) + { + const T& r (x); + a << r; + } + + template <typename T, typename C, typename B, schema_type::value ST> + void + operator<< (list_stream<C>& ls, const fundamental_base<T, C, B, ST>& x) + { + const T& r (x); + ls << r; + } + + // Specializations for double. + // + template <typename T, typename C, typename B> + void + operator<< ( + xercesc::DOMElement& e, + const fundamental_base<T, C, B, schema_type::double_>& x) + { + e << as_double<T> (x); + } + + template <typename T, typename C, typename B> + void + operator<< ( + xercesc::DOMAttr& a, + const fundamental_base<T, C, B, schema_type::double_>& x) + { + a << as_double<T> (x); + } + + template <typename T, typename C, typename B> + void + operator<< ( + list_stream<C>& ls, + const fundamental_base<T, C, B, schema_type::double_>& x) + { + ls << as_double<T> (x); + } + + // Specializations for decimal. + // + template <typename T, typename C, typename B> + void + operator<< ( + xercesc::DOMElement& e, + const fundamental_base<T, C, B, schema_type::decimal>& x) + { + e << as_decimal<T> (x, x._facet_table ()); + } + + template <typename T, typename C, typename B> + void + operator<< ( + xercesc::DOMAttr& a, + const fundamental_base<T, C, B, schema_type::decimal>& x) + { + a << as_decimal<T> (x, x._facet_table ()); + } + + template <typename T, typename C, typename B> + void + operator<< ( + list_stream<C>& ls, + const fundamental_base<T, C, B, schema_type::decimal>& x) + { + ls << as_decimal<T> (x, x._facet_table ()); + } + + // Insertion operators for built-in types. + // + + namespace bits + { + template <typename C, typename T> + void + insert (xercesc::DOMElement& e, const T& x) + { + std::basic_ostringstream<C> os; + os << x; + e << os.str (); + } + + template <typename C, typename T> + void + insert (xercesc::DOMAttr& a, const T& x) + { + std::basic_ostringstream<C> os; + os << x; + a << os.str (); + } + } + + + // string + // + template <typename C, typename B> + inline void + operator<< (xercesc::DOMElement& e, const string<C, B>& x) + { + bits::insert<C> (e, x); + } + + template <typename C, typename B> + inline void + operator<< (xercesc::DOMAttr& a, const string<C, B>& x) + { + bits::insert<C> (a, x); + } + + template <typename C, typename B> + inline void + operator<< (list_stream<C>& ls, const string<C, B>& x) + { + ls.os_ << x; + } + + + // normalized_string + // + template <typename C, typename B> + inline void + operator<< (xercesc::DOMElement& e, const normalized_string<C, B>& x) + { + bits::insert<C> (e, x); + } + + template <typename C, typename B> + inline void + operator<< (xercesc::DOMAttr& a, const normalized_string<C, B>& x) + { + bits::insert<C> (a, x); + } + + template <typename C, typename B> + inline void + operator<< (list_stream<C>& ls, const normalized_string<C, B>& x) + { + ls.os_ << x; + } + + + // token + // + template <typename C, typename B> + inline void + operator<< (xercesc::DOMElement& e, const token<C, B>& x) + { + bits::insert<C> (e, x); + } + + template <typename C, typename B> + inline void + operator<< (xercesc::DOMAttr& a, const token<C, B>& x) + { + bits::insert<C> (a, x); + } + + template <typename C, typename B> + inline void + operator<< (list_stream<C>& ls, const token<C, B>& x) + { + ls.os_ << x; + } + + + // nmtoken + // + template <typename C, typename B> + inline void + operator<< (xercesc::DOMElement& e, const nmtoken<C, B>& x) + { + bits::insert<C> (e, x); + } + + template <typename C, typename B> + inline void + operator<< (xercesc::DOMAttr& a, const nmtoken<C, B>& x) + { + bits::insert<C> (a, x); + } + + template <typename C, typename B> + inline void + operator<< (list_stream<C>& ls, const nmtoken<C, B>& x) + { + ls.os_ << x; + } + + + // nmtokens + // + template <typename C, typename B, typename nmtoken> + inline void + operator<< (xercesc::DOMElement& e, const nmtokens<C, B, nmtoken>& v) + { + const list<nmtoken, C>& r (v); + e << r; + } + + template <typename C, typename B, typename nmtoken> + inline void + operator<< (xercesc::DOMAttr& a, const nmtokens<C, B, nmtoken>& v) + { + const list<nmtoken, C>& r (v); + a << r; + } + + template <typename C, typename B, typename nmtoken> + inline void + operator<< (list_stream<C>& ls, const nmtokens<C, B, nmtoken>& v) + { + const list<nmtoken, C>& r (v); + ls << r; + } + + + // name + // + template <typename C, typename B> + inline void + operator<< (xercesc::DOMElement& e, const name<C, B>& x) + { + bits::insert<C> (e, x); + } + + template <typename C, typename B> + inline void + operator<< (xercesc::DOMAttr& a, const name<C, B>& x) + { + bits::insert<C> (a, x); + } + + template <typename C, typename B> + inline void + operator<< (list_stream<C>& ls, const name<C, B>& x) + { + ls.os_ << x; + } + + + // ncname + // + template <typename C, typename B> + inline void + operator<< (xercesc::DOMElement& e, const ncname<C, B>& x) + { + bits::insert<C> (e, x); + } + + template <typename C, typename B> + inline void + operator<< (xercesc::DOMAttr& a, const ncname<C, B>& x) + { + bits::insert<C> (a, x); + } + + template <typename C, typename B> + inline void + operator<< (list_stream<C>& ls, const ncname<C, B>& x) + { + ls.os_ << x; + } + + + // language + // + template <typename C, typename B> + inline void + operator<< (xercesc::DOMElement& e, const language<C, B>& x) + { + bits::insert<C> (e, x); + } + + template <typename C, typename B> + inline void + operator<< (xercesc::DOMAttr& a, const language<C, B>& x) + { + bits::insert<C> (a, x); + } + + template <typename C, typename B> + inline void + operator<< (list_stream<C>& ls, const language<C, B>& x) + { + ls.os_ << x; + } + + + // id + // + template <typename C, typename B> + inline void + operator<< (xercesc::DOMElement& e, const id<C, B>& x) + { + bits::insert<C> (e, x); + } + + template <typename C, typename B> + inline void + operator<< (xercesc::DOMAttr& a, const id<C, B>& x) + { + bits::insert<C> (a, x); + } + + template <typename C, typename B> + inline void + operator<< (list_stream<C>& ls, const id<C, B>& x) + { + ls.os_ << x; + } + + + // idref + // + template <typename C, typename B, typename T> + inline void + operator<< (xercesc::DOMElement& e, const idref<C, B, T>& x) + { + bits::insert<C> (e, x); + } + + template <typename C, typename B, typename T> + inline void + operator<< (xercesc::DOMAttr& a, const idref<C, B, T>& x) + { + bits::insert<C> (a, x); + } + + template <typename C, typename B, typename T> + inline void + operator<< (list_stream<C>& ls, const idref<C, B, T>& x) + { + ls.os_ << x; + } + + + // idrefs + // + template <typename C, typename B, typename idref> + inline void + operator<< (xercesc::DOMElement& e, const idrefs<C, B, idref>& v) + { + const list<idref, C>& r (v); + e << r; + } + + template <typename C, typename B, typename idref> + inline void + operator<< (xercesc::DOMAttr& a, const idrefs<C, B, idref>& v) + { + const list<idref, C>& r (v); + a << r; + } + + template <typename C, typename B, typename idref> + inline void + operator<< (list_stream<C>& ls, const idrefs<C, B, idref>& v) + { + const list<idref, C>& r (v); + ls << r; + } + + + // uri + // + template <typename C, typename B> + inline void + operator<< (xercesc::DOMElement& e, const uri<C, B>& x) + { + bits::insert<C> (e, x); + } + + template <typename C, typename B> + inline void + operator<< (xercesc::DOMAttr& a, const uri<C, B>& x) + { + bits::insert<C> (a, x); + } + + template <typename C, typename B> + inline void + operator<< (list_stream<C>& ls, const uri<C, B>& x) + { + ls.os_ << x; + } + + + // qname + // + template <typename C, typename B, typename uri, typename ncname> + void + operator<< (xercesc::DOMElement& e, const qname<C, B, uri, ncname>& x) + { + std::basic_ostringstream<C> os; + + if (x.qualified ()) + { + std::basic_string<C> p (xml::dom::prefix (x.namespace_ (), e)); + + if (!p.empty ()) + os << p << C (':'); + } + + os << x.name (); + e << os.str (); + } + + template <typename C, typename B, typename uri, typename ncname> + void + operator<< (xercesc::DOMAttr& a, const qname<C, B, uri, ncname>& x) + { + std::basic_ostringstream<C> os; + + if (x.qualified ()) + { + std::basic_string<C> p ( + xml::dom::prefix (x.namespace_ (), *a.getOwnerElement ())); + + if (!p.empty ()) + os << p << C (':'); + } + + os << x.name (); + a << os.str (); + } + + template <typename C, typename B, typename uri, typename ncname> + void + operator<< (list_stream<C>& ls, const qname<C, B, uri, ncname>& x) + { + if (x.qualified ()) + { + std::basic_string<C> p ( + xml::dom::prefix (x.namespace_ (), ls.parent_)); + + if (!p.empty ()) + ls.os_ << p << C (':'); + } + + ls.os_ << x.name (); + } + + + // base64_binary + // + template <typename C, typename B> + inline void + operator<< (xercesc::DOMElement& e, const base64_binary<C, B>& x) + { + e << x.encode (); + } + + template <typename C, typename B> + inline void + operator<< (xercesc::DOMAttr& a, const base64_binary<C, B>& x) + { + a << x.encode (); + } + + template <typename C, typename B> + inline void + operator<< (list_stream<C>& ls, const base64_binary<C, B>& x) + { + ls.os_ << x.encode (); + } + + + // hex_binary + // + template <typename C, typename B> + inline void + operator<< (xercesc::DOMElement& e, const hex_binary<C, B>& x) + { + e << x.encode (); + } + + template <typename C, typename B> + inline void + operator<< (xercesc::DOMAttr& a, const hex_binary<C, B>& x) + { + a << x.encode (); + } + + template <typename C, typename B> + inline void + operator<< (list_stream<C>& ls, const hex_binary<C, B>& x) + { + ls.os_ << x.encode (); + } + + + // entity + // + template <typename C, typename B> + inline void + operator<< (xercesc::DOMElement& e, const entity<C, B>& x) + { + bits::insert<C> (e, x); + } + + template <typename C, typename B> + inline void + operator<< (xercesc::DOMAttr& a, const entity<C, B>& x) + { + bits::insert<C> (a, x); + } + + template <typename C, typename B> + inline void + operator<< (list_stream<C>& ls, const entity<C, B>& x) + { + ls.os_ << x; + } + + + // entities + // + template <typename C, typename B, typename entity> + inline void + operator<< (xercesc::DOMElement& e, const entities<C, B, entity>& v) + { + const list<entity, C>& r (v); + e << r; + } + + template <typename C, typename B, typename entity> + inline void + operator<< (xercesc::DOMAttr& a, const entities<C, B, entity>& v) + { + const list<entity, C>& r (v); + a << r; + } + + template <typename C, typename B, typename entity> + inline void + operator<< (list_stream<C>& ls, const entities<C, B, entity>& v) + { + const list<entity, C>& r (v); + ls << r; + } + } + } +} diff --git a/xsd/libxsd/xsd/cxx/tree/serialization/boolean.hxx b/xsd/libxsd/xsd/cxx/tree/serialization/boolean.hxx new file mode 100644 index 0000000..ce34560 --- /dev/null +++ b/xsd/libxsd/xsd/cxx/tree/serialization/boolean.hxx @@ -0,0 +1,52 @@ +// file : xsd/cxx/tree/serialization/boolean.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_CXX_TREE_SERIALIZATION_BOOLEAN_HXX +#define XSD_CXX_TREE_SERIALIZATION_BOOLEAN_HXX + +#include <sstream> + +namespace XERCES_CPP_NAMESPACE +{ + inline void + operator<< (xercesc::DOMElement& e, bool b) + { + std::basic_ostringstream<char> os; + os.setf (std::ios_base::boolalpha); + os << b; + e << os.str (); + } + + inline void + operator<< (xercesc::DOMAttr& a, bool b) + { + std::basic_ostringstream<char> os; + os.setf (std::ios_base::boolalpha); + os << b; + a << os.str (); + } +} + +namespace xsd +{ + namespace cxx + { + namespace tree + { + template <typename C> + inline void + operator<< (list_stream<C>& ls, bool b) + { + // We don't need to restore the original bool format flag + // since items in the list are all of the same type. + // + ls.os_.setf (std::ios_base::boolalpha); + ls.os_ << b; + } + } + } +} + +#endif // XSD_CXX_TREE_SERIALIZATION_BOOLEAN_HXX diff --git a/xsd/libxsd/xsd/cxx/tree/serialization/byte.hxx b/xsd/libxsd/xsd/cxx/tree/serialization/byte.hxx new file mode 100644 index 0000000..583eda9 --- /dev/null +++ b/xsd/libxsd/xsd/cxx/tree/serialization/byte.hxx @@ -0,0 +1,46 @@ +// file : xsd/cxx/tree/serialization/byte.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_CXX_TREE_SERIALIZATION_BYTE_HXX +#define XSD_CXX_TREE_SERIALIZATION_BYTE_HXX + +#include <sstream> + +namespace XERCES_CPP_NAMESPACE +{ + inline void + operator<< (xercesc::DOMElement& e, signed char c) + { + std::basic_ostringstream<char> os; + os << static_cast<short> (c); + e << os.str (); + } + + inline void + operator<< (xercesc::DOMAttr& a, signed char c) + { + std::basic_ostringstream<char> os; + os << static_cast<short> (c); + a << os.str (); + } +} + +namespace xsd +{ + namespace cxx + { + namespace tree + { + template <typename C> + inline void + operator<< (list_stream<C>& ls, signed char c) + { + ls.os_ << static_cast<short> (c); + } + } + } +} + +#endif // XSD_CXX_TREE_SERIALIZATION_BYTE_HXX diff --git a/xsd/libxsd/xsd/cxx/tree/serialization/date-time.txx b/xsd/libxsd/xsd/cxx/tree/serialization/date-time.txx new file mode 100644 index 0000000..1180e1c --- /dev/null +++ b/xsd/libxsd/xsd/cxx/tree/serialization/date-time.txx @@ -0,0 +1,620 @@ +// file : xsd/cxx/tree/serialization/date-time.txx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <locale> +#include <string> +#include <ostream> +#include <sstream> + +#include <xsd/cxx/tree/bits/literals.hxx> // bits::{gday_prefix,gmonth_prefix} + +namespace xsd +{ + namespace cxx + { + namespace tree + { + // time_zone + // + namespace bits + { + // Assumes the fill character is set to '0'. + // + template <typename C> + void + zone_insert (std::basic_ostream<C>& os, const time_zone& z) + { + // time-zone := Z|(+|-)HH:MM + // + short h = z.zone_hours (); + short m = z.zone_minutes (); + + if (h == 0 && m == 0) + { + os << C ('Z'); + } + else + { + if (h < 0 || m < 0) + { + h = -h; + m = -m; + os << C ('-'); + } + else + os << C ('+'); + + if (h >= 0 && h <= 14 && m >= 0 && m <= 59) + { + os.width (2); + os << h << C (':'); + os.width (2); + os << m; + } + } + } + } + + // gday + // + namespace bits + { + template <typename C, typename B> + void + insert (std::basic_ostream<C>& os, const tree::gday<C, B>& x) + { + if (x.day () < 32) + { + // Save some time and space by not restoring the fill character + // since it is the same in case of a list. + // + os.fill (C ('0')); + os << bits::gday_prefix<C> (); + os.width (2); + os << x.day (); + + if (x.zone_present ()) + zone_insert (os, x); + } + } + } + + template <typename C, typename B> + inline void + operator<< (xercesc::DOMElement& e, const gday<C, B>& x) + { + std::basic_ostringstream<C> os; + bits::insert (os, x); + e << os.str (); + } + + template <typename C, typename B> + inline void + operator<< (xercesc::DOMAttr& a, const gday<C, B>& x) + { + std::basic_ostringstream<C> os; + bits::insert (os, x); + a << os.str (); + } + + template <typename C, typename B> + inline void + operator<< (list_stream<C>& ls, const gday<C, B>& x) + { + bits::insert (ls.os_, x); + } + + // gmonth + // + namespace bits + { + template <typename C, typename B> + void + insert (std::basic_ostream<C>& os, const tree::gmonth<C, B>& x) + { + if (x.month () < 13) + { + os.fill (C ('0')); + os << bits::gmonth_prefix<C> (); + os.width (2); + os << x.month (); + + if (x.zone_present ()) + zone_insert (os, x); + } + } + } + + template <typename C, typename B> + inline void + operator<< (xercesc::DOMElement& e, const gmonth<C, B>& x) + { + std::basic_ostringstream<C> os; + bits::insert (os, x); + e << os.str (); + } + + template <typename C, typename B> + inline void + operator<< (xercesc::DOMAttr& a, const gmonth<C, B>& x) + { + std::basic_ostringstream<C> os; + bits::insert (os, x); + a << os.str (); + } + + template <typename C, typename B> + inline void + operator<< (list_stream<C>& ls, const gmonth<C, B>& x) + { + bits::insert (ls.os_, x); + } + + // gyear + // + namespace bits + { + template <typename C, typename B> + void + insert (std::basic_ostream<C>& os, const tree::gyear<C, B>& x) + { + os.fill (C ('0')); + os.width (4); + os << x.year (); + + if (x.zone_present ()) + zone_insert (os, x); + } + } + + template <typename C, typename B> + inline void + operator<< (xercesc::DOMElement& e, const gyear<C, B>& x) + { + std::basic_ostringstream<C> os; + bits::insert (os, x); + e << os.str (); + } + + template <typename C, typename B> + inline void + operator<< (xercesc::DOMAttr& a, const gyear<C, B>& x) + { + std::basic_ostringstream<C> os; + bits::insert (os, x); + a << os.str (); + } + + template <typename C, typename B> + inline void + operator<< (list_stream<C>& ls, const gyear<C, B>& x) + { + bits::insert (ls.os_, x); + } + + // gmonth_day + // + namespace bits + { + template <typename C, typename B> + void + insert (std::basic_ostream<C>& os, const tree::gmonth_day<C, B>& x) + { + if (x.month () < 13 && x.day () < 32) + { + os.fill (C ('0')); + os << bits::gmonth_prefix<C> (); + os.width (2); + os << x.month () << C ('-'); + os.width (2); + os << x.day (); + + if (x.zone_present ()) + zone_insert (os, x); + } + } + } + + template <typename C, typename B> + inline void + operator<< (xercesc::DOMElement& e, const gmonth_day<C, B>& x) + { + std::basic_ostringstream<C> os; + bits::insert (os, x); + e << os.str (); + } + + template <typename C, typename B> + inline void + operator<< (xercesc::DOMAttr& a, const gmonth_day<C, B>& x) + { + std::basic_ostringstream<C> os; + bits::insert (os, x); + a << os.str (); + } + + template <typename C, typename B> + inline void + operator<< (list_stream<C>& ls, const gmonth_day<C, B>& x) + { + bits::insert (ls.os_, x); + } + + // gyear_month + // + namespace bits + { + template <typename C, typename B> + void + insert (std::basic_ostream<C>& os, const tree::gyear_month<C, B>& x) + { + if (x.month () < 13) + { + os.fill (C ('0')); + os.width (4); + os << x.year () << C ('-'); + os.width (2); + os << x.month (); + + if (x.zone_present ()) + zone_insert (os, x); + } + } + } + + template <typename C, typename B> + inline void + operator<< (xercesc::DOMElement& e, const gyear_month<C, B>& x) + { + std::basic_ostringstream<C> os; + bits::insert (os, x); + e << os.str (); + } + + template <typename C, typename B> + inline void + operator<< (xercesc::DOMAttr& a, const gyear_month<C, B>& x) + { + std::basic_ostringstream<C> os; + bits::insert (os, x); + a << os.str (); + } + + template <typename C, typename B> + inline void + operator<< (list_stream<C>& ls, const gyear_month<C, B>& x) + { + bits::insert (ls.os_, x); + } + + // date + // + namespace bits + { + template <typename C, typename B> + void + insert (std::basic_ostream<C>& os, const tree::date<C, B>& x) + { + if (x.month () < 13 && x.day () < 32) + { + os.fill (C ('0')); + os.width (4); + os << x.year () << C ('-'); + os.width (2); + os << x.month () << C ('-'); + os.width (2); + os << x.day (); + + if (x.zone_present ()) + zone_insert (os, x); + } + } + } + + template <typename C, typename B> + inline void + operator<< (xercesc::DOMElement& e, const date<C, B>& x) + { + std::basic_ostringstream<C> os; + bits::insert (os, x); + e << os.str (); + } + + template <typename C, typename B> + inline void + operator<< (xercesc::DOMAttr& a, const date<C, B>& x) + { + std::basic_ostringstream<C> os; + bits::insert (os, x); + a << os.str (); + } + + template <typename C, typename B> + inline void + operator<< (list_stream<C>& ls, const date<C, B>& x) + { + bits::insert (ls.os_, x); + } + + // time + // + namespace bits + { + template <typename C, typename B> + void + insert (std::basic_ostream<C>& os, const tree::time<C, B>& x) + { + if (x.hours () <= 24 && + x.minutes () <= 59 && + x.seconds () >= 0.0 && + x.seconds () < 60.0) + { + os.fill (C ('0')); + os.width (2); + os << x.hours () << C (':'); + + os.width (2); + os << x.minutes () << C (':'); + + std::basic_ostringstream<C> ostr; + ostr.imbue (std::locale::classic ()); + ostr.width (9); + ostr.fill (C ('0')); + ostr << std::fixed << x.seconds (); + + std::basic_string<C> s (ostr.str ()); + + // Remove the trailing zeros and the decimal point if necessary. + // + typedef typename std::basic_string<C>::size_type size_type; + + size_type size (s.size ()), n (size); + + for (; n > 0 && s[n - 1] == C ('0'); --n)/*noop*/; + + if (n > 0 && s[n - 1] == C ('.')) + --n; + + if (n != size) + s.resize (n); + + os << s; + + if (x.zone_present ()) + zone_insert (os, x); + } + } + } + + template <typename C, typename B> + inline void + operator<< (xercesc::DOMElement& e, const time<C, B>& x) + { + std::basic_ostringstream<C> os; + bits::insert (os, x); + e << os.str (); + } + + template <typename C, typename B> + inline void + operator<< (xercesc::DOMAttr& a, const time<C, B>& x) + { + std::basic_ostringstream<C> os; + bits::insert (os, x); + a << os.str (); + } + + template <typename C, typename B> + inline void + operator<< (list_stream<C>& ls, const time<C, B>& x) + { + bits::insert (ls.os_, x); + } + + // date_time + // + namespace bits + { + template <typename C, typename B> + void + insert (std::basic_ostream<C>& os, const tree::date_time<C, B>& x) + { + if (x.month () <= 12 && + x.day () <= 31 && + x.hours () <= 24 && + x.minutes () <= 59 && + x.seconds () >= 0.0 && + x.seconds () < 60.0) + { + os.fill (C ('0')); + os.width (4); + os << x.year () << C ('-'); + + os.width (2); + os << x.month () << C ('-'); + + os.width (2); + os << x.day () << C ('T'); + + os.width (2); + os << x.hours () << C (':'); + + os.width (2); + os << x.minutes () << C (':'); + + std::basic_ostringstream<C> ostr; + ostr.imbue (std::locale::classic ()); + ostr.width (9); + ostr.fill (C ('0')); + ostr << std::fixed << x.seconds (); + + std::basic_string<C> s (ostr.str ()); + + // Remove the trailing zeros and the decimal point if necessary. + // + typedef typename std::basic_string<C>::size_type size_type; + + size_type size (s.size ()), n (size); + + for (; n > 0 && s[n - 1] == C ('0'); --n)/*noop*/; + + if (n > 0 && s[n - 1] == C ('.')) + --n; + + if (n != size) + s.resize (n); + + os << s; + + if (x.zone_present ()) + zone_insert (os, x); + } + } + } + + template <typename C, typename B> + inline void + operator<< (xercesc::DOMElement& e, const date_time<C, B>& x) + { + std::basic_ostringstream<C> os; + bits::insert (os, x); + e << os.str (); + } + + template <typename C, typename B> + inline void + operator<< (xercesc::DOMAttr& a, const date_time<C, B>& x) + { + std::basic_ostringstream<C> os; + bits::insert (os, x); + a << os.str (); + } + + template <typename C, typename B> + inline void + operator<< (list_stream<C>& ls, const date_time<C, B>& x) + { + bits::insert (ls.os_, x); + } + + // duration + // + namespace bits + { + template <typename C, typename B> + void + insert (std::basic_ostream<C>& os, const tree::duration<C, B>& x) + { + if (x.negative ()) + os << C ('-'); + + os << C ('P'); + + // years + // + // In case it is 0-duration, use the years field to handle + // this case. + // + if (x.years () != 0 || + (x.months () == 0 && + x.days () == 0 && + x.hours () == 0 && + x.minutes () == 0 && + x.seconds () == 0.0)) + { + os << x.years () << C ('Y'); + } + + // months + // + if (x.months () != 0) + { + os << x.months () << C ('M'); + } + + // days + // + if (x.days () != 0) + { + os << x.days () << C ('D'); + } + + // Figure out if we need the 'T' delimiter. + // + if (x.hours () != 0 || + x.minutes () != 0 || + x.seconds () != 0.0) + os << C ('T'); + + // hours + // + if (x.hours () != 0) + { + os << x.hours () << C ('H'); + } + + // minutes + // + if (x.minutes () != 0) + { + os << x.minutes () << C ('M'); + } + + // seconds + // + if (x.seconds () > 0.0) + { + std::basic_ostringstream<C> ostr; + ostr.imbue (std::locale::classic ()); + ostr << std::fixed << x.seconds (); + + std::basic_string<C> s (ostr.str ()); + + // Remove the trailing zeros and the decimal point if necessary. + // + typedef typename std::basic_string<C>::size_type size_type; + + size_type size (s.size ()), n (size); + + for (; n > 0 && s[n - 1] == C ('0'); --n)/*noop*/; + + if (n > 0 && s[n - 1] == C ('.')) + --n; + + if (n != size) + s.resize (n); + + os << s << C ('S'); + } + } + } + + template <typename C, typename B> + inline void + operator<< (xercesc::DOMElement& e, const duration<C, B>& x) + { + std::basic_ostringstream<C> os; + bits::insert (os, x); + e << os.str (); + } + + template <typename C, typename B> + inline void + operator<< (xercesc::DOMAttr& a, const duration<C, B>& x) + { + std::basic_ostringstream<C> os; + bits::insert (os, x); + a << os.str (); + } + + template <typename C, typename B> + inline void + operator<< (list_stream<C>& ls, const duration<C, B>& x) + { + bits::insert (ls.os_, x); + } + } + } +} diff --git a/xsd/libxsd/xsd/cxx/tree/serialization/decimal.hxx b/xsd/libxsd/xsd/cxx/tree/serialization/decimal.hxx new file mode 100644 index 0000000..971622f --- /dev/null +++ b/xsd/libxsd/xsd/cxx/tree/serialization/decimal.hxx @@ -0,0 +1,126 @@ +// file : xsd/cxx/tree/serialization/decimal.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_CXX_TREE_SERIALIZATION_DECIMAL_HXX +#define XSD_CXX_TREE_SERIALIZATION_DECIMAL_HXX + +#include <limits> // std::numeric_limits +#include <locale> +#include <sstream> + +namespace xsd +{ + namespace cxx + { + namespace tree + { + namespace bits + { + // The formula for the number of decimla digits required is given in: + // + // http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2005/n1822.pdf + // + template <typename C> + std::basic_string<C> + insert (const as_decimal<double>& d) + { + std::basic_ostringstream<C> os; + os.imbue (std::locale::classic ()); + std::streamsize prec; + + const facet* f = d.facets ? + facet::find (d.facets, facet::fraction_digits) : 0; + + if (f) + prec = static_cast<std::streamsize> (f->value); + else + { + // Precision. + // +#if defined (XSD_CXX_TREE_DECIMAL_PRECISION_MAX) + prec = 2 + std::numeric_limits<double>::digits * 301/1000; +#elif defined (XSD_CXX_TREE_DECIMAL_PRECISION) + prec = XSD_CXX_TREE_DECIMAL_PRECISION; +#else + prec = std::numeric_limits<double>::digits10; +#endif + } + + os.precision (prec); + os << std::fixed << d.x; + std::basic_string<C> r (os.str ()); + const C* cr (r.c_str ()); + + // Remove the trailing zeros and the decimal point if necessary. + // + typename std::basic_string<C>::size_type size (r.size ()), n (size); + + if (prec != 0) + { + for (; n > 0 && cr[n - 1] == '0'; --n)/*noop*/; + + if (n > 0 && cr[n - 1] == '.') + --n; + } + + // See if we have a restriction on total digits. + // + f = d.facets ? facet::find (d.facets, facet::total_digits) : 0; + + if (f && n > f->value) + { + // Point and sign do not count so figure out if we have them. + // + typename std::basic_string<C>::size_type extra ( + cr[0] == '-' ? 1 : 0); + + if (r.find ('.') < n) + extra++; + + // Unless we have a point and the size difference is one, + // remove some digits. + // + if ((n - extra) > f->value) + n -= (n - extra - f->value); + + if (n > 0 && cr[n - 1] == '.') + --n; + } + + if (n != size) + r.resize (n); + + return r; + } + } + + template <typename C> + inline void + operator<< (list_stream<C>& ls, const as_decimal<double>& d) + { + ls.os_ << bits::insert<C> (d); + } + } + } +} + +namespace XERCES_CPP_NAMESPACE +{ + inline void + operator<< (xercesc::DOMElement& e, + const xsd::cxx::tree::as_decimal<double>& d) + { + e << xsd::cxx::tree::bits::insert<char> (d); + } + + inline void + operator<< (xercesc::DOMAttr& a, + const xsd::cxx::tree::as_decimal<double>& d) + { + a << xsd::cxx::tree::bits::insert<char> (d); + } +} + +#endif // XSD_CXX_TREE_SERIALIZATION_DECIMAL_HXX diff --git a/xsd/libxsd/xsd/cxx/tree/serialization/double.hxx b/xsd/libxsd/xsd/cxx/tree/serialization/double.hxx new file mode 100644 index 0000000..6d21536 --- /dev/null +++ b/xsd/libxsd/xsd/cxx/tree/serialization/double.hxx @@ -0,0 +1,96 @@ +// file : xsd/cxx/tree/serialization/double.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_CXX_TREE_SERIALIZATION_DOUBLE_HXX +#define XSD_CXX_TREE_SERIALIZATION_DOUBLE_HXX + +#include <limits> // std::numeric_limits +#include <locale> +#include <sstream> + +#include <xsd/cxx/tree/bits/literals.hxx> + +namespace xsd +{ + namespace cxx + { + namespace tree + { + namespace bits + { + // The formula for the number of decimla digits required is given in: + // + // http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2005/n1822.pdf + // + template <typename C> + std::basic_string<C> + insert (const as_double<double>& d) + { + std::basic_string<C> r; + + if (d.x == std::numeric_limits<double>::infinity ()) + r = bits::positive_inf<C> (); + else if (d.x == -std::numeric_limits<double>::infinity ()) + r = bits::negative_inf<C> (); + else if (!(d.x == d.x)) + r = bits::nan<C> (); + else + { + std::basic_ostringstream<C> os; + os.imbue (std::locale::classic ()); + + // Precision. + // +#if defined (XSD_CXX_TREE_DOUBLE_PRECISION_MAX) + os.precision (2 + std::numeric_limits<double>::digits * 301/1000); +#elif defined (XSD_CXX_TREE_DOUBLE_PRECISION) + os.precision (XSD_CXX_TREE_DOUBLE_PRECISION); +#else + os.precision (std::numeric_limits<double>::digits10); +#endif + // Format. + // +#if defined (XSD_CXX_TREE_DOUBLE_FIXED) + os << std::fixed << d.x; +#elif defined (XSD_CXX_TREE_DOUBLE_SCIENTIFIC) + os << std::scientific << d.x; +#else + os << d.x; +#endif + r = os.str (); + } + + return r; + } + } + + template <typename C> + inline void + operator<< (list_stream<C>& ls, const as_double<double>& d) + { + ls.os_ << bits::insert<C> (d); + } + } + } +} + +namespace XERCES_CPP_NAMESPACE +{ + inline void + operator<< (xercesc::DOMElement& e, + const xsd::cxx::tree::as_double<double>& d) + { + e << xsd::cxx::tree::bits::insert<char> (d); + } + + inline void + operator<< (xercesc::DOMAttr& a, + const xsd::cxx::tree::as_double<double>& d) + { + a << xsd::cxx::tree::bits::insert<char> (d); + } +} + +#endif // XSD_CXX_TREE_SERIALIZATION_DOUBLE_HXX diff --git a/xsd/libxsd/xsd/cxx/tree/serialization/element-map.txx b/xsd/libxsd/xsd/cxx/tree/serialization/element-map.txx new file mode 100644 index 0000000..9870ff2 --- /dev/null +++ b/xsd/libxsd/xsd/cxx/tree/serialization/element-map.txx @@ -0,0 +1,40 @@ +// file : xsd/cxx/tree/serialization/element-map.txx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_CXX_TREE_SERIALIZATION_ELEMENT_MAP_TXX +#define XSD_CXX_TREE_SERIALIZATION_ELEMENT_MAP_TXX + +#include <xsd/cxx/tree/exceptions.hxx> + +namespace xsd +{ + namespace cxx + { + namespace tree + { + template <typename C, typename T> + void element_map<C, T>:: + serialize (xercesc::DOMElement& e, const element_type& x) + { + const qualified_name n (x._name (), x._namespace ()); + typename map::const_iterator i (map_->find (n)); + + if (i != map_->end () && i->second.serializer_ != 0) + return (i->second.serializer_) (e, x); + else + throw no_element_info<C> (n.name (), n.namespace_ ()); + } + + template<typename T, typename C, typename B> + void + serializer_impl (xercesc::DOMElement& e, const element_type<C, B>& x) + { + e << static_cast<const T&> (x); + } + } + } +} + +#endif // XSD_CXX_TREE_SERIALIZATION_ELEMENT_MAP_TXX diff --git a/xsd/libxsd/xsd/cxx/tree/serialization/float.hxx b/xsd/libxsd/xsd/cxx/tree/serialization/float.hxx new file mode 100644 index 0000000..2d37ae6 --- /dev/null +++ b/xsd/libxsd/xsd/cxx/tree/serialization/float.hxx @@ -0,0 +1,94 @@ +// file : xsd/cxx/tree/serialization/float.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_CXX_TREE_SERIALIZATION_FLOAT_HXX +#define XSD_CXX_TREE_SERIALIZATION_FLOAT_HXX + +#include <limits> // std::numeric_limits +#include <locale> +#include <sstream> + +#include <xsd/cxx/tree/bits/literals.hxx> + +namespace xsd +{ + namespace cxx + { + namespace tree + { + namespace bits + { + // The formula for the number of decimla digits required is given in: + // + // http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2005/n1822.pdf + // + template <typename C> + std::basic_string<C> + insert (float f) + { + std::basic_string<C> r; + + if (f == std::numeric_limits<float>::infinity ()) + r = bits::positive_inf<C> (); + else if (f == -std::numeric_limits<float>::infinity ()) + r = bits::negative_inf<C> (); + else if (!(f == f)) + r = bits::nan<C> (); + else + { + std::basic_ostringstream<C> os; + os.imbue (std::locale::classic ()); + + // Precision. + // +#if defined (XSD_CXX_TREE_FLOAT_PRECISION_MAX) + os.precision (2 + std::numeric_limits<float>::digits * 301/1000); +#elif defined (XSD_CXX_TREE_FLOAT_PRECISION) + os.precision (XSD_CXX_TREE_FLOAT_PRECISION); +#else + os.precision (std::numeric_limits<float>::digits10); +#endif + // Format. + // +#if defined (XSD_CXX_TREE_FLOAT_FIXED) + os << std::fixed << f; +#elif defined (XSD_CXX_TREE_FLOAT_SCIENTIFIC) + os << std::scientific << f; +#else + os << f; +#endif + r = os.str (); + } + + return r; + } + } + + template <typename C> + inline void + operator<< (list_stream<C>& ls, float f) + { + ls.os_ << bits::insert<C> (f); + } + } + } +} + +namespace XERCES_CPP_NAMESPACE +{ + inline void + operator<< (xercesc::DOMElement& e, float f) + { + e << xsd::cxx::tree::bits::insert<char> (f); + } + + inline void + operator<< (xercesc::DOMAttr& a, float f) + { + a << xsd::cxx::tree::bits::insert<char> (f); + } +} + +#endif // XSD_CXX_TREE_SERIALIZATION_FLOAT_HXX diff --git a/xsd/libxsd/xsd/cxx/tree/serialization/int.hxx b/xsd/libxsd/xsd/cxx/tree/serialization/int.hxx new file mode 100644 index 0000000..f88d6b8 --- /dev/null +++ b/xsd/libxsd/xsd/cxx/tree/serialization/int.hxx @@ -0,0 +1,46 @@ +// file : xsd/cxx/tree/serialization/int.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_CXX_TREE_SERIALIZATION_INT_HXX +#define XSD_CXX_TREE_SERIALIZATION_INT_HXX + +#include <sstream> + +namespace XERCES_CPP_NAMESPACE +{ + inline void + operator<< (xercesc::DOMElement& e, int i) + { + std::basic_ostringstream<char> os; + os << i; + e << os.str (); + } + + inline void + operator<< (xercesc::DOMAttr& a, int i) + { + std::basic_ostringstream<char> os; + os << i; + a << os.str (); + } +} + +namespace xsd +{ + namespace cxx + { + namespace tree + { + template <typename C> + inline void + operator<< (list_stream<C>& ls, int i) + { + ls.os_ << i; + } + } + } +} + +#endif // XSD_CXX_TREE_SERIALIZATION_INT_HXX diff --git a/xsd/libxsd/xsd/cxx/tree/serialization/long.hxx b/xsd/libxsd/xsd/cxx/tree/serialization/long.hxx new file mode 100644 index 0000000..c37338b --- /dev/null +++ b/xsd/libxsd/xsd/cxx/tree/serialization/long.hxx @@ -0,0 +1,46 @@ +// file : xsd/cxx/tree/serialization/long.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_CXX_TREE_SERIALIZATION_LONG_HXX +#define XSD_CXX_TREE_SERIALIZATION_LONG_HXX + +#include <sstream> + +namespace XERCES_CPP_NAMESPACE +{ + inline void + operator<< (xercesc::DOMElement& e, long long l) + { + std::basic_ostringstream<char> os; + os << l; + e << os.str (); + } + + inline void + operator<< (xercesc::DOMAttr& a, long long l) + { + std::basic_ostringstream<char> os; + os << l; + a << os.str (); + } +} + +namespace xsd +{ + namespace cxx + { + namespace tree + { + template <typename C> + inline void + operator<< (list_stream<C>& ls, long long l) + { + ls.os_ << l; + } + } + } +} + +#endif // XSD_CXX_TREE_SERIALIZATION_LONG_HXX diff --git a/xsd/libxsd/xsd/cxx/tree/serialization/short.hxx b/xsd/libxsd/xsd/cxx/tree/serialization/short.hxx new file mode 100644 index 0000000..7d885c1 --- /dev/null +++ b/xsd/libxsd/xsd/cxx/tree/serialization/short.hxx @@ -0,0 +1,46 @@ +// file : xsd/cxx/tree/serialization/short.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_CXX_TREE_SERIALIZATION_SHORT_HXX +#define XSD_CXX_TREE_SERIALIZATION_SHORT_HXX + +#include <sstream> + +namespace XERCES_CPP_NAMESPACE +{ + inline void + operator<< (xercesc::DOMElement& e, short s) + { + std::basic_ostringstream<char> os; + os << s; + e << os.str (); + } + + inline void + operator<< (xercesc::DOMAttr& a, short s) + { + std::basic_ostringstream<char> os; + os << s; + a << os.str (); + } +} + +namespace xsd +{ + namespace cxx + { + namespace tree + { + template <typename C> + inline void + operator<< (list_stream<C>& ls, short s) + { + ls.os_ << s; + } + } + } +} + +#endif // XSD_CXX_TREE_SERIALIZATION_SHORT_HXX diff --git a/xsd/libxsd/xsd/cxx/tree/serialization/unsigned-byte.hxx b/xsd/libxsd/xsd/cxx/tree/serialization/unsigned-byte.hxx new file mode 100644 index 0000000..114f1a1 --- /dev/null +++ b/xsd/libxsd/xsd/cxx/tree/serialization/unsigned-byte.hxx @@ -0,0 +1,46 @@ +// file : xsd/cxx/tree/serialization/unsigned-byte.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_CXX_TREE_SERIALIZATION_UNSIGNED_BYTE_HXX +#define XSD_CXX_TREE_SERIALIZATION_UNSIGNED_BYTE_HXX + +#include <sstream> + +namespace XERCES_CPP_NAMESPACE +{ + inline void + operator<< (xercesc::DOMElement& e, unsigned char c) + { + std::basic_ostringstream<char> os; + os << static_cast<unsigned short> (c); + e << os.str (); + } + + inline void + operator<< (xercesc::DOMAttr& a, unsigned char c) + { + std::basic_ostringstream<char> os; + os << static_cast<unsigned short> (c); + a << os.str (); + } +} + +namespace xsd +{ + namespace cxx + { + namespace tree + { + template <typename C> + inline void + operator<< (list_stream<C>& ls, unsigned char c) + { + ls.os_ << static_cast<unsigned short> (c); + } + } + } +} + +#endif // XSD_CXX_TREE_SERIALIZATION_UNSIGNED_BYTE_HXX diff --git a/xsd/libxsd/xsd/cxx/tree/serialization/unsigned-int.hxx b/xsd/libxsd/xsd/cxx/tree/serialization/unsigned-int.hxx new file mode 100644 index 0000000..f91fe21 --- /dev/null +++ b/xsd/libxsd/xsd/cxx/tree/serialization/unsigned-int.hxx @@ -0,0 +1,46 @@ +// file : xsd/cxx/tree/serialization/unsigned-int.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_CXX_TREE_SERIALIZATION_UNSIGNED_INT_HXX +#define XSD_CXX_TREE_SERIALIZATION_UNSIGNED_INT_HXX + +#include <sstream> + +namespace XERCES_CPP_NAMESPACE +{ + inline void + operator<< (xercesc::DOMElement& e, unsigned int i) + { + std::basic_ostringstream<char> os; + os << i; + e << os.str (); + } + + inline void + operator<< (xercesc::DOMAttr& a, unsigned int i) + { + std::basic_ostringstream<char> os; + os << i; + a << os.str (); + } +} + +namespace xsd +{ + namespace cxx + { + namespace tree + { + template <typename C> + inline void + operator<< (list_stream<C>& ls, unsigned int i) + { + ls.os_ << i; + } + } + } +} + +#endif // XSD_CXX_TREE_SERIALIZATION_UNSIGNED_INT_HXX diff --git a/xsd/libxsd/xsd/cxx/tree/serialization/unsigned-long.hxx b/xsd/libxsd/xsd/cxx/tree/serialization/unsigned-long.hxx new file mode 100644 index 0000000..f5f12f3 --- /dev/null +++ b/xsd/libxsd/xsd/cxx/tree/serialization/unsigned-long.hxx @@ -0,0 +1,46 @@ +// file : xsd/cxx/tree/serialization/unsigned-long.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_CXX_TREE_SERIALIZATION_UNSIGNED_LONG_HXX +#define XSD_CXX_TREE_SERIALIZATION_UNSIGNED_LONG_HXX + +#include <sstream> + +namespace XERCES_CPP_NAMESPACE +{ + inline void + operator<< (xercesc::DOMElement& e, unsigned long long l) + { + std::basic_ostringstream<char> os; + os << l; + e << os.str (); + } + + inline void + operator<< (xercesc::DOMAttr& a, unsigned long long l) + { + std::basic_ostringstream<char> os; + os << l; + a << os.str (); + } +} + +namespace xsd +{ + namespace cxx + { + namespace tree + { + template <typename C> + inline void + operator<< (list_stream<C>& ls, unsigned long long l) + { + ls.os_ << l; + } + } + } +} + +#endif // XSD_CXX_TREE_SERIALIZATION_UNSIGNED_LONG_HXX diff --git a/xsd/libxsd/xsd/cxx/tree/serialization/unsigned-short.hxx b/xsd/libxsd/xsd/cxx/tree/serialization/unsigned-short.hxx new file mode 100644 index 0000000..52437e0 --- /dev/null +++ b/xsd/libxsd/xsd/cxx/tree/serialization/unsigned-short.hxx @@ -0,0 +1,46 @@ +// file : xsd/cxx/tree/serialization/unsigned-short.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_CXX_TREE_SERIALIZATION_UNSIGNED_SHORT_HXX +#define XSD_CXX_TREE_SERIALIZATION_UNSIGNED_SHORT_HXX + +#include <sstream> + +namespace XERCES_CPP_NAMESPACE +{ + inline void + operator<< (xercesc::DOMElement& e, unsigned short s) + { + std::basic_ostringstream<char> os; + os << s; + e << os.str (); + } + + inline void + operator<< (xercesc::DOMAttr& a, unsigned short s) + { + std::basic_ostringstream<char> os; + os << s; + a << os.str (); + } +} + +namespace xsd +{ + namespace cxx + { + namespace tree + { + template <typename C> + inline void + operator<< (list_stream<C>& ls, unsigned short s) + { + ls.os_ << s; + } + } + } +} + +#endif // XSD_CXX_TREE_SERIALIZATION_UNSIGNED_SHORT_HXX diff --git a/xsd/libxsd/xsd/cxx/tree/std-ostream-map.hxx b/xsd/libxsd/xsd/cxx/tree/std-ostream-map.hxx new file mode 100644 index 0000000..28619a5 --- /dev/null +++ b/xsd/libxsd/xsd/cxx/tree/std-ostream-map.hxx @@ -0,0 +1,114 @@ +// file : xsd/cxx/tree/std-ostream-map.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_CXX_TREE_STD_OSTREAM_MAP_HXX +#define XSD_CXX_TREE_STD_OSTREAM_MAP_HXX + +#include <map> +#include <cstddef> // std::size_t +#include <ostream> +#include <typeinfo> + +#include <xsd/cxx/tree/elements.hxx> + +namespace xsd +{ + namespace cxx + { + namespace tree + { + template <typename C> + struct std_ostream_map + { + typedef std::type_info type_id; + typedef void (*inserter) (std::basic_ostream<C>&, const type&); + + std_ostream_map (); + + void + register_type (const type_id&, inserter, bool override = true); + + void + unregister_type (const type_id&); + + void + insert (std::basic_ostream<C>&, const type&); + + public: + inserter + find (const type_id&) const; + + private: + struct type_id_comparator + { + bool + operator() (const type_id* x, const type_id* y) const + { + // XL C++ on AIX has buggy type_info::before() in that + // it returns true for two different type_info objects + // that happened to be for the same type. + // +#if defined(__xlC__) && defined(_AIX) + return *x != *y && x->before (*y); +#else + return x->before (*y); +#endif + } + }; + + typedef + std::map<const type_id*, inserter, type_id_comparator> + type_map; + + type_map type_map_; + }; + + // + // + template<unsigned long id, typename C> + struct std_ostream_plate + { + static std_ostream_map<C>* map; + static std::size_t count; + + std_ostream_plate (); + ~std_ostream_plate (); + }; + + template<unsigned long id, typename C> + std_ostream_map<C>* std_ostream_plate<id, C>::map = 0; + + template<unsigned long id, typename C> + std::size_t std_ostream_plate<id, C>::count = 0; + + + // + // + template<unsigned long id, typename C> + inline std_ostream_map<C>& + std_ostream_map_instance () + { + return *std_ostream_plate<id, C>::map; + } + + // + // + template<typename C, typename T> + void + inserter_impl (std::basic_ostream<C>&, const type&); + + template<unsigned long id, typename C, typename T> + struct std_ostream_initializer + { + std_ostream_initializer (); + ~std_ostream_initializer (); + }; + } + } +} + +#include <xsd/cxx/tree/std-ostream-map.txx> + +#endif // XSD_CXX_TREE_STD_OSTREAM_MAP_HXX diff --git a/xsd/libxsd/xsd/cxx/tree/std-ostream-map.txx b/xsd/libxsd/xsd/cxx/tree/std-ostream-map.txx new file mode 100644 index 0000000..6a748ec --- /dev/null +++ b/xsd/libxsd/xsd/cxx/tree/std-ostream-map.txx @@ -0,0 +1,293 @@ +// file : xsd/cxx/tree/std-ostream-map.txx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <xsd/cxx/tree/types.hxx> +#include <xsd/cxx/tree/std-ostream-operators.hxx> + +namespace xsd +{ + namespace cxx + { + namespace tree + { + // std_ostream_map + // + template <typename C> + std_ostream_map<C>:: + std_ostream_map () + { + // anyType and anySimpleType. + // + register_type ( + typeid (type), + &inserter_impl<C, type>, + false); + + typedef simple_type<type> simple_type; + register_type ( + typeid (simple_type), + &inserter_impl<C, simple_type>, + false); + + + // Strings + // + typedef string<C, simple_type> string; + register_type ( + typeid (string), + &inserter_impl<C, string>, + false); + + typedef normalized_string<C, string> normalized_string; + register_type ( + typeid (normalized_string), + &inserter_impl<C, normalized_string>, + false); + + typedef token<C, normalized_string> token; + register_type ( + typeid (token), + &inserter_impl<C, token>, + false); + + typedef name<C, token> name; + register_type ( + typeid (name), + &inserter_impl<C, name>, + false); + + typedef nmtoken<C, token> nmtoken; + register_type ( + typeid (nmtoken), + &inserter_impl<C, nmtoken>, + false); + + typedef nmtokens<C, simple_type, nmtoken> nmtokens; + register_type ( + typeid (nmtokens), + &inserter_impl<C, nmtokens>, + false); + + typedef ncname<C, name> ncname; + register_type ( + typeid (ncname), + &inserter_impl<C, ncname>, + false); + + typedef language<C, token> language; + register_type ( + typeid (language), + &inserter_impl<C, language>, + false); + + + // ID/IDREF. + // + typedef id<C, ncname> id; + register_type ( + typeid (id), + &inserter_impl<C, id>, + false); + + typedef idref<C, ncname, type> idref; + register_type ( + typeid (idref), + &inserter_impl<C, idref>, + false); + + typedef idrefs<C, simple_type, idref> idrefs; + register_type ( + typeid (idrefs), + &inserter_impl<C, idrefs>, + false); + + + // URI. + // + typedef uri<C, simple_type> uri; + register_type ( + typeid (uri), + &inserter_impl<C, uri>, + false); + + + // Qualified name. + // + typedef qname<C, simple_type, uri, ncname> qname; + register_type ( + typeid (qname), + &inserter_impl<C, qname>, + false); + + + // Binary. + // + typedef base64_binary<C, simple_type> base64_binary; + register_type ( + typeid (base64_binary), + &inserter_impl<C, base64_binary>, + false); + + typedef hex_binary<C, simple_type> hex_binary; + register_type ( + typeid (hex_binary), + &inserter_impl<C, hex_binary>, + false); + + + // Date/time. + // + typedef gday<C, simple_type> gday; + register_type ( + typeid (gday), + &inserter_impl<C, gday>, + false); + + typedef gmonth<C, simple_type> gmonth; + register_type ( + typeid (gmonth), + &inserter_impl<C, gmonth>, + false); + + typedef gyear<C, simple_type> gyear; + register_type ( + typeid (gyear), + &inserter_impl<C, gyear>, + false); + + typedef gmonth_day<C, simple_type> gmonth_day; + register_type ( + typeid (gmonth_day), + &inserter_impl<C, gmonth_day>, + false); + + typedef gyear_month<C, simple_type> gyear_month; + register_type ( + typeid (gyear_month), + &inserter_impl<C, gyear_month>, + false); + + typedef date<C, simple_type> date; + register_type ( + typeid (date), + &inserter_impl<C, date>, + false); + + typedef time<C, simple_type> time; + register_type ( + typeid (time), + &inserter_impl<C, time>, + false); + + typedef date_time<C, simple_type> date_time; + register_type ( + typeid (date_time), + &inserter_impl<C, date_time>, + false); + + typedef duration<C, simple_type> duration; + register_type ( + typeid (duration), + &inserter_impl<C, duration>, + false); + + + // Entity. + // + typedef entity<C, ncname> entity; + register_type ( + typeid (entity), + &inserter_impl<C, entity>, + false); + + typedef entities<C, simple_type, entity> entities; + register_type ( + typeid (entities), + &inserter_impl<C, entities>, + false); + } + + template <typename C> + void std_ostream_map<C>:: + register_type (const type_id& tid, inserter i, bool override) + { + if (override || type_map_.find (&tid) == type_map_.end ()) + type_map_[&tid] = i; + } + + template <typename C> + void std_ostream_map<C>:: + unregister_type (const type_id& tid) + { + type_map_.erase (&tid); + } + + template <typename C> + void std_ostream_map<C>:: + insert (std::basic_ostream<C>& os, const type& x) + { + if (inserter i = find (typeid (x))) + i (os, x); + else + throw no_type_info<C> (std::basic_string<C> (), + std::basic_string<C> ()); // @@ TODO + } + + template <typename C> + typename std_ostream_map<C>::inserter std_ostream_map<C>:: + find (const type_id& tid) const + { + typename type_map::const_iterator i (type_map_.find (&tid)); + return i == type_map_.end () ? 0 : i->second; + } + + // std_ostream_plate + // + template<unsigned long id, typename C> + std_ostream_plate<id, C>:: + std_ostream_plate () + { + if (count == 0) + map = new std_ostream_map<C>; + + ++count; + } + + template<unsigned long id, typename C> + std_ostream_plate<id, C>:: + ~std_ostream_plate () + { + if (--count == 0) + delete map; + } + + // + // + template<typename C, typename T> + void + inserter_impl (std::basic_ostream<C>& os, const type& x) + { + os << static_cast<const T&> (x); + } + + // std_ostream_initializer + // + template<unsigned long id, typename C, typename T> + std_ostream_initializer<id, C, T>:: + std_ostream_initializer () + { + std_ostream_map_instance<id, C> ().register_type ( + typeid (T), &inserter_impl<C, T>); + } + + template<unsigned long id, typename C, typename T> + std_ostream_initializer<id, C, T>:: + ~std_ostream_initializer () + { + std_ostream_map_instance<id, C> ().unregister_type (typeid (T)); + } + } + } +} diff --git a/xsd/libxsd/xsd/cxx/tree/std-ostream-operators.hxx b/xsd/libxsd/xsd/cxx/tree/std-ostream-operators.hxx new file mode 100644 index 0000000..a7ab357 --- /dev/null +++ b/xsd/libxsd/xsd/cxx/tree/std-ostream-operators.hxx @@ -0,0 +1,274 @@ +// file : xsd/cxx/tree/std-ostream-operators.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_CXX_TREE_STD_OSTREAM_OPERATORS_HXX +#define XSD_CXX_TREE_STD_OSTREAM_OPERATORS_HXX + +#include <ostream> + +#include <xsd/cxx/tree/elements.hxx> +#include <xsd/cxx/tree/containers.hxx> +#include <xsd/cxx/tree/types.hxx> +#include <xsd/cxx/tree/list.hxx> + +namespace xsd +{ + namespace cxx + { + namespace tree + { + // type + // + template <typename C> + inline std::basic_ostream<C>& + operator<< (std::basic_ostream<C>& os, const type&) + { + return os; + } + + + // simple_type + // + template <typename C, typename B> + inline std::basic_ostream<C>& + operator<< (std::basic_ostream<C>& os, const simple_type<B>&) + { + return os; + } + + + // fundamental_base + // + template <typename T, typename C, typename B, schema_type::value ST> + inline + std::basic_ostream<C>& + operator<< (std::basic_ostream<C>& os, fundamental_base<T, C, B, ST> x) + { + T& r (x); + return os << r; + } + + // optional: see containers.hxx + // + + // list + // + + // This is an xsd:list-style format (space-separated). + // + template <typename C, typename T, schema_type::value ST, bool fund> + std::basic_ostream<C>& + operator<< (std::basic_ostream<C>& os, const list<T, C, ST, fund>& v) + { + for (typename list<T, C, ST, fund>::const_iterator + b (v.begin ()), e (v.end ()), i (b); i != e; ++i) + { + if (i != b) + os << C (' '); + + os << *i; + } + + return os; + } + + + // Operators for built-in types. + // + + + // string + // + template <typename C, typename B> + inline std::basic_ostream<C>& + operator<< (std::basic_ostream<C>& os, const string<C, B>& v) + { + const std::basic_string<C>& r (v); + return os << r; + } + + + // normalized_string + // + template <typename C, typename B> + inline std::basic_ostream<C>& + operator<< (std::basic_ostream<C>& os, const normalized_string<C, B>& v) + { + const B& r (v); + return os << r; + } + + + // token + // + template <typename C, typename B> + inline std::basic_ostream<C>& + operator<< (std::basic_ostream<C>& os, const token<C, B>& v) + { + const B& r (v); + return os << r; + } + + + // nmtoken + // + template <typename C, typename B> + inline std::basic_ostream<C>& + operator<< (std::basic_ostream<C>& os, const nmtoken<C, B>& v) + { + const B& r (v); + return os << r; + } + + + // nmtokens + // + template <typename C, typename B, typename nmtoken> + inline std::basic_ostream<C>& + operator<< (std::basic_ostream<C>& os, const nmtokens<C, B, nmtoken>& v) + { + const list<nmtoken, C>& r (v); + return os << r; + } + + + // name + // + template <typename C, typename B> + inline std::basic_ostream<C>& + operator<< (std::basic_ostream<C>& os, const name<C, B>& v) + { + const B& r (v); + return os << r; + } + + + // ncname + // + template <typename C, typename B> + inline std::basic_ostream<C>& + operator<< (std::basic_ostream<C>& os, const ncname<C, B>& v) + { + const B& r (v); + return os << r; + } + + + // language + // + template <typename C, typename B> + inline std::basic_ostream<C>& + operator<< (std::basic_ostream<C>& os, const language<C, B>& v) + { + const B& r (v); + return os << r; + } + + + // id + // + template <typename C, typename B> + inline std::basic_ostream<C>& + operator<< (std::basic_ostream<C>& os, const id<C, B>& v) + { + const B& r (v); + return os << r; + } + + + // idref + // + template <typename C, typename B, typename T> + inline std::basic_ostream<C>& + operator<< (std::basic_ostream<C>& os, const idref<C, B, T>& v) + { + const B& r (v); + return os << r; + } + + + // idrefs + // + template <typename C, typename B, typename idref> + inline std::basic_ostream<C>& + operator<< (std::basic_ostream<C>& os, const idrefs<C, B, idref>& v) + { + const list<idref, C>& r (v); + return os << r; + } + + + // uri + // + template <typename C, typename B> + inline std::basic_ostream<C>& + operator<< (std::basic_ostream<C>& os, const uri<C, B>& v) + { + const std::basic_string<C>& r (v); + return os << r; + } + + + // qname + // + template <typename C, typename B, typename uri, typename ncname> + inline std::basic_ostream<C>& + operator<< (std::basic_ostream<C>& os, + const qname<C, B, uri, ncname>& n) + { + if (n.qualified ()) + os << n.namespace_ () << C ('#'); + + return os << n.name (); + } + + + // base64_binary + // + template <typename C, typename B> + inline std::basic_ostream<C>& + operator<< (std::basic_ostream<C>& os, const base64_binary<C, B>& v) + { + return os << v.encode (); + } + + + // hex_binary + // + template <typename C, typename B> + inline std::basic_ostream<C>& + operator<< (std::basic_ostream<C>& os, const hex_binary<C, B>& v) + { + return os << v.encode (); + } + + + // entity + // + template <typename C, typename B> + inline std::basic_ostream<C>& + operator<< (std::basic_ostream<C>& os, const entity<C, B>& v) + { + const B& r (v); + return os << r; + } + + + // entities + // + template <typename C, typename B, typename entity> + inline std::basic_ostream<C>& + operator<< (std::basic_ostream<C>& os, const entities<C, B, entity>& v) + { + const list<entity, C>& r (v); + return os << r; + } + } + } +} + +#include <xsd/cxx/tree/date-time-ostream.txx> + +#endif // XSD_CXX_TREE_STD_OSTREAM_OPERATORS_HXX diff --git a/xsd/libxsd/xsd/cxx/tree/stream-extraction-map.hxx b/xsd/libxsd/xsd/cxx/tree/stream-extraction-map.hxx new file mode 100644 index 0000000..dd4c79a --- /dev/null +++ b/xsd/libxsd/xsd/cxx/tree/stream-extraction-map.hxx @@ -0,0 +1,105 @@ +// file : xsd/cxx/tree/stream-extraction-map.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_CXX_TREE_STREAM_EXTRACTION_MAP_HXX +#define XSD_CXX_TREE_STREAM_EXTRACTION_MAP_HXX + +#include <map> +#include <memory> // std::auto_ptr +#include <cstddef> // std::size_t + +#include <xsd/cxx/tree/elements.hxx> +#include <xsd/cxx/tree/istream.hxx> +#include <xsd/cxx/xml/qualified-name.hxx> + +namespace xsd +{ + namespace cxx + { + namespace tree + { + template <typename S, typename C> + struct stream_extraction_map + { + typedef xml::qualified_name<C> qualified_name; + typedef std::auto_ptr<type> (*extractor) ( + istream<S>&, flags, container*); + + public: + stream_extraction_map (); + + void + register_type (const qualified_name& name, + extractor, + bool override = true); + + void + unregister_type (const qualified_name& name); + + std::auto_ptr<type> + extract (istream<S>&, flags, container*); + + public: + extractor + find (const qualified_name& name) const; + + private: + typedef std::map<qualified_name, extractor> type_map; + + type_map type_map_; + }; + + // + // + template<unsigned long id, typename S, typename C> + struct stream_extraction_plate + { + static stream_extraction_map<S, C>* map; + static std::size_t count; + + stream_extraction_plate (); + ~stream_extraction_plate (); + }; + + template<unsigned long id, typename S, typename C> + stream_extraction_map<S, C>* stream_extraction_plate<id, S, C>::map = 0; + + template<unsigned long id, typename S, typename C> + std::size_t stream_extraction_plate<id, S, C>::count = 0; + + + // + // + template<unsigned long id, typename S, typename C> + inline stream_extraction_map<S, C>& + stream_extraction_map_instance () + { + return *stream_extraction_plate<id, S, C>::map; + } + + // + // + template<typename S, typename T> + std::auto_ptr<type> + extractor_impl (istream<S>&, flags, container*); + + + template<unsigned long id, typename S, typename C, typename T> + struct stream_extraction_initializer + { + stream_extraction_initializer (const C* name, const C* ns); + ~stream_extraction_initializer (); + + private: + const C* name_; + const C* ns_; + }; + } + } +} + +#include <xsd/cxx/tree/stream-extraction-map.txx> + +#endif // XSD_CXX_TREE_STREAM_EXTRACTION_MAP_HXX diff --git a/xsd/libxsd/xsd/cxx/tree/stream-extraction-map.txx b/xsd/libxsd/xsd/cxx/tree/stream-extraction-map.txx new file mode 100644 index 0000000..a4e429e --- /dev/null +++ b/xsd/libxsd/xsd/cxx/tree/stream-extraction-map.txx @@ -0,0 +1,310 @@ +// file : xsd/cxx/tree/stream-extraction-map.txx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <xsd/cxx/tree/types.hxx> +#include <xsd/cxx/tree/stream-extraction.hxx> +#include <xsd/cxx/tree/bits/literals.hxx> + +namespace xsd +{ + namespace cxx + { + namespace tree + { + // stream_extraction_map + // + template <typename S, typename C> + stream_extraction_map<S, C>:: + stream_extraction_map () + { + // Register extractors for built-in non-fundamental types. + // + std::basic_string<C> xsd (bits::xml_schema<C> ()); + + + // anyType and anySimpleType. + // + register_type ( + qualified_name (bits::any_type<C> (), xsd), + &extractor_impl<S, type>, + false); + + typedef simple_type<type> simple_type; + register_type ( + qualified_name (bits::any_simple_type<C> (), xsd), + &extractor_impl<S, simple_type>, + false); + + + // Strings + // + typedef string<C, simple_type> string; + register_type ( + qualified_name (bits::string<C> (), xsd), + &extractor_impl<S, string>, + false); + + typedef normalized_string<C, string> normalized_string; + register_type ( + qualified_name (bits::normalized_string<C> (), xsd), + &extractor_impl<S, normalized_string>, + false); + + typedef token<C, normalized_string> token; + register_type ( + qualified_name (bits::token<C> (), xsd), + &extractor_impl<S, token>, + false); + + typedef name<C, token> name; + register_type ( + qualified_name (bits::name<C> (), xsd), + &extractor_impl<S, name>, + false); + + typedef nmtoken<C, token> nmtoken; + register_type ( + qualified_name (bits::nmtoken<C> (), xsd), + &extractor_impl<S, nmtoken>, + false); + + typedef nmtokens<C, simple_type, nmtoken> nmtokens; + register_type ( + qualified_name (bits::nmtokens<C> (), xsd), + &extractor_impl<S, nmtokens>, + false); + + typedef ncname<C, name> ncname; + register_type ( + qualified_name (bits::ncname<C> (), xsd), + &extractor_impl<S, ncname>, + false); + + typedef language<C, token> language; + register_type ( + qualified_name (bits::language<C> (), xsd), + &extractor_impl<S, language>, + false); + + + // ID/IDREF. + // + typedef id<C, ncname> id; + register_type ( + qualified_name (bits::id<C> (), xsd), + &extractor_impl<S, id>, + false); + + typedef idref<C, ncname, type> idref; + register_type ( + qualified_name (bits::idref<C> (), xsd), + &extractor_impl<S, idref>, + false); + + typedef idrefs<C, simple_type, idref> idrefs; + register_type ( + qualified_name (bits::idrefs<C> (), xsd), + &extractor_impl<S, idrefs>, + false); + + + // URI. + // + typedef uri<C, simple_type> uri; + register_type ( + qualified_name (bits::any_uri<C> (), xsd), + &extractor_impl<S, uri>, + false); + + + // Qualified name. + // + typedef qname<C, simple_type, uri, ncname> qname; + register_type ( + qualified_name (bits::qname<C> (), xsd), + &extractor_impl<S, qname>, + false); + + + // Binary. + // + typedef base64_binary<C, simple_type> base64_binary; + register_type ( + qualified_name (bits::base64_binary<C> (), xsd), + &extractor_impl<S, base64_binary>, + false); + + typedef hex_binary<C, simple_type> hex_binary; + register_type ( + qualified_name (bits::hex_binary<C> (), xsd), + &extractor_impl<S, hex_binary>, + false); + + + // Date/time. + // + typedef gday<C, simple_type> gday; + register_type ( + qualified_name (bits::gday<C> (), xsd), + &extractor_impl<S, gday>, + false); + + typedef gmonth<C, simple_type> gmonth; + register_type ( + qualified_name (bits::gmonth<C> (), xsd), + &extractor_impl<S, gmonth>, + false); + + typedef gyear<C, simple_type> gyear; + register_type ( + qualified_name (bits::gyear<C> (), xsd), + &extractor_impl<S, gyear>, + false); + + typedef gmonth_day<C, simple_type> gmonth_day; + register_type ( + qualified_name (bits::gmonth_day<C> (), xsd), + &extractor_impl<S, gmonth_day>, + false); + + typedef gyear_month<C, simple_type> gyear_month; + register_type ( + qualified_name (bits::gyear_month<C> (), xsd), + &extractor_impl<S, gyear_month>, + false); + + typedef date<C, simple_type> date; + register_type ( + qualified_name (bits::date<C> (), xsd), + &extractor_impl<S, date>, + false); + + typedef time<C, simple_type> time; + register_type ( + qualified_name (bits::time<C> (), xsd), + &extractor_impl<S, time>, + false); + + typedef date_time<C, simple_type> date_time; + register_type ( + qualified_name (bits::date_time<C> (), xsd), + &extractor_impl<S, date_time>, + false); + + typedef duration<C, simple_type> duration; + register_type ( + qualified_name (bits::duration<C> (), xsd), + &extractor_impl<S, duration>, + false); + + + // Entity. + // + typedef entity<C, ncname> entity; + register_type ( + qualified_name (bits::entity<C> (), xsd), + &extractor_impl<S, entity>, + false); + + typedef entities<C, simple_type, entity> entities; + register_type ( + qualified_name (bits::entities<C> (), xsd), + &extractor_impl<S, entities>, + false); + } + + template <typename S, typename C> + void stream_extraction_map<S, C>:: + register_type (const qualified_name& name, + extractor e, + bool override) + { + if (override || type_map_.find (name) == type_map_.end ()) + type_map_[name] = e; + } + + template <typename S, typename C> + void stream_extraction_map<S, C>:: + unregister_type (const qualified_name& name) + { + type_map_.erase (name); + } + + template <typename S, typename C> + std::auto_ptr<type> stream_extraction_map<S, C>:: + extract (istream<S>& s, flags f, container* c) + { + std::basic_string<C> name, ns; + s >> ns >> name; + + if (extractor e = find (qualified_name (name, ns))) + { + return e (s, f, c); + } + else + throw no_type_info<C> (name, ns); + } + + template <typename S, typename C> + typename stream_extraction_map<S, C>::extractor + stream_extraction_map<S, C>:: + find (const qualified_name& name) const + { + typename type_map::const_iterator i (type_map_.find (name)); + return i == type_map_.end () ? 0 : i->second; + } + + + // stream_extraction_plate + // + template<unsigned long id, typename S, typename C> + stream_extraction_plate<id, S, C>:: + stream_extraction_plate () + { + if (count == 0) + map = new stream_extraction_map<S, C>; + + ++count; + } + + template<unsigned long id, typename S, typename C> + stream_extraction_plate<id, S, C>:: + ~stream_extraction_plate () + { + if (--count == 0) + delete map; + } + + // + // + template<typename S, typename T> + std::auto_ptr<type> + extractor_impl (istream<S>& s, flags f, container* c) + { + return std::auto_ptr<type> (new T (s, f, c)); + } + + + // stream_extraction_initializer + // + template<unsigned long id, typename S, typename C, typename T> + stream_extraction_initializer<id, S, C, T>:: + stream_extraction_initializer (const C* name, const C* ns) + : name_ (name), ns_ (ns) + { + stream_extraction_map_instance<id, S, C> ().register_type ( + xml::qualified_name<C> (name, ns), &extractor_impl<S, T>); + } + + template<unsigned long id, typename S, typename C, typename T> + stream_extraction_initializer<id, S, C, T>:: + ~stream_extraction_initializer () + { + stream_extraction_map_instance<id, S, C> ().unregister_type ( + xml::qualified_name<C> (name_, ns_)); + } + } + } +} diff --git a/xsd/libxsd/xsd/cxx/tree/stream-extraction.hxx b/xsd/libxsd/xsd/cxx/tree/stream-extraction.hxx new file mode 100644 index 0000000..f82042f --- /dev/null +++ b/xsd/libxsd/xsd/cxx/tree/stream-extraction.hxx @@ -0,0 +1,303 @@ +// file : xsd/cxx/tree/stream-extraction.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_CXX_TREE_STREAM_EXTRACTION_HXX +#define XSD_CXX_TREE_STREAM_EXTRACTION_HXX + +#include <xsd/cxx/tree/elements.hxx> +#include <xsd/cxx/tree/types.hxx> +#include <xsd/cxx/tree/list.hxx> + +#include <xsd/cxx/tree/istream.hxx> + +namespace xsd +{ + namespace cxx + { + namespace tree + { + // type + // + template <typename S> + inline _type:: + _type (istream<S>&, flags, container* c) + : container_ (c) + { + } + + // simple_type + // + template <typename B> + template <typename S> + inline simple_type<B>:: + simple_type (istream<S>& s, flags f, container* c) + : type (s, f, c) + { + } + + // fundamental_base + // + template <typename T, typename C, typename B, schema_type::value ST> + template <typename S> + inline fundamental_base<T, C, B, ST>:: + fundamental_base (istream<S>& s, flags f, container* c) + : B (s, f, c), facet_table_ (0) + { + T& r (*this); + s >> r; + } + + // list + // + template <typename T, typename C, schema_type::value ST> + template <typename S> + list<T, C, ST, false>:: + list (istream<S>& s, flags f, container* c) + : sequence<T> (f, c) + { + std::size_t size; + istream_common::as_size<std::size_t> as_size (size); + s >> as_size; + + if (size > 0) + { + this->reserve (size); + + while (size--) + { + std::auto_ptr<T> p (new T (s, f, c)); + this->push_back (p); + } + } + } + + template <typename T, typename C, schema_type::value ST> + template <typename S> + list<T, C, ST, true>:: + list (istream<S>& s, flags f, container* c) + : sequence<T> (f, c) + { + std::size_t size; + istream_common::as_size<std::size_t> as_size (size); + s >> as_size; + + if (size > 0) + { + this->reserve (size); + + while (size--) + { + T x; + s >> x; + this->push_back (x); + } + } + } + + // Extraction operators for built-in types. + // + + + // string + // + template <typename C, typename B> + template <typename S> + inline string<C, B>:: + string (istream<S>& s, flags f, container* c) + : B (s, f, c) + { + std::basic_string<C>& r (*this); + s >> r; + } + + + // normalized_string + // + template <typename C, typename B> + template <typename S> + inline normalized_string<C, B>:: + normalized_string (istream<S>& s, flags f, container* c) + : B (s, f, c) + { + } + + + // token + // + template <typename C, typename B> + template <typename S> + inline token<C, B>:: + token (istream<S>& s, flags f, container* c) + : B (s, f, c) + { + } + + + // nmtoken + // + template <typename C, typename B> + template <typename S> + inline nmtoken<C, B>:: + nmtoken (istream<S>& s, flags f, container* c) + : B (s, f, c) + { + } + + + // nmtokens + // + template <typename C, typename B, typename nmtoken> + template <typename S> + inline nmtokens<C, B, nmtoken>:: + nmtokens (istream<S>& s, flags f, container* c) + : B (s, f, c), base_type (s, f, this) + { + } + + + // name + // + template <typename C, typename B> + template <typename S> + inline name<C, B>:: + name (istream<S>& s, flags f, container* c) + : B (s, f, c) + { + } + + + // ncname + // + template <typename C, typename B> + template <typename S> + inline ncname<C, B>:: + ncname (istream<S>& s, flags f, container* c) + : B (s, f, c) + { + } + + + // language + // + template <typename C, typename B> + template <typename S> + inline language<C, B>:: + language (istream<S>& s, flags f, container* c) + : B (s, f, c) + { + } + + + // id + // + template <typename C, typename B> + template <typename S> + inline id<C, B>:: + id (istream<S>& s, flags f, container* c) + : B (s, f, c), identity_ (*this) + { + register_id (); + } + + + // idref + // + template <typename C, typename B, typename T> + template <typename S> + inline idref<C, B, T>:: + idref (istream<S>& s, flags f, container* c) + : B (s, f, c), identity_ (*this) + { + } + + + // idrefs + // + template <typename C, typename B, typename idref> + template <typename S> + inline idrefs<C, B, idref>:: + idrefs (istream<S>& s, flags f, container* c) + : B (s, f, c), base_type (s, f, this) + { + } + + + // uri + // + template <typename C, typename B> + template <typename S> + inline uri<C, B>:: + uri (istream<S>& s, flags f, container* c) + : B (s, f, c) + { + std::basic_string<C>& r (*this); + s >> r; + } + + + // qname + // + template <typename C, typename B, typename uri, typename ncname> + template <typename S> + inline qname<C, B, uri, ncname>:: + qname (istream<S>& s, flags f, container* c) + : B (s, f, c), ns_ (s), name_ (s) + { + } + + + // base64_binary + // + template <typename C, typename B> + template <typename S> + inline base64_binary<C, B>:: + base64_binary (istream<S>& s, flags f, container* c) + : B (s, f, c) + { + buffer<C>& r (*this); + s >> r; + } + + + // hex_binary + // + template <typename C, typename B> + template <typename S> + inline hex_binary<C, B>:: + hex_binary (istream<S>& s, flags f, container* c) + : B (s, f, c) + { + buffer<C>& r (*this); + s >> r; + } + + + // entity + // + template <typename C, typename B> + template <typename S> + inline entity<C, B>:: + entity (istream<S>& s, flags f, container* c) + : B (s, f, c) + { + } + + + // entities + // + template <typename C, typename B, typename entity> + template <typename S> + inline entities<C, B, entity>:: + entities (istream<S>& s, flags f, container* c) + : B (s, f, c), base_type (s, f, this) + { + } + } + } +} + +#include <xsd/cxx/tree/date-time-extraction.txx> + +#endif // XSD_CXX_TREE_STREAM_EXTRACTION_HXX diff --git a/xsd/libxsd/xsd/cxx/tree/stream-insertion-map.hxx b/xsd/libxsd/xsd/cxx/tree/stream-insertion-map.hxx new file mode 100644 index 0000000..e26a3da --- /dev/null +++ b/xsd/libxsd/xsd/cxx/tree/stream-insertion-map.hxx @@ -0,0 +1,154 @@ +// file : xsd/cxx/tree/stream-insertion-map.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_CXX_TREE_STREAM_INSERTION_MAP_HXX +#define XSD_CXX_TREE_STREAM_INSERTION_MAP_HXX + +#include <map> +#include <string> +#include <cstddef> // std::size_t +#include <typeinfo> + +#include <xsd/cxx/tree/elements.hxx> +#include <xsd/cxx/tree/ostream.hxx> +#include <xsd/cxx/xml/qualified-name.hxx> + +namespace xsd +{ + namespace cxx + { + namespace tree + { + template <typename S, typename C> + struct stream_insertion_map + { + typedef std::type_info type_id; + typedef xml::qualified_name<C> qualified_name; + typedef void (*inserter) (ostream<S>&, const type&); + + stream_insertion_map (); + + void + register_type (const type_id&, + const qualified_name& name, + inserter, + bool override = true); + + void + unregister_type (const type_id&); + + void + insert (ostream<S>&, const type&); + + public: + struct type_info + { + type_info (const qualified_name& name, + typename stream_insertion_map::inserter inserter) + : name_ (name), inserter_ (inserter) + { + } + + const qualified_name& + name () const + { + return name_; + } + + typename stream_insertion_map::inserter + inserter () const + { + return inserter_; + } + + // For std::map. + // + type_info () + : name_ (std::basic_string<C> (), std::basic_string<C> ()), + inserter_ (0) + { + } + + private: + qualified_name name_; + typename stream_insertion_map::inserter inserter_; + }; + + public: + const type_info* + find (const type_id&) const; + + private: + struct type_id_comparator + { + bool + operator() (const type_id* x, const type_id* y) const + { + // XL C++ on AIX has buggy type_info::before() in that + // it returns true for two different type_info objects + // that happened to be for the same type. + // +#if defined(__xlC__) && defined(_AIX) + return *x != *y && x->before (*y); +#else + return x->before (*y); +#endif + } + }; + + typedef + std::map<const type_id*, type_info, type_id_comparator> + type_map; + + type_map type_map_; + }; + + // + // + template<unsigned long id, typename S, typename C> + struct stream_insertion_plate + { + static stream_insertion_map<S, C>* map; + static std::size_t count; + + stream_insertion_plate (); + ~stream_insertion_plate (); + }; + + template<unsigned long id, typename S, typename C> + stream_insertion_map<S, C>* stream_insertion_plate<id, S, C>::map = 0; + + template<unsigned long id, typename S, typename C> + std::size_t stream_insertion_plate<id, S, C>::count = 0; + + + // + // + template<unsigned long id, typename S, typename C> + inline stream_insertion_map<S, C>& + stream_insertion_map_instance () + { + return *stream_insertion_plate<id, S, C>::map; + } + + // + // + template<typename S, typename T> + void + inserter_impl (ostream<S>&, const type&); + + template<unsigned long id, typename S, typename C, typename T> + struct stream_insertion_initializer + { + stream_insertion_initializer (const C* name, const C* ns); + ~stream_insertion_initializer (); + }; + } + } +} + +#include <xsd/cxx/tree/stream-insertion-map.txx> + +#endif // XSD_CXX_TREE_STREAM_INSERTION_MAP_HXX diff --git a/xsd/libxsd/xsd/cxx/tree/stream-insertion-map.txx b/xsd/libxsd/xsd/cxx/tree/stream-insertion-map.txx new file mode 100644 index 0000000..07bfa8b --- /dev/null +++ b/xsd/libxsd/xsd/cxx/tree/stream-insertion-map.txx @@ -0,0 +1,340 @@ +// file : xsd/cxx/tree/stream-insertion-map.txx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <xsd/cxx/tree/types.hxx> +#include <xsd/cxx/tree/stream-insertion.hxx> +#include <xsd/cxx/tree/bits/literals.hxx> + +namespace xsd +{ + namespace cxx + { + namespace tree + { + // stream_insertion_map + // + template <typename S, typename C> + stream_insertion_map<S, C>:: + stream_insertion_map () + { + // Register inserters for built-in non-fundamental types. + // + std::basic_string<C> xsd (bits::xml_schema<C> ()); + + + // anyType and anySimpleType. + // + register_type ( + typeid (type), + qualified_name (bits::any_type<C> (), xsd), + &inserter_impl<S, type>, + false); + + typedef simple_type<type> simple_type; + register_type ( + typeid (simple_type), + qualified_name (bits::any_simple_type<C> (), xsd), + &inserter_impl<S, simple_type>, + false); + + + // Strings + // + typedef string<C, simple_type> string; + register_type ( + typeid (string), + qualified_name (bits::string<C> (), xsd), + &inserter_impl<S, string>, + false); + + typedef normalized_string<C, string> normalized_string; + register_type ( + typeid (normalized_string), + qualified_name (bits::normalized_string<C> (), xsd), + &inserter_impl<S, normalized_string>, + false); + + typedef token<C, normalized_string> token; + register_type ( + typeid (token), + qualified_name (bits::token<C> (), xsd), + &inserter_impl<S, token>, + false); + + typedef name<C, token> name; + register_type ( + typeid (name), + qualified_name (bits::name<C> (), xsd), + &inserter_impl<S, name>, + false); + + typedef nmtoken<C, token> nmtoken; + register_type ( + typeid (nmtoken), + qualified_name (bits::nmtoken<C> (), xsd), + &inserter_impl<S, nmtoken>, + false); + + typedef nmtokens<C, simple_type, nmtoken> nmtokens; + register_type ( + typeid (nmtokens), + qualified_name (bits::nmtokens<C> (), xsd), + &inserter_impl<S, nmtokens>, + false); + + typedef ncname<C, name> ncname; + register_type ( + typeid (ncname), + qualified_name (bits::ncname<C> (), xsd), + &inserter_impl<S, ncname>, + false); + + typedef language<C, token> language; + register_type ( + typeid (language), + qualified_name (bits::language<C> (), xsd), + &inserter_impl<S, language>, + false); + + + // ID/IDREF. + // + typedef id<C, ncname> id; + register_type ( + typeid (id), + qualified_name (bits::id<C> (), xsd), + &inserter_impl<S, id>, + false); + + typedef idref<C, ncname, type> idref; + register_type ( + typeid (idref), + qualified_name (bits::idref<C> (), xsd), + &inserter_impl<S, idref>, + false); + + typedef idrefs<C, simple_type, idref> idrefs; + register_type ( + typeid (idrefs), + qualified_name (bits::idrefs<C> (), xsd), + &inserter_impl<S, idrefs>, + false); + + + // URI. + // + typedef uri<C, simple_type> uri; + register_type ( + typeid (uri), + qualified_name (bits::any_uri<C> (), xsd), + &inserter_impl<S, uri>, + false); + + + // Qualified name. + // + typedef qname<C, simple_type, uri, ncname> qname; + register_type ( + typeid (qname), + qualified_name (bits::qname<C> (), xsd), + &inserter_impl<S, qname>, + false); + + + // Binary. + // + typedef base64_binary<C, simple_type> base64_binary; + register_type ( + typeid (base64_binary), + qualified_name (bits::base64_binary<C> (), xsd), + &inserter_impl<S, base64_binary>, + false); + + typedef hex_binary<C, simple_type> hex_binary; + register_type ( + typeid (hex_binary), + qualified_name (bits::hex_binary<C> (), xsd), + &inserter_impl<S, hex_binary>, + false); + + + // Date/time. + // + typedef gday<C, simple_type> gday; + register_type ( + typeid (gday), + qualified_name (bits::gday<C> (), xsd), + &inserter_impl<S, gday>, + false); + + typedef gmonth<C, simple_type> gmonth; + register_type ( + typeid (gmonth), + qualified_name (bits::gmonth<C> (), xsd), + &inserter_impl<S, gmonth>, + false); + + typedef gyear<C, simple_type> gyear; + register_type ( + typeid (gyear), + qualified_name (bits::gyear<C> (), xsd), + &inserter_impl<S, gyear>, + false); + + typedef gmonth_day<C, simple_type> gmonth_day; + register_type ( + typeid (gmonth_day), + qualified_name (bits::gmonth_day<C> (), xsd), + &inserter_impl<S, gmonth_day>, + false); + + typedef gyear_month<C, simple_type> gyear_month; + register_type ( + typeid (gyear_month), + qualified_name (bits::gyear_month<C> (), xsd), + &inserter_impl<S, gyear_month>, + false); + + typedef date<C, simple_type> date; + register_type ( + typeid (date), + qualified_name (bits::date<C> (), xsd), + &inserter_impl<S, date>, + false); + + typedef time<C, simple_type> time; + register_type ( + typeid (time), + qualified_name (bits::time<C> (), xsd), + &inserter_impl<S, time>, + false); + + typedef date_time<C, simple_type> date_time; + register_type ( + typeid (date_time), + qualified_name (bits::date_time<C> (), xsd), + &inserter_impl<S, date_time>, + false); + + typedef duration<C, simple_type> duration; + register_type ( + typeid (duration), + qualified_name (bits::duration<C> (), xsd), + &inserter_impl<S, duration>, + false); + + + // Entity. + // + typedef entity<C, ncname> entity; + register_type ( + typeid (entity), + qualified_name (bits::entity<C> (), xsd), + &inserter_impl<S, entity>, + false); + + typedef entities<C, simple_type, entity> entities; + register_type ( + typeid (entities), + qualified_name (bits::entities<C> (), xsd), + &inserter_impl<S, entities>, + false); + } + + template <typename S, typename C> + void stream_insertion_map<S, C>:: + register_type (const type_id& tid, + const qualified_name& name, + inserter i, + bool override) + { + if (override || type_map_.find (&tid) == type_map_.end ()) + type_map_[&tid] = type_info (name, i); + } + + template <typename S, typename C> + void stream_insertion_map<S, C>:: + unregister_type (const type_id& tid) + { + type_map_.erase (&tid); + } + + template <typename S, typename C> + void stream_insertion_map<S, C>:: + insert (ostream<S>& s, const type& x) + { + if (const type_info* ti = find (typeid (x))) + { + const qualified_name& qn (ti->name ()); + + s << qn.namespace_ () << qn.name (); + ti->inserter () (s, x); + } + else + throw no_type_info<C> (std::basic_string<C> (), + std::basic_string<C> ()); // @@ TODO + } + + template <typename S, typename C> + const typename stream_insertion_map<S, C>::type_info* + stream_insertion_map<S, C>:: + find (const type_id& tid) const + { + typename type_map::const_iterator i (type_map_.find (&tid)); + return i == type_map_.end () ? 0 : &i->second; + } + + + // stream_insertion_plate + // + template<unsigned long id, typename S, typename C> + stream_insertion_plate<id, S, C>:: + stream_insertion_plate () + { + if (count == 0) + map = new stream_insertion_map<S, C>; + + ++count; + } + + template<unsigned long id, typename S, typename C> + stream_insertion_plate<id, S, C>:: + ~stream_insertion_plate () + { + if (--count == 0) + delete map; + } + + // + // + template<typename S, typename T> + void + inserter_impl (ostream<S>& s, const type& x) + { + s << static_cast<const T&> (x); + } + + // stream_insertion_initializer + // + template<unsigned long id, typename S, typename C, typename T> + stream_insertion_initializer<id, S, C, T>:: + stream_insertion_initializer (const C* name, const C* ns) + { + stream_insertion_map_instance<id, S, C> ().register_type ( + typeid (T), + xml::qualified_name<C> (name, ns), + &inserter_impl<S, T>); + } + + template<unsigned long id, typename S, typename C, typename T> + stream_insertion_initializer<id, S, C, T>:: + ~stream_insertion_initializer () + { + stream_insertion_map_instance<id, S, C> ().unregister_type ( + typeid (T)); + } + } + } +} diff --git a/xsd/libxsd/xsd/cxx/tree/stream-insertion.hxx b/xsd/libxsd/xsd/cxx/tree/stream-insertion.hxx new file mode 100644 index 0000000..c345e80 --- /dev/null +++ b/xsd/libxsd/xsd/cxx/tree/stream-insertion.hxx @@ -0,0 +1,273 @@ +// file : xsd/cxx/tree/stream-insertion.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_CXX_TREE_STREAM_INSERTION_HXX +#define XSD_CXX_TREE_STREAM_INSERTION_HXX + +#include <xsd/cxx/tree/elements.hxx> +#include <xsd/cxx/tree/types.hxx> +#include <xsd/cxx/tree/list.hxx> + +#include <xsd/cxx/tree/ostream.hxx> + +namespace xsd +{ + namespace cxx + { + namespace tree + { + // type + // + template <typename S> + inline ostream<S>& + operator<< (ostream<S>& s, const type&) + { + return s; + } + + // simple_type + // + template <typename S, typename B> + inline ostream<S>& + operator<< (ostream<S>& s, const simple_type<B>&) + { + return s; + } + + // fundamental_base + // + template <typename S, + typename T, + typename C, + typename B, + schema_type::value ST> + inline ostream<S>& + operator<< (ostream<S>& s, const fundamental_base<T, C, B, ST>& x) + { + const T& r (x); + return s << r; + } + + // list + // + template <typename S, + typename T, + typename C, + schema_type::value ST, + bool fund> + ostream<S>& + operator<< (ostream<S>& s, const list<T, C, ST, fund>& x) + { + s << ostream_common::as_size<std::size_t> (x.size ()); + + for (typename list<T, C, ST, fund>::const_iterator + i (x.begin ()), e (x.end ()); i != e; ++i) + { + s << *i; + } + + return s; + } + + + // Insertion operators for built-in types. + // + + + // string + // + template <typename S, typename C, typename B> + inline ostream<S>& + operator<< (ostream<S>& s, const string<C, B>& x) + { + const std::basic_string<C>& r (x); + return s << r; + } + + + // normalized_string + // + template <typename S, typename C, typename B> + inline ostream<S>& + operator<< (ostream<S>& s, const normalized_string<C, B>& x) + { + const B& r (x); + return s << r; + } + + + // token + // + template <typename S, typename C, typename B> + inline ostream<S>& + operator<< (ostream<S>& s, const token<C, B>& x) + { + const B& r (x); + return s << r; + } + + + // nmtoken + // + template <typename S, typename C, typename B> + inline ostream<S>& + operator<< (ostream<S>& s, const nmtoken<C, B>& x) + { + const B& r (x); + return s << r; + } + + + // nmtokens + // + template <typename S, typename C, typename B, typename nmtoken> + inline ostream<S>& + operator<< (ostream<S>& s, const nmtokens<C, B, nmtoken>& x) + { + const list<nmtoken, C>& r (x); + return s << r; + } + + + // name + // + template <typename S, typename C, typename B> + inline ostream<S>& + operator<< (ostream<S>& s, const name<C, B>& x) + { + const B& r (x); + return s << r; + } + + + // ncname + // + template <typename S, typename C, typename B> + inline ostream<S>& + operator<< (ostream<S>& s, const ncname<C, B>& x) + { + const B& r (x); + return s << r; + } + + + // language + // + template <typename S, typename C, typename B> + inline ostream<S>& + operator<< (ostream<S>& s, const language<C, B>& x) + { + const std::basic_string<C>& r (x); + return s << r; + } + + + // id + // + template <typename S, typename C, typename B> + inline ostream<S>& + operator<< (ostream<S>& s, const id<C, B>& x) + { + const std::basic_string<C>& r (x); + return s << r; + } + + + // idref + // + template <typename S, typename C, typename B, typename T> + inline ostream<S>& + operator<< (ostream<S>& s, const idref<C, B, T>& x) + { + const B& r (x); + return s << r; + } + + + // idrefs + // + template <typename S, typename C, typename B, typename idref> + inline ostream<S>& + operator<< (ostream<S>& s, const idrefs<C, B, idref>& x) + { + const list<idref, C>& r (x); + return s << r; + } + + + // uri + // + template <typename S, typename C, typename B> + inline ostream<S>& + operator<< (ostream<S>& s, const uri<C, B>& x) + { + const std::basic_string<C>& r (x); + return s << r; + } + + + // qname + // + template <typename S, + typename C, + typename B, + typename uri, + typename ncname> + inline ostream<S>& + operator<< (ostream<S>& s, const qname<C, B, uri, ncname>& x) + { + return s << x.namespace_ () << x.name (); + } + + + // base64_binary + // + template <typename S, typename C, typename B> + inline ostream<S>& + operator<< (ostream<S>& s, const base64_binary<C, B>& x) + { + const buffer<C>& r (x); + return s << r; + } + + + // hex_binary + // + template <typename S, typename C, typename B> + inline ostream<S>& + operator<< (ostream<S>& s, const hex_binary<C, B>& x) + { + const buffer<C>& r (x); + return s << r; + } + + + // entity + // + template <typename S, typename C, typename B> + inline ostream<S>& + operator<< (ostream<S>& s, const entity<C, B>& x) + { + const B& r (x); + return s << r; + } + + + // entities + // + template <typename S, typename C, typename B, typename entity> + inline ostream<S>& + operator<< (ostream<S>& s, const entities<C, B, entity>& x) + { + const list<entity, C>& r (x); + return s << r; + } + } + } +} + +#include <xsd/cxx/tree/date-time-insertion.txx> + +#endif // XSD_CXX_TREE_STREAM_INSERTION_HXX diff --git a/xsd/libxsd/xsd/cxx/tree/text.hxx b/xsd/libxsd/xsd/cxx/tree/text.hxx new file mode 100644 index 0000000..15f12dc --- /dev/null +++ b/xsd/libxsd/xsd/cxx/tree/text.hxx @@ -0,0 +1,30 @@ +// file : xsd/cxx/tree/text.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_CXX_TREE_TEXT_HXX +#define XSD_CXX_TREE_TEXT_HXX + +#include <string> + +#include <xercesc/dom/DOMElement.hpp> + +namespace xsd +{ + namespace cxx + { + namespace tree + { + // Throws expected_text_content. + // + template <typename C> + std::basic_string<C> + text_content (const xercesc::DOMElement&); + } + } +} + +#include <xsd/cxx/tree/text.txx> + +#endif // XSD_CXX_TREE_TEXT_HXX diff --git a/xsd/libxsd/xsd/cxx/tree/text.txx b/xsd/libxsd/xsd/cxx/tree/text.txx new file mode 100644 index 0000000..2d83c71 --- /dev/null +++ b/xsd/libxsd/xsd/cxx/tree/text.txx @@ -0,0 +1,77 @@ +// file : xsd/cxx/tree/text.txx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <xercesc/dom/DOMText.hpp> + +#include <xsd/cxx/xml/string.hxx> + +#include <xsd/cxx/tree/exceptions.hxx> + +namespace xsd +{ + namespace cxx + { + namespace tree + { + template <typename C> + std::basic_string<C> + text_content (const xercesc::DOMElement& e) + { + using xercesc::DOMNode; + using xercesc::DOMText; + + DOMNode* n (e.getFirstChild ()); + + // Fast path. + // + if (n != 0 && + n->getNodeType () == DOMNode::TEXT_NODE && + n->getNextSibling () == 0) + { + DOMText* t (static_cast<DOMText*> (n)); + + // Berkeley DB XML DOM does not implement getLength(). + // +#ifndef DBXML_DOM + return xml::transcode<C> (t->getData (), t->getLength ()); +#else + return xml::transcode<C> (t->getData ()); +#endif + } + + std::basic_string<C> r; + + for (; n != 0; n = n->getNextSibling ()) + { + switch (n->getNodeType ()) + { + case DOMNode::TEXT_NODE: + case DOMNode::CDATA_SECTION_NODE: + { + DOMText* t (static_cast<DOMText*> (n)); + + // Berkeley DB XML DOM does not implement getLength(). + // +#ifndef DBXML_DOM + r += xml::transcode<C> (t->getData (), t->getLength ()); +#else + r += xml::transcode<C> (t->getData ()); +#endif + break; + } + case DOMNode::ELEMENT_NODE: + { + throw expected_text_content<C> (); + } + default: + break; // ignore + } + } + + return r; + } + } + } +} diff --git a/xsd/libxsd/xsd/cxx/tree/type-factory-map.hxx b/xsd/libxsd/xsd/cxx/tree/type-factory-map.hxx new file mode 100644 index 0000000..7e849db --- /dev/null +++ b/xsd/libxsd/xsd/cxx/tree/type-factory-map.hxx @@ -0,0 +1,173 @@ +// file : xsd/cxx/tree/type-factory-map.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_CXX_TREE_TYPE_FACTORY_MAP_HXX +#define XSD_CXX_TREE_TYPE_FACTORY_MAP_HXX + +#include <map> +#include <string> +#include <memory> // std::auto_ptr +#include <cstddef> // std::size_t + +#include <xercesc/dom/DOMElement.hpp> + +#include <xsd/cxx/tree/elements.hxx> +#include <xsd/cxx/xml/qualified-name.hxx> + +namespace xsd +{ + namespace cxx + { + namespace tree + { + template <typename C> + struct type_factory_map + { + typedef xml::qualified_name<C> qualified_name; + typedef std::auto_ptr<type> (*factory) (const xercesc::DOMElement&, + flags, + container*); + public: + type_factory_map (); + + void + register_type (const qualified_name& name, + factory, + bool override = true); + + void + unregister_type (const qualified_name& name); + + void + register_element (const qualified_name& root, + const qualified_name& subst, + factory); + + void + unregister_element (const qualified_name& root, + const qualified_name& subst); + + std::auto_ptr<type> + create (const C* name, // element name + const C* ns, // element namespace + factory static_type, + bool global, + bool qualified, + const xercesc::DOMElement&, + const qualified_name&, + flags, + container*) const; + + public: + factory + find (const qualified_name& name) const; + + private: + template <typename T> + static std::auto_ptr<type> + traits_adapter (const xercesc::DOMElement&, flags, container*); + + private: + typedef + std::map<qualified_name, factory> + type_map; + + // Map of (root-element to map of (subst-element to factory)). + // + typedef + std::map<qualified_name, factory> + subst_map; + + typedef + std::map<qualified_name, subst_map> + element_map; + + type_map type_map_; + element_map element_map_; + + private: + factory + find_substitution (const subst_map& start, + const qualified_name& name) const; + + // The name argument is as specified in xsi:type. + // + factory + find_type (const std::basic_string<C>& name, + const xercesc::DOMElement&) const; + }; + + + // + // + template<unsigned long id, typename C> + struct type_factory_plate + { + static type_factory_map<C>* map; + static std::size_t count; + + type_factory_plate (); + ~type_factory_plate (); + }; + + template<unsigned long id, typename C> + type_factory_map<C>* type_factory_plate<id, C>::map = 0; + + template<unsigned long id, typename C> + std::size_t type_factory_plate<id, C>::count = 0; + + + // + // + template<unsigned long id, typename C> + inline type_factory_map<C>& + type_factory_map_instance () + { + return *type_factory_plate<id, C>::map; + } + + + // + // + template<typename T> + std::auto_ptr<type> + factory_impl (const xercesc::DOMElement&, flags, container*); + + // + // + template<unsigned long id, typename C, typename T> + struct type_factory_initializer + { + type_factory_initializer (const C* name, const C* ns); + ~type_factory_initializer (); + + private: + const C* name_; + const C* ns_; + }; + + // + // + template<unsigned long id, typename C, typename T> + struct element_factory_initializer + { + element_factory_initializer (const C* root_name, const C* root_ns, + const C* subst_name, const C* subst_ns); + + ~element_factory_initializer (); + + private: + const C* root_name_; + const C* root_ns_; + const C* subst_name_; + const C* subst_ns_; + }; + } + } +} + +#include <xsd/cxx/tree/type-factory-map.txx> + +#endif // XSD_CXX_TREE_TYPE_FACTORY_MAP_HXX diff --git a/xsd/libxsd/xsd/cxx/tree/type-factory-map.txx b/xsd/libxsd/xsd/cxx/tree/type-factory-map.txx new file mode 100644 index 0000000..b9e0a06 --- /dev/null +++ b/xsd/libxsd/xsd/cxx/tree/type-factory-map.txx @@ -0,0 +1,481 @@ +// file : xsd/cxx/tree/type-factory-map.txx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <xercesc/validators/schema/SchemaSymbols.hpp> + +#include <xsd/cxx/xml/string.hxx> // xml::{string, transcode} +#include <xsd/cxx/xml/elements.hxx> // xml::{prefix, uq_name} +#include <xsd/cxx/xml/bits/literals.hxx> // xml::bits::{xml_namespace, etc} + +#include <xsd/cxx/tree/types.hxx> +#include <xsd/cxx/tree/bits/literals.hxx> + +namespace xsd +{ + namespace cxx + { + namespace tree + { + // type_factory_map + // + template <typename C> + type_factory_map<C>:: + type_factory_map () + { + // Register factories for default instantiations of built-in, + // non-fundamental types. + // + + std::basic_string<C> xsd (bits::xml_schema<C> ()); + + + // anyType and anySimpleType. + // + register_type ( + qualified_name (bits::any_type<C> (), xsd), + &factory_impl<type>, + false); + + typedef simple_type<type> simple_type; + register_type ( + qualified_name (bits::any_simple_type<C> (), xsd), + &factory_impl<simple_type>, + false); + + + // Strings + // + typedef string<C, simple_type> string; + register_type ( + qualified_name (bits::string<C> (), xsd), + &factory_impl<string>, + false); + + typedef normalized_string<C, string> normalized_string; + register_type ( + qualified_name (bits::normalized_string<C> (), xsd), + &factory_impl<normalized_string>, + false); + + typedef token<C, normalized_string> token; + register_type ( + qualified_name (bits::token<C> (), xsd), + &factory_impl<token>, + false); + + typedef name<C, token> name; + register_type ( + qualified_name (bits::name<C> (), xsd), + &factory_impl<name>, + false); + + typedef nmtoken<C, token> nmtoken; + register_type ( + qualified_name (bits::nmtoken<C> (), xsd), + &factory_impl<nmtoken>, + false); + + typedef nmtokens<C, simple_type, nmtoken> nmtokens; + register_type ( + qualified_name (bits::nmtokens<C> (), xsd), + &factory_impl<nmtokens>, + false); + + typedef ncname<C, name> ncname; + register_type ( + qualified_name (bits::ncname<C> (), xsd), + &factory_impl<ncname>, + false); + + typedef language<C, token> language; + register_type ( + qualified_name (bits::language<C> (), xsd), + &factory_impl<language>, + false); + + + // ID/IDREF. + // + typedef id<C, ncname> id; + register_type ( + qualified_name (bits::id<C> (), xsd), + &factory_impl<id>, + false); + + typedef idref<C, ncname, type> idref; + register_type ( + qualified_name (bits::idref<C> (), xsd), + &factory_impl<idref>, + false); + + typedef idrefs<C, simple_type, idref> idrefs; + register_type ( + qualified_name (bits::idrefs<C> (), xsd), + &factory_impl<idrefs>, + false); + + + // URI. + // + typedef uri<C, simple_type> uri; + register_type ( + qualified_name (bits::any_uri<C> (), xsd), + &factory_impl<uri>, + false); + + + // Qualified name. + // + typedef qname<C, simple_type, uri, ncname> qname; + register_type ( + qualified_name (bits::qname<C> (), xsd), + &factory_impl<qname>, + false); + + + // Binary. + // + typedef base64_binary<C, simple_type> base64_binary; + register_type ( + qualified_name (bits::base64_binary<C> (), xsd), + &factory_impl<base64_binary>, + false); + + typedef hex_binary<C, simple_type> hex_binary; + register_type ( + qualified_name (bits::hex_binary<C> (), xsd), + &factory_impl<hex_binary>, + false); + + + // Date/time. + // + typedef gday<C, simple_type> gday; + register_type ( + qualified_name (bits::gday<C> (), xsd), + &factory_impl<gday>, + false); + + typedef gmonth<C, simple_type> gmonth; + register_type ( + qualified_name (bits::gmonth<C> (), xsd), + &factory_impl<gmonth>, + false); + + typedef gyear<C, simple_type> gyear; + register_type ( + qualified_name (bits::gyear<C> (), xsd), + &factory_impl<gyear>, + false); + + typedef gmonth_day<C, simple_type> gmonth_day; + register_type ( + qualified_name (bits::gmonth_day<C> (), xsd), + &factory_impl<gmonth_day>, + false); + + typedef gyear_month<C, simple_type> gyear_month; + register_type ( + qualified_name (bits::gyear_month<C> (), xsd), + &factory_impl<gyear_month>, + false); + + typedef date<C, simple_type> date; + register_type ( + qualified_name (bits::date<C> (), xsd), + &factory_impl<date>, + false); + + typedef time<C, simple_type> time; + register_type ( + qualified_name (bits::time<C> (), xsd), + &factory_impl<time>, + false); + + typedef date_time<C, simple_type> date_time; + register_type ( + qualified_name (bits::date_time<C> (), xsd), + &factory_impl<date_time>, + false); + + typedef duration<C, simple_type> duration; + register_type ( + qualified_name (bits::duration<C> (), xsd), + &factory_impl<duration>, + false); + + + // Entity. + // + typedef entity<C, ncname> entity; + register_type ( + qualified_name (bits::entity<C> (), xsd), + &factory_impl<entity>, + false); + + typedef entities<C, simple_type, entity> entities; + register_type ( + qualified_name (bits::entities<C> (), xsd), + &factory_impl<entities>, + false); + } + + template <typename C> + void type_factory_map<C>:: + register_type (const qualified_name& name, + factory f, + bool override) + { + if (override || type_map_.find (name) == type_map_.end ()) + type_map_[name] = f; + } + + template <typename C> + void type_factory_map<C>:: + unregister_type (const qualified_name& name) + { + type_map_.erase (name); + } + + template <typename C> + void type_factory_map<C>:: + register_element (const qualified_name& root, + const qualified_name& subst, + factory f) + { + element_map_[root][subst] = f; + } + + template <typename C> + void type_factory_map<C>:: + unregister_element (const qualified_name& root, + const qualified_name& subst) + { + typename element_map::iterator i (element_map_.find (root)); + + if (i != element_map_.end ()) + { + i->second.erase (subst); + + if (i->second.empty ()) + element_map_.erase (i); + } + } + + template <typename C> + typename type_factory_map<C>::factory type_factory_map<C>:: + find (const qualified_name& name) const + { + typename type_map::const_iterator i (type_map_.find (name)); + return i == type_map_.end () ? 0 : i->second; + } + + template <typename C> + std::auto_ptr<type> type_factory_map<C>:: + create (const C* name, + const C* ns, + factory static_type, + bool global, + bool qualified, + const xercesc::DOMElement& e, + const qualified_name& qn, + tree::flags flags, + container* c) const + { + factory f = 0; + + // See if we've got a straight match. + // + if (qn.name () == name && + (qualified ? qn.namespace_ () == ns : ns[0] == C ('\0'))) + { + f = static_type; + } + else if (global) + { + // See if we have a substitution. + // + typename element_map::const_iterator i ( + element_map_.find (qualified_name (name, ns))); + + if (i != element_map_.end ()) + { + f = find_substitution (i->second, qn); + } + } + + if (f == 0) + return std::auto_ptr<type> (0); // No match. + + // Check for xsi:type + // + { + const XMLCh* v ( + e.getAttributeNS ( + xercesc::SchemaSymbols::fgURI_XSI, + xercesc::SchemaSymbols::fgXSI_TYPE)); + + if (v != 0 && v[0] != XMLCh (0)) + f = find_type (xml::transcode<C> (v), e); + } + + return f (e, flags, c); + } + + template <typename C> + template <typename T> + std::auto_ptr<type> type_factory_map<C>:: + traits_adapter (const xercesc::DOMElement& e, flags f, container* c) + { + std::auto_ptr<T> r (traits<T, C>::create (e, f, c)); + return std::auto_ptr<type> (r.release ()); + } + + template <typename C> + typename type_factory_map<C>::factory type_factory_map<C>:: + find_substitution (const subst_map& start, + const qualified_name& name) const + { + typename subst_map::const_iterator i (start.find (name)); + + if (i != start.end ()) + return i->second; + else + { + for (i = start.begin (); i != start.end (); ++i) + { + typename element_map::const_iterator j ( + element_map_.find (i->first)); + + if (j != element_map_.end ()) + { + if (factory f = find_substitution (j->second, name)) + return f; + } + } + } + + return 0; + } + + template <typename C> + typename type_factory_map<C>::factory type_factory_map<C>:: + find_type (const std::basic_string<C>& name, + const xercesc::DOMElement& e) const + { + using std::basic_string; + + basic_string<C> ns_name, uq_name (xml::uq_name (name)); + + // Copied with modifications from xml/dom/elements.hxx. + // + std::basic_string<C> p (xml::prefix (name)); + + // 'xml' prefix requires special handling and Xerces folks refuse + // to handle this in DOM so I have to do it myself. + // + if (p == xml::bits::xml_prefix<C> ()) + ns_name = xml::bits::xml_namespace<C> (); + else + { + const XMLCh* xns ( + e.lookupNamespaceURI ( + p.empty () ? 0 : xml::string (p).c_str ())); + + if (xns != 0) + ns_name = xml::transcode<C> (xns); + else + { + // See if we've got any no-namespace types. + // + if (!p.empty ()) + throw no_prefix_mapping<C> (p); + } + } + + factory f (find (qualified_name (uq_name, ns_name))); + + if (f == 0) + throw no_type_info<C> (uq_name, ns_name); + + return f; + } + + + // type_factory_plate + // + template<unsigned long id, typename C> + type_factory_plate<id, C>:: + type_factory_plate () + { + if (count == 0) + map = new type_factory_map<C>; + + ++count; + } + + template<unsigned long id, typename C> + type_factory_plate<id, C>:: + ~type_factory_plate () + { + if (--count == 0) + delete map; + } + + + // + // + template<typename T> + std::auto_ptr<type> + factory_impl (const xercesc::DOMElement& e, flags f, container* c) + { + return std::auto_ptr<type> (new T (e, f, c)); + } + + // + // + template<unsigned long id, typename C, typename T> + type_factory_initializer<id, C, T>:: + type_factory_initializer (const C* name, const C* ns) + : name_ (name), ns_ (ns) + { + type_factory_map_instance<id, C> ().register_type ( + xml::qualified_name<C> (name, ns), &factory_impl<T>); + } + + template<unsigned long id, typename C, typename T> + type_factory_initializer<id, C, T>:: + ~type_factory_initializer () + { + type_factory_map_instance<id, C> ().unregister_type ( + xml::qualified_name<C> (name_, ns_)); + } + + // + // + template<unsigned long id, typename C, typename T> + element_factory_initializer<id, C, T>:: + element_factory_initializer (const C* root_name, const C* root_ns, + const C* subst_name, const C* subst_ns) + : root_name_ (root_name), root_ns_ (root_ns), + subst_name_ (subst_name), subst_ns_ (subst_ns) + { + type_factory_map_instance<id, C> ().register_element ( + xml::qualified_name<C> (root_name, root_ns), + xml::qualified_name<C> (subst_name, subst_ns), + &factory_impl<T>); + } + + template<unsigned long id, typename C, typename T> + element_factory_initializer<id, C, T>:: + ~element_factory_initializer () + { + type_factory_map_instance<id, C> ().unregister_element ( + xml::qualified_name<C> (root_name_, root_ns_), + xml::qualified_name<C> (subst_name_, subst_ns_)); + } + } + } +} diff --git a/xsd/libxsd/xsd/cxx/tree/type-serializer-map.hxx b/xsd/libxsd/xsd/cxx/tree/type-serializer-map.hxx new file mode 100644 index 0000000..491ad3b --- /dev/null +++ b/xsd/libxsd/xsd/cxx/tree/type-serializer-map.hxx @@ -0,0 +1,235 @@ +// file : xsd/cxx/tree/type-serializer-map.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_CXX_TREE_TYPE_SERIALIZER_MAP_HXX +#define XSD_CXX_TREE_TYPE_SERIALIZER_MAP_HXX + +#include <map> +#include <string> +#include <cstddef> // std::size_t +#include <typeinfo> + +#include <xercesc/dom/DOMElement.hpp> + +#include <xsd/cxx/tree/elements.hxx> + +#include <xsd/cxx/xml/qualified-name.hxx> +#include <xsd/cxx/xml/dom/serialization-header.hxx> // namespace_infomap + +namespace xsd +{ + namespace cxx + { + namespace tree + { + template <typename C> + struct type_serializer_map + { + typedef std::type_info type_id; + typedef xml::qualified_name<C> qualified_name; + typedef void (*serializer) (xercesc::DOMElement&, const type&); + + void + register_type (const type_id&, + const qualified_name& name, + serializer, + bool override = true); + + void + unregister_type (const type_id&); + + void + register_element (const qualified_name& root, + const qualified_name& subst, + const type_id&, + serializer); + + void + unregister_element (const qualified_name& root, const type_id&); + + public: + void + serialize (const C* name, // element name + const C* ns, // element namespace + bool global, + bool qualified, + xercesc::DOMElement& parent, + const type&) const; + + // Serialize into existing element. + // + void + serialize (const C* static_name, + const C* static_ns, + xercesc::DOMElement&, + const qualified_name&, + const type&) const; + + // Create DOMDocument with root element suitable for serializing + // x into it. + // + xml::dom::auto_ptr<xercesc::DOMDocument> + serialize (const C* name, // element name + const C* ns, // element namespace + const xml::dom::namespace_infomap<C>&, + const type& x, + unsigned long flags) const; + + public: + type_serializer_map (); + + public: + struct type_info + { + type_info (const qualified_name& name, + typename type_serializer_map::serializer serializer) + : name_ (name), serializer_ (serializer) + { + } + + const qualified_name& + name () const + { + return name_; + } + + typename type_serializer_map::serializer + serializer () const + { + return serializer_; + } + + // For std::map. + // + type_info () + : name_ (std::basic_string<C> (), std::basic_string<C> ()), + serializer_ (0) + { + } + + private: + qualified_name name_; + typename type_serializer_map::serializer serializer_; + }; + + public: + const type_info* + find (const type_id&) const; + + private: + struct type_id_comparator + { + bool + operator() (const type_id* x, const type_id* y) const + { + // XL C++ on AIX has buggy type_info::before() in that + // it returns true for two different type_info objects + // that happened to be for the same type. + // +#if defined(__xlC__) && defined(_AIX) + return *x != *y && x->before (*y); +#else + return x->before (*y); +#endif + } + }; + + typedef + std::map<const type_id*, type_info, type_id_comparator> + type_map; + + // Map of (root-element to map of (type_id to type_info)). + // Note that here type_info::name is element name. + // + typedef + std::map<const type_id*, type_info, type_id_comparator> + subst_map; + + typedef + std::map<qualified_name, subst_map> + element_map; + + type_map type_map_; + element_map element_map_; + + private: + const type_info* + find_substitution (const subst_map& start, const type_id&) const; + + // Sets an xsi:type attribute corresponding to the type_info. + // + void + set_xsi_type (xercesc::DOMElement& parent, + xercesc::DOMElement&, + const type_info&) const; + }; + + + // + // + template<unsigned long id, typename C> + struct type_serializer_plate + { + static type_serializer_map<C>* map; + static std::size_t count; + + type_serializer_plate (); + ~type_serializer_plate (); + }; + + template<unsigned long id, typename C> + type_serializer_map<C>* type_serializer_plate<id, C>::map = 0; + + template<unsigned long id, typename C> + std::size_t type_serializer_plate<id, C>::count = 0; + + + // + // + template<unsigned long id, typename C> + inline type_serializer_map<C>& + type_serializer_map_instance () + { + return *type_serializer_plate<id, C>::map; + } + + // + // + template<typename T> + void + serializer_impl (xercesc::DOMElement&, const type&); + + + // + // + template<unsigned long id, typename C, typename T> + struct type_serializer_initializer + { + type_serializer_initializer (const C* name, const C* ns); + ~type_serializer_initializer (); + }; + + + // + // + template<unsigned long id, typename C, typename T> + struct element_serializer_initializer + { + element_serializer_initializer (const C* root_name, const C* root_ns, + const C* subst_name, const C* subst_ns); + + ~element_serializer_initializer (); + + private: + const C* root_name_; + const C* root_ns_; + }; + } + } +} + +#include <xsd/cxx/tree/type-serializer-map.txx> + +#endif // XSD_CXX_TREE_TYPE_SERIALIZER_MAP_HXX diff --git a/xsd/libxsd/xsd/cxx/tree/type-serializer-map.txx b/xsd/libxsd/xsd/cxx/tree/type-serializer-map.txx new file mode 100644 index 0000000..859331f --- /dev/null +++ b/xsd/libxsd/xsd/cxx/tree/type-serializer-map.txx @@ -0,0 +1,576 @@ +// file : xsd/cxx/tree/type-serializer-map.txx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <xercesc/util/XMLUni.hpp> +#include <xercesc/validators/schema/SchemaSymbols.hpp> + +#include <xsd/cxx/xml/bits/literals.hxx> // xml::bits::{xsi_namespace, type} +#include <xsd/cxx/xml/dom/serialization-source.hxx> // dom::{create_*, prefix} + +#include <xsd/cxx/tree/types.hxx> +#include <xsd/cxx/tree/bits/literals.hxx> + +#include <iostream> + +namespace xsd +{ + namespace cxx + { + namespace tree + { + // type_serializer_map + // + template <typename C> + type_serializer_map<C>:: + type_serializer_map () + { + // Register serializers for built-in non-fundamental types. + // + std::basic_string<C> xsd (bits::xml_schema<C> ()); + + + // anyType and anySimpleType. + // + register_type ( + typeid (type), + qualified_name (bits::any_type<C> (), xsd), + &serializer_impl<type>, + false); + + typedef simple_type<type> simple_type; + register_type ( + typeid (simple_type), + qualified_name (bits::any_simple_type<C> (), xsd), + &serializer_impl<simple_type>, + false); + + + // Strings + // + typedef string<C, simple_type> string; + register_type ( + typeid (string), + qualified_name (bits::string<C> (), xsd), + &serializer_impl<string>, + false); + + typedef normalized_string<C, string> normalized_string; + register_type ( + typeid (normalized_string), + qualified_name (bits::normalized_string<C> (), xsd), + &serializer_impl<normalized_string>, + false); + + typedef token<C, normalized_string> token; + register_type ( + typeid (token), + qualified_name (bits::token<C> (), xsd), + &serializer_impl<token>, + false); + + typedef name<C, token> name; + register_type ( + typeid (name), + qualified_name (bits::name<C> (), xsd), + &serializer_impl<name>, + false); + + typedef nmtoken<C, token> nmtoken; + register_type ( + typeid (nmtoken), + qualified_name (bits::nmtoken<C> (), xsd), + &serializer_impl<nmtoken>, + false); + + typedef nmtokens<C, simple_type, nmtoken> nmtokens; + register_type ( + typeid (nmtokens), + qualified_name (bits::nmtokens<C> (), xsd), + &serializer_impl<nmtokens>, + false); + + typedef ncname<C, name> ncname; + register_type ( + typeid (ncname), + qualified_name (bits::ncname<C> (), xsd), + &serializer_impl<ncname>, + false); + + typedef language<C, token> language; + register_type ( + typeid (language), + qualified_name (bits::language<C> (), xsd), + &serializer_impl<language>, + false); + + + // ID/IDREF. + // + typedef id<C, ncname> id; + register_type ( + typeid (id), + qualified_name (bits::id<C> (), xsd), + &serializer_impl<id>, + false); + + typedef idref<C, ncname, type> idref; + register_type ( + typeid (idref), + qualified_name (bits::idref<C> (), xsd), + &serializer_impl<idref>, + false); + + typedef idrefs<C, simple_type, idref> idrefs; + register_type ( + typeid (idrefs), + qualified_name (bits::idrefs<C> (), xsd), + &serializer_impl<idrefs>, + false); + + + // URI. + // + typedef uri<C, simple_type> uri; + register_type ( + typeid (uri), + qualified_name (bits::any_uri<C> (), xsd), + &serializer_impl<uri>, + false); + + + // Qualified name. + // + typedef qname<C, simple_type, uri, ncname> qname; + register_type ( + typeid (qname), + qualified_name (bits::qname<C> (), xsd), + &serializer_impl<qname>, + false); + + + // Binary. + // + typedef base64_binary<C, simple_type> base64_binary; + register_type ( + typeid (base64_binary), + qualified_name (bits::base64_binary<C> (), xsd), + &serializer_impl<base64_binary>, + false); + + typedef hex_binary<C, simple_type> hex_binary; + register_type ( + typeid (hex_binary), + qualified_name (bits::hex_binary<C> (), xsd), + &serializer_impl<hex_binary>, + false); + + + // Date/time. + // + typedef gday<C, simple_type> gday; + register_type ( + typeid (gday), + qualified_name (bits::gday<C> (), xsd), + &serializer_impl<gday>, + false); + + typedef gmonth<C, simple_type> gmonth; + register_type ( + typeid (gmonth), + qualified_name (bits::gmonth<C> (), xsd), + &serializer_impl<gmonth>, + false); + + typedef gyear<C, simple_type> gyear; + register_type ( + typeid (gyear), + qualified_name (bits::gyear<C> (), xsd), + &serializer_impl<gyear>, + false); + + typedef gmonth_day<C, simple_type> gmonth_day; + register_type ( + typeid (gmonth_day), + qualified_name (bits::gmonth_day<C> (), xsd), + &serializer_impl<gmonth_day>, + false); + + typedef gyear_month<C, simple_type> gyear_month; + register_type ( + typeid (gyear_month), + qualified_name (bits::gyear_month<C> (), xsd), + &serializer_impl<gyear_month>, + false); + + typedef date<C, simple_type> date; + register_type ( + typeid (date), + qualified_name (bits::date<C> (), xsd), + &serializer_impl<date>, + false); + + typedef time<C, simple_type> time; + register_type ( + typeid (time), + qualified_name (bits::time<C> (), xsd), + &serializer_impl<time>, + false); + + typedef date_time<C, simple_type> date_time; + register_type ( + typeid (date_time), + qualified_name (bits::date_time<C> (), xsd), + &serializer_impl<date_time>, + false); + + typedef duration<C, simple_type> duration; + register_type ( + typeid (duration), + qualified_name (bits::duration<C> (), xsd), + &serializer_impl<duration>, + false); + + + // Entity. + // + typedef entity<C, ncname> entity; + register_type ( + typeid (entity), + qualified_name (bits::entity<C> (), xsd), + &serializer_impl<entity>, + false); + + typedef entities<C, simple_type, entity> entities; + register_type ( + typeid (entities), + qualified_name (bits::entities<C> (), xsd), + &serializer_impl<entities>, + false); + } + + template <typename C> + void type_serializer_map<C>:: + register_type (const type_id& tid, + const qualified_name& name, + serializer s, + bool override) + { + if (override || type_map_.find (&tid) == type_map_.end ()) + type_map_[&tid] = type_info (name, s); + } + + template <typename C> + void type_serializer_map<C>:: + unregister_type (const type_id& tid) + { + type_map_.erase (&tid); + } + + template <typename C> + void type_serializer_map<C>:: + register_element (const qualified_name& root, + const qualified_name& subst, + const type_id& tid, + serializer s) + { + element_map_[root][&tid] = type_info (subst, s); + } + + template <typename C> + void type_serializer_map<C>:: + unregister_element (const qualified_name& root, const type_id& tid) + { + typename element_map::iterator i (element_map_.find (root)); + + if (i != element_map_.end ()) + { + i->second.erase (&tid); + + if (i->second.empty ()) + element_map_.erase (root); + } + } + + template <typename C> + void type_serializer_map<C>:: + serialize (const C* name, // element name + const C* ns, // element namespace + bool global, + bool qualified, + xercesc::DOMElement& parent, + const type& x) const + { + const type_id& tid (typeid (x)); + + // First see if we can find a substitution. + // + if (global) + { + typename element_map::const_iterator i ( + element_map_.find (qualified_name (name, ns))); + + if (i != element_map_.end ()) + { + if (const type_info* ti = find_substitution (i->second, tid)) + { + xercesc::DOMElement& e ( + xml::dom::create_element ( + ti->name ().name ().c_str (), + ti->name ().namespace_ ().c_str (), + parent)); + + ti->serializer () (e, x); + return; + } + } + } + + // The last resort is xsi:type. + // + if (const type_info* ti = find (tid)) + { + xercesc::DOMElement& e ( + qualified + ? xml::dom::create_element (name, ns, parent) + : xml::dom::create_element (name, parent)); + + ti->serializer () (e, x); + set_xsi_type (parent, e, *ti); + return; + } + + throw no_type_info<C> (std::basic_string<C> (), + std::basic_string<C> ()); //@@ TODO + } + + template <typename C> + void type_serializer_map<C>:: + serialize (const C* static_name, + const C* static_ns, + xercesc::DOMElement& e, + const qualified_name& qn, + const type& x) const + { + const type_id& tid (typeid (x)); + + // First see if this is a substitution. + // + if (qn.name () != static_name || qn.namespace_ () != static_ns) + { + typename element_map::const_iterator i ( + element_map_.find (qualified_name (static_name, static_ns))); + + if (i != element_map_.end ()) + { + if (const type_info* ti = find_substitution (i->second, tid)) + { + if (ti->name ().name () != qn.name () || + ti->name ().namespace_ () != qn.namespace_ ()) + { + throw unexpected_element<C> ( + qn.name (), qn.namespace_ (), + ti->name ().name (), ti->name ().namespace_ ()); + } + + ti->serializer () (e, x); + return; + } + } + + // This is not a valid substitution. + // + throw unexpected_element<C> (qn.name (), qn.namespace_ (), + static_name, static_ns); + } + + // The last resort is xsi:type. + // + if (const type_info* ti = find (tid)) + { + ti->serializer () (e, x); + set_xsi_type (e, e, *ti); + return; + } + + throw no_type_info<C> (std::basic_string<C> (), + std::basic_string<C> ()); //@@ TODO + } + + template <typename C> + xml::dom::auto_ptr<xercesc::DOMDocument> type_serializer_map<C>:: + serialize (const C* name, + const C* ns, + const xml::dom::namespace_infomap<C>& m, + const type& x, + unsigned long flags) const + { + const type_id& tid (typeid (x)); + + // See if we can find a substitution. + // + { + typename element_map::const_iterator i ( + element_map_.find (qualified_name (name, ns))); + + if (i != element_map_.end ()) + { + if (const type_info* ti = find_substitution (i->second, tid)) + { + return xml::dom::serialize<C> ( + ti->name ().name (), ti->name ().namespace_ (), m, flags); + } + } + } + + // If there is no substitution then serialize() will have to + // find suitable xsi:type. + // + return xml::dom::serialize<C> (name, ns, m, flags); + } + + template <typename C> + const typename type_serializer_map<C>::type_info* + type_serializer_map<C>:: + find (const type_id& tid) const + { + typename type_map::const_iterator i (type_map_.find (&tid)); + return i == type_map_.end () ? 0 : &i->second; + } + + template <typename C> + const typename type_serializer_map<C>::type_info* + type_serializer_map<C>:: + find_substitution (const subst_map& start, const type_id& tid) const + { + typename subst_map::const_iterator i (start.find (&tid)); + + if (i != start.end ()) + return &i->second; + else + { + for (i = start.begin (); i != start.end (); ++i) + { + typename element_map::const_iterator j ( + element_map_.find (i->second.name ())); + + if (j != element_map_.end ()) + { + if (const type_info* ti = find_substitution (j->second, tid)) + return ti; + } + } + } + + return 0; + } + + template <typename C> + void type_serializer_map<C>:: + set_xsi_type (xercesc::DOMElement& parent, + xercesc::DOMElement& e, + const type_info& ti) const + { + std::basic_string<C> id; + const std::basic_string<C>& ns (ti.name ().namespace_ ()); + + if (!ns.empty ()) + { + id = xml::dom::prefix (ns, e); + + if (!id.empty ()) + id += C (':'); + } + + id += ti.name ().name (); + + std::basic_string<C> name = xml::dom::prefix ( + xml::bits::xsi_namespace<C> (), parent, xml::bits::xsi_prefix<C> ()); + + if (!name.empty ()) + name += C (':'); + + name += xml::bits::type<C> (); + + e.setAttributeNS ( + xercesc::SchemaSymbols::fgURI_XSI, + xml::string (name).c_str (), + xml::string (id).c_str ()); + } + + + // type_serializer_plate + // + template<unsigned long id, typename C> + type_serializer_plate<id, C>:: + type_serializer_plate () + { + if (count == 0) + map = new type_serializer_map<C>; + + ++count; + } + + template<unsigned long id, typename C> + type_serializer_plate<id, C>:: + ~type_serializer_plate () + { + if (--count == 0) + delete map; + } + + + // + // + template<typename T> + void + serializer_impl (xercesc::DOMElement& e, const type& x) + { + e << static_cast<const T&> (x); + } + + // type_serializer_initializer + // + template<unsigned long id, typename C, typename T> + type_serializer_initializer<id, C, T>:: + type_serializer_initializer (const C* name, const C* ns) + { + type_serializer_map_instance<id, C> ().register_type ( + typeid (T), + xml::qualified_name<C> (name, ns), + &serializer_impl<T>); + } + + template<unsigned long id, typename C, typename T> + type_serializer_initializer<id, C, T>:: + ~type_serializer_initializer () + { + type_serializer_map_instance<id, C> ().unregister_type (typeid (T)); + } + + // element_serializer_initializer + // + template<unsigned long id, typename C, typename T> + element_serializer_initializer<id, C, T>:: + element_serializer_initializer (const C* root_name, const C* root_ns, + const C* subst_name, const C* subst_ns) + : root_name_ (root_name), root_ns_ (root_ns) + { + type_serializer_map_instance<id, C> ().register_element ( + xml::qualified_name<C> (root_name, root_ns), + xml::qualified_name<C> (subst_name, subst_ns), + typeid (T), + &serializer_impl<T>); + } + + template<unsigned long id, typename C, typename T> + element_serializer_initializer<id, C, T>:: + ~element_serializer_initializer () + { + type_serializer_map_instance<id, C> ().unregister_element ( + xml::qualified_name<C> (root_name_, root_ns_), typeid (T)); + } + } + } +} diff --git a/xsd/libxsd/xsd/cxx/tree/types.hxx b/xsd/libxsd/xsd/cxx/tree/types.hxx new file mode 100644 index 0000000..299824f --- /dev/null +++ b/xsd/libxsd/xsd/cxx/tree/types.hxx @@ -0,0 +1,3791 @@ +// file : xsd/cxx/tree/types.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +/** + * @file + * + * @brief Contains C++ class definitions for XML Schema built-in types. + * + * This is an internal header and is included by the generated code. You + * normally should not include it directly. + * + */ + +#ifndef XSD_CXX_TREE_TYPES_HXX +#define XSD_CXX_TREE_TYPES_HXX + +#include <string> +#include <cstddef> // std::size_t + +#include <xercesc/dom/DOMAttr.hpp> +#include <xercesc/dom/DOMElement.hpp> + +#include <xsd/cxx/tree/elements.hxx> +#include <xsd/cxx/tree/list.hxx> +#include <xsd/cxx/tree/buffer.hxx> +#include <xsd/cxx/tree/istream-fwd.hxx> + +#include <xsd/cxx/tree/date-time.hxx> + +namespace xsd +{ + namespace cxx + { + /** + * @brief C++/Tree mapping runtime namespace. + * + * This is an internal namespace and normally should not be referenced + * directly. Instead you should use the aliases for types in this + * namespaces that are created in the generated code. + * + */ + namespace tree + { + /** + * @brief Class corresponding to the XML Schema %string built-in + * type. + * + * The %string class publicly inherits from and has the same set + * of constructors as @c std::basic_string. It therefore can be + * used as @c std::string (or @c std::wstring if you are using + * @c wchar_t as the character type). + * + * @nosubgrouping + */ + template <typename C, typename B> + class string: public B, public std::basic_string<C> + { + typedef std::basic_string<C> base_type; + + base_type& + base () + { + return *this; + } + + public: + /** + * @name Constructors + */ + //@{ + + /** + * @brief Default constructor creates an empty %string. + */ + string () + { + } + + /** + * @brief Initialize an instance with a copy of a C %string. + * + * @param s A C %string to copy. + */ + string (const C* s) + : base_type (s) + { + } + + /** + * @brief Initialize an instance with a character array. + * + * @param s A character array to copy. + * @param n A number of character to copy. + */ + string (const C* s, std::size_t n) + : base_type (s, n) + { + } + + /** + * @brief Initialize an instance with multiple copies of the same + * character. + * + * @param n A number of copies to create. + * @param c A character to copy. + */ + string (std::size_t n, C c) + : base_type (n, c) + { + } + + /** + * @brief Initialize an instance with a copy of a standard %string. + * + * @param s A standard %string to copy. + */ + string (const std::basic_string<C>& s) + : base_type (s) + { + } + + /** + * @brief Initialize an instance with a copy of a substring. + * + * @param s A standard %string to copy the substring from. + * @param pos An index of the first character to copy from. + * @param n A number of characters to copy. + */ + string (const std::basic_string<C>& s, + std::size_t pos, + std::size_t n = std::basic_string<C>::npos) + : base_type (s, pos, n) + { + } + + public: + /** + * @brief Copy constructor. + * + * @param x An instance to make a copy of. + * @param f Flags to create the copy with. + * @param c A pointer to the object that will contain the copy. + * + * For polymorphic object models use the @c _clone function instead. + */ + string (const string& x, flags f = 0, container* c = 0) + : B (x, f, c), base_type (x) + { + } + + /** + * @brief Copy the instance polymorphically. + * + * @param f Flags to create the copy with. + * @param c A pointer to the object that will contain the copy. + * @return A pointer to the dynamically allocated copy. + * + * This function ensures that the dynamic type of the instance + * is used for copying and should be used for polymorphic object + * models instead of the copy constructor. + */ + virtual string* + _clone (flags f = 0, container* c = 0) const; + + public: + /** + * @brief Create an instance from a data representation + * stream. + * + * @param s A stream to extract the data from. + * @param f Flags to create the new instance with. + * @param c A pointer to the object that will contain the new + * instance. + */ + template <typename S> + string (istream<S>& s, flags f = 0, container* c = 0); + + /** + * @brief Create an instance from a DOM element. + * + * @param e A DOM element to extract the data from. + * @param f Flags to create the new instance with. + * @param c A pointer to the object that will contain the new + * instance. + */ + string (const xercesc::DOMElement& e, flags f = 0, container* c = 0); + + /** + * @brief Create an instance from a DOM Attribute. + * + * @param a A DOM attribute to extract the data from. + * @param f Flags to create the new instance with. + * @param c A pointer to the object that will contain the new + * instance. + */ + string (const xercesc::DOMAttr& a, flags f = 0, container* c = 0); + + /** + * @brief Create an instance from a %string fragment. + * + * @param s A %string fragment to extract the data from. + * @param e A pointer to DOM element containing the %string fragment. + * @param f Flags to create the new instance with. + * @param c A pointer to the object that will contain the new + * instance. + */ + string (const std::basic_string<C>& s, + const xercesc::DOMElement* e, + flags f = 0, + container* c = 0); + //@} + + public: + /** + * @brief Assign a character to the instance. + * + * The resulting %string has only one character. + * + * @param c A character to assign. + * @return A reference to the instance. + */ + string& + operator= (C c) + { + base () = c; + return *this; + } + + /** + * @brief Assign a C %string to the instance. + * + * The resulting %string contains a copy of the C %string. + * + * @param s A C %string to assign. + * @return A reference to the instance. + */ + string& + operator= (const C* s) + { + base () = s; + return *this; + } + + /** + * @brief Assign a standard %string to the instance. + * + * The resulting %string contains a copy of the standard %string. + * + * @param s A standard %string to assign. + * @return A reference to the instance. + */ + string& + operator= (const std::basic_string<C>& s) + { + base () = s; + return *this; + } + + /** + * @brief Copy assignment operator. + * + * @param x An instance to assign. + * @return A reference to the instance. + */ + string& + operator= (const string& x) + { + base () = x; + return *this; + } + }; + + + /** + * @brief Class corresponding to the XML Schema normalizedString + * built-in type. + * + * The %normalized_string class publicly inherits from and has + * the same set of constructors as @c std::basic_string. It + * therefore can be used as @c std::string (or @c std::wstring + * if you are using @c wchar_t as the character type). + * + * @nosubgrouping + */ + template <typename C, typename B> + class normalized_string: public B + { + typedef B base_type; + + base_type& + base () + { + return *this; + } + + public: + /** + * @name Constructors + */ + //@{ + + /** + * @brief Default constructor creates an empty %normalized_string. + */ + normalized_string () + { + } + + /** + * @brief Initialize an instance with a copy of a C %string. + * + * @param s A C %string to copy. + */ + normalized_string (const C* s) + : base_type (s) + { + } + + /** + * @brief Initialize an instance with a character array. + * + * @param s A character array to copy. + * @param n A number of character to copy. + */ + normalized_string (const C* s, std::size_t n) + : base_type (s, n) + { + } + + /** + * @brief Initialize an instance with multiple copies of the same + * character. + * + * @param n A number of copies to create. + * @param c A character to copy. + */ + normalized_string (std::size_t n, C c) + : base_type (n, c) + { + } + + /** + * @brief Initialize an instance with a copy of a standard %string. + * + * @param s A standard %string to copy. + */ + normalized_string (const std::basic_string<C>& s) + : base_type (s) + { + } + + /** + * @brief Initialize an instance with a copy of a substring. + * + * @param s A standard %string to copy the substring from. + * @param pos An index of the first character to copy from. + * @param n A number of characters to copy. + */ + normalized_string (const std::basic_string<C>& s, + std::size_t pos, + std::size_t n = std::basic_string<C>::npos) + : base_type (s, pos, n) + { + } + + public: + /** + * @brief Copy constructor. + * + * @param x An instance to make a copy of. + * @param f Flags to create the copy with. + * @param c A pointer to the object that will contain the copy. + * + * For polymorphic object models use the @c _clone function instead. + */ + normalized_string (const normalized_string& x, + flags f = 0, + container* c = 0) + : base_type (x, f, c) + { + } + + /** + * @brief Copy the instance polymorphically. + * + * @param f Flags to create the copy with. + * @param c A pointer to the object that will contain the copy. + * @return A pointer to the dynamically allocated copy. + * + * This function ensures that the dynamic type of the instance + * is used for copying and should be used for polymorphic object + * models instead of the copy constructor. + */ + virtual normalized_string* + _clone (flags f = 0, container* c = 0) const; + + public: + /** + * @brief Create an instance from a data representation + * stream. + * + * @param s A stream to extract the data from. + * @param f Flags to create the new instance with. + * @param c A pointer to the object that will contain the new + * instance. + */ + template <typename S> + normalized_string (istream<S>& s, flags f = 0, container* c = 0); + + /** + * @brief Create an instance from a DOM element. + * + * @param e A DOM element to extract the data from. + * @param f Flags to create the new instance with. + * @param c A pointer to the object that will contain the new + * instance. + */ + normalized_string (const xercesc::DOMElement& e, + flags f = 0, + container* c = 0); + + /** + * @brief Create an instance from a DOM Attribute. + * + * @param a A DOM attribute to extract the data from. + * @param f Flags to create the new instance with. + * @param c A pointer to the object that will contain the new + * instance. + */ + normalized_string (const xercesc::DOMAttr& a, + flags f = 0, + container* c = 0); + + /** + * @brief Create an instance from a %string fragment. + * + * @param s A %string fragment to extract the data from. + * @param e A pointer to DOM element containing the %string fragment. + * @param f Flags to create the new instance with. + * @param c A pointer to the object that will contain the new + * instance. + */ + normalized_string (const std::basic_string<C>& s, + const xercesc::DOMElement* e, + flags f = 0, + container* c = 0); + //@} + + public: + /** + * @brief Assign a character to the instance. + * + * The resulting %normalized_string has only one character. + * + * @param c A character to assign. + * @return A reference to the instance. + */ + normalized_string& + operator= (C c) + { + base () = c; + return *this; + } + + /** + * @brief Assign a C %string to the instance. + * + * The resulting %normalized_string contains a copy of the C %string. + * + * @param s A C %string to assign. + * @return A reference to the instance. + */ + normalized_string& + operator= (const C* s) + { + base () = s; + return *this; + } + + /** + * @brief Assign a standard %string to the instance. + * + * The resulting %normalized_string contains a copy of the standard + * %string. + * + * @param s A standard %string to assign. + * @return A reference to the instance. + */ + normalized_string& + operator= (const std::basic_string<C>& s) + { + base () = s; + return *this; + } + + /** + * @brief Copy assignment operator. + * + * @param x An instance to assign. + * @return A reference to the instance. + */ + normalized_string& + operator= (const normalized_string& x) + { + base () = x; + return *this; + } + + protected: + //@cond + + void + normalize (); + + //@endcond + }; + + + /** + * @brief Class corresponding to the XML Schema %token built-in + * type. + * + * The %token class publicly inherits from and has the same set + * of constructors as @c std::basic_string. It therefore can be + * used as @c std::string (or @c std::wstring if you are using + * @c wchar_t as the character type). + * + * @nosubgrouping + */ + template <typename C, typename B> + class token: public B + { + typedef B base_type; + + base_type& + base () + { + return *this; + } + + public: + /** + * @name Constructors + */ + //@{ + + /** + * @brief Default constructor creates an empty %token. + */ + token () + { + } + + /** + * @brief Initialize an instance with a copy of a C %string. + * + * @param s A C %string to copy. + */ + token (const C* s) + : base_type (s) + { + } + + /** + * @brief Initialize an instance with a character array. + * + * @param s A character array to copy. + * @param n A number of character to copy. + */ + token (const C* s, std::size_t n) + : base_type (s, n) + { + } + + /** + * @brief Initialize an instance with multiple copies of the same + * character. + * + * @param n A number of copies to create. + * @param c A character to copy. + */ + token (std::size_t n, C c) + : base_type (n, c) + { + } + + /** + * @brief Initialize an instance with a copy of a standard %string. + * + * @param s A standard %string to copy. + */ + token (const std::basic_string<C>& s) + : base_type (s) + { + } + + /** + * @brief Initialize an instance with a copy of a substring. + * + * @param s A standard %string to copy the substring from. + * @param pos An index of the first character to copy from. + * @param n A number of characters to copy. + */ + token (const std::basic_string<C>& s, + std::size_t pos, + std::size_t n = std::basic_string<C>::npos) + : base_type (s, pos, n) + { + } + + public: + /** + * @brief Copy constructor. + * + * @param x An instance to make a copy of. + * @param f Flags to create the copy with. + * @param c A pointer to the object that will contain the copy. + * + * For polymorphic object models use the @c _clone function instead. + */ + token (const token& x, flags f = 0, container* c = 0) + : base_type (x, f, c) + { + } + + /** + * @brief Copy the instance polymorphically. + * + * @param f Flags to create the copy with. + * @param c A pointer to the object that will contain the copy. + * @return A pointer to the dynamically allocated copy. + * + * This function ensures that the dynamic type of the instance + * is used for copying and should be used for polymorphic object + * models instead of the copy constructor. + */ + virtual token* + _clone (flags f = 0, container* c = 0) const; + + public: + /** + * @brief Create an instance from a data representation + * stream. + * + * @param s A stream to extract the data from. + * @param f Flags to create the new instance with. + * @param c A pointer to the object that will contain the new + * instance. + */ + template <typename S> + token (istream<S>& s, flags f = 0, container* c = 0); + + /** + * @brief Create an instance from a DOM element. + * + * @param e A DOM element to extract the data from. + * @param f Flags to create the new instance with. + * @param c A pointer to the object that will contain the new + * instance. + */ + token (const xercesc::DOMElement& e, flags f = 0, container* c = 0); + + /** + * @brief Create an instance from a DOM Attribute. + * + * @param a A DOM attribute to extract the data from. + * @param f Flags to create the new instance with. + * @param c A pointer to the object that will contain the new + * instance. + */ + token (const xercesc::DOMAttr& a, flags f = 0, container* c = 0); + + /** + * @brief Create an instance from a %string fragment. + * + * @param s A %string fragment to extract the data from. + * @param e A pointer to DOM element containing the %string fragment. + * @param f Flags to create the new instance with. + * @param c A pointer to the object that will contain the new + * instance. + */ + token (const std::basic_string<C>& s, + const xercesc::DOMElement* e, + flags f = 0, + container* c = 0); + //@} + + public: + /** + * @brief Assign a character to the instance. + * + * The resulting %token has only one character. + * + * @param c A character to assign. + * @return A reference to the instance. + */ + token& + operator= (C c) + { + base () = c; + return *this; + } + + /** + * @brief Assign a C %string to the instance. + * + * The resulting %token contains a copy of the C %string. + * + * @param s A C %string to assign. + * @return A reference to the instance. + */ + token& + operator= (const C* s) + { + base () = s; + return *this; + } + + /** + * @brief Assign a standard %string to the instance. + * + * The resulting %token contains a copy of the standard %string. + * + * @param s A standard %string to assign. + * @return A reference to the instance. + */ + token& + operator= (const std::basic_string<C>& s) + { + base () = s; + return *this; + } + + /** + * @brief Copy assignment operator. + * + * @param x An instance to assign. + * @return A reference to the instance. + */ + token& + operator= (const token& x) + { + base () = x; + return *this; + } + + protected: + //@cond + + void + collapse (); + + //@endcond + }; + + + /** + * @brief Class corresponding to the XML Schema NMTOKEN built-in + * type. + * + * The %nmtoken class publicly inherits from and has the same set + * of constructors as @c std::basic_string. It therefore can be + * used as @c std::string (or @c std::wstring if you are using + * @c wchar_t as the character type). + * + * @nosubgrouping + */ + template <typename C, typename B> + class nmtoken: public B + { + typedef B base_type; + + base_type& + base () + { + return *this; + } + + public: + /** + * @name Constructors + */ + //@{ + + /** + * @brief Initialize an instance with a copy of a C %string. + * + * @param s A C %string to copy. + */ + nmtoken (const C* s) + : base_type (s) + { + } + + /** + * @brief Initialize an instance with a character array. + * + * @param s A character array to copy. + * @param n A number of character to copy. + */ + nmtoken (const C* s, std::size_t n) + : base_type (s, n) + { + } + + /** + * @brief Initialize an instance with multiple copies of the same + * character. + * + * @param n A number of copies to create. + * @param c A character to copy. + */ + nmtoken (std::size_t n, C c) + : base_type (n, c) + { + } + + /** + * @brief Initialize an instance with a copy of a standard %string. + * + * @param s A standard %string to copy. + */ + nmtoken (const std::basic_string<C>& s) + : base_type (s) + { + } + + /** + * @brief Initialize an instance with a copy of a substring. + * + * @param s A standard %string to copy the substring from. + * @param pos An index of the first character to copy from. + * @param n A number of characters to copy. + */ + nmtoken (const std::basic_string<C>& s, + std::size_t pos, + std::size_t n = std::basic_string<C>::npos) + : base_type (s, pos, n) + { + } + + public: + /** + * @brief Copy constructor. + * + * @param x An instance to make a copy of. + * @param f Flags to create the copy with. + * @param c A pointer to the object that will contain the copy. + * + * For polymorphic object models use the @c _clone function instead. + */ + nmtoken (const nmtoken& x, flags f = 0, container* c = 0) + : base_type (x, f, c) + { + } + + /** + * @brief Copy the instance polymorphically. + * + * @param f Flags to create the copy with. + * @param c A pointer to the object that will contain the copy. + * @return A pointer to the dynamically allocated copy. + * + * This function ensures that the dynamic type of the instance + * is used for copying and should be used for polymorphic object + * models instead of the copy constructor. + */ + virtual nmtoken* + _clone (flags f = 0, container* c = 0) const; + + public: + /** + * @brief Create an instance from a data representation + * stream. + * + * @param s A stream to extract the data from. + * @param f Flags to create the new instance with. + * @param c A pointer to the object that will contain the new + * instance. + */ + template <typename S> + nmtoken (istream<S>& s, flags f = 0, container* c = 0); + + /** + * @brief Create an instance from a DOM element. + * + * @param e A DOM element to extract the data from. + * @param f Flags to create the new instance with. + * @param c A pointer to the object that will contain the new + * instance. + */ + nmtoken (const xercesc::DOMElement& e, flags f = 0, container* c = 0); + + /** + * @brief Create an instance from a DOM Attribute. + * + * @param a A DOM attribute to extract the data from. + * @param f Flags to create the new instance with. + * @param c A pointer to the object that will contain the new + * instance. + */ + nmtoken (const xercesc::DOMAttr& a, flags f = 0, container* c = 0); + + /** + * @brief Create an instance from a %string fragment. + * + * @param s A %string fragment to extract the data from. + * @param e A pointer to DOM element containing the %string fragment. + * @param f Flags to create the new instance with. + * @param c A pointer to the object that will contain the new + * instance. + */ + nmtoken (const std::basic_string<C>& s, + const xercesc::DOMElement* e, + flags f = 0, + container* c = 0); + //@} + + public: + /** + * @brief Assign a character to the instance. + * + * The resulting %nmtoken has only one character. + * + * @param c A character to assign. + * @return A reference to the instance. + */ + nmtoken& + operator= (C c) + { + base () = c; + return *this; + } + + /** + * @brief Assign a C %string to the instance. + * + * The resulting %nmtoken contains a copy of the C %string. + * + * @param s A C %string to assign. + * @return A reference to the instance. + */ + nmtoken& + operator= (const C* s) + { + base () = s; + return *this; + } + + /** + * @brief Assign a standard %string to the instance. + * + * The resulting %nmtoken contains a copy of the standard %string. + * + * @param s A standard %string to assign. + * @return A reference to the instance. + */ + nmtoken& + operator= (const std::basic_string<C>& s) + { + base () = s; + return *this; + } + + /** + * @brief Copy assignment operator. + * + * @param x An instance to assign. + * @return A reference to the instance. + */ + nmtoken& + operator= (const nmtoken& x) + { + base () = x; + return *this; + } + + protected: + //@cond + + nmtoken () + : base_type () + { + } + + //@endcond + }; + + + /** + * @brief Class corresponding to the XML Schema NMTOKENS built-in + * type. + * + * The %nmtokens class is a vector (or %list in XML Schema terminology) + * of nmtoken elements. It is implemented in terms of the list class + * template. + * + * @nosubgrouping + */ + template <typename C, typename B, typename nmtoken> + class nmtokens: public B, public list<nmtoken, C> + { + typedef list<nmtoken, C> base_type; + + public: + /** + * @name Constructors + */ + //@{ + + /** + * @brief Default constructor creates no elements. + */ + nmtokens () + : base_type (0, this) + { + } + + /** + * @brief Initialize the instance with copies of an exemplar elements. + * + * @param n A number of elements to copy. + * @param x An exemplar element to copy. + */ + nmtokens (typename base_type::size_type n, const nmtoken& x) + : base_type (n, x, this) + { + } + + /** + * @brief Initialize the instance with copies of elements from an + * iterator range. + * + * @param begin An iterator pointing to the first element. + * @param end An iterator pointing to the one past the last element. + */ + template <typename I> + nmtokens (const I& begin, const I& end) + : base_type (begin, end, this) + { + } + + public: + /** + * @brief Copy constructor. + * + * @param x An instance to make a copy of. + * @param f Flags to create the copy with. + * @param c A pointer to the object that will contain the copy. + * + * For polymorphic object models use the @c _clone function instead. + */ + nmtokens (const nmtokens& x, flags f, container* c = 0) + : B (x, f, c), base_type (x, f, this) + { + } + + /** + * @brief Copy the instance polymorphically. + * + * @param f Flags to create the copy with. + * @param c A pointer to the object that will contain the copy. + * @return A pointer to the dynamically allocated copy. + * + * This function ensures that the dynamic type of the instance + * is used for copying and should be used for polymorphic object + * models instead of the copy constructor. + */ + virtual nmtokens* + _clone (flags f = 0, container* c = 0) const; + + public: + /** + * @brief Create an instance from a data representation + * stream. + * + * @param s A stream to extract the data from. + * @param f Flags to create the new instance with. + * @param c A pointer to the object that will contain the new + * instance. + */ + template <typename S> + nmtokens (istream<S>& s, flags f = 0, container* c = 0); + + /** + * @brief Create an instance from a DOM element. + * + * @param e A DOM element to extract the data from. + * @param f Flags to create the new instance with. + * @param c A pointer to the object that will contain the new + * instance. + */ + nmtokens (const xercesc::DOMElement& e, flags f = 0, container* c = 0); + + /** + * @brief Create an instance from a DOM Attribute. + * + * @param a A DOM attribute to extract the data from. + * @param f Flags to create the new instance with. + * @param c A pointer to the object that will contain the new + * instance. + */ + nmtokens (const xercesc::DOMAttr& a, flags f = 0, container* c = 0); + + /** + * @brief Create an instance from a %string fragment. + * + * @param s A %string fragment to extract the data from. + * @param e A pointer to DOM element containing the %string fragment. + * @param f Flags to create the new instance with. + * @param c A pointer to the object that will contain the new + * instance. + */ + nmtokens (const std::basic_string<C>& s, + const xercesc::DOMElement* e, + flags f = 0, + container* c = 0); + //@} + }; + + + /** + * @brief Class corresponding to the XML Schema Name built-in + * type. + * + * The %name class publicly inherits from and has the same set + * of constructors as @c std::basic_string. It therefore can be + * used as @c std::string (or @c std::wstring if you are using + * @c wchar_t as the character type). + * + * @nosubgrouping + */ + template <typename C, typename B> + class name: public B + { + typedef B base_type; + + base_type& + base () + { + return *this; + } + + public: + /** + * @name Constructors + */ + //@{ + + /** + * @brief Initialize an instance with a copy of a C %string. + * + * @param s A C %string to copy. + */ + name (const C* s) + : base_type (s) + { + } + + /** + * @brief Initialize an instance with a character array. + * + * @param s A character array to copy. + * @param n A number of character to copy. + */ + name (const C* s, std::size_t n) + : base_type (s, n) + { + } + + /** + * @brief Initialize an instance with multiple copies of the same + * character. + * + * @param n A number of copies to create. + * @param c A character to copy. + */ + name (std::size_t n, C c) + : base_type (n, c) + { + } + + /** + * @brief Initialize an instance with a copy of a standard %string. + * + * @param s A standard %string to copy. + */ + name (const std::basic_string<C>& s) + : base_type (s) + { + } + + /** + * @brief Initialize an instance with a copy of a substring. + * + * @param s A standard %string to copy the substring from. + * @param pos An index of the first character to copy from. + * @param n A number of characters to copy. + */ + name (const std::basic_string<C>& s, + std::size_t pos, + std::size_t n = std::basic_string<C>::npos) + : base_type (s, pos, n) + { + } + + public: + /** + * @brief Copy constructor. + * + * @param x An instance to make a copy of. + * @param f Flags to create the copy with. + * @param c A pointer to the object that will contain the copy. + * + * For polymorphic object models use the @c _clone function instead. + */ + name (const name& x, flags f = 0, container* c = 0) + : base_type (x, f, c) + { + } + + /** + * @brief Copy the instance polymorphically. + * + * @param f Flags to create the copy with. + * @param c A pointer to the object that will contain the copy. + * @return A pointer to the dynamically allocated copy. + * + * This function ensures that the dynamic type of the instance + * is used for copying and should be used for polymorphic object + * models instead of the copy constructor. + */ + virtual name* + _clone (flags f = 0, container* c = 0) const; + + public: + /** + * @brief Create an instance from a data representation + * stream. + * + * @param s A stream to extract the data from. + * @param f Flags to create the new instance with. + * @param c A pointer to the object that will contain the new + * instance. + */ + template <typename S> + name (istream<S>& s, flags f = 0, container* c = 0); + + /** + * @brief Create an instance from a DOM element. + * + * @param e A DOM element to extract the data from. + * @param f Flags to create the new instance with. + * @param c A pointer to the object that will contain the new + * instance. + */ + name (const xercesc::DOMElement& e, flags f = 0, container* c = 0); + + /** + * @brief Create an instance from a DOM Attribute. + * + * @param a A DOM attribute to extract the data from. + * @param f Flags to create the new instance with. + * @param c A pointer to the object that will contain the new + * instance. + */ + name (const xercesc::DOMAttr& a, flags f = 0, container* c = 0); + + /** + * @brief Create an instance from a %string fragment. + * + * @param s A %string fragment to extract the data from. + * @param e A pointer to DOM element containing the %string fragment. + * @param f Flags to create the new instance with. + * @param c A pointer to the object that will contain the new + * instance. + */ + name (const std::basic_string<C>& s, + const xercesc::DOMElement* e, + flags f = 0, + container* c = 0); + //@} + + public: + /** + * @brief Assign a character to the instance. + * + * The resulting %name has only one character. + * + * @param c A character to assign. + * @return A reference to the instance. + */ + name& + operator= (C c) + { + base () = c; + return *this; + } + + /** + * @brief Assign a C %string to the instance. + * + * The resulting %name contains a copy of the C %string. + * + * @param s A C %string to assign. + * @return A reference to the instance. + */ + name& + operator= (const C* s) + { + base () = s; + return *this; + } + + /** + * @brief Assign a standard %string to the instance. + * + * The resulting %name contains a copy of the standard %string. + * + * @param s A standard %string to assign. + * @return A reference to the instance. + */ + name& + operator= (const std::basic_string<C>& s) + { + base () = s; + return *this; + } + + /** + * @brief Copy assignment operator. + * + * @param x An instance to assign. + * @return A reference to the instance. + */ + name& + operator= (const name& x) + { + base () = x; + return *this; + } + + protected: + //@cond + + name () + : base_type () + { + } + + //@endcond + }; + + + // Forward declaration for Sun CC. + // + template <typename C, typename B, typename uri, typename ncname> + class qname; + + + /** + * @brief Class corresponding to the XML Schema NCame built-in + * type. + * + * The %ncname class publicly inherits from and has the same set + * of constructors as @c std::basic_string. It therefore can be + * used as @c std::string (or @c std::wstring if you are using + * @c wchar_t as the character type). + * + * @nosubgrouping + */ + template <typename C, typename B> + class ncname: public B + { + typedef B base_type; + + base_type& + base () + { + return *this; + } + + public: + /** + * @name Constructors + */ + //@{ + + /** + * @brief Initialize an instance with a copy of a C %string. + * + * @param s A C %string to copy. + */ + ncname (const C* s) + : base_type (s) + { + } + + /** + * @brief Initialize an instance with a character array. + * + * @param s A character array to copy. + * @param n A number of character to copy. + */ + ncname (const C* s, std::size_t n) + : base_type (s, n) + { + } + + /** + * @brief Initialize an instance with multiple copies of the same + * character. + * + * @param n A number of copies to create. + * @param c A character to copy. + */ + ncname (std::size_t n, C c) + : base_type (n, c) + { + } + + /** + * @brief Initialize an instance with a copy of a standard %string. + * + * @param s A standard %string to copy. + */ + ncname (const std::basic_string<C>& s) + : base_type (s) + { + } + + /** + * @brief Initialize an instance with a copy of a substring. + * + * @param s A standard %string to copy the substring from. + * @param pos An index of the first character to copy from. + * @param n A number of characters to copy. + */ + ncname (const std::basic_string<C>& s, + std::size_t pos, + std::size_t n = std::basic_string<C>::npos) + : base_type (s, pos, n) + { + } + + public: + /** + * @brief Copy constructor. + * + * @param x An instance to make a copy of. + * @param f Flags to create the copy with. + * @param c A pointer to the object that will contain the copy. + * + * For polymorphic object models use the @c _clone function instead. + */ + ncname (const ncname& x, flags f = 0, container* c = 0) + : base_type (x, f, c) + { + } + + /** + * @brief Copy the instance polymorphically. + * + * @param f Flags to create the copy with. + * @param c A pointer to the object that will contain the copy. + * @return A pointer to the dynamically allocated copy. + * + * This function ensures that the dynamic type of the instance + * is used for copying and should be used for polymorphic object + * models instead of the copy constructor. + */ + virtual ncname* + _clone (flags f = 0, container* c = 0) const; + + public: + /** + * @brief Create an instance from a data representation + * stream. + * + * @param s A stream to extract the data from. + * @param f Flags to create the new instance with. + * @param c A pointer to the object that will contain the new + * instance. + */ + template <typename S> + ncname (istream<S>& s, flags f = 0, container* c = 0); + + /** + * @brief Create an instance from a DOM element. + * + * @param e A DOM element to extract the data from. + * @param f Flags to create the new instance with. + * @param c A pointer to the object that will contain the new + * instance. + */ + ncname (const xercesc::DOMElement& e, flags f = 0, container* c = 0); + + /** + * @brief Create an instance from a DOM Attribute. + * + * @param a A DOM attribute to extract the data from. + * @param f Flags to create the new instance with. + * @param c A pointer to the object that will contain the new + * instance. + */ + ncname (const xercesc::DOMAttr& a, flags f = 0, container* c = 0); + + /** + * @brief Create an instance from a %string fragment. + * + * @param s A %string fragment to extract the data from. + * @param e A pointer to DOM element containing the %string fragment. + * @param f Flags to create the new instance with. + * @param c A pointer to the object that will contain the new + * instance. + */ + ncname (const std::basic_string<C>& s, + const xercesc::DOMElement* e, + flags f = 0, + container* c = 0); + //@} + + public: + /** + * @brief Assign a character to the instance. + * + * The resulting %ncname has only one character. + * + * @param c A character to assign. + * @return A reference to the instance. + */ + ncname& + operator= (C c) + { + base () = c; + return *this; + } + + /** + * @brief Assign a C %string to the instance. + * + * The resulting %ncname contains a copy of the C %string. + * + * @param s A C %string to assign. + * @return A reference to the instance. + */ + ncname& + operator= (const C* s) + { + base () = s; + return *this; + } + + /** + * @brief Assign a standard %string to the instance. + * + * The resulting %ncname contains a copy of the standard %string. + * + * @param s A standard %string to assign. + * @return A reference to the instance. + */ + ncname& + operator= (const std::basic_string<C>& s) + { + base () = s; + return *this; + } + + /** + * @brief Copy assignment operator. + * + * @param x An instance to assign. + * @return A reference to the instance. + */ + ncname& + operator= (const ncname& x) + { + base () = x; + return *this; + } + + protected: + //@cond + + ncname () + : base_type () + { + } + + //@endcond + + template <typename, typename, typename, typename> + friend class qname; + }; + + + /** + * @brief Class corresponding to the XML Schema %language built-in + * type. + * + * The %language class publicly inherits from and has the same set + * of constructors as @c std::basic_string. It therefore can be + * used as @c std::string (or @c std::wstring if you are using + * @c wchar_t as the character type). + * + * @nosubgrouping + */ + template <typename C, typename B> + class language: public B + { + typedef B base_type; + + base_type& + base () + { + return *this; + } + + public: + /** + * @name Constructors + */ + //@{ + + /** + * @brief Initialize an instance with a copy of a C %string. + * + * @param s A C %string to copy. + */ + language (const C* s) + : base_type (s) + { + } + + /** + * @brief Initialize an instance with a character array. + * + * @param s A character array to copy. + * @param n A number of character to copy. + */ + language (const C* s, std::size_t n) + : base_type (s, n) + { + } + + /** + * @brief Initialize an instance with multiple copies of the same + * character. + * + * @param n A number of copies to create. + * @param c A character to copy. + */ + language (std::size_t n, C c) + : base_type (n, c) + { + } + + /** + * @brief Initialize an instance with a copy of a standard %string. + * + * @param s A standard %string to copy. + */ + language (const std::basic_string<C>& s) + : base_type (s) + { + } + + /** + * @brief Initialize an instance with a copy of a substring. + * + * @param s A standard %string to copy the substring from. + * @param pos An index of the first character to copy from. + * @param n A number of characters to copy. + */ + language (const std::basic_string<C>& s, + std::size_t pos, + std::size_t n = std::basic_string<C>::npos) + : base_type (s, pos, n) + { + } + + public: + /** + * @brief Copy constructor. + * + * @param x An instance to make a copy of. + * @param f Flags to create the copy with. + * @param c A pointer to the object that will contain the copy. + * + * For polymorphic object models use the @c _clone function instead. + */ + language (const language& x, flags f = 0, container* c = 0) + : base_type (x, f, c) + { + } + + /** + * @brief Copy the instance polymorphically. + * + * @param f Flags to create the copy with. + * @param c A pointer to the object that will contain the copy. + * @return A pointer to the dynamically allocated copy. + * + * This function ensures that the dynamic type of the instance + * is used for copying and should be used for polymorphic object + * models instead of the copy constructor. + */ + virtual language* + _clone (flags f = 0, container* c = 0) const; + + public: + /** + * @brief Create an instance from a data representation + * stream. + * + * @param s A stream to extract the data from. + * @param f Flags to create the new instance with. + * @param c A pointer to the object that will contain the new + * instance. + */ + template <typename S> + language (istream<S>& s, flags f = 0, container* c = 0); + + /** + * @brief Create an instance from a DOM element. + * + * @param e A DOM element to extract the data from. + * @param f Flags to create the new instance with. + * @param c A pointer to the object that will contain the new + * instance. + */ + language (const xercesc::DOMElement& e, flags f = 0, container* c = 0); + + /** + * @brief Create an instance from a DOM Attribute. + * + * @param a A DOM attribute to extract the data from. + * @param f Flags to create the new instance with. + * @param c A pointer to the object that will contain the new + * instance. + */ + language (const xercesc::DOMAttr& a, flags f = 0, container* c = 0); + + /** + * @brief Create an instance from a %string fragment. + * + * @param s A %string fragment to extract the data from. + * @param e A pointer to DOM element containing the %string fragment. + * @param f Flags to create the new instance with. + * @param c A pointer to the object that will contain the new + * instance. + */ + language (const std::basic_string<C>& s, + const xercesc::DOMElement* e, + flags f = 0, + container* c = 0); + //@} + + public: + /** + * @brief Assign a character to the instance. + * + * The resulting %language has only one character. + * + * @param c A character to assign. + * @return A reference to the instance. + */ + language& + operator= (C c) + { + base () = c; + return *this; + } + + /** + * @brief Assign a C %string to the instance. + * + * The resulting %language contains a copy of the C %string. + * + * @param s A C %string to assign. + * @return A reference to the instance. + */ + language& + operator= (const C* s) + { + base () = s; + return *this; + } + + /** + * @brief Assign a standard %string to the instance. + * + * The resulting %language contains a copy of the standard %string. + * + * @param s A standard %string to assign. + * @return A reference to the instance. + */ + language& + operator= (const std::basic_string<C>& s) + { + base () = s; + return *this; + } + + /** + * @brief Copy assignment operator. + * + * @param x An instance to assign. + * @return A reference to the instance. + */ + language& + operator= (const language& x) + { + base () = x; + return *this; + } + + protected: + //@cond + + language () + : base_type () + { + } + + //@endcond + }; + + + //@cond + + template <typename C, typename ncname> + struct identity_impl: identity + { + identity_impl (const ncname& id) + : id_ (id) + { + } + + virtual bool + before (const identity& y) const; + + virtual void + throw_duplicate_id () const; + + private: + const ncname& id_; + }; + + //@endcond + + + /** + * @brief Class corresponding to the XML Schema ID built-in + * type. + * + * The %id class publicly inherits from and has the same set + * of constructors as @c std::basic_string. It therefore can be + * used as @c std::string (or @c std::wstring if you are using + * @c wchar_t as the character type). + * + * @nosubgrouping + */ + template <typename C, typename B> + class id: public B + { + typedef B base_type; + + base_type& + base () + { + return *this; + } + + public: + ~id() + { + unregister_id (); + } + + public: + /** + * @name Constructors + */ + //@{ + + /** + * @brief Initialize an instance with a copy of a C %string. + * + * @param s A C %string to copy. + */ + id (const C* s) + : base_type (s), identity_ (*this) + { + register_id (); + } + + /** + * @brief Initialize an instance with a character array. + * + * @param s A character array to copy. + * @param n A number of character to copy. + */ + id (const C* s, std::size_t n) + : base_type (s, n), identity_ (*this) + { + register_id (); + } + + /** + * @brief Initialize an instance with multiple copies of the same + * character. + * + * @param n A number of copies to create. + * @param c A character to copy. + */ + id (std::size_t n, C c) + : base_type (n, c), identity_ (*this) + { + register_id (); + } + + /** + * @brief Initialize an instance with a copy of a standard %string. + * + * @param s A standard %string to copy. + */ + id (const std::basic_string<C>& s) + : base_type (s), identity_ (*this) + { + register_id (); + } + + /** + * @brief Initialize an instance with a copy of a substring. + * + * @param s A standard %string to copy the substring from. + * @param pos An index of the first character to copy from. + * @param n A number of characters to copy. + */ + id (const std::basic_string<C>& s, + std::size_t pos, + std::size_t n = std::basic_string<C>::npos) + : base_type (s, pos, n), identity_ (*this) + { + register_id (); + } + + public: + /** + * @brief Copy constructor. + * + * @param x An instance to make a copy of. + * @param f Flags to create the copy with. + * @param c A pointer to the object that will contain the copy. + * + * For polymorphic object models use the @c _clone function instead. + */ + id (const id& x, flags f = 0, container* c = 0) + : base_type (x, f, c), identity_ (*this) + { + register_id (); + } + + /** + * @brief Copy the instance polymorphically. + * + * @param f Flags to create the copy with. + * @param c A pointer to the object that will contain the copy. + * @return A pointer to the dynamically allocated copy. + * + * This function ensures that the dynamic type of the instance + * is used for copying and should be used for polymorphic object + * models instead of the copy constructor. + */ + virtual id* + _clone (flags f = 0, container* c = 0) const; + + public: + /** + * @brief Create an instance from a data representation + * stream. + * + * @param s A stream to extract the data from. + * @param f Flags to create the new instance with. + * @param c A pointer to the object that will contain the new + * instance. + */ + template <typename S> + id (istream<S>& s, flags f = 0, container* c = 0); + + /** + * @brief Create an instance from a DOM element. + * + * @param e A DOM element to extract the data from. + * @param f Flags to create the new instance with. + * @param c A pointer to the object that will contain the new + * instance. + */ + id (const xercesc::DOMElement& e, flags f = 0, container* c = 0); + + /** + * @brief Create an instance from a DOM Attribute. + * + * @param a A DOM attribute to extract the data from. + * @param f Flags to create the new instance with. + * @param c A pointer to the object that will contain the new + * instance. + */ + id (const xercesc::DOMAttr& a, flags f = 0, container* c = 0); + + /** + * @brief Create an instance from a %string fragment. + * + * @param s A %string fragment to extract the data from. + * @param e A pointer to DOM element containing the %string fragment. + * @param f Flags to create the new instance with. + * @param c A pointer to the object that will contain the new + * instance. + */ + id (const std::basic_string<C>& s, + const xercesc::DOMElement* e, + flags f = 0, + container* c = 0); + //@} + + public: + /** + * @brief Assign a character to the instance. + * + * The resulting %id has only one character. + * + * @param c A character to assign. + * @return A reference to the instance. + */ + id& + operator= (C c); + + + /** + * @brief Assign a C %string to the instance. + * + * The resulting %id contains a copy of the C %string. + * + * @param s A C %string to assign. + * @return A reference to the instance. + */ + id& + operator= (const C* s); + + /** + * @brief Assign a standard %string to the instance. + * + * The resulting %id contains a copy of the standard %string. + * + * @param s A standard %string to assign. + * @return A reference to the instance. + */ + id& + operator= (const std::basic_string<C>& s); + + /** + * @brief Copy assignment operator. + * + * @param x An instance to assign. + * @return A reference to the instance. + */ + id& + operator= (const id& x); + + public: + //@cond + + virtual void + _container (container*); + + // The above override also hides other _container versions. We + // also cannot do using-declarations because of bugs in HP aCC3. + // + const container* + _container () const + { + return B::_container (); + } + + container* + _container () + { + return B::_container (); + } + + //@endcond + + protected: + //@cond + + id () + : base_type (), identity_ (*this) + { + register_id (); + } + + //@endcond + + private: + void + register_id (); + + void + unregister_id (); + + private: + identity_impl<C, B> identity_; + }; + + + /** + * @brief Class corresponding to the XML Schema IDREF built-in + * type. + * + * The %idref class publicly inherits from and has the same set + * of constructors as @c std::basic_string. It therefore can be + * used as @c std::string (or @c std::wstring if you are using + * @c wchar_t as the character type). + * + * The %idref class also provides an autopointer-like interface + * for resolving referenced objects. By default the object is + * returned as type (mapping for anyType) but statically-typed + * %idref can be created using the XML Schema extension. See the + * C++/Tree Mapping User Manual for more information. + * + * @nosubgrouping + */ + template <typename C, typename B, typename T> + class idref: public B + { + typedef B base_type; + + base_type& + base () + { + return *this; + } + + public: + /** + * @brief Referenced type. + */ + typedef T ref_type; + + public: + /** + * @name Constructors + */ + //@{ + + /** + * @brief Initialize an instance with a copy of a C %string. + * + * @param s A C %string to copy. + */ + idref (const C* s) + : base_type (s), identity_ (*this) + { + } + + /** + * @brief Initialize an instance with a character array. + * + * @param s A character array to copy. + * @param n A number of character to copy. + */ + idref (const C* s, std::size_t n) + : base_type (s, n), identity_ (*this) + { + } + + /** + * @brief Initialize an instance with multiple copies of the same + * character. + * + * @param n A number of copies to create. + * @param c A character to copy. + */ + idref (std::size_t n, C c) + : base_type (n, c), identity_ (*this) + { + } + + /** + * @brief Initialize an instance with a copy of a standard %string. + * + * @param s A standard %string to copy. + */ + idref (const std::basic_string<C>& s) + : base_type (s), identity_ (*this) + { + } + + /** + * @brief Initialize an instance with a copy of a substring. + * + * @param s A standard %string to copy the substring from. + * @param pos An index of the first character to copy from. + * @param n A number of characters to copy. + */ + idref (const std::basic_string<C>& s, + std::size_t pos, + std::size_t n = std::basic_string<C>::npos) + : base_type (s, pos, n), identity_ (*this) + { + } + + public: + /** + * @brief Copy constructor. + * + * @param x An instance to make a copy of. + * @param f Flags to create the copy with. + * @param c A pointer to the object that will contain the copy. + * + * For polymorphic object models use the @c _clone function instead. + */ + idref (const idref& x, flags f = 0, container* c = 0) + : base_type (x, f, c), identity_ (*this) + { + } + + /** + * @brief Copy the instance polymorphically. + * + * @param f Flags to create the copy with. + * @param c A pointer to the object that will contain the copy. + * @return A pointer to the dynamically allocated copy. + * + * This function ensures that the dynamic type of the instance + * is used for copying and should be used for polymorphic object + * models instead of the copy constructor. + */ + virtual idref* + _clone (flags f = 0, container* c = 0) const; + + public: + /** + * @brief Create an instance from a data representation + * stream. + * + * @param s A stream to extract the data from. + * @param f Flags to create the new instance with. + * @param c A pointer to the object that will contain the new + * instance. + */ + template <typename S> + idref (istream<S>& s, flags f = 0, container* c = 0); + + /** + * @brief Create an instance from a DOM element. + * + * @param e A DOM element to extract the data from. + * @param f Flags to create the new instance with. + * @param c A pointer to the object that will contain the new + * instance. + */ + idref (const xercesc::DOMElement& e, flags f = 0, container* c = 0); + + /** + * @brief Create an instance from a DOM Attribute. + * + * @param a A DOM attribute to extract the data from. + * @param f Flags to create the new instance with. + * @param c A pointer to the object that will contain the new + * instance. + */ + idref (const xercesc::DOMAttr& a, flags f = 0, container* c = 0); + + /** + * @brief Create an instance from a %string fragment. + * + * @param s A %string fragment to extract the data from. + * @param e A pointer to DOM element containing the %string fragment. + * @param f Flags to create the new instance with. + * @param c A pointer to the object that will contain the new + * instance. + */ + idref (const std::basic_string<C>& s, + const xercesc::DOMElement* e, + flags f = 0, + container* c = 0); + //@} + + public: + /** + * @brief Assign a character to the instance. + * + * The resulting %idref has only one character. + * + * @param c A character to assign. + * @return A reference to the instance. + */ + idref& + operator= (C c) + { + base () = c; + return *this; + } + + /** + * @brief Assign a C %string to the instance. + * + * The resulting %idref contains a copy of the C %string. + * + * @param s A C %string to assign. + * @return A reference to the instance. + */ + idref& + operator= (const C* s) + { + base () = s; + return *this; + } + + /** + * @brief Assign a standard %string to the instance. + * + * The resulting %idref contains a copy of the standard %string. + * + * @param s A standard %string to assign. + * @return A reference to the instance. + */ + idref& + operator= (const std::basic_string<C>& s) + { + base () = s; + return *this; + } + + /** + * @brief Copy assignment operator. + * + * @param x An instance to assign. + * @return A reference to the instance. + */ + idref& + operator= (const idref& x) + { + base () = x; + return *this; + } + + public: + /** + * @brief Call referenced object. + * + * @return A constant pointer to the referenced object. + */ + const ref_type* + operator-> () const + { + return get (); + } + + /** + * @brief Call referenced object. + * + * @return A pointer to the referenced object. + */ + ref_type* + operator-> () + { + return get (); + } + + /** + * @brief Dereference referenced object. + * + * @return A constant C++ reference to the referenced object. + */ + const ref_type& + operator* () const + { + return *(get ()); + } + + /** + * @brief Dereference referenced object. + * + * @return A C++ reference to the referenced object. + */ + ref_type& + operator* () + { + return *(get ()); + } + + /** + * @brief Get a constant pointer to the referenced object. + * + * @return A constant pointer to the referenced object or 0 if + * the object is not found. + */ + const ref_type* + get () const + { + return dynamic_cast<const ref_type*> (get_ ()); + } + + /** + * @brief Get a pointer to the referenced object. + * + * @return A pointer to the referenced object or 0 if the object + * is not found. + */ + ref_type* + get () + { + return dynamic_cast<ref_type*> (get_ ()); + } + + /** + * @brief Opaque type that can be evaluated as true or false. + */ + typedef void (idref::*bool_convertible)(); + + /** + * @brief Implicit conversion to boolean type. + * + * @return True if the referenced object is found, false otherwise. + */ + operator bool_convertible () const + { + return get_ () ? &idref::true_ : 0; + } + + protected: + //@cond + + idref () + : base_type (), identity_ (*this) + { + } + + //@endcond + + private: + const _type* + get_ () const; + + _type* + get_ (); + + void + true_ (); + + private: + identity_impl<C, B> identity_; + }; + + + /** + * @brief Class corresponding to the XML Schema IDREFS built-in + * type. + * + * The %idrefs class is a vector (or %list in XML Schema terminology) + * of idref elements. It is implemented in terms of the list class + * template. + * + * @nosubgrouping + */ + template <typename C, typename B, typename idref> + class idrefs: public B, public list<idref, C> + { + typedef list<idref, C> base_type; + + public: + /** + * @name Constructors + */ + //@{ + + /** + * @brief Default constructor creates no elements. + */ + idrefs () + : base_type (0, this) + { + } + + /** + * @brief Initialize the instance with copies of an exemplar elements. + * + * @param n A number of elements to copy. + * @param x An exemplar element to copy. + */ + idrefs (typename base_type::size_type n, const idref& x) + : base_type (n, x, this) + { + } + + /** + * @brief Initialize the instance with copies of elements from an + * iterator range. + * + * @param begin An iterator pointing to the first element. + * @param end An iterator pointing to the one past the last element. + */ + template <typename I> + idrefs (const I& begin, const I& end) + : base_type (begin, end, this) + { + } + + public: + /** + * @brief Copy constructor. + * + * @param x An instance to make a copy of. + * @param f Flags to create the copy with. + * @param c A pointer to the object that will contain the copy. + * + * For polymorphic object models use the @c _clone function instead. + */ + idrefs (const idrefs& x, flags f = 0, container* c = 0) + : B (x, f, c), base_type (x, f, this) + { + } + + /** + * @brief Copy the instance polymorphically. + * + * @param f Flags to create the copy with. + * @param c A pointer to the object that will contain the copy. + * @return A pointer to the dynamically allocated copy. + * + * This function ensures that the dynamic type of the instance + * is used for copying and should be used for polymorphic object + * models instead of the copy constructor. + */ + virtual idrefs* + _clone (flags f = 0, container* c = 0) const; + + public: + /** + * @brief Create an instance from a data representation + * stream. + * + * @param s A stream to extract the data from. + * @param f Flags to create the new instance with. + * @param c A pointer to the object that will contain the new + * instance. + */ + template <typename S> + idrefs (istream<S>& s, flags f = 0, container* c = 0); + + /** + * @brief Create an instance from a DOM element. + * + * @param e A DOM element to extract the data from. + * @param f Flags to create the new instance with. + * @param c A pointer to the object that will contain the new + * instance. + */ + idrefs (const xercesc::DOMElement& e, flags f = 0, container* c = 0); + + /** + * @brief Create an instance from a DOM Attribute. + * + * @param a A DOM attribute to extract the data from. + * @param f Flags to create the new instance with. + * @param c A pointer to the object that will contain the new + * instance. + */ + idrefs (const xercesc::DOMAttr& a, flags f = 0, container* c = 0); + + /** + * @brief Create an instance from a %string fragment. + * + * @param s A %string fragment to extract the data from. + * @param e A pointer to DOM element containing the %string fragment. + * @param f Flags to create the new instance with. + * @param c A pointer to the object that will contain the new + * instance. + */ + idrefs (const std::basic_string<C>& s, + const xercesc::DOMElement* e, + flags f = 0, + container* c = 0); + //@} + }; + + + /** + * @brief Class corresponding to the XML Schema anyURI built-in + * type. + * + * The %uri class publicly inherits from and has the same set + * of constructors as @c std::basic_string. It therefore can be + * used as @c std::string (or @c std::wstring if you are using + * @c wchar_t as the character type). + * + * @nosubgrouping + */ + template <typename C, typename B> + class uri: public B, public std::basic_string<C> + { + typedef std::basic_string<C> base_type; + + base_type& + base () + { + return *this; + } + + public: + /** + * @name Constructors + */ + //@{ + + /** + * @brief Initialize an instance with a copy of a C %string. + * + * @param s A C %string to copy. + */ + uri (const C* s) + : base_type (s) + { + } + + /** + * @brief Initialize an instance with a character array. + * + * @param s A character array to copy. + * @param n A number of character to copy. + */ + uri (const C* s, std::size_t n) + : base_type (s, n) + { + } + + /** + * @brief Initialize an instance with multiple copies of the same + * character. + * + * @param n A number of copies to create. + * @param c A character to copy. + */ + uri (std::size_t n, C c) + : base_type (n, c) + { + } + + /** + * @brief Initialize an instance with a copy of a standard %string. + * + * @param s A standard %string to copy. + */ + uri (const std::basic_string<C>& s) + : base_type (s) + { + } + + /** + * @brief Initialize an instance with a copy of a substring. + * + * @param s A standard %string to copy the substring from. + * @param pos An index of the first character to copy from. + * @param n A number of characters to copy. + */ + uri (const std::basic_string<C>& s, + std::size_t pos, + std::size_t n = std::basic_string<C>::npos) + : base_type (s, pos, n) + { + } + + public: + /** + * @brief Copy constructor. + * + * @param x An instance to make a copy of. + * @param f Flags to create the copy with. + * @param c A pointer to the object that will contain the copy. + * + * For polymorphic object models use the @c _clone function instead. + */ + uri (const uri& x, flags f = 0, container* c = 0) + : B (x, f, c), base_type (x) + { + } + + /** + * @brief Copy the instance polymorphically. + * + * @param f Flags to create the copy with. + * @param c A pointer to the object that will contain the copy. + * @return A pointer to the dynamically allocated copy. + * + * This function ensures that the dynamic type of the instance + * is used for copying and should be used for polymorphic object + * models instead of the copy constructor. + */ + virtual uri* + _clone (flags f = 0, container* c = 0) const; + + public: + /** + * @brief Create an instance from a data representation + * stream. + * + * @param s A stream to extract the data from. + * @param f Flags to create the new instance with. + * @param c A pointer to the object that will contain the new + * instance. + */ + template <typename S> + uri (istream<S>& s, flags f = 0, container* c = 0); + + /** + * @brief Create an instance from a DOM element. + * + * @param e A DOM element to extract the data from. + * @param f Flags to create the new instance with. + * @param c A pointer to the object that will contain the new + * instance. + */ + uri (const xercesc::DOMElement& e, flags f = 0, container* c = 0); + + /** + * @brief Create an instance from a DOM Attribute. + * + * @param a A DOM attribute to extract the data from. + * @param f Flags to create the new instance with. + * @param c A pointer to the object that will contain the new + * instance. + */ + uri (const xercesc::DOMAttr& a, flags f = 0, container* c = 0); + + /** + * @brief Create an instance from a %string fragment. + * + * @param s A %string fragment to extract the data from. + * @param e A pointer to DOM element containing the %string fragment. + * @param f Flags to create the new instance with. + * @param c A pointer to the object that will contain the new + * instance. + */ + uri (const std::basic_string<C>& s, + const xercesc::DOMElement* e, + flags f = 0, + container* c = 0); + //@} + + public: + /** + * @brief Assign a character to the instance. + * + * The resulting %uri has only one character. + * + * @param c A character to assign. + * @return A reference to the instance. + */ + uri& + operator= (C c) + { + base () = c; + return *this; + } + + /** + * @brief Assign a C %string to the instance. + * + * The resulting %uri contains a copy of the C %string. + * + * @param s A C %string to assign. + * @return A reference to the instance. + */ + uri& + operator= (const C* s) + { + base () = s; + return *this; + } + + /** + * @brief Assign a standard %string to the instance. + * + * The resulting %uri contains a copy of the standard %string. + * + * @param s A standard %string to assign. + * @return A reference to the instance. + */ + uri& + operator= (const std::basic_string<C>& s) + { + base () = s; + return *this; + } + + /** + * @brief Copy assignment operator. + * + * @param x An instance to assign. + * @return A reference to the instance. + */ + uri& + operator= (const uri& x) + { + base () = x; + return *this; + } + + protected: + //@cond + + uri () + : base_type () + { + } + + //@endcond + + template <typename, typename, typename, typename> + friend class qname; + }; + + + /** + * @brief Class corresponding to the XML Schema QName built-in + * type. + * + * The %qname class represents a potentially namespace-qualified + * XML %name. + * + * @nosubgrouping + */ + template <typename C, typename B, typename uri, typename ncname> + class qname: public B + { + public: + /** + * @name Constructors + */ + //@{ + + /** + * @brief Initialize an instance with a %name only. + * + * The resulting %qname is unqualified. + * + * @param n An XML %name (ncname). + */ + qname (const ncname& n) + : ns_ (), name_ (n) + { + } + + /** + * @brief Initialize an instance with a %name and a namespace. + * + * The resulting %qname is qualified. + * + * @param ns An XML namespace (uri). + * @param n An XML %name (ncname). + */ + qname (const uri& ns, const ncname& n) + : ns_ (ns), name_ (n) + { + } + + public: + /** + * @brief Copy constructor. + * + * @param x An instance to make a copy of. + * @param f Flags to create the copy with. + * @param c A pointer to the object that will contain the copy. + * + * For polymorphic object models use the @c _clone function instead. + */ + qname (const qname& x, flags f = 0, container* c = 0) + : B (x, f, c), + ns_ (x.ns_), + name_ (x.name_) + { + // Note that ns_ and name_ have no DOM association. + // + } + + /** + * @brief Copy the instance polymorphically. + * + * @param f Flags to create the copy with. + * @param c A pointer to the object that will contain the copy. + * @return A pointer to the dynamically allocated copy. + * + * This function ensures that the dynamic type of the instance + * is used for copying and should be used for polymorphic object + * models instead of the copy constructor. + */ + virtual qname* + _clone (flags f = 0, container* c = 0) const; + + public: + /** + * @brief Create an instance from a data representation + * stream. + * + * @param s A stream to extract the data from. + * @param f Flags to create the new instance with. + * @param c A pointer to the object that will contain the new + * instance. + */ + template <typename S> + qname (istream<S>& s, flags f = 0, container* c = 0); + + /** + * @brief Create an instance from a DOM element. + * + * @param e A DOM element to extract the data from. + * @param f Flags to create the new instance with. + * @param c A pointer to the object that will contain the new + * instance. + */ + qname (const xercesc::DOMElement& e, flags f = 0, container* c = 0); + + /** + * @brief Create an instance from a DOM Attribute. + * + * @param a A DOM attribute to extract the data from. + * @param f Flags to create the new instance with. + * @param c A pointer to the object that will contain the new + * instance. + */ + qname (const xercesc::DOMAttr& a, flags f = 0, container* c = 0); + + /** + * @brief Create an instance from a %string fragment. + * + * @param s A %string fragment to extract the data from. + * @param e A pointer to DOM element containing the %string fragment. + * @param f Flags to create the new instance with. + * @param c A pointer to the object that will contain the new + * instance. + */ + qname (const std::basic_string<C>& s, + const xercesc::DOMElement* e, + flags f = 0, + container* c = 0); + //@} + + public: + /** + * @brief Determine if the %name is qualified. + * + * @return True if the %name is qualified, false otherwise. + */ + bool + qualified () const + { + return !ns_.empty (); + } + + /** + * @brief Get XML namespace. + * + * @return A constant reference to qualifying XML namespace. + */ + const uri& + namespace_ () const + { + return ns_; + } + + /** + * @brief Get XML %name. + * + * @return A constant reference to unqualified XML %name. + */ + const ncname& + name () const + { + return name_; + } + + protected: + //@cond + + qname () + : ns_ (), name_ () + { + } + + //@endcond + + private: + static uri + resolve (const std::basic_string<C>&, const xercesc::DOMElement*); + + private: + uri ns_; + ncname name_; + }; + + /** + * @brief %qname comparison operator. + * + * @return True if the names are equal, false otherwise. + */ + template <typename C, typename B, typename uri, typename ncname> + inline bool + operator== (const qname<C, B, uri, ncname>& a, + const qname<C, B, uri, ncname>& b) + { + return a.name () == b.name () && a.namespace_ () == b.namespace_ (); + } + + /** + * @brief %qname comparison operator. + * + * @return True if the names are not equal, false otherwise. + */ + template <typename C, typename B, typename uri, typename ncname> + inline bool + operator!= (const qname<C, B, uri, ncname>& a, + const qname<C, B, uri, ncname>& b) + { + return !(a == b); + } + + + /** + * @brief Class corresponding to the XML Schema base64Binary + * built-in type. + * + * The %base64_binary class is a binary %buffer abstraction with + * base64-encoded representation in XML. It publicly inherits from + * the buffer class which provides the %buffer functionality. + * + * @nosubgrouping + */ + template <typename C, typename B> + class base64_binary: public B, public buffer<C> + { + public: + typedef typename buffer<C>::size_t size_t; + + public: + /** + * @name Constructors + */ + //@{ + + /** + * @brief Allocate a %buffer of the specified size. + * + * The resulting %buffer has the same size and capacity. + * + * @param size A %buffer size in bytes. + */ + explicit + base64_binary (size_t size = 0); + + /** + * @brief Allocate a %buffer of the specified size and capacity. + * + * @param size A %buffer size in bytes. + * @param capacity A %buffer capacity in bytes. + * @throw bounds If @a size exceeds @a capacity + */ + base64_binary (size_t size, size_t capacity); + + /** + * @brief Allocate a %buffer of the specified size and copy + * the data. + * + * The resulting %buffer has the same size and capacity with + * @a size bytes copied from @a data. + * + * @param data A %buffer to copy the data from. + * @param size A %buffer size in bytes. + */ + base64_binary (const void* data, size_t size); + + /** + * @brief Allocate a %buffer of the specified size and capacity + * and copy the data. + * + * @a size bytes are copied from @a data to the resulting + * %buffer. + * + * @param data A %buffer to copy the data from. + * @param size A %buffer size in bytes. + * @param capacity A %buffer capacity in bytes. + * @throw bounds If @a size exceeds @a capacity + */ + base64_binary (const void* data, size_t size, size_t capacity); + + /** + * @brief Reuse an existing %buffer. + * + * If the @a assume_ownership argument is true, the %buffer will + * assume ownership of @a data and will release the memory + * by calling @c operator @c delete(). + * + * @param data A %buffer to reuse. + * @param size A %buffer size in bytes. + * @param capacity A %buffer capacity in bytes. + * @param assume_ownership A boolean value indication whether to + * assume ownership. + * @throw bounds If @a size exceeds @a capacity + */ + base64_binary (void* data, + size_t size, + size_t capacity, + bool assume_ownership); + public: + /** + * @brief Copy constructor. + * + * @param x An instance to make a copy of. + * @param f Flags to create the copy with. + * @param c A pointer to the object that will contain the copy. + * + * For polymorphic object models use the @c _clone function instead. + */ + base64_binary (const base64_binary& x, + flags f = 0, + container* c = 0) + : B (x, f, c), buffer<C> (x) + { + } + + /** + * @brief Copy the instance polymorphically. + * + * @param f Flags to create the copy with. + * @param c A pointer to the object that will contain the copy. + * @return A pointer to the dynamically allocated copy. + * + * This function ensures that the dynamic type of the instance + * is used for copying and should be used for polymorphic object + * models instead of the copy constructor. + */ + virtual base64_binary* + _clone (flags f = 0, container* c = 0) const; + + public: + /** + * @brief Create an instance from a data representation + * stream. + * + * @param s A stream to extract the data from. + * @param f Flags to create the new instance with. + * @param c A pointer to the object that will contain the new + * instance. + */ + template <typename S> + base64_binary (istream<S>& s, flags f = 0, container* c = 0); + + /** + * @brief Create an instance from a DOM element. + * + * @param e A DOM element to extract the data from. + * @param f Flags to create the new instance with. + * @param c A pointer to the object that will contain the new + * instance. + */ + base64_binary (const xercesc::DOMElement& e, + flags f = 0, + container* c = 0); + + /** + * @brief Create an instance from a DOM Attribute. + * + * @param a A DOM attribute to extract the data from. + * @param f Flags to create the new instance with. + * @param c A pointer to the object that will contain the new + * instance. + */ + base64_binary (const xercesc::DOMAttr& a, flags f = 0, container* c = 0); + + /** + * @brief Create an instance from a %string fragment. + * + * @param s A %string fragment to extract the data from. + * @param e A pointer to DOM element containing the %string fragment. + * @param f Flags to create the new instance with. + * @param c A pointer to the object that will contain the new + * instance. + */ + base64_binary (const std::basic_string<C>& s, + const xercesc::DOMElement* e, + flags f = 0, + container* c = 0); + //@} + + public: + /** + * @brief Copy assignment operator. + * + * @param x An instance to assign. + * @return A reference to the instance. + */ + base64_binary& + operator= (const base64_binary& x) + { + buffer<C>& b (*this); + b = x; + return *this; + } + + public: + /** + * @brief Encode the %buffer in base64 encoding. + * + * @return A %string with base64-encoded data. + */ + std::basic_string<C> + encode () const; + + private: + void + decode (const XMLCh*); + }; + + + /** + * @brief Class corresponding to the XML Schema hexBinary + * built-in type. + * + * The %hex_binary class is a binary %buffer abstraction with + * hex-encoded representation in XML. It publicly inherits from + * the buffer class which provides the %buffer functionality. + * + * @nosubgrouping + */ + template <typename C, typename B> + class hex_binary: public B, public buffer<C> + { + public: + typedef typename buffer<C>::size_t size_t; + + public: + /** + * @name Constructors + */ + //@{ + + /** + * @brief Allocate a %buffer of the specified size. + * + * The resulting %buffer has the same size and capacity. + * + * @param size A %buffer size in bytes. + */ + explicit + hex_binary (size_t size = 0); + + /** + * @brief Allocate a %buffer of the specified size and capacity. + * + * @param size A %buffer size in bytes. + * @param capacity A %buffer capacity in bytes. + * @throw bounds If @a size exceeds @a capacity + */ + hex_binary (size_t size, size_t capacity); + + /** + * @brief Allocate a %buffer of the specified size and copy + * the data. + * + * The resulting %buffer has the same size and capacity with + * @a size bytes copied from @a data. + * + * @param data A %buffer to copy the data from. + * @param size A %buffer size in bytes. + */ + hex_binary (const void* data, size_t size); + + /** + * @brief Allocate a %buffer of the specified size and capacity + * and copy the data. + * + * @a size bytes are copied from @a data to the resulting + * %buffer. + * + * @param data A %buffer to copy the data from. + * @param size A %buffer size in bytes. + * @param capacity A %buffer capacity in bytes. + * @throw bounds If @a size exceeds @a capacity + */ + hex_binary (const void* data, size_t size, size_t capacity); + + /** + * @brief Reuse an existing %buffer.. + * + * If the @a assume_ownership argument is true, the %buffer will + * assume ownership of @a data and will release the memory + * by calling @c operator @c delete(). + * + * @param data A %buffer to reuse. + * @param size A %buffer size in bytes. + * @param capacity A %buffer capacity in bytes. + * @param assume_ownership A boolean value indication whether to + * assume ownership. + * @throw bounds If @a size exceeds @a capacity + */ + hex_binary (void* data, + size_t size, + size_t capacity, + bool assume_ownership); + + public: + /** + * @brief Copy constructor. + * + * @param x An instance to make a copy of. + * @param f Flags to create the copy with. + * @param c A pointer to the object that will contain the copy. + * + * For polymorphic object models use the @c _clone function instead. + */ + hex_binary (const hex_binary& x, flags f = 0, container* c = 0) + : B (x, f, c), buffer<C> (x) + { + } + + /** + * @brief Copy the instance polymorphically. + * + * @param f Flags to create the copy with. + * @param c A pointer to the object that will contain the copy. + * @return A pointer to the dynamically allocated copy. + * + * This function ensures that the dynamic type of the instance + * is used for copying and should be used for polymorphic object + * models instead of the copy constructor. + */ + virtual hex_binary* + _clone (flags f = 0, container* c = 0) const; + + public: + /** + * @brief Create an instance from a data representation + * stream. + * + * @param s A stream to extract the data from. + * @param f Flags to create the new instance with. + * @param c A pointer to the object that will contain the new + * instance. + */ + template <typename S> + hex_binary (istream<S>& s, flags f = 0, container* c = 0); + + /** + * @brief Create an instance from a DOM element. + * + * @param e A DOM element to extract the data from. + * @param f Flags to create the new instance with. + * @param c A pointer to the object that will contain the new + * instance. + */ + hex_binary (const xercesc::DOMElement& e, flags f = 0, container* c = 0); + + /** + * @brief Create an instance from a DOM Attribute. + * + * @param a A DOM attribute to extract the data from. + * @param f Flags to create the new instance with. + * @param c A pointer to the object that will contain the new + * instance. + */ + hex_binary (const xercesc::DOMAttr& a, flags f = 0, container* c = 0); + + /** + * @brief Create an instance from a %string fragment. + * + * @param s A %string fragment to extract the data from. + * @param e A pointer to DOM element containing the %string fragment. + * @param f Flags to create the new instance with. + * @param c A pointer to the object that will contain the new + * instance. + */ + hex_binary (const std::basic_string<C>& s, + const xercesc::DOMElement* e, + flags f = 0, + container* c = 0); + //@} + + public: + /** + * @brief Copy assignment operator. + * + * @param x An instance to assign. + * @return A reference to the instance. + */ + hex_binary& + operator= (const hex_binary& x) + { + buffer<C>& b (*this); + b = x; + return *this; + } + + public: + /** + * @brief Encode the %buffer in hex encoding. + * + * @return A %string with hex-encoded data. + */ + std::basic_string<C> + encode () const; + + private: + void + decode (const XMLCh*); + }; + + + /** + * @brief Class corresponding to the XML Schema ENTITY built-in + * type. + * + * The %entity class publicly inherits from and has the same set + * of constructors as @c std::basic_string. It therefore can be + * used as @c std::string (or @c std::wstring if you are using + * @c wchar_t as the character type). + * + * @nosubgrouping + */ + template <typename C, typename B> + class entity: public B + { + typedef B base_type; + + base_type& + base () + { + return *this; + } + + public: + /** + * @name Constructors + */ + //@{ + + /** + * @brief Initialize an instance with a copy of a C %string. + * + * @param s A C %string to copy. + */ + entity (const C* s) + : base_type (s) + { + } + + /** + * @brief Initialize an instance with a character array. + * + * @param s A character array to copy. + * @param n A number of character to copy. + */ + entity (const C* s, std::size_t n) + : base_type (s, n) + { + } + + /** + * @brief Initialize an instance with multiple copies of the same + * character. + * + * @param n A number of copies to create. + * @param c A character to copy. + */ + entity (std::size_t n, C c) + : base_type (n, c) + { + } + + /** + * @brief Initialize an instance with a copy of a standard %string. + * + * @param s A standard %string to copy. + */ + entity (const std::basic_string<C>& s) + : base_type (s) + { + } + + /** + * @brief Initialize an instance with a copy of a substring. + * + * @param s A standard %string to copy the substring from. + * @param pos An index of the first character to copy from. + * @param n A number of characters to copy. + */ + entity (const std::basic_string<C>& s, + std::size_t pos, + std::size_t n = std::basic_string<C>::npos) + : base_type (s, pos, n) + { + } + + public: + /** + * @brief Copy constructor. + * + * @param x An instance to make a copy of. + * @param f Flags to create the copy with. + * @param c A pointer to the object that will contain the copy. + * + * For polymorphic object models use the @c _clone function instead. + */ + entity (const entity& x, flags f = 0, container* c = 0) + : base_type (x, f, c) + { + } + + /** + * @brief Copy the instance polymorphically. + * + * @param f Flags to create the copy with. + * @param c A pointer to the object that will contain the copy. + * @return A pointer to the dynamically allocated copy. + * + * This function ensures that the dynamic type of the instance + * is used for copying and should be used for polymorphic object + * models instead of the copy constructor. + */ + virtual entity* + _clone (flags f = 0, container* c = 0) const; + + public: + /** + * @brief Create an instance from a data representation + * stream. + * + * @param s A stream to extract the data from. + * @param f Flags to create the new instance with. + * @param c A pointer to the object that will contain the new + * instance. + */ + template <typename S> + entity (istream<S>& s, flags f = 0, container* c = 0); + + /** + * @brief Create an instance from a DOM element. + * + * @param e A DOM element to extract the data from. + * @param f Flags to create the new instance with. + * @param c A pointer to the object that will contain the new + * instance. + */ + entity (const xercesc::DOMElement& e, flags f = 0, container* c = 0); + + /** + * @brief Create an instance from a DOM Attribute. + * + * @param a A DOM attribute to extract the data from. + * @param f Flags to create the new instance with. + * @param c A pointer to the object that will contain the new + * instance. + */ + entity (const xercesc::DOMAttr& a, flags f = 0, container* c = 0); + + /** + * @brief Create an instance from a %string fragment. + * + * @param s A %string fragment to extract the data from. + * @param e A pointer to DOM element containing the %string fragment. + * @param f Flags to create the new instance with. + * @param c A pointer to the object that will contain the new + * instance. + */ + entity (const std::basic_string<C>& s, + const xercesc::DOMElement* e, + flags f = 0, + container* c = 0); + //@} + + public: + /** + * @brief Assign a character to the instance. + * + * The resulting %entity has only one character. + * + * @param c A character to assign. + * @return A reference to the instance. + */ + entity& + operator= (C c) + { + base () = c; + return *this; + } + + /** + * @brief Assign a C %string to the instance. + * + * The resulting %entity contains a copy of the C %string. + * + * @param s A C %string to assign. + * @return A reference to the instance. + */ + entity& + operator= (const C* s) + { + base () = s; + return *this; + } + + /** + * @brief Assign a standard %string to the instance. + * + * The resulting %entity contains a copy of the standard %string. + * + * @param s A standard %string to assign. + * @return A reference to the instance. + */ + entity& + operator= (const std::basic_string<C>& s) + { + base () = s; + return *this; + } + + /** + * @brief Copy assignment operator. + * + * @param x An instance to assign. + * @return A reference to the instance. + */ + entity& + operator= (const entity& x) + { + base () = x; + return *this; + } + + protected: + //@cond + + entity () + : base_type () + { + } + + //@endcond + }; + + + /** + * @brief Class corresponding to the XML Schema ENTITIES built-in + * type. + * + * The %entities class is a vector (or %list in XML Schema terminology) + * of entity elements. It is implemented in terms of the list class + * template. + * + * @nosubgrouping + */ + template <typename C, typename B, typename entity> + class entities: public B, public list<entity, C> + { + typedef list<entity, C> base_type; + + public: + /** + * @name Constructors + */ + //@{ + + /** + * @brief Default constructor creates no elements. + */ + entities () + : base_type (0, this) + { + } + + /** + * @brief Initialize the instance with copies of an exemplar elements. + * + * @param n A number of elements to copy. + * @param x An exemplar element to copy. + */ + entities (typename base_type::size_type n, const entity& x) + : base_type (n, x, this) + { + } + + /** + * @brief Initialize the instance with copies of elements from an + * iterator range. + * + * @param begin An iterator pointing to the first element. + * @param end An iterator pointing to the one past the last element. + */ + template <typename I> + entities (const I& begin, const I& end) + : base_type (begin, end, this) + { + } + + public: + /** + * @brief Copy constructor. + * + * @param x An instance to make a copy of. + * @param f Flags to create the copy with. + * @param c A pointer to the object that will contain the copy. + * + * For polymorphic object models use the @c _clone function instead. + */ + entities (const entities& x, flags f = 0, container* c = 0) + : B (x, f, c), base_type (x, f, this) + { + } + + /** + * @brief Copy the instance polymorphically. + * + * @param f Flags to create the copy with. + * @param c A pointer to the object that will contain the copy. + * @return A pointer to the dynamically allocated copy. + * + * This function ensures that the dynamic type of the instance + * is used for copying and should be used for polymorphic object + * models instead of the copy constructor. + */ + virtual entities* + _clone (flags f = 0, container* c = 0) const; + + public: + /** + * @brief Create an instance from a data representation + * stream. + * + * @param s A stream to extract the data from. + * @param f Flags to create the new instance with. + * @param c A pointer to the object that will contain the new + * instance. + */ + template <typename S> + entities (istream<S>& s, flags f = 0, container* c = 0); + + /** + * @brief Create an instance from a DOM element. + * + * @param e A DOM element to extract the data from. + * @param f Flags to create the new instance with. + * @param c A pointer to the object that will contain the new + * instance. + */ + entities (const xercesc::DOMElement& e, flags f = 0, container* c = 0); + + /** + * @brief Create an instance from a DOM Attribute. + * + * @param a A DOM attribute to extract the data from. + * @param f Flags to create the new instance with. + * @param c A pointer to the object that will contain the new + * instance. + */ + entities (const xercesc::DOMAttr& a, flags f = 0, container* c = 0); + + /** + * @brief Create an instance from a %string fragment. + * + * @param s A %string fragment to extract the data from. + * @param e A pointer to DOM element containing the %string fragment. + * @param f Flags to create the new instance with. + * @param c A pointer to the object that will contain the new + * instance. + */ + entities (const std::basic_string<C>& s, + const xercesc::DOMElement* e, + flags f = 0, + container* c = 0); + //@} + }; + } + } +} + +#include <xsd/cxx/tree/types.txx> + +#endif // XSD_CXX_TREE_TYPES_HXX diff --git a/xsd/libxsd/xsd/cxx/tree/types.txx b/xsd/libxsd/xsd/cxx/tree/types.txx new file mode 100644 index 0000000..8d6d79f --- /dev/null +++ b/xsd/libxsd/xsd/cxx/tree/types.txx @@ -0,0 +1,598 @@ +// file : xsd/cxx/tree/types.txx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <xercesc/util/Base64.hpp> +#include <xercesc/util/XMLString.hpp> +#include <xercesc/util/XercesVersion.hpp> + +#include <xsd/cxx/auto-array.hxx> + +#include <xsd/cxx/xml/std-memory-manager.hxx> + +namespace xsd +{ + namespace cxx + { + namespace tree + { + + // string + // + template <typename C, typename B> + string<C, B>* string<C, B>:: + _clone (flags f, container* c) const + { + return new string (*this, f, c); + } + + + // normalized_string + // + template <typename C, typename B> + normalized_string<C, B>* normalized_string<C, B>:: + _clone (flags f, container* c) const + { + return new normalized_string (*this, f, c); + } + + + // token + // + template <typename C, typename B> + token<C, B>* token<C, B>:: + _clone (flags f, container* c) const + { + return new token (*this, f, c); + } + + + // nmtoken + // + template <typename C, typename B> + nmtoken<C, B>* nmtoken<C, B>:: + _clone (flags f, container* c) const + { + return new nmtoken (*this, f, c); + } + + + // nmtokens + // + template <typename C, typename B, typename nmtoken> + nmtokens<C, B, nmtoken>* nmtokens<C, B, nmtoken>:: + _clone (flags f, container* c) const + { + return new nmtokens (*this, f, c); + } + + + // name + // + template <typename C, typename B> + name<C, B>* name<C, B>:: + _clone (flags f, container* c) const + { + return new name (*this, f, c); + } + + + // ncname + // + template <typename C, typename B> + ncname<C, B>* ncname<C, B>:: + _clone (flags f, container* c) const + { + return new ncname (*this, f, c); + } + + + // language + // + template <typename C, typename B> + language<C, B>* language<C, B>:: + _clone (flags f, container* c) const + { + return new language (*this, f, c); + } + + + // identity_impl + // + template <typename C, typename ncname> + bool identity_impl<C, ncname>:: + before (const identity& y) const + { + return id_ < static_cast<const identity_impl&> (y).id_; + } + + template <typename C, typename ncname> + void identity_impl<C, ncname>:: + throw_duplicate_id () const + { + throw duplicate_id<C> (id_); + } + + + // id + // + template <typename C, typename B> + id<C, B>* id<C, B>:: + _clone (flags f, container* c) const + { + return new id (*this, f, c); + } + + template <typename C, typename B> + id<C, B>& id<C, B>:: + operator= (C c) + { + unregister_id (); + base () = c; + register_id (); + + return *this; + } + + template <typename C, typename B> + id<C, B>& id<C, B>:: + operator= (const C* s) + { + unregister_id (); + base () = s; + register_id (); + + return *this; + } + + template <typename C, typename B> + id<C, B>& id<C, B>:: + operator= (const std::basic_string<C>& s) + { + unregister_id (); + base () = s; + register_id (); + + return *this; + } + + template <typename C, typename B> + id<C, B>& id<C, B>:: + operator= (const id& x) + { + unregister_id (); + base () = x; + register_id (); + + return *this; + } + + // It would have been cleaner to mention empty and _container + // with the using-declaration but HP aCC3 can't handle it in + // some non-trivial to track down cases. So we are going to use + // the old-n-ugly this-> techniques. + // + template <typename C, typename B> + void id<C, B>:: + _container (container* c) + { + B::_container (c); + register_id (); + } + + template <typename C, typename B> + void id<C, B>:: + register_id () + { + container* r (this->_root ()); + + if (r != 0 && !this->empty ()) + r->_register_id (identity_, this->_container ()); + } + + template <typename C, typename B> + void id<C, B>:: + unregister_id () + { + container* r (this->_root ()); + + if (r != 0 && !this->empty ()) + r->_unregister_id (identity_); + } + + + // idref + // + template <typename C, typename B, typename T> + idref<C, B, T>* idref<C, B, T>:: + _clone (flags f, container* c) const + { + return new idref (*this, f, c); + } + + // It would have been cleaner to mention empty, _root, etc. with + // the using-declaration but HP aCC3 can't handle it in some + // non-trivial to track down cases. So we are going to use the + // old-n-ugly this-> techniques. + // + template <typename C, typename B, typename T> + const _type* idref<C, B, T>:: + get_ () const + { + if (!this->empty () && this->_container () != 0) + { + return this->_root ()->_lookup_id (identity_); + } + else + return 0; + } + + template <typename C, typename B, typename T> + _type* idref<C, B, T>:: + get_ () + { + if (!this->empty () && this->_container () != 0) + { + return this->_root ()->_lookup_id (identity_); + } + else + return 0; + } + + template <typename C, typename B, typename T> + void idref<C, B, T>:: + true_ () + { + } + + + // idrefs + // + template <typename C, typename B, typename idref> + idrefs<C, B, idref>* idrefs<C, B, idref>:: + _clone (flags f, container* c) const + { + return new idrefs (*this, f, c); + } + + + // uri + // + template <typename C, typename B> + uri<C, B>* uri<C, B>:: + _clone (flags f, container* c) const + { + return new uri (*this, f, c); + } + + + // qname + // + template <typename C, typename B, typename uri, typename ncname> + qname<C, B, uri, ncname>* qname<C, B, uri, ncname>:: + _clone (flags f, container* c) const + { + return new qname (*this, f, c); + } + + + // base64_binary + // + template <typename C, typename B> + base64_binary<C, B>:: + base64_binary (size_t size) + : buffer<C> (size) + { + } + + template <typename C, typename B> + base64_binary<C, B>:: + base64_binary (size_t size, size_t capacity) + : buffer<C> (size, capacity) + { + } + + template <typename C, typename B> + base64_binary<C, B>:: + base64_binary (const void* data, size_t size) + : buffer<C> (data, size) + { + } + + template <typename C, typename B> + base64_binary<C, B>:: + base64_binary (const void* data, size_t size, size_t capacity) + : buffer<C> (data, size, capacity) + { + } + + template <typename C, typename B> + base64_binary<C, B>:: + base64_binary (void* data, size_t size, size_t capacity, bool own) + : buffer<C> (data, size, capacity, own) + { + } + + template <typename C, typename B> + base64_binary<C, B>* base64_binary<C, B>:: + _clone (flags f, container* c) const + { + return new base64_binary (*this, f, c); + } + + // It would have been cleaner to mention size, and data with the + // using-declaration but HP aCC3 can't handle it in some non- + // trivial to track down cases. So we are going to use the + // old-n- ugly this-> techniques. + // + template <typename C, typename B> + std::basic_string<C> base64_binary<C, B>:: + encode () const + { + // HP aCC3 cannot handle using namespace xercesc; + // + using xercesc::Base64; + std::basic_string<C> str; + +#if _XERCES_VERSION >= 30000 + XMLSize_t n; + + xml::std_memory_manager mm; + auto_array<XMLByte, xml::std_memory_manager> r ( + Base64::encode ( + reinterpret_cast<const XMLByte*> (this->data ()), + static_cast<XMLSize_t> (this->size ()), + &n, + &mm), + mm); + + if (r) + { + str.reserve (n + 1); + str.resize (n); + + for (XMLSize_t i (0); i < n; ++i) + str[i] = C (r[i]); + } + else + { + //@@ throw + } +#else + unsigned int n; + + xml::std_memory_manager mm; + auto_array<XMLByte, xml::std_memory_manager> r ( + Base64::encode ( + reinterpret_cast<const XMLByte*> (this->data ()), + static_cast<unsigned int> (this->size ()), + &n, + &mm), + mm); + + if (r) + { + str.reserve (n + 1); + str.resize (n); + + for (unsigned int i (0); i < n; ++i) + str[i] = C (r[i]); + } + else + { + //@@ throw + } +#endif + + return str; + } + + template <typename C, typename B> + void base64_binary<C, B>:: + decode (const XMLCh* src) + { + // HP aCC3 cannot handle using namespace xercesc; + // + using xercesc::Base64; + + xml::std_memory_manager mm; + + // Xerces 2.6.0 and earlier do not have decodeToXMLByte which + // makes my life harder and your code slower. + // +#if _XERCES_VERSION >= 20700 + +#if _XERCES_VERSION >= 30000 + XMLSize_t size; + auto_array<XMLByte, xml::std_memory_manager> data ( + Base64::decodeToXMLByte (src, &size, &mm, Base64::Conf_RFC2045), + mm); +#else + unsigned int size; + auto_array<XMLByte, xml::std_memory_manager> data ( + Base64::decodeToXMLByte (src, &size, &mm, Base64::Conf_RFC2045), + mm); +#endif // _XERCES_VERSION >= 30000 + + if (data) + { + buffer<C> tmp (data.get (), size, size, true); + data.release (); + this->swap (tmp); // g++ 4.1 likes it qualified, not sure why. + } + else + { + //@@ throw + } +#else + unsigned int size; + +#if _XERCES_VERSION >= 20600 // Xerces 2.5.0 does not have Conf_RFC2045. + auto_array<XMLCh, xml::std_memory_manager> data ( + Base64::decode (src, &size, &mm, Base64::Conf_RFC2045), + mm); +#else + auto_array<XMLCh, xml::std_memory_manager> data ( + Base64::decode (src, &size, &mm), mm); +#endif // _XERCES_VERSION >= 20600 + + if (data) + { + buffer<C> tmp (size); + for (unsigned int i (0); i < size; ++i) + tmp.data ()[i] = static_cast<char> (data[i]); + this->swap (tmp); // g++ 4.1 likes it qualified, not sure why. + } + else + { + //@@ throw + } +#endif //_XERCES_VERSION >= 20700 + } + + + // hex_binary + // + template <typename C, typename B> + hex_binary<C, B>:: + hex_binary (size_t size) + : buffer<C> (size) + { + } + + template <typename C, typename B> + hex_binary<C, B>:: + hex_binary (size_t size, size_t capacity) + : buffer<C> (size, capacity) + { + } + + template <typename C, typename B> + hex_binary<C, B>:: + hex_binary (const void* data, size_t size) + : buffer<C> (data, size) + { + } + + template <typename C, typename B> + hex_binary<C, B>:: + hex_binary (const void* data, size_t size, size_t capacity) + : buffer<C> (data, size, capacity) + { + } + + template <typename C, typename B> + hex_binary<C, B>:: + hex_binary (void* data, size_t size, size_t capacity, bool own) + : buffer<C> (data, size, capacity, own) + { + } + + template <typename C, typename B> + hex_binary<C, B>* hex_binary<C, B>:: + _clone (flags f, container* c) const + { + return new hex_binary (*this, f, c); + } + + // It would have been cleaner to mention size, and data with the + // using-declaration but HP aCC3 can't handle it in some non- + // trivial to track down cases. So we are going to use the + // old-n-ugly this-> techniques. + // + template <typename C, typename B> + std::basic_string<C> hex_binary<C, B>:: + encode () const + { + std::basic_string<C> str; + + const char tab[] = "0123456789ABCDEF"; + + if (size_t n = this->size ()) + { + str.reserve (2 * n + 1); + str.resize (2 * n); + + for (size_t i (0); i < n; ++i) + { + unsigned char byte ( + static_cast<unsigned char> (*(this->data () + i))); + unsigned char h (byte >> 4); + unsigned char l (byte & 0x0F); + + str[2 * i] = C (tab[h]); + str[2 * i + 1] = C (tab[l]); + } + } + + return str; + } + + namespace bits + { + inline unsigned char + hex_decode (XMLCh c) + { + unsigned char r (0xFF); + + if (c >= '0' && c <= '9') + r = static_cast<unsigned char> (c - '0'); + else if (c >= 'A' && c <= 'F') + r = static_cast<unsigned char> (10 + (c - 'A')); + else if (c >= 'a' && c <= 'f') + r = static_cast<unsigned char> (10 + (c - 'a')); + + return r; + } + } + + template <typename C, typename B> + void hex_binary<C, B>:: + decode (const XMLCh* src) + { + size_t src_n (xercesc::XMLString::stringLen (src)); + + if (src_n % 2 != 0) + return; // @@ throw + + size_t n (src_n / 2); + + buffer<C> tmp (n); + + for (size_t i (0); i < n; ++i) + { + unsigned char h (bits::hex_decode (src[2 * i])); + unsigned char l (bits::hex_decode (src[2 * i + 1])); + + if (h == 0xFF || l == 0xFF) + return; //@@ throw + + tmp.data()[i] = (h << 4) | l; + } + + this->swap (tmp); // g++ 4.1 likes it qualified, not sure why. + } + + + // entity + // + template <typename C, typename B> + entity<C, B>* entity<C, B>:: + _clone (flags f, container* c) const + { + return new entity (*this, f, c); + } + + + // entities + // + template <typename C, typename B, typename entity> + entities<C, B, entity>* entities<C, B, entity>:: + _clone (flags f, container* c) const + { + return new entities (*this, f, c); + } + } + } +} diff --git a/xsd/libxsd/xsd/cxx/tree/xdr-stream-common.hxx b/xsd/libxsd/xsd/cxx/tree/xdr-stream-common.hxx new file mode 100644 index 0000000..ebc3d22 --- /dev/null +++ b/xsd/libxsd/xsd/cxx/tree/xdr-stream-common.hxx @@ -0,0 +1,26 @@ +// file : xsd/cxx/tree/xdr-stream-common.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_CXX_TREE_XDR_STREAM_COMMON_HXX +#define XSD_CXX_TREE_XDR_STREAM_COMMON_HXX + +#include <xsd/cxx/exceptions.hxx> + +namespace xsd +{ + namespace cxx + { + namespace tree + { + // Base exception for XDR insertion/extraction exceptions. + // + struct xdr_stream_operation: xsd::cxx::exception + { + }; + } + } +} + +#endif // XSD_CXX_TREE_XDR_STREAM_COMMON_HXX diff --git a/xsd/libxsd/xsd/cxx/tree/xdr-stream-extraction.hxx b/xsd/libxsd/xsd/cxx/tree/xdr-stream-extraction.hxx new file mode 100644 index 0000000..012c1e4 --- /dev/null +++ b/xsd/libxsd/xsd/cxx/tree/xdr-stream-extraction.hxx @@ -0,0 +1,295 @@ +// file : xsd/cxx/tree/xdr-stream-extraction.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_CXX_TREE_XDR_STREAM_EXTRACTION_HXX +#define XSD_CXX_TREE_XDR_STREAM_EXTRACTION_HXX + +#include <rpc/types.h> +#include <rpc/xdr.h> + +#include <string> + +#include <xsd/cxx/tree/buffer.hxx> +#include <xsd/cxx/tree/istream.hxx> +#include <xsd/cxx/tree/xdr-stream-common.hxx> + +namespace xsd +{ + namespace cxx + { + namespace tree + { + struct xdr_stream_extraction: xdr_stream_operation + { + virtual const char* + what () const throw () + { + return "XDR stream extraction operation failed"; + } + }; + + + // as_size + // +#ifdef XSD_CXX_TREE_USE_64_BIT_SIZE + template <typename T> + inline istream<XDR>& + operator>> (istream<XDR>& s, istream<XDR>::as_size<T>& x) + { + uint64_t v; + + if (!xdr_uint64_t (&s.impl (), &v) || v > ~(T (0))) + throw xdr_stream_extraction (); + + x.x_ = static_cast<T> (v); + + return s; + } +#else + template <typename T> + inline istream<XDR>& + operator>> (istream<XDR>& s, istream<XDR>::as_size<T>& x) + { + uint32_t v; + + if (!xdr_uint32_t (&s.impl (), &v)) + throw xdr_stream_extraction (); + + x.x_ = static_cast<T> (v); + + return s; + } +#endif + + + // 8-bit + // + template <typename T> + inline istream<XDR>& + operator>> (istream<XDR>& s, istream<XDR>::as_int8<T>& x) + { + int8_t v; + + if (!xdr_int8_t (&s.impl (), &v)) + throw xdr_stream_extraction (); + + x.x_ = static_cast<T> (v); + + return s; + } + + template <typename T> + inline istream<XDR>& + operator>> (istream<XDR>& s, istream<XDR>::as_uint8<T>& x) + { + uint8_t v; + + if (!xdr_uint8_t (&s.impl (), &v)) + throw xdr_stream_extraction (); + + x.x_ = static_cast<T> (v); + + return s; + } + + + // 16-bit + // + template <typename T> + inline istream<XDR>& + operator>> (istream<XDR>& s, istream<XDR>::as_int16<T>& x) + { + int16_t v; + + if (!xdr_int16_t (&s.impl (), &v)) + throw xdr_stream_extraction (); + + x.x_ = static_cast<T> (v); + + return s; + } + + template <typename T> + inline istream<XDR>& + operator>> (istream<XDR>& s, istream<XDR>::as_uint16<T>& x) + { + uint16_t v; + + if (!xdr_uint16_t (&s.impl (), &v)) + throw xdr_stream_extraction (); + + x.x_ = static_cast<T> (v); + + return s; + } + + + // 32-bit + // + template <typename T> + inline istream<XDR>& + operator>> (istream<XDR>& s, istream<XDR>::as_int32<T>& x) + { + int32_t v; + + if (!xdr_int32_t (&s.impl (), &v)) + throw xdr_stream_extraction (); + + x.x_ = static_cast<T> (v); + + return s; + } + + template <typename T> + inline istream<XDR>& + operator>> (istream<XDR>& s, istream<XDR>::as_uint32<T>& x) + { + uint32_t v; + + if (!xdr_uint32_t (&s.impl (), &v)) + throw xdr_stream_extraction (); + + x.x_ = static_cast<T> (v); + + return s; + } + + + // 64-bit + // + template <typename T> + inline istream<XDR>& + operator>> (istream<XDR>& s, istream<XDR>::as_int64<T>& x) + { + int64_t v; + + if (!xdr_int64_t (&s.impl (), &v)) + throw xdr_stream_extraction (); + + x.x_ = static_cast<T> (v); + + return s; + } + + template <typename T> + inline istream<XDR>& + operator>> (istream<XDR>& s, istream<XDR>::as_uint64<T>& x) + { + uint64_t v; + + if (!xdr_uint64_t (&s.impl (), &v)) + throw xdr_stream_extraction (); + + x.x_ = static_cast<T> (v); + + return s; + } + + + // Boolean + // + template <typename T> + inline istream<XDR>& + operator>> (istream<XDR>& s, istream<XDR>::as_bool<T>& x) + { + bool_t v; + + if (!xdr_bool (&s.impl (), &v)) + throw xdr_stream_extraction (); + + x.x_ = static_cast<T> (v); + + return s; + } + + + // Floating-point + // + template <typename T> + inline istream<XDR>& + operator>> (istream<XDR>& s, istream<XDR>::as_float32<T>& x) + { + float v; + + if (!xdr_float (&s.impl (), &v)) + throw xdr_stream_extraction (); + + x.x_ = static_cast<T> (v); + + return s; + } + + template <typename T> + inline istream<XDR>& + operator>> (istream<XDR>& s, istream<XDR>::as_float64<T>& x) + { + double v; + + if (!xdr_double (&s.impl (), &v)) + throw xdr_stream_extraction (); + + x.x_ = static_cast<T> (v); + + return s; + } + + // Extraction of std::basic_string. + // + + inline istream<XDR>& + operator>> (istream<XDR>& s, std::basic_string<char>& x) + { + unsigned int n; + + if (!xdr_u_int (&s.impl (), &n)) + throw xdr_stream_extraction (); + + // Dangerous but fast. + // + x.clear (); + + if (n != 0) + { + x.resize (n); + char* p (const_cast<char*> (x.c_str ())); + + if (!xdr_opaque (&s.impl (), p, n)) + throw xdr_stream_extraction (); + } + + return s; + } + + // Wide strings are not supported by XDR. + // + // inline istream<XDR>& + // operator>> (istream<XDR>& s, std::basic_string<wchar_t>& x) + // { + // } + + + // Extraction of a binary buffer. + // + template <typename C> + istream<XDR>& + operator>> (istream<XDR>& s, buffer<C>& x) + { + unsigned int n; + + if (!xdr_u_int (&s.impl (), &n)) + throw xdr_stream_extraction (); + + x.size (n); + + if (!xdr_opaque (&s.impl (), x.data (), n)) + throw xdr_stream_extraction (); + + return s; + } + } + } +} + +#endif // XSD_CXX_TREE_XDR_STREAM_EXTRACTION_HXX diff --git a/xsd/libxsd/xsd/cxx/tree/xdr-stream-insertion.hxx b/xsd/libxsd/xsd/cxx/tree/xdr-stream-insertion.hxx new file mode 100644 index 0000000..00031d2 --- /dev/null +++ b/xsd/libxsd/xsd/cxx/tree/xdr-stream-insertion.hxx @@ -0,0 +1,259 @@ +// file : xsd/cxx/tree/xdr-stream-insertion.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_CXX_TREE_XDR_STREAM_INSERTION_HXX +#define XSD_CXX_TREE_XDR_STREAM_INSERTION_HXX + +#include <rpc/types.h> +#include <rpc/xdr.h> + +#include <string> + +#include <xsd/cxx/tree/buffer.hxx> +#include <xsd/cxx/tree/ostream.hxx> +#include <xsd/cxx/tree/xdr-stream-common.hxx> + +namespace xsd +{ + namespace cxx + { + namespace tree + { + struct xdr_stream_insertion: xdr_stream_operation + { + virtual const char* + what () const throw () + { + return "XDR stream insertion operation failed"; + } + }; + + // as_size + // +#ifdef XSD_CXX_TREE_USE_64_BIT_SIZE + template <typename T> + inline ostream<XDR>& + operator<< (ostream<XDR>& s, ostream<XDR>::as_size<T> x) + { + uint64_t v (static_cast<uint64_t> (x.x_)); + + if (!xdr_uint64_t (&s.impl (), &v)) + throw xdr_stream_insertion (); + + return s; + } +#else + template <typename T> + inline ostream<XDR>& + operator<< (ostream<XDR>& s, ostream<XDR>::as_size<T> x) + { + uint32_t v (static_cast<uint32_t> (x.x_)); + + if (x.x_ > ~(uint32_t (0)) || !xdr_uint32_t (&s.impl (), &v)) + throw xdr_stream_insertion (); + + return s; + } +#endif + + + // 8-bit + // + template <typename T> + inline ostream<XDR>& + operator<< (ostream<XDR>& s, ostream<XDR>::as_int8<T> x) + { + int8_t v (static_cast<int8_t> (x.x_)); + + if (!xdr_int8_t (&s.impl (), &v)) + throw xdr_stream_insertion (); + + return s; + } + + template <typename T> + inline ostream<XDR>& + operator<< (ostream<XDR>& s, ostream<XDR>::as_uint8<T> x) + { + uint8_t v (static_cast<uint8_t> (x.x_)); + + if (!xdr_uint8_t (&s.impl (), &v)) + throw xdr_stream_insertion (); + + return s; + } + + + // 16-bit + // + template <typename T> + inline ostream<XDR>& + operator<< (ostream<XDR>& s, ostream<XDR>::as_int16<T> x) + { + int16_t v (static_cast<int16_t> (x.x_)); + + if (!xdr_int16_t (&s.impl (), &v)) + throw xdr_stream_insertion (); + + return s; + } + + template <typename T> + inline ostream<XDR>& + operator<< (ostream<XDR>& s, ostream<XDR>::as_uint16<T> x) + { + uint16_t v (static_cast<uint16_t> (x.x_)); + + if (!xdr_uint16_t (&s.impl (), &v)) + throw xdr_stream_insertion (); + + return s; + } + + + // 32-bit + // + template <typename T> + inline ostream<XDR>& + operator<< (ostream<XDR>& s, ostream<XDR>::as_int32<T> x) + { + int32_t v (static_cast<int32_t> (x.x_)); + + if (!xdr_int32_t (&s.impl (), &v)) + throw xdr_stream_insertion (); + + return s; + } + + template <typename T> + inline ostream<XDR>& + operator<< (ostream<XDR>& s, ostream<XDR>::as_uint32<T> x) + { + uint32_t v (static_cast<uint32_t> (x.x_)); + + if (!xdr_uint32_t (&s.impl (), &v)) + throw xdr_stream_insertion (); + + return s; + } + + + // 64-bit + // + template <typename T> + inline ostream<XDR>& + operator<< (ostream<XDR>& s, ostream<XDR>::as_int64<T> x) + { + int64_t v (static_cast<int64_t> (x.x_)); + + if (!xdr_int64_t (&s.impl (), &v)) + throw xdr_stream_insertion (); + + return s; + } + + template <typename T> + inline ostream<XDR>& + operator<< (ostream<XDR>& s, ostream<XDR>::as_uint64<T> x) + { + uint64_t v (static_cast<uint64_t> (x.x_)); + + if (!xdr_uint64_t (&s.impl (), &v)) + throw xdr_stream_insertion (); + + return s; + } + + + // Boolean + // + template <typename T> + inline ostream<XDR>& + operator<< (ostream<XDR>& s, ostream<XDR>::as_bool<T> x) + { + bool_t v (static_cast<bool_t> (x.x_)); + + if (!xdr_bool (&s.impl (), &v)) + throw xdr_stream_insertion (); + + return s; + } + + + // Floating-point + // + template <typename T> + inline ostream<XDR>& + operator<< (ostream<XDR>& s, ostream<XDR>::as_float32<T> x) + { + float v (static_cast<float> (x.x_)); + + if (!xdr_float (&s.impl (), &v)) + throw xdr_stream_insertion (); + + return s; + } + + template <typename T> + inline ostream<XDR>& + operator<< (ostream<XDR>& s, ostream<XDR>::as_float64<T> x) + { + double v (static_cast<double> (x.x_)); + + if (!xdr_double (&s.impl (), &v)) + throw xdr_stream_insertion (); + + return s; + } + + // Insertion of std::basic_string. + // + + inline ostream<XDR>& + operator<< (ostream<XDR>& s, const std::basic_string<char>& x) + { + // XDR strings are hard-wired with a 32 bit (unsigned int) length. + // + char* p (const_cast<char*> (x.c_str ())); + unsigned int n (static_cast<unsigned int> (x.length ())); + + if (x.length () > ~((unsigned int) 0) || + !xdr_u_int (&s.impl (), &n) || + !xdr_opaque (&s.impl (), p, n)) + throw xdr_stream_insertion (); + + return s; + } + + // Wide strings are not supported by XDR. + // + // inline ostream<XDR>& + // operator<< (ostream<XDR>& s, const std::basic_string<wchar_t>& x) + // { + // } + + + // Insertion of a binary buffer. + // + template <typename C> + ostream<XDR>& + operator<< (ostream<XDR>& s, const buffer<C>& x) + { + // It is not possible to write an array with a 64-bit size. + // + unsigned int n (static_cast<unsigned int> (x.size ())); + + if (x.size () > ~((unsigned int) 0) || + !xdr_u_int (&s.impl (), &n) || + !xdr_opaque (&s.impl (), const_cast<char*> (x.data ()), n)) + throw xdr_stream_insertion (); + + return s; + } + } + } +} + +#endif // XSD_CXX_TREE_XDR_STREAM_INSERTION_HXX diff --git a/xsd/libxsd/xsd/cxx/version.hxx b/xsd/libxsd/xsd/cxx/version.hxx new file mode 100644 index 0000000..69bd1a1 --- /dev/null +++ b/xsd/libxsd/xsd/cxx/version.hxx @@ -0,0 +1,29 @@ +// file : xsd/cxx/version.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_CXX_VERSION_HXX +#define XSD_CXX_VERSION_HXX + +// Version format is AABBCCDD where +// +// AA - major version number +// BB - minor version number +// CC - bugfix version number +// DD - alpha / beta (DD + 50) version number +// +// When DD is not 00, 1 is subtracted from AABBCC. For example: +// +// Version AABBCCDD +// 2.0.0 02000000 +// 2.1.0 02010000 +// 2.1.1 02010100 +// 2.2.0.a1 02019901 +// 3.0.0.b2 02999952 +// + +#define XSD_STR_VERSION "3.3.0" +#define XSD_INT_VERSION 3030000L + +#endif // XSD_CXX_VERSION_HXX diff --git a/xsd/libxsd/xsd/cxx/xml/bits/literals.hxx b/xsd/libxsd/xsd/cxx/xml/bits/literals.hxx new file mode 100644 index 0000000..5b9fe99 --- /dev/null +++ b/xsd/libxsd/xsd/cxx/xml/bits/literals.hxx @@ -0,0 +1,83 @@ +// file : xsd/cxx/xml/bits/literals.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_CXX_XML_BITS_LITERALS_HXX +#define XSD_CXX_XML_BITS_LITERALS_HXX + +namespace xsd +{ + namespace cxx + { + namespace xml + { + namespace bits + { + template <typename C> + const C* + xml_prefix (); + + template <typename C> + const C* + xml_namespace (); + + template <typename C> + const C* + xmlns_prefix (); + + template <typename C> + const C* + xmlns_namespace (); + + template <typename C> + const C* + xsi_prefix (); + + template <typename C> + const C* + xsi_namespace (); + + template <typename C> + const C* + type (); + + template <typename C> + const C* + nil_lit (); + + template <typename C> + const C* + schema_location (); + + template <typename C> + const C* + no_namespace_schema_location (); + + template <typename C> + const C* + first_prefix (); + + template <typename C> + const C* + second_prefix (); + + template <typename C> + const C* + third_prefix (); + + template <typename C> + const C* + fourth_prefix (); + + template <typename C> + const C* + fifth_prefix (); + } + } + } +} + +#endif // XSD_CXX_XML_BITS_LITERALS_HXX + +#include <xsd/cxx/xml/bits/literals.ixx> diff --git a/xsd/libxsd/xsd/cxx/xml/bits/literals.ixx b/xsd/libxsd/xsd/cxx/xml/bits/literals.ixx new file mode 100644 index 0000000..f0ec6eb --- /dev/null +++ b/xsd/libxsd/xsd/cxx/xml/bits/literals.ixx @@ -0,0 +1,261 @@ +// file : xsd/cxx/xml/bits/literals.ixx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_CXX_XML_BITS_LITERALS_IXX +#define XSD_CXX_XML_BITS_LITERALS_IXX + +#endif // XSD_CXX_XML_BITS_LITERALS_IXX + + +#if defined(XSD_USE_CHAR) || !defined(XSD_USE_WCHAR) + +#ifndef XSD_CXX_XML_BITS_LITERALS_IXX_CHAR +#define XSD_CXX_XML_BITS_LITERALS_IXX_CHAR + +namespace xsd +{ + namespace cxx + { + namespace xml + { + namespace bits + { + template <> + inline const char* + xml_prefix<char> () + { + return "xml"; + } + + template <> + inline const char* + xml_namespace<char> () + { + return "http://www.w3.org/XML/1998/namespace"; + } + + template <> + inline const char* + xmlns_prefix<char> () + { + return "xmlns"; + } + + template <> + inline const char* + xmlns_namespace<char> () + { + return "http://www.w3.org/2000/xmlns/"; + } + + template <> + inline const char* + xsi_prefix<char> () + { + return "xsi"; + } + + template <> + inline const char* + xsi_namespace<char> () + { + return "http://www.w3.org/2001/XMLSchema-instance"; + } + + template <> + inline const char* + type<char> () + { + return "type"; + } + + template <> + inline const char* + nil_lit<char> () + { + return "nil"; + } + + template <> + inline const char* + schema_location<char> () + { + return "schemaLocation"; + } + + template <> + inline const char* + no_namespace_schema_location<char> () + { + return "noNamespaceSchemaLocation"; + } + + template <> + inline const char* + first_prefix<char> () + { + return "p1"; + } + + template <> + inline const char* + second_prefix<char> () + { + return "p2"; + } + + template <> + inline const char* + third_prefix<char> () + { + return "p3"; + } + + template <> + inline const char* + fourth_prefix<char> () + { + return "p4"; + } + + template <> + inline const char* + fifth_prefix<char> () + { + return "p5"; + } + } + } + } +} + +#endif // XSD_CXX_XML_BITS_LITERALS_IXX_CHAR +#endif // XSD_USE_CHAR + + +#if defined(XSD_USE_WCHAR) || !defined(XSD_USE_CHAR) + +#ifndef XSD_CXX_XML_BITS_LITERALS_IXX_WCHAR +#define XSD_CXX_XML_BITS_LITERALS_IXX_WCHAR + +namespace xsd +{ + namespace cxx + { + namespace xml + { + namespace bits + { + template <> + inline const wchar_t* + xml_prefix<wchar_t> () + { + return L"xml"; + } + + template <> + inline const wchar_t* + xml_namespace<wchar_t> () + { + return L"http://www.w3.org/XML/1998/namespace"; + } + + template <> + inline const wchar_t* + xmlns_prefix<wchar_t> () + { + return L"xmlns"; + } + + template <> + inline const wchar_t* + xmlns_namespace<wchar_t> () + { + return L"http://www.w3.org/2000/xmlns/"; + } + + template <> + inline const wchar_t* + xsi_prefix<wchar_t> () + { + return L"xsi"; + } + + template <> + inline const wchar_t* + xsi_namespace<wchar_t> () + { + return L"http://www.w3.org/2001/XMLSchema-instance"; + } + + template <> + inline const wchar_t* + type<wchar_t> () + { + return L"type"; + } + + template <> + inline const wchar_t* + nil_lit<wchar_t> () + { + return L"nil"; + } + + template <> + inline const wchar_t* + schema_location<wchar_t> () + { + return L"schemaLocation"; + } + + template <> + inline const wchar_t* + no_namespace_schema_location<wchar_t> () + { + return L"noNamespaceSchemaLocation"; + } + + template <> + inline const wchar_t* + first_prefix<wchar_t> () + { + return L"p1"; + } + + template <> + inline const wchar_t* + second_prefix<wchar_t> () + { + return L"p2"; + } + + template <> + inline const wchar_t* + third_prefix<wchar_t> () + { + return L"p3"; + } + + template <> + inline const wchar_t* + fourth_prefix<wchar_t> () + { + return L"p4"; + } + + template <> + inline const wchar_t* + fifth_prefix<wchar_t> () + { + return L"p5"; + } + } + } + } +} + +#endif // XSD_CXX_XML_BITS_LITERALS_IXX_WCHAR +#endif // XSD_USE_WCHAR diff --git a/xsd/libxsd/xsd/cxx/xml/char-iso8859-1.hxx b/xsd/libxsd/xsd/cxx/xml/char-iso8859-1.hxx new file mode 100644 index 0000000..c8ab507 --- /dev/null +++ b/xsd/libxsd/xsd/cxx/xml/char-iso8859-1.hxx @@ -0,0 +1,72 @@ +// file : xsd/cxx/xml/char-iso8859-1.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_CXX_XML_TRANSCODER +#define XSD_CXX_XML_TRANSCODER +#define XSD_CXX_XML_TRANSCODER_CHAR_ISO8859_1 + +#include <string> +#include <cstddef> // std::size_t + +#include <xercesc/util/XercesDefs.hpp> // XMLCh + +#include <xsd/cxx/xml/exceptions.hxx> // invalid_utf16_string + +namespace xsd +{ + namespace cxx + { + namespace xml + { + struct iso8859_1_unrepresentable {}; + + // UTF-16 to/from ISO-8859-1 transcoder. + // + template <typename C> + struct char_iso8859_1_transcoder + { + static std::basic_string<C> + to (const XMLCh* s, std::size_t length); + + static XMLCh* + from (const C* s, std::size_t length); + + // Get/set a replacement for unrepresentable characters. If set to + // 0 (the default value), throw iso8859_1_unrepresentable instead. + // + static C + unrep_char () + { + return unrep_char_; + } + + static void + unrep_char (C c) + { + unrep_char_ = c; + } + + private: + static C unrep_char_; + }; + + typedef char_iso8859_1_transcoder<char> char_transcoder; + } + } +} + +#include <xsd/cxx/xml/char-iso8859-1.txx> + +#else +# ifndef XSD_CXX_XML_TRANSCODER_CHAR_ISO8859_1 + // + // If you get this error, it usually means that either you compiled + // your schemas with different --char-encoding values or you included + // some of the libxsd headers (e.g., xsd/cxx/xml/string.hxx) directly + // without first including the correct xsd/cxx/xml/char-*.hxx header. + // +# error conflicting character encoding detected +# endif +#endif // XSD_CXX_XML_TRANSCODER diff --git a/xsd/libxsd/xsd/cxx/xml/char-iso8859-1.txx b/xsd/libxsd/xsd/cxx/xml/char-iso8859-1.txx new file mode 100644 index 0000000..cbf7cd8 --- /dev/null +++ b/xsd/libxsd/xsd/cxx/xml/char-iso8859-1.txx @@ -0,0 +1,101 @@ +// file : xsd/cxx/xml/char-iso8859-1.txx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <xsd/cxx/auto-array.hxx> + +namespace xsd +{ + namespace cxx + { + namespace xml + { + template <typename C> + C char_iso8859_1_transcoder<C>::unrep_char_ = 0; + + template <typename C> + std::basic_string<C> char_iso8859_1_transcoder<C>:: + to (const XMLCh* s, std::size_t len) + { + const XMLCh* end (s + len); + + // Find what the resulting buffer size will be. + // + std::size_t rl (0); + unsigned int u (0); // Four byte UCS-4 char. + + bool valid (true); + const XMLCh* p (s); + + for (; p < end; ++p) + { + if (*p >= 0xD800 && *p <= 0xDBFF) + { + // Make sure we have one more char and it has a valid + // value for the second char in a surrogate pair. + // + if (++p == end || !((*p >= 0xDC00) && (*p <= 0xDFFF))) + { + valid = false; + break; + } + } + + rl++; + } + + if (!valid) + throw invalid_utf16_string (); + + std::basic_string<C> r; + r.reserve (rl + 1); + r.resize (rl); + C* rs (const_cast<C*> (r.c_str ())); + std::size_t i (0); + + p = s; + + // Tight first loop for the common case. + // + for (; p < end && *p < 0x100; ++p) + rs[i++] = C (*p); + + if (p < end && unrep_char_ == 0) + throw iso8859_1_unrepresentable (); + + for (; p < end; ++p) + { + XMLCh x (*p); + + if ((x >= 0xD800) && (x <= 0xDBFF)) + { + u = ((x - 0xD800) << 10) + (*++p - 0xDC00) + 0x10000; + } + else + u = x; + + rs[i++] = u < 0x100 ? C (u) : unrep_char_; + } + + return r; + } + + template <typename C> + XMLCh* char_iso8859_1_transcoder<C>:: + from (const C* s, std::size_t len) + { + const C* end (s + len); + + auto_array<XMLCh> r (new XMLCh[len + 1]); + XMLCh* ir (r.get ()); + + for (const C* p (s); p < end; ++p) + *ir++ = static_cast<unsigned char> (*p); + + *ir = XMLCh (0); + return r.release (); + } + } + } +} diff --git a/xsd/libxsd/xsd/cxx/xml/char-lcp.hxx b/xsd/libxsd/xsd/cxx/xml/char-lcp.hxx new file mode 100644 index 0000000..c100bab --- /dev/null +++ b/xsd/libxsd/xsd/cxx/xml/char-lcp.hxx @@ -0,0 +1,56 @@ +// file : xsd/cxx/xml/char-lcp.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_CXX_XML_TRANSCODER +#define XSD_CXX_XML_TRANSCODER +#define XSD_CXX_XML_TRANSCODER_CHAR_LCP + +#include <string> +#include <cstddef> // std::size_t + +#include <xercesc/util/XercesDefs.hpp> // XMLCh + +namespace xsd +{ + namespace cxx + { + namespace xml + { + // UTF-16 to/from Xerces-C++ local code page (LCP) transcoder. + // + // Note that this transcoder has a custom interface due to Xerces-C++ + // idiosyncrasies. Don't use it as a base for your custom transcoder. + // + template <typename C> + struct char_lcp_transcoder + { + static std::basic_string<C> + to (const XMLCh* s); + + static std::basic_string<C> + to (const XMLCh* s, std::size_t length); + + static XMLCh* + from (const C* s); + }; + + typedef char_lcp_transcoder<char> char_transcoder; + } + } +} + +#include <xsd/cxx/xml/char-lcp.txx> + +#else +# ifndef XSD_CXX_XML_TRANSCODER_CHAR_LCP + // + // If you get this error, it usually means that either you compiled + // your schemas with different --char-encoding values or you included + // some of the libxsd headers (e.g., xsd/cxx/xml/string.hxx) directly + // without first including the correct xsd/cxx/xml/char-*.hxx header. + // +# error conflicting character encoding detected +# endif +#endif // XSD_CXX_XML_TRANSCODER diff --git a/xsd/libxsd/xsd/cxx/xml/char-lcp.txx b/xsd/libxsd/xsd/cxx/xml/char-lcp.txx new file mode 100644 index 0000000..4603537 --- /dev/null +++ b/xsd/libxsd/xsd/cxx/xml/char-lcp.txx @@ -0,0 +1,55 @@ +// file : xsd/cxx/xml/char-lcp.txx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <cstring> // std::memcpy + +#include <xercesc/util/XMLString.hpp> + +#include <xsd/cxx/auto-array.hxx> +#include <xsd/cxx/xml/std-memory-manager.hxx> + +namespace xsd +{ + namespace cxx + { + namespace xml + { + template <typename C> + std::basic_string<C> char_lcp_transcoder<C>:: + to (const XMLCh* s) + { + std_memory_manager mm; + auto_array<C, std_memory_manager> r ( + xercesc::XMLString::transcode (s, &mm), mm); + return std::basic_string<C> (r.get ()); + } + + template <typename C> + std::basic_string<C> char_lcp_transcoder<C>:: + to (const XMLCh* s, std::size_t len) + { + auto_array<XMLCh> tmp (new XMLCh[len + 1]); + std::memcpy (tmp.get (), s, len * sizeof (XMLCh)); + tmp[len] = XMLCh (0); + + std_memory_manager mm; + auto_array<C, std_memory_manager> r ( + xercesc::XMLString::transcode (tmp.get (), &mm), mm); + + tmp.reset (); + + return std::basic_string<C> (r.get ()); + } + + template <typename C> + XMLCh* char_lcp_transcoder<C>:: + from (const C* s) + { + std_memory_manager mm; + return xercesc::XMLString::transcode (s, &mm); + } + } + } +} diff --git a/xsd/libxsd/xsd/cxx/xml/char-utf8.hxx b/xsd/libxsd/xsd/cxx/xml/char-utf8.hxx new file mode 100644 index 0000000..719881b --- /dev/null +++ b/xsd/libxsd/xsd/cxx/xml/char-utf8.hxx @@ -0,0 +1,57 @@ +// file : xsd/cxx/xml/char-utf8.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_CXX_XML_TRANSCODER +#define XSD_CXX_XML_TRANSCODER +#define XSD_CXX_XML_TRANSCODER_CHAR_UTF8 + +#include <string> +#include <cstddef> // std::size_t + +#include <xercesc/util/XercesDefs.hpp> // XMLCh + +#include <xsd/cxx/xml/exceptions.hxx> // invalid_utf16_string + +namespace xsd +{ + namespace cxx + { + namespace xml + { + struct invalid_utf8_string {}; + + // UTF-16 to/from UTF-8 transcoder. + // + template <typename C> + struct char_utf8_transcoder + { + static std::basic_string<C> + to (const XMLCh* s, std::size_t length); + + static XMLCh* + from (const C* s, std::size_t length); + + private: + static const unsigned char first_byte_mask_[5]; + }; + + typedef char_utf8_transcoder<char> char_transcoder; + } + } +} + +#include <xsd/cxx/xml/char-utf8.txx> + +#else +# ifndef XSD_CXX_XML_TRANSCODER_CHAR_UTF8 + // + // If you get this error, it usually means that either you compiled + // your schemas with different --char-encoding values or you included + // some of the libxsd headers (e.g., xsd/cxx/xml/string.hxx) directly + // without first including the correct xsd/cxx/xml/char-*.hxx header. + // +# error conflicting character encoding detected +# endif +#endif // XSD_CXX_XML_TRANSCODER diff --git a/xsd/libxsd/xsd/cxx/xml/char-utf8.txx b/xsd/libxsd/xsd/cxx/xml/char-utf8.txx new file mode 100644 index 0000000..9935daf --- /dev/null +++ b/xsd/libxsd/xsd/cxx/xml/char-utf8.txx @@ -0,0 +1,293 @@ +// file : xsd/cxx/xml/char-utf8.txx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <xsd/cxx/auto-array.hxx> + +namespace xsd +{ + namespace cxx + { + namespace xml + { + template <typename C> + const unsigned char char_utf8_transcoder<C>::first_byte_mask_[5] = + { + 0x00, 0x00, 0xC0, 0xE0, 0xF0 + }; + + template <typename C> + std::basic_string<C> char_utf8_transcoder<C>:: + to (const XMLCh* s, std::size_t len) + { + const XMLCh* end (s + len); + + // Find what the resulting buffer size will be. + // + std::size_t rl (0); + unsigned int u (0); // Four byte UCS-4 char. + + bool valid (true); + const XMLCh* p (s); + + for (; p < end; ++p) + { + XMLCh x (*p); + + if (x < 0xD800 || x > 0xDBFF) + u = x; + else + { + // Make sure we have one more char and it has a valid + // value for the second char in a surrogate pair. + // + if (++p == end || !((*p >= 0xDC00) && (*p <= 0xDFFF))) + { + valid = false; + break; + } + + u = ((x - 0xD800) << 10) + (*p - 0xDC00) + 0x10000; + } + + if (u < 0x80) + rl++; + else if (u < 0x800) + rl += 2; + else if (u < 0x10000) + rl += 3; + else if (u < 0x110000) + rl += 4; + else + { + valid = false; + break; + } + } + + if (!valid) + throw invalid_utf16_string (); + + std::basic_string<C> r; + r.reserve (rl + 1); + r.resize (rl); + C* rs (const_cast<C*> (r.c_str ())); + + std::size_t i (0); + unsigned int count (0); + + p = s; + + // Tight first loop for the common case. + // + for (; p < end && *p < 0x80; ++p) + rs[i++] = C (*p); + + for (; p < end; ++p) + { + XMLCh x (*p); + + if ((x >= 0xD800) && (x <= 0xDBFF)) + { + u = ((x - 0xD800) << 10) + (*++p - 0xDC00) + 0x10000; + } + else + u = x; + + if (u < 0x80) + count = 1; + else if (u < 0x800) + count = 2; + else if (u < 0x10000) + count = 3; + else if (u < 0x110000) + count = 4; + + switch(count) + { + case 4: + { + rs[i + 3] = C ((u | 0x80UL) & 0xBFUL); + u >>= 6; + } + case 3: + { + rs[i + 2] = C ((u | 0x80UL) & 0xBFUL); + u >>= 6; + } + case 2: + { + rs[i + 1] = C ((u | 0x80UL) & 0xBFUL); + u >>= 6; + } + case 1: + { + rs[i] = C (u | first_byte_mask_[count]); + } + } + + i += count; + } + + return r; + } + + template <typename C> + XMLCh* char_utf8_transcoder<C>:: + from (const C* s, std::size_t len) + { + bool valid (true); + const C* end (s + len); + + // Find what the resulting buffer size will be. + // + std::size_t rl (0); + unsigned int count (0); + + for (const C* p (s); p < end; ++p) + { + unsigned char c (*p); + + if (c < 0x80) + { + // Fast path. + // + rl += 1; + continue; + } + else if ((c >> 5) == 0x06) + count = 2; + else if ((c >> 4) == 0x0E) + count = 3; + else if ((c >> 3) == 0x1E) + count = 4; + else + { + valid = false; + break; + } + + p += count - 1; // One will be added in the for loop + + if (p + 1 > end) + { + valid = false; + break; + } + + // BMP is represented by up to 3 code points in UTF-8. + // + rl += count > 3 ? 2 : 1; + } + + if (!valid) + throw invalid_utf8_string (); + + auto_array<XMLCh> r (new XMLCh[rl + 1]); + XMLCh* ir (r.get ()); + + unsigned int u (0); // Four byte UCS-4 char. + + for (const C* p (s); p < end; ++p) + { + unsigned char c (*p); + + if (c < 0x80) + { + // Fast path. + // + *ir++ = static_cast<XMLCh> (c); + continue; + } + else if ((c >> 5) == 0x06) + { + // UTF-8: 110yyyyy 10zzzzzz + // Unicode: 00000yyy yyzzzzzz + // + u = (c & 0x1F) << 6; + + c = *++p; + if ((c >> 6) != 2) + { + valid = false; + break; + } + u |= c & 0x3F; + } + else if ((c >> 4) == 0x0E) + { + // UTF-8: 1110xxxx 10yyyyyy 10zzzzzz + // Unicode: xxxxyyyy yyzzzzzz + // + u = (c & 0x0F) << 6; + + c = *++p; + if ((c >> 6) != 2) + { + valid = false; + break; + } + u = (u | (c & 0x3F)) << 6; + + c = *++p; + if ((c >> 6) != 2) + { + valid = false; + break; + } + u |= c & 0x3F; + } + else if ((c >> 3) == 0x1E) + { + // UTF-8: 000wwwxx xxxxyyyy yyzzzzzz + // Unicode: 11110www 10xxxxxx 10yyyyyy 10zzzzzz + // + u = (c & 0x07) << 6; + + c = *++p; + if ((c >> 6) != 2) + { + valid = false; + break; + } + u = (u | (c & 0x3F)) << 6; + + c = *++p; + if ((c >> 6) != 2) + { + valid = false; + break; + } + u = (u | (c & 0x3F)) << 6; + + c = *++p; + if ((c >> 6) != 2) + { + valid = false; + break; + } + u |= c & 0x3F; + } + + if (u & 0xFFFF0000) + { + // Surrogate pair. + // + *ir++ = static_cast<XMLCh> (((u - 0x10000) >> 10) + 0xD800); + *ir++ = static_cast<XMLCh> ((u & 0x3FF) + 0xDC00); + } + else + *ir++ = static_cast<XMLCh> (u); + } + + if (!valid) + throw invalid_utf8_string (); + + *ir = XMLCh (0); + + return r.release (); + } + } + } +} diff --git a/xsd/libxsd/xsd/cxx/xml/dom/auto-ptr.hxx b/xsd/libxsd/xsd/cxx/xml/dom/auto-ptr.hxx new file mode 100644 index 0000000..f22e652 --- /dev/null +++ b/xsd/libxsd/xsd/cxx/xml/dom/auto-ptr.hxx @@ -0,0 +1,158 @@ +// file : xsd/cxx/xml/dom/auto-ptr.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_CXX_XML_DOM_AUTO_PTR_HXX +#define XSD_CXX_XML_DOM_AUTO_PTR_HXX + +namespace xsd +{ + namespace cxx + { + namespace xml + { + namespace dom + { + // Simple auto_ptr version that calls release() instead of delete. + // + + template <typename T> + struct remove_c + { + typedef T r; + }; + + template <typename T> + struct remove_c<const T> + { + typedef T r; + }; + + template <typename T> + struct auto_ptr_ref + { + T* x_; + + explicit + auto_ptr_ref (T* x) + : x_ (x) + { + } + }; + + template <typename T> + struct auto_ptr + { + ~auto_ptr () + { + reset (); + } + + explicit + auto_ptr (T* x = 0) + : x_ (x) + { + } + + auto_ptr (auto_ptr& y) + : x_ (y.release ()) + { + } + + template <typename T2> + auto_ptr (auto_ptr<T2>& y) + : x_ (y.release ()) + { + } + + auto_ptr (auto_ptr_ref<T> r) + : x_ (r.x_) + { + } + + auto_ptr& + operator= (auto_ptr& y) + { + if (x_ != y.x_) + reset (y.release ()); + + return *this; + } + + template <typename T2> + auto_ptr& + operator= (auto_ptr<T2>& y) + { + if (x_ != y.x_) + reset (y.release ()); + + return *this; + } + + auto_ptr& + operator= (auto_ptr_ref<T> r) + { + if (r.x_ != x_) + reset (r.x_); + + return *this; + } + + template <typename T2> + operator auto_ptr_ref<T2> () + { + return auto_ptr_ref<T2> (release ()); + } + + template <typename T2> + operator auto_ptr<T2> () + { + return auto_ptr<T2> (release ()); + } + + public: + T& + operator* () const + { + return *x_; + } + + T* + operator-> () const + { + return x_; + } + + T* + get () const + { + return x_; + } + + T* + release () + { + T* x (x_); + x_ = 0; + return x; + } + + void + reset (T* x = 0) + { + if (x_) + const_cast<typename remove_c<T>::r*> (x_)->release (); + + x_ = x; + } + + private: + T* x_; + }; + } + } + } +} + +#endif // XSD_CXX_XML_DOM_AUTO_PTR_HXX diff --git a/xsd/libxsd/xsd/cxx/xml/dom/bits/error-handler-proxy.hxx b/xsd/libxsd/xsd/cxx/xml/dom/bits/error-handler-proxy.hxx new file mode 100644 index 0000000..83e9a7e --- /dev/null +++ b/xsd/libxsd/xsd/cxx/xml/dom/bits/error-handler-proxy.hxx @@ -0,0 +1,61 @@ +// file : xsd/cxx/xml/dom/bits/error-handler-proxy.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_CXX_XML_DOM_BITS_ERROR_HANDLER_PROXY_HXX +#define XSD_CXX_XML_DOM_BITS_ERROR_HANDLER_PROXY_HXX + +#include <xercesc/dom/DOMError.hpp> +#include <xercesc/dom/DOMLocator.hpp> +#include <xercesc/dom/DOMErrorHandler.hpp> + +#include <xsd/cxx/xml/error-handler.hxx> + +namespace xsd +{ + namespace cxx + { + namespace xml + { + namespace dom + { + namespace bits + { + template <typename C> + class error_handler_proxy: public xercesc::DOMErrorHandler + { + public: + error_handler_proxy (error_handler<C>& eh) + : failed_ (false), eh_ (&eh), native_eh_ (0) + { + } + + error_handler_proxy (xercesc::DOMErrorHandler& eh) + : failed_ (false), eh_ (0), native_eh_ (&eh) + { + } + + virtual bool + handleError (const xercesc::DOMError& e); + + bool + failed () const + { + return failed_; + } + + private: + bool failed_; + error_handler<C>* eh_; + xercesc::DOMErrorHandler* native_eh_; + }; + } + } + } + } +} + +#include <xsd/cxx/xml/dom/bits/error-handler-proxy.txx> + +#endif // XSD_CXX_XML_DOM_BITS_ERROR_HANDLER_PROXY_HXX diff --git a/xsd/libxsd/xsd/cxx/xml/dom/bits/error-handler-proxy.txx b/xsd/libxsd/xsd/cxx/xml/dom/bits/error-handler-proxy.txx new file mode 100644 index 0000000..23e71cd --- /dev/null +++ b/xsd/libxsd/xsd/cxx/xml/dom/bits/error-handler-proxy.txx @@ -0,0 +1,80 @@ +// file : xsd/cxx/xml/dom/bits/error-handler-proxy.txx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <xsd/cxx/xml/string.hxx> + +namespace xsd +{ + namespace cxx + { + namespace xml + { + namespace dom + { + namespace bits + { + template <typename C> + bool error_handler_proxy<C>:: + handleError (const xercesc::DOMError& e) + { + using xercesc::DOMError; + + if (e.getSeverity() != DOMError::DOM_SEVERITY_WARNING) + failed_ = true; + + if (native_eh_) + return native_eh_->handleError (e); + else + { + typedef typename error_handler<C>::severity severity; + + severity s (severity::error); + + switch (e.getSeverity()) + { + case DOMError::DOM_SEVERITY_WARNING: + { + s = severity::warning; + break; + } + case DOMError::DOM_SEVERITY_ERROR: + { + s = severity::error; + break; + } + case DOMError::DOM_SEVERITY_FATAL_ERROR: + { + s = severity::fatal; + break; + } + } + + xercesc::DOMLocator* loc (e.getLocation ()); + +#if _XERCES_VERSION >= 30000 + return eh_->handle ( + transcode<C> (loc->getURI ()), + static_cast<unsigned long> (loc->getLineNumber ()), + static_cast<unsigned long> (loc->getColumnNumber ()), + s, + transcode<C> (e.getMessage ())); +#else + XMLSSize_t l (loc->getLineNumber ()); + XMLSSize_t c (loc->getColumnNumber ()); + + return eh_->handle ( + transcode<C> (loc->getURI ()), + (l == -1 ? 0 : static_cast<unsigned long> (l)), + (c == -1 ? 0 : static_cast<unsigned long> (c)), + s, + transcode<C> (e.getMessage ())); +#endif + } + } + } + } + } + } +} diff --git a/xsd/libxsd/xsd/cxx/xml/dom/elements.hxx b/xsd/libxsd/xsd/cxx/xml/dom/elements.hxx new file mode 100644 index 0000000..e8ce8d2 --- /dev/null +++ b/xsd/libxsd/xsd/cxx/xml/dom/elements.hxx @@ -0,0 +1,36 @@ +// file : xsd/cxx/xml/dom/elements.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_CXX_XML_DOM_ELEMENTS_HXX +#define XSD_CXX_XML_DOM_ELEMENTS_HXX + +#include <xercesc/dom/DOMAttr.hpp> +#include <xercesc/dom/DOMElement.hpp> + +#include <xsd/cxx/xml/qualified-name.hxx> + +namespace xsd +{ + namespace cxx + { + namespace xml + { + namespace dom + { + template <typename C> + qualified_name<C> + name (const xercesc::DOMAttr&); + + template <typename C> + qualified_name<C> + name (const xercesc::DOMElement&); + } + } + } +} + +#include <xsd/cxx/xml/dom/elements.txx> + +#endif // XSD_CXX_XML_DOM_ELEMENTS_HXX diff --git a/xsd/libxsd/xsd/cxx/xml/dom/elements.txx b/xsd/libxsd/xsd/cxx/xml/dom/elements.txx new file mode 100644 index 0000000..540d0fb --- /dev/null +++ b/xsd/libxsd/xsd/cxx/xml/dom/elements.txx @@ -0,0 +1,57 @@ +// file : xsd/cxx/xml/dom/elements.txx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <xsd/cxx/xml/string.hxx> + +namespace xsd +{ + namespace cxx + { + namespace xml + { + namespace dom + { + template <typename C> + qualified_name<C> + name (const xercesc::DOMAttr& a) + { + const XMLCh* n (a.getLocalName ()); + + // If this DOM doesn't support namespaces then use getName. + // + if (n != 0) + { + if (const XMLCh* ns = a.getNamespaceURI ()) + return qualified_name<C> (transcode<C> (n), transcode<C> (ns)); + else + return qualified_name<C> (transcode<C> (n)); + } + else + return qualified_name<C> (transcode<C> (a.getName ())); + } + + + template <typename C> + qualified_name<C> + name (const xercesc::DOMElement& e) + { + const XMLCh* n (e.getLocalName ()); + + // If this DOM doesn't support namespaces then use getTagName. + // + if (n != 0) + { + if (const XMLCh* ns = e.getNamespaceURI ()) + return qualified_name<C> (transcode<C> (n), transcode<C> (ns)); + else + return qualified_name<C> (transcode<C> (n)); + } + else + return qualified_name<C> (transcode<C> (e.getTagName ())); + } + } + } + } +} diff --git a/xsd/libxsd/xsd/cxx/xml/dom/parsing-header.hxx b/xsd/libxsd/xsd/cxx/xml/dom/parsing-header.hxx new file mode 100644 index 0000000..d9a3695 --- /dev/null +++ b/xsd/libxsd/xsd/cxx/xml/dom/parsing-header.hxx @@ -0,0 +1,24 @@ +// file : xsd/cxx/xml/dom/parsing-header.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_CXX_XML_DOM_PARSING_HEADER_HXX +#define XSD_CXX_XML_DOM_PARSING_HEADER_HXX + +namespace xsd +{ + namespace cxx + { + namespace xml + { + namespace dom + { + template <typename C> + class parser; + } + } + } +} + +#endif // XSD_CXX_XML_DOM_PARSING_HEADER_HXX diff --git a/xsd/libxsd/xsd/cxx/xml/dom/parsing-source.hxx b/xsd/libxsd/xsd/cxx/xml/dom/parsing-source.hxx new file mode 100644 index 0000000..2c90cf3 --- /dev/null +++ b/xsd/libxsd/xsd/cxx/xml/dom/parsing-source.hxx @@ -0,0 +1,138 @@ +// file : xsd/cxx/xml/dom/parsing-source.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_CXX_XML_DOM_PARSING_SOURCE_HXX +#define XSD_CXX_XML_DOM_PARSING_SOURCE_HXX + +#include <string> + +#include <xercesc/dom/DOMNode.hpp> +#include <xercesc/dom/DOMAttr.hpp> +#include <xercesc/dom/DOMElement.hpp> +#include <xercesc/dom/DOMDocument.hpp> +#include <xercesc/dom/DOMNamedNodeMap.hpp> +#include <xercesc/dom/DOMErrorHandler.hpp> + +#include <xercesc/sax/InputSource.hpp> + +#include <xsd/cxx/xml/elements.hxx> // properies +#include <xsd/cxx/xml/error-handler.hxx> + +#include <xsd/cxx/xml/dom/auto-ptr.hxx> +#include <xsd/cxx/xml/dom/elements.hxx> // name +#include <xsd/cxx/xml/dom/parsing-header.hxx> + +namespace xsd +{ + namespace cxx + { + namespace xml + { + namespace dom + { + // Parser state object. Can be used for parsing element, attributes, + // or both. + // + template <typename C> + class parser + { + public: + parser (const xercesc::DOMElement& e, bool ep, bool ap); + + bool + more_elements () + { + return next_element_ != 0; + } + + const xercesc::DOMElement& + cur_element () + { + return *static_cast<const xercesc::DOMElement*> (next_element_); + } + + void + next_element (); + + bool + more_attributes () + { + return as_ > ai_; + } + + const xercesc::DOMAttr& + next_attribute () + { + return *static_cast<const xercesc::DOMAttr*> (a_->item (ai_++)); + } + + void + reset_attributes () + { + ai_ = 0; + } + + const xercesc::DOMElement& + element () const + { + return element_; + } + + private: + parser (const parser&); + + parser& + operator= (const parser&); + + private: + const xercesc::DOMElement& element_; + const xercesc::DOMNode* next_element_; + + const xercesc::DOMNamedNodeMap* a_; + XMLSize_t ai_; // Index of the next DOMAttr. + XMLSize_t as_; // Cached size of a_. + }; + + + // Parsing flags. + // + const unsigned long dont_validate = 0x00000400UL; + const unsigned long no_muliple_imports = 0x00000800UL; + + template <typename C> + xml::dom::auto_ptr<xercesc::DOMDocument> + parse (xercesc::InputSource&, + error_handler<C>&, + const properties<C>&, + unsigned long flags); + + template <typename C> + xml::dom::auto_ptr<xercesc::DOMDocument> + parse (xercesc::InputSource&, + xercesc::DOMErrorHandler&, + const properties<C>&, + unsigned long flags); + + template <typename C> + xml::dom::auto_ptr<xercesc::DOMDocument> + parse (const std::basic_string<C>& uri, + error_handler<C>&, + const properties<C>&, + unsigned long flags); + + template <typename C> + xml::dom::auto_ptr<xercesc::DOMDocument> + parse (const std::basic_string<C>& uri, + xercesc::DOMErrorHandler&, + const properties<C>&, + unsigned long flags); + } + } + } +} + +#include <xsd/cxx/xml/dom/parsing-source.txx> + +#endif // XSD_CXX_XML_DOM_PARSING_SOURCE_HXX diff --git a/xsd/libxsd/xsd/cxx/xml/dom/parsing-source.txx b/xsd/libxsd/xsd/cxx/xml/dom/parsing-source.txx new file mode 100644 index 0000000..50fa285 --- /dev/null +++ b/xsd/libxsd/xsd/cxx/xml/dom/parsing-source.txx @@ -0,0 +1,510 @@ +// file : xsd/cxx/xml/dom/parsing-source.txx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#if _XERCES_VERSION >= 30000 +# include <xercesc/dom/DOMLSParser.hpp> +# include <xercesc/dom/DOMLSException.hpp> +#else +# include <xercesc/dom/DOMBuilder.hpp> +#endif +#include <xercesc/dom/DOMNamedNodeMap.hpp> +#include <xercesc/dom/DOMImplementation.hpp> +#include <xercesc/dom/DOMImplementationRegistry.hpp> + +#include <xercesc/util/XMLUni.hpp> // xercesc::fg* +#include <xercesc/util/XMLUniDefs.hpp> // chLatin_L, etc + +#include <xercesc/framework/Wrapper4InputSource.hpp> + +#include <xsd/cxx/xml/string.hxx> +#include <xsd/cxx/xml/dom/bits/error-handler-proxy.hxx> + +namespace xsd +{ + namespace cxx + { + namespace xml + { + namespace dom + { + // parser + // + template <typename C> + parser<C>:: + parser (const xercesc::DOMElement& e, bool ep, bool ap) + : element_ (e), + next_element_ (0), + a_ (0), + ai_ (0) + { + using xercesc::DOMNode; + + if (ep) + { + for (next_element_ = e.getFirstChild (); + next_element_ != 0 && + next_element_->getNodeType () != DOMNode::ELEMENT_NODE; + next_element_ = next_element_->getNextSibling ()) /*noop*/; + } + + if (ap) + { + a_ = e.getAttributes (); + as_ = a_->getLength (); + } + } + + template <typename C> + void parser<C>:: + next_element () + { + using xercesc::DOMNode; + + for (next_element_ = next_element_->getNextSibling (); + next_element_ != 0 && + next_element_->getNodeType () != DOMNode::ELEMENT_NODE; + next_element_ = next_element_->getNextSibling ())/*noop*/; + } + + // parse() + // + template <typename C> + xml::dom::auto_ptr<xercesc::DOMDocument> + parse (xercesc::InputSource& is, + error_handler<C>& eh, + const properties<C>& prop, + unsigned long flags) + { + bits::error_handler_proxy<C> ehp (eh); + return xml::dom::parse (is, ehp, prop, flags); + } + + template <typename C> + auto_ptr<xercesc::DOMDocument> + parse (xercesc::InputSource& is, + xercesc::DOMErrorHandler& eh, + const properties<C>& prop, + unsigned long flags) + { + // HP aCC cannot handle using namespace xercesc; + // + using xercesc::DOMImplementationRegistry; + using xercesc::DOMImplementationLS; + using xercesc::DOMImplementation; + using xercesc::DOMDocument; +#if _XERCES_VERSION >= 30000 + using xercesc::DOMLSParser; + using xercesc::DOMConfiguration; +#else + using xercesc::DOMBuilder; +#endif + + using xercesc::Wrapper4InputSource; + using xercesc::XMLUni; + + + // Instantiate the DOM parser. + // + const XMLCh ls_id[] = {xercesc::chLatin_L, + xercesc::chLatin_S, + xercesc::chNull}; + + // Get an implementation of the Load-Store (LS) interface. + // + DOMImplementation* impl ( + DOMImplementationRegistry::getDOMImplementation (ls_id)); + +#if _XERCES_VERSION >= 30000 + auto_ptr<DOMLSParser> parser ( + impl->createLSParser (DOMImplementationLS::MODE_SYNCHRONOUS, 0)); + + DOMConfiguration* conf (parser->getDomConfig ()); + + // Discard comment nodes in the document. + // + conf->setParameter (XMLUni::fgDOMComments, false); + + // Enable datatype normalization. + // + conf->setParameter (XMLUni::fgDOMDatatypeNormalization, true); + + // Do not create EntityReference nodes in the DOM tree. No + // EntityReference nodes will be created, only the nodes + // corresponding to their fully expanded substitution text + // will be created. + // + conf->setParameter (XMLUni::fgDOMEntities, false); + + // Perform namespace processing. + // + conf->setParameter (XMLUni::fgDOMNamespaces, true); + + // Do not include ignorable whitespace in the DOM tree. + // + conf->setParameter (XMLUni::fgDOMElementContentWhitespace, false); + + if (flags & dont_validate) + { + conf->setParameter (XMLUni::fgDOMValidate, false); + conf->setParameter (XMLUni::fgXercesSchema, false); + conf->setParameter (XMLUni::fgXercesSchemaFullChecking, false); + } + else + { + conf->setParameter (XMLUni::fgDOMValidate, true); + conf->setParameter (XMLUni::fgXercesSchema, true); + + // Xerces-C++ 3.1.0 is the first version with working multi import + // support. + // +#if _XERCES_VERSION >= 30100 + if (!(flags & no_muliple_imports)) + conf->setParameter (XMLUni::fgXercesHandleMultipleImports, true); +#endif + + // This feature checks the schema grammar for additional + // errors. We most likely do not need it when validating + // instances (assuming the schema is valid). + // + conf->setParameter (XMLUni::fgXercesSchemaFullChecking, false); + } + + // We will release DOM ourselves. + // + conf->setParameter (XMLUni::fgXercesUserAdoptsDOMDocument, true); + + + // Transfer properies if any. + // + + if (!prop.schema_location ().empty ()) + { + xml::string sl (prop.schema_location ()); + const void* v (sl.c_str ()); + + conf->setParameter ( + XMLUni::fgXercesSchemaExternalSchemaLocation, + const_cast<void*> (v)); + } + + if (!prop.no_namespace_schema_location ().empty ()) + { + xml::string sl (prop.no_namespace_schema_location ()); + const void* v (sl.c_str ()); + + conf->setParameter ( + XMLUni::fgXercesSchemaExternalNoNameSpaceSchemaLocation, + const_cast<void*> (v)); + } + + // If external schema location was specified, disable loading + // schemas via the schema location attributes in the document. + // +#if _XERCES_VERSION >= 30100 + if (!prop.schema_location ().empty () || + !prop.no_namespace_schema_location ().empty ()) + { + conf->setParameter (XMLUni::fgXercesLoadSchema, false); + } +#endif + // Set error handler. + // + bits::error_handler_proxy<C> ehp (eh); + conf->setParameter (XMLUni::fgDOMErrorHandler, &ehp); + +#else // _XERCES_VERSION >= 30000 + + // Same as above but for Xerces-C++ 2 series. + // + auto_ptr<DOMBuilder> parser ( + impl->createDOMBuilder (DOMImplementationLS::MODE_SYNCHRONOUS, 0)); + + parser->setFeature (XMLUni::fgDOMComments, false); + parser->setFeature (XMLUni::fgDOMDatatypeNormalization, true); + parser->setFeature (XMLUni::fgDOMEntities, false); + parser->setFeature (XMLUni::fgDOMNamespaces, true); + parser->setFeature (XMLUni::fgDOMWhitespaceInElementContent, false); + + if (flags & dont_validate) + { + parser->setFeature (XMLUni::fgDOMValidation, false); + parser->setFeature (XMLUni::fgXercesSchema, false); + parser->setFeature (XMLUni::fgXercesSchemaFullChecking, false); + } + else + { + parser->setFeature (XMLUni::fgDOMValidation, true); + parser->setFeature (XMLUni::fgXercesSchema, true); + parser->setFeature (XMLUni::fgXercesSchemaFullChecking, false); + } + + parser->setFeature (XMLUni::fgXercesUserAdoptsDOMDocument, true); + + if (!prop.schema_location ().empty ()) + { + xml::string sl (prop.schema_location ()); + const void* v (sl.c_str ()); + + parser->setProperty ( + XMLUni::fgXercesSchemaExternalSchemaLocation, + const_cast<void*> (v)); + } + + if (!prop.no_namespace_schema_location ().empty ()) + { + xml::string sl (prop.no_namespace_schema_location ()); + const void* v (sl.c_str ()); + + parser->setProperty ( + XMLUni::fgXercesSchemaExternalNoNameSpaceSchemaLocation, + const_cast<void*> (v)); + } + + bits::error_handler_proxy<C> ehp (eh); + parser->setErrorHandler (&ehp); + +#endif // _XERCES_VERSION >= 30000 + + xercesc::Wrapper4InputSource wrap (&is, false); + +#if _XERCES_VERSION >= 30000 + auto_ptr<DOMDocument> doc; + + try + { + doc.reset (parser->parse (&wrap)); + } + catch (const xercesc::DOMLSException&) + { + } +#else + auto_ptr<DOMDocument> doc (parser->parse (wrap)); +#endif + if (ehp.failed ()) + doc.reset (); + + return doc; + } + + template <typename C> + xml::dom::auto_ptr<xercesc::DOMDocument> + parse (const std::basic_string<C>& uri, + error_handler<C>& eh, + const properties<C>& prop, + unsigned long flags) + { + bits::error_handler_proxy<C> ehp (eh); + return xml::dom::parse (uri, ehp, prop, flags); + } + + template <typename C> + auto_ptr<xercesc::DOMDocument> + parse (const std::basic_string<C>& uri, + xercesc::DOMErrorHandler& eh, + const properties<C>& prop, + unsigned long flags) + { + // HP aCC cannot handle using namespace xercesc; + // + using xercesc::DOMImplementationRegistry; + using xercesc::DOMImplementationLS; + using xercesc::DOMImplementation; + using xercesc::DOMDocument; +#if _XERCES_VERSION >= 30000 + using xercesc::DOMLSParser; + using xercesc::DOMConfiguration; +#else + using xercesc::DOMBuilder; +#endif + using xercesc::XMLUni; + + + // Instantiate the DOM parser. + // + const XMLCh ls_id[] = {xercesc::chLatin_L, + xercesc::chLatin_S, + xercesc::chNull}; + + // Get an implementation of the Load-Store (LS) interface. + // + DOMImplementation* impl ( + DOMImplementationRegistry::getDOMImplementation (ls_id)); + +#if _XERCES_VERSION >= 30000 + auto_ptr<DOMLSParser> parser ( + impl->createLSParser(DOMImplementationLS::MODE_SYNCHRONOUS, 0)); + + DOMConfiguration* conf (parser->getDomConfig ()); + + // Discard comment nodes in the document. + // + conf->setParameter (XMLUni::fgDOMComments, false); + + // Enable datatype normalization. + // + conf->setParameter (XMLUni::fgDOMDatatypeNormalization, true); + + // Do not create EntityReference nodes in the DOM tree. No + // EntityReference nodes will be created, only the nodes + // corresponding to their fully expanded substitution text + // will be created. + // + conf->setParameter (XMLUni::fgDOMEntities, false); + + // Perform namespace processing. + // + conf->setParameter (XMLUni::fgDOMNamespaces, true); + + // Do not include ignorable whitespace in the DOM tree. + // + conf->setParameter (XMLUni::fgDOMElementContentWhitespace, false); + + if (flags & dont_validate) + { + conf->setParameter (XMLUni::fgDOMValidate, false); + conf->setParameter (XMLUni::fgXercesSchema, false); + conf->setParameter (XMLUni::fgXercesSchemaFullChecking, false); + } + else + { + conf->setParameter (XMLUni::fgDOMValidate, true); + conf->setParameter (XMLUni::fgXercesSchema, true); + + // Xerces-C++ 3.1.0 is the first version with working multi import + // support. + // +#if _XERCES_VERSION >= 30100 + if (!(flags & no_muliple_imports)) + conf->setParameter (XMLUni::fgXercesHandleMultipleImports, true); +#endif + + // This feature checks the schema grammar for additional + // errors. We most likely do not need it when validating + // instances (assuming the schema is valid). + // + conf->setParameter (XMLUni::fgXercesSchemaFullChecking, false); + } + + // We will release DOM ourselves. + // + conf->setParameter (XMLUni::fgXercesUserAdoptsDOMDocument, true); + + + // Transfer properies if any. + // + + if (!prop.schema_location ().empty ()) + { + xml::string sl (prop.schema_location ()); + const void* v (sl.c_str ()); + + conf->setParameter ( + XMLUni::fgXercesSchemaExternalSchemaLocation, + const_cast<void*> (v)); + } + + if (!prop.no_namespace_schema_location ().empty ()) + { + xml::string sl (prop.no_namespace_schema_location ()); + const void* v (sl.c_str ()); + + conf->setParameter ( + XMLUni::fgXercesSchemaExternalNoNameSpaceSchemaLocation, + const_cast<void*> (v)); + } + + // If external schema location was specified, disable loading + // schemas via the schema location attributes in the document. + // +#if _XERCES_VERSION >= 30100 + if (!prop.schema_location ().empty () || + !prop.no_namespace_schema_location ().empty ()) + { + conf->setParameter (XMLUni::fgXercesLoadSchema, false); + } +#endif + // Set error handler. + // + bits::error_handler_proxy<C> ehp (eh); + conf->setParameter (XMLUni::fgDOMErrorHandler, &ehp); + +#else // _XERCES_VERSION >= 30000 + + // Same as above but for Xerces-C++ 2 series. + // + auto_ptr<DOMBuilder> parser ( + impl->createDOMBuilder(DOMImplementationLS::MODE_SYNCHRONOUS, 0)); + + parser->setFeature (XMLUni::fgDOMComments, false); + parser->setFeature (XMLUni::fgDOMDatatypeNormalization, true); + parser->setFeature (XMLUni::fgDOMEntities, false); + parser->setFeature (XMLUni::fgDOMNamespaces, true); + parser->setFeature (XMLUni::fgDOMWhitespaceInElementContent, false); + + if (flags & dont_validate) + { + parser->setFeature (XMLUni::fgDOMValidation, false); + parser->setFeature (XMLUni::fgXercesSchema, false); + parser->setFeature (XMLUni::fgXercesSchemaFullChecking, false); + } + else + { + parser->setFeature (XMLUni::fgDOMValidation, true); + parser->setFeature (XMLUni::fgXercesSchema, true); + parser->setFeature (XMLUni::fgXercesSchemaFullChecking, false); + } + + parser->setFeature (XMLUni::fgXercesUserAdoptsDOMDocument, true); + + if (!prop.schema_location ().empty ()) + { + xml::string sl (prop.schema_location ()); + const void* v (sl.c_str ()); + + parser->setProperty ( + XMLUni::fgXercesSchemaExternalSchemaLocation, + const_cast<void*> (v)); + } + + if (!prop.no_namespace_schema_location ().empty ()) + { + xml::string sl (prop.no_namespace_schema_location ()); + const void* v (sl.c_str ()); + + parser->setProperty ( + XMLUni::fgXercesSchemaExternalNoNameSpaceSchemaLocation, + const_cast<void*> (v)); + } + + bits::error_handler_proxy<C> ehp (eh); + parser->setErrorHandler (&ehp); + +#endif // _XERCES_VERSION >= 30000 + + +#if _XERCES_VERSION >= 30000 + auto_ptr<DOMDocument> doc; + + try + { + doc.reset (parser->parseURI (string (uri).c_str ())); + } + catch (const xercesc::DOMLSException&) + { + } +#else + auto_ptr<DOMDocument> doc ( + parser->parseURI (string (uri).c_str ())); +#endif + + if (ehp.failed ()) + doc.reset (); + + return doc; + } + } + } + } +} diff --git a/xsd/libxsd/xsd/cxx/xml/dom/serialization-header.hxx b/xsd/libxsd/xsd/cxx/xml/dom/serialization-header.hxx new file mode 100644 index 0000000..3b879b1 --- /dev/null +++ b/xsd/libxsd/xsd/cxx/xml/dom/serialization-header.hxx @@ -0,0 +1,81 @@ +// file : xsd/cxx/xml/dom/serialization-header.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_CXX_XML_DOM_SERIALIZATION_HEADER_HXX +#define XSD_CXX_XML_DOM_SERIALIZATION_HEADER_HXX + +#include <map> +#include <string> + +#include <xercesc/dom/DOMElement.hpp> + +namespace xsd +{ + namespace cxx + { + namespace xml + { + namespace dom + { + // Find an existing prefix or establish a new one. Try to use + // hint if provided and available. + // + template <typename C> + std::basic_string<C> + prefix (const C* ns, xercesc::DOMElement&, const C* hint = 0); + + template <typename C> + inline std::basic_string<C> + prefix (const std::basic_string<C>& ns, + xercesc::DOMElement& e, + const C* hint = 0) + { + return prefix (ns.c_str (), e, hint); + } + + // + // + template <typename C> + void + clear (xercesc::DOMElement&); + + // + // + template <typename C> + class namespace_info + { + public: + typedef std::basic_string<C> string; + + namespace_info () + { + } + + namespace_info (const string& name_, const string& schema_) + : name (name_), + schema (schema_) + { + } + + std::basic_string<C> name; + std::basic_string<C> schema; + }; + + + // Map of namespace prefix to namespace_info. + // + template <typename C> + class namespace_infomap: + public std::map<std::basic_string<C>, namespace_info<C> > + { + }; + } + } + } +} + +#include <xsd/cxx/xml/dom/serialization-header.txx> + +#endif // XSD_CXX_XML_DOM_SERIALIZATION_HEADER_HXX diff --git a/xsd/libxsd/xsd/cxx/xml/dom/serialization-header.txx b/xsd/libxsd/xsd/cxx/xml/dom/serialization-header.txx new file mode 100644 index 0000000..3052b7e --- /dev/null +++ b/xsd/libxsd/xsd/cxx/xml/dom/serialization-header.txx @@ -0,0 +1,192 @@ +// file : xsd/cxx/xml/dom/serialization-header.txx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <vector> +#include <sstream> +#include <cstddef> // std::size_t + +#include <xercesc/dom/DOMNode.hpp> +#include <xercesc/dom/DOMAttr.hpp> +#include <xercesc/dom/DOMNamedNodeMap.hpp> + +#include <xercesc/util/XMLUni.hpp> // xercesc::fg* +#include <xercesc/util/XMLString.hpp> +#include <xercesc/validators/schema/SchemaSymbols.hpp> + +#include <xsd/cxx/xml/string.hxx> +#include <xsd/cxx/xml/bits/literals.hxx> + +namespace xsd +{ + namespace cxx + { + namespace xml + { + namespace dom + { + // + // + template <typename C> + std::basic_string<C> + prefix (const C* ns, xercesc::DOMElement& e, const C* hint) + { + string xns (ns); + +#if _XERCES_VERSION >= 30000 + const XMLCh* p (e.lookupPrefix (xns.c_str ())); +#else + const XMLCh* p (e.lookupNamespacePrefix (xns.c_str (), false)); +#endif + if (p != 0) + return transcode<C> (p); + + if (e.isDefaultNamespace (xns.c_str ())) + return std::basic_string<C> (); + + // 'xml' prefix requires special handling and Xerces folks + // refuse to handle this in DOM so I have to do it myself. + // + if (std::basic_string<C> (ns) == xml::bits::xml_namespace<C> ()) + return xml::bits::xml_prefix<C> (); + + // No prefix for this namespace. Will need to establish one. + // + std::basic_string<C> prefix; + + if (hint != 0 && + e.lookupNamespaceURI (xml::string (hint).c_str ()) == 0) + { + prefix = hint; + } + else + { + for (unsigned long n (1);; ++n) + { + // Make finding the first few prefixes fast. + // + switch (n) + { + case 1: + { + prefix = xml::bits::first_prefix<C> (); + break; + } + case 2: + { + prefix = xml::bits::second_prefix<C> (); + break; + } + case 3: + { + prefix = xml::bits::third_prefix<C> (); + break; + } + case 4: + { + prefix = xml::bits::fourth_prefix<C> (); + break; + } + case 5: + { + prefix = xml::bits::fifth_prefix<C> (); + break; + } + default: + { + std::basic_ostringstream<C> ostr; + ostr << C ('p') << n; + prefix = ostr.str (); + break; + } + } + + if (e.lookupNamespaceURI (xml::string (prefix).c_str ()) == 0) + break; + } + } + + std::basic_string<C> name (xml::bits::xmlns_prefix<C> ()); + name += C(':'); + name += prefix; + + e.setAttributeNS ( + xercesc::XMLUni::fgXMLNSURIName, + xml::string (name).c_str (), + xns.c_str ()); + + return prefix; + } + + // + // + template <typename C> + void + clear (xercesc::DOMElement& e) + { + // HP aCC cannot handle using namespace xercesc; + // + using xercesc::DOMNode; + using xercesc::DOMAttr; + using xercesc::DOMNamedNodeMap; + using xercesc::XMLString; + using xercesc::SchemaSymbols; + + // Remove child nodes. + // + while (xercesc::DOMNode* n = e.getFirstChild ()) + { + e.removeChild (n); + n->release (); + } + + // Remove attributes. + // + DOMNamedNodeMap* att_map (e.getAttributes ()); + XMLSize_t n (att_map->getLength ()); + + if (n != 0) + { + std::vector<DOMAttr*> atts; + + // Collect all attributes to be removed while filtering + // out special cases (xmlns & xsi). + // + for (XMLSize_t i (0); i != n; ++i) + { + DOMAttr* a (static_cast<DOMAttr*> (att_map->item (i))); + const XMLCh* ns (a->getNamespaceURI ()); + + if (ns != 0) + { + if (XMLString::equals (ns, xercesc::XMLUni::fgXMLNSURIName)) + continue; + + if (XMLString::equals (ns, SchemaSymbols::fgURI_XSI)) + { + const XMLCh* name (a->getLocalName ()); + + if (XMLString::equals ( + name, SchemaSymbols::fgXSI_SCHEMALOCACTION) || + XMLString::equals ( + name, SchemaSymbols::fgXSI_NONAMESPACESCHEMALOCACTION)) + continue; + } + } + + atts.push_back (a); + } + + for (std::vector<DOMAttr*>::iterator i (atts.begin ()), + end (atts.end ()); i != end; ++i) + { + e.removeAttributeNode (*i); + (*i)->release (); + } + } + } + } + } + } +} diff --git a/xsd/libxsd/xsd/cxx/xml/dom/serialization-source.hxx b/xsd/libxsd/xsd/cxx/xml/dom/serialization-source.hxx new file mode 100644 index 0000000..325c1ec --- /dev/null +++ b/xsd/libxsd/xsd/cxx/xml/dom/serialization-source.hxx @@ -0,0 +1,181 @@ +// file : xsd/cxx/xml/dom/serialization-source.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_CXX_XML_DOM_SERIALIZATION_SOURCE_HXX +#define XSD_CXX_XML_DOM_SERIALIZATION_SOURCE_HXX + +#include <string> +#include <cstring> // std::memcpy +#include <ostream> + +#include <xercesc/dom/DOMAttr.hpp> +#include <xercesc/dom/DOMElement.hpp> +#include <xercesc/dom/DOMDocument.hpp> +#include <xercesc/dom/DOMErrorHandler.hpp> +#include <xercesc/framework/XMLFormatter.hpp> // XMLFormatTarget, XMLFormatter + +#include <xsd/cxx/xml/error-handler.hxx> +#include <xsd/cxx/xml/dom/auto-ptr.hxx> +#include <xsd/cxx/xml/dom/elements.hxx> // name +#include <xsd/cxx/xml/dom/serialization-header.hxx> + +namespace xsd +{ + namespace cxx + { + namespace xml + { + namespace dom + { + // + // + template <typename C> + xercesc::DOMAttr& + create_attribute (const C* name, xercesc::DOMElement&); + + template <typename C> + xercesc::DOMAttr& + create_attribute (const C* name, const C* ns, xercesc::DOMElement&); + + template <typename C> + xercesc::DOMElement& + create_element (const C* name, xercesc::DOMElement&); + + template <typename C> + xercesc::DOMElement& + create_element (const C* name, const C* ns, xercesc::DOMElement&); + + // Serialization flags. + // + const unsigned long no_xml_declaration = 0x00010000UL; + const unsigned long dont_pretty_print = 0x00020000UL; + + template <typename C> + xml::dom::auto_ptr<xercesc::DOMDocument> + serialize (const std::basic_string<C>& root_element, + const std::basic_string<C>& root_element_namespace, + const namespace_infomap<C>& map, + unsigned long flags); + + // This one helps Sun C++ to overcome its fears. + // + template <typename C> + inline xml::dom::auto_ptr<xercesc::DOMDocument> + serialize (const C* root_element, + const C* root_element_namespace, + const namespace_infomap<C>& map, + unsigned long flags) + { + return serialize (std::basic_string<C> (root_element), + std::basic_string<C> (root_element_namespace), + map, + flags); + } + + // + // + template <typename C> + bool + serialize (xercesc::XMLFormatTarget& target, + const xercesc::DOMDocument& doc, + const std::basic_string<C>& enconding, + error_handler<C>& eh, + unsigned long flags); + + template <typename C> + bool + serialize (xercesc::XMLFormatTarget& target, + const xercesc::DOMDocument& doc, + const std::basic_string<C>& enconding, + xercesc::DOMErrorHandler& eh, + unsigned long flags); + + + class ostream_format_target: public xercesc::XMLFormatTarget + { + public: + ostream_format_target (std::ostream& os) + : n_ (0), os_ (os) + { + } + + public: + // I know, some of those consts are stupid. But that's what + // Xerces folks put into their interfaces and VC-7.1 thinks + // there are different signatures if one strips this fluff off. + // + virtual void + writeChars (const XMLByte* const buf, +#if _XERCES_VERSION >= 30000 + const XMLSize_t size, +#else + const unsigned int size, +#endif + xercesc::XMLFormatter* const) + { + // Ignore the write request if there was a stream failure and the + // stream is not using exceptions. + // + if (os_.fail ()) + return; + + // Flush the buffer if the block is too large or if we don't have + // any space left. + // + if ((size >= buf_size_ / 8 || n_ + size > buf_size_) && n_ != 0) + { + os_.write (buf_, static_cast<std::streamsize> (n_)); + n_ = 0; + + if (os_.fail ()) + return; + } + + if (size < buf_size_ / 8) + { + std::memcpy (buf_ + n_, reinterpret_cast<const char*> (buf), size); + n_ += size; + } + else + os_.write (reinterpret_cast<const char*> (buf), + static_cast<std::streamsize> (size)); + } + + + virtual void + flush () + { + // Ignore the flush request if there was a stream failure + // and the stream is not using exceptions. + // + if (!os_.fail ()) + { + if (n_ != 0) + { + os_.write (buf_, static_cast<std::streamsize> (n_)); + n_ = 0; + + if (os_.fail ()) + return; + } + + os_.flush (); + } + } + + private: + static const std::size_t buf_size_ = 1024; + char buf_[buf_size_]; + std::size_t n_; + std::ostream& os_; + }; + } + } + } +} + +#include <xsd/cxx/xml/dom/serialization-source.txx> + +#endif // XSD_CXX_XML_DOM_SERIALIZATION_SOURCE_HXX diff --git a/xsd/libxsd/xsd/cxx/xml/dom/serialization-source.txx b/xsd/libxsd/xsd/cxx/xml/dom/serialization-source.txx new file mode 100644 index 0000000..2b27dd5 --- /dev/null +++ b/xsd/libxsd/xsd/cxx/xml/dom/serialization-source.txx @@ -0,0 +1,394 @@ +// file : xsd/cxx/xml/dom/serialization-source.txx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <xercesc/util/XMLUni.hpp> // xercesc::fg* +#include <xercesc/util/XMLUniDefs.hpp> // chLatin_L, etc +#include <xercesc/validators/schema/SchemaSymbols.hpp> + +#if _XERCES_VERSION >= 30000 +# include <xercesc/dom/DOMLSOutput.hpp> +# include <xercesc/dom/DOMLSSerializer.hpp> +#else +# include <xercesc/dom/DOMWriter.hpp> +#endif +#include <xercesc/dom/DOMElement.hpp> +#include <xercesc/dom/DOMImplementation.hpp> +#include <xercesc/dom/DOMImplementationRegistry.hpp> + +#include <xsd/cxx/xml/string.hxx> +#include <xsd/cxx/xml/bits/literals.hxx> +#include <xsd/cxx/xml/dom/bits/error-handler-proxy.hxx> + +namespace xsd +{ + namespace cxx + { + namespace xml + { + namespace dom + { + // + // + template <typename C> + xercesc::DOMAttr& + create_attribute (const C* name, xercesc::DOMElement& parent) + { + xercesc::DOMDocument* doc (parent.getOwnerDocument ()); + xercesc::DOMAttr* a (doc->createAttribute (string (name).c_str ())); + parent.setAttributeNode (a); + return *a; + } + + template <typename C> + xercesc::DOMAttr& + create_attribute (const C* name, + const C* ns, + xercesc::DOMElement& parent) + { + if (ns[0] == C ('\0')) + return create_attribute (name, parent); + + xercesc::DOMDocument* doc (parent.getOwnerDocument ()); + + xercesc::DOMAttr* a; + std::basic_string<C> p (prefix<C> (ns, parent)); + + if (!p.empty ()) + { + p += ':'; + p += name; + a = doc->createAttributeNS (string (ns).c_str (), + string (p).c_str ()); + } + else + a = doc->createAttributeNS (string (ns).c_str (), + string (name).c_str ()); + + parent.setAttributeNodeNS (a); + return *a; + } + + template <typename C> + xercesc::DOMElement& + create_element (const C* name, xercesc::DOMElement& parent) + { + xercesc::DOMDocument* doc (parent.getOwnerDocument ()); + xercesc::DOMElement* e (doc->createElement (string (name).c_str ())); + parent.appendChild (e); + return *e; + } + + template <typename C> + xercesc::DOMElement& + create_element (const C* name, + const C* ns, + xercesc::DOMElement& parent) + { + if (ns[0] == C ('\0')) + return create_element (name, parent); + + xercesc::DOMDocument* doc (parent.getOwnerDocument ()); + + xercesc::DOMElement* e; + std::basic_string<C> p (prefix<C> (ns, parent)); + + if (!p.empty ()) + { + p += ':'; + p += name; + e = doc->createElementNS (string (ns).c_str (), + string (p).c_str ()); + } + else + e = doc->createElementNS (string (ns).c_str (), + string (name).c_str ()); + + parent.appendChild (e); + return *e; + } + + + // + // + template <typename C> + auto_ptr<xercesc::DOMDocument> + serialize (const std::basic_string<C>& el, + const std::basic_string<C>& ns, + const namespace_infomap<C>& map, + unsigned long) + { + // HP aCC cannot handle using namespace xercesc; + // + using xercesc::DOMImplementationRegistry; + using xercesc::DOMImplementation; + using xercesc::DOMDocument; + using xercesc::DOMElement; + + // + // + typedef std::basic_string<C> string; + typedef namespace_infomap<C> infomap; + typedef typename infomap::const_iterator infomap_iterator; + + C colon (':'), space (' '); + + string prefix; + + if (!ns.empty ()) + { + infomap_iterator i (map.begin ()), e (map.end ()); + + for ( ;i != e; ++i) + { + if (i->second.name == ns) + { + prefix = i->first; + break; + } + } + + // Since this is the first namespace in document we don't + // need to worry about conflicts. + // + if (i == e) + prefix = xml::bits::first_prefix<C> (); + } + + const XMLCh ls[] = {xercesc::chLatin_L, + xercesc::chLatin_S, + xercesc::chNull}; + + DOMImplementation* impl ( + DOMImplementationRegistry::getDOMImplementation (ls)); + + auto_ptr<DOMDocument> doc ( + impl->createDocument ( + (ns.empty () ? 0 : xml::string (ns).c_str ()), + xml::string ((prefix.empty () + ? el + : prefix + colon + el)).c_str (), + 0)); + + DOMElement* root (doc->getDocumentElement ()); + + // Check if we need to provide xsi mapping. + // + bool xsi (false); + string xsi_prefix; + string xmlns_prefix (xml::bits::xmlns_prefix<C> ()); + + for (infomap_iterator i (map.begin ()), e (map.end ()); i != e; ++i) + { + if (!i->second.schema.empty ()) + { + xsi = true; + break; + } + } + + // Check if we were told to provide xsi mapping. + // + if (xsi) + { + for (infomap_iterator i (map.begin ()), e (map.end ()); + i != e; + ++i) + { + if (i->second.name == xml::bits::xsi_namespace<C> ()) + { + xsi_prefix = i->first; + xsi = false; + break; + } + } + } + + // Create user-defined mappings. + // + for (infomap_iterator i (map.begin ()), e (map.end ()); i != e; ++i) + { + if (i->first.empty ()) + { + // Empty prefix. + // + if (!i->second.name.empty ()) + root->setAttributeNS ( + xercesc::XMLUni::fgXMLNSURIName, + xml::string (xmlns_prefix).c_str (), + xml::string (i->second.name).c_str ()); + } + else + { + root->setAttributeNS ( + xercesc::XMLUni::fgXMLNSURIName, + xml::string (xmlns_prefix + colon + i->first).c_str (), + xml::string (i->second.name).c_str ()); + } + } + + // If we were not told to provide xsi mapping but we need it + // then we will have to add it ourselves. + // + if (xsi) + xsi_prefix = dom::prefix (xml::bits::xsi_namespace<C> (), + *root, + xml::bits::xsi_prefix<C> ()); + + // Create xsi:schemaLocation and xsi:noNamespaceSchemaLocation + // attributes. + // + string schema_location; + string no_namespace_schema_location; + + for (infomap_iterator i (map.begin ()), e (map.end ()); i != e; ++i) + { + if (!i->second.schema.empty ()) + { + if (i->second.name.empty ()) + { + if (!no_namespace_schema_location.empty ()) + no_namespace_schema_location += space; + + no_namespace_schema_location += i->second.schema; + } + else + { + if (!schema_location.empty ()) + schema_location += space; + + schema_location += i->second.name + space + i->second.schema; + } + } + } + + if (!schema_location.empty ()) + { + root->setAttributeNS ( + xercesc::SchemaSymbols::fgURI_XSI, + xml::string (xsi_prefix + colon + + xml::bits::schema_location<C> ()).c_str (), + xml::string (schema_location).c_str ()); + } + + if (!no_namespace_schema_location.empty ()) + { + root->setAttributeNS ( + xercesc::SchemaSymbols::fgURI_XSI, + xml::string ( + xsi_prefix + colon + + xml::bits::no_namespace_schema_location<C> ()).c_str (), + xml::string (no_namespace_schema_location).c_str ()); + } + + return doc; + } + + + template <typename C> + bool + serialize (xercesc::XMLFormatTarget& target, + const xercesc::DOMDocument& doc, + const std::basic_string<C>& encoding, + xercesc::DOMErrorHandler& eh, + unsigned long flags) + { + // HP aCC cannot handle using namespace xercesc; + // + using xercesc::DOMImplementationRegistry; + using xercesc::DOMImplementation; +#if _XERCES_VERSION >= 30000 + using xercesc::DOMLSSerializer; + using xercesc::DOMConfiguration; + using xercesc::DOMLSOutput; +#else + using xercesc::DOMWriter; +#endif + using xercesc::XMLUni; + + const XMLCh ls[] = {xercesc::chLatin_L, + xercesc::chLatin_S, + xercesc::chNull}; + + DOMImplementation* impl ( + DOMImplementationRegistry::getDOMImplementation (ls)); + + bits::error_handler_proxy<C> ehp (eh); + +#if _XERCES_VERSION >= 30000 + xml::dom::auto_ptr<DOMLSSerializer> writer ( + impl->createLSSerializer ()); + + DOMConfiguration* conf (writer->getDomConfig ()); + + conf->setParameter (XMLUni::fgDOMErrorHandler, &ehp); + + // Set some nice features if the serializer supports them. + // + if (conf->canSetParameter ( + XMLUni::fgDOMWRTDiscardDefaultContent, true)) + conf->setParameter (XMLUni::fgDOMWRTDiscardDefaultContent, true); + + if (!(flags & dont_pretty_print) && + conf->canSetParameter (XMLUni::fgDOMWRTFormatPrettyPrint, true)) + conf->setParameter (XMLUni::fgDOMWRTFormatPrettyPrint, true); + + // See if we need to write XML declaration. + // + if ((flags & no_xml_declaration) && + conf->canSetParameter (XMLUni::fgDOMXMLDeclaration, false)) + conf->setParameter (XMLUni::fgDOMXMLDeclaration, false); + + xml::dom::auto_ptr<DOMLSOutput> out (impl->createLSOutput ()); + + out->setEncoding (xml::string (encoding).c_str ()); + out->setByteStream (&target); + + bool r (writer->write (&doc, out.get ())); +#else + xml::dom::auto_ptr<DOMWriter> writer (impl->createDOMWriter ()); + + writer->setErrorHandler (&ehp); + writer->setEncoding (xml::string (encoding).c_str ()); + + // Set some nice features if the serializer supports them. + // + if (writer->canSetFeature ( + XMLUni::fgDOMWRTDiscardDefaultContent, true)) + writer->setFeature (XMLUni::fgDOMWRTDiscardDefaultContent, true); + + if (!(flags & dont_pretty_print) && + writer->canSetFeature (XMLUni::fgDOMWRTFormatPrettyPrint, true)) + writer->setFeature (XMLUni::fgDOMWRTFormatPrettyPrint, true); + + // See if we need to write XML declaration. + // + if ((flags & no_xml_declaration) && + writer->canSetFeature (XMLUni::fgDOMXMLDeclaration, false)) + writer->setFeature (XMLUni::fgDOMXMLDeclaration, false); + + bool r (writer->writeNode (&target, doc)); +#endif + + if (!r || ehp.failed ()) + return false; + + return true; + } + + template <typename C> + bool + serialize (xercesc::XMLFormatTarget& target, + const xercesc::DOMDocument& doc, + const std::basic_string<C>& enconding, + error_handler<C>& eh, + unsigned long flags) + { + bits::error_handler_proxy<C> ehp (eh); + return serialize (target, doc, enconding, ehp, flags); + } + } + } + } +} diff --git a/xsd/libxsd/xsd/cxx/xml/dom/wildcard-source.hxx b/xsd/libxsd/xsd/cxx/xml/dom/wildcard-source.hxx new file mode 100644 index 0000000..11d7114 --- /dev/null +++ b/xsd/libxsd/xsd/cxx/xml/dom/wildcard-source.hxx @@ -0,0 +1,31 @@ +// file : xsd/cxx/xml/dom/wildcard-source.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_CXX_XML_DOM_WILDCARD_SOURCE_HXX +#define XSD_CXX_XML_DOM_WILDCARD_SOURCE_HXX + +#include <xercesc/dom/DOMDocument.hpp> + +#include <xsd/cxx/xml/dom/auto-ptr.hxx> + +namespace xsd +{ + namespace cxx + { + namespace xml + { + namespace dom + { + template <typename C> + xml::dom::auto_ptr<xercesc::DOMDocument> + create_document (); + } + } + } +} + +#include <xsd/cxx/xml/dom/wildcard-source.txx> + +#endif // XSD_CXX_XML_DOM_WILDCARD_SOURCE_HXX diff --git a/xsd/libxsd/xsd/cxx/xml/dom/wildcard-source.txx b/xsd/libxsd/xsd/cxx/xml/dom/wildcard-source.txx new file mode 100644 index 0000000..32043c0 --- /dev/null +++ b/xsd/libxsd/xsd/cxx/xml/dom/wildcard-source.txx @@ -0,0 +1,38 @@ +// file : xsd/cxx/xml/dom/wildcard-source.txx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <xercesc/util/XMLUniDefs.hpp> // chLatin_L, etc + +#include <xercesc/dom/DOMImplementation.hpp> +#include <xercesc/dom/DOMImplementationRegistry.hpp> + +namespace xsd +{ + namespace cxx + { + namespace xml + { + namespace dom + { + template <typename C> + xml::dom::auto_ptr<xercesc::DOMDocument> + create_document () + { + const XMLCh ls[] = {xercesc::chLatin_L, + xercesc::chLatin_S, + xercesc::chNull}; + + // Get an implementation of the Load-Store (LS) interface. + // + xercesc::DOMImplementation* impl ( + xercesc::DOMImplementationRegistry::getDOMImplementation (ls)); + + return xml::dom::auto_ptr<xercesc::DOMDocument> ( + impl->createDocument ()); + } + } + } + } +} diff --git a/xsd/libxsd/xsd/cxx/xml/elements.hxx b/xsd/libxsd/xsd/cxx/xml/elements.hxx new file mode 100644 index 0000000..d9f8a50 --- /dev/null +++ b/xsd/libxsd/xsd/cxx/xml/elements.hxx @@ -0,0 +1,113 @@ +// file : xsd/cxx/xml/elements.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_CXX_XML_ELEMENTS_HXX +#define XSD_CXX_XML_ELEMENTS_HXX + +#include <string> + +#include <xercesc/util/PlatformUtils.hpp> + +namespace xsd +{ + namespace cxx + { + namespace xml + { + template <typename C> + class properties + { + public: + struct argument {}; + + + // Schema location properties. Note that all locations are + // relative to an instance document unless they are full + // URIs. For example if you want to use a local schema then + // you will need to use 'file:///absolute/path/to/your/schema'. + // + + // Add a location for a schema with a target namespace. + // + void + schema_location (const std::basic_string<C>& namespace_, + const std::basic_string<C>& location); + + // Add a location for a schema without a target namespace. + // + void + no_namespace_schema_location (const std::basic_string<C>& location); + + public: + const std::basic_string<C>& + schema_location () const + { + return schema_location_; + } + + const std::basic_string<C>& + no_namespace_schema_location () const + { + return no_namespace_schema_location_; + } + + private: + std::basic_string<C> schema_location_; + std::basic_string<C> no_namespace_schema_location_; + }; + + + // + // + + template <typename C> + std::basic_string<C> + prefix (const std::basic_string<C>& n); + + template <typename C> + std::basic_string<C> + uq_name (const std::basic_string<C>& n); + + + // + // + + inline void + initialize () + { + xercesc::XMLPlatformUtils::Initialize (); + } + + inline void + terminate () + { + xercesc::XMLPlatformUtils::Terminate (); + } + + struct auto_initializer + { + auto_initializer (bool initialize = true, bool terminate = true) + : terminate_ (initialize && terminate) + { + if (initialize) + xml::initialize (); + } + + ~auto_initializer () + { + if (terminate_) + terminate (); + } + + private: + bool terminate_; + }; + } + } +} + +#include <xsd/cxx/xml/elements.txx> + +#endif // XSD_CXX_XML_ELEMENTS_HXX diff --git a/xsd/libxsd/xsd/cxx/xml/elements.txx b/xsd/libxsd/xsd/cxx/xml/elements.txx new file mode 100644 index 0000000..8ba07df --- /dev/null +++ b/xsd/libxsd/xsd/cxx/xml/elements.txx @@ -0,0 +1,73 @@ +// file : xsd/cxx/xml/elements.txx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +namespace xsd +{ + namespace cxx + { + namespace xml + { + // properties + // + + template <typename C> + void properties<C>:: + schema_location (const std::basic_string<C>& ns, + const std::basic_string<C>& loc) + { + if (ns.empty () || loc.empty ()) + throw argument (); + + if (!schema_location_.empty ()) + schema_location_ += C (' '); + + schema_location_ += ns + C (' ') + loc; + } + + template <typename C> + void properties<C>:: + no_namespace_schema_location (const std::basic_string<C>& loc) + { + if (loc.empty ()) + throw argument (); + + if (!no_namespace_schema_location_.empty ()) + no_namespace_schema_location_ += C (' '); + + no_namespace_schema_location_ += loc; + } + + + // + // + + template <typename C> + std::basic_string<C> + prefix (const std::basic_string<C>& n) + { + std::size_t i (0); + + while (i < n.length () && n[i] != ':') + ++i; + + return std::basic_string<C> (n, i == n.length () ? i : 0, i); + } + + template <typename C> + std::basic_string<C> + uq_name (const std::basic_string<C>& n) + { + std::size_t i (0); + + while (i < n.length () && n[i] != ':') + ++i; + + return std::basic_string<C> ( + n.c_str () + (i == n.length () ? 0 : i + 1)); + } + } + } +} + diff --git a/xsd/libxsd/xsd/cxx/xml/error-handler.hxx b/xsd/libxsd/xsd/cxx/xml/error-handler.hxx new file mode 100644 index 0000000..bf0b3d7 --- /dev/null +++ b/xsd/libxsd/xsd/cxx/xml/error-handler.hxx @@ -0,0 +1,59 @@ +// file : xsd/cxx/xml/error-handler.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_CXX_XML_ERROR_HANDLER_HXX +#define XSD_CXX_XML_ERROR_HANDLER_HXX + +#include <string> + +namespace xsd +{ + namespace cxx + { + namespace xml + { + template <typename C> + class error_handler + { + public: + virtual + ~error_handler () + { + } + + public: + + // The fatal severity level results in termination + // of the parsing process no matter what is returned + // from handle. + // + struct severity + { + enum value + { + warning, + error, + fatal + }; + + severity (value v) : v_ (v) {} + operator value () const { return v_; } + + private: + value v_; + }; + + virtual bool + handle (const std::basic_string<C>& id, + unsigned long line, + unsigned long column, + severity, + const std::basic_string<C>& message) = 0; + }; + } + } +} + +#endif // XSD_CXX_XML_ERROR_HANDLER_HXX diff --git a/xsd/libxsd/xsd/cxx/xml/exceptions.hxx b/xsd/libxsd/xsd/cxx/xml/exceptions.hxx new file mode 100644 index 0000000..1ed93d8 --- /dev/null +++ b/xsd/libxsd/xsd/cxx/xml/exceptions.hxx @@ -0,0 +1,20 @@ +// file : xsd/cxx/xml/exceptions.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_CXX_XML_EXCEPTIONS_HXX +#define XSD_CXX_XML_EXCEPTIONS_HXX + +namespace xsd +{ + namespace cxx + { + namespace xml + { + struct invalid_utf16_string {}; + } + } +} + +#endif // XSD_CXX_XML_EXCEPTIONS_HXX diff --git a/xsd/libxsd/xsd/cxx/xml/qualified-name.hxx b/xsd/libxsd/xsd/cxx/xml/qualified-name.hxx new file mode 100644 index 0000000..1a0e032 --- /dev/null +++ b/xsd/libxsd/xsd/cxx/xml/qualified-name.hxx @@ -0,0 +1,84 @@ +// file : xsd/cxx/xml/qualified-name.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_CXX_XML_QUALIFIED_NAME_HXX +#define XSD_CXX_XML_QUALIFIED_NAME_HXX + +#include <string> + +namespace xsd +{ + namespace cxx + { + namespace xml + { + template <typename C> + struct qualified_name + { + qualified_name (const C* name, + const C* namespace_) + : name_ (name), namespace__ (namespace_) + { + } + + qualified_name (const std::basic_string<C>& name, + const std::basic_string<C>& namespace_) + : name_ (name), namespace__ (namespace_) + { + } + + qualified_name (const C* name) + : name_ (name) + { + } + + qualified_name (const std::basic_string<C>& name) + : name_ (name) + { + } + + const std::basic_string<C>& + name () const + { + return name_; + } + + const std::basic_string<C>& + namespace_ () const + { + return namespace__; + } + + private: + std::basic_string<C> name_; + std::basic_string<C> namespace__; + }; + + template <typename C> + inline bool + operator== (const qualified_name<C>& x, const qualified_name<C>& y) + { + return x.name () == y.name () && x.namespace_ () == y.namespace_ (); + } + + template <typename C> + inline bool + operator!= (const qualified_name<C>& x, const qualified_name<C>& y) + { + return !(x == y); + } + + template <typename C> + inline bool + operator< (const qualified_name<C>& x, const qualified_name<C>& y) + { + int r (x.name ().compare (y.name ())); + return (r < 0) || (r == 0 && x.namespace_ () < y.namespace_ ()); + } + } + } +} + +#endif // XSD_CXX_XML_QUALIFIED_NAME_HXX diff --git a/xsd/libxsd/xsd/cxx/xml/sax/bits/error-handler-proxy.hxx b/xsd/libxsd/xsd/cxx/xml/sax/bits/error-handler-proxy.hxx new file mode 100644 index 0000000..f92b6ab --- /dev/null +++ b/xsd/libxsd/xsd/cxx/xml/sax/bits/error-handler-proxy.hxx @@ -0,0 +1,80 @@ +// file : xsd/cxx/xml/sax/bits/error-handler-proxy.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_CXX_XML_SAX_ERROR_HANDLER_PROXY_HXX +#define XSD_CXX_XML_SAX_ERROR_HANDLER_PROXY_HXX + +#include <xercesc/sax/ErrorHandler.hpp> +#include <xercesc/sax/SAXParseException.hpp> + +#include <xsd/cxx/xml/error-handler.hxx> + +namespace xsd +{ + namespace cxx + { + namespace xml + { + namespace sax + { + namespace bits + { + template <typename C> + class error_handler_proxy: public xercesc::ErrorHandler + { + public: + error_handler_proxy (error_handler<C>& eh) + : failed_ (false), eh_ (&eh), native_eh_ (0) + { + } + + error_handler_proxy (xercesc::ErrorHandler& eh) + : failed_ (false), eh_ (0), native_eh_ (&eh) + { + } + + public: + virtual void + warning (const xercesc::SAXParseException& e); + + virtual void + error (const xercesc::SAXParseException& e); + + virtual void + fatalError (const xercesc::SAXParseException& e); + + public: + bool + failed () const + { + return failed_; + } + + virtual void + resetErrors() + { + failed_ = false; + } + + private: + typedef typename error_handler<C>::severity severity; + + void + handle (const xercesc::SAXParseException&, severity); + + private: + bool failed_; + error_handler<C>* eh_; + xercesc::ErrorHandler* native_eh_; + }; + } + } + } + } +} + +#include <xsd/cxx/xml/sax/bits/error-handler-proxy.txx> + +#endif // XSD_CXX_XML_SAX_ERROR_HANDLER_PROXY_HXX diff --git a/xsd/libxsd/xsd/cxx/xml/sax/bits/error-handler-proxy.txx b/xsd/libxsd/xsd/cxx/xml/sax/bits/error-handler-proxy.txx new file mode 100644 index 0000000..f8ca26d --- /dev/null +++ b/xsd/libxsd/xsd/cxx/xml/sax/bits/error-handler-proxy.txx @@ -0,0 +1,89 @@ +// file : xsd/cxx/xml/sax/bits/error-handler-proxy.txx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <xsd/cxx/xml/string.hxx> + +namespace xsd +{ + namespace cxx + { + namespace xml + { + namespace sax + { + namespace bits + { + template <typename C> + void error_handler_proxy<C>:: + warning (const xercesc::SAXParseException& e) + { + if (native_eh_) + native_eh_->warning (e); + else + handle (e, severity::warning); + } + + + template <typename C> + void error_handler_proxy<C>:: + error (const xercesc::SAXParseException& e) + { + failed_ = true; + + if (native_eh_) + native_eh_->error (e); + else + handle (e, severity::error); + } + + + template <typename C> + void error_handler_proxy<C>:: + fatalError (const xercesc::SAXParseException& e) + { + failed_ = true; + + if (native_eh_) + native_eh_->fatalError (e); + else + handle (e, severity::fatal); + } + + + template <typename C> + void error_handler_proxy<C>:: + handle (const xercesc::SAXParseException& e, severity s) + { + //@@ I do not honor return values from the handler. This + // is not too bad at the moment because I set + // all-errors-are-fatal flag on the parser. + // + const XMLCh* id (e.getPublicId ()); + + if (id == 0) + id = e.getSystemId (); + +#if _XERCES_VERSION >= 30000 + eh_->handle (transcode<C> (id), + static_cast<unsigned long> (e.getLineNumber ()), + static_cast<unsigned long> (e.getColumnNumber ()), + s, + transcode<C> (e.getMessage ())); +#else + XMLSSize_t l (e.getLineNumber ()); + XMLSSize_t c (e.getColumnNumber ()); + + eh_->handle (transcode<C> (id), + (l == -1 ? 0 : static_cast<unsigned long> (l)), + (c == -1 ? 0 : static_cast<unsigned long> (c)), + s, + transcode<C> (e.getMessage ())); +#endif + } + } + } + } + } +} diff --git a/xsd/libxsd/xsd/cxx/xml/sax/std-input-source.hxx b/xsd/libxsd/xsd/cxx/xml/sax/std-input-source.hxx new file mode 100644 index 0000000..71760a9 --- /dev/null +++ b/xsd/libxsd/xsd/cxx/xml/sax/std-input-source.hxx @@ -0,0 +1,174 @@ +// file : xsd/cxx/xml/sax/std-input-source.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_CXX_XML_SAX_STD_INPUT_SOURCE_HXX +#define XSD_CXX_XML_SAX_STD_INPUT_SOURCE_HXX + +#include <istream> + +#include <xsd/cxx/xml/string.hxx> + +#include <xercesc/sax/InputSource.hpp> +#include <xercesc/util/BinInputStream.hpp> + +namespace xsd +{ + namespace cxx + { + namespace xml + { + namespace sax + { + class std_input_stream: public xercesc::BinInputStream + { + public: + std_input_stream (std::istream& is) + : is_ (is) + { + } + +#if _XERCES_VERSION >= 30000 + virtual XMLFilePos + curPos () const + { + return static_cast<XMLFilePos> (is_.tellg ()); + } +#else + virtual unsigned int + curPos () const + { + return static_cast<unsigned int> (is_.tellg ()); + } +#endif + +#if _XERCES_VERSION >= 30000 + virtual XMLSize_t + readBytes (XMLByte* const buf, const XMLSize_t size) +#else + virtual unsigned int + readBytes (XMLByte* const buf, const unsigned int size) +#endif + { + // Some implementations don't clear gcount if you + // call read() on a stream that is in the eof state. + // + if (is_.eof ()) + return 0; + + // Unset the exception failbit while we are working + // with the stream. + // + std::ios_base::iostate old (is_.exceptions ()); + is_.exceptions (old & ~std::ios_base::failbit); + + is_.read (reinterpret_cast<char*> (buf), + static_cast<std::streamsize> (size)); + + // Clear the fail bit if it was caused by eof and restore + // the original exception state. If there are any pending + // errors then the exception will be thrown now. + // + if (is_.fail () && is_.eof ()) + is_.clear (is_.rdstate () & ~std::ios_base::failbit); + + is_.exceptions (old); + + // Make sure that if we failed, readBytes won't be called + // again. + // + if (!is_.fail ()) + { +#if _XERCES_VERSION >= 30000 + return static_cast<XMLSize_t> (is_.gcount ()); +#else + return static_cast<unsigned int> (is_.gcount ()); +#endif + } + else + return 0; + } + +#if _XERCES_VERSION >= 30000 + virtual const XMLCh* + getContentType () const + { + return 0; + } +#endif + private: + std::istream& is_; + }; + + + class std_input_source: public xercesc::InputSource + { + public: + std_input_source (std::istream& is) + : is_ (&is) + { + } + + template <typename C> + std_input_source (std::istream& is, const C* system_id) + : xercesc::InputSource (xml::string (system_id).c_str ()), + is_ (&is) + { + } + + template <typename C> + std_input_source (std::istream& is, + const std::basic_string<C>& system_id) + : xercesc::InputSource (xml::string (system_id).c_str ()), + is_ (&is) + { + } + + template <typename C> + std_input_source (std::istream& is, + const C* system_id, + const C* public_id) + : xercesc::InputSource (xml::string (system_id).c_str (), + xml::string (public_id).c_str ()), + is_ (&is) + { + } + + template <typename C> + std_input_source (std::istream& is, + const std::basic_string<C>& system_id, + const std::basic_string<C>& public_id) + : xercesc::InputSource (xml::string (system_id).c_str (), + xml::string (public_id).c_str ()), + is_ (&is) + { + } + + struct copy {}; + + // Throws the copy exception if this function is called more + // than once. + // + virtual xercesc::BinInputStream* + makeStream () const + { + if (is_ == 0) + throw copy (); + + std::istream& is (*is_); + + is_ = 0; + + return new std_input_stream (is); + } + + private: + mutable std::istream* is_; + }; + } + } + } +} + +#endif // XSD_CXX_XML_SAX_STD_INPUT_SOURCE_HXX diff --git a/xsd/libxsd/xsd/cxx/xml/std-memory-manager.hxx b/xsd/libxsd/xsd/cxx/xml/std-memory-manager.hxx new file mode 100644 index 0000000..b5cfaf9 --- /dev/null +++ b/xsd/libxsd/xsd/cxx/xml/std-memory-manager.hxx @@ -0,0 +1,50 @@ +// file : xsd/cxx/xml/std-memory-manager.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_CXX_XML_STD_MEMORY_MANAGER_HXX +#define XSD_CXX_XML_STD_MEMORY_MANAGER_HXX + +#include <new> // operator new, delete +#include <xercesc/framework/MemoryManager.hpp> + +namespace xsd +{ + namespace cxx + { + namespace xml + { + class std_memory_manager: public xercesc::MemoryManager + { + public: + virtual void* +#if _XERCES_VERSION >= 30000 + allocate(XMLSize_t size) +#else + allocate(size_t size) +#endif + { + return operator new (size); + } + + virtual void + deallocate(void* p) + { + if (p) + operator delete (p); + } + +#if _XERCES_VERSION >= 30000 + virtual xercesc::MemoryManager* + getExceptionMemoryManager() + { + return xercesc::XMLPlatformUtils::fgMemoryManager; + } +#endif + }; + } + } +} + +#endif // XSD_CXX_XML_STD_MEMORY_MANAGER_HXX diff --git a/xsd/libxsd/xsd/cxx/xml/string.hxx b/xsd/libxsd/xsd/cxx/xml/string.hxx new file mode 100644 index 0000000..f79e66e --- /dev/null +++ b/xsd/libxsd/xsd/cxx/xml/string.hxx @@ -0,0 +1,85 @@ +// file : xsd/cxx/xml/string.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_CXX_XML_STRING_HXX +#define XSD_CXX_XML_STRING_HXX + +#include <string> +#include <cstddef> // std::size_t + +#include <xsd/cxx/auto-array.hxx> +#include <xercesc/util/XercesDefs.hpp> // XMLCh + +namespace xsd +{ + namespace cxx + { + namespace xml + { + // Transcode a null-terminated string. + // + template <typename C> + std::basic_string<C> + transcode (const XMLCh* s); + + // Transcode a potentially non-null-terminated string. + // + template <typename C> + std::basic_string<C> + transcode (const XMLCh* s, std::size_t length); + + + // For VC7.1 wchar_t and XMLCh are the same type so we cannot + // overload the transcode name. You should not use these functions + // anyway and instead use the xml::string class below. + // + template <typename C> + XMLCh* + transcode_to_xmlch (const C*); + + template <typename C> + XMLCh* + transcode_to_xmlch (const std::basic_string<C>& s); + + // + // + class string + { + public : + template <typename C> + string (const std::basic_string<C>& s) + : s_ (transcode_to_xmlch<C> (s)) + { + } + + template <typename C> + string (const C* s) + : s_ (transcode_to_xmlch<C> (s)) + { + } + + const XMLCh* + c_str () const + { + return s_.get (); + } + + private: + string (const string&); + + string& + operator= (const string&); + + private: + auto_array<XMLCh> s_; + }; + } + } +} + +#endif // XSD_CXX_XML_STRING_HXX + +#include <xsd/cxx/xml/string.ixx> +#include <xsd/cxx/xml/string.txx> diff --git a/xsd/libxsd/xsd/cxx/xml/string.ixx b/xsd/libxsd/xsd/cxx/xml/string.ixx new file mode 100644 index 0000000..0f46f4d --- /dev/null +++ b/xsd/libxsd/xsd/cxx/xml/string.ixx @@ -0,0 +1,171 @@ +// file : xsd/cxx/xml/string.ixx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_CXX_XML_STRING_IXX +#define XSD_CXX_XML_STRING_IXX + +#include <xercesc/util/XMLString.hpp> + +// If no transcoder has been included, use the default UTF-8. +// +#ifndef XSD_CXX_XML_TRANSCODER +# include <xsd/cxx/xml/char-utf8.hxx> +#endif + +// We sometimes need this functionality even if we are building for +// wchar_t. +// +namespace xsd +{ + namespace cxx + { + namespace xml + { + template <> + inline std::basic_string<char> + transcode<char> (const XMLCh* s) + { + if (s == 0 || *s == XMLCh (0)) + return std::basic_string<char> (); + +#ifndef XSD_CXX_XML_TRANSCODER_CHAR_LCP + return char_transcoder::to (s, xercesc::XMLString::stringLen (s)); +#else + return char_transcoder::to (s); +#endif + } + + template <> + inline std::basic_string<char> + transcode<char> (const XMLCh* s, std::size_t len) + { + if (s == 0 || len == 0) + return std::basic_string<char> (); + + return char_transcoder::to (s, len); + } + + template <> + inline XMLCh* + transcode_to_xmlch (const char* s) + { +#ifndef XSD_CXX_XML_TRANSCODER_CHAR_LCP + return char_transcoder::from (s, std::char_traits<char>::length (s)); +#else + return char_transcoder::from (s); +#endif + } + + template <> + inline XMLCh* + transcode_to_xmlch (const std::basic_string<char>& s) + { +#ifndef XSD_CXX_XML_TRANSCODER_CHAR_LCP + return char_transcoder::from (s.c_str (), s.length ()); +#else + return char_transcoder::from (s.c_str ()); +#endif + } + } + } +} + +#endif // XSD_CXX_XML_STRING_IXX + + +#if defined(XSD_USE_CHAR) || !defined(XSD_USE_WCHAR) + +#ifndef XSD_CXX_XML_STRING_IXX_CHAR +#define XSD_CXX_XML_STRING_IXX_CHAR + +#endif // XSD_CXX_XML_STRING_IXX_CHAR +#endif // XSD_USE_CHAR + + +#if defined(XSD_USE_WCHAR) || !defined(XSD_USE_CHAR) + +#ifndef XSD_CXX_XML_STRING_IXX_WCHAR +#define XSD_CXX_XML_STRING_IXX_WCHAR + +namespace xsd +{ + namespace cxx + { + namespace xml + { + namespace bits + { + template <typename W, std::size_t S> + struct wchar_transcoder; + + // Specialization for 2-byte wchar_t (resulting encoding is UTF-16). + // + template <typename W> + struct wchar_transcoder<W, 2> + { + static std::basic_string<W> + to (const XMLCh* s, std::size_t length); + + static XMLCh* + from (const W* s, std::size_t length); + }; + + + // Specialization for 4-byte wchar_t (resulting encoding is UCS-4). + // + template <typename W> + struct wchar_transcoder<W, 4> + { + static std::basic_string<W> + to (const XMLCh* s, std::size_t length); + + static XMLCh* + from (const W* s, std::size_t length); + }; + } + + template <> + inline std::basic_string<wchar_t> + transcode<wchar_t> (const XMLCh* s) + { + if (s == 0) + return std::basic_string<wchar_t> (); + + return bits::wchar_transcoder<wchar_t, sizeof (wchar_t)>::to ( + s, xercesc::XMLString::stringLen (s)); + } + + template <> + inline std::basic_string<wchar_t> + transcode<wchar_t> (const XMLCh* s, std::size_t len) + { + if (s == 0 || len == 0) + return std::basic_string<wchar_t> (); + + return bits::wchar_transcoder<wchar_t, sizeof (wchar_t)>::to ( + s, len); + } + + template <> + inline XMLCh* + transcode_to_xmlch (const wchar_t* s) + { + return bits::wchar_transcoder<wchar_t, sizeof (wchar_t)>::from ( + s, std::char_traits<wchar_t>::length (s)); + } + + template <> + inline XMLCh* + transcode_to_xmlch (const std::basic_string<wchar_t>& s) + { + return bits::wchar_transcoder<wchar_t, sizeof (wchar_t)>::from ( + s.c_str (), s.length ()); + } + } + } +} + +#endif // XSD_CXX_XML_STRING_IXX_WCHAR +#endif // XSD_USE_WCHAR diff --git a/xsd/libxsd/xsd/cxx/xml/string.txx b/xsd/libxsd/xsd/cxx/xml/string.txx new file mode 100644 index 0000000..df0fb74 --- /dev/null +++ b/xsd/libxsd/xsd/cxx/xml/string.txx @@ -0,0 +1,151 @@ +// file : xsd/cxx/xml/string.txx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_CXX_XML_STRING_TXX +#define XSD_CXX_XML_STRING_TXX + + +#endif // XSD_CXX_XML_STRING_TXX + +#if defined(XSD_USE_WCHAR) || !defined(XSD_USE_CHAR) + +#ifndef XSD_CXX_XML_STRING_TXX_WCHAR +#define XSD_CXX_XML_STRING_TXX_WCHAR + +#include <xsd/cxx/xml/exceptions.hxx> + +namespace xsd +{ + namespace cxx + { + namespace xml + { + namespace bits + { + // wchar_transcoder (specialization for 2-byte wchar_t) + // + template <typename W> + std::basic_string<W> wchar_transcoder<W, 2>:: + to (const XMLCh* s, std::size_t length) + { + std::basic_string<W> r; + r.reserve (length + 1); + r.resize (length); + W* rs (const_cast<W*> (r.c_str ())); + + for (std::size_t i (0); i < length; ++s, ++i) + { + rs[i] = *s; + } + + return r; + } + + template <typename W> + XMLCh* wchar_transcoder<W, 2>:: + from (const W* s, std::size_t length) + { + auto_array<XMLCh> r (new XMLCh[length + 1]); + XMLCh* ir (r.get ()); + + for (std::size_t i (0); i < length; ++ir, ++i) + { + *ir = static_cast<XMLCh> (s[i]); + } + + *ir = XMLCh (0); + + return r.release (); + } + + + // wchar_transcoder (specialization for 4-byte wchar_t) + // + template <typename W> + std::basic_string<W> wchar_transcoder<W, 4>:: + to (const XMLCh* s, std::size_t length) + { + const XMLCh* end (s + length); + + // Find what the resulting buffer size will be. + // + std::size_t rl (0); + + for (const XMLCh* p (s); p < end; ++p) + { + rl++; + + if ((*p >= 0xD800) && (*p <= 0xDBFF)) + { + // Make sure we have one more char and it has a valid + // value for the second char in a surrogate pair. + // + if (++p == end || !((*p >= 0xDC00) && (*p <= 0xDFFF))) + throw invalid_utf16_string (); + } + } + + std::basic_string<W> r; + r.reserve (rl + 1); + r.resize (rl); + W* rs (const_cast<W*> (r.c_str ())); + + std::size_t i (0); + + for (const XMLCh* p (s); p < end; ++p) + { + XMLCh x (*p); + + if (x < 0xD800 || x > 0xDBFF) + rs[i++] = W (x); + else + rs[i++] = ((x - 0xD800) << 10) + (*++p - 0xDC00) + 0x10000; + } + + return r; + } + + template <typename W> + XMLCh* wchar_transcoder<W, 4>:: + from (const W* s, std::size_t length) + { + // Find what the resulting buffer size will be. + // + std::size_t rl (0); + + for (const W* p (s); p < s + length; ++p) + { + rl += (*p & 0xFFFF0000) ? 2 : 1; + } + + auto_array<XMLCh> r (new XMLCh[rl + 1]); + XMLCh* ir (r.get ()); + + for (const W* p (s); p < s + length; ++p) + { + W w (*p); + + if (w & 0xFFFF0000) + { + // Surrogate pair. + // + *ir++ = static_cast<XMLCh> (((w - 0x10000) >> 10) + 0xD800); + *ir++ = static_cast<XMLCh> ((w & 0x3FF) + 0xDC00); + } + else + *ir++ = static_cast<XMLCh> (w); + } + + *ir = XMLCh (0); + + return r.release (); + } + } + } + } +} + +#endif // XSD_CXX_XML_STRING_TXX_WCHAR +#endif // XSD_USE_WCHAR diff --git a/xsd/libxsd/xsd/cxx/zc-istream.hxx b/xsd/libxsd/xsd/cxx/zc-istream.hxx new file mode 100644 index 0000000..2ae345f --- /dev/null +++ b/xsd/libxsd/xsd/cxx/zc-istream.hxx @@ -0,0 +1,217 @@ +// file : xsd/cxx/zc-istream.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_CXX_ZC_ISTREAM_HXX +#define XSD_CXX_ZC_ISTREAM_HXX + +#include <string> +#include <istream> + +#include <xsd/cxx/ro-string.hxx> + +namespace xsd +{ + namespace cxx + { + // Input streambuffer that does not copy the underlying + // buffer (zero copy). + // + template <typename C> + class zc_streambuf: public std::basic_streambuf<C> + { + public: + typedef typename std::basic_streambuf<C>::int_type int_type; + typedef typename std::basic_streambuf<C>::traits_type traits_type; + + public: + zc_streambuf (const ro_string<C>&); + zc_streambuf (const std::basic_string<C>&); + + protected: + virtual std::streamsize + showmanyc (); + + virtual int_type + underflow (); + + private: + void + init (); + + private: + zc_streambuf (const zc_streambuf&); + + zc_streambuf& + operator= (const zc_streambuf&); + + private: + ro_string<C> str_; + }; + + + // Input string stream that does not copy the underlying string. + // + template <typename C> + class zc_istream_base + { + protected: + zc_istream_base (const ro_string<C>&); + zc_istream_base (const std::basic_string<C>&); + + protected: + zc_streambuf<C> buf_; + }; + + template <typename C> + class zc_istream: protected zc_istream_base<C>, + public std::basic_istream<C> + { + typedef std::basic_istream<C> base; + + public: + zc_istream (const ro_string<C>&); + zc_istream (const std::basic_string<C>&); + + bool + exhausted () + { + return this->get () == std::basic_istream<C>::traits_type::eof (); + } + + zc_istream& + operator>> (unsigned char& x) + { + if (check_unsigned ()) + static_cast<base&> (*this) >> x; + + return *this; + } + + zc_istream& + operator>> (signed char& x) + { + if (check_signed ()) + static_cast<base&> (*this) >> x; + + return *this; + } + + zc_istream& + operator>> (unsigned short& x) + { + if (check_unsigned ()) + static_cast<base&> (*this) >> x; + + return *this; + } + + zc_istream& + operator>> (short& x) + { + if (check_signed ()) + static_cast<base&> (*this) >> x; + + return *this; + } + + zc_istream& + operator>> (unsigned int& x) + { + if (check_unsigned ()) + static_cast<base&> (*this) >> x; + + return *this; + } + + zc_istream& + operator>> (int& x) + { + if (check_signed ()) + static_cast<base&> (*this) >> x; + + return *this; + } + + zc_istream& + operator>> (unsigned long& x) + { + if (check_unsigned ()) + static_cast<base&> (*this) >> x; + + return *this; + } + + zc_istream& + operator>> (long& x) + { + if (check_signed ()) + static_cast<base&> (*this) >> x; + + return *this; + } + + zc_istream& + operator>> (unsigned long long& x) + { + if (check_unsigned ()) + static_cast<base&> (*this) >> x; + + return *this; + } + + zc_istream& + operator>> (long long& x) + { + if (check_signed ()) + static_cast<base&> (*this) >> x; + + return *this; + } + + template <typename X> + zc_istream& + operator>> (X& x) + { + static_cast<base&> (*this) >> x; + return *this; + } + + private: + bool + check_signed () + { + typename std::basic_istream<C>::traits_type::int_type p (this->peek ()); + bool r ((p >= C ('0') && p <= C ('9')) || p == C ('-') || p == C ('+')); + + if (!r) + this->setstate (std::ios_base::failbit); + + return r; + } + + bool + check_unsigned () + { + typename std::basic_istream<C>::traits_type::int_type p (this->peek ()); + bool r ((p >= C ('0') && p <= C ('9')) || p == C ('+')); + + if (!r) + this->setstate (std::ios_base::failbit); + + return r; + } + + private: + zc_istream (const zc_istream&); + + zc_istream& + operator= (const zc_istream&); + }; + } +} + +#include <xsd/cxx/zc-istream.txx> + +#endif // XSD_CXX_ZC_ISTREAM_HXX diff --git a/xsd/libxsd/xsd/cxx/zc-istream.txx b/xsd/libxsd/xsd/cxx/zc-istream.txx new file mode 100644 index 0000000..8c00a5b --- /dev/null +++ b/xsd/libxsd/xsd/cxx/zc-istream.txx @@ -0,0 +1,94 @@ +// file : xsd/cxx/zc-istream.txx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +namespace xsd +{ + namespace cxx + { + // zc_streambuf + // + template <typename C> + zc_streambuf<C>:: + zc_streambuf (const ro_string<C>& str) + : str_ (str.data (), str.size ()) + { + init (); + } + + template <typename C> + zc_streambuf<C>:: + zc_streambuf (const std::basic_string<C>& str) + : str_ (str) + { + init (); + } + + template <typename C> + void zc_streambuf<C>:: + init () + { + C* b (const_cast<C*> (str_.data ())); + C* e (b + str_.size ()); + + this->setg (b, b, e); + } + + template <typename C> + std::streamsize zc_streambuf<C>:: + showmanyc () + { + return static_cast<std::streamsize> ( + this->egptr () - this->gptr ()); + } + + template <typename C> + typename zc_streambuf<C>::int_type zc_streambuf<C>:: + underflow () + { + int_type r = traits_type::eof (); + + if (this->gptr () < this->egptr ()) + r = traits_type::to_int_type (*this->gptr ()); + + return r; + } + + + // zc_istream_base + // + template <typename C> + zc_istream_base<C>:: + zc_istream_base (const ro_string<C>& str) + : buf_ (str) + { + } + + template <typename C> + zc_istream_base<C>:: + zc_istream_base (const std::basic_string<C>& str) + : buf_ (str) + { + } + + + // zc_istream + // + template <typename C> + zc_istream<C>:: + zc_istream (const ro_string<C>& str) + : zc_istream_base<C> (str), + std::basic_istream<C> (&this->buf_) + { + } + + template <typename C> + zc_istream<C>:: + zc_istream (const std::basic_string<C>& str) + : zc_istream_base<C> (str), + std::basic_istream<C> (&this->buf_) + { + } + } +} diff --git a/xsd/makefile b/xsd/makefile new file mode 100644 index 0000000..0c07b0d --- /dev/null +++ b/xsd/makefile @@ -0,0 +1,96 @@ +# file : makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))build/bootstrap.make + +default := $(out_base)/ +test := $(out_base)/.test +install := $(out_base)/.install +dist := $(out_base)/.dist +dist-win := $(out_base)/.dist-win +clean := $(out_base)/.clean +cleandoc := $(out_base)/.cleandoc + +$(default): $(out_base)/xsd/ \ + $(out_base)/tests/ \ + $(out_base)/examples/ \ + $(out_base)/documentation/ + +# Test. +# +$(test): $(out_base)/tests/.test + + +# Install. +# +$(install): $(out_base)/xsd/.install \ + $(out_base)/libxsd/.install \ + $(out_base)/examples/.install \ + $(out_base)/documentation/.install + $(call install-dir,$(src_base)/dist/examples/build,$(install_doc_dir)/xsd/examples/build) + $(call install-dir,$(src_base)/dist/examples/cxx,$(install_doc_dir)/xsd/examples/cxx,-name makefile) + $(call install-data,$(src_base)/dist/examples/makefile,$(install_doc_dir)/xsd/examples/makefile) + $(call install-data,$(src_base)/FLOSSE,$(install_doc_dir)/xsd/FLOSSE) + $(call install-data,$(src_base)/GPLv2,$(install_doc_dir)/xsd/GPLv2) + $(call install-data,$(src_base)/LICENSE,$(install_doc_dir)/xsd/LICENSE) + $(call install-data,$(src_base)/NEWS,$(install_doc_dir)/xsd/NEWS) + $(call install-data,$(src_base)/dist/README-UNIX,$(install_doc_dir)/xsd/README) + + +# Dist. +# +$(dist): $(out_base)/xsd/.dist \ + $(out_base)/libxsd/.dist \ + $(out_base)/examples/.dist \ + $(out_base)/documentation/.dist + $(call install-dir,$(src_base)/dist/examples/build,$(dist_prefix)/examples/build) + $(call install-dir,$(src_base)/dist/examples/cxx,$(dist_prefix)/examples/cxx,-name makefile) + $(call install-data,$(src_base)/dist/examples/makefile,$(dist_prefix)/examples/makefile) + $(call install-data,$(src_base)/dist/README-UNIX,$(dist_prefix)/README) + $(call install-data,$(src_base)/GPLv2,$(dist_prefix)/GPLv2) + $(call install-data,$(src_base)/FLOSSE,$(dist_prefix)/FLOSSE) + $(call install-data,$(src_base)/LICENSE,$(dist_prefix)/LICENSE) + $(call install-data,$(src_base)/NEWS,$(dist_prefix)/NEWS) + $(call install-data,$(src_base)/version,$(dist_prefix)/version) + +$(dist-win): $(out_base)/xsd/.dist-win \ + $(out_base)/libxsd/.dist-win \ + $(out_base)/examples/.dist-win \ + $(out_base)/documentation/.dist-win + $(call install-dir,$(src_base)/dist/etc,$(dist_prefix)/etc) + $(call install-dir,$(src_base)/dist/examples/build,$(dist_prefix)/examples/build) + $(call install-dir,$(src_base)/dist/examples/cxx,$(dist_prefix)/examples/cxx) + $(call install-data,$(src_base)/dist/examples/makefile,$(dist_prefix)/examples/makefile) + $(call install-data,$(src_base)/dist/README-WINDOWS,$(dist_prefix)/README.txt) + $(call message,,unix2dos $(dist_prefix)/README.txt) + $(call install-data,$(src_base)/dist/README-UNIX,$(dist_prefix)/README-CYGWIN.txt) + $(call message,,unix2dos $(dist_prefix)/README-CYGWIN.txt) + $(call install-data,$(src_base)/GPLv2,$(dist_prefix)/GPLv2.txt) + $(call message,,unix2dos $(dist_prefix)/GPLv2.txt) + $(call install-data,$(src_base)/FLOSSE,$(dist_prefix)/FLOSSE.txt) + $(call message,,unix2dos $(dist_prefix)/FLOSSE.txt) + $(call install-data,$(src_base)/LICENSE,$(dist_prefix)/LICENSE.txt) + $(call message,,unix2dos $(dist_prefix)/LICENSE.txt) + $(call install-data,$(src_base)/NEWS,$(dist_prefix)/NEWS.txt) + $(call message,,unix2dos $(dist_prefix)/NEWS.txt) + $(call install-data,$(src_base)/version,$(dist_prefix)/version.txt) + $(call message,,unix2dos $(dist_prefix)/version.txt) + + +# Clean. +# +$(clean): $(out_base)/xsd/.clean \ + $(out_base)/tests/.clean \ + $(out_base)/examples/.clean + +$(cleandoc): $(out_base)/documentation/.cleandoc + +$(call include,$(bld_root)/install.make) + +$(call import,$(src_base)/xsd/makefile) +$(call import,$(src_base)/libxsd/makefile) +$(call import,$(src_base)/tests/makefile) +$(call import,$(src_base)/examples/makefile) +$(call import,$(src_base)/documentation/makefile) diff --git a/xsd/tests/clash/clash.xsd b/xsd/tests/clash/clash.xsd new file mode 100644 index 0000000..8458908 --- /dev/null +++ b/xsd/tests/clash/clash.xsd @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8"?> +<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.w3.org/2001/XMLSchema XMLSchema.xsd" + xmlns="http://www.codesynthesis.com/xmlns/test/bar" + xmlns:f="http://www.codesynthesis.com/xmlns/test/foo" + targetNamespace="http://www.codesynthesis.com/xmlns/test/bar"> + + <xsd:import namespace="http://www.codesynthesis.com/xmlns/test/foo" schemaLocation="foo.xsd"/> + + <!-- example of a name clash. --> + + <xsd:element name="foo" type="xsd:string"/> + + <xsd:complexType name="Foo"> + <xsd:sequence> + <xsd:element ref="foo"/> + <xsd:element name="foo" type="xsd:long"/> + <xsd:element ref="f:foo"/> + <xsd:element ref="f:foo"/> + </xsd:sequence> + <xsd:attribute name="foo" type="xsd:string"/> + </xsd:complexType> + +</xsd:schema> diff --git a/xsd/tests/clash/foo.xsd b/xsd/tests/clash/foo.xsd new file mode 100644 index 0000000..8a06ba8 --- /dev/null +++ b/xsd/tests/clash/foo.xsd @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="UTF-8"?> +<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.w3.org/2001/XMLSchema XMLSchema.xsd" + xmlns="http://www.codesynthesis.com/xmlns/test/foo" + targetNamespace="http://www.codesynthesis.com/xmlns/test/foo"> + + <xsd:element name="foo" type="xsd:int"/> + <xsd:element name="bar" type="xsd:int"/> + +</xsd:schema> diff --git a/xsd/tests/code/name-conflict/test.xsd b/xsd/tests/code/name-conflict/test.xsd new file mode 100644 index 0000000..a017cc8 --- /dev/null +++ b/xsd/tests/code/name-conflict/test.xsd @@ -0,0 +1,40 @@ +<?xml version="1.0"?> +<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + + <xsd:simpleType name="enumeration"> + <xsd:restriction base="xsd:string"> + <xsd:enumeration value="enumeration"/> + <xsd:enumeration value="enumeration1"/> + </xsd:restriction> + </xsd:simpleType> + + <xsd:element name="enumeration" type="enumeration"/> + + <xsd:complexType name="complex"> + <xsd:sequence> + <xsd:element name="complex" type="xsd:string"/> + <xsd:element name="complex1" type="xsd:string"/> + <xsd:element name="type" type="xsd:string"/> + <xsd:element name="container" type="xsd:string" minOccurs="0"/> + </xsd:sequence> + </xsd:complexType> + + <xsd:element name="complex" type="complex"/> + + <xsd:complexType name="anonymous"> + <xsd:sequence> + <xsd:element name="anonymous"> + <xsd:complexType> <!-- this is really twisted --> + <xsd:sequence> + <xsd:element name="anonymous2" type="xsd:string"/> + <xsd:element name="anonymous21" type="xsd:string"/> + </xsd:sequence> + </xsd:complexType> + </xsd:element> + <xsd:element name="anonymous1" type="xsd:string"/> + </xsd:sequence> + </xsd:complexType> + + <xsd:element name="anonymous" type="anonymous"/> + +</xsd:schema> diff --git a/xsd/tests/code/name-escaping/test.xsd b/xsd/tests/code/name-escaping/test.xsd new file mode 100644 index 0000000..08c7530 --- /dev/null +++ b/xsd/tests/code/name-escaping/test.xsd @@ -0,0 +1,60 @@ +<?xml version="1.0" encoding="UTF-8"?> +<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.w3.org/2001/XMLSchema XMLSchema.xsd" + xmlns="http://www.codesynthesis.com/xmlns/test" + targetNamespace="http://www.codesynthesis.com/xmlns/test"> + + <!-- type --> + + <xsd:simpleType name="long"> + <xsd:restriction base="xsd:long"/> + </xsd:simpleType> + + <xsd:simpleType name="strange.type-name."> + <xsd:restriction base="long"/> + </xsd:simpleType> + + <xsd:element name="one-two-explicit"> + <xsd:simpleType> + <xsd:restriction base="xsd:NCName"> + <xsd:enumeration value="on.e-"/> + <xsd:enumeration value="t-wo."/> + <xsd:enumeration value="explicit"/> + </xsd:restriction> + </xsd:simpleType> + </xsd:element> + + + <!-- element [global/local] --> + + <xsd:element name="switch" type="long"/> + <xsd:element name="strange.element-name." type="strange.type-name."/> + + + <xsd:element name="with-anonymous-type-1"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="for" type="long"/> + <xsd:element name="switch" minOccurs="0" type="long"/> + <xsd:element name="strange.element-name." maxOccurs="unbounded" type="strange.type-name."/> + </xsd:sequence> + </xsd:complexType> + </xsd:element> + + + + <!-- attributes [global/local] --> + + <xsd:attribute name="default" type="long"/> + <xsd:attribute name="strange.attribute-name." type="strange.type-name."/> + + <xsd:element name="with-anonymous-type-2"> + <xsd:complexType> + <xsd:attribute name="and" type="long" use="required"/> + <xsd:attribute name="strange.attribute-name." type="strange.type-name."/> + </xsd:complexType> + </xsd:element> + + +</xsd:schema> diff --git a/xsd/tests/cxx/makefile b/xsd/tests/cxx/makefile new file mode 100644 index 0000000..2a9f659 --- /dev/null +++ b/xsd/tests/cxx/makefile @@ -0,0 +1,17 @@ +# file : tests/cxx/makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../build/bootstrap.make + +default := $(out_base)/ +test := $(out_base)/.test +clean := $(out_base)/.clean + +$(default): $(out_base)/parser/ $(out_base)/tree/ +$(test): $(out_base)/parser/.test $(out_base)/tree/.test +$(clean): $(out_base)/parser/.clean $(out_base)/tree/.clean + +$(call import,$(src_base)/parser/makefile) +$(call import,$(src_base)/tree/makefile) diff --git a/xsd/tests/cxx/parser/built-in/driver.cxx b/xsd/tests/cxx/parser/built-in/driver.cxx new file mode 100644 index 0000000..11cae41 --- /dev/null +++ b/xsd/tests/cxx/parser/built-in/driver.cxx @@ -0,0 +1,531 @@ +// file : tests/cxx/parser/built-in/driver.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +// Test built-in type parsing. +// + +#include <string> +#include <iostream> + +#include "test-pskel.hxx" + +using namespace std; +using namespace test; +using xml_schema::ro_string; + +struct any_type_pimpl: xml_schema::any_type_pimpl +{ + virtual void + pre () + { + cout << "{" << endl; + } + + virtual void + _start_any_element (ro_string const&, + ro_string const& n, + ro_string const*) + { + cout << " start any element '" << n << "'" << endl; + } + + virtual void + _end_any_element (ro_string const&, ro_string const& n) + { + cout << " end any element '" << n << "'" << endl; + } + + virtual void + _any_attribute (ro_string const&, + ro_string const& n, + ro_string const& v) + { + cout << " any attribute " << n << " = '" << v << "'" << endl; + } + + virtual void + _any_characters (ro_string const& s) + { + cout << " any text: '" << s << "'" << endl; + } + + virtual void + post_any_type () + { + cout << "}" << endl + << endl; + } +}; + +struct any_simple_type_pimpl: xml_schema::any_simple_type_pimpl +{ + virtual void + pre () + { + cout << "{" << endl; + } + + virtual void + _any_characters (ro_string const& s) + { + cout << " any text: '" << s << "'" << endl; + } + + virtual void + post_any_simple_type () + { + cout << "}" << endl + << endl; + } +}; + +struct type_pimpl: type_pskel +{ + virtual void + boolean (bool v) + { + cout << v << endl; + } + + virtual void + byte (signed char v) + { + cout << short (v) << endl; + } + + virtual void + unsigned_byte (unsigned char v) + { + cout << (unsigned short) (v) << endl; + } + + virtual void + short_ (short v) + { + cout << v << endl; + } + + virtual void + unsigned_short (unsigned short v) + { + cout << v << endl; + } + + virtual void + int_ (int v) + { + cout << v << endl; + } + + virtual void + unsigned_int (unsigned int v) + { + cout << v << endl; + } + + virtual void + long_ (long long v) + { + cout << v << endl; + } + + virtual void + unsigned_long (unsigned long long v) + { + cout << v << endl; + } + + virtual void + integer (long long v) + { + cout << v << endl; + } + + virtual void + negative_integer (long long v) + { + cout << v << endl; + } + + + virtual void + non_positive_integer (long long v) + { + cout << v << endl; + } + + + virtual void + positive_integer (unsigned long long v) + { + cout << v << endl; + } + + virtual void + non_negative_integer (unsigned long long v) + { + cout << v << endl; + } + + virtual void + float_ (float v) + { + cout << v << endl; + } + + virtual void + double_ (double v) + { + cout << v << endl; + } + + virtual void + decimal (double v) + { + cout << v << endl; + } + + virtual void + string (std::string const& v) + { + cout << "'" << v << "'" << endl; + } + + virtual void + normalized_string (std::string const& v) + { + cout << "'" << v << "'" << endl; + } + + virtual void + token (std::string const& v) + { + cout << "'" << v << "'" << endl; + } + + virtual void + name (std::string const& v) + { + cout << "'" << v << "'" << endl; + } + + virtual void + nmtoken (std::string const& v) + { + cout << "'" << v << "'" << endl; + } + + virtual void + nmtokens (xml_schema::string_sequence const& s) + { + cout << "'"; + + for (xml_schema::string_sequence::const_iterator i (s.begin ()); + i != s.end (); ++i) + cout << *i << " "; + + cout << "'" << endl; + } + + virtual void + ncname (std::string const& v) + { + cout << "'" << v << "'" << endl; + } + + virtual void + id (std::string const& v) + { + cout << "'" << v << "'" << endl; + } + + virtual void + idref (std::string const& v) + { + cout << "'" << v << "'" << endl; + } + + virtual void + idrefs (xml_schema::string_sequence const& s) + { + cout << "'"; + + for (xml_schema::string_sequence::const_iterator i (s.begin ()); + i != s.end (); ++i) + cout << *i << " "; + + cout << "'" << endl; + } + + virtual void + language (std::string const& v) + { + cout << "'" << v << "'" << endl; + } + + virtual void + uri (std::string const& v) + { + cout << "'" << v << "'" << endl; + } + + virtual void + qname (xml_schema::qname const& v) + { + cout << "'" << v.prefix () << ":" << v.name () << "'" << endl; + } + + virtual void + base64_binary (std::auto_ptr<xml_schema::buffer> v) + { + std::string tmp (v->data (), v->size ()); + cout << "'" << tmp << "'" << endl; + } + + virtual void + hex_binary (std::auto_ptr<xml_schema::buffer> v) + { + std::string tmp (v->data (), v->size ()); + cout << "'" << tmp << "'" << endl; + } + + virtual void + gday (xml_schema::gday const& v) + { + cout << v.day (); + + if (v.zone_present ()) + cout << (v.zone_hours () < 0 ? "" : "+") << v.zone_hours () + << ':' << v.zone_minutes (); + + cout << endl; + } + + virtual void + gmonth (xml_schema::gmonth const& v) + { + cout << v.month (); + + if (v.zone_present ()) + cout << (v.zone_hours () < 0 ? "" : "+") << v.zone_hours () + << ':' << v.zone_minutes (); + + cout << endl; + } + + virtual void + gyear (xml_schema::gyear const& v) + { + cout << v.year (); + + if (v.zone_present ()) + cout << (v.zone_hours () < 0 ? "" : "+") << v.zone_hours () + << ':' << v.zone_minutes (); + + cout << endl; + } + + virtual void + gmonth_day (xml_schema::gmonth_day const& v) + { + cout << v.month () << '-' << v.day (); + + if (v.zone_present ()) + cout << (v.zone_hours () < 0 ? "" : "+") << v.zone_hours () + << ':' << v.zone_minutes (); + + cout << endl; + } + + virtual void + gyear_month (xml_schema::gyear_month const& v) + { + cout << v.year () << '-' << v.month (); + + if (v.zone_present ()) + cout << (v.zone_hours () < 0 ? "" : "+") << v.zone_hours () + << ':' << v.zone_minutes (); + + cout << endl; + } + + virtual void + date (xml_schema::date const& v) + { + cout << v.year () << '-' << v.month () << '-' << v.day (); + + if (v.zone_present ()) + cout << (v.zone_hours () < 0 ? "" : "+") << v.zone_hours () + << ':' << v.zone_minutes (); + + cout << endl; + } + + virtual void + time (xml_schema::time const& v) + { + cout << v.hours () << ':' << v.minutes () << ':' << v.seconds (); + + if (v.zone_present ()) + cout << (v.zone_hours () < 0 ? "" : "+") << v.zone_hours () + << ':' << v.zone_minutes (); + + cout << endl; + } + + virtual void + date_time (xml_schema::date_time const& v) + { + cout << v.year () << '-' << v.month () << '-' << v.day () << 'T' + << v.hours () << ':' << v.minutes () << ':' << v.seconds (); + + if (v.zone_present ()) + cout << (v.zone_hours () < 0 ? "" : "+") << v.zone_hours () + << ':' << v.zone_minutes (); + + cout << endl; + } + + virtual void + duration (xml_schema::duration const& v) + { + cout << (v.negative () ? "-" : "") << 'P' + << v.years () << 'Y' + << v.months () << 'M' + << v.days () << 'D' + << 'T' + << v.hours () << 'H' + << v.minutes () << 'M' + << v.seconds () << 'S' + << endl; + } +}; + +int +main (int argc, char* argv[]) +{ + if (argc != 2) + { + cerr << "usage: " << argv[0] << " test.xml" << endl; + return 1; + } + + try + { + any_type_pimpl any_type_p; + any_simple_type_pimpl any_simple_type_p; + + xml_schema::boolean_pimpl boolean_p; + + xml_schema::byte_pimpl byte_p; + xml_schema::unsigned_byte_pimpl unsigned_byte_p; + xml_schema::short_pimpl short_p; + xml_schema::unsigned_short_pimpl unsigned_short_p; + xml_schema::int_pimpl int_p; + xml_schema::unsigned_int_pimpl unsigned_int_p; + xml_schema::long_pimpl long_p; + xml_schema::unsigned_long_pimpl unsigned_long_p; + + xml_schema::integer_pimpl integer_p; + xml_schema::negative_integer_pimpl negative_integer_p; + xml_schema::non_positive_integer_pimpl non_positive_integer_p; + xml_schema::positive_integer_pimpl positive_integer_p; + xml_schema::non_negative_integer_pimpl non_negative_integer_p; + + xml_schema::float_pimpl float_p; + xml_schema::double_pimpl double_p; + xml_schema::decimal_pimpl decimal_p; + + xml_schema::string_pimpl string_p; + xml_schema::normalized_string_pimpl normalized_string_p; + xml_schema::token_pimpl token_p; + xml_schema::name_pimpl name_p; + xml_schema::nmtoken_pimpl nmtoken_p; + xml_schema::nmtokens_pimpl nmtokens_p; + xml_schema::ncname_pimpl ncname_p; + xml_schema::id_pimpl id_p; + xml_schema::idref_pimpl idref_p; + xml_schema::idrefs_pimpl idrefs_p; + + xml_schema::language_pimpl language_p; + xml_schema::uri_pimpl uri_p; + xml_schema::qname_pimpl qname_p; + + xml_schema::base64_binary_pimpl base64_binary_p; + xml_schema::hex_binary_pimpl hex_binary_p; + + xml_schema::gday_pimpl gday_p; + xml_schema::gmonth_pimpl gmonth_p; + xml_schema::gyear_pimpl gyear_p; + xml_schema::gmonth_day_pimpl gmonth_day_p; + xml_schema::gyear_month_pimpl gyear_month_p; + xml_schema::date_pimpl date_p; + xml_schema::time_pimpl time_p; + xml_schema::date_time_pimpl date_time_p; + xml_schema::duration_pimpl duration_p; + + type_pimpl type_p; + + type_p.parsers (any_type_p, + any_simple_type_p, + boolean_p, + byte_p, + unsigned_byte_p, + short_p, + unsigned_short_p, + int_p, + unsigned_int_p, + long_p, + unsigned_long_p, + integer_p, + negative_integer_p, + non_positive_integer_p, + positive_integer_p, + non_negative_integer_p, + float_p, + double_p, + decimal_p, + string_p, + normalized_string_p, + token_p, + name_p, + nmtoken_p, + nmtokens_p, + ncname_p, + id_p, + idref_p, + idrefs_p, + language_p, + uri_p, + qname_p, + base64_binary_p, + hex_binary_p, + gday_p, + gmonth_p, + gyear_p, + gmonth_day_p, + gyear_month_p, + date_p, + time_p, + date_time_p, + duration_p); + + xml_schema::document doc_p (type_p, "test", "root"); + + type_p.pre (); + doc_p.parse (argv[1]); + type_p.post_type (); + } + catch (xml_schema::exception const& e) + { + cerr << e << endl; + return 1; + } + catch (std::ios_base::failure const&) + { + cerr << "io failure" << endl; + return 1; + } +} diff --git a/xsd/tests/cxx/parser/built-in/makefile b/xsd/tests/cxx/parser/built-in/makefile new file mode 100644 index 0000000..3164219 --- /dev/null +++ b/xsd/tests/cxx/parser/built-in/makefile @@ -0,0 +1,79 @@ +# file : tests/cxx/parser/built-in/makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../../build/bootstrap.make + +xsd := test.xsd +cxx := driver.cxx + +obj := $(addprefix $(out_base)/,$(cxx:.cxx=.o) $(xsd:.xsd=-pskel.o)) +dep := $(obj:.o=.o.d) + +driver := $(out_base)/driver +test := $(out_base)/.test +clean := $(out_base)/.clean + +# Import. +# +$(call import,\ + $(scf_root)/import/libxerces-c/stub.make,\ + l: xerces_c.l,cpp-options: xerces_c.l.cpp-options) + +# Build. +# +$(driver): $(obj) $(xerces_c.l) + +$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): $(xerces_c.l.cpp-options) + +genf := $(xsd:.xsd=-pskel.hxx) $(xsd:.xsd=-pskel.ixx) $(xsd:.xsd=-pskel.cxx) +gen := $(addprefix $(out_base)/,$(genf)) + +$(gen): xsd := $(out_root)/xsd/xsd +$(gen): $(out_root)/xsd/xsd + +$(call include-dep,$(dep)) + +# Convenience alias for default target. +# +$(out_base)/: $(driver) + + +# Test. +# +$(test): driver := $(driver) +$(test): $(driver) $(src_base)/test.xml $(src_base)/output + $(call message,test $$1,$$1 $(src_base)/test.xml | diff -u $(src_base)/output -,$(driver)) + +# Clean. +# +$(clean): $(driver).o.clean \ + $(addsuffix .cxx.clean,$(obj)) \ + $(addsuffix .cxx.clean,$(dep)) \ + $(addprefix $(out_base)/,$(xsd:.xsd=-pskel.cxx.xsd.clean)) + +# Generated .gitignore. +# +ifeq ($(out_base),$(src_base)) +$(gen): | $(out_base)/.gitignore +$(driver): | $(out_base)/.gitignore + +$(out_base)/.gitignore: files := driver $(genf) +$(clean): $(out_base)/.gitignore.clean + +$(call include,$(bld_root)/git/gitignore.make) +endif + +# How to. +# +$(call include,$(bld_root)/cxx/o-e.make) +$(call include,$(bld_root)/cxx/cxx-o.make) +$(call include,$(bld_root)/cxx/cxx-d.make) +$(call include,$(scf_root)/xsd/parser/xsd-cxx.make) + + +# Dependencies. +# +$(call import,$(src_root)/xsd/makefile) diff --git a/xsd/tests/cxx/parser/built-in/output b/xsd/tests/cxx/parser/built-in/output new file mode 100644 index 0000000..756abcd --- /dev/null +++ b/xsd/tests/cxx/parser/built-in/output @@ -0,0 +1,164 @@ +{ + any attribute x = 'x' + any text: ' + ' + start any element 'a' + any text: 'a' + end any element 'a' + any text: ' + ' + start any element 'any-type' + any attribute x = 'xxx' + any text: 'aaa' + start any element 'a' + any text: 'bbb' + end any element 'a' + any text: 'ccc' + end any element 'any-type' + any text: ' + ' +} + +{ + any text: '123abc' +} + +1 +0 +1 +0 +0 +127 +-128 +123 +0 +255 +123 +0 +32767 +-32768 +-12345 +0 +65535 +12345 +0 +2147483647 +-2147483648 +-1234567890 +0 +4294967295 +1234567890 +0 +9223372036854775807 +-9223372036854775808 +-1234567890123456789 +0 +18446744073709551615 +12345678901234567890 +0 +2147483647 +-2147483648 +-1234567890 +-2147483648 +-1234567890 +0 +-2147483648 +-1234567890 +4294967295 +1234567890 +0 +4294967295 +1234567890 +0 +0 +-0 +inf +-inf +nan +123.567 +123.567 +-1.23567e+07 +-4.5e-06 +0 +0 +-0 +inf +-inf +nan +123.567 +123.567 +-1.23567e+07 +-4.5e-06 +0 +0 +-0 +123.567 +123.567 +-123.567 +'string space +newline + ' +' string space newline ' +'string space newline' +'as123:345-.abs' +'1as123:345-.abs' +'abc 123 ' +'as123_345-.abs' +'as123_345-.abs' +'abc' +'a123' +'as123_345-.abs' +'abc a123 ' +'x' +'en' +'en-us' +'one-two-three-four44-seven77-eight888' +'' +'relative' +'#id' +'http://www.example.com/foo#bar' +':schemaLocation' +'xsi:schemaLocation' +'12345abcjk' +'a' +'ab' +'abc' +'' +'12345abcjk' +12+12:0 +1 +31 +15+0:0 +15-14:0 +10+12:0 +1 +12+0:0 +2007+12:0 +1 +-20000+0:0 +10-28+12:0 +12-31 +1-1+0:0 +2007-12+12:0 +-2007-10 +20007-10+0:0 +-20007-1 +2007-12-26+12:0 +-2007-10-15 +20007-12-31+0:0 +-20007-1-1 +12:46:23.456+12:0 +12:13:14 +12:13:14+0:0 +2007-12-26T12:13:14.123+12:0 +-2007-10-15T12:13:14 +20007-12-31T12:13:14+0:0 +-20007-1-1T12:13:14 +-P2007Y13M32DT25H61M61.123S +P1Y0M0DT0H0M0S +P0Y1M0DT0H0M0S +P0Y0M1DT0H0M0S +P0Y0M0DT1H0M0S +P0Y0M0DT0H1M0S +P0Y0M0DT0H0M1.1S +P1Y0M0DT0H0M1S diff --git a/xsd/tests/cxx/parser/built-in/test.xml b/xsd/tests/cxx/parser/built-in/test.xml new file mode 100644 index 0000000..8d9332a --- /dev/null +++ b/xsd/tests/cxx/parser/built-in/test.xml @@ -0,0 +1,199 @@ +<t:root xmlns:t="test" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="test test.xsd"> + + <any-type x="x"> + <a>a</a> + <any-type x="xxx">aaa<a>bbb</a>ccc</any-type> + </any-type> + + <any-simple-type>123abc</any-simple-type> + + <boolean>1</boolean> + <boolean> 0 </boolean> + <boolean>true</boolean> + <boolean> false </boolean> + + <byte>0</byte> + <byte>+127</byte> + <byte>-128</byte> + <byte> 123 </byte> + + <unsigned-byte>0</unsigned-byte> + <unsigned-byte>255</unsigned-byte> + <unsigned-byte> 123 </unsigned-byte> + + <short>0</short> + <short>+32767</short> + <short>-32768</short> + <short> -12345 </short> + + <unsigned-short>0</unsigned-short> + <unsigned-short>65535</unsigned-short> + <unsigned-short> 12345 </unsigned-short> + + <int>0</int> + <int>+2147483647</int> + <int>-2147483648</int> + <int> -1234567890 </int> + + <unsigned-int>0</unsigned-int> + <unsigned-int>4294967295</unsigned-int> + <unsigned-int> 1234567890 </unsigned-int> + + <long>0</long> + <long>+9223372036854775807</long> + <long>-9223372036854775808</long> + <long> -1234567890123456789 </long> + + <unsigned-long>0</unsigned-long> + <unsigned-long>18446744073709551615</unsigned-long> + <unsigned-long> 12345678901234567890 </unsigned-long> + + <integer>0</integer> + <integer> +2147483647 </integer> + <integer>-02147483648</integer> + <integer>-1234567890</integer> + + <negative-integer>-02147483648</negative-integer> + <negative-integer> -1234567890 </negative-integer> + + <non-positive-integer>0</non-positive-integer> + <non-positive-integer>-02147483648</non-positive-integer> + <non-positive-integer> -1234567890 </non-positive-integer> + + <positive-integer>4294967295</positive-integer> + <positive-integer> +01234567890 </positive-integer> + + <non-negative-integer>0</non-negative-integer> + <non-negative-integer>4294967295</non-negative-integer> + <non-negative-integer> +01234567890 </non-negative-integer> + + <float>0</float> + <float>+0</float> + <float>-0</float> + <float>INF</float> + <float>-INF</float> + <float>NaN</float> + <float> 123.567 </float> + <float>+123.567</float> + <float>-123.567e5</float> + <float>-.45E-5</float> + + <double>0</double> + <double>+0</double> + <double>-0</double> + <double>INF</double> + <double>-INF</double> + <double>NaN</double> + <double> 123.567 </double> + <double>+123.567</double> + <double>-123.567e5</double> + <double>-.45E-5</double> + + <decimal>0</decimal> + <decimal>+0</decimal> + <decimal>-0</decimal> + <decimal> 123.567 </decimal> + <decimal>+123.567</decimal> + <decimal>-123.567</decimal> + + <string>string space +newline + </string> + + <normalized-string> string space +newline + + </normalized-string> + + <token> string space +newline + + </token> + + <name> as123:345-.abs </name> + + <nmtoken> 1as123:345-.abs </nmtoken> + + <nmtokens> abc 123 </nmtokens> + + <ncname> as123_345-.abs </ncname> + + <id> as123_345-.abs </id> + <id> abc </id> + <id> a123 </id> + + <idref> as123_345-.abs </idref> + + <idrefs> abc a123 </idrefs> + + <language> x </language> + <language> en </language> + <language> en-us </language> + <language>one-two-three-four44-seven77-eight888</language> + + <uri> </uri> + <uri> relative </uri> + <uri> #id </uri> + <uri> http://www.example.com/foo#bar </uri> + + <qname>schemaLocation</qname> + <qname>xsi:schemaLocation</qname> + + <base64_binary> MTIzND + VhYmNqaw = =</base64_binary> + <base64_binary>YQ==</base64_binary> + <base64_binary>YWI=</base64_binary> + <base64_binary>YWJj</base64_binary> + + <hex_binary> </hex_binary> + <hex_binary> 31323334356162636a6b </hex_binary> + + <gday> ---12+12:00 </gday> + <gday>---01</gday> + <gday>---31</gday> + <gday>---15Z</gday> + <gday>---15-14:00</gday> + + <gmonth> --10+12:00 </gmonth> + <gmonth>--01</gmonth> + <gmonth>--12Z</gmonth> + + <gyear> 2007+12:00 </gyear> + <gyear>0001</gyear> + <gyear>-20000Z</gyear> + + <gmonth_day> --10-28+12:00 </gmonth_day> + <gmonth_day>--12-31</gmonth_day> + <gmonth_day>--01-01Z</gmonth_day> + + <gyear_month> 2007-12+12:00 </gyear_month> + <gyear_month>-2007-10</gyear_month> + <gyear_month>20007-10Z</gyear_month> + <gyear_month>-20007-01</gyear_month> + + <date> 2007-12-26+12:00 </date> + <date>-2007-10-15</date> + <date>20007-12-31Z</date> + <date>-20007-01-01</date> + + <time> 12:46:23.456+12:00 </time> + <time>12:13:14</time> + <time>12:13:14Z</time> + + <date_time> 2007-12-26T12:13:14.123+12:00 </date_time> + <date_time>-2007-10-15T12:13:14</date_time> + <date_time>20007-12-31T12:13:14Z</date_time> + <date_time>-20007-01-01T12:13:14</date_time> + + <duration> -P2007Y13M32DT25H61M61.123S </duration> + <duration>P1Y</duration> + <duration>P1M</duration> + <duration>P1D</duration> + <duration>PT1H</duration> + <duration>PT1M</duration> + <duration>PT1.1S</duration> + <duration>P1YT1S</duration> + +</t:root> diff --git a/xsd/tests/cxx/parser/built-in/test.xsd b/xsd/tests/cxx/parser/built-in/test.xsd new file mode 100644 index 0000000..9c00eb4 --- /dev/null +++ b/xsd/tests/cxx/parser/built-in/test.xsd @@ -0,0 +1,63 @@ +<?xml version="1.0"?> +<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:t="test" targetNamespace="test"> + + <complexType name="type"> + <sequence> + <element name="any-type" type="anyType" maxOccurs="unbounded"/> + <element name="any-simple-type" type="anySimpleType" maxOccurs="unbounded"/> + + <element name="boolean" type="boolean" maxOccurs="unbounded"/> + + <element name="byte" type="byte" maxOccurs="unbounded"/> + <element name="unsigned-byte" type="unsignedByte" maxOccurs="unbounded"/> + <element name="short" type="short" maxOccurs="unbounded"/> + <element name="unsigned-short" type="unsignedShort" maxOccurs="unbounded"/> + <element name="int" type="int" maxOccurs="unbounded"/> + <element name="unsigned-int" type="unsignedInt" maxOccurs="unbounded"/> + <element name="long" type="long" maxOccurs="unbounded"/> + <element name="unsigned-long" type="unsignedLong" maxOccurs="unbounded"/> + + <element name="integer" type="integer" maxOccurs="unbounded"/> + <element name="negative-integer" type="negativeInteger" maxOccurs="unbounded"/> + <element name="non-positive-integer" type="nonPositiveInteger" maxOccurs="unbounded"/> + <element name="positive-integer" type="positiveInteger" maxOccurs="unbounded"/> + <element name="non-negative-integer" type="nonNegativeInteger" maxOccurs="unbounded"/> + + <element name="float" type="float" maxOccurs="unbounded"/> + <element name="double" type="double" maxOccurs="unbounded"/> + <element name="decimal" type="decimal" maxOccurs="unbounded"/> + + <element name="string" type="string" maxOccurs="unbounded"/> + <element name="normalized-string" type="normalizedString" maxOccurs="unbounded"/> + <element name="token" type="token" maxOccurs="unbounded"/> + <element name="name" type="Name" maxOccurs="unbounded"/> + <element name="nmtoken" type="NMTOKEN" maxOccurs="unbounded"/> + <element name="nmtokens" type="NMTOKENS" maxOccurs="unbounded"/> + <element name="ncname" type="NCName" maxOccurs="unbounded"/> + <element name="id" type="ID" maxOccurs="unbounded"/> + <element name="idref" type="IDREF" maxOccurs="unbounded"/> + <element name="idrefs" type="IDREFS" maxOccurs="unbounded"/> + + <element name="language" type="language" maxOccurs="unbounded"/> + <element name="uri" type="anyURI" maxOccurs="unbounded"/> + <element name="qname" type="QName" maxOccurs="unbounded"/> + + <element name="base64_binary" type="base64Binary" maxOccurs="unbounded"/> + <element name="hex_binary" type="hexBinary" maxOccurs="unbounded"/> + + <element name="gday" type="gDay" maxOccurs="unbounded"/> + <element name="gmonth" type="gMonth" maxOccurs="unbounded"/> + <element name="gyear" type="gYear" maxOccurs="unbounded"/> + <element name="gmonth_day" type="gMonthDay" maxOccurs="unbounded"/> + <element name="gyear_month" type="gYearMonth" maxOccurs="unbounded"/> + <element name="date" type="date" maxOccurs="unbounded"/> + <element name="time" type="time" maxOccurs="unbounded"/> + <element name="date_time" type="dateTime" maxOccurs="unbounded"/> + <element name="duration" type="duration" maxOccurs="unbounded"/> + + </sequence> + </complexType> + + <element name="root" type="t:type"/> + +</schema> diff --git a/xsd/tests/cxx/parser/enumeration/driver.cxx b/xsd/tests/cxx/parser/enumeration/driver.cxx new file mode 100644 index 0000000..fdb0134 --- /dev/null +++ b/xsd/tests/cxx/parser/enumeration/driver.cxx @@ -0,0 +1,83 @@ +// file : tests/cxx/parser/enumeration/driver.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +// Test xsd:enumeration parsing. +// + +#include <string> +#include <iostream> + +#include "test-pskel.hxx" + +using namespace std; +using namespace xml_schema; + +struct digit_pimpl: test::digit_pskel, int_pimpl +{ +}; + +struct gender_pimpl: test::gender_pskel, string_pimpl +{ + virtual ::gender + post_gender () + { + std::string str (post_string ()); + + if (str == "male") + return male; + else + return female; + } +}; + +struct type_pimpl: test::type_pskel +{ + virtual void + digit (int i) + { + cout << i << endl; + } + + virtual void + gender (::gender g) + { + cout << g << endl; + } +}; + +int +main (int argc, char* argv[]) +{ + if (argc != 2) + { + cerr << "usage: " << argv[0] << " test.xml" << endl; + return 1; + } + + try + { + digit_pimpl digit_p; + gender_pimpl gender_p; + type_pimpl type_p; + + type_p.parsers (digit_p, gender_p); + + document doc_p (type_p, "test", "root"); + + type_p.pre (); + doc_p.parse (argv[1]); + type_p.post_type (); + } + catch (xml_schema::exception const& e) + { + cerr << e << endl; + return 1; + } + catch (std::ios_base::failure const&) + { + cerr << "io failure" << endl; + return 1; + } +} diff --git a/xsd/tests/cxx/parser/enumeration/gender.hxx b/xsd/tests/cxx/parser/enumeration/gender.hxx new file mode 100644 index 0000000..8e5dbfd --- /dev/null +++ b/xsd/tests/cxx/parser/enumeration/gender.hxx @@ -0,0 +1,15 @@ +// file : tests/cxx/parser/enumeration/gender.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef GENDER_HXX +#define GENDER_HXX + +enum gender +{ + male, + female +}; + +#endif // GENDER_HXX diff --git a/xsd/tests/cxx/parser/enumeration/makefile b/xsd/tests/cxx/parser/enumeration/makefile new file mode 100644 index 0000000..5776cbe --- /dev/null +++ b/xsd/tests/cxx/parser/enumeration/makefile @@ -0,0 +1,80 @@ +# file : tests/cxx/parser/enumeration/makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../../build/bootstrap.make + +xsd := test.xsd +cxx := driver.cxx + +obj := $(addprefix $(out_base)/,$(cxx:.cxx=.o) $(xsd:.xsd=-pskel.o)) +dep := $(obj:.o=.o.d) + +driver := $(out_base)/driver +test := $(out_base)/.test +clean := $(out_base)/.clean + +# Import. +# +$(call import,\ + $(scf_root)/import/libxerces-c/stub.make,\ + l: xerces_c.l,cpp-options: xerces_c.l.cpp-options) + +# Build. +# +$(driver): $(obj) $(xerces_c.l) + +$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): $(xerces_c.l.cpp-options) + +genf := $(xsd:.xsd=-pskel.hxx) $(xsd:.xsd=-pskel.ixx) $(xsd:.xsd=-pskel.cxx) +gen := $(addprefix $(out_base)/,$(genf)) + +$(gen): xsd := $(out_root)/xsd/xsd +$(gen): xsd_options := --type-map $(src_base)/test.map +$(gen): $(out_root)/xsd/xsd $(src_base)/test.map + +$(call include-dep,$(dep)) + +# Convenience alias for default target. +# +$(out_base)/: $(driver) + + +# Test. +# +$(test): driver := $(driver) +$(test): $(driver) $(src_base)/test.xml $(src_base)/output + $(call message,test $$1,$$1 $(src_base)/test.xml | diff -u $(src_base)/output -,$(driver)) + +# Clean. +# +$(clean): $(driver).o.clean \ + $(addsuffix .cxx.clean,$(obj)) \ + $(addsuffix .cxx.clean,$(dep)) \ + $(addprefix $(out_base)/,$(xsd:.xsd=-pskel.cxx.xsd.clean)) + +# Generated .gitignore. +# +ifeq ($(out_base),$(src_base)) +$(gen): | $(out_base)/.gitignore +$(driver): | $(out_base)/.gitignore + +$(out_base)/.gitignore: files := driver $(genf) +$(clean): $(out_base)/.gitignore.clean + +$(call include,$(bld_root)/git/gitignore.make) +endif + +# How to. +# +$(call include,$(bld_root)/cxx/o-e.make) +$(call include,$(bld_root)/cxx/cxx-o.make) +$(call include,$(bld_root)/cxx/cxx-d.make) +$(call include,$(scf_root)/xsd/parser/xsd-cxx.make) + + +# Dependencies. +# +$(call import,$(src_root)/xsd/makefile) diff --git a/xsd/tests/cxx/parser/enumeration/output b/xsd/tests/cxx/parser/enumeration/output new file mode 100644 index 0000000..16db301 --- /dev/null +++ b/xsd/tests/cxx/parser/enumeration/output @@ -0,0 +1,3 @@ +1 +0 +1 diff --git a/xsd/tests/cxx/parser/enumeration/test.map b/xsd/tests/cxx/parser/enumeration/test.map new file mode 100644 index 0000000..f8868d6 --- /dev/null +++ b/xsd/tests/cxx/parser/enumeration/test.map @@ -0,0 +1,7 @@ +namespace test +{ + include "gender.hxx"; + + digit int int; + gender ::gender ::gender; +} diff --git a/xsd/tests/cxx/parser/enumeration/test.xml b/xsd/tests/cxx/parser/enumeration/test.xml new file mode 100644 index 0000000..a6fa893 --- /dev/null +++ b/xsd/tests/cxx/parser/enumeration/test.xml @@ -0,0 +1,10 @@ +<t:root xmlns:t="test" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="test test.xsd"> + + <digit>1</digit> + + <gender>male</gender> + <gender>female</gender> + +</t:root> diff --git a/xsd/tests/cxx/parser/enumeration/test.xsd b/xsd/tests/cxx/parser/enumeration/test.xsd new file mode 100644 index 0000000..ded3a18 --- /dev/null +++ b/xsd/tests/cxx/parser/enumeration/test.xsd @@ -0,0 +1,35 @@ +<?xml version="1.0"?> +<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:t="test" targetNamespace="test"> + + <simpleType name="digit"> + <restriction base="int"> + <enumeration value="0"/> + <enumeration value="1"/> + <enumeration value="2"/> + <enumeration value="3"/> + <enumeration value="4"/> + <enumeration value="5"/> + <enumeration value="6"/> + <enumeration value="7"/> + <enumeration value="8"/> + <enumeration value="9"/> + </restriction> + </simpleType> + + <simpleType name="gender"> + <restriction base="string"> + <enumeration value="male"/> + <enumeration value="female"/> + </restriction> + </simpleType> + + <complexType name="type"> + <choice maxOccurs="unbounded"> + <element name="digit" type="t:digit"/> + <element name="gender" type="t:gender"/> + </choice> + </complexType> + + <element name="root" type="t:type"/> + +</schema> diff --git a/xsd/tests/cxx/parser/generated-impl/makefile b/xsd/tests/cxx/parser/generated-impl/makefile new file mode 100644 index 0000000..3733590 --- /dev/null +++ b/xsd/tests/cxx/parser/generated-impl/makefile @@ -0,0 +1,90 @@ +# file : tests/cxx/parser/generated-impl/makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../../build/bootstrap.make + +xsd := test.xsd + +obj := $(addprefix $(out_base)/,$(xsd:.xsd=-pskel.o) $(xsd:.xsd=-pimpl.o) $(xsd:.xsd=-driver.o)) +dep := $(obj:.o=.o.d) + +driver := $(out_base)/$(xsd:.xsd=-driver) +test := $(out_base)/.test +clean := $(out_base)/.clean + +# Import. +# +$(call import,\ + $(scf_root)/import/libxerces-c/stub.make,\ + l: xerces_c.l,cpp-options: xerces_c.l.cpp-options) + +# Build. +# +$(driver): $(obj) $(xerces_c.l) + +$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): $(xerces_c.l.cpp-options) + +genf := $(xsd:.xsd=-pskel.hxx) \ + $(xsd:.xsd=-pskel.ixx) \ + $(xsd:.xsd=-pskel.cxx) \ + $(xsd:.xsd=-pimpl.hxx) \ + $(xsd:.xsd=-pimpl.cxx) \ + $(xsd:.xsd=-driver.cxx) + +gen := $(addprefix $(out_base)/,$(genf)) + + +$(gen): xsd := $(out_root)/xsd/xsd +$(gen): xsd_options := --generate-print-impl --generate-test-driver \ +--force-overwrite +$(gen): $(out_root)/xsd/xsd + +$(call include-dep,$(dep)) + +# Convenience alias for default target. +# +$(out_base)/: $(driver) + + +# Test. +# +$(test): driver := $(driver) +$(test): $(driver) $(src_base)/test.xml $(src_base)/output + $(call message,test $$1,$$1 $(src_base)/test.xml | diff -u $(src_base)/output -,$(driver)) + +# Clean. +# +$(clean): $(driver).o.clean \ + $(addsuffix .cxx.clean,$(obj)) \ + $(addsuffix .cxx.clean,$(dep)) \ + $(addprefix $(out_base)/,$(xsd:.xsd=-pskel.cxx.xsd.clean)) \ + $(addprefix $(out_base)/,$(xsd:.xsd=-pimpl.cxx.xsd.clean)) + +# Generated .gitignore. +# +ifeq ($(out_base),$(src_base)) +$(gen): | $(out_base)/.gitignore +$(driver): | $(out_base)/.gitignore + +$(out_base)/.gitignore: files := $(xsd:.xsd=-driver) $(genf) +$(clean): $(out_base)/.gitignore.clean + +$(call include,$(bld_root)/git/gitignore.make) +endif + +# How to. +# +$(call include,$(bld_root)/cxx/o-e.make) +$(call include,$(bld_root)/cxx/cxx-o.make) +$(call include,$(bld_root)/cxx/cxx-d.make) + +xsd_parser_impl_suffix := -pimpl +$(call include,$(scf_root)/xsd/parser/xsd-cxx.make) + + +# Dependencies. +# +$(call import,$(src_root)/xsd/makefile) diff --git a/xsd/tests/cxx/parser/generated-impl/output b/xsd/tests/cxx/parser/generated-impl/output new file mode 100644 index 0000000..7c58647 --- /dev/null +++ b/xsd/tests/cxx/parser/generated-impl/output @@ -0,0 +1,122 @@ +gender: male +foo: foo +gender: male +int: 0 +int: 1 +int: 2 +int: 3 +foo: foo +int: 3 +int: 2 +int: 1 +int: 0 +union: 9 +foo: foo +union: string +x: x +a: aaa +x: x +y: y +a: aaa +b: bbb +boolean: 1 +boolean: 0 +boolean: 1 +boolean: 0 +byte: 0 +byte: 123 +byte: -123 +unsigned-byte: 0 +unsigned-byte: 123 +short: 0 +short: -1234 +short: 1234 +unsigned-short: 0 +unsigned-short: 1234 +int: 0 +int: -12345 +int: 12345 +unsigned-int: 0 +unsigned-int: 12345 +long: 0 +long: -123456 +long: 123456 +unsigned-long: 0 +unsigned-long: 123456 +integer: 0 +integer: -123456 +integer: 123456 +negative-integer: -123456 +non-positive-integer: 0 +non-positive-integer: -123456 +positive-integer: 123456 +non-negative-integer: 0 +non-negative-integer: 123456 +float: 0 +float: 1.123 +float: -1.123 +double: 0 +double: 1.1234 +double: -1.1234 +decimal: 0 +decimal: 1.1234 +decimal: -1.1234 +string: string space newline +normalized-string: string space newline +token: string space newline +name: as123:345-.abs +nmtoken: 1as123:345-.abs +nmtokens: abc 123 +ncname: as123_345-.abs +id: abc +id: a123 +idref: abc +idrefs: abc a123 +language: en +language: en-us +uri: http://www.example.com/foo#bar +qname: schemaLocation +qname: xsi:schemaLocation +base64_binary: 10 bytes +base64_binary: 1 bytes +base64_binary: 2 bytes +base64_binary: 3 bytes +hex_binary: 0 bytes +hex_binary: 10 bytes +gday: ---12+12:0 +gday: ---1 +gday: ---31 +gday: ---15+0:0 +gday: ---15-14:0 +gmonth: --10+12:0 +gmonth: --1 +gmonth: --12+0:0 +gyear: 2007+12:0 +gyear: 1 +gyear: -20000+0:0 +gmonth_day: --10-28+12:0 +gmonth_day: --12-31 +gmonth_day: --1-1+0:0 +gyear_month: 2007-12+12:0 +gyear_month: -2007-10 +gyear_month: 20007-10+0:0 +gyear_month: -20007-1 +date: 2007-12-26+12:0 +date: -2007-10-15 +date: 20007-12-31+0:0 +date: -20007-1-1 +time: 12:46:23.456+12:0 +time: 12:13:14 +time: 12:13:14+0:0 +date_time: 2007-12-26T12:13:14.123+12:0 +date_time: -2007-10-15T12:13:14 +date_time: 20007-12-31T12:13:14+0:0 +date_time: -20007-1-1T12:13:14 +duration: -P2007Y13M32DT25H61M61.123S +duration: P1Y0M0DT0H0M0S +duration: P0Y1M0DT0H0M0S +duration: P0Y0M1DT0H0M0S +duration: P0Y0M0DT1H0M0S +duration: P0Y0M0DT0H1M0S +duration: P0Y0M0DT0H0M1.1S +duration: P1Y0M0DT0H0M1S diff --git a/xsd/tests/cxx/parser/generated-impl/test.xml b/xsd/tests/cxx/parser/generated-impl/test.xml new file mode 100644 index 0000000..2f29a39 --- /dev/null +++ b/xsd/tests/cxx/parser/generated-impl/test.xml @@ -0,0 +1,168 @@ +<t:root xmlns:t="test" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="test test.xsd"> + + <gender>male</gender> + <gender-extension foo="foo">male</gender-extension> + + <list>0 1 2 3</list> + <list-extension foo="foo">3 2 1 0</list-extension> + + <union>9</union> + <union-extension foo="foo">string</union-extension> + + <complex x="x"> + <a>aaa</a> + </complex> + + <complex-extension x="x" y="y"> + <a>aaa</a> + <b>bbb</b> + </complex-extension> + + <any-type>aaa<b>bbb</b>ccc</any-type> + <any-simple-type>abc123</any-simple-type> + + <boolean>1</boolean> + <boolean> 0 </boolean> + <boolean>true</boolean> + <boolean> false </boolean> + + <byte>0</byte> + <byte>123</byte> + <byte>-123</byte> + + <unsigned-byte>0</unsigned-byte> + <unsigned-byte>123</unsigned-byte> + + <short>0</short> + <short>-1234</short> + <short>1234</short> + + <unsigned-short>0</unsigned-short> + <unsigned-short>1234</unsigned-short> + + <int>0</int> + <int>-12345</int> + <int>12345</int> + + <unsigned-int>0</unsigned-int> + <unsigned-int>12345</unsigned-int> + + <long>0</long> + <long>-123456</long> + <long>123456</long> + + <unsigned-long>0</unsigned-long> + <unsigned-long>123456</unsigned-long> + + <integer>0</integer> + <integer>-123456</integer> + <integer>123456</integer> + + <negative-integer>-123456</negative-integer> + + <non-positive-integer>0</non-positive-integer> + <non-positive-integer>-123456</non-positive-integer> + + <positive-integer>123456</positive-integer> + + <non-negative-integer>0</non-negative-integer> + <non-negative-integer>123456</non-negative-integer> + + <float>0</float> + <float>1.123</float> + <float>-1.123</float> + + <double>0</double> + <double>1.1234</double> + <double>-1.1234</double> + + <decimal>0</decimal> + <decimal>1.1234</decimal> + <decimal>-1.1234</decimal> + + <string>string space newline</string> + + <normalized-string>string space newline</normalized-string> + + <token> string space newline</token> + + <name>as123:345-.abs</name> + + <nmtoken>1as123:345-.abs</nmtoken> + + <nmtokens>abc 123</nmtokens> + + <ncname>as123_345-.abs</ncname> + + <id>abc</id> + <id>a123</id> + + <idref>abc</idref> + + <idrefs>abc a123</idrefs> + + <language>en</language> + <language>en-us</language> + + <uri>http://www.example.com/foo#bar</uri> + + <qname>schemaLocation</qname> + <qname>xsi:schemaLocation</qname> + + <base64_binary>MTIzNDVhYmNqaw==</base64_binary> + <base64_binary>YQ==</base64_binary> + <base64_binary>YWI=</base64_binary> + <base64_binary>YWJj</base64_binary> + + <hex_binary></hex_binary> + <hex_binary>31323334356162636a6b</hex_binary> + + <gday>---12+12:00</gday> + <gday>---01</gday> + <gday>---31</gday> + <gday>---15Z</gday> + <gday>---15-14:00</gday> + + <gmonth>--10+12:00</gmonth> + <gmonth>--01</gmonth> + <gmonth>--12Z</gmonth> + + <gyear>2007+12:00</gyear> + <gyear>0001</gyear> + <gyear>-20000Z</gyear> + + <gmonth_day>--10-28+12:00</gmonth_day> + <gmonth_day>--12-31</gmonth_day> + <gmonth_day>--01-01Z</gmonth_day> + + <gyear_month>2007-12+12:00</gyear_month> + <gyear_month>-2007-10</gyear_month> + <gyear_month>20007-10Z</gyear_month> + <gyear_month>-20007-01</gyear_month> + + <date>2007-12-26+12:00</date> + <date>-2007-10-15</date> + <date>20007-12-31Z</date> + <date>-20007-01-01</date> + + <time>12:46:23.456+12:00</time> + <time>12:13:14</time> + <time>12:13:14Z</time> + + <date_time>2007-12-26T12:13:14.123+12:00</date_time> + <date_time>-2007-10-15T12:13:14</date_time> + <date_time>20007-12-31T12:13:14Z</date_time> + <date_time>-20007-01-01T12:13:14</date_time> + + <duration>-P2007Y13M32DT25H61M61.123S</duration> + <duration>P1Y</duration> + <duration>P1M</duration> + <duration>P1D</duration> + <duration>PT1H</duration> + <duration>PT1M</duration> + <duration>PT1.1S</duration> + <duration>P1YT1S</duration> + +</t:root> diff --git a/xsd/tests/cxx/parser/generated-impl/test.xsd b/xsd/tests/cxx/parser/generated-impl/test.xsd new file mode 100644 index 0000000..7bc8f23 --- /dev/null +++ b/xsd/tests/cxx/parser/generated-impl/test.xsd @@ -0,0 +1,142 @@ +<?xml version="1.0"?> +<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:t="test" targetNamespace="test"> + + <!-- enum --> + + <simpleType name="gender"> + <restriction base="string"> + <enumeration value="male"/> + <enumeration value="female"/> + </restriction> + </simpleType> + + <complexType name="gender-extension"> + <simpleContent> + <extension base="t:gender"> + <attribute name="foo" type="string"/> + </extension> + </simpleContent> + </complexType> + + <!-- list --> + + <simpleType name="list"> + <list itemType="int"/> + </simpleType> + + <complexType name="list-extension"> + <simpleContent> + <extension base="t:list"> + <attribute name="foo" type="string"/> + </extension> + </simpleContent> + </complexType> + + <!-- union --> + + <simpleType name="union"> + <union memberTypes="int string"/> + </simpleType> + + <complexType name="union-extension"> + <simpleContent> + <extension base="t:union"> + <attribute name="foo" type="string"/> + </extension> + </simpleContent> + </complexType> + + <!-- complex --> + + <complexType name="complex"> + <sequence> + <element name="a" type="string"/> + </sequence> + <attribute name="x" type="string"/> + </complexType> + + <complexType name="complex-extension"> + <complexContent> + <extension base="t:complex"> + <sequence> + <element name="b" type="string"/> + </sequence> + <attribute name="y" type="string"/> + </extension> + </complexContent> + </complexType> + + <complexType name="type"> + <sequence> + <element name="gender" type="t:gender"/> + <element name="gender-extension" type="t:gender-extension"/> + + <element name="list" type="t:list"/> + <element name="list-extension" type="t:list-extension"/> + + <element name="union" type="t:union"/> + <element name="union-extension" type="t:union-extension"/> + + <element name="complex" type="t:complex"/> + <element name="complex-extension" type="t:complex-extension"/> + + <!-- Built-in types. --> + + <element name="any-type" type="anyType" maxOccurs="unbounded"/> + <element name="any-simple-type" type="anySimpleType" maxOccurs="unbounded"/> + + <element name="boolean" type="boolean" maxOccurs="unbounded"/> + + <element name="byte" type="byte" maxOccurs="unbounded"/> + <element name="unsigned-byte" type="unsignedByte" maxOccurs="unbounded"/> + <element name="short" type="short" maxOccurs="unbounded"/> + <element name="unsigned-short" type="unsignedShort" maxOccurs="unbounded"/> + <element name="int" type="int" maxOccurs="unbounded"/> + <element name="unsigned-int" type="unsignedInt" maxOccurs="unbounded"/> + <element name="long" type="long" maxOccurs="unbounded"/> + <element name="unsigned-long" type="unsignedLong" maxOccurs="unbounded"/> + + <element name="integer" type="integer" maxOccurs="unbounded"/> + <element name="negative-integer" type="negativeInteger" maxOccurs="unbounded"/> + <element name="non-positive-integer" type="nonPositiveInteger" maxOccurs="unbounded"/> + <element name="positive-integer" type="positiveInteger" maxOccurs="unbounded"/> + <element name="non-negative-integer" type="nonNegativeInteger" maxOccurs="unbounded"/> + + <element name="float" type="float" maxOccurs="unbounded"/> + <element name="double" type="double" maxOccurs="unbounded"/> + <element name="decimal" type="decimal" maxOccurs="unbounded"/> + + <element name="string" type="string" maxOccurs="unbounded"/> + <element name="normalized-string" type="normalizedString" maxOccurs="unbounded"/> + <element name="token" type="token" maxOccurs="unbounded"/> + <element name="name" type="Name" maxOccurs="unbounded"/> + <element name="nmtoken" type="NMTOKEN" maxOccurs="unbounded"/> + <element name="nmtokens" type="NMTOKENS" maxOccurs="unbounded"/> + <element name="ncname" type="NCName" maxOccurs="unbounded"/> + <element name="id" type="ID" maxOccurs="unbounded"/> + <element name="idref" type="IDREF" maxOccurs="unbounded"/> + <element name="idrefs" type="IDREFS" maxOccurs="unbounded"/> + + <element name="language" type="language" maxOccurs="unbounded"/> + <element name="uri" type="anyURI" maxOccurs="unbounded"/> + <element name="qname" type="QName" maxOccurs="unbounded"/> + + <element name="base64_binary" type="base64Binary" maxOccurs="unbounded"/> + <element name="hex_binary" type="hexBinary" maxOccurs="unbounded"/> + + <element name="gday" type="gDay" maxOccurs="unbounded"/> + <element name="gmonth" type="gMonth" maxOccurs="unbounded"/> + <element name="gyear" type="gYear" maxOccurs="unbounded"/> + <element name="gmonth_day" type="gMonthDay" maxOccurs="unbounded"/> + <element name="gyear_month" type="gYearMonth" maxOccurs="unbounded"/> + <element name="date" type="date" maxOccurs="unbounded"/> + <element name="time" type="time" maxOccurs="unbounded"/> + <element name="date_time" type="dateTime" maxOccurs="unbounded"/> + <element name="duration" type="duration" maxOccurs="unbounded"/> + + </sequence> + </complexType> + + <element name="root" type="t:type"/> + +</schema> diff --git a/xsd/tests/cxx/parser/list/driver.cxx b/xsd/tests/cxx/parser/list/driver.cxx new file mode 100644 index 0000000..d4ac4e2 --- /dev/null +++ b/xsd/tests/cxx/parser/list/driver.cxx @@ -0,0 +1,107 @@ +// file : tests/cxx/parser/list/driver.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +// Test xsd:list parsing. +// + +#include <string> +#include <iostream> + +#include "test-pskel.hxx" + +using namespace std; +using namespace test; + +struct string_list_pimpl: string_list_pskel +{ + virtual void + pre () + { + cout << "{" << endl; + } + + virtual void + item (string const& v) + { + cout << " '" << v << "'" << endl; + } + + virtual void + post_string_list () + { + cout << "}" << endl + << endl; + } +}; + +struct string_list_lang_pimpl: string_list_lang_pskel +{ + virtual void + pre () + { + cout << "{" << endl; + } + + virtual void + item (string const& v) + { + cout << " '" << v << "'" << endl; + } + + virtual void + lang (string const& v) + { + cout << " lang: '" << v << "'" << endl; + } + + virtual void + post_string_list_lang () + { + cout << "}" << endl + << endl; + } +}; + +struct type_pimpl: type_pskel +{ +}; + +int +main (int argc, char* argv[]) +{ + if (argc != 2) + { + cerr << "usage: " << argv[0] << " test.xml" << endl; + return 1; + } + + try + { + xml_schema::string_pimpl string_p; + string_list_pimpl string_list_p; + string_list_lang_pimpl string_list_lang_p; + type_pimpl type_p; + + string_list_p.parsers (string_p); + string_list_lang_p.parsers (string_p, string_p); + type_p.parsers (string_list_p, string_list_lang_p); + + xml_schema::document doc_p (type_p, "test", "root"); + + type_p.pre (); + doc_p.parse (argv[1]); + type_p.post_type (); + } + catch (xml_schema::exception const& e) + { + cerr << e << endl; + return 1; + } + catch (ios_base::failure const&) + { + cerr << "io failure" << endl; + return 1; + } +} diff --git a/xsd/tests/cxx/parser/list/makefile b/xsd/tests/cxx/parser/list/makefile new file mode 100644 index 0000000..deacdb9 --- /dev/null +++ b/xsd/tests/cxx/parser/list/makefile @@ -0,0 +1,79 @@ +# file : tests/cxx/parser/list/makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../../build/bootstrap.make + +xsd := test.xsd +cxx := driver.cxx + +obj := $(addprefix $(out_base)/,$(cxx:.cxx=.o) $(xsd:.xsd=-pskel.o)) +dep := $(obj:.o=.o.d) + +driver := $(out_base)/driver +test := $(out_base)/.test +clean := $(out_base)/.clean + +# Import. +# +$(call import,\ + $(scf_root)/import/libxerces-c/stub.make,\ + l: xerces_c.l,cpp-options: xerces_c.l.cpp-options) + +# Build. +# +$(driver): $(obj) $(xerces_c.l) + +$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): $(xerces_c.l.cpp-options) + +genf := $(xsd:.xsd=-pskel.hxx) $(xsd:.xsd=-pskel.ixx) $(xsd:.xsd=-pskel.cxx) +gen := $(addprefix $(out_base)/,$(genf)) + +$(gen): xsd := $(out_root)/xsd/xsd +$(gen): $(out_root)/xsd/xsd + +$(call include-dep,$(dep)) + +# Convenience alias for default target. +# +$(out_base)/: $(driver) + + +# Test. +# +$(test): driver := $(driver) +$(test): $(driver) $(src_base)/test.xml $(src_base)/output + $(call message,test $$1,$$1 $(src_base)/test.xml | diff -u $(src_base)/output -,$(driver)) + +# Clean. +# +$(clean): $(driver).o.clean \ + $(addsuffix .cxx.clean,$(obj)) \ + $(addsuffix .cxx.clean,$(dep)) \ + $(addprefix $(out_base)/,$(xsd:.xsd=-pskel.cxx.xsd.clean)) + +# Generated .gitignore. +# +ifeq ($(out_base),$(src_base)) +$(gen): | $(out_base)/.gitignore +$(driver): | $(out_base)/.gitignore + +$(out_base)/.gitignore: files := driver $(genf) +$(clean): $(out_base)/.gitignore.clean + +$(call include,$(bld_root)/git/gitignore.make) +endif + +# How to. +# +$(call include,$(bld_root)/cxx/o-e.make) +$(call include,$(bld_root)/cxx/cxx-o.make) +$(call include,$(bld_root)/cxx/cxx-d.make) +$(call include,$(scf_root)/xsd/parser/xsd-cxx.make) + + +# Dependencies. +# +$(call import,$(src_root)/xsd/makefile) diff --git a/xsd/tests/cxx/parser/list/output b/xsd/tests/cxx/parser/list/output new file mode 100644 index 0000000..3642c4d --- /dev/null +++ b/xsd/tests/cxx/parser/list/output @@ -0,0 +1,26 @@ +{ +} + +{ +} + +{ +} + +{ + 'one' +} + +{ + 'one' + 'two' + 'three' +} + +{ + lang: 'en' + 'one' + 'two' + 'three' +} + diff --git a/xsd/tests/cxx/parser/list/test.xml b/xsd/tests/cxx/parser/list/test.xml new file mode 100644 index 0000000..52229db --- /dev/null +++ b/xsd/tests/cxx/parser/list/test.xml @@ -0,0 +1,25 @@ +<t:root xmlns:t="test" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="test test.xsd"> + + <string-list/> + + <string-list> </string-list> + + <string-list> + + </string-list> + + <string-list>one</string-list> + + <string-list> + one two + three + </string-list> + + <string-list-lang lang="en"> + one two + three + </string-list-lang> + +</t:root> diff --git a/xsd/tests/cxx/parser/list/test.xsd b/xsd/tests/cxx/parser/list/test.xsd new file mode 100644 index 0000000..79bd084 --- /dev/null +++ b/xsd/tests/cxx/parser/list/test.xsd @@ -0,0 +1,25 @@ +<?xml version="1.0"?> +<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:t="test" targetNamespace="test"> + + <simpleType name="string-list"> + <list itemType="string"/> + </simpleType> + + <complexType name="string-list-lang"> + <simpleContent> + <extension base="t:string-list"> + <attribute name="lang" type="string"/> + </extension> + </simpleContent> + </complexType> + + <complexType name="type"> + <choice maxOccurs="unbounded"> + <element name="string-list" type="t:string-list"/> + <element name="string-list-lang" type="t:string-list-lang"/> + </choice> + </complexType> + + <element name="root" type="t:type"/> + +</schema> diff --git a/xsd/tests/cxx/parser/makefile b/xsd/tests/cxx/parser/makefile new file mode 100644 index 0000000..935345b --- /dev/null +++ b/xsd/tests/cxx/parser/makefile @@ -0,0 +1,20 @@ +# file : tests/cxx/parser/makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../build/bootstrap.make + +tests := built-in enumeration generated-impl list recursive \ +name-clash/inheritance polymorphism test-template validation \ +union + +default := $(out_base)/ +test := $(out_base)/.test +clean := $(out_base)/.clean + +$(default): $(addprefix $(out_base)/,$(addsuffix /,$(tests))) +$(test): $(addprefix $(out_base)/,$(addsuffix /.test,$(tests))) +$(clean): $(addprefix $(out_base)/,$(addsuffix /.clean,$(tests))) + +$(foreach t,$(tests),$(call import,$(src_base)/$t/makefile)) diff --git a/xsd/tests/cxx/parser/name-clash/inheritance/driver.cxx b/xsd/tests/cxx/parser/name-clash/inheritance/driver.cxx new file mode 100644 index 0000000..81adb7f --- /dev/null +++ b/xsd/tests/cxx/parser/name-clash/inheritance/driver.cxx @@ -0,0 +1,64 @@ +// file : tests/cxx/parser/name-clash/inheritance/driver.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +// Test for name clashes across inheritance hierarchy. +// + +#include <string> +#include <iostream> + +#include "test-pskel.hxx" + +using namespace std; +using namespace test; + +struct derived_pimpl: derived_pskel +{ + virtual void + e (string const& v) + { + cout << "e: " << v << endl; + } + + virtual void + e1 (string const& v) + { + cout << "e1: " << v << endl; + } +}; + +int +main (int argc, char* argv[]) +{ + if (argc != 2) + { + cerr << "usage: " << argv[0] << " test.xml" << endl; + return 1; + } + + try + { + xml_schema::string_pimpl string_p; + derived_pimpl derived_p; + + derived_p.parsers (string_p, string_p); + + xml_schema::document doc_p (derived_p, "test", "root"); + + derived_p.pre (); + doc_p.parse (argv[1]); + derived_p.post_derived (); + } + catch (xml_schema::exception const& e) + { + cerr << e << endl; + return 1; + } + catch (std::ios_base::failure const&) + { + cerr << "io failure" << endl; + return 1; + } +} diff --git a/xsd/tests/cxx/parser/name-clash/inheritance/makefile b/xsd/tests/cxx/parser/name-clash/inheritance/makefile new file mode 100644 index 0000000..359b7e4 --- /dev/null +++ b/xsd/tests/cxx/parser/name-clash/inheritance/makefile @@ -0,0 +1,80 @@ +# file : tests/cxx/parser/name-clash/inheritance/makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../../../build/bootstrap.make + +xsd := test.xsd +cxx := driver.cxx + +obj := $(addprefix $(out_base)/,$(cxx:.cxx=.o) $(xsd:.xsd=-pskel.o)) +dep := $(obj:.o=.o.d) + +driver := $(out_base)/driver +test := $(out_base)/.test +clean := $(out_base)/.clean + +# Import. +# +$(call import,\ + $(scf_root)/import/libxerces-c/stub.make,\ + l: xerces_c.l,cpp-options: xerces_c.l.cpp-options) + +# Build. +# +$(driver): $(obj) $(xerces_c.l) + +$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): $(xerces_c.l.cpp-options) + +genf := $(xsd:.xsd=-pskel.hxx) $(xsd:.xsd=-pskel.ixx) $(xsd:.xsd=-pskel.cxx) +gen := $(addprefix $(out_base)/,$(genf)) + +$(gen): xsd := $(out_root)/xsd/xsd +$(gen): xsd_options := --generate-validation +$(gen): $(out_root)/xsd/xsd + +$(call include-dep,$(dep)) + +# Convenience alias for default target. +# +$(out_base)/: $(driver) + + +# Test. +# +$(test): driver := $(driver) +$(test): $(driver) $(src_base)/test.xml $(src_base)/output + $(call message,test $$1,$$1 $(src_base)/test.xml | diff -u $(src_base)/output -,$(driver)) + +# Clean. +# +$(clean): $(driver).o.clean \ + $(addsuffix .cxx.clean,$(obj)) \ + $(addsuffix .cxx.clean,$(dep)) \ + $(addprefix $(out_base)/,$(xsd:.xsd=-pskel.cxx.xsd.clean)) + +# Generated .gitignore. +# +ifeq ($(out_base),$(src_base)) +$(gen): | $(out_base)/.gitignore +$(driver): | $(out_base)/.gitignore + +$(out_base)/.gitignore: files := driver $(genf) +$(clean): $(out_base)/.gitignore.clean + +$(call include,$(bld_root)/git/gitignore.make) +endif + +# How to. +# +$(call include,$(bld_root)/cxx/o-e.make) +$(call include,$(bld_root)/cxx/cxx-o.make) +$(call include,$(bld_root)/cxx/cxx-d.make) +$(call include,$(scf_root)/xsd/parser/xsd-cxx.make) + + +# Dependencies. +# +$(call import,$(src_root)/xsd/makefile) diff --git a/xsd/tests/cxx/parser/name-clash/inheritance/output b/xsd/tests/cxx/parser/name-clash/inheritance/output new file mode 100644 index 0000000..4efd51b --- /dev/null +++ b/xsd/tests/cxx/parser/name-clash/inheritance/output @@ -0,0 +1,2 @@ +e: e +e1: e1 diff --git a/xsd/tests/cxx/parser/name-clash/inheritance/test.xml b/xsd/tests/cxx/parser/name-clash/inheritance/test.xml new file mode 100644 index 0000000..8c17101 --- /dev/null +++ b/xsd/tests/cxx/parser/name-clash/inheritance/test.xml @@ -0,0 +1,8 @@ +<t:root xmlns:t="test" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="test test.xsd"> + + <e>e</e> + <e>e1</e> + +</t:root> diff --git a/xsd/tests/cxx/parser/name-clash/inheritance/test.xsd b/xsd/tests/cxx/parser/name-clash/inheritance/test.xsd new file mode 100644 index 0000000..62a782e --- /dev/null +++ b/xsd/tests/cxx/parser/name-clash/inheritance/test.xsd @@ -0,0 +1,22 @@ +<?xml version="1.0"?> +<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:t="test" targetNamespace="test"> + + <complexType name="base"> + <sequence> + <element name="e" type="string"/> + </sequence> + </complexType> + + <complexType name="derived"> + <complexContent> + <extension base="t:base"> + <sequence> + <element name="e" type="string"/> + </sequence> + </extension> + </complexContent> + </complexType> + + <element name="root" type="t:derived"/> + +</schema> diff --git a/xsd/tests/cxx/parser/polymorphism/makefile b/xsd/tests/cxx/parser/polymorphism/makefile new file mode 100644 index 0000000..42ac5c3 --- /dev/null +++ b/xsd/tests/cxx/parser/polymorphism/makefile @@ -0,0 +1,18 @@ +# file : tests/cxx/parser/polymorphism/makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../../build/bootstrap.make + +tests := same-type + +default := $(out_base)/ +test := $(out_base)/.test +clean := $(out_base)/.clean + +$(default): $(addprefix $(out_base)/,$(addsuffix /,$(tests))) +$(test): $(addprefix $(out_base)/,$(addsuffix /.test,$(tests))) +$(clean): $(addprefix $(out_base)/,$(addsuffix /.clean,$(tests))) + +$(foreach t,$(tests),$(call import,$(src_base)/$t/makefile)) diff --git a/xsd/tests/cxx/parser/polymorphism/same-type/driver.cxx b/xsd/tests/cxx/parser/polymorphism/same-type/driver.cxx new file mode 100644 index 0000000..ea50776 --- /dev/null +++ b/xsd/tests/cxx/parser/polymorphism/same-type/driver.cxx @@ -0,0 +1,64 @@ +// file : tests/cxx/parser/polymorphism/same-type/driver.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +// Test substitution group and xsi:type that don't change the type. +// + +#include <string> +#include <iostream> + +#include "test-pskel.hxx" + +using namespace std; +using namespace test; + +struct base_pimpl: base_pskel +{ + virtual void + a (string const& v) + { + cout << v << endl; + } +}; + +struct type_pimpl: type_pskel +{ +}; + +int +main (int argc, char* argv[]) +{ + if (argc != 2) + { + cerr << "usage: " << argv[0] << " test.xml" << endl; + return 1; + } + + try + { + xml_schema::string_pimpl string_p; + base_pimpl base_p; + type_pimpl type_p; + + base_p.parsers (string_p); + type_p.parsers (base_p); + + xml_schema::document doc_p (type_p, "test", "root"); + + type_p.pre (); + doc_p.parse (argv[1]); + type_p.post_type (); + } + catch (xml_schema::exception const& e) + { + cerr << e << endl; + return 1; + } + catch (std::ios_base::failure const&) + { + cerr << "io failure" << endl; + return 1; + } +} diff --git a/xsd/tests/cxx/parser/polymorphism/same-type/makefile b/xsd/tests/cxx/parser/polymorphism/same-type/makefile new file mode 100644 index 0000000..c357597 --- /dev/null +++ b/xsd/tests/cxx/parser/polymorphism/same-type/makefile @@ -0,0 +1,80 @@ +# file : tests/cxx/parser/polymorphism/same-type/makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../../../build/bootstrap.make + +xsd := test.xsd +cxx := driver.cxx + +obj := $(addprefix $(out_base)/,$(cxx:.cxx=.o) $(xsd:.xsd=-pskel.o)) +dep := $(obj:.o=.o.d) + +driver := $(out_base)/driver +test := $(out_base)/.test +clean := $(out_base)/.clean + +# Import. +# +$(call import,\ + $(scf_root)/import/libxerces-c/stub.make,\ + l: xerces_c.l,cpp-options: xerces_c.l.cpp-options) + +# Build. +# +$(driver): $(obj) $(xerces_c.l) + +$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): $(xerces_c.l.cpp-options) + +genf := $(xsd:.xsd=-pskel.hxx) $(xsd:.xsd=-pskel.ixx) $(xsd:.xsd=-pskel.cxx) +gen := $(addprefix $(out_base)/,$(genf)) + +$(gen): xsd := $(out_root)/xsd/xsd +$(gen): xsd_options := --generate-polymorphic +$(gen): $(out_root)/xsd/xsd + +$(call include-dep,$(dep)) + +# Convenience alias for default target. +# +$(out_base)/: $(driver) + + +# Test. +# +$(test): driver := $(driver) +$(test): $(driver) $(src_base)/test.xml $(src_base)/output + $(call message,test $$1,$$1 $(src_base)/test.xml | diff -u $(src_base)/output -,$(driver)) + +# Clean. +# +$(clean): $(driver).o.clean \ + $(addsuffix .cxx.clean,$(obj)) \ + $(addsuffix .cxx.clean,$(dep)) \ + $(addprefix $(out_base)/,$(xsd:.xsd=-pskel.cxx.xsd.clean)) + +# Generated .gitignore. +# +ifeq ($(out_base),$(src_base)) +$(gen): | $(out_base)/.gitignore +$(driver): | $(out_base)/.gitignore + +$(out_base)/.gitignore: files := driver $(genf) +$(clean): $(out_base)/.gitignore.clean + +$(call include,$(bld_root)/git/gitignore.make) +endif + +# How to. +# +$(call include,$(bld_root)/cxx/o-e.make) +$(call include,$(bld_root)/cxx/cxx-o.make) +$(call include,$(bld_root)/cxx/cxx-d.make) +$(call include,$(scf_root)/xsd/parser/xsd-cxx.make) + + +# Dependencies. +# +$(call import,$(src_root)/xsd/makefile) diff --git a/xsd/tests/cxx/parser/polymorphism/same-type/output b/xsd/tests/cxx/parser/polymorphism/same-type/output new file mode 100644 index 0000000..d418277 --- /dev/null +++ b/xsd/tests/cxx/parser/polymorphism/same-type/output @@ -0,0 +1,4 @@ +a1 +a2 +a3 +a4 diff --git a/xsd/tests/cxx/parser/polymorphism/same-type/test.xml b/xsd/tests/cxx/parser/polymorphism/same-type/test.xml new file mode 100644 index 0000000..f8b6d1e --- /dev/null +++ b/xsd/tests/cxx/parser/polymorphism/same-type/test.xml @@ -0,0 +1,10 @@ +<t:root xmlns:t="test" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="test test.xsd"> + + <t:base><a>a1</a></t:base> + <t:derived><a>a2</a></t:derived> + <t:base xsi:type="t:base"><a>a3</a></t:base> + <t:derived xsi:type="t:base"><a>a4</a></t:derived> + +</t:root> diff --git a/xsd/tests/cxx/parser/polymorphism/same-type/test.xsd b/xsd/tests/cxx/parser/polymorphism/same-type/test.xsd new file mode 100644 index 0000000..a4157d3 --- /dev/null +++ b/xsd/tests/cxx/parser/polymorphism/same-type/test.xsd @@ -0,0 +1,21 @@ +<?xml version="1.0"?> +<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:t="test" targetNamespace="test"> + + <complexType name="base"> + <sequence> + <element name="a" type="string"/> + </sequence> + </complexType> + + <element name="base" type="t:base"/> + <element name="derived" type="t:base" substitutionGroup="t:base"/> + + <complexType name="type"> + <sequence> + <element ref="t:base" maxOccurs="unbounded"/> + </sequence> + </complexType> + + <element name="root" type="t:type"/> + +</schema> diff --git a/xsd/tests/cxx/parser/recursive/driver.cxx b/xsd/tests/cxx/parser/recursive/driver.cxx new file mode 100644 index 0000000..3f54f8f --- /dev/null +++ b/xsd/tests/cxx/parser/recursive/driver.cxx @@ -0,0 +1,141 @@ +// file : tests/cxx/parser/recursive/driver.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +// Test recursive parser invocation. +// + +#include <iostream> +#include <string> + +#include "test-pskel.hxx" + +using namespace std; + +struct sub_pimpl: sub_type_pskel +{ + virtual void + pre () + { + cout << "sub::pre" << endl; + } + + virtual void + sub () + { + cout << "sub::sub" << endl; + } + + virtual void + sub2 () + { + cout << "sub::sub2" << endl; + } + + virtual void + name (string const& n) + { + cout << "sub::name: " << n << endl; + } + + virtual void + post_sub_type () + { + cout << "sub::post" << endl; + } +}; + +struct indir_pimpl: indir_type_pskel +{ + virtual void + pre () + { + cout << "indir::pre" << endl; + } + + virtual void + sub () + { + cout << "indir::sub" << endl; + } + + virtual void + name (string const& n) + { + cout << "indir::name: " << n << endl; + } + + virtual void + post_indir_type () + { + cout << "indir::post" << endl; + } +}; + +struct test_pimpl: test_type_pskel +{ + virtual void + pre () + { + cout << "test::pre" << endl; + } + + virtual void + sub () + { + cout << "test::sub" << endl; + } + + virtual void + name (string const& n) + { + cout << "test::name: " << n << endl; + } + + virtual void + post_test_type () + { + cout << "test::post" << endl; + } +}; + + +int +main (int argc, char* argv[]) +{ + if (argc != 2) + { + cerr << "usage: " << argv[0] << " test.xml" << endl; + return 1; + } + + try + { + xml_schema::string_pimpl string_p; + + sub_pimpl sub_p; + indir_pimpl indir_p; + test_pimpl test_p; + + sub_p.parsers (sub_p, indir_p, sub_p, string_p); + indir_p.parsers (sub_p, string_p); + test_p.parsers (sub_p, string_p); + + xml_schema::document doc_p (test_p, "test"); + + test_p.pre (); + doc_p.parse (argv[1]); + test_p.post_test_type (); + } + catch (xml_schema::exception const& e) + { + cerr << e << endl; + return 1; + } + catch (ios_base::failure const&) + { + cerr << "io failure" << endl; + return 1; + } +} diff --git a/xsd/tests/cxx/parser/recursive/makefile b/xsd/tests/cxx/parser/recursive/makefile new file mode 100644 index 0000000..bd78bef --- /dev/null +++ b/xsd/tests/cxx/parser/recursive/makefile @@ -0,0 +1,80 @@ +# file : tests/cxx/parser/recursive/makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../../build/bootstrap.make + +xsd := test.xsd +cxx := driver.cxx + +obj := $(addprefix $(out_base)/,$(cxx:.cxx=.o) $(xsd:.xsd=-pskel.o)) +dep := $(obj:.o=.o.d) + +driver := $(out_base)/driver +test := $(out_base)/.test +clean := $(out_base)/.clean + +# Import. +# +$(call import,\ + $(scf_root)/import/libxerces-c/stub.make,\ + l: xerces_c.l,cpp-options: xerces_c.l.cpp-options) + +# Build. +# +$(driver): $(obj) $(xerces_c.l) + +$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): $(xerces_c.l.cpp-options) + +genf := $(xsd:.xsd=-pskel.hxx) $(xsd:.xsd=-pskel.ixx) $(xsd:.xsd=-pskel.cxx) +gen := $(addprefix $(out_base)/,$(genf)) + +$(gen): xsd := $(out_root)/xsd/xsd +$(gen): xsd_options := --generate-validation +$(gen): $(out_root)/xsd/xsd + +$(call include-dep,$(dep)) + +# Convenience alias for default target. +# +$(out_base)/: $(driver) + + +# Test. +# +$(test): driver := $(driver) +$(test): $(driver) $(src_base)/test.xml $(src_base)/output + $(call message,test $$1,$$1 $(src_base)/test.xml | diff -u $(src_base)/output -,$(driver)) + +# Clean. +# +$(clean): $(driver).o.clean \ + $(addsuffix .cxx.clean,$(obj)) \ + $(addsuffix .cxx.clean,$(dep)) \ + $(addprefix $(out_base)/,$(xsd:.xsd=-pskel.cxx.xsd.clean)) + +# Generated .gitignore. +# +ifeq ($(out_base),$(src_base)) +$(gen): | $(out_base)/.gitignore +$(driver): | $(out_base)/.gitignore + +$(out_base)/.gitignore: files := driver $(genf) +$(clean): $(out_base)/.gitignore.clean + +$(call include,$(bld_root)/git/gitignore.make) +endif + +# How to. +# +$(call include,$(bld_root)/cxx/o-e.make) +$(call include,$(bld_root)/cxx/cxx-o.make) +$(call include,$(bld_root)/cxx/cxx-d.make) +$(call include,$(scf_root)/xsd/parser/xsd-cxx.make) + + +# Dependencies. +# +$(call import,$(src_root)/xsd/makefile) diff --git a/xsd/tests/cxx/parser/recursive/output b/xsd/tests/cxx/parser/recursive/output new file mode 100644 index 0000000..f26fb72 --- /dev/null +++ b/xsd/tests/cxx/parser/recursive/output @@ -0,0 +1,22 @@ +test::pre +test::name: testName +sub::pre +sub::name: subName +sub::pre +sub::name: sub-subName +sub::post +sub::sub +indir::pre +indir::name: sub-indirName +sub::pre +sub::name: sub-indir-subName +sub::post +indir::sub +indir::post +sub::pre +sub::name: sub-sub2Name +sub::post +sub::sub2 +sub::post +test::sub +test::post diff --git a/xsd/tests/cxx/parser/recursive/test.xml b/xsd/tests/cxx/parser/recursive/test.xml new file mode 100644 index 0000000..f6c219d --- /dev/null +++ b/xsd/tests/cxx/parser/recursive/test.xml @@ -0,0 +1,11 @@ +<test xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="test.xsd" + name="testName"> + <sub name="subName"> + <sub name="sub-subName"/> + <indir name="sub-indirName"> + <sub name="sub-indir-subName"/> + </indir> + <sub2 name="sub-sub2Name"/> + </sub> +</test> diff --git a/xsd/tests/cxx/parser/recursive/test.xsd b/xsd/tests/cxx/parser/recursive/test.xsd new file mode 100644 index 0000000..33e1d2d --- /dev/null +++ b/xsd/tests/cxx/parser/recursive/test.xsd @@ -0,0 +1,27 @@ +<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> + + <xs:complexType name="sub_type"> + <xs:sequence> + <xs:element name="sub" type="sub_type" minOccurs="0"/> + <xs:element name="indir" type="indir_type" minOccurs="0"/> + <xs:element name="sub2" type="sub_type" minOccurs="0"/> + </xs:sequence> + <xs:attribute name="name" type="xs:string" /> + </xs:complexType> + + <xs:complexType name="indir_type"> + <xs:sequence> + <xs:element name="sub" type="sub_type" minOccurs="0"/> + </xs:sequence> + <xs:attribute name="name" type="xs:string" /> + </xs:complexType> + + <xs:complexType name="test_type"> + <xs:sequence> + <xs:element name="sub" type="sub_type" /> + </xs:sequence> + <xs:attribute name="name" type="xs:string" /> + </xs:complexType> + + <xs:element name="test" type="test_type" /> +</xs:schema> diff --git a/xsd/tests/cxx/parser/test-template/driver.cxx b/xsd/tests/cxx/parser/test-template/driver.cxx new file mode 100644 index 0000000..b3379ff --- /dev/null +++ b/xsd/tests/cxx/parser/test-template/driver.cxx @@ -0,0 +1,68 @@ +// file : tests/cxx/parser/test-template/driver.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +// Insert test description here. +// + +#include <string> +#include <iostream> + +#include "test-pskel.hxx" + +using namespace std; +using namespace test; + +struct type_pimpl: type_pskel +{ + virtual void + pre () + { + } + + virtual void + a (string const& v) + { + cout << v << endl; + } + + virtual void + post_type () + { + } +}; + +int +main (int argc, char* argv[]) +{ + if (argc != 2) + { + cerr << "usage: " << argv[0] << " test.xml" << endl; + return 1; + } + + try + { + xml_schema::string_pimpl string_p; + type_pimpl type_p; + + type_p.parsers (string_p); + + xml_schema::document doc_p (type_p, "test", "root"); + + type_p.pre (); + doc_p.parse (argv[1]); + type_p.post_type (); + } + catch (xml_schema::exception const& e) + { + cerr << e << endl; + return 1; + } + catch (std::ios_base::failure const&) + { + cerr << "io failure" << endl; + return 1; + } +} diff --git a/xsd/tests/cxx/parser/test-template/makefile b/xsd/tests/cxx/parser/test-template/makefile new file mode 100644 index 0000000..5f5f9bc --- /dev/null +++ b/xsd/tests/cxx/parser/test-template/makefile @@ -0,0 +1,79 @@ +# file : tests/cxx/parser/test-template/makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../../build/bootstrap.make + +xsd := test.xsd +cxx := driver.cxx + +obj := $(addprefix $(out_base)/,$(cxx:.cxx=.o) $(xsd:.xsd=-pskel.o)) +dep := $(obj:.o=.o.d) + +driver := $(out_base)/driver +test := $(out_base)/.test +clean := $(out_base)/.clean + +# Import. +# +$(call import,\ + $(scf_root)/import/libxerces-c/stub.make,\ + l: xerces_c.l,cpp-options: xerces_c.l.cpp-options) + +# Build. +# +$(driver): $(obj) $(xerces_c.l) + +$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): $(xerces_c.l.cpp-options) + +genf := $(xsd:.xsd=-pskel.hxx) $(xsd:.xsd=-pskel.ixx) $(xsd:.xsd=-pskel.cxx) +gen := $(addprefix $(out_base)/,$(genf)) + +$(gen): xsd := $(out_root)/xsd/xsd +$(gen): $(out_root)/xsd/xsd + +$(call include-dep,$(dep)) + +# Convenience alias for default target. +# +$(out_base)/: $(driver) + + +# Test. +# +$(test): driver := $(driver) +$(test): $(driver) $(src_base)/test.xml $(src_base)/output + $(call message,test $$1,$$1 $(src_base)/test.xml | diff -u $(src_base)/output -,$(driver)) + +# Clean. +# +$(clean): $(driver).o.clean \ + $(addsuffix .cxx.clean,$(obj)) \ + $(addsuffix .cxx.clean,$(dep)) \ + $(addprefix $(out_base)/,$(xsd:.xsd=-pskel.cxx.xsd.clean)) + +# Generated .gitignore. +# +ifeq ($(out_base),$(src_base)) +$(gen): | $(out_base)/.gitignore +$(driver): | $(out_base)/.gitignore + +$(out_base)/.gitignore: files := driver $(genf) +$(clean): $(out_base)/.gitignore.clean + +$(call include,$(bld_root)/git/gitignore.make) +endif + +# How to. +# +$(call include,$(bld_root)/cxx/o-e.make) +$(call include,$(bld_root)/cxx/cxx-o.make) +$(call include,$(bld_root)/cxx/cxx-d.make) +$(call include,$(scf_root)/xsd/parser/xsd-cxx.make) + + +# Dependencies. +# +$(call import,$(src_root)/xsd/makefile) diff --git a/xsd/tests/cxx/parser/test-template/output b/xsd/tests/cxx/parser/test-template/output new file mode 100644 index 0000000..7898192 --- /dev/null +++ b/xsd/tests/cxx/parser/test-template/output @@ -0,0 +1 @@ +a diff --git a/xsd/tests/cxx/parser/test-template/test.xml b/xsd/tests/cxx/parser/test-template/test.xml new file mode 100644 index 0000000..624a80c --- /dev/null +++ b/xsd/tests/cxx/parser/test-template/test.xml @@ -0,0 +1,7 @@ +<t:root xmlns:t="test" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="test test.xsd"> + + <a>a</a> + +</t:root> diff --git a/xsd/tests/cxx/parser/test-template/test.xsd b/xsd/tests/cxx/parser/test-template/test.xsd new file mode 100644 index 0000000..07bebc7 --- /dev/null +++ b/xsd/tests/cxx/parser/test-template/test.xsd @@ -0,0 +1,12 @@ +<?xml version="1.0"?> +<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:t="test" targetNamespace="test"> + + <complexType name="type"> + <sequence> + <element name="a" type="string"/> + </sequence> + </complexType> + + <element name="root" type="t:type"/> + +</schema> diff --git a/xsd/tests/cxx/parser/union/driver.cxx b/xsd/tests/cxx/parser/union/driver.cxx new file mode 100644 index 0000000..4a67f2f --- /dev/null +++ b/xsd/tests/cxx/parser/union/driver.cxx @@ -0,0 +1,62 @@ +// file : tests/cxx/parser/union/driver.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +// Test xsd:union parsing. +// + +#include <string> +#include <iostream> + +#include "test-pskel.hxx" + +using namespace std; +using namespace test; + +struct int_string_union_pimpl: int_string_union_pskel +{ + virtual void + _characters (const xml_schema::ro_string& s) + { + cout << "'" << s << "'" << endl; + } +}; + +struct type_pimpl: type_pskel +{ +}; + +int +main (int argc, char* argv[]) +{ + if (argc != 2) + { + cerr << "usage: " << argv[0] << " test.xml" << endl; + return 1; + } + + try + { + int_string_union_pimpl int_string_union_p; + type_pimpl type_p; + + type_p.parsers (int_string_union_p); + + xml_schema::document doc_p (type_p, "test", "root"); + + type_p.pre (); + doc_p.parse (argv[1]); + type_p.post_type (); + } + catch (xml_schema::exception const& e) + { + cerr << e << endl; + return 1; + } + catch (std::ios_base::failure const&) + { + cerr << "io failure" << endl; + return 1; + } +} diff --git a/xsd/tests/cxx/parser/union/makefile b/xsd/tests/cxx/parser/union/makefile new file mode 100644 index 0000000..fa2b844 --- /dev/null +++ b/xsd/tests/cxx/parser/union/makefile @@ -0,0 +1,79 @@ +# file : tests/cxx/parser/union/makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../../build/bootstrap.make + +xsd := test.xsd +cxx := driver.cxx + +obj := $(addprefix $(out_base)/,$(cxx:.cxx=.o) $(xsd:.xsd=-pskel.o)) +dep := $(obj:.o=.o.d) + +driver := $(out_base)/driver +test := $(out_base)/.test +clean := $(out_base)/.clean + +# Import. +# +$(call import,\ + $(scf_root)/import/libxerces-c/stub.make,\ + l: xerces_c.l,cpp-options: xerces_c.l.cpp-options) + +# Build. +# +$(driver): $(obj) $(xerces_c.l) + +$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): $(xerces_c.l.cpp-options) + +genf := $(xsd:.xsd=-pskel.hxx) $(xsd:.xsd=-pskel.ixx) $(xsd:.xsd=-pskel.cxx) +gen := $(addprefix $(out_base)/,$(genf)) + +$(gen): xsd := $(out_root)/xsd/xsd +$(gen): $(out_root)/xsd/xsd + +$(call include-dep,$(dep)) + +# Convenience alias for default target. +# +$(out_base)/: $(driver) + + +# Test. +# +$(test): driver := $(driver) +$(test): $(driver) $(src_base)/test.xml $(src_base)/output + $(call message,test $$1,$$1 $(src_base)/test.xml | diff -u $(src_base)/output -,$(driver)) + +# Clean. +# +$(clean): $(driver).o.clean \ + $(addsuffix .cxx.clean,$(obj)) \ + $(addsuffix .cxx.clean,$(dep)) \ + $(addprefix $(out_base)/,$(xsd:.xsd=-pskel.cxx.xsd.clean)) + +# Generated .gitignore. +# +ifeq ($(out_base),$(src_base)) +$(gen): | $(out_base)/.gitignore +$(driver): | $(out_base)/.gitignore + +$(out_base)/.gitignore: files := driver $(genf) +$(clean): $(out_base)/.gitignore.clean + +$(call include,$(bld_root)/git/gitignore.make) +endif + +# How to. +# +$(call include,$(bld_root)/cxx/o-e.make) +$(call include,$(bld_root)/cxx/cxx-o.make) +$(call include,$(bld_root)/cxx/cxx-d.make) +$(call include,$(scf_root)/xsd/parser/xsd-cxx.make) + + +# Dependencies. +# +$(call import,$(src_root)/xsd/makefile) diff --git a/xsd/tests/cxx/parser/union/output b/xsd/tests/cxx/parser/union/output new file mode 100644 index 0000000..a92ffc3 --- /dev/null +++ b/xsd/tests/cxx/parser/union/output @@ -0,0 +1,2 @@ +'one' +'1' diff --git a/xsd/tests/cxx/parser/union/test.xml b/xsd/tests/cxx/parser/union/test.xml new file mode 100644 index 0000000..5b3e799 --- /dev/null +++ b/xsd/tests/cxx/parser/union/test.xml @@ -0,0 +1,10 @@ +<t:root xmlns:t="test" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="test test.xsd"> + + <int-string-union/> + <int-string-union> </int-string-union> + <int-string-union>one</int-string-union> + <int-string-union>1</int-string-union> + +</t:root> diff --git a/xsd/tests/cxx/parser/union/test.xsd b/xsd/tests/cxx/parser/union/test.xsd new file mode 100644 index 0000000..5bf3d47 --- /dev/null +++ b/xsd/tests/cxx/parser/union/test.xsd @@ -0,0 +1,16 @@ +<?xml version="1.0"?> +<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:t="test" targetNamespace="test"> + + <simpleType name="int-string-union"> + <union memberTypes="int string"/> + </simpleType> + + <complexType name="type"> + <choice maxOccurs="unbounded"> + <element name="int-string-union" type="t:int-string-union"/> + </choice> + </complexType> + + <element name="root" type="t:type"/> + +</schema> diff --git a/xsd/tests/cxx/parser/validation/all/driver.cxx b/xsd/tests/cxx/parser/validation/all/driver.cxx new file mode 100644 index 0000000..d4a3839 --- /dev/null +++ b/xsd/tests/cxx/parser/validation/all/driver.cxx @@ -0,0 +1,100 @@ +// file : tests/cxx/parser/validation/all/driver.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +// Test the all compositor validation. +// + +#include <string> +#include <fstream> +#include <iostream> + +#include "test-pskel.hxx" + +using namespace std; +using namespace test; + +struct all_pimpl: all_pskel +{ + virtual void + pre () + { + cout << "{" << endl; + } + + virtual void + a (string const& v) + { + cout << " a = " << v << endl; + } + + virtual void + b (string const& v) + { + cout << " b = " << v << endl; + } + + virtual void + c (string const& v) + { + cout << " c = " << v << endl; + } + + virtual void + post_all () + { + cout << "}" << endl + << endl; + } +}; + +struct type_pimpl: type_pskel +{ +}; + +int +main (int argc, char* argv[]) +{ + if (argc != 2) + { + cerr << "usage: " << argv[0] << " test.xml" << endl; + return 1; + } + + try + { + xml_schema::string_pimpl string_p; + all_pimpl all_p; + type_pimpl type_p; + + all_p.parsers (string_p, string_p, string_p); + type_p.parsers (all_p); + + xml_schema::document doc_p (type_p, "test", "root"); + + try + { + ifstream ifs (argv[1]); + type_p.pre (); + doc_p.parse (ifs, argv[1], "", xml_schema::flags::dont_validate); + type_p.post_type (); + } + catch (xml_schema::exception const& e) + { + cout << " " << e << endl + << "}" << endl + << endl; + } + } + catch (xml_schema::exception const& e) + { + cerr << e << endl; + return 1; + } + catch (ios_base::failure const&) + { + cerr << "io failure" << endl; + return 1; + } +} diff --git a/xsd/tests/cxx/parser/validation/all/makefile b/xsd/tests/cxx/parser/validation/all/makefile new file mode 100644 index 0000000..6336fdc --- /dev/null +++ b/xsd/tests/cxx/parser/validation/all/makefile @@ -0,0 +1,89 @@ +# file : tests/cxx/parser/validation/all/makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../../../build/bootstrap.make + +xsd := test.xsd +cxx := driver.cxx + +tests := 000 001 002 003 + +obj := $(addprefix $(out_base)/,$(cxx:.cxx=.o) $(xsd:.xsd=-pskel.o)) +dep := $(obj:.o=.o.d) + +driver := $(out_base)/driver +test := $(out_base)/.test +clean := $(out_base)/.clean + +# Import. +# +$(call import,\ + $(scf_root)/import/libxerces-c/stub.make,\ + l: xerces_c.l,cpp-options: xerces_c.l.cpp-options) + +# Build. +# +$(driver): $(obj) $(xerces_c.l) + +$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): $(xerces_c.l.cpp-options) + +genf := $(xsd:.xsd=-pskel.hxx) $(xsd:.xsd=-pskel.ixx) $(xsd:.xsd=-pskel.cxx) +gen := $(addprefix $(out_base)/,$(genf)) + +$(gen): xsd := $(out_root)/xsd/xsd +$(gen): xsd_options := --generate-validation +$(gen): $(out_root)/xsd/xsd + +$(call include-dep,$(dep)) + + +# Convenience alias for default target. +# +$(out_base)/: $(driver) + + +# Test. +# +test_targets := $(addprefix $(out_base)/.test-,$(tests)) + +$(test): $(test_targets) +$(test_targets): driver := $(driver) + +.PHONY: $(out_base)/.test-% +$(out_base)/.test-%: $(driver) $(src_base)/test.xsd $(src_base)/test-%.xml $(src_base)/test-%.std + $(call message,test $(out_base)/$*,$(driver) $(src_base)/test-$*.xml | diff -u $(src_base)/test-$*.std -) + + +# Clean. +# +$(clean): $(driver).o.clean \ + $(addsuffix .cxx.clean,$(obj)) \ + $(addsuffix .cxx.clean,$(dep)) \ + $(addprefix $(out_base)/,$(xsd:.xsd=-pskel.cxx.xsd.clean)) + +# Generated .gitignore. +# +ifeq ($(out_base),$(src_base)) +$(gen): | $(out_base)/.gitignore +$(driver): | $(out_base)/.gitignore + +$(out_base)/.gitignore: files := driver $(genf) +$(clean): $(out_base)/.gitignore.clean + +$(call include,$(bld_root)/git/gitignore.make) +endif + +# How to. +# +$(call include,$(bld_root)/cxx/o-e.make) +$(call include,$(bld_root)/cxx/cxx-o.make) +$(call include,$(bld_root)/cxx/cxx-d.make) +$(call include,$(scf_root)/xsd/parser/xsd-cxx.make) + + +# Dependencies. +# +$(call import,$(src_root)/xsd/makefile) diff --git a/xsd/tests/cxx/parser/validation/all/test-000.std b/xsd/tests/cxx/parser/validation/all/test-000.std new file mode 100644 index 0000000..b4445f2 --- /dev/null +++ b/xsd/tests/cxx/parser/validation/all/test-000.std @@ -0,0 +1,46 @@ +{ + a = a + b = b + c = c +} + +{ + a = a + c = c + b = b +} + +{ + b = b + a = a + c = c +} + +{ + b = b + c = c + a = a +} + +{ + c = c + a = a + b = b +} + +{ + c = c + b = b + a = a +} + +{ + a = a + b = b +} + +{ + a = a + b = b +} + diff --git a/xsd/tests/cxx/parser/validation/all/test-000.xml b/xsd/tests/cxx/parser/validation/all/test-000.xml new file mode 100644 index 0000000..6e46fae --- /dev/null +++ b/xsd/tests/cxx/parser/validation/all/test-000.xml @@ -0,0 +1,53 @@ +<t:root xmlns:t="test" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="test test.xsd"> + + <!-- all combinations --> + <all> + <a>a</a> + <b>b</b> + <c>c</c> + </all> + + <all> + <a>a</a> + <c>c</c> + <b>b</b> + </all> + + <all> + <b>b</b> + <a>a</a> + <c>c</c> + </all> + + <all> + <b>b</b> + <c>c</c> + <a>a</a> + </all> + + <all> + <c>c</c> + <a>a</a> + <b>b</b> + </all> + + <all> + <c>c</c> + <b>b</b> + <a>a</a> + </all> + + <!-- optional c is not present --> + <all> + <a>a</a> + <b>b</b> + </all> + + <all> + <a>a</a> + <b>b</b> + </all> + +</t:root> diff --git a/xsd/tests/cxx/parser/validation/all/test-001.std b/xsd/tests/cxx/parser/validation/all/test-001.std new file mode 100644 index 0000000..0472ad9 --- /dev/null +++ b/xsd/tests/cxx/parser/validation/all/test-001.std @@ -0,0 +1,6 @@ +{ + a = a + c = c + :9:9 error: expected element 'b' +} + diff --git a/xsd/tests/cxx/parser/validation/all/test-001.xml b/xsd/tests/cxx/parser/validation/all/test-001.xml new file mode 100644 index 0000000..3df5600 --- /dev/null +++ b/xsd/tests/cxx/parser/validation/all/test-001.xml @@ -0,0 +1,11 @@ +<t:root xmlns:t="test" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="test test.xsd"> + + <!-- required b is not present (invalid) --> + <all> + <a>a</a> + <c>c</c> + </all> + +</t:root> diff --git a/xsd/tests/cxx/parser/validation/all/test-002.std b/xsd/tests/cxx/parser/validation/all/test-002.std new file mode 100644 index 0000000..c014230 --- /dev/null +++ b/xsd/tests/cxx/parser/validation/all/test-002.std @@ -0,0 +1,4 @@ +{ + :7:9 error: expected element 'a' +} + diff --git a/xsd/tests/cxx/parser/validation/all/test-002.xml b/xsd/tests/cxx/parser/validation/all/test-002.xml new file mode 100644 index 0000000..aed0c0c --- /dev/null +++ b/xsd/tests/cxx/parser/validation/all/test-002.xml @@ -0,0 +1,9 @@ +<t:root xmlns:t="test" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="test test.xsd"> + + <!-- invalid --> + <all> + </all> + +</t:root> diff --git a/xsd/tests/cxx/parser/validation/all/test-003.std b/xsd/tests/cxx/parser/validation/all/test-003.std new file mode 100644 index 0000000..dd8c0d3 --- /dev/null +++ b/xsd/tests/cxx/parser/validation/all/test-003.std @@ -0,0 +1,6 @@ +{ + a = a + b = b + :9:7 error: unexpected element 'a' +} + diff --git a/xsd/tests/cxx/parser/validation/all/test-003.xml b/xsd/tests/cxx/parser/validation/all/test-003.xml new file mode 100644 index 0000000..b147cba --- /dev/null +++ b/xsd/tests/cxx/parser/validation/all/test-003.xml @@ -0,0 +1,12 @@ +<t:root xmlns:t="test" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="test test.xsd"> + + <!-- invalid --> + <all> + <a>a</a> + <b>b</b> + <a>a</a> + </all> + +</t:root> diff --git a/xsd/tests/cxx/parser/validation/all/test.xsd b/xsd/tests/cxx/parser/validation/all/test.xsd new file mode 100644 index 0000000..1f670e3 --- /dev/null +++ b/xsd/tests/cxx/parser/validation/all/test.xsd @@ -0,0 +1,20 @@ +<?xml version="1.0"?> +<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:t="test" targetNamespace="test"> + + <complexType name="all"> + <all minOccurs="1"> + <element name="a" type="string"/> + <element name="b" type="string"/> + <element name="c" type="string" minOccurs="0"/> + </all> + </complexType> + + <complexType name="type"> + <sequence> + <element name="all" type="t:all" maxOccurs="unbounded"/> + </sequence> + </complexType> + + <element name="root" type="t:type"/> + +</schema> diff --git a/xsd/tests/cxx/parser/validation/any/driver.cxx b/xsd/tests/cxx/parser/validation/any/driver.cxx new file mode 100644 index 0000000..e858285 --- /dev/null +++ b/xsd/tests/cxx/parser/validation/any/driver.cxx @@ -0,0 +1,123 @@ +// file : tests/cxx/parser/validation/any/driver.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +// Test the any particle validation. +// + +#include <string> +#include <fstream> +#include <iostream> + +#include "test-pskel.hxx" + +using namespace std; +using namespace test; +using xml_schema::ro_string; + +struct any_a_pimpl: any_a_pskel +{ + virtual void + pre () + { + cout << "{" << endl; + } + + virtual void + a (string const& v) + { + cout << " a = " << v << endl; + } + + virtual void + x (string const& v) + { + cout << " x = " << v << endl; + } + + virtual void + _start_any_element (ro_string const&, + ro_string const& n, + ro_string const*) + { + cout << " start any element '" << n << "'" << endl; + } + + virtual void + _end_any_element (ro_string const&, ro_string const& n) + { + cout << " end any element '" << n << "'" << endl; + } + + virtual void + _any_attribute (ro_string const&, + ro_string const& n, + ro_string const& v) + { + cout << " any attribute " << n << " = '" << v << "'" << endl; + } + + virtual void + _any_characters (ro_string const& s) + { + cout << " any text: '" << s << "'" << endl; + } + + virtual void + post_any_a () + { + cout << "}" << endl + << endl; + } +}; + +struct type_pimpl: type_pskel +{ +}; + +int +main (int argc, char* argv[]) +{ + if (argc != 2) + { + cerr << "usage: " << argv[0] << " test.xml" << endl; + return 1; + } + + try + { + xml_schema::string_pimpl string_p; + any_a_pimpl any_a_p; + type_pimpl type_p; + + any_a_p.parsers (string_p, string_p); + type_p.parsers (any_a_p); + + xml_schema::document doc_p (type_p, "test", "root"); + + try + { + ifstream ifs (argv[1]); + type_p.pre (); + doc_p.parse (ifs, argv[1], "", xml_schema::flags::dont_validate); + type_p.post_type (); + } + catch (xml_schema::exception const& e) + { + cout << " " << e << endl + << "}" << endl + << endl; + } + } + catch (xml_schema::exception const& e) + { + cerr << e << endl; + return 1; + } + catch (ios_base::failure const&) + { + cerr << "io failure" << endl; + return 1; + } +} diff --git a/xsd/tests/cxx/parser/validation/any/makefile b/xsd/tests/cxx/parser/validation/any/makefile new file mode 100644 index 0000000..084a131 --- /dev/null +++ b/xsd/tests/cxx/parser/validation/any/makefile @@ -0,0 +1,89 @@ +# file : tests/cxx/parser/validation/any/makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../../../build/bootstrap.make + +xsd := test.xsd +cxx := driver.cxx + +tests := 000 + +obj := $(addprefix $(out_base)/,$(cxx:.cxx=.o) $(xsd:.xsd=-pskel.o)) +dep := $(obj:.o=.o.d) + +driver := $(out_base)/driver +test := $(out_base)/.test +clean := $(out_base)/.clean + +# Import. +# +$(call import,\ + $(scf_root)/import/libxerces-c/stub.make,\ + l: xerces_c.l,cpp-options: xerces_c.l.cpp-options) + +# Build. +# +$(driver): $(obj) $(xerces_c.l) + +$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): $(xerces_c.l.cpp-options) + +genf := $(xsd:.xsd=-pskel.hxx) $(xsd:.xsd=-pskel.ixx) $(xsd:.xsd=-pskel.cxx) +gen := $(addprefix $(out_base)/,$(genf)) + +$(gen): xsd := $(out_root)/xsd/xsd +$(gen): xsd_options := --generate-validation +$(gen): $(out_root)/xsd/xsd + +$(call include-dep,$(dep)) + + +# Convenience alias for default target. +# +$(out_base)/: $(driver) + + +# Test. +# +test_targets := $(addprefix $(out_base)/.test-,$(tests)) + +$(test): $(test_targets) +$(test_targets): driver := $(driver) + +.PHONY: $(out_base)/.test-% +$(out_base)/.test-%: $(driver) $(src_base)/test.xsd $(src_base)/test-%.xml $(src_base)/test-%.std + $(call message,test $(out_base)/$*,$(driver) $(src_base)/test-$*.xml | diff -u $(src_base)/test-$*.std -) + + +# Clean. +# +$(clean): $(driver).o.clean \ + $(addsuffix .cxx.clean,$(obj)) \ + $(addsuffix .cxx.clean,$(dep)) \ + $(addprefix $(out_base)/,$(xsd:.xsd=-pskel.cxx.xsd.clean)) + +# Generated .gitignore. +# +ifeq ($(out_base),$(src_base)) +$(gen): | $(out_base)/.gitignore +$(driver): | $(out_base)/.gitignore + +$(out_base)/.gitignore: files := driver $(genf) +$(clean): $(out_base)/.gitignore.clean + +$(call include,$(bld_root)/git/gitignore.make) +endif + +# How to. +# +$(call include,$(bld_root)/cxx/o-e.make) +$(call include,$(bld_root)/cxx/cxx-o.make) +$(call include,$(bld_root)/cxx/cxx-d.make) +$(call include,$(scf_root)/xsd/parser/xsd-cxx.make) + + +# Dependencies. +# +$(call import,$(src_root)/xsd/makefile) diff --git a/xsd/tests/cxx/parser/validation/any/test-000.std b/xsd/tests/cxx/parser/validation/any/test-000.std new file mode 100644 index 0000000..a1cc6e3 --- /dev/null +++ b/xsd/tests/cxx/parser/validation/any/test-000.std @@ -0,0 +1,29 @@ +{ + start any element 'any' + end any element 'any' +} + +{ + start any element 'any' + any attribute x = 'xxx' + any text: 'aaa' + start any element 'a' + any text: 'bbb' + end any element 'a' + any text: 'ccc' + end any element 'any' +} + +{ + x = x + a = a + start any element 'any' + any attribute x = 'xxx' + any text: 'aaa' + start any element 'a' + any text: 'bbb' + end any element 'a' + any text: 'ccc' + end any element 'any' +} + diff --git a/xsd/tests/cxx/parser/validation/any/test-000.xml b/xsd/tests/cxx/parser/validation/any/test-000.xml new file mode 100644 index 0000000..f1a0c83 --- /dev/null +++ b/xsd/tests/cxx/parser/validation/any/test-000.xml @@ -0,0 +1,21 @@ +<t:root xmlns:t="test" + xmlns:o="other" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="test test.xsd"> + + <!-- test dispatching of any-nested elements and attributes --> + + <any-a> + <o:any/> + </any-a> + + <any-a> + <o:any x="xxx">aaa<a>bbb</a>ccc</o:any> + </any-a> + + <any-a x="x"> + <a>a</a> + <o:any x="xxx">aaa<a>bbb</a>ccc</o:any> + </any-a> + +</t:root> diff --git a/xsd/tests/cxx/parser/validation/any/test.xsd b/xsd/tests/cxx/parser/validation/any/test.xsd new file mode 100644 index 0000000..c05aeb5 --- /dev/null +++ b/xsd/tests/cxx/parser/validation/any/test.xsd @@ -0,0 +1,20 @@ +<?xml version="1.0"?> +<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:t="test" targetNamespace="test"> + + <complexType name="any-a"> + <sequence> + <element name="a" type="string" minOccurs="0"/> + <any namespace="other" processContents="skip" maxOccurs="unbounded"/> + </sequence> + <attribute name="x" type="string"/> + </complexType> + + <complexType name="type"> + <choice maxOccurs="unbounded"> + <element name="any-a" type="t:any-a"/> + </choice> + </complexType> + + <element name="root" type="t:type"/> + +</schema> diff --git a/xsd/tests/cxx/parser/validation/attribute/driver.cxx b/xsd/tests/cxx/parser/validation/attribute/driver.cxx new file mode 100644 index 0000000..e726ad8 --- /dev/null +++ b/xsd/tests/cxx/parser/validation/attribute/driver.cxx @@ -0,0 +1,199 @@ +// file : tests/cxx/parser/validation/attribute/driver.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +// Test attribute and attribute wildcard (anyAttribute) validation. +// + +#include <string> +#include <fstream> +#include <iostream> + +#include "test-pskel.hxx" + +using namespace std; +using namespace test; +using xml_schema::ro_string; + +struct pass_a_pimpl: pass_a_pskel +{ + virtual void + pre () + { + cout << "pass-a" << endl + << "{" << endl; + } + + virtual void + a (string const& v) + { + cout << " a = " << v << endl; + } + + virtual void + b (string const& v) + { + cout << " b = " << v << endl; + } + + virtual void + _any_attribute (ro_string const& ns, + ro_string const& name, + ro_string const& value) + { + cout << " any: " << ns << "#" << name << " = " << value << endl; + } + + virtual void + post_pass_a () + { + cout << "}" << endl + << endl; + } +}; + +struct pass_b_pimpl: pass_b_pskel +{ + virtual void + pre () + { + cout << "pass-b" << endl + << "{" << endl; + } + + virtual void + a (string const& v) + { + cout << " a = " << v << endl; + } + + virtual void + b (string const& v) + { + cout << " b = " << v << endl; + } + + virtual void + _any_attribute (ro_string const& ns, + ro_string const& name, + ro_string const& value) + { + cout << " any: " << ns << "#" << name << " = " << value << endl; + } + + virtual void + post_pass_b () + { + cout << "}" << endl + << endl; + } +}; + +struct pass_c_pimpl: pass_c_pskel +{ + virtual void + pre () + { + cout << "pass-c" << endl + << "{" << endl; + } + + virtual void + a (string const& v) + { + cout << " a = " << v << endl; + } + + virtual void + b (string const& v) + { + cout << " b = " << v << endl; + } + + virtual void + post_pass_c () + { + cout << "}" << endl + << endl; + } +}; + +struct fail_pimpl: fail_pskel +{ + virtual void + pre () + { + cout << "fail" << endl + << "{" << endl; + } + + virtual void + a (string const& v) + { + cout << " a = " << v << endl; + } + + virtual void + post_fail () + { + cout << "}" << endl + << endl; + } +}; + +struct type_pimpl: type_pskel +{ +}; + +int +main (int argc, char* argv[]) +{ + if (argc != 2) + { + cerr << "usage: " << argv[0] << " test.xml" << endl; + return 1; + } + + try + { + xml_schema::string_pimpl string_p; + pass_a_pimpl pass_a_p; + pass_b_pimpl pass_b_p; + pass_c_pimpl pass_c_p; + fail_pimpl fail_p; + type_pimpl type_p; + + pass_a_p.parsers (string_p, string_p); + pass_b_p.parsers (string_p, string_p); + pass_c_p.parsers (string_p, string_p); + fail_p.parsers (string_p); + type_p.parsers (pass_a_p, pass_b_p, pass_c_p, fail_p); + + xml_schema::document doc_p (type_p, "test", "root"); + + try + { + ifstream ifs (argv[1]); + type_p.pre (); + doc_p.parse (ifs, argv[1], "", xml_schema::flags::dont_validate); + type_p.post_type (); + } + catch (xml_schema::exception const& e) + { + cout << " " << e << endl + << "}" << endl + << endl; + } + } + catch (xml_schema::exception const& e) + { + cerr << e << endl; + return 1; + } + catch (ios_base::failure const&) + { + cerr << "io failure" << endl; + return 1; + } +} diff --git a/xsd/tests/cxx/parser/validation/attribute/makefile b/xsd/tests/cxx/parser/validation/attribute/makefile new file mode 100644 index 0000000..0f7df21 --- /dev/null +++ b/xsd/tests/cxx/parser/validation/attribute/makefile @@ -0,0 +1,89 @@ +# file : tests/cxx/parser/validation/attribute/makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../../../build/bootstrap.make + +xsd := test.xsd +cxx := driver.cxx + +tests := 000 + +obj := $(addprefix $(out_base)/,$(cxx:.cxx=.o) $(xsd:.xsd=-pskel.o)) +dep := $(obj:.o=.o.d) + +driver := $(out_base)/driver +test := $(out_base)/.test +clean := $(out_base)/.clean + +# Import. +# +$(call import,\ + $(scf_root)/import/libxerces-c/stub.make,\ + l: xerces_c.l,cpp-options: xerces_c.l.cpp-options) + +# Build. +# +$(driver): $(obj) $(xerces_c.l) + +$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): $(xerces_c.l.cpp-options) + +genf := $(xsd:.xsd=-pskel.hxx) $(xsd:.xsd=-pskel.ixx) $(xsd:.xsd=-pskel.cxx) +gen := $(addprefix $(out_base)/,$(genf)) + +$(gen): xsd := $(out_root)/xsd/xsd +$(gen): xsd_options := --generate-validation +$(gen): $(out_root)/xsd/xsd + +$(call include-dep,$(dep)) + + +# Convenience alias for default target. +# +$(out_base)/: $(driver) + + +# Test. +# +test_targets := $(addprefix $(out_base)/.test-,$(tests)) + +$(test): $(test_targets) +$(test_targets): driver := $(driver) + +.PHONY: $(out_base)/.test-% +$(out_base)/.test-%: $(driver) $(src_base)/test.xsd $(src_base)/test-%.xml $(src_base)/test-%.std + $(call message,test $(out_base)/$*,$(driver) $(src_base)/test-$*.xml | diff -u $(src_base)/test-$*.std -) + + +# Clean. +# +$(clean): $(driver).o.clean \ + $(addsuffix .cxx.clean,$(obj)) \ + $(addsuffix .cxx.clean,$(dep)) \ + $(addprefix $(out_base)/,$(xsd:.xsd=-pskel.cxx.xsd.clean)) + +# Generated .gitignore. +# +ifeq ($(out_base),$(src_base)) +$(gen): | $(out_base)/.gitignore +$(driver): | $(out_base)/.gitignore + +$(out_base)/.gitignore: files := driver $(genf) +$(clean): $(out_base)/.gitignore.clean + +$(call include,$(bld_root)/git/gitignore.make) +endif + +# How to. +# +$(call include,$(bld_root)/cxx/o-e.make) +$(call include,$(bld_root)/cxx/cxx-o.make) +$(call include,$(bld_root)/cxx/cxx-d.make) +$(call include,$(scf_root)/xsd/parser/xsd-cxx.make) + + +# Dependencies. +# +$(call import,$(src_root)/xsd/makefile) diff --git a/xsd/tests/cxx/parser/validation/attribute/test-000.std b/xsd/tests/cxx/parser/validation/attribute/test-000.std new file mode 100644 index 0000000..847b054 --- /dev/null +++ b/xsd/tests/cxx/parser/validation/attribute/test-000.std @@ -0,0 +1,24 @@ +pass-a +{ + b = b + any: test#foo = foo + any: test#bar = bar +} + +pass-b +{ + a = a + b = b +} + +pass-c +{ + a = a + b = b +} + +fail +{ + :8:10 error: expected attribute 'a' +} + diff --git a/xsd/tests/cxx/parser/validation/attribute/test-000.xml b/xsd/tests/cxx/parser/validation/attribute/test-000.xml new file mode 100644 index 0000000..b994d1a --- /dev/null +++ b/xsd/tests/cxx/parser/validation/attribute/test-000.xml @@ -0,0 +1,10 @@ +<t:root xmlns:t="test" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="test test.xsd"> + + <pass-a b="b" t:foo="foo" t:bar="bar"/> + <pass-b a="a" b="b"/> + <pass-c a="a" b="b"/> + <fail/> + +</t:root> diff --git a/xsd/tests/cxx/parser/validation/attribute/test.xsd b/xsd/tests/cxx/parser/validation/attribute/test.xsd new file mode 100644 index 0000000..833eb8e --- /dev/null +++ b/xsd/tests/cxx/parser/validation/attribute/test.xsd @@ -0,0 +1,71 @@ +<?xml version="1.0"?> +<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:t="test" targetNamespace="test"> + + + <!-- Test optional and required attributes as well as a wildcard. --> + <complexType name="pass-a"> + <attribute name="a" type="string" use="optional"/> + <attribute name="b" type="string" use="required"/> + <anyAttribute namespace="##targetNamespace" processContents="skip"/> + </complexType> + + + <!-- Test that in inheritance attributes are checked before wildcards. --> + <complexType name="pass-b-base"> + <attribute name="a" type="string"/> + <anyAttribute namespace="#any" processContents="skip"/> + </complexType> + + <complexType name="pass-b"> + <complexContent> + <extension base="t:pass-b-base"> + <attribute name="b" type="string"/> + <anyAttribute namespace="#any" processContents="skip"/> + </extension> + </complexContent> + </complexType> + + + <!-- Test that in inheritance by restriction required attribute is + checked for even though it is not explicitly mentioned in + derived. --> + <complexType name="pass-c-base"> + <attribute name="a" type="string" use="required"/> + <attribute name="b" type="string" use="optional"/> + </complexType> + + <complexType name="pass-c"> + <complexContent> + <restriction base="t:pass-c-base"> + <attribute name="b" type="string" use="required"/> + </restriction> + </complexContent> + </complexType> + + + <!-- Test detection of missing required attribute. --> + <complexType name="fail-base"> + <attribute name="a" type="string" use="optional"/> + </complexType> + + <complexType name="fail"> + <complexContent> + <restriction base="t:fail-base"> + <attribute name="a" type="string" use="required"/> + </restriction> + </complexContent> + </complexType> + + + <complexType name="type"> + <sequence> + <element name="pass-a" type="t:pass-a"/> + <element name="pass-b" type="t:pass-b"/> + <element name="pass-c" type="t:pass-c"/> + <element name="fail" type="t:fail"/> + </sequence> + </complexType> + + <element name="root" type="t:type"/> + +</schema> diff --git a/xsd/tests/cxx/parser/validation/built-in/any-type/driver.cxx b/xsd/tests/cxx/parser/validation/built-in/any-type/driver.cxx new file mode 100644 index 0000000..46ccc96 --- /dev/null +++ b/xsd/tests/cxx/parser/validation/built-in/any-type/driver.cxx @@ -0,0 +1,156 @@ +// file : tests/cxx/parser/validation/built-in/any-type/driver.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +// Test the anyType and anySimpleType validation. +// + +#include <string> +#include <fstream> +#include <iostream> + +#include "test-pskel.hxx" + +using namespace std; +using namespace test; +using xml_schema::ro_string; + +struct any_type_pimpl: xml_schema::any_type_pimpl +{ + virtual void + pre () + { + cout << "{" << endl; + } + + virtual void + _start_any_element (ro_string const&, + ro_string const& n, + ro_string const*) + { + cout << " start any element '" << n << "'" << endl; + } + + virtual void + _end_any_element (ro_string const&, ro_string const& n) + { + cout << " end any element '" << n << "'" << endl; + } + + virtual void + _any_attribute (ro_string const&, + ro_string const& n, + ro_string const& v) + { + cout << " any attribute " << n << " = '" << v << "'" << endl; + } + + virtual void + _any_characters (ro_string const& s) + { + cout << " any text: '" << s << "'" << endl; + } + + virtual void + post_any_type () + { + cout << "}" << endl + << endl; + } +}; + +struct any_simple_type_pimpl: xml_schema::any_simple_type_pimpl +{ + virtual void + pre () + { + cout << "{" << endl; + } + + virtual void + _any_characters (ro_string const& s) + { + cout << " any text: '" << s << "'" << endl; + } + + virtual void + post_any_simple_type () + { + cout << "}" << endl + << endl; + } +}; + +struct any_extension_pimpl: virtual any_extension_pskel, + any_type_pimpl + +{ + virtual void + x (const string& v) + { + cout << " x = " << v << endl; + } +}; + +struct any_simple_extension_pimpl: virtual any_simple_extension_pskel, + any_simple_type_pimpl +{ + virtual void + x (const string& v) + { + cout << " x = " << v << endl; + } +}; + +struct type_pimpl: type_pskel +{ +}; + +int +main (int argc, char* argv[]) +{ + if (argc != 2) + { + cerr << "usage: " << argv[0] << " test.xml" << endl; + return 1; + } + + try + { + xml_schema::string_pimpl string_p; + + any_type_pimpl any_type_p; + any_simple_type_pimpl any_simple_type_p; + + any_extension_pimpl any_extension_p; + any_simple_extension_pimpl any_simple_extension_p; + + type_pimpl type_p; + + any_extension_p.parsers (string_p); + any_simple_extension_p.parsers (string_p); + + type_p.parsers (any_type_p, + any_extension_p, + any_simple_extension_p, + any_simple_type_p); + + xml_schema::document doc_p (type_p, "test", "root"); + + ifstream ifs (argv[1]); + type_p.pre (); + doc_p.parse (ifs, argv[1], "", xml_schema::flags::dont_validate); + type_p.post_type (); + } + catch (xml_schema::exception const& e) + { + cerr << e << endl; + return 1; + } + catch (ios_base::failure const&) + { + cerr << "io failure" << endl; + return 1; + } +} diff --git a/xsd/tests/cxx/parser/validation/built-in/any-type/makefile b/xsd/tests/cxx/parser/validation/built-in/any-type/makefile new file mode 100644 index 0000000..bf42aac --- /dev/null +++ b/xsd/tests/cxx/parser/validation/built-in/any-type/makefile @@ -0,0 +1,89 @@ +# file : tests/cxx/parser/validation/built-in/any-type/makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../../../../build/bootstrap.make + +xsd := test.xsd +cxx := driver.cxx + +tests := 000 + +obj := $(addprefix $(out_base)/,$(cxx:.cxx=.o) $(xsd:.xsd=-pskel.o)) +dep := $(obj:.o=.o.d) + +driver := $(out_base)/driver +test := $(out_base)/.test +clean := $(out_base)/.clean + +# Import. +# +$(call import,\ + $(scf_root)/import/libxerces-c/stub.make,\ + l: xerces_c.l,cpp-options: xerces_c.l.cpp-options) + +# Build. +# +$(driver): $(obj) $(xerces_c.l) + +$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): $(xerces_c.l.cpp-options) + +genf := $(xsd:.xsd=-pskel.hxx) $(xsd:.xsd=-pskel.ixx) $(xsd:.xsd=-pskel.cxx) +gen := $(addprefix $(out_base)/,$(genf)) + +$(gen): xsd := $(out_root)/xsd/xsd +$(gen): xsd_options := --generate-validation +$(gen): $(out_root)/xsd/xsd + +$(call include-dep,$(dep)) + + +# Convenience alias for default target. +# +$(out_base)/: $(driver) + + +# Test. +# +test_targets := $(addprefix $(out_base)/.test-,$(tests)) + +$(test): $(test_targets) +$(test_targets): driver := $(driver) + +.PHONY: $(out_base)/.test-% +$(out_base)/.test-%: $(driver) $(src_base)/test.xsd $(src_base)/test-%.xml $(src_base)/test-%.std + $(call message,test $(out_base)/$*,$(driver) $(src_base)/test-$*.xml | diff -u $(src_base)/test-$*.std -) + + +# Clean. +# +$(clean): $(driver).o.clean \ + $(addsuffix .cxx.clean,$(obj)) \ + $(addsuffix .cxx.clean,$(dep)) \ + $(addprefix $(out_base)/,$(xsd:.xsd=-pskel.cxx.xsd.clean)) + +# Generated .gitignore. +# +ifeq ($(out_base),$(src_base)) +$(gen): | $(out_base)/.gitignore +$(driver): | $(out_base)/.gitignore + +$(out_base)/.gitignore: files := driver $(genf) +$(clean): $(out_base)/.gitignore.clean + +$(call include,$(bld_root)/git/gitignore.make) +endif + +# How to. +# +$(call include,$(bld_root)/cxx/o-e.make) +$(call include,$(bld_root)/cxx/cxx-o.make) +$(call include,$(bld_root)/cxx/cxx-d.make) +$(call include,$(scf_root)/xsd/parser/xsd-cxx.make) + + +# Dependencies. +# +$(call import,$(src_root)/xsd/makefile) diff --git a/xsd/tests/cxx/parser/validation/built-in/any-type/test-000.std b/xsd/tests/cxx/parser/validation/built-in/any-type/test-000.std new file mode 100644 index 0000000..84d7b3a --- /dev/null +++ b/xsd/tests/cxx/parser/validation/built-in/any-type/test-000.std @@ -0,0 +1,99 @@ +{ + any text: '123abc' +} + +{ + any text: ' + ' + start any element 'any' + end any element 'any' + any text: ' + ' +} + +{ + any text: ' + ' + start any element 'any' + any attribute x = 'xxx' + any text: 'aaa' + start any element 'a' + any text: 'bbb' + end any element 'a' + any text: 'ccc' + end any element 'any' + any text: ' + ' +} + +{ + any attribute x = 'x' + any text: ' + ' + start any element 'a' + any text: 'a' + end any element 'a' + any text: ' + ' + start any element 'any' + any attribute x = 'xxx' + any text: 'aaa' + start any element 'a' + any text: 'bbb' + end any element 'a' + any text: 'ccc' + end any element 'any' + any text: ' + ' +} + +{ + any text: ' + ' + start any element 'any' + end any element 'any' + any text: ' + ' +} + +{ + any text: ' + ' + start any element 'any' + any attribute x = 'xxx' + any text: 'aaa' + start any element 'a' + any text: 'bbb' + end any element 'a' + any text: 'ccc' + end any element 'any' + any text: ' + ' +} + +{ + x = x + any text: ' + ' + start any element 'a' + any text: 'a' + end any element 'a' + any text: ' + ' + start any element 'any' + any attribute x = 'xxx' + any text: 'aaa' + start any element 'a' + any text: 'bbb' + end any element 'a' + any text: 'ccc' + end any element 'any' + any text: ' + ' +} + +{ + x = x + any text: 'abc123' +} + diff --git a/xsd/tests/cxx/parser/validation/built-in/any-type/test-000.xml b/xsd/tests/cxx/parser/validation/built-in/any-type/test-000.xml new file mode 100644 index 0000000..7875b7e --- /dev/null +++ b/xsd/tests/cxx/parser/validation/built-in/any-type/test-000.xml @@ -0,0 +1,41 @@ +<t:root xmlns:t="test" + xmlns:o="other" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="test test.xsd" + as="123abc"> + + <!-- test dispatching of anyType nested elements and attributes --> + + <a> + <o:any/> + </a> + + <a> + <o:any x="xxx">aaa<a>bbb</a>ccc</o:any> + </a> + + <a x="x"> + <a>a</a> + <o:any x="xxx">aaa<a>bbb</a>ccc</o:any> + </a> + + <!-- anyType extension --> + + <a-extension> + <o:any/> + </a-extension> + + <a-extension> + <o:any x="xxx">aaa<a>bbb</a>ccc</o:any> + </a-extension> + + <a-extension x="x"> + <a>a</a> + <o:any x="xxx">aaa<a>bbb</a>ccc</o:any> + </a-extension> + + <!-- anySimpleType extension --> + + <as-extension x="x">abc123</as-extension> + +</t:root> diff --git a/xsd/tests/cxx/parser/validation/built-in/any-type/test.xsd b/xsd/tests/cxx/parser/validation/built-in/any-type/test.xsd new file mode 100644 index 0000000..86a4e13 --- /dev/null +++ b/xsd/tests/cxx/parser/validation/built-in/any-type/test.xsd @@ -0,0 +1,31 @@ +<?xml version="1.0"?> +<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:t="test" targetNamespace="test"> + + <complexType name="any-extension"> + <complexContent mixed="true"> + <extension base="anyType"> + <attribute name="x" type="string"/> + </extension> + </complexContent> + </complexType> + + <complexType name="any-simple-extension"> + <simpleContent> + <extension base="anySimpleType"> + <attribute name="x" type="string"/> + </extension> + </simpleContent> + </complexType> + + <complexType name="type"> + <choice maxOccurs="unbounded"> + <element name="a" type="anyType"/> + <element name="a-extension" type="t:any-extension"/> + <element name="as-extension" type="t:any-simple-extension"/> + </choice> + <attribute name="as" type="anySimpleType"/> + </complexType> + + <element name="root" type="t:type"/> + +</schema> diff --git a/xsd/tests/cxx/parser/validation/built-in/binary/driver.cxx b/xsd/tests/cxx/parser/validation/built-in/binary/driver.cxx new file mode 100644 index 0000000..e75d55f --- /dev/null +++ b/xsd/tests/cxx/parser/validation/built-in/binary/driver.cxx @@ -0,0 +1,155 @@ +// file : tests/cxx/parser/validation/built-in/binary/driver.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +// Test the built-in base64Binary and hexBinary types validation. +// +#include <cassert> + +#include <xsd/cxx/parser/validating/exceptions.hxx> +#include <xsd/cxx/parser/validating/xml-schema-pimpl.hxx> + +using namespace xsd::cxx::parser::validating; + +template <typename T> +bool +test_post_fail (T& p) +{ + try + { + p._post (); + } + catch (invalid_value<char> const&) + { + return true; + } + + return false; +} + +int +main () +{ + typedef xsd::cxx::parser::buffer buffer; + + // Good. + // + + // hexBinary + // + { + hex_binary_pimpl<char> p; + p.pre (); + p._pre (); + p._characters (" \t\n "); + p._characters (" "); + p._post (); + assert (*p.post_hex_binary () == buffer ()); + } + + { + hex_binary_pimpl<char> p; + p.pre (); + p._pre (); + p._characters (" \t\n313"); + p._characters ("23334356162636a6b "); + p._post (); + assert (*p.post_hex_binary () == buffer ("12345abcjk", 10)); + } + + // base64Binary + // + { + base64_binary_pimpl<char> p; + p.pre (); + p._pre (); + p._characters (" \t\n "); + p._characters ("MTIzND "); + p._characters ("VhYmNqaw = = "); + p._post (); + assert (*p.post_base64_binary () == buffer ("12345abcjk", 10)); + } + + { + base64_binary_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("YQ=="); + p._post (); + assert (*p.post_base64_binary () == buffer ("a", 1)); + } + + { + base64_binary_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("YWI="); + p._post (); + assert (*p.post_base64_binary () == buffer ("ab", 2)); + } + + { + base64_binary_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("YWJj"); + p._post (); + assert (*p.post_base64_binary () == buffer ("abc", 3)); + } + + // Bad + // + + // hexBinary + // + { + hex_binary_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("313"); + assert (test_post_fail (p)); + } + + { + hex_binary_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("313233343X6162636a6b"); + assert (test_post_fail (p)); + } + + // base64Binary + // + { + base64_binary_pimpl<char> p; + p.pre (); + p._pre (); + // p._characters (""); + assert (test_post_fail (p)); + } + + { + base64_binary_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("YQ"); + assert (test_post_fail (p)); + } + + { + base64_binary_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("=="); + assert (test_post_fail (p)); + } + + { + base64_binary_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("MTIzNDVhYmNqaw=A"); + assert (test_post_fail (p)); + } +} diff --git a/xsd/tests/cxx/parser/validation/built-in/binary/makefile b/xsd/tests/cxx/parser/validation/built-in/binary/makefile new file mode 100644 index 0000000..b729cd0 --- /dev/null +++ b/xsd/tests/cxx/parser/validation/built-in/binary/makefile @@ -0,0 +1,65 @@ +# file : tests/cxx/parser/validation/built-in/binary/makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../../../../build/bootstrap.make + +cxx := driver.cxx + +obj := $(addprefix $(out_base)/,$(cxx:.cxx=.o)) +dep := $(obj:.o=.o.d) + +driver := $(out_base)/driver +test := $(out_base)/.test +clean := $(out_base)/.clean + + +# Import. +# +$(call import,\ + $(scf_root)/import/libxerces-c/stub.make,\ + l: xerces_c.l,cpp-options: xerces_c.l.cpp-options) + +# Build. +# +$(driver): $(obj) $(xerces_c.l) + +$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): $(xerces_c.l.cpp-options) + +$(call include-dep,$(dep)) + +# Convenience alias for default target. +# +$(out_base)/: $(driver) + + +# Test. +# +$(test): driver := $(driver) +$(test): $(driver) + $(call message,test $$1,$$1,$(driver)) + +# Clean. +# +$(clean): $(driver).o.clean \ + $(addsuffix .cxx.clean,$(obj)) \ + $(addsuffix .cxx.clean,$(dep)) + +# Generated .gitignore. +# +ifeq ($(out_base),$(src_base)) +$(driver): | $(out_base)/.gitignore + +$(out_base)/.gitignore: files := driver +$(clean): $(out_base)/.gitignore.clean + +$(call include,$(bld_root)/git/gitignore.make) +endif + +# How to. +# +$(call include,$(bld_root)/cxx/o-e.make) +$(call include,$(bld_root)/cxx/cxx-o.make) +$(call include,$(bld_root)/cxx/cxx-d.make) diff --git a/xsd/tests/cxx/parser/validation/built-in/boolean/driver.cxx b/xsd/tests/cxx/parser/validation/built-in/boolean/driver.cxx new file mode 100644 index 0000000..85586a6 --- /dev/null +++ b/xsd/tests/cxx/parser/validation/built-in/boolean/driver.cxx @@ -0,0 +1,147 @@ +// file : tests/cxx/parser/validation/built-in/boolean/driver.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +// Test the built-in boolean type validation. +// +#include <cassert> + +#include <xsd/cxx/parser/validating/exceptions.hxx> +#include <xsd/cxx/parser/validating/xml-schema-pimpl.hxx> + +using namespace xsd::cxx::parser::validating; + +bool +test_post_fail (boolean_pimpl<char>& p) +{ + try + { + p._post (); + } + catch (invalid_value<char> const&) + { + return true; + } + + return false; +} + +int +main () +{ + // Good. + // + { + boolean_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("true"); + p._post (); + assert (p.post_boolean ()); + } + + { + boolean_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("1"); + p._post (); + assert (p.post_boolean ()); + } + + { + boolean_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("false"); + p._post (); + assert (!p.post_boolean ()); + } + + { + boolean_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("0"); + p._post (); + assert (!p.post_boolean ()); + } + + + { + boolean_pimpl<char> p; + p.pre (); + p._pre (); + p._characters (" true "); + p._post (); + assert (p.post_boolean ()); + } + + { + boolean_pimpl<char> p; + p.pre (); + p._pre (); + p._characters (" "); + p._characters (" \n "); + p._characters (" fa"); + p._characters ("l"); + p._characters ("se "); + p._characters (" \n "); + p._characters (" "); + p._post (); + assert (!p.post_boolean ()); + } + + // Bad + // + { + boolean_pimpl<char> p; + p.pre (); + p._pre (); + //p._characters (""); + assert (test_post_fail (p)); + } + + { + boolean_pimpl<char> p; + p.pre (); + p._pre (); + p._characters (""); + assert (test_post_fail (p)); + } + + { + boolean_pimpl<char> p; + p.pre (); + p._pre (); + p._characters (" "); + assert (test_post_fail (p)); + } + + { + boolean_pimpl<char> p; + p.pre (); + p._pre (); + p._characters (" "); + assert (test_post_fail (p)); + } + + { + boolean_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("fal"); + p._characters ("s "); + p._characters ("e"); + assert (test_post_fail (p)); + } + + { + boolean_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("01"); + assert (test_post_fail (p)); + } +} diff --git a/xsd/tests/cxx/parser/validation/built-in/boolean/makefile b/xsd/tests/cxx/parser/validation/built-in/boolean/makefile new file mode 100644 index 0000000..39ca5e9 --- /dev/null +++ b/xsd/tests/cxx/parser/validation/built-in/boolean/makefile @@ -0,0 +1,65 @@ +# file : tests/cxx/parser/validation/built-in/boolean/makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../../../../build/bootstrap.make + +cxx := driver.cxx + +obj := $(addprefix $(out_base)/,$(cxx:.cxx=.o)) +dep := $(obj:.o=.o.d) + +driver := $(out_base)/driver +test := $(out_base)/.test +clean := $(out_base)/.clean + + +# Import. +# +$(call import,\ + $(scf_root)/import/libxerces-c/stub.make,\ + l: xerces_c.l,cpp-options: xerces_c.l.cpp-options) + +# Build. +# +$(driver): $(obj) $(xerces_c.l) + +$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): $(xerces_c.l.cpp-options) + +$(call include-dep,$(dep)) + +# Convenience alias for default target. +# +$(out_base)/: $(driver) + + +# Test. +# +$(test): driver := $(driver) +$(test): $(driver) + $(call message,test $$1,$$1,$(driver)) + +# Clean. +# +$(clean): $(driver).o.clean \ + $(addsuffix .cxx.clean,$(obj)) \ + $(addsuffix .cxx.clean,$(dep)) + +# Generated .gitignore. +# +ifeq ($(out_base),$(src_base)) +$(driver): | $(out_base)/.gitignore + +$(out_base)/.gitignore: files := driver +$(clean): $(out_base)/.gitignore.clean + +$(call include,$(bld_root)/git/gitignore.make) +endif + +# How to. +# +$(call include,$(bld_root)/cxx/o-e.make) +$(call include,$(bld_root)/cxx/cxx-o.make) +$(call include,$(bld_root)/cxx/cxx-d.make) diff --git a/xsd/tests/cxx/parser/validation/built-in/byte/driver.cxx b/xsd/tests/cxx/parser/validation/built-in/byte/driver.cxx new file mode 100644 index 0000000..466f004 --- /dev/null +++ b/xsd/tests/cxx/parser/validation/built-in/byte/driver.cxx @@ -0,0 +1,258 @@ +// file : tests/cxx/parser/validation/built-in/byte/driver.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +// Test the built-in byte and unsigned byte types validation. +// +#include <cassert> + +#include <xsd/cxx/parser/validating/exceptions.hxx> +#include <xsd/cxx/parser/validating/xml-schema-pimpl.hxx> + +using namespace xsd::cxx::parser::validating; + +template <typename T> +bool +test_post_fail (T& p) +{ + try + { + p._post (); + } + catch (invalid_value<char> const&) + { + return true; + } + + return false; +} + +int +main () +{ + // Good. + // + { + byte_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("123"); + p._post (); + assert (p.post_byte () == 123); + } + + { + byte_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("\t +123 \n "); + p._post (); + assert (p.post_byte () == 123); + } + + { + byte_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("-123"); + p._post (); + assert (p.post_byte () == -123); + } + + { + byte_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("+123"); + p._post (); + assert (p.post_byte () == 123); + } + + { + byte_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("0000000000000000123"); + p._post (); + assert (p.post_byte () == 123); + } + + { + byte_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("+0000000000000000123"); + p._post (); + assert (p.post_byte () == 123); + } + + { + byte_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("-0000000000000000123"); + p._post (); + assert (p.post_byte () == -123); + } + + { + byte_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("\t \n"); + p._characters (" -"); + p._characters ("00000"); + p._characters ("001"); + p._characters ("23 \n\t"); + p._post (); + assert (p.post_byte () == -123); + } + + { + byte_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("-128"); + p._post (); + assert (p.post_byte () == -128); + } + + { + byte_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("127"); + p._post (); + assert (p.post_byte () == 127); + } + + { + unsigned_byte_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("+123"); + p._post (); + assert (p.post_unsigned_byte () == 123); + } + + { + unsigned_byte_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("0"); + p._post (); + assert (p.post_unsigned_byte () == 0); + } + + { + unsigned_byte_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("255"); + p._post (); + assert (p.post_unsigned_byte () == 255); + } + + // Bad + // + { + byte_pimpl<char> p; + p.pre (); + p._pre (); + // p._characters (""); + assert (test_post_fail (p)); + } + + { + byte_pimpl<char> p; + p.pre (); + p._pre (); + p._characters (""); + assert (test_post_fail (p)); + } + + { + byte_pimpl<char> p; + p.pre (); + p._pre (); + p._characters (" \n \t "); + assert (test_post_fail (p)); + } + + { + byte_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("+"); + assert (test_post_fail (p)); + } + + { + byte_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("-"); + assert (test_post_fail (p)); + } + + { + byte_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("++01"); + assert (test_post_fail (p)); + } + + { + byte_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("--01"); + assert (test_post_fail (p)); + } + + { + byte_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("-01"); + p._characters (" "); + p._characters ("23 "); + assert (test_post_fail (p)); + } + + { + unsigned_byte_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("-123"); + assert (test_post_fail (p)); + } + + // Ranges + // + { + byte_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("-129"); + assert (test_post_fail (p)); + } + + { + byte_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("128"); + assert (test_post_fail (p)); + } + + { + unsigned_byte_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("256"); + assert (test_post_fail (p)); + } +} diff --git a/xsd/tests/cxx/parser/validation/built-in/byte/makefile b/xsd/tests/cxx/parser/validation/built-in/byte/makefile new file mode 100644 index 0000000..32f4b91 --- /dev/null +++ b/xsd/tests/cxx/parser/validation/built-in/byte/makefile @@ -0,0 +1,65 @@ +# file : tests/cxx/parser/validation/built-in/byte/makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../../../../build/bootstrap.make + +cxx := driver.cxx + +obj := $(addprefix $(out_base)/,$(cxx:.cxx=.o)) +dep := $(obj:.o=.o.d) + +driver := $(out_base)/driver +test := $(out_base)/.test +clean := $(out_base)/.clean + + +# Import. +# +$(call import,\ + $(scf_root)/import/libxerces-c/stub.make,\ + l: xerces_c.l,cpp-options: xerces_c.l.cpp-options) + +# Build. +# +$(driver): $(obj) $(xerces_c.l) + +$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): $(xerces_c.l.cpp-options) + +$(call include-dep,$(dep)) + +# Convenience alias for default target. +# +$(out_base)/: $(driver) + + +# Test. +# +$(test): driver := $(driver) +$(test): $(driver) + $(call message,test $$1,$$1,$(driver)) + +# Clean. +# +$(clean): $(driver).o.clean \ + $(addsuffix .cxx.clean,$(obj)) \ + $(addsuffix .cxx.clean,$(dep)) + +# Generated .gitignore. +# +ifeq ($(out_base),$(src_base)) +$(driver): | $(out_base)/.gitignore + +$(out_base)/.gitignore: files := driver +$(clean): $(out_base)/.gitignore.clean + +$(call include,$(bld_root)/git/gitignore.make) +endif + +# How to. +# +$(call include,$(bld_root)/cxx/o-e.make) +$(call include,$(bld_root)/cxx/cxx-o.make) +$(call include,$(bld_root)/cxx/cxx-d.make) diff --git a/xsd/tests/cxx/parser/validation/built-in/date-time/driver.cxx b/xsd/tests/cxx/parser/validation/built-in/date-time/driver.cxx new file mode 100644 index 0000000..6297912 --- /dev/null +++ b/xsd/tests/cxx/parser/validation/built-in/date-time/driver.cxx @@ -0,0 +1,1535 @@ +// file : tests/cxx/parser/validation/built-in/date-time/driver.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +// Test the built-in date and time types validation. +// +#include <cassert> + +#include <xsd/cxx/parser/validating/exceptions.hxx> +#include <xsd/cxx/parser/validating/xml-schema-pimpl.hxx> + +using namespace xsd::cxx::parser::validating; + +template <typename T> +bool +test_post_fail (T& p) +{ + try + { + p._post (); + } + catch (invalid_value<char> const&) + { + return true; + } + + return false; +} + +int +main () +{ + typedef xsd::cxx::parser::gday gday; + typedef xsd::cxx::parser::gmonth gmonth; + typedef xsd::cxx::parser::gyear gyear; + typedef xsd::cxx::parser::gmonth_day gmonth_day; + typedef xsd::cxx::parser::gyear_month gyear_month; + typedef xsd::cxx::parser::date date; + typedef xsd::cxx::parser::time time; + typedef xsd::cxx::parser::date_time date_time; + typedef xsd::cxx::parser::duration duration; + + // Good. + // + + // gday & time zone parsing + // + { + gday_pimpl<char> p; + p.pre (); + p._pre (); + p._characters (" \t\n "); + p._characters ("---1"); + p._characters ("2+12:00"); + p._post (); + assert (p.post_gday () == gday (12, 12, 00)); + } + + { + gday_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("---01"); + p._post (); + assert (p.post_gday () == gday (1)); + } + + { + gday_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("---31"); + p._post (); + assert (p.post_gday () == gday (31)); + } + + { + gday_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("---15Z"); + p._post (); + assert (p.post_gday () == gday (15, 0, 0)); + } + + { + gday_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("---15-14:00"); + p._post (); + assert (p.post_gday () == gday (15, -14, 0)); + } + + // gmonth + // + { + gmonth_pimpl<char> p; + p.pre (); + p._pre (); + p._characters (" \t\n "); + p._characters ("--1"); + p._characters ("0+12:00"); + p._post (); + assert (p.post_gmonth () == gmonth (10, 12, 0)); + } + + { + gmonth_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("--01"); + p._post (); + assert (p.post_gmonth () == gmonth (1)); + } + + { + gmonth_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("--12Z"); + p._post (); + assert (p.post_gmonth () == gmonth (12, 0, 0)); + } + + // gyear + // + { + gyear_pimpl<char> p; + p.pre (); + p._pre (); + p._characters (" \t\n "); + p._characters ("20"); + p._characters ("07+12:00"); + p._post (); + assert (p.post_gyear () == gyear (2007, 12, 00)); + } + + { + gyear_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("0001"); + p._post (); + assert (p.post_gyear () == gyear (1)); + } + + { + gyear_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("-20000Z"); + p._post (); + assert (p.post_gyear () == gyear (-20000, 0, 0)); + } + + // gmonth_day + // + { + gmonth_day_pimpl<char> p; + p.pre (); + p._pre (); + p._characters (" \t\n "); + p._characters ("--1"); + p._characters ("0-28+12:00 "); + p._post (); + assert (p.post_gmonth_day () == gmonth_day (10, 28, 12, 00)); + } + + { + gmonth_day_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("--12-31"); + p._post (); + assert (p.post_gmonth_day () == gmonth_day (12, 31)); + } + + { + gmonth_day_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("--01-01Z"); + p._post (); + assert (p.post_gmonth_day () == gmonth_day (1, 1, 0, 0)); + } + + // gyear_month + // + { + gyear_month_pimpl<char> p; + p.pre (); + p._pre (); + p._characters (" \t\n "); + p._characters ("200"); + p._characters ("7-12+12:00 "); + p._post (); + assert (p.post_gyear_month () == gyear_month (2007, 12, 12, 00)); + } + + { + gyear_month_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("-2007-10"); + p._post (); + assert (p.post_gyear_month () == gyear_month (-2007, 10)); + } + + { + gyear_month_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("20007-10Z"); + p._post (); + assert (p.post_gyear_month () == gyear_month (20007, 10, 0, 0)); + } + + { + gyear_month_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("-20007-01"); + p._post (); + assert (p.post_gyear_month () == gyear_month (-20007, 1)); + } + + // date + // + { + date_pimpl<char> p; + p.pre (); + p._pre (); + p._characters (" \t\n "); + p._characters ("200"); + p._characters ("7-12-26+12:00 "); + p._post (); + assert (p.post_date () == date (2007, 12, 26, 12, 0)); + } + + { + date_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("-2007-10-15"); + p._post (); + assert (p.post_date () == date (-2007, 10, 15)); + } + + { + date_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("20007-12-31Z"); + p._post (); + assert (p.post_date () == date (20007, 12, 31, 0, 0)); + } + + { + date_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("-20007-01-01"); + p._post (); + assert (p.post_date () == date (-20007, 1, 1)); + } + + // time + // + { + time_pimpl<char> p; + p.pre (); + p._pre (); + p._characters (" \t\n "); + p._characters ("12:"); + p._characters ("46:23.456+12:00 "); + p._post (); + assert (p.post_time () == time (12, 46, 23.456, 12, 0)); + } + + { + time_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("12:13:14"); + p._post (); + assert (p.post_time () == time (12, 13, 14.0)); + } + + { + time_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("12:13:14Z"); + p._post (); + assert (p.post_time () == time (12, 13, 14.0, 0, 0)); + } + + // date_time + // + { + date_time_pimpl<char> p; + p.pre (); + p._pre (); + p._characters (" \t\n "); + p._characters ("200"); + p._characters ("7-12-26T12:13:14.123+12:00 "); + p._post (); + assert (p.post_date_time () == + date_time (2007, 12, 26, 12, 13, 14.123, 12, 0)); + } + + { + date_time_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("-2007-10-15T12:13:14"); + p._post (); + assert (p.post_date_time () == date_time (-2007, 10, 15, 12, 13, 14.0)); + } + + { + date_time_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("20007-12-31T12:13:14Z"); + p._post (); + assert (p.post_date_time () == + date_time (20007, 12, 31, 12, 13, 14.0, 0, 0)); + } + + { + date_time_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("-20007-01-01T12:13:14"); + p._post (); + assert (p.post_date_time () == date_time (-20007, 1, 1, 12, 13, 14.0)); + } + + // duration + // + { + duration_pimpl<char> p; + p.pre (); + p._pre (); + p._characters (" \t\n "); + p._characters ("-P200"); + p._characters ("7Y13M32DT25H61M61.123S "); + p._post (); + assert (p.post_duration () == + duration (true, 2007, 13, 32, 25, 61, 61.123)); + } + + { + duration_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("P1Y"); + p._post (); + assert (p.post_duration () == duration (false, 1, 0, 0, 0, 0, 0.0)); + } + + { + duration_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("P1M"); + p._post (); + assert (p.post_duration () == duration (false, 0, 1, 0, 0, 0, 0.0)); + } + + { + duration_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("P1D"); + p._post (); + assert (p.post_duration () == duration (false, 0, 0, 1, 0, 0, 0.0)); + } + + { + duration_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("PT1H"); + p._post (); + assert (p.post_duration () == duration (false, 0, 0, 0, 1, 0, 0.0)); + } + + { + duration_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("PT1M"); + p._post (); + assert (p.post_duration () == duration (false, 0, 0, 0, 0, 1, 0.0)); + } + + { + duration_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("PT1.1S"); + p._post (); + assert (p.post_duration () == duration (false, 0, 0, 0, 0, 0, 1.1)); + } + + { + duration_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("P1YT1S"); + p._post (); + assert (p.post_duration () == duration (false, 1, 0, 0, 0, 0, 1.0)); + } + + // Bad + // + + // gday & time zone parsing + // + { + gday_pimpl<char> p; + p.pre (); + p._pre (); + // p._characters (""); + assert (test_post_fail (p)); + } + + { + gday_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("--12"); + assert (test_post_fail (p)); + } + + { + gday_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("---1"); + assert (test_post_fail (p)); + } + + { + gday_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("---00"); + assert (test_post_fail (p)); + } + + { + gday_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("---32"); + assert (test_post_fail (p)); + } + + { + gday_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("---2X"); + assert (test_post_fail (p)); + } + + { + gday_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("---12asd"); + assert (test_post_fail (p)); + } + + { + gday_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("---12X"); + assert (test_post_fail (p)); + } + + { + gday_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("---1212:00"); + assert (test_post_fail (p)); + } + + { + gday_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("---12+2:00"); + assert (test_post_fail (p)); + } + + { + gday_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("---12+1200"); + assert (test_post_fail (p)); + } + + { + gday_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("---12+15:00"); + assert (test_post_fail (p)); + } + + { + gday_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("---12+12:60"); + assert (test_post_fail (p)); + } + + { + gday_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("---12+14:01"); + assert (test_post_fail (p)); + } + + // gmonth + // + { + gmonth_pimpl<char> p; + p.pre (); + p._pre (); + // p._characters (""); + assert (test_post_fail (p)); + } + + { + gmonth_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("-12"); + assert (test_post_fail (p)); + } + + { + gmonth_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("--00"); + assert (test_post_fail (p)); + } + + { + gmonth_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("--13"); + assert (test_post_fail (p)); + } + + { + gmonth_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("--1X"); + assert (test_post_fail (p)); + } + + { + gmonth_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("--11+12:3o"); + assert (test_post_fail (p)); + } + + // gyear + // + { + gyear_pimpl<char> p; + p.pre (); + p._pre (); + // p._characters (""); + assert (test_post_fail (p)); + } + + { + gyear_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("207"); + assert (test_post_fail (p)); + } + + { + gyear_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("-207"); + assert (test_post_fail (p)); + } + + { + gyear_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("-0000"); + assert (test_post_fail (p)); + } + + { + gyear_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("20X7"); + assert (test_post_fail (p)); + } + + { + gyear_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("2007+12:3o"); + assert (test_post_fail (p)); + } + + // gmonth_day + // + { + gmonth_day_pimpl<char> p; + p.pre (); + p._pre (); + // p._characters (""); + assert (test_post_fail (p)); + } + + { + gmonth_day_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("-12-12"); + assert (test_post_fail (p)); + } + + { + gmonth_day_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("--1212"); + assert (test_post_fail (p)); + } + + { + gmonth_day_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("--12?12"); + assert (test_post_fail (p)); + } + + { + gmonth_day_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("--00-12"); + assert (test_post_fail (p)); + } + + { + gmonth_day_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("--12-00"); + assert (test_post_fail (p)); + } + + { + gmonth_day_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("--13-23"); + assert (test_post_fail (p)); + } + + { + gmonth_day_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("--12-32"); + assert (test_post_fail (p)); + } + + { + gmonth_day_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("--1X-12"); + assert (test_post_fail (p)); + } + + { + gmonth_day_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("--12-2X"); + assert (test_post_fail (p)); + } + + { + gmonth_day_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("--11-11+12:3o"); + assert (test_post_fail (p)); + } + + // gyear_month + // + { + gyear_month_pimpl<char> p; + p.pre (); + p._pre (); + // p._characters (""); + assert (test_post_fail (p)); + } + + { + gyear_month_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("207-01"); + assert (test_post_fail (p)); + } + + { + gyear_month_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("-207-01"); + assert (test_post_fail (p)); + } + + { + gyear_month_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("0000-01"); + assert (test_post_fail (p)); + } + + { + gyear_month_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("20X7-01"); + assert (test_post_fail (p)); + } + + { + gyear_month_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("2007"); + assert (test_post_fail (p)); + } + + { + gyear_month_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("2007?12"); + assert (test_post_fail (p)); + } + + { + gyear_month_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("2007-0"); + assert (test_post_fail (p)); + } + + { + gyear_month_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("2007-00"); + assert (test_post_fail (p)); + } + + { + gyear_month_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("2007-13"); + assert (test_post_fail (p)); + } + + { + gyear_month_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("2007-1X"); + assert (test_post_fail (p)); + } + + { + gyear_month_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("2007-01+12:3o"); + assert (test_post_fail (p)); + } + + // date + // + { + date_pimpl<char> p; + p.pre (); + p._pre (); + // p._characters (""); + assert (test_post_fail (p)); + } + + { + date_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("207-01-01"); + assert (test_post_fail (p)); + } + + { + date_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("-207-01-01"); + assert (test_post_fail (p)); + } + + { + date_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("0000-01-01"); + assert (test_post_fail (p)); + } + + { + date_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("20X7-01-01"); + assert (test_post_fail (p)); + } + + { + date_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("2007"); + assert (test_post_fail (p)); + } + + { + date_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("2007?01-01"); + assert (test_post_fail (p)); + } + + { + date_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("2007-0-01"); + assert (test_post_fail (p)); + } + + { + date_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("2007-00-01"); + assert (test_post_fail (p)); + } + + { + date_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("2007-13-01"); + assert (test_post_fail (p)); + } + + { + date_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("2007-1X-01"); + assert (test_post_fail (p)); + } + + { + date_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("2007-10"); + assert (test_post_fail (p)); + } + + { + date_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("2007-10?12"); + assert (test_post_fail (p)); + } + + { + date_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("2007-10-"); + assert (test_post_fail (p)); + } + + { + date_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("2007-10-0"); + assert (test_post_fail (p)); + } + + { + date_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("2007-10-00"); + assert (test_post_fail (p)); + } + + { + date_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("2007-10-32"); + assert (test_post_fail (p)); + } + + { + date_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("2007-10-2X"); + assert (test_post_fail (p)); + } + + { + date_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("2007-01-01+12:3o"); + assert (test_post_fail (p)); + } + + // time + // + { + time_pimpl<char> p; + p.pre (); + p._pre (); + // p._characters (""); + assert (test_post_fail (p)); + } + + { + time_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("1:01:01"); + assert (test_post_fail (p)); + } + + { + time_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("2X:01:01"); + assert (test_post_fail (p)); + } + + { + time_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("23"); + assert (test_post_fail (p)); + } + + { + time_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("23?01:01"); + assert (test_post_fail (p)); + } + + { + time_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("23:0:01"); + assert (test_post_fail (p)); + } + + { + time_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("23:60:01"); + assert (test_post_fail (p)); + } + + { + time_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("23:4X:01"); + assert (test_post_fail (p)); + } + + { + time_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("23:10"); + assert (test_post_fail (p)); + } + + { + time_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("23:10?12"); + assert (test_post_fail (p)); + } + + { + time_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("23:10:"); + assert (test_post_fail (p)); + } + + { + time_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("23:10:0"); + assert (test_post_fail (p)); + } + + { + time_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("23:10:01."); + assert (test_post_fail (p)); + } + + { + time_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("23:10:60"); + assert (test_post_fail (p)); + } + + { + time_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("23:10:2X"); + assert (test_post_fail (p)); + } + + { + time_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("24:01:00"); + assert (test_post_fail (p)); + } + + { + time_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("24:00:01"); + assert (test_post_fail (p)); + } + + { + time_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("23:01:01+12:3o"); + assert (test_post_fail (p)); + } + + // date_time + // + { + date_time_pimpl<char> p; + p.pre (); + p._pre (); + // p._characters (""); + assert (test_post_fail (p)); + } + + { + date_time_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("207-01-01T12:13:14"); + assert (test_post_fail (p)); + } + + { + date_time_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("-207-01-01T12:13:14"); + assert (test_post_fail (p)); + } + + { + date_time_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("0000-01-01T12:13:14"); + assert (test_post_fail (p)); + } + + { + date_time_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("20X7-01-01T12:13:14"); + assert (test_post_fail (p)); + } + + { + date_time_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("2007"); + assert (test_post_fail (p)); + } + + { + date_time_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("2007?01-01T12:13:14"); + assert (test_post_fail (p)); + } + + { + date_time_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("2007-0-01T12:13:14"); + assert (test_post_fail (p)); + } + + { + date_time_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("2007-00-01T12:13:14"); + assert (test_post_fail (p)); + } + + { + date_time_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("2007-13-01T12:13:14"); + assert (test_post_fail (p)); + } + + { + date_time_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("2007-1X-01T12:13:14"); + assert (test_post_fail (p)); + } + + { + date_time_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("2007-10"); + assert (test_post_fail (p)); + } + + { + date_time_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("2007-10?12T12:13:14"); + assert (test_post_fail (p)); + } + + { + date_time_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("2007-10-T12:13:14"); + assert (test_post_fail (p)); + } + + { + date_time_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("2007-10-0T12:13:14"); + assert (test_post_fail (p)); + } + + { + date_time_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("2007-10-00T12:13:14"); + assert (test_post_fail (p)); + } + + { + date_time_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("2007-10-32T12:13:14"); + assert (test_post_fail (p)); + } + + { + date_time_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("2007-10-2XT12:13:14"); + assert (test_post_fail (p)); + } + + { + date_time_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("2007-01-01T1:01:01"); + assert (test_post_fail (p)); + } + + { + date_time_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("2007-01-01T2X:01:01"); + assert (test_post_fail (p)); + } + + { + date_time_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("2007-01-01T23"); + assert (test_post_fail (p)); + } + + { + date_time_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("2007-01-01T23?01:01"); + assert (test_post_fail (p)); + } + + { + date_time_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("2007-01-01T23:0:01"); + assert (test_post_fail (p)); + } + + { + date_time_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("2007-01-01T23:60:01"); + assert (test_post_fail (p)); + } + + { + date_time_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("2007-01-01T23:4X:01"); + assert (test_post_fail (p)); + } + + { + date_time_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("2007-01-01T23:10"); + assert (test_post_fail (p)); + } + + { + date_time_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("2007-01-01T23:10?12"); + assert (test_post_fail (p)); + } + + { + date_time_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("2007-01-01T23:10:"); + assert (test_post_fail (p)); + } + + { + date_time_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("2007-01-01T23:10:0"); + assert (test_post_fail (p)); + } + + { + date_time_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("2007-01-01T23:10:01."); + assert (test_post_fail (p)); + } + + { + date_time_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("2007-01-01T23:10:60"); + assert (test_post_fail (p)); + } + + { + date_time_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("2007-01-01T23:10:2X"); + assert (test_post_fail (p)); + } + + { + date_time_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("2007-01-01T24:01:00"); + assert (test_post_fail (p)); + } + + { + date_time_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("2007-01-01T24:00:01"); + assert (test_post_fail (p)); + } + + { + date_time_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("23:01:01+12:3o"); + assert (test_post_fail (p)); + } + + { + date_time_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("2007-01-01T12:13:14+12:3o"); + assert (test_post_fail (p)); + } + + // duration + // + { + duration_pimpl<char> p; + p.pre (); + p._pre (); + // p._characters (""); + assert (test_post_fail (p)); + } + + { + duration_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("2007Y"); + assert (test_post_fail (p)); + } + + { + duration_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("-2007Y"); + assert (test_post_fail (p)); + } + + { + duration_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("P-2007Y"); + assert (test_post_fail (p)); + } + + { + duration_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("P-1M"); + assert (test_post_fail (p)); + } + + { + duration_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("P-1D"); + assert (test_post_fail (p)); + } + + { + duration_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("PT-1H"); + assert (test_post_fail (p)); + } + + { + duration_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("PT-1M"); + assert (test_post_fail (p)); + } + + { + duration_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("PT-1.1S"); + assert (test_post_fail (p)); + } + + { + duration_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("P1H1M1S"); + assert (test_post_fail (p)); + } + + { + duration_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("P1M1Y"); + assert (test_post_fail (p)); + } + + { + duration_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("PT1S1H"); + assert (test_post_fail (p)); + } + + { + duration_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("PT1H1Y"); + assert (test_post_fail (p)); + } + + { + duration_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("P1Ygarbage"); + assert (test_post_fail (p)); + } + + { + duration_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("P1YT"); + assert (test_post_fail (p)); + } +} diff --git a/xsd/tests/cxx/parser/validation/built-in/date-time/makefile b/xsd/tests/cxx/parser/validation/built-in/date-time/makefile new file mode 100644 index 0000000..d5e2edc --- /dev/null +++ b/xsd/tests/cxx/parser/validation/built-in/date-time/makefile @@ -0,0 +1,65 @@ +# file : tests/cxx/parser/validation/built-in/date-time/makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../../../../build/bootstrap.make + +cxx := driver.cxx + +obj := $(addprefix $(out_base)/,$(cxx:.cxx=.o)) +dep := $(obj:.o=.o.d) + +driver := $(out_base)/driver +test := $(out_base)/.test +clean := $(out_base)/.clean + + +# Import. +# +$(call import,\ + $(scf_root)/import/libxerces-c/stub.make,\ + l: xerces_c.l,cpp-options: xerces_c.l.cpp-options) + +# Build. +# +$(driver): $(obj) $(xerces_c.l) + +$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): $(xerces_c.l.cpp-options) + +$(call include-dep,$(dep)) + +# Convenience alias for default target. +# +$(out_base)/: $(driver) + + +# Test. +# +$(test): driver := $(driver) +$(test): $(driver) + $(call message,test $$1,$$1,$(driver)) + +# Clean. +# +$(clean): $(driver).o.clean \ + $(addsuffix .cxx.clean,$(obj)) \ + $(addsuffix .cxx.clean,$(dep)) + +# Generated .gitignore. +# +ifeq ($(out_base),$(src_base)) +$(driver): | $(out_base)/.gitignore + +$(out_base)/.gitignore: files := driver +$(clean): $(out_base)/.gitignore.clean + +$(call include,$(bld_root)/git/gitignore.make) +endif + +# How to. +# +$(call include,$(bld_root)/cxx/o-e.make) +$(call include,$(bld_root)/cxx/cxx-o.make) +$(call include,$(bld_root)/cxx/cxx-d.make) diff --git a/xsd/tests/cxx/parser/validation/built-in/float/driver.cxx b/xsd/tests/cxx/parser/validation/built-in/float/driver.cxx new file mode 100644 index 0000000..1f6f0bd --- /dev/null +++ b/xsd/tests/cxx/parser/validation/built-in/float/driver.cxx @@ -0,0 +1,287 @@ +// file : tests/cxx/parser/validation/built-in/float/driver.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +// Test the built-in float, double, and decimal types validation. +// +#include <math.h> +#include <cassert> + +#include <xsd/cxx/parser/validating/exceptions.hxx> +#include <xsd/cxx/parser/validating/xml-schema-pimpl.hxx> + +using namespace xsd::cxx::parser::validating; + +template <typename T> +bool +test_post_fail (T& p) +{ + try + { + p._post (); + } + catch (invalid_value<char> const&) + { + return true; + } + + return false; +} + +int +main () +{ + // Good. + // + + // float + // + { + float_pimpl<char> p; + p.pre (); + p._pre (); + p._characters (" 0000123.456 "); + p._post (); + assert (p.post_float () == 123.456F); + } + + { + float_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("-12.345E2"); + p._post (); + assert (p.post_float () == -12.345E2F); + } + + { + float_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("0"); + p._post (); + assert (p.post_float () == 0.0F); + } + + { + float_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("-0"); + p._post (); + assert (p.post_float () == -0.0F); + } + + { + float_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("INF"); + p._post (); + assert (isinf (p.post_float ())); + } + + { + float_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("-INF"); + p._post (); + assert (isinf (p.post_float ())); + } + + { + float_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("NaN"); + p._post (); + assert (isnan (p.post_float ())); + } + + // double + // + { + double_pimpl<char> p; + p.pre (); + p._pre (); + p._characters (" 0000123.456789 "); + p._post (); + assert (p.post_double () == 123.456789); + } + + { + double_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("-12.3456789E2"); + p._post (); + assert (p.post_double () == -12.3456789E2); + } + + { + double_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("0"); + p._post (); + assert (p.post_double () == 0.0); + } + + { + double_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("-0"); + p._post (); + assert (p.post_double () == -0.0); + } + + { + double_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("INF"); + p._post (); + assert (isinf (p.post_double ())); + } + + { + double_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("-INF"); + p._post (); + assert (isinf (p.post_double ())); + } + + { + double_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("NaN"); + p._post (); + assert (isnan (p.post_double ())); + } + + // decimal + // + { + decimal_pimpl<char> p; + p.pre (); + p._pre (); + p._characters (" 0000123.456789 "); + p._post (); + assert (p.post_decimal () == 123.456789); + } + + { + decimal_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("-123.45678912345"); + p._post (); + assert (p.post_decimal () == -123.45678912345); + } + + { + decimal_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("0"); + p._post (); + assert (p.post_decimal () == 0.0); + } + + { + decimal_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("-0"); + p._post (); + assert (p.post_decimal () == -0.0); + } + + + // Bad + // + + // float + // + { + float_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("+INF"); + assert (test_post_fail (p)); + } + + { + float_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("1.45 E2"); + assert (test_post_fail (p)); + } + + // double + // + { + double_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("+INF"); + assert (test_post_fail (p)); + } + + { + double_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("1.45 E2"); + assert (test_post_fail (p)); + } + + // decimal + // + { + decimal_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("INF"); + assert (test_post_fail (p)); + } + + { + decimal_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("+INF"); + assert (test_post_fail (p)); + } + + { + decimal_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("-INF"); + assert (test_post_fail (p)); + } + + { + decimal_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("NaN"); + assert (test_post_fail (p)); + } + + { + decimal_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("1.45 2"); + assert (test_post_fail (p)); + } +} diff --git a/xsd/tests/cxx/parser/validation/built-in/float/makefile b/xsd/tests/cxx/parser/validation/built-in/float/makefile new file mode 100644 index 0000000..8755f3a --- /dev/null +++ b/xsd/tests/cxx/parser/validation/built-in/float/makefile @@ -0,0 +1,65 @@ +# file : tests/cxx/parser/validation/built-in/float/makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../../../../build/bootstrap.make + +cxx := driver.cxx + +obj := $(addprefix $(out_base)/,$(cxx:.cxx=.o)) +dep := $(obj:.o=.o.d) + +driver := $(out_base)/driver +test := $(out_base)/.test +clean := $(out_base)/.clean + + +# Import. +# +$(call import,\ + $(scf_root)/import/libxerces-c/stub.make,\ + l: xerces_c.l,cpp-options: xerces_c.l.cpp-options) + +# Build. +# +$(driver): $(obj) $(xerces_c.l) + +$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): $(xerces_c.l.cpp-options) + +$(call include-dep,$(dep)) + +# Convenience alias for default target. +# +$(out_base)/: $(driver) + + +# Test. +# +$(test): driver := $(driver) +$(test): $(driver) + $(call message,test $$1,$$1,$(driver)) + +# Clean. +# +$(clean): $(driver).o.clean \ + $(addsuffix .cxx.clean,$(obj)) \ + $(addsuffix .cxx.clean,$(dep)) + +# Generated .gitignore. +# +ifeq ($(out_base),$(src_base)) +$(driver): | $(out_base)/.gitignore + +$(out_base)/.gitignore: files := driver +$(clean): $(out_base)/.gitignore.clean + +$(call include,$(bld_root)/git/gitignore.make) +endif + +# How to. +# +$(call include,$(bld_root)/cxx/o-e.make) +$(call include,$(bld_root)/cxx/cxx-o.make) +$(call include,$(bld_root)/cxx/cxx-d.make) diff --git a/xsd/tests/cxx/parser/validation/built-in/int/driver.cxx b/xsd/tests/cxx/parser/validation/built-in/int/driver.cxx new file mode 100644 index 0000000..00c5947 --- /dev/null +++ b/xsd/tests/cxx/parser/validation/built-in/int/driver.cxx @@ -0,0 +1,118 @@ +// file : tests/cxx/parser/validation/built-in/int/driver.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +// Test the built-in int and unsigned int types validation. +// +#include <cassert> + +#include <xsd/cxx/parser/validating/exceptions.hxx> +#include <xsd/cxx/parser/validating/xml-schema-pimpl.hxx> + +using namespace xsd::cxx::parser::validating; + +template <typename T> +bool +test_post_fail (T& p) +{ + try + { + p._post (); + } + catch (invalid_value<char> const&) + { + return true; + } + + return false; +} + +int +main () +{ + // Good. + // + { + int_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("-2147483648"); + p._post (); + assert (p.post_int () == -2147483648); + } + + { + int_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("0"); + p._post (); + assert (p.post_int () == 0); + } + + { + int_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("2147483647"); + p._post (); + assert (p.post_int () == 2147483647); + } + + { + unsigned_int_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("0"); + p._post (); + assert (p.post_unsigned_int () == 0); + } + + { + unsigned_int_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("4294967295"); + p._post (); + assert (p.post_unsigned_int () == 4294967295); + } + + // Bad + // + + { + unsigned_int_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("-123"); + assert (test_post_fail (p)); + } + + + // Ranges + // + { + int_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("-2147483649"); + assert (test_post_fail (p)); + } + + { + int_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("2147483648"); + assert (test_post_fail (p)); + } + + { + unsigned_int_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("4294967296"); + assert (test_post_fail (p)); + } +} diff --git a/xsd/tests/cxx/parser/validation/built-in/int/makefile b/xsd/tests/cxx/parser/validation/built-in/int/makefile new file mode 100644 index 0000000..4cebe64 --- /dev/null +++ b/xsd/tests/cxx/parser/validation/built-in/int/makefile @@ -0,0 +1,65 @@ +# file : tests/cxx/parser/validation/built-in/int/makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../../../../build/bootstrap.make + +cxx := driver.cxx + +obj := $(addprefix $(out_base)/,$(cxx:.cxx=.o)) +dep := $(obj:.o=.o.d) + +driver := $(out_base)/driver +test := $(out_base)/.test +clean := $(out_base)/.clean + + +# Import. +# +$(call import,\ + $(scf_root)/import/libxerces-c/stub.make,\ + l: xerces_c.l,cpp-options: xerces_c.l.cpp-options) + +# Build. +# +$(driver): $(obj) $(xerces_c.l) + +$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): $(xerces_c.l.cpp-options) + +$(call include-dep,$(dep)) + +# Convenience alias for default target. +# +$(out_base)/: $(driver) + + +# Test. +# +$(test): driver := $(driver) +$(test): $(driver) + $(call message,test $$1,$$1,$(driver)) + +# Clean. +# +$(clean): $(driver).o.clean \ + $(addsuffix .cxx.clean,$(obj)) \ + $(addsuffix .cxx.clean,$(dep)) + +# Generated .gitignore. +# +ifeq ($(out_base),$(src_base)) +$(driver): | $(out_base)/.gitignore + +$(out_base)/.gitignore: files := driver +$(clean): $(out_base)/.gitignore.clean + +$(call include,$(bld_root)/git/gitignore.make) +endif + +# How to. +# +$(call include,$(bld_root)/cxx/o-e.make) +$(call include,$(bld_root)/cxx/cxx-o.make) +$(call include,$(bld_root)/cxx/cxx-d.make) diff --git a/xsd/tests/cxx/parser/validation/built-in/integer/driver.cxx b/xsd/tests/cxx/parser/validation/built-in/integer/driver.cxx new file mode 100644 index 0000000..fa8e4e0 --- /dev/null +++ b/xsd/tests/cxx/parser/validation/built-in/integer/driver.cxx @@ -0,0 +1,305 @@ +// file : tests/cxx/parser/validation/built-in/int/driver.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +// Test the built-in integer & friends types validation. +// +#include <limits.h> + +#include <string> +#include <sstream> +#include <cassert> + +#include <xsd/cxx/parser/validating/exceptions.hxx> +#include <xsd/cxx/parser/validating/xml-schema-pimpl.hxx> + +using namespace std; +using namespace xsd::cxx::parser::validating; + +template <typename T> +bool +test_post_fail (T& p) +{ + try + { + p._post (); + } + catch (invalid_value<char> const&) + { + return true; + } + + return false; +} + +int +main () +{ + // Good. + // + + std::string min; + std::string max; + std::string umax; + + { + ostringstream ostr; + ostr << LLONG_MIN; + min = ostr.str (); + } + + { + ostringstream ostr; + ostr << LLONG_MAX; + max = ostr.str (); + } + + { + ostringstream ostr; + ostr << ULLONG_MAX; + umax = ostr.str (); + } + + // integer + // + { + integer_pimpl<char> p; + p.pre (); + p._pre (); + p._characters (min.c_str ()); + p._post (); + assert (p.post_integer () == LLONG_MIN); + } + + { + integer_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("0"); + p._post (); + assert (p.post_integer () == 0); + } + + { + integer_pimpl<char> p; + p.pre (); + p._pre (); + p._characters (max.c_str ()); + p._post (); + assert (p.post_integer () == LLONG_MAX); + } + + // negative_integer + // + { + negative_integer_pimpl<char> p; + p.pre (); + p._pre (); + p._characters (min.c_str ()); + p._post (); + assert (p.post_negative_integer () == LLONG_MIN); + } + + { + negative_integer_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("-1"); + p._post (); + assert (p.post_negative_integer () == -1); + } + + // non_positive_integer + // + { + non_positive_integer_pimpl<char> p; + p.pre (); + p._pre (); + p._characters (min.c_str ()); + p._post (); + assert (p.post_non_positive_integer () == LLONG_MIN); + } + + { + non_positive_integer_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("+0"); + p._post (); + assert (p.post_non_positive_integer () == 0); + } + + // positive_integer + // + { + positive_integer_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("1"); + p._post (); + assert (p.post_positive_integer () == 1); + } + + { + positive_integer_pimpl<char> p; + p.pre (); + p._pre (); + p._characters (umax.c_str ()); + p._post (); + assert (p.post_positive_integer () == ULLONG_MAX); + } + + // non_negative_integer + // + /* + { + non_negative_integer_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("-0"); + p._post (); + assert (p.post_non_negative_integer () == 0); + } + */ + + { + non_negative_integer_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("0"); + p._post (); + assert (p.post_non_negative_integer () == 0); + } + + { + non_negative_integer_pimpl<char> p; + p.pre (); + p._pre (); + p._characters (umax.c_str ()); + p._post (); + assert (p.post_non_negative_integer () == ULLONG_MAX); + } + + + // Bad + // + + std::string past_min (min); + std::string past_max (max); + std::string past_umax (umax); + + assert (*past_min.rbegin () != '9'); + assert (*past_max.rbegin () != '9'); + assert (*past_umax.rbegin () != '9'); + + (*past_min.rbegin ())++; + (*past_max.rbegin ())++; + (*past_umax.rbegin ())++; + + // integer + // + { + integer_pimpl<char> p; + p.pre (); + p._pre (); + p._characters (past_min.c_str ()); + assert (test_post_fail (p)); + } + + { + integer_pimpl<char> p; + p.pre (); + p._pre (); + p._characters (past_max.c_str ()); + assert (test_post_fail (p)); + } + + // negative_integer + // + { + negative_integer_pimpl<char> p; + p.pre (); + p._pre (); + p._characters (past_min.c_str ()); + assert (test_post_fail (p)); + } + + { + negative_integer_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("-0"); + assert (test_post_fail (p)); + } + + { + negative_integer_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("1"); + assert (test_post_fail (p)); + } + + // non_positive_integer + // + { + non_positive_integer_pimpl<char> p; + p.pre (); + p._pre (); + p._characters (past_min.c_str ()); + assert (test_post_fail (p)); + } + + { + non_positive_integer_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("1"); + assert (test_post_fail (p)); + } + + // positive_integer + // + { + positive_integer_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("-1"); + assert (test_post_fail (p)); + } + + { + positive_integer_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("+0"); + assert (test_post_fail (p)); + } + + { + positive_integer_pimpl<char> p; + p.pre (); + p._pre (); + p._characters (past_umax.c_str ()); + assert (test_post_fail (p)); + } + + // non_negative_integer + // + { + non_negative_integer_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("-1"); + assert (test_post_fail (p)); + } + + { + non_negative_integer_pimpl<char> p; + p.pre (); + p._pre (); + p._characters (past_umax.c_str ()); + assert (test_post_fail (p)); + } +} diff --git a/xsd/tests/cxx/parser/validation/built-in/integer/makefile b/xsd/tests/cxx/parser/validation/built-in/integer/makefile new file mode 100644 index 0000000..6b9d816 --- /dev/null +++ b/xsd/tests/cxx/parser/validation/built-in/integer/makefile @@ -0,0 +1,65 @@ +# file : tests/cxx/parser/validation/built-in/integer/makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../../../../build/bootstrap.make + +cxx := driver.cxx + +obj := $(addprefix $(out_base)/,$(cxx:.cxx=.o)) +dep := $(obj:.o=.o.d) + +driver := $(out_base)/driver +test := $(out_base)/.test +clean := $(out_base)/.clean + + +# Import. +# +$(call import,\ + $(scf_root)/import/libxerces-c/stub.make,\ + l: xerces_c.l,cpp-options: xerces_c.l.cpp-options) + +# Build. +# +$(driver): $(obj) $(xerces_c.l) + +$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): $(xerces_c.l.cpp-options) + +$(call include-dep,$(dep)) + +# Convenience alias for default target. +# +$(out_base)/: $(driver) + + +# Test. +# +$(test): driver := $(driver) +$(test): $(driver) + $(call message,test $$1,$$1,$(driver)) + +# Clean. +# +$(clean): $(driver).o.clean \ + $(addsuffix .cxx.clean,$(obj)) \ + $(addsuffix .cxx.clean,$(dep)) + +# Generated .gitignore. +# +ifeq ($(out_base),$(src_base)) +$(driver): | $(out_base)/.gitignore + +$(out_base)/.gitignore: files := driver +$(clean): $(out_base)/.gitignore.clean + +$(call include,$(bld_root)/git/gitignore.make) +endif + +# How to. +# +$(call include,$(bld_root)/cxx/o-e.make) +$(call include,$(bld_root)/cxx/cxx-o.make) +$(call include,$(bld_root)/cxx/cxx-d.make) diff --git a/xsd/tests/cxx/parser/validation/built-in/long/driver.cxx b/xsd/tests/cxx/parser/validation/built-in/long/driver.cxx new file mode 100644 index 0000000..c7a66c4 --- /dev/null +++ b/xsd/tests/cxx/parser/validation/built-in/long/driver.cxx @@ -0,0 +1,118 @@ +// file : tests/cxx/parser/validation/built-in/long/driver.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +// Test the built-in long and unsigned long types validation. +// +#include <cassert> + +#include <xsd/cxx/parser/validating/exceptions.hxx> +#include <xsd/cxx/parser/validating/xml-schema-pimpl.hxx> + +using namespace xsd::cxx::parser::validating; + +template <typename T> +bool +test_post_fail (T& p) +{ + try + { + p._post (); + } + catch (invalid_value<char> const&) + { + return true; + } + + return false; +} + +int +main () +{ + // Good. + // + { + long_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("-9223372036854775808"); + p._post (); + assert (p.post_long () == (-9223372036854775807LL - 1)); + } + + { + long_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("0"); + p._post (); + assert (p.post_long () == 0); + } + + { + long_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("9223372036854775807"); + p._post (); + assert (p.post_long () == 9223372036854775807LL); + } + + { + unsigned_long_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("0"); + p._post (); + assert (p.post_unsigned_long () == 0); + } + + { + unsigned_long_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("18446744073709551615"); + p._post (); + assert (p.post_unsigned_long () == 18446744073709551615ULL); + } + + // Bad + // + + { + unsigned_long_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("-123"); + assert (test_post_fail (p)); + } + + + // Ranges + // + { + long_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("-9223372036854775809"); + assert (test_post_fail (p)); + } + + { + long_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("9223372036854775808"); + assert (test_post_fail (p)); + } + + { + unsigned_long_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("18446744073709551616"); + assert (test_post_fail (p)); + } +} diff --git a/xsd/tests/cxx/parser/validation/built-in/long/makefile b/xsd/tests/cxx/parser/validation/built-in/long/makefile new file mode 100644 index 0000000..2ab6368 --- /dev/null +++ b/xsd/tests/cxx/parser/validation/built-in/long/makefile @@ -0,0 +1,65 @@ +# file : tests/cxx/parser/validation/built-in/long/makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../../../../build/bootstrap.make + +cxx := driver.cxx + +obj := $(addprefix $(out_base)/,$(cxx:.cxx=.o)) +dep := $(obj:.o=.o.d) + +driver := $(out_base)/driver +test := $(out_base)/.test +clean := $(out_base)/.clean + + +# Import. +# +$(call import,\ + $(scf_root)/import/libxerces-c/stub.make,\ + l: xerces_c.l,cpp-options: xerces_c.l.cpp-options) + +# Build. +# +$(driver): $(obj) $(xerces_c.l) + +$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): $(xerces_c.l.cpp-options) + +$(call include-dep,$(dep)) + +# Convenience alias for default target. +# +$(out_base)/: $(driver) + + +# Test. +# +$(test): driver := $(driver) +$(test): $(driver) + $(call message,test $$1,$$1,$(driver)) + +# Clean. +# +$(clean): $(driver).o.clean \ + $(addsuffix .cxx.clean,$(obj)) \ + $(addsuffix .cxx.clean,$(dep)) + +# Generated .gitignore. +# +ifeq ($(out_base),$(src_base)) +$(driver): | $(out_base)/.gitignore + +$(out_base)/.gitignore: files := driver +$(clean): $(out_base)/.gitignore.clean + +$(call include,$(bld_root)/git/gitignore.make) +endif + +# How to. +# +$(call include,$(bld_root)/cxx/o-e.make) +$(call include,$(bld_root)/cxx/cxx-o.make) +$(call include,$(bld_root)/cxx/cxx-d.make) diff --git a/xsd/tests/cxx/parser/validation/built-in/makefile b/xsd/tests/cxx/parser/validation/built-in/makefile new file mode 100644 index 0000000..34bea8f --- /dev/null +++ b/xsd/tests/cxx/parser/validation/built-in/makefile @@ -0,0 +1,19 @@ +# file : tests/cxx/parser/validation/built-in/makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../../../build/bootstrap.make + +tests := any-type binary boolean byte date-time float int integer long \ +qname short string uri + +default := $(out_base)/ +test := $(out_base)/.test +clean := $(out_base)/.clean + +$(default): $(addprefix $(out_base)/,$(addsuffix /,$(tests))) +$(test): $(addprefix $(out_base)/,$(addsuffix /.test,$(tests))) +$(clean): $(addprefix $(out_base)/,$(addsuffix /.clean,$(tests))) + +$(foreach t,$(tests),$(call import,$(src_base)/$t/makefile)) diff --git a/xsd/tests/cxx/parser/validation/built-in/qname/driver.cxx b/xsd/tests/cxx/parser/validation/built-in/qname/driver.cxx new file mode 100644 index 0000000..3a4bc90 --- /dev/null +++ b/xsd/tests/cxx/parser/validation/built-in/qname/driver.cxx @@ -0,0 +1,107 @@ +// file : tests/cxx/parser/validation/built-in/qname/driver.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +// Test the built-in QName type validation. +// +#include <cassert> + +#include <xsd/cxx/parser/validating/exceptions.hxx> +#include <xsd/cxx/parser/validating/xml-schema-pimpl.hxx> + +using namespace xsd::cxx::parser::validating; + +bool +test_post_fail (qname_pimpl<char>& p) +{ + try + { + p._post (); + } + catch (invalid_value<char> const&) + { + return true; + } + + return false; +} + +int +main () +{ + typedef xsd::cxx::parser::qname<char> qname; + + // Good. + // + { + qname_pimpl<char> p; + p.pre (); + p._pre (); + p._characters (" xsi"); + p._characters (":"); + p._characters ("schemaLocation"); + p._post (); + assert (p.post_qname () == qname ("xsi", "schemaLocation")); + } + + { + qname_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("schemaLocation"); + p._post (); + assert (p.post_qname () == qname ("schemaLocation")); + } + + + // Bad + // + { + qname_pimpl<char> p; + p.pre (); + p._pre (); + //p._characters (""); + assert (test_post_fail (p)); + } + + { + qname_pimpl<char> p; + p.pre (); + p._pre (); + p._characters (":"); + assert (test_post_fail (p)); + } + + { + qname_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("xsi:"); + assert (test_post_fail (p)); + } + + { + qname_pimpl<char> p; + p.pre (); + p._pre (); + p._characters (":schemaLocation"); + assert (test_post_fail (p)); + } + + { + qname_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("x?i:schemaLocation"); + assert (test_post_fail (p)); + } + + { + qname_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("xsi:schema Location"); + assert (test_post_fail (p)); + } +} diff --git a/xsd/tests/cxx/parser/validation/built-in/qname/makefile b/xsd/tests/cxx/parser/validation/built-in/qname/makefile new file mode 100644 index 0000000..5f53fea --- /dev/null +++ b/xsd/tests/cxx/parser/validation/built-in/qname/makefile @@ -0,0 +1,65 @@ +# file : tests/cxx/parser/validation/built-in/qname/makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../../../../build/bootstrap.make + +cxx := driver.cxx + +obj := $(addprefix $(out_base)/,$(cxx:.cxx=.o)) +dep := $(obj:.o=.o.d) + +driver := $(out_base)/driver +test := $(out_base)/.test +clean := $(out_base)/.clean + + +# Import. +# +$(call import,\ + $(scf_root)/import/libxerces-c/stub.make,\ + l: xerces_c.l,cpp-options: xerces_c.l.cpp-options) + +# Build. +# +$(driver): $(obj) $(xerces_c.l) + +$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): $(xerces_c.l.cpp-options) + +$(call include-dep,$(dep)) + +# Convenience alias for default target. +# +$(out_base)/: $(driver) + + +# Test. +# +$(test): driver := $(driver) +$(test): $(driver) + $(call message,test $$1,$$1,$(driver)) + +# Clean. +# +$(clean): $(driver).o.clean \ + $(addsuffix .cxx.clean,$(obj)) \ + $(addsuffix .cxx.clean,$(dep)) + +# Generated .gitignore. +# +ifeq ($(out_base),$(src_base)) +$(driver): | $(out_base)/.gitignore + +$(out_base)/.gitignore: files := driver +$(clean): $(out_base)/.gitignore.clean + +$(call include,$(bld_root)/git/gitignore.make) +endif + +# How to. +# +$(call include,$(bld_root)/cxx/o-e.make) +$(call include,$(bld_root)/cxx/cxx-o.make) +$(call include,$(bld_root)/cxx/cxx-d.make) diff --git a/xsd/tests/cxx/parser/validation/built-in/short/driver.cxx b/xsd/tests/cxx/parser/validation/built-in/short/driver.cxx new file mode 100644 index 0000000..2bb95d2 --- /dev/null +++ b/xsd/tests/cxx/parser/validation/built-in/short/driver.cxx @@ -0,0 +1,118 @@ +// file : tests/cxx/parser/validation/built-in/short/driver.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +// Test the built-in short and unsigned short types validation. +// +#include <cassert> + +#include <xsd/cxx/parser/validating/exceptions.hxx> +#include <xsd/cxx/parser/validating/xml-schema-pimpl.hxx> + +using namespace xsd::cxx::parser::validating; + +template <typename T> +bool +test_post_fail (T& p) +{ + try + { + p._post (); + } + catch (invalid_value<char> const&) + { + return true; + } + + return false; +} + +int +main () +{ + // Good. + // + { + short_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("-32768"); + p._post (); + assert (p.post_short () == -32768); + } + + { + short_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("0"); + p._post (); + assert (p.post_short () == 0); + } + + { + short_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("32767"); + p._post (); + assert (p.post_short () == 32767); + } + + { + unsigned_short_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("0"); + p._post (); + assert (p.post_unsigned_short () == 0); + } + + { + unsigned_short_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("65535"); + p._post (); + assert (p.post_unsigned_short () == 65535); + } + + // Bad + // + + { + unsigned_short_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("-1234"); + assert (test_post_fail (p)); + } + + + // Ranges + // + { + short_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("-32769"); + assert (test_post_fail (p)); + } + + { + short_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("32768"); + assert (test_post_fail (p)); + } + + { + unsigned_short_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("65536"); + assert (test_post_fail (p)); + } +} diff --git a/xsd/tests/cxx/parser/validation/built-in/short/makefile b/xsd/tests/cxx/parser/validation/built-in/short/makefile new file mode 100644 index 0000000..eee8382 --- /dev/null +++ b/xsd/tests/cxx/parser/validation/built-in/short/makefile @@ -0,0 +1,65 @@ +# file : tests/cxx/parser/validation/built-in/short/makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../../../../build/bootstrap.make + +cxx := driver.cxx + +obj := $(addprefix $(out_base)/,$(cxx:.cxx=.o)) +dep := $(obj:.o=.o.d) + +driver := $(out_base)/driver +test := $(out_base)/.test +clean := $(out_base)/.clean + + +# Import. +# +$(call import,\ + $(scf_root)/import/libxerces-c/stub.make,\ + l: xerces_c.l,cpp-options: xerces_c.l.cpp-options) + +# Build. +# +$(driver): $(obj) $(xerces_c.l) + +$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): $(xerces_c.l.cpp-options) + +$(call include-dep,$(dep)) + +# Convenience alias for default target. +# +$(out_base)/: $(driver) + + +# Test. +# +$(test): driver := $(driver) +$(test): $(driver) + $(call message,test $$1,$$1,$(driver)) + +# Clean. +# +$(clean): $(driver).o.clean \ + $(addsuffix .cxx.clean,$(obj)) \ + $(addsuffix .cxx.clean,$(dep)) + +# Generated .gitignore. +# +ifeq ($(out_base),$(src_base)) +$(driver): | $(out_base)/.gitignore + +$(out_base)/.gitignore: files := driver +$(clean): $(out_base)/.gitignore.clean + +$(call include,$(bld_root)/git/gitignore.make) +endif + +# How to. +# +$(call include,$(bld_root)/cxx/o-e.make) +$(call include,$(bld_root)/cxx/cxx-o.make) +$(call include,$(bld_root)/cxx/cxx-d.make) diff --git a/xsd/tests/cxx/parser/validation/built-in/string/driver.cxx b/xsd/tests/cxx/parser/validation/built-in/string/driver.cxx new file mode 100644 index 0000000..2419d59 --- /dev/null +++ b/xsd/tests/cxx/parser/validation/built-in/string/driver.cxx @@ -0,0 +1,514 @@ +// file : tests/cxx/parser/validation/built-in/string/driver.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +// Test the built-in string & friends types validation. +// +#include <string> +#include <cassert> + +#include <xsd/cxx/parser/validating/exceptions.hxx> +#include <xsd/cxx/parser/validating/xml-schema-pimpl.hxx> + +using namespace xsd::cxx::parser::validating; + +template <typename T> +bool +test_post_fail (T& p) +{ + try + { + p._post_impl (); // List implementation needs this to be post_impl. + } + catch (invalid_value<char> const&) + { + return true; + } + + return false; +} + +int +main () +{ + typedef xsd::cxx::parser::string_sequence<char> strings; + + // Good. + // + + // string + // + { + string_pimpl<char> p; + p.pre (); + p._pre (); + p._characters (" \n\t"); + p._characters (" aaa "); + p._characters ("bbb"); + p._characters (" "); + p._post (); + assert (p.post_string () == " \n\t aaa bbb "); + } + + // normalized_string + // + { + normalized_string_pimpl<char> p; + p.pre (); + p._pre (); + p._characters (" \n\t"); + p._characters (" aaa \n\t "); + p._characters (" bbb"); + p._characters (" "); + p._post (); + assert (p.post_normalized_string () == " aaa bbb "); + } + + // token + // + { + token_pimpl<char> p; + p.pre (); + p._pre (); + p._characters (" \n\t"); + p._characters (" aaa \n\t "); + p._characters (" bbb \n\t"); + p._characters (" "); + p._post (); + assert (p.post_token () == "aaa bbb"); + } + + // name + // + { + name_pimpl<char> p; + p.pre (); + p._pre (); + p._characters (" \n\t"); + p._characters (" a:b-c_d123 "); + p._characters (" "); + p._post (); + assert (p.post_name () == "a:b-c_d123"); + } + + { + name_pimpl<char> p; + p.pre (); + p._pre (); + p._characters (" \n\t"); + p._characters (" _12 "); + p._characters (" "); + p._post (); + assert (p.post_name () == "_12"); + } + + { + name_pimpl<char> p; + p.pre (); + p._pre (); + p._characters (" \n\t"); + p._characters (" :12 "); + p._characters (" "); + p._post (); + assert (p.post_name () == ":12"); + } + + // nmtoken + // + { + nmtoken_pimpl<char> p; + p.pre (); + p._pre (); + p._characters (" \n\t"); + p._characters (" 123a:b-c_d123 "); + p._characters (" \n\t"); + p._characters (" "); + p._post (); + assert (p.post_nmtoken () == "123a:b-c_d123"); + } + + // nmtokens + // + { + strings s; + s.push_back ("123"); + s.push_back ("abc"); + + nmtokens_pimpl<char> p; + p.pre (); + p._pre (); + p._characters (" \n\t"); + p._characters (" 123 "); + p._characters (" \n\t abc "); + p._characters (" "); + p._post (); + assert (p.post_nmtokens () == s); + } + + // ncname + // + { + ncname_pimpl<char> p; + p.pre (); + p._pre (); + p._characters (" \n\t"); + p._characters (" a.b-c_d123 "); + p._characters (" "); + p._post (); + assert (p.post_ncname () == "a.b-c_d123"); + } + + // id + // + { + id_pimpl<char> p; + p.pre (); + p._pre (); + p._characters (" \n\t"); + p._characters (" a.b-c_d123 "); + p._characters (" "); + p._post (); + assert (p.post_id () == "a.b-c_d123"); + } + + // idref + // + { + idref_pimpl<char> p; + p.pre (); + p._pre (); + p._characters (" \n\t"); + p._characters (" a.b-c_d123 "); + p._characters (" "); + p._post (); + assert (p.post_idref () == "a.b-c_d123"); + } + + // idrefs + // + { + strings s; + s.push_back ("a123"); + s.push_back ("abc"); + + idrefs_pimpl<char> p; + p.pre (); + p._pre (); + p._characters (" \n\t"); + p._characters (" a123 "); + p._characters (" \n\t abc "); + p._characters (" "); + p._post (); + assert (p.post_idrefs () == s); + } + + // language + // + { + language_pimpl<char> p; + p.pre (); + p._pre (); + p._characters (" x "); + p._post (); + assert (p.post_language () == "x"); + } + + { + language_pimpl<char> p; + p.pre (); + p._pre (); + p._characters (" en "); + p._post (); + assert (p.post_language () == "en"); + } + + { + language_pimpl<char> p; + p.pre (); + p._pre (); + p._characters (" en"); + p._characters ("-us "); + p._post (); + assert (p.post_language () == "en-us"); + } + + { + language_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("one-two-three-four44-seven77-eight888"); + p._post (); + assert (p.post_language () == "one-two-three-four44-seven77-eight888"); + } + + + // Bad + // + + // name + // + { + name_pimpl<char> p; + p.pre (); + p._pre (); + p._characters (""); + assert (test_post_fail (p)); + } + + { + name_pimpl<char> p; + p.pre (); + p._pre (); + p._characters (".a"); + assert (test_post_fail (p)); + } + + { + name_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("-a"); + assert (test_post_fail (p)); + } + + { + name_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("1a"); + assert (test_post_fail (p)); + } + + { + name_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("a,b"); + assert (test_post_fail (p)); + } + + { + name_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("a b"); + assert (test_post_fail (p)); + } + + { + name_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("a<b"); + assert (test_post_fail (p)); + } + + // nmtoken + // + { + nmtoken_pimpl<char> p; + p.pre (); + p._pre (); + p._characters (""); + assert (test_post_fail (p)); + } + + { + nmtoken_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("a,b"); + assert (test_post_fail (p)); + } + + { + nmtoken_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("a b"); + assert (test_post_fail (p)); + } + + { + nmtoken_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("a<b"); + assert (test_post_fail (p)); + } + + // nmtokens + // + { + nmtokens_pimpl<char> p; + p.pre (); + p._pre (); + p._characters (" "); + p._characters (" \t\n "); + assert (test_post_fail (p)); + } + + { + nmtokens_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("ab a,b"); + assert (test_post_fail (p)); + } + + // ncname + // + { + ncname_pimpl<char> p; + p.pre (); + p._pre (); + p._characters (""); + assert (test_post_fail (p)); + } + + { + ncname_pimpl<char> p; + p.pre (); + p._pre (); + p._characters (".a"); + assert (test_post_fail (p)); + } + + { + ncname_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("-a"); + assert (test_post_fail (p)); + } + + { + ncname_pimpl<char> p; + p.pre (); + p._pre (); + p._characters (":a"); + assert (test_post_fail (p)); + } + + { + ncname_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("1a"); + assert (test_post_fail (p)); + } + + { + ncname_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("1:a"); + assert (test_post_fail (p)); + } + + { + ncname_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("a,b"); + assert (test_post_fail (p)); + } + + { + ncname_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("a b"); + assert (test_post_fail (p)); + } + + { + ncname_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("a<b"); + assert (test_post_fail (p)); + } + + // id + // + { + id_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("a b"); + assert (test_post_fail (p)); + } + + // idref + // + { + idref_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("a b"); + assert (test_post_fail (p)); + } + + // idrefs + // + { + idrefs_pimpl<char> p; + p.pre (); + p._pre (); + p._characters (" "); + p._characters (" \t\n "); + assert (test_post_fail (p)); + } + + { + idrefs_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("ab a<b"); + assert (test_post_fail (p)); + } + + // language + // + { + language_pimpl<char> p; + p.pre (); + p._pre (); + p._characters (" "); + assert (test_post_fail (p)); + } + + { + language_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("en-"); + assert (test_post_fail (p)); + } + + { + language_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("a1"); + assert (test_post_fail (p)); + } + + { + language_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("en+us"); + assert (test_post_fail (p)); + } + + { + language_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("en-nine99999"); + assert (test_post_fail (p)); + } +} diff --git a/xsd/tests/cxx/parser/validation/built-in/string/makefile b/xsd/tests/cxx/parser/validation/built-in/string/makefile new file mode 100644 index 0000000..5be3c4c --- /dev/null +++ b/xsd/tests/cxx/parser/validation/built-in/string/makefile @@ -0,0 +1,65 @@ +# file : tests/cxx/parser/validation/built-in/string/makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../../../../build/bootstrap.make + +cxx := driver.cxx + +obj := $(addprefix $(out_base)/,$(cxx:.cxx=.o)) +dep := $(obj:.o=.o.d) + +driver := $(out_base)/driver +test := $(out_base)/.test +clean := $(out_base)/.clean + + +# Import. +# +$(call import,\ + $(scf_root)/import/libxerces-c/stub.make,\ + l: xerces_c.l,cpp-options: xerces_c.l.cpp-options) + +# Build. +# +$(driver): $(obj) $(xerces_c.l) + +$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): $(xerces_c.l.cpp-options) + +$(call include-dep,$(dep)) + +# Convenience alias for default target. +# +$(out_base)/: $(driver) + + +# Test. +# +$(test): driver := $(driver) +$(test): $(driver) + $(call message,test $$1,$$1,$(driver)) + +# Clean. +# +$(clean): $(driver).o.clean \ + $(addsuffix .cxx.clean,$(obj)) \ + $(addsuffix .cxx.clean,$(dep)) + +# Generated .gitignore. +# +ifeq ($(out_base),$(src_base)) +$(driver): | $(out_base)/.gitignore + +$(out_base)/.gitignore: files := driver +$(clean): $(out_base)/.gitignore.clean + +$(call include,$(bld_root)/git/gitignore.make) +endif + +# How to. +# +$(call include,$(bld_root)/cxx/o-e.make) +$(call include,$(bld_root)/cxx/cxx-o.make) +$(call include,$(bld_root)/cxx/cxx-d.make) diff --git a/xsd/tests/cxx/parser/validation/built-in/uri/driver.cxx b/xsd/tests/cxx/parser/validation/built-in/uri/driver.cxx new file mode 100644 index 0000000..f6de3c2 --- /dev/null +++ b/xsd/tests/cxx/parser/validation/built-in/uri/driver.cxx @@ -0,0 +1,55 @@ +// file : tests/cxx/parser/validation/built-in/uri/driver.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +// Test the built-in anyURI type validation. +// +#include <cassert> + +#include <xsd/cxx/parser/validating/exceptions.hxx> +#include <xsd/cxx/parser/validating/xml-schema-pimpl.hxx> + +using namespace xsd::cxx::parser::validating; + +int +main () +{ + // Good. + // + { + uri_pimpl<char> p; + p.pre (); + p._pre (); + p._characters (" "); + p._post (); + assert (p.post_uri () == ""); + } + + { + uri_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("relative"); + p._post (); + assert (p.post_uri () == "relative"); + } + + { + uri_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("#id"); + p._post (); + assert (p.post_uri () == "#id"); + } + + { + uri_pimpl<char> p; + p.pre (); + p._pre (); + p._characters ("http://www.example.com/foo#bar"); + p._post (); + assert (p.post_uri () == "http://www.example.com/foo#bar"); + } +} diff --git a/xsd/tests/cxx/parser/validation/built-in/uri/makefile b/xsd/tests/cxx/parser/validation/built-in/uri/makefile new file mode 100644 index 0000000..ad53e89 --- /dev/null +++ b/xsd/tests/cxx/parser/validation/built-in/uri/makefile @@ -0,0 +1,65 @@ +# file : tests/cxx/parser/validation/built-in/uri/makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../../../../build/bootstrap.make + +cxx := driver.cxx + +obj := $(addprefix $(out_base)/,$(cxx:.cxx=.o)) +dep := $(obj:.o=.o.d) + +driver := $(out_base)/driver +test := $(out_base)/.test +clean := $(out_base)/.clean + + +# Import. +# +$(call import,\ + $(scf_root)/import/libxerces-c/stub.make,\ + l: xerces_c.l,cpp-options: xerces_c.l.cpp-options) + +# Build. +# +$(driver): $(obj) $(xerces_c.l) + +$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): $(xerces_c.l.cpp-options) + +$(call include-dep,$(dep)) + +# Convenience alias for default target. +# +$(out_base)/: $(driver) + + +# Test. +# +$(test): driver := $(driver) +$(test): $(driver) + $(call message,test $$1,$$1,$(driver)) + +# Clean. +# +$(clean): $(driver).o.clean \ + $(addsuffix .cxx.clean,$(obj)) \ + $(addsuffix .cxx.clean,$(dep)) + +# Generated .gitignore. +# +ifeq ($(out_base),$(src_base)) +$(driver): | $(out_base)/.gitignore + +$(out_base)/.gitignore: files := driver +$(clean): $(out_base)/.gitignore.clean + +$(call include,$(bld_root)/git/gitignore.make) +endif + +# How to. +# +$(call include,$(bld_root)/cxx/o-e.make) +$(call include,$(bld_root)/cxx/cxx-o.make) +$(call include,$(bld_root)/cxx/cxx-d.make) diff --git a/xsd/tests/cxx/parser/validation/choice/driver.cxx b/xsd/tests/cxx/parser/validation/choice/driver.cxx new file mode 100644 index 0000000..87cd0a9 --- /dev/null +++ b/xsd/tests/cxx/parser/validation/choice/driver.cxx @@ -0,0 +1,128 @@ +// file : tests/cxx/parser/validation/choice/driver.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +// Test the choice compositor validation. +// + +#include <string> +#include <fstream> +#include <iostream> + +#include "test-pskel.hxx" + +using namespace std; +using namespace test; +using xml_schema::ro_string; + +struct choice_pimpl: choice_pskel +{ + virtual void + pre () + { + cout << "{" << endl; + } + + virtual void + a (string const& v) + { + cout << " a = " << v << endl; + } + + virtual void + b (string const& v) + { + cout << " b = " << v << endl; + } + + virtual void + c (string const& v) + { + cout << " c = " << v << endl; + } + + virtual void + d (string const& v) + { + cout << " d = " << v << endl; + } + + virtual void + _start_any_element (ro_string const& ns, + ro_string const& name, + ro_string const*) + { + cout << " any: " << ns << "#" << name << endl + << " {" << endl; + } + + virtual void + _any_characters (ro_string const& v) + { + cout << " chars = " << v << endl; + } + + virtual void + _end_any_element (ro_string const&, ro_string const&) + { + cout << " }" << endl; + } + + virtual void + post_choice () + { + cout << "}" << endl + << endl; + } +}; + +struct type_pimpl: type_pskel +{ +}; + +int +main (int argc, char* argv[]) +{ + if (argc != 2) + { + cerr << "usage: " << argv[0] << " test.xml" << endl; + return 1; + } + + try + { + xml_schema::string_pimpl string_p; + choice_pimpl choice_p; + type_pimpl type_p; + + choice_p.parsers (string_p, string_p, string_p, string_p); + type_p.parsers (choice_p); + + xml_schema::document doc_p (type_p, "test", "root"); + + try + { + ifstream ifs (argv[1]); + type_p.pre (); + doc_p.parse (ifs, argv[1], "", xml_schema::flags::dont_validate); + type_p.post_type (); + } + catch (xml_schema::exception const& e) + { + cout << " " << e << endl + << "}" << endl + << endl; + } + } + catch (xml_schema::exception const& e) + { + cerr << e << endl; + return 1; + } + catch (ios_base::failure const&) + { + cerr << "io failure" << endl; + return 1; + } +} diff --git a/xsd/tests/cxx/parser/validation/choice/makefile b/xsd/tests/cxx/parser/validation/choice/makefile new file mode 100644 index 0000000..f113bd5 --- /dev/null +++ b/xsd/tests/cxx/parser/validation/choice/makefile @@ -0,0 +1,89 @@ +# file : tests/cxx/parser/validation/choice/makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../../../build/bootstrap.make + +xsd := test.xsd +cxx := driver.cxx + +tests := 000 001 002 003 004 + +obj := $(addprefix $(out_base)/,$(cxx:.cxx=.o) $(xsd:.xsd=-pskel.o)) +dep := $(obj:.o=.o.d) + +driver := $(out_base)/driver +test := $(out_base)/.test +clean := $(out_base)/.clean + +# Import. +# +$(call import,\ + $(scf_root)/import/libxerces-c/stub.make,\ + l: xerces_c.l,cpp-options: xerces_c.l.cpp-options) + +# Build. +# +$(driver): $(obj) $(xerces_c.l) + +$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): $(xerces_c.l.cpp-options) + +genf := $(xsd:.xsd=-pskel.hxx) $(xsd:.xsd=-pskel.ixx) $(xsd:.xsd=-pskel.cxx) +gen := $(addprefix $(out_base)/,$(genf)) + +$(gen): xsd := $(out_root)/xsd/xsd +$(gen): xsd_options := --generate-validation +$(gen): $(out_root)/xsd/xsd + +$(call include-dep,$(dep)) + + +# Convenience alias for default target. +# +$(out_base)/: $(driver) + + +# Test. +# +test_targets := $(addprefix $(out_base)/.test-,$(tests)) + +$(test): $(test_targets) +$(test_targets): driver := $(driver) + +.PHONY: $(out_base)/.test-% +$(out_base)/.test-%: $(driver) $(src_base)/test.xsd $(src_base)/test-%.xml $(src_base)/test-%.std + $(call message,test $(out_base)/$*,$(driver) $(src_base)/test-$*.xml | diff -u $(src_base)/test-$*.std -) + + +# Clean. +# +$(clean): $(driver).o.clean \ + $(addsuffix .cxx.clean,$(obj)) \ + $(addsuffix .cxx.clean,$(dep)) \ + $(addprefix $(out_base)/,$(xsd:.xsd=-pskel.cxx.xsd.clean)) + +# Generated .gitignore. +# +ifeq ($(out_base),$(src_base)) +$(gen): | $(out_base)/.gitignore +$(driver): | $(out_base)/.gitignore + +$(out_base)/.gitignore: files := driver $(genf) +$(clean): $(out_base)/.gitignore.clean + +$(call include,$(bld_root)/git/gitignore.make) +endif + +# How to. +# +$(call include,$(bld_root)/cxx/o-e.make) +$(call include,$(bld_root)/cxx/cxx-o.make) +$(call include,$(bld_root)/cxx/cxx-d.make) +$(call include,$(scf_root)/xsd/parser/xsd-cxx.make) + + +# Dependencies. +# +$(call import,$(src_root)/xsd/makefile) diff --git a/xsd/tests/cxx/parser/validation/choice/test-000.std b/xsd/tests/cxx/parser/validation/choice/test-000.std new file mode 100644 index 0000000..856b7f5 --- /dev/null +++ b/xsd/tests/cxx/parser/validation/choice/test-000.std @@ -0,0 +1,22 @@ +{ + a = a + b = b +} + +{ + c = c + d = d + any: other#any + { + chars = any + } + a = a +} + +{ + c = c + d = d + d = d + a = a +} + diff --git a/xsd/tests/cxx/parser/validation/choice/test-000.xml b/xsd/tests/cxx/parser/validation/choice/test-000.xml new file mode 100644 index 0000000..39b9614 --- /dev/null +++ b/xsd/tests/cxx/parser/validation/choice/test-000.xml @@ -0,0 +1,30 @@ +<t:root xmlns:t="test" + xmlns:o="other" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="test test.xsd"> + + <choice> + <a>a</a> + + <b>b</b> + </choice> + + <choice> + <c>c</c> + <d>d</d> + + <o:any>any</o:any> + + <a>a</a> + </choice> + + <choice> + <c>c</c> + <d>d</d> + + <d>d</d> + + <a>a</a> + </choice> + +</t:root> diff --git a/xsd/tests/cxx/parser/validation/choice/test-001.std b/xsd/tests/cxx/parser/validation/choice/test-001.std new file mode 100644 index 0000000..8a78666 --- /dev/null +++ b/xsd/tests/cxx/parser/validation/choice/test-001.std @@ -0,0 +1,4 @@ +{ + :8:12 error: expected element 'a' +} + diff --git a/xsd/tests/cxx/parser/validation/choice/test-001.xml b/xsd/tests/cxx/parser/validation/choice/test-001.xml new file mode 100644 index 0000000..c509e0d --- /dev/null +++ b/xsd/tests/cxx/parser/validation/choice/test-001.xml @@ -0,0 +1,10 @@ +<t:root xmlns:t="test" + xmlns:o="other" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="test test.xsd"> + + <!-- invalid --> + <choice> + </choice> + +</t:root> diff --git a/xsd/tests/cxx/parser/validation/choice/test-002.std b/xsd/tests/cxx/parser/validation/choice/test-002.std new file mode 100644 index 0000000..1dc1a3a --- /dev/null +++ b/xsd/tests/cxx/parser/validation/choice/test-002.std @@ -0,0 +1,11 @@ +{ + c = c + d = d + any: other#any + { + chars = any + } + a = a + :14:8 error: unexpected element 'b' +} + diff --git a/xsd/tests/cxx/parser/validation/choice/test-002.xml b/xsd/tests/cxx/parser/validation/choice/test-002.xml new file mode 100644 index 0000000..3b7e663 --- /dev/null +++ b/xsd/tests/cxx/parser/validation/choice/test-002.xml @@ -0,0 +1,17 @@ +<t:root xmlns:t="test" + xmlns:o="other" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="test test.xsd"> + + <!-- invalid --> + <choice> + <c>c</c> + <d>d</d> + + <o:any>any</o:any> + + <a>a</a> + <b>b</b> + </choice> + +</t:root> diff --git a/xsd/tests/cxx/parser/validation/choice/test-003.std b/xsd/tests/cxx/parser/validation/choice/test-003.std new file mode 100644 index 0000000..29d5e44 --- /dev/null +++ b/xsd/tests/cxx/parser/validation/choice/test-003.std @@ -0,0 +1,5 @@ +{ + c = c + :9:12 error: expected element 'd' +} + diff --git a/xsd/tests/cxx/parser/validation/choice/test-003.xml b/xsd/tests/cxx/parser/validation/choice/test-003.xml new file mode 100644 index 0000000..ba15c7e --- /dev/null +++ b/xsd/tests/cxx/parser/validation/choice/test-003.xml @@ -0,0 +1,11 @@ +<t:root xmlns:t="test" + xmlns:o="other" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="test test.xsd"> + + <!-- invalid --> + <choice> + <c>c</c> + </choice> + +</t:root> diff --git a/xsd/tests/cxx/parser/validation/choice/test-004.std b/xsd/tests/cxx/parser/validation/choice/test-004.std new file mode 100644 index 0000000..4a7530b --- /dev/null +++ b/xsd/tests/cxx/parser/validation/choice/test-004.std @@ -0,0 +1,4 @@ +{ + :8:8 error: expected element 'a' instead of 'x' +} + diff --git a/xsd/tests/cxx/parser/validation/choice/test-004.xml b/xsd/tests/cxx/parser/validation/choice/test-004.xml new file mode 100644 index 0000000..f6960dd --- /dev/null +++ b/xsd/tests/cxx/parser/validation/choice/test-004.xml @@ -0,0 +1,11 @@ +<t:root xmlns:t="test" + xmlns:o="other" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="test test.xsd"> + + <!-- invalid --> + <choice> + <x>x</x> + </choice> + +</t:root> diff --git a/xsd/tests/cxx/parser/validation/choice/test.xsd b/xsd/tests/cxx/parser/validation/choice/test.xsd new file mode 100644 index 0000000..8132bbb --- /dev/null +++ b/xsd/tests/cxx/parser/validation/choice/test.xsd @@ -0,0 +1,24 @@ +<?xml version="1.0"?> +<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:t="test" targetNamespace="test"> + + <complexType name="choice"> + <choice maxOccurs="3"> + <element name="a" type="string"/> + <element name="b" type="string" maxOccurs="unbounded"/> + <sequence> + <element name="c" type="string" minOccurs="0"/> + <element name="d" type="string"/> + </sequence> + <any namespace="other" maxOccurs="unbounded"/> + </choice> + </complexType> + + <complexType name="type"> + <sequence> + <element name="choice" type="t:choice" maxOccurs="unbounded"/> + </sequence> + </complexType> + + <element name="root" type="t:type"/> + +</schema> diff --git a/xsd/tests/cxx/parser/validation/makefile b/xsd/tests/cxx/parser/validation/makefile new file mode 100644 index 0000000..5b7b884 --- /dev/null +++ b/xsd/tests/cxx/parser/validation/makefile @@ -0,0 +1,18 @@ +# file : tests/cxx/parser/validation/makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../../build/bootstrap.make + +tests := all any attribute built-in choice restriction sequence + +default := $(out_base)/ +test := $(out_base)/.test +clean := $(out_base)/.clean + +$(default): $(addprefix $(out_base)/,$(addsuffix /,$(tests))) +$(test): $(addprefix $(out_base)/,$(addsuffix /.test,$(tests))) +$(clean): $(addprefix $(out_base)/,$(addsuffix /.clean,$(tests))) + +$(foreach t,$(tests),$(call import,$(src_base)/$t/makefile)) diff --git a/xsd/tests/cxx/parser/validation/restriction/driver.cxx b/xsd/tests/cxx/parser/validation/restriction/driver.cxx new file mode 100644 index 0000000..40a2bc9 --- /dev/null +++ b/xsd/tests/cxx/parser/validation/restriction/driver.cxx @@ -0,0 +1,109 @@ +// file : tests/cxx/parser/validation/restriction/driver.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +// Test the restriction compositor validation. +// + +#include <string> +#include <fstream> +#include <iostream> + +#include "test-pskel.hxx" + +using namespace std; +using namespace test; + +struct base_a_pimpl: base_a_pskel +{ +}; + +struct restriction_a_pimpl: restriction_a_pskel +{ +}; + +struct extension_b_pimpl: extension_b_pskel +{ +}; + +struct restriction_b_pimpl: restriction_b_pskel +{ +}; + +struct type_b_pimpl: type_b_pskel +{ +}; + +struct type_r_pimpl: type_r_pskel +{ +}; + + +int +main (int argc, char* argv[]) +{ + if (argc != 2) + { + cerr << "usage: " << argv[0] << " test.xml" << endl; + return 1; + } + + try + { + xml_schema::string_pimpl string_p; + base_a_pimpl base_a_p; + restriction_a_pimpl restriction_a_p; + extension_b_pimpl extension_b_p; + restriction_b_pimpl restriction_b_p; + type_b_pimpl type_b_p; + type_r_pimpl type_r_p; + + base_a_p.parsers (string_p, string_p, string_p, + string_p, string_p, string_p); + + restriction_a_p.parsers (string_p, string_p, string_p, + string_p, string_p, string_p); + + extension_b_p.parsers (string_p, string_p, string_p, + string_p, string_p); + + restriction_b_p.parsers (string_p, string_p, string_p, + string_p, string_p); + + type_b_p.parsers (base_a_p, extension_b_p); + type_r_p.parsers (restriction_a_p, restriction_b_p); + + xml_schema::document doc_b_p (type_b_p, "test", "root"); + xml_schema::document doc_r_p (type_r_p, "test", "root"); + + { + ifstream ifs (argv[1]); + type_b_p.pre (); + doc_b_p.parse (ifs, argv[1], "", xml_schema::flags::dont_validate); + type_b_p.post_type_b (); + } + + try + { + ifstream ifs (argv[1]); + type_r_p.pre (); + doc_r_p.parse (ifs, argv[1], "", xml_schema::flags::dont_validate); + type_r_p.post_type_r (); + } + catch (xml_schema::exception const& e) + { + cout << e << endl; + } + } + catch (xml_schema::exception const& e) + { + cerr << e << endl; + return 1; + } + catch (ios_base::failure const&) + { + cerr << "io failure" << endl; + return 1; + } +} diff --git a/xsd/tests/cxx/parser/validation/restriction/makefile b/xsd/tests/cxx/parser/validation/restriction/makefile new file mode 100644 index 0000000..66e4d9a --- /dev/null +++ b/xsd/tests/cxx/parser/validation/restriction/makefile @@ -0,0 +1,89 @@ +# file : tests/cxx/parser/validation/restriction/makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../../../build/bootstrap.make + +xsd := test.xsd +cxx := driver.cxx + +tests := 000 001 002 003 004 005 + +obj := $(addprefix $(out_base)/,$(cxx:.cxx=.o) $(xsd:.xsd=-pskel.o)) +dep := $(obj:.o=.o.d) + +driver := $(out_base)/driver +test := $(out_base)/.test +clean := $(out_base)/.clean + +# Import. +# +$(call import,\ + $(scf_root)/import/libxerces-c/stub.make,\ + l: xerces_c.l,cpp-options: xerces_c.l.cpp-options) + +# Build. +# +$(driver): $(obj) $(xerces_c.l) + +$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): $(xerces_c.l.cpp-options) + +genf := $(xsd:.xsd=-pskel.hxx) $(xsd:.xsd=-pskel.ixx) $(xsd:.xsd=-pskel.cxx) +gen := $(addprefix $(out_base)/,$(genf)) + +$(gen): xsd := $(out_root)/xsd/xsd +$(gen): xsd_options := --generate-validation +$(gen): $(out_root)/xsd/xsd + +$(call include-dep,$(dep)) + + +# Convenience alias for default target. +# +$(out_base)/: $(driver) + + +# Test. +# +test_targets := $(addprefix $(out_base)/.test-,$(tests)) + +$(test): $(test_targets) +$(test_targets): driver := $(driver) + +.PHONY: $(out_base)/.test-% +$(out_base)/.test-%: $(driver) $(src_base)/test.xsd $(src_base)/test-%.xml $(src_base)/test-%.std + $(call message,test $(out_base)/$*,$(driver) $(src_base)/test-$*.xml | diff -u $(src_base)/test-$*.std -) + + +# Clean. +# +$(clean): $(driver).o.clean \ + $(addsuffix .cxx.clean,$(obj)) \ + $(addsuffix .cxx.clean,$(dep)) \ + $(addprefix $(out_base)/,$(xsd:.xsd=-pskel.cxx.xsd.clean)) + +# Generated .gitignore. +# +ifeq ($(out_base),$(src_base)) +$(gen): | $(out_base)/.gitignore +$(driver): | $(out_base)/.gitignore + +$(out_base)/.gitignore: files := driver $(genf) +$(clean): $(out_base)/.gitignore.clean + +$(call include,$(bld_root)/git/gitignore.make) +endif + +# How to. +# +$(call include,$(bld_root)/cxx/o-e.make) +$(call include,$(bld_root)/cxx/cxx-o.make) +$(call include,$(bld_root)/cxx/cxx-d.make) +$(call include,$(scf_root)/xsd/parser/xsd-cxx.make) + + +# Dependencies. +# +$(call import,$(src_root)/xsd/makefile) diff --git a/xsd/tests/cxx/parser/validation/restriction/test-000.std b/xsd/tests/cxx/parser/validation/restriction/test-000.std new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/xsd/tests/cxx/parser/validation/restriction/test-000.std diff --git a/xsd/tests/cxx/parser/validation/restriction/test-000.xml b/xsd/tests/cxx/parser/validation/restriction/test-000.xml new file mode 100644 index 0000000..21402b4 --- /dev/null +++ b/xsd/tests/cxx/parser/validation/restriction/test-000.xml @@ -0,0 +1,31 @@ +<t:root xmlns:t="test" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="test test.xsd"> + + <restriction-a z="z"> + <a>a</a> + <b>b</b> + <c>c</c> + </restriction-a> + + <restriction-a x="x" y="y" z="z"> + <a>a</a> + <b>b</b> + <c>c</c> + </restriction-a> + + <restriction-b y="y"> + <a>a</a> + <b>b</b> + </restriction-b> + + <restriction-b y="y"> + <a>a</a> + <c>c</c> + </restriction-b> + + <restriction-b x="x" y="y"> + <a>a</a> + </restriction-b> + +</t:root> diff --git a/xsd/tests/cxx/parser/validation/restriction/test-001.std b/xsd/tests/cxx/parser/validation/restriction/test-001.std new file mode 100644 index 0000000..5077837 --- /dev/null +++ b/xsd/tests/cxx/parser/validation/restriction/test-001.std @@ -0,0 +1 @@ +:7:8 error: expected element 'a' instead of 'b' diff --git a/xsd/tests/cxx/parser/validation/restriction/test-001.xml b/xsd/tests/cxx/parser/validation/restriction/test-001.xml new file mode 100644 index 0000000..4015302 --- /dev/null +++ b/xsd/tests/cxx/parser/validation/restriction/test-001.xml @@ -0,0 +1,11 @@ +<t:root xmlns:t="test" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="test test.xsd"> + + <!-- valid base but not restriction: a element --> + <restriction-a z="z"> + <b>b</b> + <c>c</c> + </restriction-a> + +</t:root> diff --git a/xsd/tests/cxx/parser/validation/restriction/test-002.std b/xsd/tests/cxx/parser/validation/restriction/test-002.std new file mode 100644 index 0000000..f12c342 --- /dev/null +++ b/xsd/tests/cxx/parser/validation/restriction/test-002.std @@ -0,0 +1 @@ +:10:19 error: expected attribute 'z' diff --git a/xsd/tests/cxx/parser/validation/restriction/test-002.xml b/xsd/tests/cxx/parser/validation/restriction/test-002.xml new file mode 100644 index 0000000..eb7684c --- /dev/null +++ b/xsd/tests/cxx/parser/validation/restriction/test-002.xml @@ -0,0 +1,12 @@ +<t:root xmlns:t="test" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="test test.xsd"> + + <!-- valid base but not restriction: z attribute --> + <restriction-a> + <a>a</a> + <b>b</b> + <c>c</c> + </restriction-a> + +</t:root> diff --git a/xsd/tests/cxx/parser/validation/restriction/test-003.std b/xsd/tests/cxx/parser/validation/restriction/test-003.std new file mode 100644 index 0000000..0c65175 --- /dev/null +++ b/xsd/tests/cxx/parser/validation/restriction/test-003.std @@ -0,0 +1 @@ +:11:8 error: unexpected element 'a' diff --git a/xsd/tests/cxx/parser/validation/restriction/test-003.xml b/xsd/tests/cxx/parser/validation/restriction/test-003.xml new file mode 100644 index 0000000..49f18c7 --- /dev/null +++ b/xsd/tests/cxx/parser/validation/restriction/test-003.xml @@ -0,0 +1,16 @@ +<t:root xmlns:t="test" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="test test.xsd"> + + <!-- valid base but not restriction: sequence maxOccurs="1" --> + <restriction-a z="z"> + <a>a</a> + <b>b</b> + <c>c</c> + + <a>a</a> + <b>b</b> + <c>c</c> + </restriction-a> + +</t:root> diff --git a/xsd/tests/cxx/parser/validation/restriction/test-004.std b/xsd/tests/cxx/parser/validation/restriction/test-004.std new file mode 100644 index 0000000..5077837 --- /dev/null +++ b/xsd/tests/cxx/parser/validation/restriction/test-004.std @@ -0,0 +1 @@ +:7:8 error: expected element 'a' instead of 'b' diff --git a/xsd/tests/cxx/parser/validation/restriction/test-004.xml b/xsd/tests/cxx/parser/validation/restriction/test-004.xml new file mode 100644 index 0000000..115cd38 --- /dev/null +++ b/xsd/tests/cxx/parser/validation/restriction/test-004.xml @@ -0,0 +1,10 @@ +<t:root xmlns:t="test" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="test test.xsd"> + + <!-- valid extension but not restriction: a element --> + <restriction-b y="y"> + <b>b</b> + </restriction-b> + +</t:root> diff --git a/xsd/tests/cxx/parser/validation/restriction/test-005.std b/xsd/tests/cxx/parser/validation/restriction/test-005.std new file mode 100644 index 0000000..e92de14 --- /dev/null +++ b/xsd/tests/cxx/parser/validation/restriction/test-005.std @@ -0,0 +1 @@ +:9:19 error: expected attribute 'y' diff --git a/xsd/tests/cxx/parser/validation/restriction/test-005.xml b/xsd/tests/cxx/parser/validation/restriction/test-005.xml new file mode 100644 index 0000000..e9ab7d9 --- /dev/null +++ b/xsd/tests/cxx/parser/validation/restriction/test-005.xml @@ -0,0 +1,11 @@ +<t:root xmlns:t="test" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="test test.xsd"> + + <!-- valid extension but not restriction: y attribute --> + <restriction-b> + <a>a</a> + <b>b</b> + </restriction-b> + +</t:root> diff --git a/xsd/tests/cxx/parser/validation/restriction/test.xsd b/xsd/tests/cxx/parser/validation/restriction/test.xsd new file mode 100644 index 0000000..158ded5 --- /dev/null +++ b/xsd/tests/cxx/parser/validation/restriction/test.xsd @@ -0,0 +1,82 @@ +<?xml version="1.0"?> +<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:t="test" targetNamespace="test"> + + <!-- simple case --> + <complexType name="base-a"> + <sequence minOccurs="1" maxOccurs="2"> + <element name="a" type="string" minOccurs="0"/> + <element name="b" type="string"/> + <element name="c" type="string"/> + </sequence> + <attribute name="x" type="string"/> + <attribute name="y" type="string"/> + <attribute name="z" type="string"/> + </complexType> + + <complexType name="restriction-a"> + <complexContent> + <restriction base="t:base-a"> + <sequence minOccurs="1" maxOccurs="1"> + <element name="a" type="string" minOccurs="1"/> + <element name="b" type="string"/> + <element name="c" type="string"/> + </sequence> + <!-- Can be ommited if not changed, e.g., 'x'. --> + <attribute name="y" type="string"/> <!-- But can also be repeated without change. --> + <attribute name="z" type="string" use="required"/> + </restriction> + </complexContent> + </complexType> + + <!-- restriction of an extension --> + <complexType name="base-b"> + <sequence> + <element name="a" type="string" minOccurs="0"/> + </sequence> + <attribute name="x" type="string"/> + </complexType> + + <complexType name="extension-b"> + <complexContent> + <extension base="t:base-b"> + <choice> + <element name="b" type="string" minOccurs="0"/> + <element name="c" type="string"/> + </choice> + <attribute name="y" type="string"/> + </extension> + </complexContent> + </complexType> + + <complexType name="restriction-b"> + <complexContent> + <restriction base="t:extension-b"> + <sequence> + <sequence> + <element name="a" type="string" minOccurs="1"/> + </sequence> + <choice> + <element name="b" type="string" minOccurs="0"/> + <element name="c" type="string"/> + </choice> + </sequence> + <attribute name="y" type="string" use="required"/> + </restriction> + </complexContent> + </complexType> + + <complexType name="type-b"> + <choice maxOccurs="unbounded"> + <element name="restriction-a" type="t:base-a"/> + <element name="restriction-b" type="t:extension-b"/> + </choice> + </complexType> + + <complexType name="type-r"> + <choice maxOccurs="unbounded"> + <element name="restriction-a" type="t:restriction-a"/> + <element name="restriction-b" type="t:restriction-b"/> + </choice> + </complexType> + +</schema> diff --git a/xsd/tests/cxx/parser/validation/sequence/driver.cxx b/xsd/tests/cxx/parser/validation/sequence/driver.cxx new file mode 100644 index 0000000..2e994b2 --- /dev/null +++ b/xsd/tests/cxx/parser/validation/sequence/driver.cxx @@ -0,0 +1,141 @@ +// file : tests/cxx/parser/validation/sequence/driver.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +// Test the sequence compositor validation. +// + +#include <string> +#include <fstream> +#include <iostream> + +#include "test-pskel.hxx" + +using namespace std; +using namespace test; +using xml_schema::ro_string; + +struct sequence_pimpl: sequence_pskel +{ + virtual void + pre () + { + cout << "{" << endl; + } + + virtual void + a (string const& v) + { + cout << " a = " << v << endl; + } + + virtual void + b (string const& v) + { + cout << " b = " << v << endl; + } + + virtual void + c (string const& v) + { + cout << " c = " << v << endl; + } + + virtual void + d (string const& v) + { + cout << " d = " << v << endl; + } + + virtual void + e (string const& v) + { + cout << " e = " << v << endl; + } + + virtual void + f (string const& v) + { + cout << " f = " << v << endl; + } + + virtual void + _start_any_element (ro_string const& ns, + ro_string const& name, + ro_string const*) + { + cout << " any: " << ns << "#" << name << endl + << " {" << endl; + } + + virtual void + _any_characters (ro_string const& v) + { + cout << " chars = " << v << endl; + } + + virtual void + _end_any_element (ro_string const&, ro_string const&) + { + cout << " }" << endl; + } + + virtual void + post_sequence () + { + cout << "}" << endl + << endl; + } +}; + +struct type_pimpl: type_pskel +{ +}; + +int +main (int argc, char* argv[]) +{ + if (argc != 2) + { + cerr << "usage: " << argv[0] << " test.xml" << endl; + return 1; + } + + try + { + xml_schema::string_pimpl string_p; + sequence_pimpl sequence_p; + type_pimpl type_p; + + sequence_p.parsers (string_p, string_p, string_p, + string_p, string_p, string_p); + type_p.parsers (sequence_p); + + xml_schema::document doc_p (type_p, "test", "root"); + + try + { + ifstream ifs (argv[1]); + type_p.pre (); + doc_p.parse (ifs, argv[1], "", xml_schema::flags::dont_validate); + type_p.post_type (); + } + catch (xml_schema::exception const& e) + { + cout << " " << e << endl + << "}" << endl + << endl; + } + } + catch (xml_schema::exception const& e) + { + cerr << e << endl; + return 1; + } + catch (ios_base::failure const&) + { + cerr << "io failure" << endl; + return 1; + } +} diff --git a/xsd/tests/cxx/parser/validation/sequence/makefile b/xsd/tests/cxx/parser/validation/sequence/makefile new file mode 100644 index 0000000..53f6c61 --- /dev/null +++ b/xsd/tests/cxx/parser/validation/sequence/makefile @@ -0,0 +1,89 @@ +# file : tests/cxx/parser/validation/sequence/makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../../../build/bootstrap.make + +xsd := test.xsd +cxx := driver.cxx + +tests := 000 001 002 003 004 005 006 + +obj := $(addprefix $(out_base)/,$(cxx:.cxx=.o) $(xsd:.xsd=-pskel.o)) +dep := $(obj:.o=.o.d) + +driver := $(out_base)/driver +test := $(out_base)/.test +clean := $(out_base)/.clean + +# Import. +# +$(call import,\ + $(scf_root)/import/libxerces-c/stub.make,\ + l: xerces_c.l,cpp-options: xerces_c.l.cpp-options) + +# Build. +# +$(driver): $(obj) $(xerces_c.l) + +$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): $(xerces_c.l.cpp-options) + +genf := $(xsd:.xsd=-pskel.hxx) $(xsd:.xsd=-pskel.ixx) $(xsd:.xsd=-pskel.cxx) +gen := $(addprefix $(out_base)/,$(genf)) + +$(gen): xsd := $(out_root)/xsd/xsd +$(gen): xsd_options := --generate-validation +$(gen): $(out_root)/xsd/xsd + +$(call include-dep,$(dep)) + + +# Convenience alias for default target. +# +$(out_base)/: $(driver) + + +# Test. +# +test_targets := $(addprefix $(out_base)/.test-,$(tests)) + +$(test): $(test_targets) +$(test_targets): driver := $(driver) + +.PHONY: $(out_base)/.test-% +$(out_base)/.test-%: $(driver) $(src_base)/test.xsd $(src_base)/test-%.xml $(src_base)/test-%.std + $(call message,test $(out_base)/$*,$(driver) $(src_base)/test-$*.xml | diff -u $(src_base)/test-$*.std -) + + +# Clean. +# +$(clean): $(driver).o.clean \ + $(addsuffix .cxx.clean,$(obj)) \ + $(addsuffix .cxx.clean,$(dep)) \ + $(addprefix $(out_base)/,$(xsd:.xsd=-pskel.cxx.xsd.clean)) + +# Generated .gitignore. +# +ifeq ($(out_base),$(src_base)) +$(gen): | $(out_base)/.gitignore +$(driver): | $(out_base)/.gitignore + +$(out_base)/.gitignore: files := driver $(genf) +$(clean): $(out_base)/.gitignore.clean + +$(call include,$(bld_root)/git/gitignore.make) +endif + +# How to. +# +$(call include,$(bld_root)/cxx/o-e.make) +$(call include,$(bld_root)/cxx/cxx-o.make) +$(call include,$(bld_root)/cxx/cxx-d.make) +$(call include,$(scf_root)/xsd/parser/xsd-cxx.make) + + +# Dependencies. +# +$(call import,$(src_root)/xsd/makefile) diff --git a/xsd/tests/cxx/parser/validation/sequence/test-000.std b/xsd/tests/cxx/parser/validation/sequence/test-000.std new file mode 100644 index 0000000..8a44762 --- /dev/null +++ b/xsd/tests/cxx/parser/validation/sequence/test-000.std @@ -0,0 +1,56 @@ +{ + c = c + d = d + any: test#any + { + chars = aaa + any: #a + { + chars = bbb + } + chars = ccc + } + f = f + e = e +} + +{ + a = a + b = b + c = c + d = d + d = d + d = d + any: other#any + { + chars = any + } + f = f + e = e + e = e +} + +{ + a = a + b = b + c = c + d = d + d = d + d = d + any: other#any + { + chars = any + } + f = f + e = e + e = e + c = c + d = d + any: test#any + { + chars = any + } + f = f + e = e +} + diff --git a/xsd/tests/cxx/parser/validation/sequence/test-000.xml b/xsd/tests/cxx/parser/validation/sequence/test-000.xml new file mode 100644 index 0000000..9bcbd7e --- /dev/null +++ b/xsd/tests/cxx/parser/validation/sequence/test-000.xml @@ -0,0 +1,46 @@ +<t:root xmlns:t="test" + xmlns:o="other" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="test test.xsd"> + + <sequence> + <c>c</c> + <d>d</d> + <t:any>aaa<a>bbb</a>ccc</t:any> + <f>f</f> + <e>e</e> + </sequence> + + <sequence> + <a>a</a> + <b>b</b> + <c>c</c> + <d>d</d> + <d>d</d> + <d>d</d> + <o:any>any</o:any> + <f>f</f> + <e>e</e> + <e>e</e> + </sequence> + + <sequence> + <a>a</a> + <b>b</b> + <c>c</c> + <d>d</d> + <d>d</d> + <d>d</d> + <o:any>any</o:any> + <f>f</f> + <e>e</e> + <e>e</e> + + <c>c</c> + <d>d</d> + <t:any>any</t:any> + <f>f</f> + <e>e</e> + </sequence> + +</t:root> diff --git a/xsd/tests/cxx/parser/validation/sequence/test-001.std b/xsd/tests/cxx/parser/validation/sequence/test-001.std new file mode 100644 index 0000000..20dea34 --- /dev/null +++ b/xsd/tests/cxx/parser/validation/sequence/test-001.std @@ -0,0 +1,4 @@ +{ + :8:14 error: expected element 'a' +} + diff --git a/xsd/tests/cxx/parser/validation/sequence/test-001.xml b/xsd/tests/cxx/parser/validation/sequence/test-001.xml new file mode 100644 index 0000000..67d33ce --- /dev/null +++ b/xsd/tests/cxx/parser/validation/sequence/test-001.xml @@ -0,0 +1,10 @@ +<t:root xmlns:t="test" + xmlns:o="other" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="test test.xsd"> + + <!-- fail minOccurs="1" --> + <sequence> + </sequence> + +</t:root> diff --git a/xsd/tests/cxx/parser/validation/sequence/test-002.std b/xsd/tests/cxx/parser/validation/sequence/test-002.std new file mode 100644 index 0000000..61343e7 --- /dev/null +++ b/xsd/tests/cxx/parser/validation/sequence/test-002.std @@ -0,0 +1,20 @@ +{ + c = c + d = d + any: test#any + { + chars = any + } + f = f + e = e + c = c + d = d + any: test#any + { + chars = any + } + f = f + e = e + :20:8 error: unexpected element 'c' +} + diff --git a/xsd/tests/cxx/parser/validation/sequence/test-002.xml b/xsd/tests/cxx/parser/validation/sequence/test-002.xml new file mode 100644 index 0000000..be25fcf --- /dev/null +++ b/xsd/tests/cxx/parser/validation/sequence/test-002.xml @@ -0,0 +1,27 @@ +<t:root xmlns:t="test" + xmlns:o="other" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="test test.xsd"> + + <!-- fail maxOccurs="2" --> + <sequence> + <c>c</c> + <d>d</d> + <t:any>any</t:any> + <f>f</f> + <e>e</e> + + <c>c</c> + <d>d</d> + <t:any>any</t:any> + <f>f</f> + <e>e</e> + + <c>c</c> + <d>d</d> + <t:any>any</t:any> + <f>f</f> + <e>e</e> + </sequence> + +</t:root> diff --git a/xsd/tests/cxx/parser/validation/sequence/test-003.std b/xsd/tests/cxx/parser/validation/sequence/test-003.std new file mode 100644 index 0000000..c4e1e46 --- /dev/null +++ b/xsd/tests/cxx/parser/validation/sequence/test-003.std @@ -0,0 +1,5 @@ +{ + a = a + :9:8 error: expected element 'b' instead of 'a' +} + diff --git a/xsd/tests/cxx/parser/validation/sequence/test-003.xml b/xsd/tests/cxx/parser/validation/sequence/test-003.xml new file mode 100644 index 0000000..af7d21d --- /dev/null +++ b/xsd/tests/cxx/parser/validation/sequence/test-003.xml @@ -0,0 +1,17 @@ +<t:root xmlns:t="test" + xmlns:o="other" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="test test.xsd"> + + <!-- fail a maxOccurs="1" --> + <sequence> + <a>a</a> + <a>a</a> + <c>c</c> + <d>d</d> + <t:any>any</t:any> + <f>f</f> + <e>e</e> + </sequence> + +</t:root> diff --git a/xsd/tests/cxx/parser/validation/sequence/test-004.std b/xsd/tests/cxx/parser/validation/sequence/test-004.std new file mode 100644 index 0000000..f4c1d4d --- /dev/null +++ b/xsd/tests/cxx/parser/validation/sequence/test-004.std @@ -0,0 +1,4 @@ +{ + :8:8 error: expected element 'a' instead of 'd' +} + diff --git a/xsd/tests/cxx/parser/validation/sequence/test-004.xml b/xsd/tests/cxx/parser/validation/sequence/test-004.xml new file mode 100644 index 0000000..a58b6d4 --- /dev/null +++ b/xsd/tests/cxx/parser/validation/sequence/test-004.xml @@ -0,0 +1,14 @@ +<t:root xmlns:t="test" + xmlns:o="other" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="test test.xsd"> + + <!-- fail c minOccurs="1" --> + <sequence> + <d>d</d> + <t:any>any</t:any> + <f>f</f> + <e>e</e> + </sequence> + +</t:root> diff --git a/xsd/tests/cxx/parser/validation/sequence/test-005.std b/xsd/tests/cxx/parser/validation/sequence/test-005.std new file mode 100644 index 0000000..9fa7904 --- /dev/null +++ b/xsd/tests/cxx/parser/validation/sequence/test-005.std @@ -0,0 +1,6 @@ +{ + c = c + d = d + :10:13 error: expected element '##targetNamespace#*' instead of 'other1#any' +} + diff --git a/xsd/tests/cxx/parser/validation/sequence/test-005.xml b/xsd/tests/cxx/parser/validation/sequence/test-005.xml new file mode 100644 index 0000000..e3dd03d --- /dev/null +++ b/xsd/tests/cxx/parser/validation/sequence/test-005.xml @@ -0,0 +1,15 @@ +<t:root xmlns:t="test" + xmlns:o1="other1" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="test test.xsd"> + + <!-- fail any namespace="##targetNamespace other" --> + <sequence> + <c>c</c> + <d>d</d> + <o1:any>any</o1:any> + <f>f</f> + <e>e</e> + </sequence> + +</t:root> diff --git a/xsd/tests/cxx/parser/validation/sequence/test-006.std b/xsd/tests/cxx/parser/validation/sequence/test-006.std new file mode 100644 index 0000000..eb79f47 --- /dev/null +++ b/xsd/tests/cxx/parser/validation/sequence/test-006.std @@ -0,0 +1,13 @@ +{ + c = c + d = d + any: test#any + { + chars = any + } + f = f + e = e + e = e + :14:8 error: unexpected element 'e' +} + diff --git a/xsd/tests/cxx/parser/validation/sequence/test-006.xml b/xsd/tests/cxx/parser/validation/sequence/test-006.xml new file mode 100644 index 0000000..e1ecd69 --- /dev/null +++ b/xsd/tests/cxx/parser/validation/sequence/test-006.xml @@ -0,0 +1,17 @@ +<t:root xmlns:t="test" + xmlns:o="other" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="test test.xsd"> + + <!-- fail e maxOccurs="2" --> + <sequence> + <c>c</c> + <d>d</d> + <t:any>any</t:any> + <f>f</f> + <e>e</e> + <e>e</e> + <e>e</e> + </sequence> + +</t:root> diff --git a/xsd/tests/cxx/parser/validation/sequence/test.xsd b/xsd/tests/cxx/parser/validation/sequence/test.xsd new file mode 100644 index 0000000..8753f54 --- /dev/null +++ b/xsd/tests/cxx/parser/validation/sequence/test.xsd @@ -0,0 +1,28 @@ +<?xml version="1.0"?> +<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:t="test" targetNamespace="test"> + + <complexType name="sequence"> + <sequence minOccurs="1" maxOccurs="2"> + <element name="a" type="string" minOccurs="0"/> + <sequence> + <element name="b" type="string" minOccurs="0"/> + <element name="c" type="string"/> + </sequence> + <element name="d" type="string" maxOccurs="unbounded"/> + <sequence> + <any namespace="##targetNamespace other"/> + <element name="f" type="string"/> + </sequence> + <element name="e" type="string" maxOccurs="2"/> + </sequence> + </complexType> + + <complexType name="type"> + <sequence> + <element name="sequence" type="t:sequence" maxOccurs="unbounded"/> + </sequence> + </complexType> + + <element name="root" type="t:type"/> + +</schema> diff --git a/xsd/tests/cxx/tree/binary/cdr/driver.cxx b/xsd/tests/cxx/tree/binary/cdr/driver.cxx new file mode 100644 index 0000000..42ca181 --- /dev/null +++ b/xsd/tests/cxx/tree/binary/cdr/driver.cxx @@ -0,0 +1,137 @@ +// file : tests/cxx/tree/binary/cdr/driver.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +// Test non-polymorphic binary serialization to ACE CDR. +// + +#include <memory> // std::auto_ptr +#include <cassert> +#include <iostream> + +#include "test.hxx" + +using namespace std; +using namespace test; + +int +main (int argc, char* argv[]) +{ + if (argc != 2) + { + cerr << "usage: " << argv[0] << " test.xml" << endl; + return 1; + } + + try + { + auto_ptr<type> r (root (argv[1])); + + // Save to a CDR stream. + // + ACE_OutputCDR ace_ocdr; + xml_schema::ostream<ACE_OutputCDR> ocdr (ace_ocdr); + ocdr << *r; + + // Load from a CDR stream. + // + ACE_InputCDR ace_icdr (ace_ocdr); + xml_schema::istream<ACE_InputCDR> icdr (ace_icdr); + auto_ptr<type> c (new type (icdr)); + + // Compare the two. + // + assert (r->list () == c->list ()); + assert (r->union_ () == c->union_ ()); + assert (r->enumeration () == c->enumeration ()); + + type::complex_sequence rs (r->complex ()), cs (c->complex ()); + + for (type::complex_iterator ri (rs.begin ()), ci (cs.begin ()); + ri != rs.end () && ci != rs.end (); ++ri, ++ci) + { + assert (ri->a () == ci->a ()); + if (ri->b ()) + assert (ri->b () == ci->b ()); + assert (ri->c () == ci->c ()); + + assert (ri->x () == ci->x ()); + if (ri->y ()) + assert (ri->y () == ci->y ()); + } + + // integers + // + assert (r->byte () == c->byte ()); + assert (r->unsigned_byte () == c->unsigned_byte ()); + assert (r->short_ () == c->short_ ()); + assert (r->unsigned_short () == c->unsigned_short ()); + assert (r->int_ () == c->int_ ()); + assert (r->unsigned_int () == c->unsigned_int ()); + assert (r->long_ () == c->long_ ()); + assert (r->unsigned_long () == c->unsigned_long ()); + assert (r->integer () == c->integer ()); + assert (r->non_positive_integer () == c->non_positive_integer ()); + assert (r->non_negative_integer () == c->non_negative_integer ()); + assert (r->positive_integer () == c->positive_integer ()); + assert (r->negative_integer () == c->negative_integer ()); + + // boolean + // + assert (r->boolean () == c->boolean ()); + + // floats + // + assert (r->float_ () == c->float_ ()); + assert (r->double_ () == c->double_ ()); + assert (r->decimal () == c->decimal ()); + + // strings + // + assert (r->string () == c->string ()); + assert (r->normalized_string () == c->normalized_string ()); + assert (r->token () == c->token ()); + assert (r->name () == c->name ()); + assert (r->name_token () == c->name_token ()); + assert (r->name_tokens () == c->name_tokens ()); + assert (r->ncname () == c->ncname ()); + assert (r->language () == c->language ()); + + // qualified name + // + assert (r->qname () == c->qname ()); + + // ID/IDREF + // + assert (r->id () == c->id ()); + assert (r->id_ref () == c->id_ref ()); + assert (r->id_refs () == c->id_refs ()); + + // URI + // + assert (r->any_uri () == c->any_uri ()); + + // binary + // + assert (r->base64_binary () == c->base64_binary ()); + assert (r->hex_binary () == c->hex_binary ()); + + // date/time + // + assert (r->day () == c->day ()); + assert (r->month () == c->month ()); + assert (r->year () == c->year ()); + assert (r->month_day () == c->month_day ()); + assert (r->year_month () == c->year_month ()); + assert (r->date () == c->date ()); + assert (r->time () == c->time ()); + assert (r->date_time () == c->date_time ()); + assert (r->duration () == c->duration ()); + } + catch (xml_schema::exception const& e) + { + cerr << e << endl; + return 1; + } +} diff --git a/xsd/tests/cxx/tree/binary/cdr/makefile b/xsd/tests/cxx/tree/binary/cdr/makefile new file mode 100644 index 0000000..67437dc --- /dev/null +++ b/xsd/tests/cxx/tree/binary/cdr/makefile @@ -0,0 +1,86 @@ +# file : tests/cxx/tree/binary/cdr/makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../../../build/bootstrap.make + +xsd := test.xsd +cxx := driver.cxx + +obj := $(addprefix $(out_base)/,$(cxx:.cxx=.o) $(xsd:.xsd=.o)) +dep := $(obj:.o=.o.d) + +driver := $(out_base)/driver +test := $(out_base)/.test +clean := $(out_base)/.clean + + +# Import. +# +$(call import,\ + $(scf_root)/import/libxerces-c/stub.make,\ + l: xerces_c.l,cpp-options: xerces_c.l.cpp-options) + +$(call import,\ + $(scf_root)/import/libace/stub.make,\ + l: ace.l,cpp-options: ace.l.cpp-options) + +# Build. +# +$(driver): $(obj) $(xerces_c.l) $(ace.l) + +$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): $(xerces_c.l.cpp-options) $(ace.l.cpp-options) + +genf := $(xsd:.xsd=.hxx) $(xsd:.xsd=.ixx) $(xsd:.xsd=.cxx) +gen := $(addprefix $(out_base)/,$(genf)) + +$(gen): xsd := $(out_root)/xsd/xsd +$(gen): xsd_options := --generate-insertion ACE_OutputCDR \ +--generate-extraction ACE_InputCDR +$(gen): $(out_root)/xsd/xsd + +$(call include-dep,$(dep)) + +# Convenience alias for default target. +# +$(out_base)/: $(driver) + + +# Test. +# +$(test): driver := $(driver) +$(test): $(driver) $(src_base)/test.xml + $(call message,test $$1,$$1 $(src_base)/test.xml,$(driver)) + +# Clean. +# +$(clean): $(driver).o.clean \ + $(addsuffix .cxx.clean,$(obj)) \ + $(addsuffix .cxx.clean,$(dep)) \ + $(addprefix $(out_base)/,$(xsd:.xsd=.cxx.xsd.clean)) + +# Generated .gitignore. +# +ifeq ($(out_base),$(src_base)) +$(gen): | $(out_base)/.gitignore +$(driver): | $(out_base)/.gitignore + +$(out_base)/.gitignore: files := driver $(genf) +$(clean): $(out_base)/.gitignore.clean + +$(call include,$(bld_root)/git/gitignore.make) +endif + +# How to. +# +$(call include,$(bld_root)/cxx/o-e.make) +$(call include,$(bld_root)/cxx/cxx-o.make) +$(call include,$(bld_root)/cxx/cxx-d.make) +$(call include,$(scf_root)/xsd/tree/xsd-cxx.make) + + +# Dependencies. +# +$(call import,$(src_root)/xsd/makefile) diff --git a/xsd/tests/cxx/tree/binary/cdr/test.xml b/xsd/tests/cxx/tree/binary/cdr/test.xml new file mode 100644 index 0000000..928b4cf --- /dev/null +++ b/xsd/tests/cxx/tree/binary/cdr/test.xml @@ -0,0 +1,91 @@ +<t:root xmlns:t="test" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="test test.xsd"> + + <list>1 2 3</list> + + <union>abc</union> + + <enumeration>left</enumeration> + + <complex x="1"> + <a>aaa</a> + </complex> + <complex x="1" y="2"> + <a>aaa</a> + <b>bbb</b> + <c>c</c> + <c>cc</c> + <c>ccc</c> + </complex> + + + <!-- integers --> + <byte>65</byte> + <unsigned_byte>66</unsigned_byte> + <short>-222</short> + <unsigned_short>57005</unsigned_short> + <int>-57005</int> + <unsigned_int>3735928559</unsigned_int> + <long>-3735928559</long> + <unsigned_long>16045690984833335023</unsigned_long> + <integer>-3735928559</integer> + <non_positive_integer>-3735928559</non_positive_integer> + <non_negative_integer>3735928559</non_negative_integer> + <positive_integer>3735928559</positive_integer> + <negative_integer>-3735928559</negative_integer> + + + <!-- boolean --> + <boolean>true</boolean> + + + <!-- floats --> + <float>1234.1234</float> + <double>12345678.12345678</double> + <decimal>1234567812345678.1234567812345678</decimal> + + + <!-- strings --> + <string>string</string> + <normalized_string>normalized string</normalized_string> + <token>one two three</token> + <name>name</name> + <name_token>name-token</name_token> + <name_tokens>name tokens</name_tokens> + <ncname>ncname</ncname> + <language>en-us</language> + + <!-- qualified name --> + <qname>xsi:schemaLocation</qname> + + + <!-- ID/IDREF --> + <id>elements1</id> + <id>elements2</id> + <id_ref>elements1</id_ref> + <id_refs>elements1 elements2</id_refs> + + + <!-- URI --> + <any_uri>http://www.codesynthesis.com</any_uri> + + + <!-- binary --> + <base64_binary>YmFzZTY0IGJpbmFyeQ==</base64_binary> + <hex_binary>6865782052696E617279</hex_binary> + + + <!-- date/time --> + <date>2001-10-26+02:00</date> + <date_time>2001-10-26T21:32:52+02:00</date_time> + <duration>P1Y2M3DT5H20M30S</duration> + <day>---01+02:00</day> + <month>--11+02:00</month> + <month_day>--11-02+02:00</month_day> + <year>2001+02:00</year> + <year_month>2001-11+02:00</year_month> + <time>21:32:52+02:00</time> + + +</t:root> diff --git a/xsd/tests/cxx/tree/binary/cdr/test.xsd b/xsd/tests/cxx/tree/binary/cdr/test.xsd new file mode 100644 index 0000000..e593f64 --- /dev/null +++ b/xsd/tests/cxx/tree/binary/cdr/test.xsd @@ -0,0 +1,120 @@ +<?xml version="1.0"?> +<schema xmlns="http://www.w3.org/2001/XMLSchema" + xmlns:t="test" + targetNamespace="test"> + + <simpleType name="list"> + <list itemType="int"/> + </simpleType> + + <simpleType name="union"> + <union memberTypes="int string"/> + </simpleType> + + <simpleType name="enumeration"> + <restriction base="string"> + <enumeration value="top"/> + <enumeration value="left"/> + <enumeration value="bottom"/> + <enumeration value="right"/> + </restriction> + </simpleType> + + <complexType name="base"> + <sequence> + <element name="a" type="string"/> + </sequence> + <attribute name="x" type="int" use="required"/> + </complexType> + + <complexType name="complex"> + <complexContent> + <extension base="t:base"> + <sequence> + <element name="b" type="string" minOccurs="0"/> + <element name="c" type="string" minOccurs="0" maxOccurs="unbounded"/> + </sequence> + <attribute name="y" type="int"/> + </extension> + </complexContent> + </complexType> + + + <complexType name="type"> + <sequence> + <element name="list" type="t:list"/> + <element name="union" type="t:union"/> + <element name="enumeration" type="t:enumeration"/> + <element name="complex" type="t:complex" maxOccurs="unbounded"/> + + <!-- integers --> + <element name="byte" type="byte"/> + <element name="unsigned_byte" type="unsignedByte"/> + <element name="short" type="short"/> + <element name="unsigned_short" type="unsignedShort"/> + <element name="int" type="int"/> + <element name="unsigned_int" type="unsignedInt"/> + <element name="long" type="long"/> + <element name="unsigned_long" type="unsignedLong"/> + <element name="integer" type="integer"/> + <element name="non_positive_integer" type="nonPositiveInteger"/> + <element name="non_negative_integer" type="nonNegativeInteger"/> + <element name="positive_integer" type="positiveInteger"/> + <element name="negative_integer" type="negativeInteger"/> + + + <!-- boolean --> + <element name="boolean" type="boolean"/> + + + <!-- floats --> + <element name="float" type="float"/> + <element name="double" type="double"/> + <element name="decimal" type="decimal"/> + + + <!-- strings --> + <element name="string" type="string"/> + <element name="normalized_string" type="normalizedString"/> + <element name="token" type="token"/> + <element name="name" type="Name"/> + <element name="name_token" type="NMTOKEN"/> + <element name="name_tokens" type="NMTOKENS"/> + <element name="ncname" type="NCName"/> + <element name="language" type="language"/> + + <!-- qualified name --> + <element name="qname" type="QName"/> + + + <!-- ID/IDREF --> + <element name="id" maxOccurs="2" type="ID"/> + <element name="id_ref" type="IDREF"/> + <element name="id_refs" type="IDREFS"/> + + + <!-- URI --> + <element name="any_uri" type="anyURI"/> + + + <!-- binary --> + <element name="base64_binary" type="base64Binary"/> + <element name="hex_binary" type="hexBinary"/> + + + <!-- date/time --> + <element name="date" type="date"/> + <element name="date_time" type="dateTime"/> + <element name="duration" type="duration"/> + <element name="day" type="gDay"/> + <element name="month" type="gMonth"/> + <element name="month_day" type="gMonthDay"/> + <element name="year" type="gYear"/> + <element name="year_month" type="gYearMonth"/> + <element name="time" type="time"/> + </sequence> + </complexType> + + <element name="root" type="t:type"/> + +</schema> diff --git a/xsd/tests/cxx/tree/binary/makefile b/xsd/tests/cxx/tree/binary/makefile new file mode 100644 index 0000000..8a242c7 --- /dev/null +++ b/xsd/tests/cxx/tree/binary/makefile @@ -0,0 +1,18 @@ +# file : tests/cxx/tree/binary/makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../../build/bootstrap.make + +tests := cdr polymorphic xdr + +default := $(out_base)/ +test := $(out_base)/.test +clean := $(out_base)/.clean + +$(default): $(addprefix $(out_base)/,$(addsuffix /,$(tests))) +$(test): $(addprefix $(out_base)/,$(addsuffix /.test,$(tests))) +$(clean): $(addprefix $(out_base)/,$(addsuffix /.clean,$(tests))) + +$(foreach t,$(tests),$(call import,$(src_base)/$t/makefile)) diff --git a/xsd/tests/cxx/tree/binary/polymorphic/driver.cxx b/xsd/tests/cxx/tree/binary/polymorphic/driver.cxx new file mode 100644 index 0000000..3c3e057 --- /dev/null +++ b/xsd/tests/cxx/tree/binary/polymorphic/driver.cxx @@ -0,0 +1,151 @@ +// file : tests/cxx/tree/binary/polymorphic/driver.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +// Test polymorphic binary serialization. +// + +#include <memory> // std::auto_ptr +#include <cassert> +#include <iostream> +#include <typeinfo> + +#include "test.hxx" + +using namespace std; +using namespace test; + +int +main (int argc, char* argv[]) +{ + if (argc != 2) + { + cerr << "usage: " << argv[0] << " test.xml" << endl; + return 1; + } + + try + { + auto_ptr<type> r (root (argv[1])); + + // Save to a CDR stream. + // + ACE_OutputCDR ace_ocdr; + xml_schema::ostream<ACE_OutputCDR> ocdr (ace_ocdr); + ocdr << *r; + + // Load from a CDR stream. + // + ACE_InputCDR ace_icdr (ace_ocdr); + xml_schema::istream<ACE_InputCDR> icdr (ace_icdr); + auto_ptr<type> c (new type (icdr)); + + // Compare the two. + // + assert (r->list () == c->list ()); + assert (r->union_ () == c->union_ ()); + assert (r->enumeration () == c->enumeration ()); + + { + complex& rc (dynamic_cast<complex&> (r->base ())); + complex& cc (dynamic_cast<complex&> (c->base ())); + + assert (rc.a () == cc.a ()); + if (rc.b ()) + assert (rc.b () == cc.b ()); + assert (rc.c () == cc.c ()); + + assert (rc.x () == cc.x ()); + if (rc.y ()) + assert (rc.y () == cc.y ()); + } + + { + complex& rc (dynamic_cast<complex&> (r->sbase ())); + complex& cc (dynamic_cast<complex&> (c->sbase ())); + + assert (rc.a () == cc.a ()); + if (rc.b ()) + assert (rc.b () == cc.b ()); + assert (rc.c () == cc.c ()); + + assert (rc.x () == cc.x ()); + if (rc.y ()) + assert (rc.y () == cc.y ()); + } + + // integers + // + assert (r->byte () == c->byte ()); + assert (r->unsigned_byte () == c->unsigned_byte ()); + assert (r->short_ () == c->short_ ()); + assert (r->unsigned_short () == c->unsigned_short ()); + assert (r->int_ () == c->int_ ()); + assert (r->unsigned_int () == c->unsigned_int ()); + assert (r->long_ () == c->long_ ()); + assert (r->unsigned_long () == c->unsigned_long ()); + assert (r->integer () == c->integer ()); + assert (r->non_positive_integer () == c->non_positive_integer ()); + assert (r->non_negative_integer () == c->non_negative_integer ()); + assert (r->positive_integer () == c->positive_integer ()); + assert (r->negative_integer () == c->negative_integer ()); + + // boolean + // + assert (r->boolean () == c->boolean ()); + + // floats + // + assert (r->float_ () == c->float_ ()); + assert (r->double_ () == c->double_ ()); + assert (r->decimal () == c->decimal ()); + + // strings + // + assert (r->string () == c->string ()); + assert (r->normalized_string () == c->normalized_string ()); + assert (r->token () == c->token ()); + assert (r->name () == c->name ()); + assert (r->name_token () == c->name_token ()); + assert (r->name_tokens () == c->name_tokens ()); + assert (r->ncname () == c->ncname ()); + assert (r->language () == c->language ()); + + // qualified name + // + assert (r->qname () == c->qname ()); + + // ID/IDREF + // + assert (r->id () == c->id ()); + assert (r->id_ref () == c->id_ref ()); + assert (r->id_refs () == c->id_refs ()); + + // URI + // + assert (r->any_uri () == c->any_uri ()); + + // binary + // + assert (r->base64_binary () == c->base64_binary ()); + assert (r->hex_binary () == c->hex_binary ()); + + // date/time + // + assert (r->date () == c->date ()); + assert (r->date_time () == c->date_time ()); + assert (r->duration () == c->duration ()); + assert (r->day () == c->day ()); + assert (r->month () == c->month ()); + assert (r->month_day () == c->month_day ()); + assert (r->year () == c->year ()); + assert (r->year_month () == c->year_month ()); + assert (r->time () == c->time ()); + } + catch (xml_schema::exception const& e) + { + cerr << e << endl; + return 1; + } +} diff --git a/xsd/tests/cxx/tree/binary/polymorphic/makefile b/xsd/tests/cxx/tree/binary/polymorphic/makefile new file mode 100644 index 0000000..7e97e00 --- /dev/null +++ b/xsd/tests/cxx/tree/binary/polymorphic/makefile @@ -0,0 +1,86 @@ +# file : tests/cxx/tree/binary/polymorphic/makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../../../build/bootstrap.make + +xsd := test.xsd +cxx := driver.cxx + +obj := $(addprefix $(out_base)/,$(cxx:.cxx=.o) $(xsd:.xsd=.o)) +dep := $(obj:.o=.o.d) + +driver := $(out_base)/driver +test := $(out_base)/.test +clean := $(out_base)/.clean + + +# Import. +# +$(call import,\ + $(scf_root)/import/libxerces-c/stub.make,\ + l: xerces_c.l,cpp-options: xerces_c.l.cpp-options) + +$(call import,\ + $(scf_root)/import/libace/stub.make,\ + l: ace.l,cpp-options: ace.l.cpp-options) + +# Build. +# +$(driver): $(obj) $(xerces_c.l) $(ace.l) + +$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): $(xerces_c.l.cpp-options) $(ace.l.cpp-options) + +genf := $(xsd:.xsd=.hxx) $(xsd:.xsd=.ixx) $(xsd:.xsd=.cxx) +gen := $(addprefix $(out_base)/,$(genf)) + +$(gen): xsd := $(out_root)/xsd/xsd +$(gen): xsd_options := --generate-polymorphic --root-element-last \ +--generate-insertion ACE_OutputCDR --generate-extraction ACE_InputCDR +$(gen): $(out_root)/xsd/xsd + +$(call include-dep,$(dep)) + +# Convenience alias for default target. +# +$(out_base)/: $(driver) + + +# Test. +# +$(test): driver := $(driver) +$(test): $(driver) $(src_base)/test.xml + $(call message,test $$1,$$1 $(src_base)/test.xml,$(driver)) + +# Clean. +# +$(clean): $(driver).o.clean \ + $(addsuffix .cxx.clean,$(obj)) \ + $(addsuffix .cxx.clean,$(dep)) \ + $(addprefix $(out_base)/,$(xsd:.xsd=.cxx.xsd.clean)) + +# Generated .gitignore. +# +ifeq ($(out_base),$(src_base)) +$(gen): | $(out_base)/.gitignore +$(driver): | $(out_base)/.gitignore + +$(out_base)/.gitignore: files := driver $(genf) +$(clean): $(out_base)/.gitignore.clean + +$(call include,$(bld_root)/git/gitignore.make) +endif + +# How to. +# +$(call include,$(bld_root)/cxx/o-e.make) +$(call include,$(bld_root)/cxx/cxx-o.make) +$(call include,$(bld_root)/cxx/cxx-d.make) +$(call include,$(scf_root)/xsd/tree/xsd-cxx.make) + + +# Dependencies. +# +$(call import,$(src_root)/xsd/makefile) diff --git a/xsd/tests/cxx/tree/binary/polymorphic/test.xml b/xsd/tests/cxx/tree/binary/polymorphic/test.xml new file mode 100644 index 0000000..ad3a403 --- /dev/null +++ b/xsd/tests/cxx/tree/binary/polymorphic/test.xml @@ -0,0 +1,92 @@ +<t:root xmlns:t="test" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="test test.xsd"> + + <list>1 2 3</list> + + <union>abc</union> + + <enumeration>left</enumeration> + + <base x="1" xsi:type="t:complex"> + <a>aaa</a> + </base> + + <t:scomplex x="1" y="2"> + <a>aaa</a> + <b>bbb</b> + <c>c</c> + <c>cc</c> + <c>ccc</c> + </t:scomplex> + + + <!-- integers --> + <byte>65</byte> + <unsigned_byte>66</unsigned_byte> + <short>-222</short> + <unsigned_short>57005</unsigned_short> + <int>-57005</int> + <unsigned_int>3735928559</unsigned_int> + <long>-3735928559</long> + <unsigned_long>16045690984833335023</unsigned_long> + <integer>-3735928559</integer> + <non_positive_integer>-3735928559</non_positive_integer> + <non_negative_integer>3735928559</non_negative_integer> + <positive_integer>3735928559</positive_integer> + <negative_integer>-3735928559</negative_integer> + + + <!-- boolean --> + <boolean>true</boolean> + + + <!-- floats --> + <float>1234.1234</float> + <double>12345678.12345678</double> + <decimal>1234567812345678.1234567812345678</decimal> + + + <!-- strings --> + <string>string</string> + <normalized_string>normalized string</normalized_string> + <token>one two three</token> + <name>name</name> + <name_token>name-token</name_token> + <name_tokens>name tokens</name_tokens> + <ncname>ncname</ncname> + <language>en-us</language> + + <!-- qualified name --> + <qname>xsi:schemaLocation</qname> + + + <!-- ID/IDREF --> + <id>elements1</id> + <id>elements2</id> + <id_ref>elements1</id_ref> + <id_refs>elements1 elements2</id_refs> + + + <!-- URI --> + <any_uri>http://www.codesynthesis.com</any_uri> + + + <!-- binary --> + <base64_binary>YmFzZTY0IGJpbmFyeQ==</base64_binary> + <hex_binary>6865782052696E617279</hex_binary> + + + <!-- date/time --> + <date>2001-10-26+02:00</date> + <date_time>2001-10-26T21:32:52+02:00</date_time> + <duration>P1Y2M3DT5H20M30S</duration> + <day>---01+02:00</day> + <month>--11+02:00</month> + <month_day>--11-02+02:00</month_day> + <year>2001+02:00</year> + <year_month>2001-11+02:00</year_month> + <time>21:32:52+02:00</time> + + +</t:root> diff --git a/xsd/tests/cxx/tree/binary/polymorphic/test.xsd b/xsd/tests/cxx/tree/binary/polymorphic/test.xsd new file mode 100644 index 0000000..8c214e5 --- /dev/null +++ b/xsd/tests/cxx/tree/binary/polymorphic/test.xsd @@ -0,0 +1,125 @@ +<?xml version="1.0"?> +<schema xmlns="http://www.w3.org/2001/XMLSchema" + xmlns:t="test" + targetNamespace="test"> + + <simpleType name="list"> + <list itemType="int"/> + </simpleType> + + <simpleType name="union"> + <union memberTypes="int string"/> + </simpleType> + + <simpleType name="enumeration"> + <restriction base="string"> + <enumeration value="top"/> + <enumeration value="left"/> + <enumeration value="bottom"/> + <enumeration value="right"/> + </restriction> + </simpleType> + + <complexType name="base"> + <sequence> + <element name="a" type="string"/> + </sequence> + <attribute name="x" type="int" use="required"/> + </complexType> + + <element name="sbase" type="t:base"/> + + <complexType name="complex"> + <complexContent> + <extension base="t:base"> + <sequence> + <element name="b" type="string" minOccurs="0"/> + <element name="c" type="string" minOccurs="0" maxOccurs="unbounded"/> + </sequence> + <attribute name="y" type="int"/> + </extension> + </complexContent> + </complexType> + + <element name="scomplex" type="t:complex" substitutionGroup="t:sbase"/> + + <complexType name="type"> + <sequence> + <element name="list" type="t:list"/> + <element name="union" type="t:union"/> + <element name="enumeration" type="t:enumeration"/> + + <element name="base" type="t:base"/> + <element ref="t:sbase"/> + + <!-- integers --> + <element name="byte" type="byte"/> + <element name="unsigned_byte" type="unsignedByte"/> + <element name="short" type="short"/> + <element name="unsigned_short" type="unsignedShort"/> + <element name="int" type="int"/> + <element name="unsigned_int" type="unsignedInt"/> + <element name="long" type="long"/> + <element name="unsigned_long" type="unsignedLong"/> + <element name="integer" type="integer"/> + <element name="non_positive_integer" type="nonPositiveInteger"/> + <element name="non_negative_integer" type="nonNegativeInteger"/> + <element name="positive_integer" type="positiveInteger"/> + <element name="negative_integer" type="negativeInteger"/> + + + <!-- boolean --> + <element name="boolean" type="boolean"/> + + + <!-- floats --> + <element name="float" type="float"/> + <element name="double" type="double"/> + <element name="decimal" type="decimal"/> + + + <!-- strings --> + <element name="string" type="string"/> + <element name="normalized_string" type="normalizedString"/> + <element name="token" type="token"/> + <element name="name" type="Name"/> + <element name="name_token" type="NMTOKEN"/> + <element name="name_tokens" type="NMTOKENS"/> + <element name="ncname" type="NCName"/> + <element name="language" type="language"/> + + <!-- qualified name --> + <element name="qname" type="QName"/> + + + <!-- ID/IDREF --> + <element name="id" maxOccurs="2" type="ID"/> + <element name="id_ref" type="IDREF"/> + <element name="id_refs" type="IDREFS"/> + + + <!-- URI --> + <element name="any_uri" type="anyURI"/> + + + <!-- binary --> + <element name="base64_binary" type="base64Binary"/> + <element name="hex_binary" type="hexBinary"/> + + + <!-- date/time --> + <element name="date" type="date"/> + <element name="date_time" type="dateTime"/> + <element name="duration" type="duration"/> + <element name="day" type="gDay"/> + <element name="month" type="gMonth"/> + <element name="month_day" type="gMonthDay"/> + <element name="year" type="gYear"/> + <element name="year_month" type="gYearMonth"/> + <element name="time" type="time"/> + </sequence> + </complexType> + + <element name="root" type="t:type"/> + +</schema> diff --git a/xsd/tests/cxx/tree/binary/xdr/driver.cxx b/xsd/tests/cxx/tree/binary/xdr/driver.cxx new file mode 100644 index 0000000..cf2a264 --- /dev/null +++ b/xsd/tests/cxx/tree/binary/xdr/driver.cxx @@ -0,0 +1,181 @@ +// file : tests/cxx/tree/binary/xdr/driver.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +// Test non-polymorphic binary serialization to XDR. +// + +#include <memory> // std::auto_ptr +#include <cstring> // std::memcpy +#include <cassert> +#include <iostream> + +#include "test.hxx" + +using namespace std; +using namespace test; + +extern "C" int +overflow (char* p, char* buf, int n) +{ + xml_schema::buffer* dst (reinterpret_cast<xml_schema::buffer*> (p)); + + std::size_t size (dst->size ()); + dst->size (size + n); + memcpy (dst->data () + size, buf, n); + + return n; +} + +struct underflow_info +{ + xml_schema::buffer* buf; + std::size_t pos; +}; + +extern "C" int +underflow (char* p, char* buf, int n) +{ + underflow_info* ui (reinterpret_cast<underflow_info*> (p)); + + std::size_t size (ui->buf->size () - ui->pos); + n = size > n ? n : size; + + memcpy (buf, ui->buf->data () + ui->pos, n); + ui->pos += n; + + return n; +} + +int +main (int argc, char* argv[]) +{ + if (argc != 2) + { + cerr << "usage: " << argv[0] << " test.xml" << endl; + return 1; + } + + try + { + auto_ptr<type> r (root (argv[1])); + + // Save to an XDR stream. + // + XDR xdr; + xml_schema::buffer buf; + xdrrec_create (&xdr, 0, 0, reinterpret_cast<char*> (&buf), 0, &overflow); + xdr.x_op = XDR_ENCODE; + xsd::cxx::tree::ostream<XDR> oxdr (xdr); + oxdr << *r; + xdrrec_endofrecord (&xdr, true); // flush the data + xdr_destroy (&xdr); + + // Load from an XDR stream. + // + underflow_info ui; + ui.buf = &buf; + ui.pos = 0; + xdrrec_create (&xdr, 0, 0, reinterpret_cast<char*> (&ui), &underflow, 0); + xdr.x_op = XDR_DECODE; + xdrrec_skiprecord (&xdr); + xsd::cxx::tree::istream<XDR> ixdr (xdr); + auto_ptr<type> c (new type (ixdr)); + xdr_destroy (&xdr); + + // Compare the two. + // + assert (r->list () == c->list ()); + assert (r->union_ () == c->union_ ()); + assert (r->enumeration () == c->enumeration ()); + + type::complex_sequence rs (r->complex ()), cs (c->complex ()); + + for (type::complex_iterator ri (rs.begin ()), ci (cs.begin ()); + ri != rs.end () && ci != rs.end (); ++ri, ++ci) + { + assert (ri->a () == ci->a ()); + if (ri->b ()) + assert (ri->b () == ci->b ()); + assert (ri->c () == ci->c ()); + + assert (ri->x () == ci->x ()); + if (ri->y ()) + assert (ri->y () == ci->y ()); + } + + // integers + // + assert (r->byte () == c->byte ()); + assert (r->unsigned_byte () == c->unsigned_byte ()); + assert (r->short_ () == c->short_ ()); + assert (r->unsigned_short () == c->unsigned_short ()); + assert (r->int_ () == c->int_ ()); + assert (r->unsigned_int () == c->unsigned_int ()); + assert (r->long_ () == c->long_ ()); + assert (r->unsigned_long () == c->unsigned_long ()); + assert (r->integer () == c->integer ()); + assert (r->non_positive_integer () == c->non_positive_integer ()); + assert (r->non_negative_integer () == c->non_negative_integer ()); + assert (r->positive_integer () == c->positive_integer ()); + assert (r->negative_integer () == c->negative_integer ()); + + // boolean + // + assert (r->boolean () == c->boolean ()); + + // floats + // + assert (r->float_ () == c->float_ ()); + assert (r->double_ () == c->double_ ()); + assert (r->decimal () == c->decimal ()); + + // strings + // + assert (r->string () == c->string ()); + assert (r->normalized_string () == c->normalized_string ()); + assert (r->token () == c->token ()); + assert (r->name () == c->name ()); + assert (r->name_token () == c->name_token ()); + assert (r->name_tokens () == c->name_tokens ()); + assert (r->ncname () == c->ncname ()); + assert (r->language () == c->language ()); + + // qualified name + // + assert (r->qname () == c->qname ()); + + // ID/IDREF + // + assert (r->id () == c->id ()); + assert (r->id_ref () == c->id_ref ()); + assert (r->id_refs () == c->id_refs ()); + + // URI + // + assert (r->any_uri () == c->any_uri ()); + + // binary + // + assert (r->base64_binary () == c->base64_binary ()); + assert (r->hex_binary () == c->hex_binary ()); + + // date/time + // + assert (r->date () == c->date ()); + assert (r->date_time () == c->date_time ()); + assert (r->duration () == c->duration ()); + assert (r->day () == c->day ()); + assert (r->month () == c->month ()); + assert (r->month_day () == c->month_day ()); + assert (r->year () == c->year ()); + assert (r->year_month () == c->year_month ()); + assert (r->time () == c->time ()); + } + catch (xml_schema::exception const& e) + { + cerr << e << endl; + return 1; + } +} diff --git a/xsd/tests/cxx/tree/binary/xdr/makefile b/xsd/tests/cxx/tree/binary/xdr/makefile new file mode 100644 index 0000000..7b3089b --- /dev/null +++ b/xsd/tests/cxx/tree/binary/xdr/makefile @@ -0,0 +1,81 @@ +# file : tests/cxx/tree/binary/xdr/makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../../../build/bootstrap.make + +xsd := test.xsd +cxx := driver.cxx + +obj := $(addprefix $(out_base)/,$(cxx:.cxx=.o) $(xsd:.xsd=.o)) +dep := $(obj:.o=.o.d) + +driver := $(out_base)/driver +test := $(out_base)/.test +clean := $(out_base)/.clean + + +# Import. +# +$(call import,\ + $(scf_root)/import/libxerces-c/stub.make,\ + l: xerces_c.l,cpp-options: xerces_c.l.cpp-options) + +# Build. +# +$(driver): $(obj) $(xerces_c.l) + +$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): $(xerces_c.l.cpp-options) + +genf := $(xsd:.xsd=.hxx) $(xsd:.xsd=.ixx) $(xsd:.xsd=.cxx) +gen := $(addprefix $(out_base)/,$(genf)) + +$(gen): xsd := $(out_root)/xsd/xsd +$(gen): xsd_options := --generate-insertion XDR --generate-extraction XDR +$(gen): $(out_root)/xsd/xsd + +$(call include-dep,$(dep)) + +# Convenience alias for default target. +# +$(out_base)/: $(driver) + + +# Test. +# +$(test): driver := $(driver) +$(test): $(driver) $(src_base)/test.xml + $(call message,test $$1,$$1 $(src_base)/test.xml,$(driver)) + +# Clean. +# +$(clean): $(driver).o.clean \ + $(addsuffix .cxx.clean,$(obj)) \ + $(addsuffix .cxx.clean,$(dep)) \ + $(addprefix $(out_base)/,$(xsd:.xsd=.cxx.xsd.clean)) + +# Generated .gitignore. +# +ifeq ($(out_base),$(src_base)) +$(gen): | $(out_base)/.gitignore +$(driver): | $(out_base)/.gitignore + +$(out_base)/.gitignore: files := driver $(genf) +$(clean): $(out_base)/.gitignore.clean + +$(call include,$(bld_root)/git/gitignore.make) +endif + +# How to. +# +$(call include,$(bld_root)/cxx/o-e.make) +$(call include,$(bld_root)/cxx/cxx-o.make) +$(call include,$(bld_root)/cxx/cxx-d.make) +$(call include,$(scf_root)/xsd/tree/xsd-cxx.make) + + +# Dependencies. +# +$(call import,$(src_root)/xsd/makefile) diff --git a/xsd/tests/cxx/tree/binary/xdr/test.xml b/xsd/tests/cxx/tree/binary/xdr/test.xml new file mode 100644 index 0000000..928b4cf --- /dev/null +++ b/xsd/tests/cxx/tree/binary/xdr/test.xml @@ -0,0 +1,91 @@ +<t:root xmlns:t="test" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="test test.xsd"> + + <list>1 2 3</list> + + <union>abc</union> + + <enumeration>left</enumeration> + + <complex x="1"> + <a>aaa</a> + </complex> + <complex x="1" y="2"> + <a>aaa</a> + <b>bbb</b> + <c>c</c> + <c>cc</c> + <c>ccc</c> + </complex> + + + <!-- integers --> + <byte>65</byte> + <unsigned_byte>66</unsigned_byte> + <short>-222</short> + <unsigned_short>57005</unsigned_short> + <int>-57005</int> + <unsigned_int>3735928559</unsigned_int> + <long>-3735928559</long> + <unsigned_long>16045690984833335023</unsigned_long> + <integer>-3735928559</integer> + <non_positive_integer>-3735928559</non_positive_integer> + <non_negative_integer>3735928559</non_negative_integer> + <positive_integer>3735928559</positive_integer> + <negative_integer>-3735928559</negative_integer> + + + <!-- boolean --> + <boolean>true</boolean> + + + <!-- floats --> + <float>1234.1234</float> + <double>12345678.12345678</double> + <decimal>1234567812345678.1234567812345678</decimal> + + + <!-- strings --> + <string>string</string> + <normalized_string>normalized string</normalized_string> + <token>one two three</token> + <name>name</name> + <name_token>name-token</name_token> + <name_tokens>name tokens</name_tokens> + <ncname>ncname</ncname> + <language>en-us</language> + + <!-- qualified name --> + <qname>xsi:schemaLocation</qname> + + + <!-- ID/IDREF --> + <id>elements1</id> + <id>elements2</id> + <id_ref>elements1</id_ref> + <id_refs>elements1 elements2</id_refs> + + + <!-- URI --> + <any_uri>http://www.codesynthesis.com</any_uri> + + + <!-- binary --> + <base64_binary>YmFzZTY0IGJpbmFyeQ==</base64_binary> + <hex_binary>6865782052696E617279</hex_binary> + + + <!-- date/time --> + <date>2001-10-26+02:00</date> + <date_time>2001-10-26T21:32:52+02:00</date_time> + <duration>P1Y2M3DT5H20M30S</duration> + <day>---01+02:00</day> + <month>--11+02:00</month> + <month_day>--11-02+02:00</month_day> + <year>2001+02:00</year> + <year_month>2001-11+02:00</year_month> + <time>21:32:52+02:00</time> + + +</t:root> diff --git a/xsd/tests/cxx/tree/binary/xdr/test.xsd b/xsd/tests/cxx/tree/binary/xdr/test.xsd new file mode 100644 index 0000000..e593f64 --- /dev/null +++ b/xsd/tests/cxx/tree/binary/xdr/test.xsd @@ -0,0 +1,120 @@ +<?xml version="1.0"?> +<schema xmlns="http://www.w3.org/2001/XMLSchema" + xmlns:t="test" + targetNamespace="test"> + + <simpleType name="list"> + <list itemType="int"/> + </simpleType> + + <simpleType name="union"> + <union memberTypes="int string"/> + </simpleType> + + <simpleType name="enumeration"> + <restriction base="string"> + <enumeration value="top"/> + <enumeration value="left"/> + <enumeration value="bottom"/> + <enumeration value="right"/> + </restriction> + </simpleType> + + <complexType name="base"> + <sequence> + <element name="a" type="string"/> + </sequence> + <attribute name="x" type="int" use="required"/> + </complexType> + + <complexType name="complex"> + <complexContent> + <extension base="t:base"> + <sequence> + <element name="b" type="string" minOccurs="0"/> + <element name="c" type="string" minOccurs="0" maxOccurs="unbounded"/> + </sequence> + <attribute name="y" type="int"/> + </extension> + </complexContent> + </complexType> + + + <complexType name="type"> + <sequence> + <element name="list" type="t:list"/> + <element name="union" type="t:union"/> + <element name="enumeration" type="t:enumeration"/> + <element name="complex" type="t:complex" maxOccurs="unbounded"/> + + <!-- integers --> + <element name="byte" type="byte"/> + <element name="unsigned_byte" type="unsignedByte"/> + <element name="short" type="short"/> + <element name="unsigned_short" type="unsignedShort"/> + <element name="int" type="int"/> + <element name="unsigned_int" type="unsignedInt"/> + <element name="long" type="long"/> + <element name="unsigned_long" type="unsignedLong"/> + <element name="integer" type="integer"/> + <element name="non_positive_integer" type="nonPositiveInteger"/> + <element name="non_negative_integer" type="nonNegativeInteger"/> + <element name="positive_integer" type="positiveInteger"/> + <element name="negative_integer" type="negativeInteger"/> + + + <!-- boolean --> + <element name="boolean" type="boolean"/> + + + <!-- floats --> + <element name="float" type="float"/> + <element name="double" type="double"/> + <element name="decimal" type="decimal"/> + + + <!-- strings --> + <element name="string" type="string"/> + <element name="normalized_string" type="normalizedString"/> + <element name="token" type="token"/> + <element name="name" type="Name"/> + <element name="name_token" type="NMTOKEN"/> + <element name="name_tokens" type="NMTOKENS"/> + <element name="ncname" type="NCName"/> + <element name="language" type="language"/> + + <!-- qualified name --> + <element name="qname" type="QName"/> + + + <!-- ID/IDREF --> + <element name="id" maxOccurs="2" type="ID"/> + <element name="id_ref" type="IDREF"/> + <element name="id_refs" type="IDREFS"/> + + + <!-- URI --> + <element name="any_uri" type="anyURI"/> + + + <!-- binary --> + <element name="base64_binary" type="base64Binary"/> + <element name="hex_binary" type="hexBinary"/> + + + <!-- date/time --> + <element name="date" type="date"/> + <element name="date_time" type="dateTime"/> + <element name="duration" type="duration"/> + <element name="day" type="gDay"/> + <element name="month" type="gMonth"/> + <element name="month_day" type="gMonthDay"/> + <element name="year" type="gYear"/> + <element name="year_month" type="gYearMonth"/> + <element name="time" type="time"/> + </sequence> + </complexType> + + <element name="root" type="t:type"/> + +</schema> diff --git a/xsd/tests/cxx/tree/built-in/attributes.xml b/xsd/tests/cxx/tree/built-in/attributes.xml new file mode 100644 index 0000000..609a757 --- /dev/null +++ b/xsd/tests/cxx/tree/built-in/attributes.xml @@ -0,0 +1,73 @@ +<?xml version="1.0" encoding="UTF-8"?> +<test:attributes + xmlns:test="http://www.codesynthesis.com/xmlns/test" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.codesynthesis.com/xmlns/test types.xsd" + + + byte="65" + unsigned_byte="66" + short="-222" + unsigned_short="57005" + int="-57005" + unsigned_int="3735928559" + long="-3735928559" + unsigned_long="16045690984833335023" + integer="-3735928559" + non_positive_integer="-3735928559" + non_negative_integer="3735928559" + positive_integer="3735928559" + negative_integer="-3735928559" + + + + boolean="false" + + + + float="1234.1234" + double="12345678.12345678" + decimal="12345678.12345678" + + + + string="string" + normalized_string="normalized string" + token=" one two three " + name="name" + name_token="name-token" + name_tokens="name tokens" + ncname="ncname" + language="en-us" + + + qname="xsi:schemaLocation" + + + + id="attributes" + id_ref="attributes" + id_refs="attributes" + + + + any_uri="http://www.codesynthesis.com" + + + + base64_binary="YmFzZTY0IGJpbmFyeQ==" + hex_binary="6865782052696E617279" + + + + date="2001-10-26+02:00" + date_time="2001-10-26T21:32:52+02:00" + duration="P1Y2M3DT5H20M30S" + day="---01+02:00" + month="--11+02:00" + month_day="--11-02+02:00" + year="2001+02:00" + year_month="2001-11+02:00" + time="21:32:52+02:00" + +/> diff --git a/xsd/tests/cxx/tree/built-in/driver.cxx b/xsd/tests/cxx/tree/built-in/driver.cxx new file mode 100644 index 0000000..a41e4f3 --- /dev/null +++ b/xsd/tests/cxx/tree/built-in/driver.cxx @@ -0,0 +1,94 @@ +// file : tests/cxx/tree/built-in/driver.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +// Test built-in type mapping. +// + +#include <memory> // std::auto_ptr +#include <sstream> +#include <iostream> + + +#include "types.hxx" + +using std::cerr; +using std::endl; +using std::auto_ptr; + +int +main (int argc, char* argv[]) +{ + if (argc != 4) + { + cerr << "usage: " << argv[0] << " elements.xml attributes.xml inherited.xml" << endl; + return 1; + } + + auto_ptr<xmlns::test::Elements> elements (xmlns::test::elements (argv[1])); + + auto_ptr<xmlns::test::Attributes> attributes ( + xmlns::test::attributes (argv[2])); + + auto_ptr<xmlns::test::Inherited> inherited ( + xmlns::test::inherited (argv[3])); + + cerr << "elements: " << *elements << endl + << endl + << "attributes: " << *attributes << endl + << endl + << "inherited: " << *inherited << endl; + + // Test parsing/serialization. + // + + xml_schema::namespace_infomap map; + + map["test"].name = "http://www.codesynthesis.com/xmlns/test"; + map["test"].schema = "types.xsd"; + + { + std::ostringstream ostr; + xmlns::test::elements (ostr, *elements, map); + + std::istringstream istr (ostr.str ()); + auto_ptr<xmlns::test::Elements> elements1 (xmlns::test::elements (istr)); + + std::ostringstream ostr1; + xmlns::test::elements (ostr1, *elements1, map); + + if (ostr.str () != ostr1.str ()) + return 1; + } + + { + std::ostringstream ostr; + xmlns::test::attributes (ostr, *attributes, map); + + std::istringstream istr (ostr.str ()); + auto_ptr<xmlns::test::Attributes> attributes1 ( + xmlns::test::attributes (istr)); + + std::ostringstream ostr1; + xmlns::test::attributes (ostr1, *attributes1, map); + + if (ostr.str () != ostr1.str ()) + return 1; + } + + { + std::ostringstream ostr; + xmlns::test::inherited (ostr, *inherited, map); + + std::istringstream istr (ostr.str ()); + auto_ptr<xmlns::test::Inherited> inherited1 ( + xmlns::test::inherited (istr)); + + std::ostringstream ostr1; + xmlns::test::inherited (ostr1, *inherited1, map); + + if (ostr.str () != ostr1.str ()) + return 1; + } +} diff --git a/xsd/tests/cxx/tree/built-in/elements.xml b/xsd/tests/cxx/tree/built-in/elements.xml new file mode 100644 index 0000000..f76f019 --- /dev/null +++ b/xsd/tests/cxx/tree/built-in/elements.xml @@ -0,0 +1,84 @@ +<?xml version="1.0" encoding="UTF-8"?> +<test:elements + xmlns:test="http://www.codesynthesis.com/xmlns/test" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.codesynthesis.com/xmlns/test types.xsd"> + + <!-- integers --> + <byte>65</byte> + <unsigned_byte>66</unsigned_byte> + <short>-222</short> + <unsigned_short>57005</unsigned_short> + <int>-57005</int> + <unsigned_int>3735928559</unsigned_int> + <long>-3735928559</long> + <unsigned_long>16045690984833335023</unsigned_long> + <integer>-3735928559</integer> + <non_positive_integer>-3735928559</non_positive_integer> + <non_negative_integer>3735928559</non_negative_integer> + <positive_integer>3735928559</positive_integer> + <negative_integer>-3735928559</negative_integer> + + + <!-- boolean --> + <boolean>true</boolean> + + + <!-- floats --> + <float>1234.1234</float> + <double>12345678.12345678</double> + <decimal>12345678.12345678</decimal> + + + <!-- strings --> + <string>string</string> + <normalized_string>normalized +string</normalized_string> + <token> + one + two three </token> + <name>name</name> + <name_token>name-token</name_token> + <name_tokens>name tokens</name_tokens> + <ncname>ncname</ncname> + <language>en-us</language> + + <!-- qualified name --> + <qname>xsi:schemaLocation</qname> + + + <!-- ID/IDREF --> + <id>elements1</id> + <id>elements2</id> + <id_ref>elements1</id_ref> + <id_refs>elements1 elements2</id_refs> + + + <!-- URI --> + <any_uri>http://www.codesynthesis.com</any_uri> + + + <!-- binary --> + <base64_binary>YmFzZTY0IGJpbmFyeQ==</base64_binary> + <hex_binary>6865782052696E617279</hex_binary> + + + <!-- date/time --> + <date>2001-10-26+02:00</date> + <date_time>2001-10-26T21:32:52+02:00</date_time> + <duration>P1Y2M3DT5H20M30S</duration> + <day>---01+02:00</day> + <month>--11+02:00</month> + <month_day>--11-02+02:00</month_day> + <year>2001+02:00</year> + <year_month>2001-11+02:00</year_month> + <time>21:32:52+02:00</time> + + + <!-- entity --> + <!-- + <entity>foo</entity> + <entities>foo bar</entities> + --> + +</test:elements> diff --git a/xsd/tests/cxx/tree/built-in/inherited.xml b/xsd/tests/cxx/tree/built-in/inherited.xml new file mode 100644 index 0000000..1781a69 --- /dev/null +++ b/xsd/tests/cxx/tree/built-in/inherited.xml @@ -0,0 +1,84 @@ +<?xml version="1.0" encoding="UTF-8"?> +<test:inherited + xmlns:test="http://www.codesynthesis.com/xmlns/test" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.codesynthesis.com/xmlns/test types.xsd"> + + <!-- integers --> + <byte>65</byte> + <unsigned_byte>66</unsigned_byte> + <short>-222</short> + <unsigned_short>57005</unsigned_short> + <int>-57005</int> + <unsigned_int>3735928559</unsigned_int> + <long>-3735928559</long> + <unsigned_long>16045690984833335023</unsigned_long> + <integer>-3735928559</integer> + <non_positive_integer>-3735928559</non_positive_integer> + <non_negative_integer>3735928559</non_negative_integer> + <positive_integer>3735928559</positive_integer> + <negative_integer>-3735928559</negative_integer> + + + <!-- boolean --> + <boolean>true</boolean> + + + <!-- floats --> + <float>1234.1234</float> + <double>12345678.12345678</double> + <decimal>12345678.12345678</decimal> + + + <!-- strings --> + <string>string</string> + <normalized_string>normalized +string</normalized_string> + <token> + one + two three </token> + <name>name</name> + <name_token>name-token</name_token> + <name_tokens>name tokens</name_tokens> + <ncname>ncname</ncname> + <language>en-us</language> + + <!-- qualified name --> + <qname>xsi:schemaLocation</qname> + + + <!-- ID/IDREF --> + <id>elements1</id> + <id>elements2</id> + <id_ref>elements1</id_ref> + <id_refs>elements1 elements2</id_refs> + + + <!-- URI --> + <any_uri>http://www.codesynthesis.com</any_uri> + + + <!-- binary --> + <base64_binary>YmFzZTY0IGJpbmFyeQ==</base64_binary> + <hex_binary>6865782052696E617279</hex_binary> + + + <!-- date/time --> + <date>2001-10-26+02:00</date> + <date_time>2001-10-26T21:32:52+02:00</date_time> + <duration>P1Y2M3DT5H20M30S</duration> + <day>---01+02:00</day> + <month>--11+02:00</month> + <month_day>--11-02+02:00</month_day> + <year>2001+02:00</year> + <year_month>2001-11+02:00</year_month> + <time>21:32:52+02:00</time> + + + <!-- entity --> + <!-- + <entity>foo</entity> + <entities>foo bar</entities> + --> + +</test:inherited> diff --git a/xsd/tests/cxx/tree/built-in/makefile b/xsd/tests/cxx/tree/built-in/makefile new file mode 100644 index 0000000..bf6301b --- /dev/null +++ b/xsd/tests/cxx/tree/built-in/makefile @@ -0,0 +1,97 @@ +# file : tests/cxx/tree/built-in/makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../../build/bootstrap.make + +xsd := types.xsd +cxx := driver.cxx + +obj := $(addprefix $(out_base)/,$(cxx:.cxx=.o) $(xsd:.xsd=.o)) +dep := $(obj:.o=.o.d) + +driver := $(out_base)/driver +test := $(out_base)/.test +clean := $(out_base)/.clean + + +# Import. +# +$(call import,\ + $(scf_root)/import/libxerces-c/stub.make,\ + l: xerces_c.l,cpp-options: xerces_c.l.cpp-options) + + +# Build. +# +$(driver): $(obj) $(xerces_c.l) + +$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): $(xerces_c.l.cpp-options) + +genf := $(xsd:.xsd=.hxx) $(xsd:.xsd=.ixx) $(xsd:.xsd=.cxx) +gen := $(addprefix $(out_base)/,$(genf)) + +$(gen): xsd := $(out_root)/xsd/xsd + +$(gen): xsd_options := \ +--char-type char \ +--generate-inline \ +--generate-ostream \ +--generate-serialization \ +--generate-default-ctor \ +--generate-from-base-ctor \ +--root-element-all + +$(gen): $(src_root)/xsd/xsd + +$(call include-dep,$(dep)) + + +# Convenience alias for default target. +# +$(out_base)/: $(driver) + + +# Test. +# +# We need to cd to src_base in order to have the schema in the working +# directory. +# +$(test): driver := $(driver) +$(test): $(driver) $(src_base)/elements.xml $(src_base)/attributes.xml \ +$(src_base)/inherited.xml + cd $(src_base) && $(driver) $(src_base)/elements.xml \ +$(src_base)/attributes.xml $(src_base)/inherited.xml + + +# Clean. +# +$(clean): $(driver).o.clean \ + $(addsuffix .cxx.clean,$(obj)) \ + $(addsuffix .cxx.clean,$(dep)) \ + $(addprefix $(out_base)/,$(xsd:.xsd=.cxx.xsd.clean)) + +# Generated .gitignore. +# +ifeq ($(out_base),$(src_base)) +$(gen): | $(out_base)/.gitignore +$(driver): | $(out_base)/.gitignore + +$(out_base)/.gitignore: files := driver $(genf) +$(clean): $(out_base)/.gitignore.clean + +$(call include,$(bld_root)/git/gitignore.make) +endif + +# How to. +# +$(call include,$(bld_root)/cxx/o-e.make) +$(call include,$(bld_root)/cxx/cxx-o.make) +$(call include,$(bld_root)/cxx/cxx-d.make) +$(call include,$(scf_root)/xsd/tree/xsd-cxx.make) + +# Dependencies. +# +$(call import,$(src_root)/xsd/makefile) diff --git a/xsd/tests/cxx/tree/built-in/types.xsd b/xsd/tests/cxx/tree/built-in/types.xsd new file mode 100644 index 0000000..22582cb --- /dev/null +++ b/xsd/tests/cxx/tree/built-in/types.xsd @@ -0,0 +1,460 @@ +<?xml version="1.0" encoding="UTF-8"?> +<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.w3.org/2001/XMLSchema XMLSchema.xsd" + xmlns="http://www.codesynthesis.com/xmlns/test" + targetNamespace="http://www.codesynthesis.com/xmlns/test"> + + <!-- elements --> + + <xsd:complexType name="Elements"> + <xsd:sequence> + + <!-- integers --> + <xsd:element name="byte" type="xsd:byte"/> + <xsd:element name="unsigned_byte" type="xsd:unsignedByte"/> + <xsd:element name="short" type="xsd:short"/> + <xsd:element name="unsigned_short" type="xsd:unsignedShort"/> + <xsd:element name="int" type="xsd:int"/> + <xsd:element name="unsigned_int" type="xsd:unsignedInt"/> + <xsd:element name="long" type="xsd:long"/> + <xsd:element name="unsigned_long" type="xsd:unsignedLong"/> + <xsd:element name="integer" type="xsd:integer"/> + <xsd:element name="non_positive_integer" type="xsd:nonPositiveInteger"/> + <xsd:element name="non_negative_integer" type="xsd:nonNegativeInteger"/> + <xsd:element name="positive_integer" type="xsd:positiveInteger"/> + <xsd:element name="negative_integer" type="xsd:negativeInteger"/> + + + <!-- boolean --> + <xsd:element name="boolean" type="xsd:boolean"/> + + + <!-- floats --> + <xsd:element name="float" type="xsd:float"/> + <xsd:element name="double" type="xsd:double"/> + <xsd:element name="decimal" type="xsd:decimal"/> + + + <!-- strings --> + <xsd:element name="string" type="xsd:string"/> + <xsd:element name="normalized_string" type="xsd:normalizedString"/> + <xsd:element name="token" type="xsd:token"/> + <xsd:element name="name" type="xsd:Name"/> + <xsd:element name="name_token" type="xsd:NMTOKEN"/> + <xsd:element name="name_tokens" type="xsd:NMTOKENS"/> + <xsd:element name="ncname" type="xsd:NCName"/> + <xsd:element name="language" type="xsd:language"/> + + <!-- qualified name --> + <xsd:element name="qname" type="xsd:QName"/> + + + <!-- ID/IDREF --> + <xsd:element name="id" maxOccurs="2" type="xsd:ID"/> + <xsd:element name="id_ref" type="xsd:IDREF"/> + <xsd:element name="id_refs" type="xsd:IDREFS"/> + + + <!-- URI --> + <xsd:element name="any_uri" type="xsd:anyURI"/> + + + <!-- binary --> + <xsd:element name="base64_binary" type="xsd:base64Binary"/> + <xsd:element name="hex_binary" type="xsd:hexBinary"/> + + + <!-- date/time --> + <xsd:element name="date" type="xsd:date"/> + <xsd:element name="date_time" type="xsd:dateTime"/> + <xsd:element name="duration" type="xsd:duration"/> + <xsd:element name="day" type="xsd:gDay"/> + <xsd:element name="month" type="xsd:gMonth"/> + <xsd:element name="month_day" type="xsd:gMonthDay"/> + <xsd:element name="year" type="xsd:gYear"/> + <xsd:element name="year_month" type="xsd:gYearMonth"/> + <xsd:element name="time" type="xsd:time"/> + + + <!-- entity --> + <!-- + <xsd:element name="entity" type="xsd:ENTITY"/> + <xsd:element name="entities" type="xsd:ENTITIES"/> + --> + + + <!-- notation --> + <!-- xsd:element name="notation" type="xsd:NOTATION"/ --> + </xsd:sequence> + </xsd:complexType> + + <xsd:element name="elements" type="Elements"/> + + + + <!-- attributes --> + + <xsd:complexType name="Attributes"> + <!-- integers --> + <xsd:attribute name="byte" type="xsd:byte"/> + <xsd:attribute name="unsigned_byte" type="xsd:unsignedByte"/> + <xsd:attribute name="short" type="xsd:short"/> + <xsd:attribute name="unsigned_short" type="xsd:unsignedShort"/> + <xsd:attribute name="int" type="xsd:int"/> + <xsd:attribute name="unsigned_int" type="xsd:unsignedInt"/> + <xsd:attribute name="long" type="xsd:long"/> + <xsd:attribute name="unsigned_long" type="xsd:unsignedLong"/> + <xsd:attribute name="integer" type="xsd:integer"/> + <xsd:attribute name="non_positive_integer" type="xsd:nonPositiveInteger"/> + <xsd:attribute name="non_negative_integer" type="xsd:nonNegativeInteger"/> + <xsd:attribute name="positive_integer" type="xsd:positiveInteger"/> + <xsd:attribute name="negative_integer" type="xsd:negativeInteger"/> + + + <!-- boolean --> + <xsd:attribute name="boolean" type="xsd:boolean"/> + + + <!-- floats --> + <xsd:attribute name="float" type="xsd:float"/> + <xsd:attribute name="double" type="xsd:double"/> + <xsd:attribute name="decimal" type="xsd:decimal"/> + + + <!-- strings --> + <xsd:attribute name="string" type="xsd:string"/> + <xsd:attribute name="normalized_string" type="xsd:normalizedString"/> + <xsd:attribute name="token" type="xsd:token"/> + <xsd:attribute name="name" type="xsd:Name"/> + <xsd:attribute name="name_token" type="xsd:NMTOKEN"/> + <xsd:attribute name="name_tokens" type="xsd:NMTOKENS"/> + <xsd:attribute name="ncname" type="xsd:NCName"/> + <xsd:attribute name="language" type="xsd:language"/> + + <!-- qualified name --> + <xsd:attribute name="qname" type="xsd:QName"/> + + + <!-- ID/IDREF --> + <xsd:attribute name="id" type="xsd:ID"/> + <xsd:attribute name="id_ref" type="xsd:IDREF"/> + <xsd:attribute name="id_refs" type="xsd:IDREFS"/> + + + <!-- URI --> + <xsd:attribute name="any_uri" type="xsd:anyURI"/> + + + <!-- binary --> + <xsd:attribute name="base64_binary" type="xsd:base64Binary"/> + <xsd:attribute name="hex_binary" type="xsd:hexBinary"/> + + + <!-- date/time --> + <xsd:attribute name="date" type="xsd:date"/> + <xsd:attribute name="date_time" type="xsd:dateTime"/> + <xsd:attribute name="duration" type="xsd:duration"/> + <xsd:attribute name="day" type="xsd:gDay"/> + <xsd:attribute name="month" type="xsd:gMonth"/> + <xsd:attribute name="month_day" type="xsd:gMonthDay"/> + <xsd:attribute name="year" type="xsd:gYear"/> + <xsd:attribute name="year_month" type="xsd:gYearMonth"/> + <xsd:attribute name="time" type="xsd:time"/> + + + <!-- entity --> + <!-- + <xsd:attribute name="entity" type="xsd:ENTITY"/> + <xsd:attribute name="entities" type="xsd:ENTITIES"/> + --> + + + <!-- notation --> + <!-- xsd:element name="notation" type="xsd:NOTATION"/ --> + </xsd:complexType> + + <xsd:element name="attributes" type="Attributes"/> + + + <!-- inheritance --> + + <!-- integers --> + <xsd:simpleType name="Byte"> + <xsd:restriction base="xsd:byte"/> + </xsd:simpleType> + + <xsd:simpleType name="UnsignedByte"> + <xsd:restriction base="xsd:unsignedByte"/> + </xsd:simpleType> + + <xsd:simpleType name="Short"> + <xsd:restriction base="xsd:short"/> + </xsd:simpleType> + + <xsd:simpleType name="UnsignedShort"> + <xsd:restriction base="xsd:unsignedShort"/> + </xsd:simpleType> + + <xsd:simpleType name="Int"> + <xsd:restriction base="xsd:int"/> + </xsd:simpleType> + + <xsd:simpleType name="UnsignedInt"> + <xsd:restriction base="xsd:unsignedInt"/> + </xsd:simpleType> + + <xsd:simpleType name="Long"> + <xsd:restriction base="xsd:long"/> + </xsd:simpleType> + + <xsd:simpleType name="UnsignedLong"> + <xsd:restriction base="xsd:unsignedLong"/> + </xsd:simpleType> + + <xsd:simpleType name="Integer"> + <xsd:restriction base="xsd:integer"/> + </xsd:simpleType> + + <xsd:simpleType name="NonPositiveInteger"> + <xsd:restriction base="xsd:nonPositiveInteger"/> + </xsd:simpleType> + + <xsd:simpleType name="NonNegativeInteger"> + <xsd:restriction base="xsd:nonNegativeInteger"/> + </xsd:simpleType> + + <xsd:simpleType name="PositiveInteger"> + <xsd:restriction base="xsd:positiveInteger"/> + </xsd:simpleType> + + <xsd:simpleType name="NegativeInteger"> + <xsd:restriction base="xsd:negativeInteger"/> + </xsd:simpleType> + + + <!-- boolean --> + <xsd:simpleType name="Boolean"> + <xsd:restriction base="xsd:boolean"/> + </xsd:simpleType> + + + <!-- floats --> + <xsd:simpleType name="Float"> + <xsd:restriction base="xsd:float"/> + </xsd:simpleType> + + <xsd:simpleType name="Double"> + <xsd:restriction base="xsd:double"/> + </xsd:simpleType> + + <xsd:simpleType name="Decimal"> + <xsd:restriction base="xsd:decimal"/> + </xsd:simpleType> + + + <!-- strings --> + <xsd:simpleType name="String"> + <xsd:restriction base="xsd:string"/> + </xsd:simpleType> + + <xsd:simpleType name="NormalizedString"> + <xsd:restriction base="xsd:normalizedString"/> + </xsd:simpleType> + + <xsd:simpleType name="Token"> + <xsd:restriction base="xsd:token"/> + </xsd:simpleType> + + <xsd:simpleType name="Name"> + <xsd:restriction base="xsd:Name"/> + </xsd:simpleType> + + <xsd:simpleType name="NameToken"> + <xsd:restriction base="xsd:NMTOKEN"/> + </xsd:simpleType> + + <xsd:simpleType name="NameTokens"> + <xsd:restriction base="xsd:NMTOKENS"/> + </xsd:simpleType> + + <xsd:simpleType name="NCName"> + <xsd:restriction base="xsd:NCName"/> + </xsd:simpleType> + + <xsd:simpleType name="Language"> + <xsd:restriction base="xsd:language"/> + </xsd:simpleType> + + + <!-- qualified name --> + <xsd:simpleType name="QName"> + <xsd:restriction base="xsd:QName"/> + </xsd:simpleType> + + + <!-- ID/IDREF --> + <xsd:simpleType name="Id"> + <xsd:restriction base="xsd:ID"/> + </xsd:simpleType> + + <xsd:simpleType name="IdRef"> + <xsd:restriction base="xsd:IDREF"/> + </xsd:simpleType> + + <xsd:simpleType name="IdRefs"> + <xsd:restriction base="xsd:IDREFS"/> + </xsd:simpleType> + + + <!-- URI --> + <xsd:simpleType name="URI"> + <xsd:restriction base="xsd:anyURI"/> + </xsd:simpleType> + + + <!-- binary --> + <xsd:simpleType name="Base64Binary"> + <xsd:restriction base="xsd:base64Binary"/> + </xsd:simpleType> + + <xsd:simpleType name="HexBinary"> + <xsd:restriction base="xsd:hexBinary"/> + </xsd:simpleType> + + + <!-- date/time --> + <xsd:simpleType name="Date"> + <xsd:restriction base="xsd:date"/> + </xsd:simpleType> + + <xsd:simpleType name="DateTime"> + <xsd:restriction base="xsd:dateTime"/> + </xsd:simpleType> + + <xsd:simpleType name="Duration"> + <xsd:restriction base="xsd:duration"/> + </xsd:simpleType> + + <xsd:simpleType name="Day"> + <xsd:restriction base="xsd:gDay"/> + </xsd:simpleType> + + <xsd:simpleType name="Month"> + <xsd:restriction base="xsd:gMonth"/> + </xsd:simpleType> + + <xsd:simpleType name="MonthDay"> + <xsd:restriction base="xsd:gMonthDay"/> + </xsd:simpleType> + + <xsd:simpleType name="Year"> + <xsd:restriction base="xsd:gYear"/> + </xsd:simpleType> + + <xsd:simpleType name="YearMonth"> + <xsd:restriction base="xsd:gYearMonth"/> + </xsd:simpleType> + + <xsd:simpleType name="Time"> + <xsd:restriction base="xsd:time"/> + </xsd:simpleType> + + + <!-- entity --> + <!-- + <xsd:element name="entity" type="xsd:ENTITY"/> + <xsd:element name="entities" type="xsd:ENTITIES"/> + --> + + + <!-- notation --> + <!-- xsd:element name="notation" type="xsd:NOTATION"/ --> + + <!-- elements --> + + <xsd:complexType name="Inherited"> + <xsd:sequence> + + <!-- integers --> + <xsd:element name="byte" type="Byte"/> + <xsd:element name="unsigned_byte" type="UnsignedByte"/> + <xsd:element name="short" type="Short"/> + <xsd:element name="unsigned_short" type="UnsignedShort"/> + <xsd:element name="int" type="Int"/> + <xsd:element name="unsigned_int" type="UnsignedInt"/> + <xsd:element name="long" type="Long"/> + <xsd:element name="unsigned_long" type="UnsignedLong"/> + <xsd:element name="integer" type="Integer"/> + <xsd:element name="non_positive_integer" type="NonPositiveInteger"/> + <xsd:element name="non_negative_integer" type="NonNegativeInteger"/> + <xsd:element name="positive_integer" type="PositiveInteger"/> + <xsd:element name="negative_integer" type="NegativeInteger"/> + + + <!-- boolean --> + <xsd:element name="boolean" type="Boolean"/> + + + <!-- floats --> + <xsd:element name="float" type="Float"/> + <xsd:element name="double" type="Double"/> + <xsd:element name="decimal" type="Decimal"/> + + + <!-- strings --> + <xsd:element name="string" type="String"/> + <xsd:element name="normalized_string" type="NormalizedString"/> + <xsd:element name="token" type="Token"/> + <xsd:element name="name" type="Name"/> + <xsd:element name="name_token" type="NameToken"/> + <xsd:element name="name_tokens" type="NameTokens"/> + <xsd:element name="ncname" type="NCName"/> + <xsd:element name="language" type="Language"/> + + <!-- qualified name --> + <xsd:element name="qname" type="QName"/> + + + <!-- ID/IDREF --> + <xsd:element name="id" maxOccurs="2" type="Id"/> + <xsd:element name="id_ref" type="IdRef"/> + <xsd:element name="id_refs" type="IdRefs"/> + + + <!-- URI --> + <xsd:element name="any_uri" type="URI"/> + + + <!-- binary --> + <xsd:element name="base64_binary" type="Base64Binary"/> + <xsd:element name="hex_binary" type="HexBinary"/> + + + <!-- date/time --> + <xsd:element name="date" type="Date"/> + <xsd:element name="date_time" type="DateTime"/> + <xsd:element name="duration" type="Duration"/> + <xsd:element name="day" type="Day"/> + <xsd:element name="month" type="Month"/> + <xsd:element name="month_day" type="MonthDay"/> + <xsd:element name="year" type="Year"/> + <xsd:element name="year_month" type="YearMonth"/> + <xsd:element name="time" type="Time"/> + + + <!-- entity --> + <!-- + <xsd:element name="entity" type="xsd:ENTITY"/> + <xsd:element name="entities" type="xsd:ENTITIES"/> + --> + + + <!-- notation --> + <!-- xsd:element name="notation" type="xsd:NOTATION"/ --> + </xsd:sequence> + </xsd:complexType> + + <xsd:element name="inherited" type="Inherited"/> + +</xsd:schema> diff --git a/xsd/tests/cxx/tree/chameleon/driver.cxx b/xsd/tests/cxx/tree/chameleon/driver.cxx new file mode 100644 index 0000000..6dae28e --- /dev/null +++ b/xsd/tests/cxx/tree/chameleon/driver.cxx @@ -0,0 +1,37 @@ +// file : tests/cxx/tree/chameleon/driver.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +// Test chameleon inclusion. +// + +#include <memory> // std::auto_ptr +#include <iostream> + +#include "includer.hxx" + +using namespace std; +using namespace test; + +int +main (int argc, char* argv[]) +{ + if (argc != 2) + { + cerr << "usage: " << argv[0] << " test.xml" << endl; + return 1; + } + + try + { + auto_ptr<root_t> r (root (argv[1])); + + cout << *r << endl; + } + catch (xml_schema::exception const& e) + { + cerr << e << endl; + return 1; + } +} diff --git a/xsd/tests/cxx/tree/chameleon/includee.xsd b/xsd/tests/cxx/tree/chameleon/includee.xsd new file mode 100644 index 0000000..531a7d0 --- /dev/null +++ b/xsd/tests/cxx/tree/chameleon/includee.xsd @@ -0,0 +1,13 @@ +<?xml version="1.0" ?> +<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + + <xsd:complexType name="root_t"> + <xsd:sequence> + <xsd:element name="a" type="type"/> + <xsd:element ref="b"/> + </xsd:sequence> + </xsd:complexType> + + <xsd:element name="root" type="root_t"/> + +</xsd:schema> diff --git a/xsd/tests/cxx/tree/chameleon/includer.xsd b/xsd/tests/cxx/tree/chameleon/includer.xsd new file mode 100644 index 0000000..a1c850a --- /dev/null +++ b/xsd/tests/cxx/tree/chameleon/includer.xsd @@ -0,0 +1,12 @@ +<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns="test" targetNamespace="test"> + + <xsd:include schemaLocation="includee.xsd"/> + + <xsd:simpleType name="type"> + <xsd:restriction base="xsd:string"/> + </xsd:simpleType> + + <xsd:element name="b" type="xsd:string"/> + +</xsd:schema> diff --git a/xsd/tests/cxx/tree/chameleon/makefile b/xsd/tests/cxx/tree/chameleon/makefile new file mode 100644 index 0000000..890de3f --- /dev/null +++ b/xsd/tests/cxx/tree/chameleon/makefile @@ -0,0 +1,82 @@ +# file : tests/cxx/tree/chameleon/makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../../build/bootstrap.make + +xsd := includer.xsd +cxx := driver.cxx + +obj := $(addprefix $(out_base)/,$(cxx:.cxx=.o) $(xsd:.xsd=.o)) +dep := $(obj:.o=.o.d) + +driver := $(out_base)/driver +test := $(out_base)/.test +clean := $(out_base)/.clean + + +# Import. +# +$(call import,\ + $(scf_root)/import/libxerces-c/stub.make,\ + l: xerces_c.l,cpp-options: xerces_c.l.cpp-options) + + +# Build. +# +$(driver): $(obj) $(xerces_c.l) + +$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): $(xerces_c.l.cpp-options) + +genf := $(xsd:.xsd=.hxx) $(xsd:.xsd=.ixx) $(xsd:.xsd=.cxx) +gen := $(addprefix $(out_base)/,$(genf)) + +$(gen): xsd := $(out_root)/xsd/xsd +$(gen): xsd_options := --root-element root --generate-ostream +$(gen): $(out_root)/xsd/xsd + +$(call include-dep,$(dep)) + +# Convenience alias for default target. +# +$(out_base)/: $(driver) + + +# Test. +# +$(test): driver := $(driver) +$(test): $(driver) $(src_base)/test.xml $(src_base)/output + $(call message,test $$1,$$1 $(src_base)/test.xml | diff -u $(src_base)/output -,$(driver)) + +# Clean. +# +$(clean): $(driver).o.clean \ + $(addsuffix .cxx.clean,$(obj)) \ + $(addsuffix .cxx.clean,$(dep)) \ + $(addprefix $(out_base)/,$(xsd:.xsd=.cxx.xsd.clean)) + +# Generated .gitignore. +# +ifeq ($(out_base),$(src_base)) +$(gen): | $(out_base)/.gitignore +$(driver): | $(out_base)/.gitignore + +$(out_base)/.gitignore: files := driver $(genf) +$(clean): $(out_base)/.gitignore.clean + +$(call include,$(bld_root)/git/gitignore.make) +endif + +# How to. +# +$(call include,$(bld_root)/cxx/o-e.make) +$(call include,$(bld_root)/cxx/cxx-o.make) +$(call include,$(bld_root)/cxx/cxx-d.make) +$(call include,$(scf_root)/xsd/tree/xsd-cxx.make) + + +# Dependencies. +# +$(call import,$(src_root)/xsd/makefile) diff --git a/xsd/tests/cxx/tree/chameleon/output b/xsd/tests/cxx/tree/chameleon/output new file mode 100644 index 0000000..c40f715 --- /dev/null +++ b/xsd/tests/cxx/tree/chameleon/output @@ -0,0 +1,3 @@ + +a: a +b: b diff --git a/xsd/tests/cxx/tree/chameleon/test.xml b/xsd/tests/cxx/tree/chameleon/test.xml new file mode 100644 index 0000000..12ff279 --- /dev/null +++ b/xsd/tests/cxx/tree/chameleon/test.xml @@ -0,0 +1,8 @@ +<t:root xmlns:t="test" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="test includer.xsd"> + + <a>a</a> + <t:b>b</t:b> + +</t:root> diff --git a/xsd/tests/cxx/tree/comparison/driver.cxx b/xsd/tests/cxx/tree/comparison/driver.cxx new file mode 100644 index 0000000..07ed7a6 --- /dev/null +++ b/xsd/tests/cxx/tree/comparison/driver.cxx @@ -0,0 +1,40 @@ +// file : tests/cxx/tree/comparison/driver.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +// Test generated comparison operators. +// + +#include <memory> // std::auto_ptr +#include <iostream> + +#include "test.hxx" + +using namespace std; +using namespace test; + +int +main (int argc, char* argv[]) +{ + if (argc != 2) + { + cerr << "usage: " << argv[0] << " test.xml" << endl; + return 1; + } + + try + { + auto_ptr<type> r (root (argv[1])); + + type::complex_sequence s (r->complex ()); + + assert (s[0] == s[0]); + assert (s[0] != s[1]); + } + catch (xml_schema::exception const& e) + { + cerr << e << endl; + return 1; + } +} diff --git a/xsd/tests/cxx/tree/comparison/makefile b/xsd/tests/cxx/tree/comparison/makefile new file mode 100644 index 0000000..5d8721a --- /dev/null +++ b/xsd/tests/cxx/tree/comparison/makefile @@ -0,0 +1,82 @@ +# file : tests/cxx/tree/comparison/makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../../build/bootstrap.make + +xsd := test.xsd +cxx := driver.cxx + +obj := $(addprefix $(out_base)/,$(cxx:.cxx=.o) $(xsd:.xsd=.o)) +dep := $(obj:.o=.o.d) + +driver := $(out_base)/driver +test := $(out_base)/.test +clean := $(out_base)/.clean + + +# Import. +# +$(call import,\ + $(scf_root)/import/libxerces-c/stub.make,\ + l: xerces_c.l,cpp-options: xerces_c.l.cpp-options) + + +# Build. +# +$(driver): $(obj) $(xerces_c.l) + +$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): $(xerces_c.l.cpp-options) + +genf := $(xsd:.xsd=.hxx) $(xsd:.xsd=.ixx) $(xsd:.xsd=.cxx) +gen := $(addprefix $(out_base)/,$(genf)) + +$(gen): xsd := $(out_root)/xsd/xsd +$(gen): xsd_options := --generate-comparison +$(gen): $(out_root)/xsd/xsd + +$(call include-dep,$(dep)) + +# Convenience alias for default target. +# +$(out_base)/: $(driver) + + +# Test. +# +$(test): driver := $(driver) +$(test): $(driver) $(src_base)/test.xml + $(call message,test $$1,$$1 $(src_base)/test.xml,$(driver)) + +# Clean. +# +$(clean): $(driver).o.clean \ + $(addsuffix .cxx.clean,$(obj)) \ + $(addsuffix .cxx.clean,$(dep)) \ + $(addprefix $(out_base)/,$(xsd:.xsd=.cxx.xsd.clean)) + +# Generated .gitignore. +# +ifeq ($(out_base),$(src_base)) +$(gen): | $(out_base)/.gitignore +$(driver): | $(out_base)/.gitignore + +$(out_base)/.gitignore: files := driver $(genf) +$(clean): $(out_base)/.gitignore.clean + +$(call include,$(bld_root)/git/gitignore.make) +endif + +# How to. +# +$(call include,$(bld_root)/cxx/o-e.make) +$(call include,$(bld_root)/cxx/cxx-o.make) +$(call include,$(bld_root)/cxx/cxx-d.make) +$(call include,$(scf_root)/xsd/tree/xsd-cxx.make) + + +# Dependencies. +# +$(call import,$(src_root)/xsd/makefile) diff --git a/xsd/tests/cxx/tree/comparison/test.xml b/xsd/tests/cxx/tree/comparison/test.xml new file mode 100644 index 0000000..b5d8158 --- /dev/null +++ b/xsd/tests/cxx/tree/comparison/test.xml @@ -0,0 +1,19 @@ +<t:root xmlns:t="test" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="test test.xsd"> + + <complex x="123" y="abc"> + <a>123</a> + <b>abc</b> + <c x="123">abc</c> + <c x="456">def</c> + </complex> + + <complex x="123" y="abc"> + <a>123</a> + <b>abc</b> + <c x="123">abc</c> + <c x="456">xyz</c> + </complex> + +</t:root> diff --git a/xsd/tests/cxx/tree/comparison/test.xsd b/xsd/tests/cxx/tree/comparison/test.xsd new file mode 100644 index 0000000..c234add --- /dev/null +++ b/xsd/tests/cxx/tree/comparison/test.xsd @@ -0,0 +1,30 @@ +<?xml version="1.0"?> +<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:t="test" targetNamespace="test"> + + <complexType name="member"> + <simpleContent> + <extension base="string"> + <attribute name="x" type="int" use="required"/> + </extension> + </simpleContent> + </complexType> + + <complexType name="complex"> + <sequence> + <element name="a" type="int"/> + <element name="b" type="string" minOccurs="0"/> + <element name="c" type="t:member" maxOccurs="unbounded"/> + </sequence> + <attribute name="x" type="int"/> + <attribute name="y" type="string" use="required"/> + </complexType> + + <complexType name="type"> + <sequence> + <element name="complex" type="t:complex" maxOccurs="unbounded"/> + </sequence> + </complexType> + + <element name="root" type="t:type"/> + +</schema> diff --git a/xsd/tests/cxx/tree/compilation/driver.cxx b/xsd/tests/cxx/tree/compilation/driver.cxx new file mode 100644 index 0000000..8135c9b --- /dev/null +++ b/xsd/tests/cxx/tree/compilation/driver.cxx @@ -0,0 +1,119 @@ +// file : tests/cxx/tree/compilation/driver.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +// Make sure the runtime library compiles by explicitly instantiating +// all the types. +// + +#include <memory> // std::auto_ptr +#include <iostream> + +#include "test.hxx" + +using namespace std; +using namespace test; + +template class xsd::cxx::tree::simple_type<xml_schema::type>; + +// String types. +// +template class xsd::cxx::tree::string< char, xml_schema::simple_type >; +template class xsd::cxx::tree::normalized_string< char, xml_schema::string >; +template class xsd::cxx::tree::token< char, xml_schema::normalized_string >; +template class xsd::cxx::tree::name< char, xml_schema::token >; +template class xsd::cxx::tree::nmtoken< char, xml_schema::token >; +template class xsd::cxx::tree::nmtokens< char, xml_schema::simple_type, xml_schema::nmtoken >; +template class xsd::cxx::tree::ncname< char, xml_schema::name >; +template class xsd::cxx::tree::language< char, xml_schema::token >; + +// ID/IDREF. +// +template class xsd::cxx::tree::id< char, xml_schema::ncname >; +template class xsd::cxx::tree::idref< char, xml_schema::ncname, xml_schema::type >; +template class xsd::cxx::tree::idrefs< char, xml_schema::simple_type, xml_schema::idref >; + +// URI. +// +template class xsd::cxx::tree::uri< char, xml_schema::simple_type >; + +// Qualified name. +// +template class xsd::cxx::tree::qname< char, xml_schema::simple_type, xml_schema::uri, xml_schema::ncname >; + +// Binary. +// +template class xsd::cxx::tree::buffer< char >; +template class xsd::cxx::tree::base64_binary< char, xml_schema::simple_type >; +template class xsd::cxx::tree::hex_binary< char, xml_schema::simple_type >; + +// Date/time. +// +template class xsd::cxx::tree::date< char, xml_schema::simple_type >; +template class xsd::cxx::tree::date_time< char, xml_schema::simple_type >; +template class xsd::cxx::tree::duration< char, xml_schema::simple_type >; +template class xsd::cxx::tree::gday< char, xml_schema::simple_type >; +template class xsd::cxx::tree::gmonth< char, xml_schema::simple_type >; +template class xsd::cxx::tree::gmonth_day< char, xml_schema::simple_type >; +template class xsd::cxx::tree::gyear< char, xml_schema::simple_type >; +template class xsd::cxx::tree::gyear_month< char, xml_schema::simple_type >; +template class xsd::cxx::tree::time< char, xml_schema::simple_type >; + +// Entity. +// +template class xsd::cxx::tree::entity< char, xml_schema::ncname >; +template class xsd::cxx::tree::entities< char, xml_schema::simple_type, xml_schema::entity >; + +// Namespace information and list stream. Used in +// serialization functions. +// +template class xsd::cxx::xml::dom::namespace_info < char >; +template class xsd::cxx::xml::dom::namespace_infomap < char >; +template class xsd::cxx::tree::list_stream < char >; + +// Flags and properties. +// +template class xsd::cxx::tree::properties< char >; + +// Exceptions. +// +template class xsd::cxx::tree::exception< char >; +template class xsd::cxx::tree::parsing< char >; +template class xsd::cxx::tree::expected_element< char >; +template class xsd::cxx::tree::unexpected_element< char >; +template class xsd::cxx::tree::expected_attribute< char >; +template class xsd::cxx::tree::unexpected_enumerator< char >; +template class xsd::cxx::tree::expected_text_content< char >; +template class xsd::cxx::tree::no_type_info< char >; +template class xsd::cxx::tree::not_derived< char >; +template class xsd::cxx::tree::duplicate_id< char >; +template class xsd::cxx::tree::serialization< char >; +template class xsd::cxx::tree::no_prefix_mapping< char >; +template class xsd::cxx::tree::bounds< char >; + +// Parsing/serialization diagnostics. +// +template class xsd::cxx::tree::error< char >; +template class xsd::cxx::tree::diagnostics< char >; + +// Error handler interface. +// +template class xsd::cxx::xml::error_handler< char >; + + +// +// +template class xsd::cxx::tree::fundamental_base<int, char, xml_schema::type>; +template class xsd::cxx::tree::one<int>; +template class xsd::cxx::tree::one<xml_schema::string>; +template class xsd::cxx::tree::optional<int>; +template class xsd::cxx::tree::optional<xml_schema::string>; +template class xsd::cxx::tree::sequence<int>; +template class xsd::cxx::tree::sequence<xml_schema::string>; + + +int +main () +{ +} diff --git a/xsd/tests/cxx/tree/compilation/makefile b/xsd/tests/cxx/tree/compilation/makefile new file mode 100644 index 0000000..93b88db --- /dev/null +++ b/xsd/tests/cxx/tree/compilation/makefile @@ -0,0 +1,82 @@ +# file : tests/cxx/tree/compilation/makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../../build/bootstrap.make + +xsd := test.xsd +cxx := driver.cxx + +obj := $(addprefix $(out_base)/,$(cxx:.cxx=.o) $(xsd:.xsd=.o)) +dep := $(obj:.o=.o.d) + +driver := $(out_base)/driver +test := $(out_base)/.test +clean := $(out_base)/.clean + + +# Import. +# +$(call import,\ + $(scf_root)/import/libxerces-c/stub.make,\ + l: xerces_c.l,cpp-options: xerces_c.l.cpp-options) + + +# Build. +# +$(driver): $(obj) $(xerces_c.l) + +$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): $(xerces_c.l.cpp-options) + +genf := $(xsd:.xsd=.hxx) $(xsd:.xsd=.ixx) $(xsd:.xsd=.cxx) +gen := $(addprefix $(out_base)/,$(genf)) + +$(gen): xsd := $(out_root)/xsd/xsd +$(gen): xsd_options := --generate-serialization +$(gen): $(out_root)/xsd/xsd + +$(call include-dep,$(dep)) + +# Convenience alias for default target. +# +$(out_base)/: $(driver) + + +# Test. +# +$(test): driver := $(driver) +$(test): $(driver) + $(call message,test $$1,$$1,$(driver)) + +# Clean. +# +$(clean): $(driver).o.clean \ + $(addsuffix .cxx.clean,$(obj)) \ + $(addsuffix .cxx.clean,$(dep)) \ + $(addprefix $(out_base)/,$(xsd:.xsd=.cxx.xsd.clean)) + +# Generated .gitignore. +# +ifeq ($(out_base),$(src_base)) +$(gen): | $(out_base)/.gitignore +$(driver): | $(out_base)/.gitignore + +$(out_base)/.gitignore: files := driver $(genf) +$(clean): $(out_base)/.gitignore.clean + +$(call include,$(bld_root)/git/gitignore.make) +endif + +# How to. +# +$(call include,$(bld_root)/cxx/o-e.make) +$(call include,$(bld_root)/cxx/cxx-o.make) +$(call include,$(bld_root)/cxx/cxx-d.make) +$(call include,$(scf_root)/xsd/tree/xsd-cxx.make) + + +# Dependencies. +# +$(call import,$(src_root)/xsd/makefile) diff --git a/xsd/tests/cxx/tree/compilation/test.xsd b/xsd/tests/cxx/tree/compilation/test.xsd new file mode 100644 index 0000000..07bebc7 --- /dev/null +++ b/xsd/tests/cxx/tree/compilation/test.xsd @@ -0,0 +1,12 @@ +<?xml version="1.0"?> +<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:t="test" targetNamespace="test"> + + <complexType name="type"> + <sequence> + <element name="a" type="string"/> + </sequence> + </complexType> + + <element name="root" type="t:type"/> + +</schema> diff --git a/xsd/tests/cxx/tree/complex/ctor/driver.cxx b/xsd/tests/cxx/tree/complex/ctor/driver.cxx new file mode 100644 index 0000000..55044a3 --- /dev/null +++ b/xsd/tests/cxx/tree/complex/ctor/driver.cxx @@ -0,0 +1,112 @@ +// file : tests/cxx/tree/complex/ctor/driver.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +// Test generation of varous complex type constructors. +// + +#include <cassert> +#include <memory> + +#include "test.hxx" + +using namespace std; +using namespace test; + +int +main () +{ + // Test case A. + // + { + a_base b1; + a_base b2 ("abc"); // empty ultimate base + required + a_base b3 ("abc", "foo"); // ultimate base + required + + a_derived a1; + a_derived a2 ("foo", "bar"); // empty ultimate base + required + a_derived a3 (b3, "bar"); // base + required + a_derived a4 ("abc", "foo", "bar"); // ultimate base + required + } + + // Test case B. + // + { + b_simple s ("base"); + b_base b ("base", "foo"); + b_derived d ("base", "foo", "bar"); + b_type t ("base"); + } + + // Test case C. + // + { + c_simple s (c_enum::a); + c_base b (c_enum::a, "foo"); + c_derived d (c_enum::a, "foo", "bar"); + c_type t (c_enum::a); + } + + // Test case D. + // + { + d_simple s (1); + d_base b (1, "foo"); + d_derived d (1, "foo", "bar"); + d_type t (1); + } + + // Test case E. + // + { + // e_base + // + e_base b1 (1, "foo", e_complex_type ("bar")); + + auto_ptr<e_complex_type> c2 (new e_complex_type ("bar")); + e_base b2 (1, "foo", c2); + + auto_ptr<e_simple_type> s3 (new e_simple_type ("foo")); + auto_ptr<e_complex_type> c3 (new e_complex_type ("bar")); + e_base b3 (1, s3, c3); + + assert (b1 == b2); + assert (b1 == b3); + + // e_derived + // + e_derived d1 (1, "foo", e_complex_type ("bar"), + true, "baz", e_complex_type ("biz")); + + auto_ptr<e_complex_type> c2a (new e_complex_type ("bar")); + auto_ptr<e_complex_type> c2b (new e_complex_type ("biz")); + e_derived d2 (1, "foo", c2a, true, "baz", c2b); + + auto_ptr<e_simple_type> s3a (new e_simple_type ("foo")); + auto_ptr<xml_schema::string> s3b (new xml_schema::string ("baz")); + auto_ptr<e_complex_type> c3a (new e_complex_type ("bar")); + auto_ptr<e_complex_type> c3b (new e_complex_type ("biz")); + e_derived d3 (1, s3a, c3a, true, s3b, c3b); + + assert (d1 == d2); + assert (d1 == d3); + + } + + // Test case F. + // + { + f_type f1 (xml_schema::type (), 1, "foo", f_complex_type ("bar")); + + auto_ptr<f_complex_type> c2 (new f_complex_type ("bar")); + f_type f2 (1, "foo", c2); + + auto_ptr<f_simple_type> s3 (new f_simple_type ("foo")); + auto_ptr<f_complex_type> c3 (new f_complex_type ("bar")); + f_type f3 (1, s3, c3); + + assert (f1 == f2); + assert (f1 == f3); + } +} diff --git a/xsd/tests/cxx/tree/complex/ctor/makefile b/xsd/tests/cxx/tree/complex/ctor/makefile new file mode 100644 index 0000000..66558f5 --- /dev/null +++ b/xsd/tests/cxx/tree/complex/ctor/makefile @@ -0,0 +1,84 @@ +# file : tests/cxx/tree/complex/ctor/makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../../../build/bootstrap.make + +xsd := test.xsd +cxx := driver.cxx + +obj := $(addprefix $(out_base)/,$(cxx:.cxx=.o) $(xsd:.xsd=.o)) +dep := $(obj:.o=.o.d) + +driver := $(out_base)/driver +test := $(out_base)/.test +clean := $(out_base)/.clean + + +# Import. +# +$(call import,\ + $(scf_root)/import/libxerces-c/stub.make,\ + l: xerces_c.l,cpp-options: xerces_c.l.cpp-options) + + +# Build. +# +$(driver): $(obj) $(xerces_c.l) + +$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): $(xerces_c.l.cpp-options) + +genf := $(xsd:.xsd=.hxx) $(xsd:.xsd=.ixx) $(xsd:.xsd=.cxx) +gen := $(addprefix $(out_base)/,$(genf)) + +$(gen): xsd := $(out_root)/xsd/xsd +$(gen): xsd_options := --generate-default-ctor --generate-from-base-ctor \ +--generate-doxygen --generate-polymorphic --polymorphic-type-all \ +--generate-comparison +$(gen): $(out_root)/xsd/xsd + +$(call include-dep,$(dep)) + +# Convenience alias for default target. +# +$(out_base)/: $(driver) + + +# Test. +# +$(test): driver := $(driver) +$(test): $(driver) + $(call message,test $$1,$$1,$(driver)) + +# Clean. +# +$(clean): $(driver).o.clean \ + $(addsuffix .cxx.clean,$(obj)) \ + $(addsuffix .cxx.clean,$(dep)) \ + $(addprefix $(out_base)/,$(xsd:.xsd=.cxx.xsd.clean)) + +# Generated .gitignore. +# +ifeq ($(out_base),$(src_base)) +$(gen): | $(out_base)/.gitignore +$(driver): | $(out_base)/.gitignore + +$(out_base)/.gitignore: files := driver $(genf) +$(clean): $(out_base)/.gitignore.clean + +$(call include,$(bld_root)/git/gitignore.make) +endif + +# How to. +# +$(call include,$(bld_root)/cxx/o-e.make) +$(call include,$(bld_root)/cxx/cxx-o.make) +$(call include,$(bld_root)/cxx/cxx-d.make) +$(call include,$(scf_root)/xsd/tree/xsd-cxx.make) + + +# Dependencies. +# +$(call import,$(src_root)/xsd/makefile) diff --git a/xsd/tests/cxx/tree/complex/ctor/test.xsd b/xsd/tests/cxx/tree/complex/ctor/test.xsd new file mode 100644 index 0000000..b8dd95e --- /dev/null +++ b/xsd/tests/cxx/tree/complex/ctor/test.xsd @@ -0,0 +1,182 @@ +<?xml version="1.0"?> +<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:t="test" targetNamespace="test"> + + <!-- Test case A: several levels of inheritance with ultimate base. --> + + <complexType name="a_base"> + <simpleContent> + <extension base="string"> + <attribute name="foo" type="string" use="required"/> + </extension> + </simpleContent> + </complexType> + + <complexType name="a_derived"> + <simpleContent> + <extension base="t:a_base"> + <attribute name="bar" type="string" use="required"/> + </extension> + </simpleContent> + </complexType> + + <!-- Test case B: string-based c-tors. --> + + <simpleType name="b_simple"> + <restriction base="string"> + </restriction> + </simpleType> + + <complexType name="b_base"> + <simpleContent> + <extension base="t:b_simple"> + <attribute name="foo" type="string" use="required"/> + </extension> + </simpleContent> + </complexType> + + <complexType name="b_derived"> + <simpleContent> + <extension base="t:b_base"> + <attribute name="bar" type="string" use="required"/> + </extension> + </simpleContent> + </complexType> + + <complexType name="b_type"> + <sequence> + <element name="a" type="t:b_simple"/> + </sequence> + </complexType> + + <!-- Test case C: enum-based c-tors. --> + + <simpleType name="c_enum_base"> + <restriction base="string"> + <enumeration value="a"/> + <enumeration value="b"/> + <enumeration value="c"/> + </restriction> + </simpleType> + + <simpleType name="c_enum"> + <restriction base="t:c_enum_base"> + <enumeration value="a"/> + <enumeration value="c"/> + </restriction> + </simpleType> + + <simpleType name="c_simple"> + <restriction base="t:c_enum"> + </restriction> + </simpleType> + + <complexType name="c_base"> + <simpleContent> + <extension base="t:c_simple"> + <attribute name="foo" type="string" use="required"/> + </extension> + </simpleContent> + </complexType> + + <complexType name="c_derived"> + <simpleContent> + <extension base="t:c_base"> + <attribute name="bar" type="string" use="required"/> + </extension> + </simpleContent> + </complexType> + + <complexType name="c_type"> + <sequence> + <element name="a" type="t:c_simple"/> + </sequence> + </complexType> + + <!-- Test case D: fundamental type c-tors. --> + + <simpleType name="d_simple"> + <restriction base="int"> + </restriction> + </simpleType> + + <complexType name="d_base"> + <simpleContent> + <extension base="t:d_simple"> + <attribute name="foo" type="string" use="required"/> + </extension> + </simpleContent> + </complexType> + + <complexType name="d_derived"> + <simpleContent> + <extension base="t:d_base"> + <attribute name="bar" type="string" use="required"/> + </extension> + </simpleContent> + </complexType> + + <complexType name="d_type"> + <sequence> + <element name="a" type="t:d_simple"/> + </sequence> + </complexType> + + <!-- Test case E: auto_ptr ctors. --> + + <simpleType name="e_simple_type"> + <restriction base="string"> + </restriction> + </simpleType> + + <complexType name="e_complex_type"> + <sequence> + <element name="a" type="string"/> + </sequence> + </complexType> + + <complexType name="e_base"> + <sequence> + <element name="fund" type="int"/> + <element name="simple" type="t:e_simple_type"/> + <element name="complex" type="t:e_complex_type"/> + </sequence> + </complexType> + + <complexType name="e_derived"> + <complexContent> + <extension base="t:e_base"> + <sequence> + <element name="fund1" type="boolean"/> + <element name="simple1" type="string"/> + <element name="complex1" type="t:e_complex_type"/> + </sequence> + </extension> + </complexContent> + </complexType> + + <!-- Test case F: auto_ptr args in c-tor (all-non-optional-members) --> + + <simpleType name="f_simple_type"> + <restriction base="string"> + </restriction> + </simpleType> + + <complexType name="f_complex_type"> + <sequence> + <element name="a" type="string"/> + </sequence> + </complexType> + + <complexType name="f_type"> + <complexContent> + <restriction base="anyType"> + <sequence> + <element name="fund" type="int"/> + <element name="simple" type="t:f_simple_type"/> + <element name="complex" type="t:f_complex_type"/> + </sequence> + </restriction> + </complexContent> + </complexType> + +</schema> diff --git a/xsd/tests/cxx/tree/complex/makefile b/xsd/tests/cxx/tree/complex/makefile new file mode 100644 index 0000000..a0b3294 --- /dev/null +++ b/xsd/tests/cxx/tree/complex/makefile @@ -0,0 +1,18 @@ +# file : tests/cxx/tree/complex/makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../../build/bootstrap.make + +tests := ctor + +default := $(out_base)/ +test := $(out_base)/.test +clean := $(out_base)/.clean + +$(default): $(addprefix $(out_base)/,$(addsuffix /,$(tests))) +$(test): $(addprefix $(out_base)/,$(addsuffix /.test,$(tests))) +$(clean): $(addprefix $(out_base)/,$(addsuffix /.clean,$(tests))) + +$(foreach t,$(tests),$(call import,$(src_base)/$t/makefile)) diff --git a/xsd/tests/cxx/tree/containment/driver.cxx b/xsd/tests/cxx/tree/containment/driver.cxx new file mode 100644 index 0000000..cb6c76e --- /dev/null +++ b/xsd/tests/cxx/tree/containment/driver.cxx @@ -0,0 +1,113 @@ +// file : tests/cxx/tree/containment/driver.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +// Test tree node containment. +// + +#include <memory> // std::auto_ptr +#include <cassert> + +#include "test.hxx" + +using namespace std; +using namespace test; + +int +main () +{ + // Change of a container in a sub-tree without ID. + // + { + auto_ptr<inner> i (new inner ()); + i->ref ("foo"); + + outer o; + o.i (i); + o.ref ("foo"); + + assert (o.i ()->ref ()->get () == 0); + assert (o.ref ()->get () == 0); + } + + // Change of container in a sub-tree with ID inside. + // + { + auto_ptr<inner> i (new inner ()); + inner* p (i.get ()); + i->id ("foo"); + i->ref ("foo"); + assert (i->ref ()->get () == p); + + outer o; + o.i (i); + o.ref ("foo"); + + assert (o.i ()->ref ()->get () == p); + assert (o.ref ()->get () == p); + } + + // Change of a container in ID. + // + { + auto_ptr<xml_schema::id> id (new xml_schema::id ("foo")); + + inner i; + i.id (id); + i.ref ("foo"); + assert (i.ref ()->get () == &i); + } + + // Change of a container in a type derived from ID with ID inside. + // + { + auto_ptr<id_ex> id (new id_ex ("foo")); + id_ex* p (id.get ()); + id->id ("bar"); + + inner i; + i.id_ex (id); + + i.ref ("foo"); + assert (i.ref ()->get () == &i); + + i.ref ("bar"); + assert (i.ref ()->get () == p); + } + + // IDREF lists + // + { + id i1 ("a"), i2 ("b"); + + auto_ptr<ids> ic (new ids); + ic->id ().push_back (i1); + ic->id ().push_back (i2); + + auto_ptr<xml_schema::idrefs> r1 (new xml_schema::idrefs); + r1->push_back (xml_schema::idref ("a")); + r1->push_back (xml_schema::idref ("b")); + + auto_ptr<idref_list> r2 (new idref_list); + r2->push_back (xml_schema::idref ("a")); + r2->push_back (xml_schema::idref ("b")); + + auto_ptr<idrefs1> rc1 (new idrefs1); + auto_ptr<idrefs2> rc2 (new idrefs2); + + rc1->idrefs (r1); + rc2->idrefs (r2); + + model m; + m.ids (ic); + m.idrefs1 (rc1); + m.idrefs2 (rc2); + + assert (m.idrefs1 ().idrefs ()[0].get () != 0); + assert (m.idrefs1 ().idrefs ()[1].get () != 0); + + assert (m.idrefs2 ().idrefs ()[0].get () != 0); + assert (m.idrefs2 ().idrefs ()[1].get () != 0); + } +} diff --git a/xsd/tests/cxx/tree/containment/makefile b/xsd/tests/cxx/tree/containment/makefile new file mode 100644 index 0000000..fcdd792 --- /dev/null +++ b/xsd/tests/cxx/tree/containment/makefile @@ -0,0 +1,82 @@ +# file : tests/cxx/tree/containment/makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../../build/bootstrap.make + +xsd := test.xsd +cxx := driver.cxx + +obj := $(addprefix $(out_base)/,$(cxx:.cxx=.o) $(xsd:.xsd=.o)) +dep := $(obj:.o=.o.d) + +driver := $(out_base)/driver +test := $(out_base)/.test +clean := $(out_base)/.clean + + +# Import. +# +$(call import,\ + $(scf_root)/import/libxerces-c/stub.make,\ + l: xerces_c.l,cpp-options: xerces_c.l.cpp-options) + + +# Build. +# +$(driver): $(obj) $(xerces_c.l) + +$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): $(xerces_c.l.cpp-options) + +genf := $(xsd:.xsd=.hxx) $(xsd:.xsd=.ixx) $(xsd:.xsd=.cxx) +gen := $(addprefix $(out_base)/,$(genf)) + +$(gen): xsd := $(out_root)/xsd/xsd +$(gen): xsd_options := --generate-default-ctor +$(gen): $(out_root)/xsd/xsd + +$(call include-dep,$(dep)) + +# Convenience alias for default target. +# +$(out_base)/: $(driver) + + +# Test. +# +$(test): driver := $(driver) +$(test): $(driver) + $(call message,test $$1,$$1,$(driver)) + +# Clean. +# +$(clean): $(driver).o.clean \ + $(addsuffix .cxx.clean,$(obj)) \ + $(addsuffix .cxx.clean,$(dep)) \ + $(addprefix $(out_base)/,$(xsd:.xsd=.cxx.xsd.clean)) + +# Generated .gitignore. +# +ifeq ($(out_base),$(src_base)) +$(gen): | $(out_base)/.gitignore +$(driver): | $(out_base)/.gitignore + +$(out_base)/.gitignore: files := driver $(genf) +$(clean): $(out_base)/.gitignore.clean + +$(call include,$(bld_root)/git/gitignore.make) +endif + +# How to. +# +$(call include,$(bld_root)/cxx/o-e.make) +$(call include,$(bld_root)/cxx/cxx-o.make) +$(call include,$(bld_root)/cxx/cxx-d.make) +$(call include,$(scf_root)/xsd/tree/xsd-cxx.make) + + +# Dependencies. +# +$(call import,$(src_root)/xsd/makefile) diff --git a/xsd/tests/cxx/tree/containment/test.xsd b/xsd/tests/cxx/tree/containment/test.xsd new file mode 100644 index 0000000..72c9379 --- /dev/null +++ b/xsd/tests/cxx/tree/containment/test.xsd @@ -0,0 +1,59 @@ +<?xml version="1.0"?> +<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:t="test" targetNamespace="test"> + + <complexType name="id-ex"> + <simpleContent> + <extension base="ID"> + <attribute name="id" type="ID"/> + </extension> + </simpleContent> + </complexType> + + <complexType name="inner"> + <sequence> + <element name="id" type="ID" minOccurs="0"/> + <element name="id-ex" type="t:id-ex" minOccurs="0"/> + <element name="ref" type="IDREF" minOccurs="0"/> + </sequence> + </complexType> + + <complexType name="outer"> + <sequence> + <element name="i" type="t:inner" minOccurs="0"/> + <element name="ref" type="IDREF" minOccurs="0"/> + </sequence> + </complexType> + + <!-- IDREF lists --> + + <complexType name="id"> + <attribute name="id" type="ID" use="required"/> + </complexType> + + <complexType name="ids"> + <sequence> + <element name="id" type="t:id" minOccurs="0" maxOccurs="unbounded"/> + </sequence> + </complexType> + + <complexType name="idrefs1"> + <attribute name="idrefs" type="IDREFS" use="required"/> + </complexType> + + <simpleType name="idref-list"> + <list itemType="IDREF"/> + </simpleType> + + <complexType name="idrefs2"> + <attribute name="idrefs" type="t:idref-list" use="required"/> + </complexType> + + <complexType name="model"> + <sequence> + <element name="ids" type="t:ids"/> + <element name="idrefs1" type="t:idrefs1"/> + <element name="idrefs2" type="t:idrefs2"/> + </sequence> + </complexType> + +</schema> diff --git a/xsd/tests/cxx/tree/default/general/driver.cxx b/xsd/tests/cxx/tree/default/general/driver.cxx new file mode 100644 index 0000000..a48650f --- /dev/null +++ b/xsd/tests/cxx/tree/default/general/driver.cxx @@ -0,0 +1,39 @@ +// file : tests/cxx/tree/default/general/driver.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +// Test default attribute/element values. +// + +#include <memory> // std::auto_ptr +#include <iostream> + +#include "test.hxx" + +using namespace std; +using namespace test; + +int +main (int argc, char* argv[]) +{ + if (argc != 2) + { + cerr << "usage: " << argv[0] << " test.xml" << endl; + return 1; + } + + try + { + auto_ptr<type> r (root (argv[1], xml_schema::flags::dont_validate)); + + xml_schema::namespace_infomap map; + map["t"].name = "test"; + root (cout, *r, map); + } + catch (xml_schema::exception const& e) + { + cerr << e << endl; + return 1; + } +} diff --git a/xsd/tests/cxx/tree/default/general/makefile b/xsd/tests/cxx/tree/default/general/makefile new file mode 100644 index 0000000..b1b7fca --- /dev/null +++ b/xsd/tests/cxx/tree/default/general/makefile @@ -0,0 +1,83 @@ +# file : tests/cxx/tree/default/general/makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../../../build/bootstrap.make + +xsd := test.xsd +cxx := driver.cxx + +obj := $(addprefix $(out_base)/,$(cxx:.cxx=.o) $(xsd:.xsd=.o)) +dep := $(obj:.o=.o.d) + +driver := $(out_base)/driver +test := $(out_base)/.test +clean := $(out_base)/.clean + + +# Import. +# +$(call import,\ + $(scf_root)/import/libxerces-c/stub.make,\ + l: xerces_c.l,cpp-options: xerces_c.l.cpp-options) + + +# Build. +# +$(driver): $(obj) $(xerces_c.l) + +$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): $(xerces_c.l.cpp-options) + +genf := $(xsd:.xsd=.hxx) $(xsd:.xsd=.ixx) $(xsd:.xsd=.cxx) +gen := $(addprefix $(out_base)/,$(genf)) + +$(gen): xsd := $(out_root)/xsd/xsd +$(gen): xsd_options := --generate-ostream --generate-serialization \ +--generate-default-ctor --generate-from-base-ctor +$(gen): $(out_root)/xsd/xsd + +$(call include-dep,$(dep)) + +# Convenience alias for default target. +# +$(out_base)/: $(driver) + + +# Test. +# +$(test): driver := $(driver) +$(test): $(driver) $(src_base)/test.xml $(src_base)/output + $(call message,test $$1,$$1 $(src_base)/test.xml | diff -u $(src_base)/output -,$(driver)) + +# Clean. +# +$(clean): $(driver).o.clean \ + $(addsuffix .cxx.clean,$(obj)) \ + $(addsuffix .cxx.clean,$(dep)) \ + $(addprefix $(out_base)/,$(xsd:.xsd=.cxx.xsd.clean)) + +# Generated .gitignore. +# +ifeq ($(out_base),$(src_base)) +$(gen): | $(out_base)/.gitignore +$(driver): | $(out_base)/.gitignore + +$(out_base)/.gitignore: files := driver $(genf) +$(clean): $(out_base)/.gitignore.clean + +$(call include,$(bld_root)/git/gitignore.make) +endif + +# How to. +# +$(call include,$(bld_root)/cxx/o-e.make) +$(call include,$(bld_root)/cxx/cxx-o.make) +$(call include,$(bld_root)/cxx/cxx-d.make) +$(call include,$(scf_root)/xsd/tree/xsd-cxx.make) + + +# Dependencies. +# +$(call import,$(src_root)/xsd/makefile) diff --git a/xsd/tests/cxx/tree/default/general/output b/xsd/tests/cxx/tree/default/general/output new file mode 100644 index 0000000..72a8fa4 --- /dev/null +++ b/xsd/tests/cxx/tree/default/general/output @@ -0,0 +1,28 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no" ?> +<t:root xmlns:t="test" base64_bin1="" base64_bin2="YmFzZTY0IGJpbmFyeQ==
" bool1="true" bool2="true" bool3="false" bool4="false" byte="-99" decimal1="1.12345" decimal2="-0.456" double1="1.12345" double2="1123.45" double3="-0.00012345" double4="NaN" double5="-INF" fix1="123" fix2="123" fix3="abc" fix4="abc" fix5="aaa bbb ccc" fix6="aaa bbb ccc" float1="1.123" float2="1123" float3="-0.000123" float4="NaN" float5="-INF" hex_bin1="" hex_bin2="6865782052696E617279" id="this" idref="this" idrefs="this" int="-99999" integer="-99999" language="en-us" long="-99999" ncname="abcd" ninteger="-99999" nmtoken="ab:cd" nmtokens1="a:b efg aaa" nmtokens2="abc" nninteger="99999" npinteger="-99999" nstring=" a b " pinteger="99999" qname1="foo" qname2="t:bar" short="-999" string1="" string2=" a b " token="a b" ubyte="99" uint="99999" ulong="99999" uri="http://example.com" ushort="999"> + + <union a="abc"/> + + <list a="123 345 678" b="ab cd ef" c="abc" d="abc def"/> + + <simple a="123" b="abc" c="123" d="abc" e="abc" f="abc 123"/> + + <date a="2009-03-31" b="2009-03-31Z" c="2009-03-31Z" d="2009-03-31Z" e="2009-03-31+12:30" f="2009-03-31-12:30" g="2002009-03-31-12:30"/> + + <time a="12:03:45" b="12:03:45.123Z" c="12:03:05.123Z" d="12:03:45.123Z" e="12:03:45.123+12:30" f="12:03:45-12:30"/> + + <date-time a="2009-03-31T12:03:45" b="2009-03-31T12:03:45.123Z" c="2002009-03-31T12:03:05.123-12:30"/> + + <duration a="P100Y" b="P100M" c="P100D" d="PT12H" e="PT12M" f="PT12.123S" g="-P100Y10M20DT12H12M1.123S"/> + + <day a="---02" b="---22Z" c="---22-12:30"/> + + <month a="--02" b="--12Z" c="--12+12:30"/> + + <year a="2009" b="-2002009Z" c="2009-12:30"/> + + <month-day a="--02-02" b="--12-22Z" c="--12-22+12:30"/> + + <year-month a="2009-02" b="-2002009-12Z" c="2009-12-12:30"/> + +</t:root> diff --git a/xsd/tests/cxx/tree/default/general/test.xml b/xsd/tests/cxx/tree/default/general/test.xml new file mode 100644 index 0000000..11bd0a7 --- /dev/null +++ b/xsd/tests/cxx/tree/default/general/test.xml @@ -0,0 +1,16 @@ +<t:root xmlns:t="test" id="this" fix2="123" fix4="abc" fix6="aaa bbb ccc"> + + <union/> + <list/> + <simple/> + <date/> + <time/> + <date-time/> + <duration/> + <day/> + <month/> + <year/> + <month-day/> + <year-month/> + +</t:root> diff --git a/xsd/tests/cxx/tree/default/general/test.xsd b/xsd/tests/cxx/tree/default/general/test.xsd new file mode 100644 index 0000000..9d9cd38 --- /dev/null +++ b/xsd/tests/cxx/tree/default/general/test.xsd @@ -0,0 +1,241 @@ +<?xml version="1.0"?> +<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:t="test" targetNamespace="test"> + + <!-- union --> + + <xs:simpleType name="union"> + <xs:union memberTypes="xs:int xs:string"/> + </xs:simpleType> + + <xs:complexType name="union-test"> + <xs:attribute default="abc" name="a" type="t:union"/> + </xs:complexType> + + <!-- list --> + + <xs:simpleType name="fix-list"> + <xs:list itemType="xs:int"/> + </xs:simpleType> + + <xs:simpleType name="var-list"> + <xs:list itemType="xs:string"/> + </xs:simpleType> + + <xs:simpleType name="list-item"> + <xs:restriction base="xs:string"/> + </xs:simpleType> + + <xs:simpleType name="usr-list"> + <xs:list itemType="t:list-item"/> + </xs:simpleType> + + <xs:simpleType name="union-list"> + <xs:list itemType="t:union"/> + </xs:simpleType> + + <xs:complexType name="list-test"> + <xs:attribute default="123 345 678" name="a" type="t:fix-list"/> + <xs:attribute default=" ab cd ef " name="b" type="t:var-list"/> + <xs:attribute default="abc" name="c" type="t:usr-list"/> + <xs:attribute default="abc def" name="d" type="t:union-list"/> + </xs:complexType> + + <!-- simple type --> + + <xs:simpleType name="int-base"> + <xs:restriction base="xs:int"/> + </xs:simpleType> + + <xs:simpleType name="str-base"> + <xs:restriction base="xs:string"/> + </xs:simpleType> + + <xs:simpleType name="int"> + <xs:restriction base="t:int-base"/> + </xs:simpleType> + + <xs:simpleType name="str"> + <xs:restriction base="t:str-base"/> + </xs:simpleType> + + <xs:simpleType name="union-derived"> + <xs:restriction base="t:union"/> + </xs:simpleType> + + <xs:simpleType name="list-derived"> + <xs:restriction base="t:usr-list"/> + </xs:simpleType> + + <xs:complexType name="simple-test"> + <xs:attribute default="123" name="a" type="t:int-base"/> + <xs:attribute default="abc" name="b" type="t:str-base"/> + <xs:attribute default="123" name="c" type="t:int"/> + <xs:attribute default="abc" name="d" type="t:str"/> + <xs:attribute default="abc" name="e" type="t:union-derived"/> + <xs:attribute default="abc 123" name="f" type="t:list-derived"/> + </xs:complexType> + + <!-- date/time types --> + + <xs:simpleType name="date-derived"> + <xs:restriction base="xs:date"/> + </xs:simpleType> + + <xs:complexType name="date-test"> + <xs:attribute default="2009-03-31" name="a" type="xs:date"/> + <xs:attribute default="2009-03-31Z" name="b" type="xs:date"/> + <xs:attribute default="2009-03-31+00:00" name="c" type="xs:date"/> + <xs:attribute default="2009-03-31-00:00" name="d" type="xs:date"/> + <xs:attribute default="2009-03-31+12:30" name="e" type="xs:date"/> + <xs:attribute default="2009-03-31-12:30" name="f" type="xs:date"/> + <xs:attribute default="2002009-03-31-12:30" name="g" type="t:date-derived"/> + </xs:complexType> + + <xs:complexType name="time-test"> + <xs:attribute default="12:03:45" name="a" type="xs:time"/> + <xs:attribute default="12:03:45.123Z" name="b" type="xs:time"/> + <xs:attribute default="12:03:05.123+00:00" name="c" type="xs:time"/> + <xs:attribute default="12:03:45.123-00:00" name="d" type="xs:time"/> + <xs:attribute default="12:03:45.123+12:30" name="e" type="xs:time"/> + <xs:attribute default="12:03:45-12:30" name="f" type="xs:time"/> + </xs:complexType> + + <xs:complexType name="date-time-test"> + <xs:attribute default="2009-03-31T12:03:45" name="a" type="xs:dateTime"/> + <xs:attribute default="2009-03-31T12:03:45.123Z" name="b" type="xs:dateTime"/> + <xs:attribute default="2002009-03-31T12:03:05.123-12:30" name="c" type="xs:dateTime"/> + </xs:complexType> + + <xs:complexType name="duration-test"> + <xs:attribute default="P100Y" name="a" type="xs:duration"/> + <xs:attribute default="P100M" name="b" type="xs:duration"/> + <xs:attribute default="P100D" name="c" type="xs:duration"/> + <xs:attribute default="PT12H" name="d" type="xs:duration"/> + <xs:attribute default="PT12M" name="e" type="xs:duration"/> + <xs:attribute default="PT12.123S" name="f" type="xs:duration"/> + <xs:attribute default="-P100Y10M20DT12H12M1.123S" name="g" type="xs:duration"/> + </xs:complexType> + + <xs:complexType name="day-test"> + <xs:attribute default="---02" name="a" type="xs:gDay"/> + <xs:attribute default="---22Z" name="b" type="xs:gDay"/> + <xs:attribute default="---22-12:30" name="c" type="xs:gDay"/> + </xs:complexType> + + <xs:complexType name="month-test"> + <xs:attribute default="--02" name="a" type="xs:gMonth"/> + <xs:attribute default="--12Z" name="b" type="xs:gMonth"/> + <xs:attribute default="--12+12:30" name="c" type="xs:gMonth"/> + </xs:complexType> + + <xs:complexType name="year-test"> + <xs:attribute default="2009" name="a" type="xs:gYear"/> + <xs:attribute default="-2002009Z" name="b" type="xs:gYear"/> + <xs:attribute default="2009-12:30" name="c" type="xs:gYear"/> + </xs:complexType> + + <xs:complexType name="month-day-test"> + <xs:attribute default="--02-02" name="a" type="xs:gMonthDay"/> + <xs:attribute default="--12-22Z" name="b" type="xs:gMonthDay"/> + <xs:attribute default="--12-22+12:30" name="c" type="xs:gMonthDay"/> + </xs:complexType> + + <xs:complexType name="year-month-test"> + <xs:attribute default="2009-02" name="a" type="xs:gYearMonth"/> + <xs:attribute default="-2002009-12Z" name="b" type="xs:gYearMonth"/> + <xs:attribute default="2009-12-12:30" name="c" type="xs:gYearMonth"/> + </xs:complexType> + + + <xs:complexType name="type"> + <xs:sequence> + <xs:element name="union" type="t:union-test"/> + <xs:element name="list" type="t:list-test"/> + <xs:element name="simple" type="t:simple-test"/> + <xs:element name="date" type="t:date-test"/> + <xs:element name="time" type="t:time-test"/> + <xs:element name="date-time" type="t:date-time-test"/> + <xs:element name="duration" type="t:duration-test"/> + <xs:element name="day" type="t:day-test"/> + <xs:element name="month" type="t:month-test"/> + <xs:element name="year" type="t:year-test"/> + <xs:element name="month-day" type="t:month-day-test"/> + <xs:element name="year-month" type="t:year-month-test"/> + </xs:sequence> + +<!-- + <xs:attribute name="any" type="xs:anySimpleType" default=""/> +--> + + <xs:attribute name="bool1" type="xs:boolean" default="true"/> + <xs:attribute name="bool2" type="xs:boolean" default="1"/> + <xs:attribute name="bool3" type="xs:boolean" default="false"/> + <xs:attribute name="bool4" type="xs:boolean" default="0"/> + + <xs:attribute name="byte" type="xs:byte" default="-99"/> + <xs:attribute name="ubyte" type="xs:unsignedByte" default="99"/> + <xs:attribute name="short" type="xs:short" default="-999"/> + <xs:attribute name="ushort" type="xs:unsignedShort" default="999"/> + <xs:attribute name="int" type="xs:int" default="-99999"/> + <xs:attribute name="uint" type="xs:unsignedInt" default="99999"/> + <xs:attribute name="long" type="xs:long" default="-99999"/> + <xs:attribute name="ulong" type="xs:unsignedLong" default="99999"/> + + <xs:attribute name="integer" type="xs:integer" default="-99999"/> + <xs:attribute name="npinteger" type="xs:nonPositiveInteger" default="-99999"/> + <xs:attribute name="nninteger" type="xs:nonNegativeInteger" default="99999"/> + <xs:attribute name="pinteger" type="xs:positiveInteger" default="99999"/> + <xs:attribute name="ninteger" type="xs:negativeInteger" default="-99999"/> + + <xs:attribute name="float1" type="xs:float" default="1.123"/> + <xs:attribute name="float2" type="xs:float" default="1.123e3"/> + <xs:attribute name="float3" type="xs:float" default="-.123E-3"/> + <xs:attribute name="float4" type="xs:float" default="NaN"/> + <xs:attribute name="float5" type="xs:float" default="-INF"/> + + <xs:attribute name="double1" type="xs:double" default="1.12345"/> + <xs:attribute name="double2" type="xs:double" default="1.12345e3"/> + <xs:attribute name="double3" type="xs:double" default="-.12345E-3"/> + <xs:attribute name="double4" type="xs:double" default="NaN"/> + <xs:attribute name="double5" type="xs:double" default="-INF"/> + + <xs:attribute name="decimal1" type="xs:decimal" default="1.12345"/> + <xs:attribute name="decimal2" type="xs:decimal" default="-.456"/> + + <xs:attribute name="string1" type="xs:string" default=""/> + <xs:attribute name="string2" type="xs:string" default=" a b "/> + <xs:attribute name="nstring" type="xs:normalizedString" default=" a b "/> + <xs:attribute name="token" type="xs:token" default=" a b "/> + <xs:attribute name="nmtoken" type="xs:NMTOKEN" default="ab:cd"/> + <xs:attribute name="nmtokens1" type="xs:NMTOKENS" default=" a:b efg aaa "/> + <xs:attribute name="nmtokens2" type="xs:NMTOKENS" default="abc"/> + <xs:attribute name="ncname" type="xs:NCName" default=" abcd "/> + <xs:attribute name="language" type="xs:language" default=" en-us "/> + <xs:attribute name="id" type="xs:ID"/> + <xs:attribute name="idref" type="xs:IDREF" default="this"/> + <xs:attribute name="idrefs" type="xs:IDREFS" default=" this "/> + <xs:attribute name="uri" type="xs:anyURI" default=" http://example.com "/> + + <xs:attribute name="qname1" type="xs:QName" default="foo"/> + <xs:attribute name="qname2" type="xs:QName" default="t:bar"/> + + <xs:attribute name="base64_bin1" type="xs:base64Binary" default=""/> + <xs:attribute name="base64_bin2" type="xs:base64Binary" default="YmFzZTY0IGJpbmFyeQ=="/> + + <xs:attribute name="hex_bin1" type="xs:hexBinary" default=""/> + <xs:attribute name="hex_bin2" type="xs:hexBinary" default="6865782052696E617279"/> + + <!-- fixed --> + + <xs:attribute name="fix1" type="xs:int" fixed="123"/> + <xs:attribute name="fix2" type="xs:int" fixed="123" use="required"/> + <xs:attribute name="fix3" type="xs:string" fixed="abc"/> + <xs:attribute name="fix4" type="xs:string" fixed="abc" use="required"/> + <xs:attribute name="fix5" type="xs:NMTOKENS" fixed="aaa bbb ccc"/> + <xs:attribute name="fix6" type="xs:NMTOKENS" fixed="aaa bbb ccc" use="required"/> + + </xs:complexType> + + <xs:element name="root" type="t:type"/> + +</xs:schema> diff --git a/xsd/tests/cxx/tree/default/makefile b/xsd/tests/cxx/tree/default/makefile new file mode 100644 index 0000000..218e69c --- /dev/null +++ b/xsd/tests/cxx/tree/default/makefile @@ -0,0 +1,18 @@ +# file : tests/cxx/tree/default/makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../../build/bootstrap.make + +tests := general omit + +default := $(out_base)/ +test := $(out_base)/.test +clean := $(out_base)/.clean + +$(default): $(addprefix $(out_base)/,$(addsuffix /,$(tests))) +$(test): $(addprefix $(out_base)/,$(addsuffix /.test,$(tests))) +$(clean): $(addprefix $(out_base)/,$(addsuffix /.clean,$(tests))) + +$(foreach t,$(tests),$(call import,$(src_base)/$t/makefile)) diff --git a/xsd/tests/cxx/tree/default/omit/driver.cxx b/xsd/tests/cxx/tree/default/omit/driver.cxx new file mode 100644 index 0000000..cbf69b5 --- /dev/null +++ b/xsd/tests/cxx/tree/default/omit/driver.cxx @@ -0,0 +1,48 @@ +// file : tests/cxx/tree/default/omit/driver.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +// Test default attribute omission from the output. +// + +#include <memory> // std::auto_ptr +#include <iostream> + +#include "test.hxx" + +using namespace std; +using namespace test; + +int +main (int argc, char* argv[]) +{ + if (argc != 2) + { + cerr << "usage: " << argv[0] << " test.xml" << endl; + return 1; + } + + try + { + auto_ptr<type> r (root (argv[1], xml_schema::flags::dont_validate)); + + cout << *r << endl + << "default x: " << derived::x_default_value () << endl + << "default y: " << derived::y_default_value () << endl + << "fixed p: " << derived::p_default_value () << endl + << "fixed q1: " << derived::q1_default_value () << endl + << "fixed q2: " << derived::q2_default_value () << endl; + + // Serialize. + // + xml_schema::namespace_infomap map; + map["t"].name = "test"; + root (cout, *r, map); + } + catch (xml_schema::exception const& e) + { + cerr << e << endl; + return 1; + } +} diff --git a/xsd/tests/cxx/tree/default/omit/makefile b/xsd/tests/cxx/tree/default/omit/makefile new file mode 100644 index 0000000..e0cce27 --- /dev/null +++ b/xsd/tests/cxx/tree/default/omit/makefile @@ -0,0 +1,83 @@ +# file : tests/cxx/tree/default/omit/makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../../../build/bootstrap.make + +xsd := test.xsd +cxx := driver.cxx + +obj := $(addprefix $(out_base)/,$(cxx:.cxx=.o) $(xsd:.xsd=.o)) +dep := $(obj:.o=.o.d) + +driver := $(out_base)/driver +test := $(out_base)/.test +clean := $(out_base)/.clean + + +# Import. +# +$(call import,\ + $(scf_root)/import/libxerces-c/stub.make,\ + l: xerces_c.l,cpp-options: xerces_c.l.cpp-options) + + +# Build. +# +$(driver): $(obj) $(xerces_c.l) + +$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): $(xerces_c.l.cpp-options) + +genf := $(xsd:.xsd=.hxx) $(xsd:.xsd=.ixx) $(xsd:.xsd=.cxx) +gen := $(addprefix $(out_base)/,$(genf)) + +$(gen): xsd := $(out_root)/xsd/xsd +$(gen): xsd_options := --generate-ostream --generate-serialization \ +--generate-default-ctor --generate-from-base-ctor --omit-default-attributes +$(gen): $(out_root)/xsd/xsd + +$(call include-dep,$(dep)) + +# Convenience alias for default target. +# +$(out_base)/: $(driver) + + +# Test. +# +$(test): driver := $(driver) +$(test): $(driver) $(src_base)/test.xml $(src_base)/output + $(call message,test $$1,$$1 $(src_base)/test.xml | diff -u $(src_base)/output -,$(driver)) + +# Clean. +# +$(clean): $(driver).o.clean \ + $(addsuffix .cxx.clean,$(obj)) \ + $(addsuffix .cxx.clean,$(dep)) \ + $(addprefix $(out_base)/,$(xsd:.xsd=.cxx.xsd.clean)) + +# Generated .gitignore. +# +ifeq ($(out_base),$(src_base)) +$(gen): | $(out_base)/.gitignore +$(driver): | $(out_base)/.gitignore + +$(out_base)/.gitignore: files := driver $(genf) +$(clean): $(out_base)/.gitignore.clean + +$(call include,$(bld_root)/git/gitignore.make) +endif + +# How to. +# +$(call include,$(bld_root)/cxx/o-e.make) +$(call include,$(bld_root)/cxx/cxx-o.make) +$(call include,$(bld_root)/cxx/cxx-d.make) +$(call include,$(scf_root)/xsd/tree/xsd-cxx.make) + + +# Dependencies. +# +$(call import,$(src_root)/xsd/makefile) diff --git a/xsd/tests/cxx/tree/default/omit/output b/xsd/tests/cxx/tree/default/omit/output new file mode 100644 index 0000000..eef99a3 --- /dev/null +++ b/xsd/tests/cxx/tree/default/omit/output @@ -0,0 +1,21 @@ + +derived: +a: a +x: foo +q1: 1 +y: -20 +p: bar +q2: 2 +default x: foo +default y: -20 +fixed p: bar +fixed q1: 1 +fixed q2: 2 +<?xml version="1.0" encoding="UTF-8" standalone="no" ?> +<t:root xmlns:t="test"> + + <derived q1="1" q2="2"> + <a>a</a> + </derived> + +</t:root> diff --git a/xsd/tests/cxx/tree/default/omit/test.xml b/xsd/tests/cxx/tree/default/omit/test.xml new file mode 100644 index 0000000..dec39b4 --- /dev/null +++ b/xsd/tests/cxx/tree/default/omit/test.xml @@ -0,0 +1,9 @@ +<t:root xmlns:t="test" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="test test.xsd"> + + <derived q1="1" q2="2"> + <a>a</a> + </derived> + +</t:root> diff --git a/xsd/tests/cxx/tree/default/omit/test.xsd b/xsd/tests/cxx/tree/default/omit/test.xsd new file mode 100644 index 0000000..bfc68d4 --- /dev/null +++ b/xsd/tests/cxx/tree/default/omit/test.xsd @@ -0,0 +1,30 @@ +<?xml version="1.0"?> +<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:t="test" targetNamespace="test"> + + <complexType name="base"> + <sequence> + <element name="a" type="string"/> + </sequence> + <attribute name="x" type="string" default="foo"/> + <attribute name="q1" type="int" fixed="1" use="required"/> + </complexType> + + <complexType name="derived"> + <complexContent> + <extension base="t:base"> + <attribute name="y" type="int" default="-20"/> + <attribute name="p" type="string" fixed="bar"/> + <attribute name="q2" type="int" fixed="2" use="required"/> + </extension> + </complexContent> + </complexType> + + <complexType name="type"> + <sequence> + <element name="derived" type="t:derived"/> + </sequence> + </complexType> + + <element name="root" type="t:type"/> + +</schema> diff --git a/xsd/tests/cxx/tree/detach/driver.cxx b/xsd/tests/cxx/tree/detach/driver.cxx new file mode 100644 index 0000000..afcb90d --- /dev/null +++ b/xsd/tests/cxx/tree/detach/driver.cxx @@ -0,0 +1,101 @@ +// file : tests/cxx/tree/detach/driver.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +// Test the detach functionality. +// + +#include <memory> // std::auto_ptr +#include <cassert> + +#include "test.hxx" + +using namespace std; +using namespace test; + +int +main () +{ + // Construct the model. + // + object o1 ("o1"); + o1.data ().push_back ("1-1"); + o1.data ().push_back ("1-2"); + o1.data ().push_back ("1-3"); + + object o2 ("o2"); + o1.data ().push_back ("2-1"); + o1.data ().push_back ("2-2"); + o1.data ().push_back ("2-3"); + + object o3 ("o3"); + o1.data ().push_back ("3-1"); + o1.data ().push_back ("3-2"); + o1.data ().push_back ("3-3"); + + object o4 ("o4"); + o1.data ().push_back ("4-1"); + o1.data ().push_back ("4-2"); + o1.data ().push_back ("4-3"); + + subtree s1; + s1.o ().push_back (o1); + s1.o ().push_back (o2); + s1.r ().push_back (ref ("o2")); + s1.r ().push_back (ref ("o3")); + + subtree s2; + s2.o ().push_back (o3); + s2.o ().push_back (o4); + s2.r ().push_back (ref ("o4")); + s2.r ().push_back (ref ("o1")); + + model m; + m.one (s1); + m.opt (s2); + + // Detach one. + // + auto_ptr<subtree> p (m.detach_one ()); + assert (p->_container () == 0); + assert (p->r ()[0].get () == &p->o ()[1]); + assert (m.opt ()->r ()[1].get () == 0); + + m.one (p); + assert (m.opt ()->r ()[1].get () == &m.one ().o ()[0]); + p = m.detach_one (); + + model m1; + m1.one (p); + m1.opt (s2); + assert (m1.opt ()->r ()[1].get () == &m1.one ().o ()[0]); + + p = m1.detach_one (); + m.seq ().push_back (p); + + // Detach opt. + // + p = m.opt ().detach (); + assert (!m.opt ()); + assert (p->_container () == 0); + assert (p->r ()[0].get () == &p->o ()[1]); + assert (m.seq ()[0].r ()[1].get () == 0); + + m.seq ().push_back (p); + + // Detach seq. + // + p = m.seq ().detach_back (); + assert (p->_container () == 0); + assert (p->r ()[0].get () == &p->o ()[1]); + assert (m.seq ()[0].r ()[1].get () == 0); + + m.seq ().push_back (p); + assert (m.seq ()[0].r ()[1].get () == &m.seq ()[1].o ()[0]); + + m.seq ().detach (m.seq ().begin (), p); + assert (p->_container () == 0); + assert (p->r ()[0].get () == &p->o ()[1]); + assert (m.seq ()[0].r ()[1].get () == 0); +} diff --git a/xsd/tests/cxx/tree/detach/makefile b/xsd/tests/cxx/tree/detach/makefile new file mode 100644 index 0000000..938fba2 --- /dev/null +++ b/xsd/tests/cxx/tree/detach/makefile @@ -0,0 +1,82 @@ +# file : tests/cxx/tree/detach/makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../../build/bootstrap.make + +xsd := test.xsd +cxx := driver.cxx + +obj := $(addprefix $(out_base)/,$(cxx:.cxx=.o) $(xsd:.xsd=.o)) +dep := $(obj:.o=.o.d) + +driver := $(out_base)/driver +test := $(out_base)/.test +clean := $(out_base)/.clean + + +# Import. +# +$(call import,\ + $(scf_root)/import/libxerces-c/stub.make,\ + l: xerces_c.l,cpp-options: xerces_c.l.cpp-options) + + +# Build. +# +$(driver): $(obj) $(xerces_c.l) + +$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): $(xerces_c.l.cpp-options) + +genf := $(xsd:.xsd=.hxx) $(xsd:.xsd=.ixx) $(xsd:.xsd=.cxx) +gen := $(addprefix $(out_base)/,$(genf)) + +$(gen): xsd := $(out_root)/xsd/xsd +$(gen): xsd_options := --generate-detach --generate-default-ctor +$(gen): $(out_root)/xsd/xsd + +$(call include-dep,$(dep)) + +# Convenience alias for default target. +# +$(out_base)/: $(driver) + + +# Test. +# +$(test): driver := $(driver) +$(test): $(driver) + $(call message,test $$1,$$1,$(driver)) + +# Clean. +# +$(clean): $(driver).o.clean \ + $(addsuffix .cxx.clean,$(obj)) \ + $(addsuffix .cxx.clean,$(dep)) \ + $(addprefix $(out_base)/,$(xsd:.xsd=.cxx.xsd.clean)) + +# Generated .gitignore. +# +ifeq ($(out_base),$(src_base)) +$(gen): | $(out_base)/.gitignore +$(driver): | $(out_base)/.gitignore + +$(out_base)/.gitignore: files := driver $(genf) +$(clean): $(out_base)/.gitignore.clean + +$(call include,$(bld_root)/git/gitignore.make) +endif + +# How to. +# +$(call include,$(bld_root)/cxx/o-e.make) +$(call include,$(bld_root)/cxx/cxx-o.make) +$(call include,$(bld_root)/cxx/cxx-d.make) +$(call include,$(scf_root)/xsd/tree/xsd-cxx.make) + + +# Dependencies. +# +$(call import,$(src_root)/xsd/makefile) diff --git a/xsd/tests/cxx/tree/detach/test.xsd b/xsd/tests/cxx/tree/detach/test.xsd new file mode 100644 index 0000000..b9f5166 --- /dev/null +++ b/xsd/tests/cxx/tree/detach/test.xsd @@ -0,0 +1,32 @@ +<?xml version="1.0"?> +<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:t="test" targetNamespace="test"> + + <complexType name="object"> + <sequence> + <element name="data" type="string" maxOccurs="unbounded"/> + </sequence> + <attribute name="id" type="ID" use="required"/> + </complexType> + + <complexType name="ref"> + <simpleContent> + <extension base="IDREF"/> + </simpleContent> + </complexType> + + <complexType name="subtree"> + <sequence> + <element name="o" type="t:object" minOccurs="0" maxOccurs="unbounded"/> + <element name="r" type="t:ref" minOccurs="0" maxOccurs="unbounded"/> + </sequence> + </complexType> + + <complexType name="model"> + <sequence> + <element name="one" type="t:subtree"/> + <element name="opt" type="t:subtree" minOccurs="0"/> + <element name="seq" type="t:subtree" minOccurs="0" maxOccurs="unbounded"/> + </sequence> + </complexType> + +</schema> diff --git a/xsd/tests/cxx/tree/encoding/char/iso-8859-1/driver.cxx b/xsd/tests/cxx/tree/encoding/char/iso-8859-1/driver.cxx new file mode 100644 index 0000000..56b2df8 --- /dev/null +++ b/xsd/tests/cxx/tree/encoding/char/iso-8859-1/driver.cxx @@ -0,0 +1,76 @@ +// file : tests/cxx/tree/encoding/char/iso-8859-1/driver.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +// Test ISO-8859-1 encoding. +// + +#include <memory> // std::auto_ptr +#include <fstream> +#include <iostream> + +#include "test.hxx" + +using namespace std; +using namespace test; + +int +main (int argc, char* argv[]) +{ + if (argc != 2) + { + cerr << "usage: " << argv[0] << " test.xml" << endl; + return 1; + } + + try + { + try + { + root (argv[1]); + return 1; + } + catch (xsd::cxx::xml::iso8859_1_unrepresentable const&) + { + } + + xsd::cxx::xml::char_transcoder::unrep_char ('?'); + auto_ptr<type> r (root (argv[1])); + + { + type::a_sequence const& s (r->a ()); + + if (s[0] != "abc" || + s[1] != "\xE6" || + s[2] != "\xA2\xA3\xA4\xA5" || + s[3] != "???") + { + cerr << "invalid encoding" << endl; + return 1; + } + } + + { + type::b_sequence const& s (r->b ()); + + if (s[0] != strenum::abc || + s[1] != strenum::a_c || + s[2] != strenum::cxx__bc) + { + cerr << "invalid encoding" << endl; + return 1; + } + } + + xml_schema::namespace_infomap map; + map["t"].name = "test"; + + root (std::cout, *r, map, "ISO-8859-1"); + } + catch (xml_schema::exception const& e) + { + cerr << "xml_schema::exception: " << e.what () << endl; + return 1; + } +} diff --git a/xsd/tests/cxx/tree/encoding/char/iso-8859-1/makefile b/xsd/tests/cxx/tree/encoding/char/iso-8859-1/makefile new file mode 100644 index 0000000..967357f --- /dev/null +++ b/xsd/tests/cxx/tree/encoding/char/iso-8859-1/makefile @@ -0,0 +1,83 @@ +# file : tests/cxx/tree/encoding/char/iso-8859-1/makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../../../../build/bootstrap.make + +xsd := test.xsd +cxx := driver.cxx + +obj := $(addprefix $(out_base)/,$(cxx:.cxx=.o) $(xsd:.xsd=.o)) +dep := $(obj:.o=.o.d) + +driver := $(out_base)/driver +test := $(out_base)/.test +clean := $(out_base)/.clean + + +# Import. +# +$(call import,\ + $(scf_root)/import/libxerces-c/stub.make,\ + l: xerces_c.l,cpp-options: xerces_c.l.cpp-options) + + +# Build. +# +$(driver): $(obj) $(xerces_c.l) + +$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): $(xerces_c.l.cpp-options) + +genf := $(xsd:.xsd=.hxx) $(xsd:.xsd=.ixx) $(xsd:.xsd=.cxx) +gen := $(addprefix $(out_base)/,$(genf)) + +$(gen): xsd := $(out_root)/xsd/xsd +$(gen): xsd_options := --char-encoding iso8859-1 --generate-serialization \ +--generate-doxygen +$(gen): $(out_root)/xsd/xsd + +$(call include-dep,$(dep)) + +# Convenience alias for default target. +# +$(out_base)/: $(driver) + + +# Test. +# +$(test): driver := $(driver) +$(test): $(driver) $(src_base)/test.xml $(src_base)/test.std + $(call message,test $$1,$$1 $(src_base)/test.xml | diff -u $(src_base)/test.std -,$(driver)) + +# Clean. +# +$(clean): $(driver).o.clean \ + $(addsuffix .cxx.clean,$(obj)) \ + $(addsuffix .cxx.clean,$(dep)) \ + $(addprefix $(out_base)/,$(xsd:.xsd=.cxx.xsd.clean)) + +# Generated .gitignore. +# +ifeq ($(out_base),$(src_base)) +$(gen): | $(out_base)/.gitignore +$(driver): | $(out_base)/.gitignore + +$(out_base)/.gitignore: files := driver $(genf) +$(clean): $(out_base)/.gitignore.clean + +$(call include,$(bld_root)/git/gitignore.make) +endif + +# How to. +# +$(call include,$(bld_root)/cxx/o-e.make) +$(call include,$(bld_root)/cxx/cxx-o.make) +$(call include,$(bld_root)/cxx/cxx-d.make) +$(call include,$(scf_root)/xsd/tree/xsd-cxx.make) + + +# Dependencies. +# +$(call import,$(src_root)/xsd/makefile) diff --git a/xsd/tests/cxx/tree/encoding/char/iso-8859-1/test.std b/xsd/tests/cxx/tree/encoding/char/iso-8859-1/test.std new file mode 100644 index 0000000..ca6297f --- /dev/null +++ b/xsd/tests/cxx/tree/encoding/char/iso-8859-1/test.std @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="ISO-8859-1" standalone="no" ?> +<t:root xmlns:t="test"> + + <a>abc</a> + + <a>æ</a> + + <a>¢£¤¥</a> + + <a>???</a> + + <b>abc</b> + + <b>aâc</b> + + <b>âòbc</b> + +</t:root> diff --git a/xsd/tests/cxx/tree/encoding/char/iso-8859-1/test.xml b/xsd/tests/cxx/tree/encoding/char/iso-8859-1/test.xml new file mode 100644 index 0000000..9c9e752 --- /dev/null +++ b/xsd/tests/cxx/tree/encoding/char/iso-8859-1/test.xml @@ -0,0 +1,14 @@ +<t:root xmlns:t="test" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="test test.xsd"> + + <a>abc</a> + <a>æ</a> + <a>¢£¤¥</a> + <a>Āꪪ򪪪</a> + + <b>abc</b> + <b>aâc</b> + <b>âòbc</b> + +</t:root> diff --git a/xsd/tests/cxx/tree/encoding/char/iso-8859-1/test.xsd b/xsd/tests/cxx/tree/encoding/char/iso-8859-1/test.xsd new file mode 100644 index 0000000..31b8901 --- /dev/null +++ b/xsd/tests/cxx/tree/encoding/char/iso-8859-1/test.xsd @@ -0,0 +1,31 @@ +<?xml version="1.0"?> +<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:t="test" targetNamespace="test"> + + <simpleType name="strenum"> + + <annotation> + <documentation> + Test enum. Valid values are: + abc + aâc + òbc + </documentation> + </annotation> + + <restriction base="string"> + <enumeration value="abc"/> + <enumeration value="aâc"/> + <enumeration value="âòbc"/> + </restriction> + </simpleType> + + <complexType name="type"> + <sequence> + <element name="a" type="string" maxOccurs="unbounded"/> + <element name="b" type="t:strenum" maxOccurs="unbounded"/> + </sequence> + </complexType> + + <element name="root" type="t:type"/> + +</schema> diff --git a/xsd/tests/cxx/tree/encoding/char/lcp/driver.cxx b/xsd/tests/cxx/tree/encoding/char/lcp/driver.cxx new file mode 100644 index 0000000..2fb13a3 --- /dev/null +++ b/xsd/tests/cxx/tree/encoding/char/lcp/driver.cxx @@ -0,0 +1,42 @@ +// file : tests/cxx/tree/encoding/char/lcp/driver.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +// Test local code page encoding (--char-encoding lcp). +// The test just makes sure it still compiles and works. +// + +#include <memory> // std::auto_ptr +#include <fstream> +#include <iostream> + +#include "test.hxx" + +using namespace std; +using namespace test; + +int +main (int argc, char* argv[]) +{ + if (argc != 2) + { + cerr << "usage: " << argv[0] << " test.xml" << endl; + return 1; + } + + try + { + auto_ptr<type> r (root (argv[1])); + + xml_schema::namespace_infomap map; + map["t"].name = "test"; + + root (std::cout, *r, map); + } + catch (xml_schema::exception const& e) + { + cerr << "xml_schema::exception: " << e.what () << endl; + return 1; + } +} diff --git a/xsd/tests/cxx/tree/encoding/char/lcp/makefile b/xsd/tests/cxx/tree/encoding/char/lcp/makefile new file mode 100644 index 0000000..518c514 --- /dev/null +++ b/xsd/tests/cxx/tree/encoding/char/lcp/makefile @@ -0,0 +1,82 @@ +# file : tests/cxx/tree/encoding/char/lcp/makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../../../../build/bootstrap.make + +xsd := test.xsd +cxx := driver.cxx + +obj := $(addprefix $(out_base)/,$(cxx:.cxx=.o) $(xsd:.xsd=.o)) +dep := $(obj:.o=.o.d) + +driver := $(out_base)/driver +test := $(out_base)/.test +clean := $(out_base)/.clean + + +# Import. +# +$(call import,\ + $(scf_root)/import/libxerces-c/stub.make,\ + l: xerces_c.l,cpp-options: xerces_c.l.cpp-options) + + +# Build. +# +$(driver): $(obj) $(xerces_c.l) + +$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): $(xerces_c.l.cpp-options) + +genf := $(xsd:.xsd=.hxx) $(xsd:.xsd=.ixx) $(xsd:.xsd=.cxx) +gen := $(addprefix $(out_base)/,$(genf)) + +$(gen): xsd := $(out_root)/xsd/xsd +$(gen): xsd_options := --generate-serialization --char-encoding lcp +$(gen): $(out_root)/xsd/xsd + +$(call include-dep,$(dep)) + +# Convenience alias for default target. +# +$(out_base)/: $(driver) + + +# Test. +# +$(test): driver := $(driver) +$(test): $(driver) $(src_base)/test.xml $(src_base)/test.std + $(call message,test $$1,$$1 $(src_base)/test.xml | diff -u $(src_base)/test.std -,$(driver)) + +# Clean. +# +$(clean): $(driver).o.clean \ + $(addsuffix .cxx.clean,$(obj)) \ + $(addsuffix .cxx.clean,$(dep)) \ + $(addprefix $(out_base)/,$(xsd:.xsd=.cxx.xsd.clean)) + +# Generated .gitignore. +# +ifeq ($(out_base),$(src_base)) +$(gen): | $(out_base)/.gitignore +$(driver): | $(out_base)/.gitignore + +$(out_base)/.gitignore: files := driver $(genf) +$(clean): $(out_base)/.gitignore.clean + +$(call include,$(bld_root)/git/gitignore.make) +endif + +# How to. +# +$(call include,$(bld_root)/cxx/o-e.make) +$(call include,$(bld_root)/cxx/cxx-o.make) +$(call include,$(bld_root)/cxx/cxx-d.make) +$(call include,$(scf_root)/xsd/tree/xsd-cxx.make) + + +# Dependencies. +# +$(call import,$(src_root)/xsd/makefile) diff --git a/xsd/tests/cxx/tree/encoding/char/lcp/test.std b/xsd/tests/cxx/tree/encoding/char/lcp/test.std new file mode 100644 index 0000000..cc20ef7 --- /dev/null +++ b/xsd/tests/cxx/tree/encoding/char/lcp/test.std @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no" ?> +<t:root xmlns:t="test"> + + <a>abcd</a> + +</t:root> diff --git a/xsd/tests/cxx/tree/encoding/char/lcp/test.xml b/xsd/tests/cxx/tree/encoding/char/lcp/test.xml new file mode 100644 index 0000000..772512e --- /dev/null +++ b/xsd/tests/cxx/tree/encoding/char/lcp/test.xml @@ -0,0 +1,7 @@ +<t:root xmlns:t="test" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="test test.xsd"> + + <a>abcd</a> + +</t:root> diff --git a/xsd/tests/cxx/tree/encoding/char/lcp/test.xsd b/xsd/tests/cxx/tree/encoding/char/lcp/test.xsd new file mode 100644 index 0000000..1e264e3 --- /dev/null +++ b/xsd/tests/cxx/tree/encoding/char/lcp/test.xsd @@ -0,0 +1,12 @@ +<?xml version="1.0"?> +<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:t="test" targetNamespace="test"> + + <complexType name="type"> + <sequence> + <element name="a" type="string" maxOccurs="unbounded"/> + </sequence> + </complexType> + + <element name="root" type="t:type"/> + +</schema> diff --git a/xsd/tests/cxx/tree/encoding/char/makefile b/xsd/tests/cxx/tree/encoding/char/makefile new file mode 100644 index 0000000..3e64dd9 --- /dev/null +++ b/xsd/tests/cxx/tree/encoding/char/makefile @@ -0,0 +1,18 @@ +# file : tests/cxx/tree/encoding/char/makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../../../build/bootstrap.make + +tests := lcp utf-8 iso-8859-1 + +default := $(out_base)/ +test := $(out_base)/.test +clean := $(out_base)/.clean + +$(default): $(addprefix $(out_base)/,$(addsuffix /,$(tests))) +$(test): $(addprefix $(out_base)/,$(addsuffix /.test,$(tests))) +$(clean): $(addprefix $(out_base)/,$(addsuffix /.clean,$(tests))) + +$(foreach t,$(tests),$(call import,$(src_base)/$t/makefile)) diff --git a/xsd/tests/cxx/tree/encoding/char/utf-8/driver.cxx b/xsd/tests/cxx/tree/encoding/char/utf-8/driver.cxx new file mode 100644 index 0000000..0842203 --- /dev/null +++ b/xsd/tests/cxx/tree/encoding/char/utf-8/driver.cxx @@ -0,0 +1,67 @@ +// file : tests/cxx/tree/encoding/char/utf-8/driver.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +// Test UTF-8 encoding. +// + +#include <memory> // std::auto_ptr +#include <fstream> +#include <iostream> + +#include "test.hxx" + +using namespace std; +using namespace test; + +int +main (int argc, char* argv[]) +{ + if (argc != 2) + { + cerr << "usage: " << argv[0] << " test.xml" << endl; + return 1; + } + + try + { + auto_ptr<type> r (root (argv[1])); + + { + type::a_sequence const& s (r->a ()); + + if (s[0] != "abc" || + s[1] != "\xD5\x95" || + s[2] != "\xEA\xAA\xAA" || + s[3] != "\xF2\xAA\xAA\xAA") + { + cerr << "invalid encoding" << endl; + return 1; + } + } + + { + type::b_sequence const& s (r->b ()); + + if (s[0] != strenum::abc || + s[1] != strenum::a_c || + s[2] != strenum::cxx_bc || + s[3] != strenum::ab_) + { + cerr << "invalid encoding" << endl; + return 1; + } + } + + xml_schema::namespace_infomap map; + map["t"].name = "test"; + + root (std::cout, *r, map, "UCS-4LE"); + } + catch (xml_schema::exception const& e) + { + cerr << "xml_schema::exception: " << e.what () << endl; + return 1; + } +} diff --git a/xsd/tests/cxx/tree/encoding/char/utf-8/makefile b/xsd/tests/cxx/tree/encoding/char/utf-8/makefile new file mode 100644 index 0000000..8c0256e --- /dev/null +++ b/xsd/tests/cxx/tree/encoding/char/utf-8/makefile @@ -0,0 +1,82 @@ +# file : tests/cxx/tree/encoding/char/utf-8/makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../../../../build/bootstrap.make + +xsd := test.xsd +cxx := driver.cxx + +obj := $(addprefix $(out_base)/,$(cxx:.cxx=.o) $(xsd:.xsd=.o)) +dep := $(obj:.o=.o.d) + +driver := $(out_base)/driver +test := $(out_base)/.test +clean := $(out_base)/.clean + + +# Import. +# +$(call import,\ + $(scf_root)/import/libxerces-c/stub.make,\ + l: xerces_c.l,cpp-options: xerces_c.l.cpp-options) + + +# Build. +# +$(driver): $(obj) $(xerces_c.l) + +$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): $(xerces_c.l.cpp-options) + +genf := $(xsd:.xsd=.hxx) $(xsd:.xsd=.ixx) $(xsd:.xsd=.cxx) +gen := $(addprefix $(out_base)/,$(genf)) + +$(gen): xsd := $(out_root)/xsd/xsd +$(gen): xsd_options := --generate-serialization --generate-doxygen +$(gen): $(out_root)/xsd/xsd + +$(call include-dep,$(dep)) + +# Convenience alias for default target. +# +$(out_base)/: $(driver) + + +# Test. +# +$(test): driver := $(driver) +$(test): $(driver) $(src_base)/test.xml $(src_base)/test.std + $(call message,test $$1,$$1 $(src_base)/test.xml | diff -u $(src_base)/test.std -,$(driver)) + +# Clean. +# +$(clean): $(driver).o.clean \ + $(addsuffix .cxx.clean,$(obj)) \ + $(addsuffix .cxx.clean,$(dep)) \ + $(addprefix $(out_base)/,$(xsd:.xsd=.cxx.xsd.clean)) + +# Generated .gitignore. +# +ifeq ($(out_base),$(src_base)) +$(gen): | $(out_base)/.gitignore +$(driver): | $(out_base)/.gitignore + +$(out_base)/.gitignore: files := driver $(genf) +$(clean): $(out_base)/.gitignore.clean + +$(call include,$(bld_root)/git/gitignore.make) +endif + +# How to. +# +$(call include,$(bld_root)/cxx/o-e.make) +$(call include,$(bld_root)/cxx/cxx-o.make) +$(call include,$(bld_root)/cxx/cxx-d.make) +$(call include,$(scf_root)/xsd/tree/xsd-cxx.make) + + +# Dependencies. +# +$(call import,$(src_root)/xsd/makefile) diff --git a/xsd/tests/cxx/tree/encoding/char/utf-8/test.std b/xsd/tests/cxx/tree/encoding/char/utf-8/test.std Binary files differnew file mode 100644 index 0000000..328fe6d --- /dev/null +++ b/xsd/tests/cxx/tree/encoding/char/utf-8/test.std diff --git a/xsd/tests/cxx/tree/encoding/char/utf-8/test.xml b/xsd/tests/cxx/tree/encoding/char/utf-8/test.xml new file mode 100644 index 0000000..a6e5d99 --- /dev/null +++ b/xsd/tests/cxx/tree/encoding/char/utf-8/test.xml @@ -0,0 +1,15 @@ +<t:root xmlns:t="test" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="test test.xsd"> + + <a>abc</a> + <a>Օ</a> + <a>ꪪ</a> + <a>򪪪</a> + + <b>abc</b> + <b>aՕc</b> + <b>ꪪbc</b> + <b>ab򪪪</b> + +</t:root> diff --git a/xsd/tests/cxx/tree/encoding/char/utf-8/test.xsd b/xsd/tests/cxx/tree/encoding/char/utf-8/test.xsd new file mode 100644 index 0000000..6c32a32 --- /dev/null +++ b/xsd/tests/cxx/tree/encoding/char/utf-8/test.xsd @@ -0,0 +1,33 @@ +<?xml version="1.0"?> +<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:t="test" targetNamespace="test"> + + <simpleType name="strenum"> + + <annotation> + <documentation> + Test enum. Valid values are: + abc + aՕc + ꪪbc + ab򪪪 + </documentation> + </annotation> + + <restriction base="string"> + <enumeration value="abc"/> + <enumeration value="aՕc"/> + <enumeration value="ꪪbc"/> + <enumeration value="ab򪪪"/> + </restriction> + </simpleType> + + <complexType name="type"> + <sequence> + <element name="a" type="string" maxOccurs="unbounded"/> + <element name="b" type="t:strenum" maxOccurs="unbounded"/> + </sequence> + </complexType> + + <element name="root" type="t:type"/> + +</schema> diff --git a/xsd/tests/cxx/tree/encoding/makefile b/xsd/tests/cxx/tree/encoding/makefile new file mode 100644 index 0000000..fcadb8c --- /dev/null +++ b/xsd/tests/cxx/tree/encoding/makefile @@ -0,0 +1,18 @@ +# file : tests/cxx/tree/encoding/makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../../build/bootstrap.make + +tests := char wchar + +default := $(out_base)/ +test := $(out_base)/.test +clean := $(out_base)/.clean + +$(default): $(addprefix $(out_base)/,$(addsuffix /,$(tests))) +$(test): $(addprefix $(out_base)/,$(addsuffix /.test,$(tests))) +$(clean): $(addprefix $(out_base)/,$(addsuffix /.clean,$(tests))) + +$(foreach t,$(tests),$(call import,$(src_base)/$t/makefile)) diff --git a/xsd/tests/cxx/tree/encoding/wchar/driver.cxx b/xsd/tests/cxx/tree/encoding/wchar/driver.cxx new file mode 100644 index 0000000..22cbfb4 --- /dev/null +++ b/xsd/tests/cxx/tree/encoding/wchar/driver.cxx @@ -0,0 +1,57 @@ +// file : tests/cxx/tree/encoding/wchar/driver.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +// Test the wide character mapping. +// + +#include <memory> // std::auto_ptr +#include <fstream> +#include <iostream> + +#include "test.hxx" + +using namespace std; +using namespace test; + +int +main (int argc, char* argv[]) +{ + if (argc != 2) + { + cerr << "usage: " << argv[0] << " test.xml" << endl; + return 1; + } + + try + { + // Use dont_validate because we do not have instance's system id (path). + // + std::ifstream ifs (argv[1]); + auto_ptr<type> r (root (ifs, xml_schema::flags::dont_validate)); + + { + type::b_sequence const& s (r->b ()); + + if (s[0] != strenum::abc || + s[1] != strenum::a__c || + s[2] != strenum::cxx__bc || + s[3] != strenum::ab__) + { + cerr << "invalid encoding" << endl; + return 1; + } + } + + xml_schema::namespace_infomap map; + map[L"t"].name = L"test"; + + root (std::cout, *r, map, L"UCS-4LE"); + } + catch (xml_schema::exception const& e) + { + cerr << "xml_schema::exception: " << e.what () << endl; + return 1; + } +} diff --git a/xsd/tests/cxx/tree/encoding/wchar/makefile b/xsd/tests/cxx/tree/encoding/wchar/makefile new file mode 100644 index 0000000..fb2faed --- /dev/null +++ b/xsd/tests/cxx/tree/encoding/wchar/makefile @@ -0,0 +1,83 @@ +# file : tests/cxx/tree/encoding/wchar/makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../../../build/bootstrap.make + +xsd := test.xsd +cxx := driver.cxx + +obj := $(addprefix $(out_base)/,$(cxx:.cxx=.o) $(xsd:.xsd=.o)) +dep := $(obj:.o=.o.d) + +driver := $(out_base)/driver +test := $(out_base)/.test +clean := $(out_base)/.clean + + +# Import. +# +$(call import,\ + $(scf_root)/import/libxerces-c/stub.make,\ + l: xerces_c.l,cpp-options: xerces_c.l.cpp-options) + + +# Build. +# +$(driver): $(obj) $(xerces_c.l) + +$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): $(xerces_c.l.cpp-options) + +genf := $(xsd:.xsd=.hxx) $(xsd:.xsd=.ixx) $(xsd:.xsd=.cxx) +gen := $(addprefix $(out_base)/,$(genf)) + +$(gen): xsd := $(out_root)/xsd/xsd +$(gen): xsd_options := --generate-serialization --generate-doxygen \ +--char-type wchar_t +$(gen): $(out_root)/xsd/xsd + +$(call include-dep,$(dep)) + +# Convenience alias for default target. +# +$(out_base)/: $(driver) + + +# Test. +# +$(test): driver := $(driver) +$(test): $(driver) $(src_base)/test.xml $(src_base)/test.std + $(call message,test $$1,$$1 $(src_base)/test.xml | diff -u $(src_base)/test.std -,$(driver)) + +# Clean. +# +$(clean): $(driver).o.clean \ + $(addsuffix .cxx.clean,$(obj)) \ + $(addsuffix .cxx.clean,$(dep)) \ + $(addprefix $(out_base)/,$(xsd:.xsd=.cxx.xsd.clean)) + +# Generated .gitignore. +# +ifeq ($(out_base),$(src_base)) +$(gen): | $(out_base)/.gitignore +$(driver): | $(out_base)/.gitignore + +$(out_base)/.gitignore: files := driver $(genf) +$(clean): $(out_base)/.gitignore.clean + +$(call include,$(bld_root)/git/gitignore.make) +endif + +# How to. +# +$(call include,$(bld_root)/cxx/o-e.make) +$(call include,$(bld_root)/cxx/cxx-o.make) +$(call include,$(bld_root)/cxx/cxx-d.make) +$(call include,$(scf_root)/xsd/tree/xsd-cxx.make) + + +# Dependencies. +# +$(call import,$(src_root)/xsd/makefile) diff --git a/xsd/tests/cxx/tree/encoding/wchar/test.std b/xsd/tests/cxx/tree/encoding/wchar/test.std Binary files differnew file mode 100644 index 0000000..93d4561 --- /dev/null +++ b/xsd/tests/cxx/tree/encoding/wchar/test.std diff --git a/xsd/tests/cxx/tree/encoding/wchar/test.xml b/xsd/tests/cxx/tree/encoding/wchar/test.xml new file mode 100644 index 0000000..c6ec850 --- /dev/null +++ b/xsd/tests/cxx/tree/encoding/wchar/test.xml @@ -0,0 +1,14 @@ +<t:root xmlns:t="test" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="test test.xsd"> + + <a>abc</a> + <a>῿퟿</a> + <a>𐀀􏿽</a> + + <b>abc</b> + <b>a῿퟿c</b> + <b>𐀀􏿽bc</b> + <b>ab𐀀􏿽</b> + +</t:root> diff --git a/xsd/tests/cxx/tree/encoding/wchar/test.xsd b/xsd/tests/cxx/tree/encoding/wchar/test.xsd new file mode 100644 index 0000000..0bf4bdd --- /dev/null +++ b/xsd/tests/cxx/tree/encoding/wchar/test.xsd @@ -0,0 +1,33 @@ +<?xml version="1.0"?> +<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:t="test" targetNamespace="test"> + + <simpleType name="strenum"> + + <annotation> + <documentation> + Test enum. Valid values are: + abc + a῿퟿c + 𐀀􏿽bc + ab𐀀􏿽 + </documentation> + </annotation> + + <restriction base="string"> + <enumeration value="abc"/> + <enumeration value="a῿퟿c"/> + <enumeration value="𐀀􏿽bc"/> + <enumeration value="ab𐀀􏿽"/> + </restriction> + </simpleType> + + <complexType name="type"> + <sequence> + <element name="a" type="string" maxOccurs="unbounded"/> + <element name="b" type="t:strenum" maxOccurs="unbounded"/> + </sequence> + </complexType> + + <element name="root" type="t:type"/> + +</schema> diff --git a/xsd/tests/cxx/tree/enumeration/ctor/driver.cxx b/xsd/tests/cxx/tree/enumeration/ctor/driver.cxx new file mode 100644 index 0000000..114b7b7 --- /dev/null +++ b/xsd/tests/cxx/tree/enumeration/ctor/driver.cxx @@ -0,0 +1,32 @@ +// file : tests/cxx/tree/enumeration/ctor/driver.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +// Test enumeration constructors. +// +#include <string> + +#include "test.hxx" + +using namespace std; +using namespace test; + +int +main () +{ + // Test ctor(const char*). + // + { + string_enum se ("a"); + type t ("a", 1); + } + + // Test ctor(const std::string&) + // + { + string const s ("c"); + string_enum se (s); + type t (s, 3); + } +} diff --git a/xsd/tests/cxx/tree/enumeration/ctor/makefile b/xsd/tests/cxx/tree/enumeration/ctor/makefile new file mode 100644 index 0000000..b33ab94 --- /dev/null +++ b/xsd/tests/cxx/tree/enumeration/ctor/makefile @@ -0,0 +1,83 @@ +# file : tests/cxx/tree/enumeration/ctor/makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../../../build/bootstrap.make + +xsd := test.xsd +cxx := driver.cxx + +obj := $(addprefix $(out_base)/,$(cxx:.cxx=.o) $(xsd:.xsd=.o)) +dep := $(obj:.o=.o.d) + +driver := $(out_base)/driver +test := $(out_base)/.test +clean := $(out_base)/.clean + + +# Import. +# +$(call import,\ + $(scf_root)/import/libxerces-c/stub.make,\ + l: xerces_c.l,cpp-options: xerces_c.l.cpp-options) + + +# Build. +# +$(driver): $(obj) $(xerces_c.l) + +$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): $(xerces_c.l.cpp-options) + +genf := $(xsd:.xsd=.hxx) $(xsd:.xsd=.ixx) $(xsd:.xsd=.cxx) +gen := $(addprefix $(out_base)/,$(genf)) + +$(gen): xsd := $(out_root)/xsd/xsd +$(gen): xsd_options := --generate-default-ctor --generate-from-base-ctor \ +--generate-doxygen +$(gen): $(out_root)/xsd/xsd + +$(call include-dep,$(dep)) + +# Convenience alias for default target. +# +$(out_base)/: $(driver) + + +# Test. +# +$(test): driver := $(driver) +$(test): $(driver) + $(call message,test $$1,$$1,$(driver)) + +# Clean. +# +$(clean): $(driver).o.clean \ + $(addsuffix .cxx.clean,$(obj)) \ + $(addsuffix .cxx.clean,$(dep)) \ + $(addprefix $(out_base)/,$(xsd:.xsd=.cxx.xsd.clean)) + +# Generated .gitignore. +# +ifeq ($(out_base),$(src_base)) +$(gen): | $(out_base)/.gitignore +$(driver): | $(out_base)/.gitignore + +$(out_base)/.gitignore: files := driver $(genf) +$(clean): $(out_base)/.gitignore.clean + +$(call include,$(bld_root)/git/gitignore.make) +endif + +# How to. +# +$(call include,$(bld_root)/cxx/o-e.make) +$(call include,$(bld_root)/cxx/cxx-o.make) +$(call include,$(bld_root)/cxx/cxx-d.make) +$(call include,$(scf_root)/xsd/tree/xsd-cxx.make) + + +# Dependencies. +# +$(call import,$(src_root)/xsd/makefile) diff --git a/xsd/tests/cxx/tree/enumeration/ctor/test.xsd b/xsd/tests/cxx/tree/enumeration/ctor/test.xsd new file mode 100644 index 0000000..c5d625a --- /dev/null +++ b/xsd/tests/cxx/tree/enumeration/ctor/test.xsd @@ -0,0 +1,41 @@ +<?xml version="1.0"?> +<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:t="test" targetNamespace="test"> + + <simpleType name="string-enum-base"> + <restriction base="string"> + <enumeration value="a"/> + <enumeration value="b"/> + <enumeration value="c"/> + </restriction> + </simpleType> + + <simpleType name="string-enum"> + <restriction base="t:string-enum-base"> + <enumeration value="a"/> + <enumeration value="c"/> + </restriction> + </simpleType> + + <simpleType name="int-enum-base"> + <restriction base="int"> + <enumeration value="1"/> + <enumeration value="2"/> + <enumeration value="3"/> + </restriction> + </simpleType> + + <simpleType name="int-enum"> + <restriction base="t:int-enum-base"> + <enumeration value="1"/> + <enumeration value="3"/> + </restriction> + </simpleType> + + <complexType name="type"> + <sequence> + <element name="a" type="t:string-enum"/> + <element name="b" type="t:int-enum"/> + </sequence> + </complexType> + +</schema> diff --git a/xsd/tests/cxx/tree/enumeration/inheritance/driver.cxx b/xsd/tests/cxx/tree/enumeration/inheritance/driver.cxx new file mode 100644 index 0000000..358f61d --- /dev/null +++ b/xsd/tests/cxx/tree/enumeration/inheritance/driver.cxx @@ -0,0 +1,49 @@ +// file : tests/cxx/tree/enumeration/inheritance/driver.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +// Insert test description here. +// + +#include <memory> // std::auto_ptr +#include <iostream> + +#include "test.hxx" + +using namespace std; +using namespace test; + +int +main (int argc, char* argv[]) +{ + if (argc != 2) + { + cerr << "usage: " << argv[0] << " test.xml" << endl; + return 1; + } + + try + { + auto_ptr<top_bottom> r (root (argv[1])); + + switch (*r) + { + case top_bottom::top: + { + cout << "top" << endl; + break; + } + case top_bottom::bottom: + { + cout << "bottom" << endl; + break; + } + } + } + catch (xml_schema::exception const& e) + { + cerr << e << endl; + return 1; + } +} diff --git a/xsd/tests/cxx/tree/enumeration/inheritance/makefile b/xsd/tests/cxx/tree/enumeration/inheritance/makefile new file mode 100644 index 0000000..c29b0f8 --- /dev/null +++ b/xsd/tests/cxx/tree/enumeration/inheritance/makefile @@ -0,0 +1,82 @@ +# file : tests/cxx/tree/enumeration/inheritance/makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../../../build/bootstrap.make + +xsd := test.xsd +cxx := driver.cxx + +obj := $(addprefix $(out_base)/,$(cxx:.cxx=.o) $(xsd:.xsd=.o)) +dep := $(obj:.o=.o.d) + +driver := $(out_base)/driver +test := $(out_base)/.test +clean := $(out_base)/.clean + + +# Import. +# +$(call import,\ + $(scf_root)/import/libxerces-c/stub.make,\ + l: xerces_c.l,cpp-options: xerces_c.l.cpp-options) + + +# Build. +# +$(driver): $(obj) $(xerces_c.l) + +$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): $(xerces_c.l.cpp-options) + +genf := $(xsd:.xsd=.hxx) $(xsd:.xsd=.ixx) $(xsd:.xsd=.cxx) +gen := $(addprefix $(out_base)/,$(genf)) + +$(gen): xsd := $(out_root)/xsd/xsd +$(gen): xsd_options := --generate-ostream +$(gen): $(out_root)/xsd/xsd + +$(call include-dep,$(dep)) + +# Convenience alias for default target. +# +$(out_base)/: $(driver) + + +# Test. +# +$(test): driver := $(driver) +$(test): $(driver) $(src_base)/test.xml $(src_base)/output + $(call message,test $$1,$$1 $(src_base)/test.xml | diff -u $(src_base)/output -,$(driver)) + +# Clean. +# +$(clean): $(driver).o.clean \ + $(addsuffix .cxx.clean,$(obj)) \ + $(addsuffix .cxx.clean,$(dep)) \ + $(addprefix $(out_base)/,$(xsd:.xsd=.cxx.xsd.clean)) + +# Generated .gitignore. +# +ifeq ($(out_base),$(src_base)) +$(gen): | $(out_base)/.gitignore +$(driver): | $(out_base)/.gitignore + +$(out_base)/.gitignore: files := driver $(genf) +$(clean): $(out_base)/.gitignore.clean + +$(call include,$(bld_root)/git/gitignore.make) +endif + +# How to. +# +$(call include,$(bld_root)/cxx/o-e.make) +$(call include,$(bld_root)/cxx/cxx-o.make) +$(call include,$(bld_root)/cxx/cxx-d.make) +$(call include,$(scf_root)/xsd/tree/xsd-cxx.make) + + +# Dependencies. +# +$(call import,$(src_root)/xsd/makefile) diff --git a/xsd/tests/cxx/tree/enumeration/inheritance/output b/xsd/tests/cxx/tree/enumeration/inheritance/output new file mode 100644 index 0000000..fef12e2 --- /dev/null +++ b/xsd/tests/cxx/tree/enumeration/inheritance/output @@ -0,0 +1 @@ +bottom diff --git a/xsd/tests/cxx/tree/enumeration/inheritance/test.xml b/xsd/tests/cxx/tree/enumeration/inheritance/test.xml new file mode 100644 index 0000000..1de9043 --- /dev/null +++ b/xsd/tests/cxx/tree/enumeration/inheritance/test.xml @@ -0,0 +1,3 @@ +<t:root xmlns:t="test" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="test test.xsd">bottom</t:root> diff --git a/xsd/tests/cxx/tree/enumeration/inheritance/test.xsd b/xsd/tests/cxx/tree/enumeration/inheritance/test.xsd new file mode 100644 index 0000000..cf2eeb1 --- /dev/null +++ b/xsd/tests/cxx/tree/enumeration/inheritance/test.xsd @@ -0,0 +1,22 @@ +<?xml version="1.0"?> +<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:t="test" targetNamespace="test"> + + <simpleType name="side"> + <restriction base="string"> + <enumeration value="top"/> + <enumeration value="left"/> + <enumeration value="bottom"/> + <enumeration value="right"/> + </restriction> + </simpleType> + + <simpleType name="top-bottom"> + <restriction base="t:side"> + <enumeration value="top"/> + <enumeration value="bottom"/> + </restriction> + </simpleType> + + <element name="root" type="t:top-bottom"/> + +</schema> diff --git a/xsd/tests/cxx/tree/enumeration/makefile b/xsd/tests/cxx/tree/enumeration/makefile new file mode 100644 index 0000000..5730a08 --- /dev/null +++ b/xsd/tests/cxx/tree/enumeration/makefile @@ -0,0 +1,18 @@ +# file : tests/cxx/tree/enumeration/makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../../build/bootstrap.make + +tests := ctor inheritance + +default := $(out_base)/ +test := $(out_base)/.test +clean := $(out_base)/.clean + +$(default): $(addprefix $(out_base)/,$(addsuffix /,$(tests))) +$(test): $(addprefix $(out_base)/,$(addsuffix /.test,$(tests))) +$(clean): $(addprefix $(out_base)/,$(addsuffix /.clean,$(tests))) + +$(foreach t,$(tests),$(call import,$(src_base)/$t/makefile)) diff --git a/xsd/tests/cxx/tree/float/driver.cxx b/xsd/tests/cxx/tree/float/driver.cxx new file mode 100644 index 0000000..d2ec1dd --- /dev/null +++ b/xsd/tests/cxx/tree/float/driver.cxx @@ -0,0 +1,55 @@ +// file : tests/cxx/tree/float/driver.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +// Test floating point (xsd:{float, double, decimal}) type parsing +// and serialization. +// + +#include <memory> // std::auto_ptr +#include <iostream> + +#include "test.hxx" + +using namespace std; +using namespace test; + +int +main (int argc, char* argv[]) +{ + if (argc != 2) + { + cerr << "usage: " << argv[0] << " test.xml" << endl; + return 1; + } + + try + { + auto_ptr<type> r (root (argv[1])); + + r->simple ().push_back (12.129456); + r->simple ().push_back (123.129456); + r->simple ().push_back (1234.129456); + + r->s (12.129456); + + r->complex ().push_back (12.129456); + r->complex ().push_back (123.129456); + r->complex ().push_back (1234.129456); + r->complex ().push_back (-12.12); + r->complex ().push_back (-123.12); + + r->s (12.129456); + + xml_schema::namespace_infomap map; + + map["t"].name = "test"; + root (cout, *r, map); + } + catch (xml_schema::exception const& e) + { + cerr << e << endl; + return 1; + } +} diff --git a/xsd/tests/cxx/tree/float/makefile b/xsd/tests/cxx/tree/float/makefile new file mode 100644 index 0000000..21966ba --- /dev/null +++ b/xsd/tests/cxx/tree/float/makefile @@ -0,0 +1,82 @@ +# file : tests/cxx/tree/float/makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../../build/bootstrap.make + +xsd := test.xsd +cxx := driver.cxx + +obj := $(addprefix $(out_base)/,$(cxx:.cxx=.o) $(xsd:.xsd=.o)) +dep := $(obj:.o=.o.d) + +driver := $(out_base)/driver +test := $(out_base)/.test +clean := $(out_base)/.clean + + +# Import. +# +$(call import,\ + $(scf_root)/import/libxerces-c/stub.make,\ + l: xerces_c.l,cpp-options: xerces_c.l.cpp-options) + + +# Build. +# +$(driver): $(obj) $(xerces_c.l) + +$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): $(xerces_c.l.cpp-options) + +genf := $(xsd:.xsd=.hxx) $(xsd:.xsd=.ixx) $(xsd:.xsd=.cxx) +gen := $(addprefix $(out_base)/,$(genf)) + +$(gen): xsd := $(out_root)/xsd/xsd +$(gen): xsd_options := --generate-serialization --root-element-all +$(gen): $(out_root)/xsd/xsd + +$(call include-dep,$(dep)) + +# Convenience alias for default target. +# +$(out_base)/: $(driver) + + +# Test. +# +$(test): driver := $(driver) +$(test): $(driver) $(src_base)/test.xml $(src_base)/test.std + $(call message,test $$1,$$1 $(src_base)/test.xml | diff -u $(src_base)/test.std -,$(driver)) + +# Clean. +# +$(clean): $(driver).o.clean \ + $(addsuffix .cxx.clean,$(obj)) \ + $(addsuffix .cxx.clean,$(dep)) \ + $(addprefix $(out_base)/,$(xsd:.xsd=.cxx.xsd.clean)) + +# Generated .gitignore. +# +ifeq ($(out_base),$(src_base)) +$(gen): | $(out_base)/.gitignore +$(driver): | $(out_base)/.gitignore + +$(out_base)/.gitignore: files := driver $(genf) +$(clean): $(out_base)/.gitignore.clean + +$(call include,$(bld_root)/git/gitignore.make) +endif + +# How to. +# +$(call include,$(bld_root)/cxx/o-e.make) +$(call include,$(bld_root)/cxx/cxx-o.make) +$(call include,$(bld_root)/cxx/cxx-d.make) +$(call include,$(scf_root)/xsd/tree/xsd-cxx.make) + + +# Dependencies. +# +$(call import,$(src_root)/xsd/makefile) diff --git a/xsd/tests/cxx/tree/float/test.std b/xsd/tests/cxx/tree/float/test.std new file mode 100644 index 0000000..44264c2 --- /dev/null +++ b/xsd/tests/cxx/tree/float/test.std @@ -0,0 +1,68 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no" ?> +<t:root xmlns:t="test" de="0" do="0" f="0" s="12.13"> + + <float>0</float> + + <float>1</float> + + <float>1e+06</float> + + <float>1e-07</float> + + <float-list>0 1 1e+06 1e-07</float-list> + + <double>0</double> + + <double>1</double> + + <double>100000000000000</double> + + <double>1e-15</double> + + <double-list>0 1 100000000000000 1e-15</double-list> + + <decimal>0</decimal> + + <decimal>1</decimal> + + <decimal>10000</decimal> + + <decimal>100000000000000</decimal> + + <decimal>0.000000000000001</decimal> + + <decimal-list>0 1 100000000000000 0.000000000000001</decimal-list> + + <simple>0</simple> + + <simple>1</simple> + + <simple>12.34</simple> + + <simple>0.12</simple> + + <simple>12.13</simple> + + <simple>123.1</simple> + + <simple>1234</simple> + + <complex>0</complex> + + <complex>1</complex> + + <complex>12.34</complex> + + <complex>0.12</complex> + + <complex>12.13</complex> + + <complex>123.1</complex> + + <complex>1234</complex> + + <complex>-12.12</complex> + + <complex>-123.1</complex> + +</t:root> diff --git a/xsd/tests/cxx/tree/float/test.xml b/xsd/tests/cxx/tree/float/test.xml new file mode 100644 index 0000000..e5124a4 --- /dev/null +++ b/xsd/tests/cxx/tree/float/test.xml @@ -0,0 +1,35 @@ +<t:root xmlns:t="test" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="test test.xsd" + f="0.0" do="0.0" de="0.0"> + + <float>0.0</float> + <float>1.0</float> + <float>1000000.0</float> + <float>0.0000001</float> + <float-list>0.0 1.0 1000000.0 0.0000001</float-list> + + <double>0.0</double> + <double>1.0</double> + <double>100000000000000.0</double> + <double>0.000000000000001</double> + <double-list>0.0 1.0 100000000000000.0 0.000000000000001</double-list> + + <decimal>0.0</decimal> + <decimal>1.0</decimal> + <decimal>10000</decimal> + <decimal>100000000000000.0</decimal> + <decimal>0.000000000000001</decimal> + <decimal-list>0.0 1.0 100000000000000.0 0.000000000000001</decimal-list> + + <simple>0.0</simple> + <simple>1.0</simple> + <simple>12.34</simple> + <simple>0.12</simple> + + <complex>0.0</complex> + <complex>1.0</complex> + <complex>12.34</complex> + <complex>0.12</complex> + +</t:root> diff --git a/xsd/tests/cxx/tree/float/test.xsd b/xsd/tests/cxx/tree/float/test.xsd new file mode 100644 index 0000000..c02678d --- /dev/null +++ b/xsd/tests/cxx/tree/float/test.xsd @@ -0,0 +1,74 @@ +<?xml version="1.0"?> +<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:t="test" targetNamespace="test"> + + <simpleType name="float-list"> + <list itemType="float"/> + </simpleType> + + <simpleType name="double-list"> + <list itemType="double"/> + </simpleType> + + <simpleType name="decimal-list"> + <list itemType="decimal"/> + </simpleType> + + <!-- decimal facets --> + + <simpleType name="simple"> + <restriction base="t:base-simple"> + <fractionDigits value="2"/> + </restriction> + </simpleType> + + <simpleType name="base-simple"> + <restriction base="decimal"> + <totalDigits value="4"/> + </restriction> + </simpleType> + + <complexType name="complex"> + <simpleContent> + <restriction base="t:base-complex"> + <fractionDigits value="2"/> + <totalDigits value="4"/> + <attribute name="x" type="int"/> + </restriction> + </simpleContent> + </complexType> + + <complexType name="base-complex"> + <simpleContent> + <extension base="decimal"> + <attribute name="x" type="int"/> + </extension> + </simpleContent> + </complexType> + + + <complexType name="type"> + <sequence> + <element name="float" type="float" maxOccurs="unbounded"/> + <element name="float-list" type="t:float-list"/> + <element name="double" type="double" maxOccurs="unbounded"/> + <element name="double-list" type="t:double-list"/> + <element name="decimal" type="decimal" maxOccurs="unbounded"/> + <element name="decimal-list" type="t:decimal-list"/> + + <element name="simple" type="t:simple" maxOccurs="unbounded"/> + <element name="complex" type="t:complex" maxOccurs="unbounded"/> + + </sequence> + <attribute name="f" type="float" default="12.34"/> + <attribute name="do" type="double" default="1234.1234"/> + <attribute name="de" type="decimal" default="1234.1234"/> + + <attribute name="s" type="t:simple"/> + </complexType> + + <element name="root" type="t:type"/> + + <element name="double" type="double"/> + <element name="decimal" type="decimal"/> + +</schema> diff --git a/xsd/tests/cxx/tree/list/ctor/driver.cxx b/xsd/tests/cxx/tree/list/ctor/driver.cxx new file mode 100644 index 0000000..81743e8 --- /dev/null +++ b/xsd/tests/cxx/tree/list/ctor/driver.cxx @@ -0,0 +1,52 @@ +// file : tests/cxx/tree/list/ctor/driver.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +// Test list constructors. +// +#include <string> + +#include "test.hxx" + +using namespace std; +using namespace test; + +int +main () +{ + // Test ctor() + // + { + string_list sl; + + xml_schema::nmtokens nt; + xml_schema::idrefs id; + } + + // Test ctor(size_type, const X&) + // + { + string_list sl (10, "abc"); + size_type st (10, 123); + + xml_schema::nmtokens nt (10, "abc"); + xml_schema::idrefs id (10, "abc"); + } + + // Test ctor(const I& begin, const I& end) + // + { + string_list sl1 (10, "abc"); + string_list sl2 (sl1.begin (), sl1.end ()); + + I i1 (10, 123); + I i2 (i1.begin (), i1.end ()); + + xml_schema::nmtokens nt1 (10, "abc"); + xml_schema::nmtokens nt2 (nt1.begin (), nt1.end ()); + + xml_schema::idrefs id1 (10, "abc"); + xml_schema::idrefs id2 (id1.begin (), id1.end ()); + } +} diff --git a/xsd/tests/cxx/tree/list/ctor/makefile b/xsd/tests/cxx/tree/list/ctor/makefile new file mode 100644 index 0000000..cfda43a --- /dev/null +++ b/xsd/tests/cxx/tree/list/ctor/makefile @@ -0,0 +1,83 @@ +# file : tests/cxx/tree/list/ctor/makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../../../build/bootstrap.make + +xsd := test.xsd +cxx := driver.cxx + +obj := $(addprefix $(out_base)/,$(cxx:.cxx=.o) $(xsd:.xsd=.o)) +dep := $(obj:.o=.o.d) + +driver := $(out_base)/driver +test := $(out_base)/.test +clean := $(out_base)/.clean + + +# Import. +# +$(call import,\ + $(scf_root)/import/libxerces-c/stub.make,\ + l: xerces_c.l,cpp-options: xerces_c.l.cpp-options) + + +# Build. +# +$(driver): $(obj) $(xerces_c.l) + +$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): $(xerces_c.l.cpp-options) + +genf := $(xsd:.xsd=.hxx) $(xsd:.xsd=.ixx) $(xsd:.xsd=.cxx) +gen := $(addprefix $(out_base)/,$(genf)) + +$(gen): xsd := $(out_root)/xsd/xsd +$(gen): xsd_options := --generate-default-ctor --generate-from-base-ctor \ +--generate-doxygen +$(gen): $(out_root)/xsd/xsd + +$(call include-dep,$(dep)) + +# Convenience alias for default target. +# +$(out_base)/: $(driver) + + +# Test. +# +$(test): driver := $(driver) +$(test): $(driver) + $(call message,test $$1,$$1,$(driver)) + +# Clean. +# +$(clean): $(driver).o.clean \ + $(addsuffix .cxx.clean,$(obj)) \ + $(addsuffix .cxx.clean,$(dep)) \ + $(addprefix $(out_base)/,$(xsd:.xsd=.cxx.xsd.clean)) + +# Generated .gitignore. +# +ifeq ($(out_base),$(src_base)) +$(gen): | $(out_base)/.gitignore +$(driver): | $(out_base)/.gitignore + +$(out_base)/.gitignore: files := driver $(genf) +$(clean): $(out_base)/.gitignore.clean + +$(call include,$(bld_root)/git/gitignore.make) +endif + +# How to. +# +$(call include,$(bld_root)/cxx/o-e.make) +$(call include,$(bld_root)/cxx/cxx-o.make) +$(call include,$(bld_root)/cxx/cxx-d.make) +$(call include,$(scf_root)/xsd/tree/xsd-cxx.make) + + +# Dependencies. +# +$(call import,$(src_root)/xsd/makefile) diff --git a/xsd/tests/cxx/tree/list/ctor/test.xsd b/xsd/tests/cxx/tree/list/ctor/test.xsd new file mode 100644 index 0000000..f090bb8 --- /dev/null +++ b/xsd/tests/cxx/tree/list/ctor/test.xsd @@ -0,0 +1,18 @@ +<?xml version="1.0"?> +<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:t="test" targetNamespace="test"> + + <simpleType name="string-list"> + <list itemType="string"/> + </simpleType> + + <!-- Test name conflict resolution. --> + + <simpleType name="size_type"> + <list itemType="int"/> + </simpleType> + + <simpleType name="I"> + <list itemType="int"/> + </simpleType> + +</schema> diff --git a/xsd/tests/cxx/tree/list/makefile b/xsd/tests/cxx/tree/list/makefile new file mode 100644 index 0000000..ae6bb0a --- /dev/null +++ b/xsd/tests/cxx/tree/list/makefile @@ -0,0 +1,18 @@ +# file : tests/cxx/tree/list/makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../../build/bootstrap.make + +tests := ctor + +default := $(out_base)/ +test := $(out_base)/.test +clean := $(out_base)/.clean + +$(default): $(addprefix $(out_base)/,$(addsuffix /,$(tests))) +$(test): $(addprefix $(out_base)/,$(addsuffix /.test,$(tests))) +$(clean): $(addprefix $(out_base)/,$(addsuffix /.clean,$(tests))) + +$(foreach t,$(tests),$(call import,$(src_base)/$t/makefile)) diff --git a/xsd/tests/cxx/tree/makefile b/xsd/tests/cxx/tree/makefile new file mode 100644 index 0000000..9b79424 --- /dev/null +++ b/xsd/tests/cxx/tree/makefile @@ -0,0 +1,42 @@ +# file : tests/cxx/tree/makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../build/bootstrap.make + +tests := \ +built-in \ +chameleon \ +comparison \ +compilation \ +complex \ +containment \ +default \ +detach \ +encoding \ +enumeration \ +float \ +list \ +name-clash \ +naming \ +polymorphism \ +prefix \ +test-template \ +types-only \ +union \ +wildcard + +ifeq ($(xsd_with_ace),y) +tests += binary +endif + +default := $(out_base)/ +test := $(out_base)/.test +clean := $(out_base)/.clean + +$(default): $(addprefix $(out_base)/,$(addsuffix /,$(tests))) +$(test): $(addprefix $(out_base)/,$(addsuffix /.test,$(tests))) +$(clean): $(addprefix $(out_base)/,$(addsuffix /.clean,$(tests))) + +$(foreach t,$(tests),$(call import,$(src_base)/$t/makefile)) diff --git a/xsd/tests/cxx/tree/name-clash/inheritance/driver.cxx b/xsd/tests/cxx/tree/name-clash/inheritance/driver.cxx new file mode 100644 index 0000000..70e6fc6 --- /dev/null +++ b/xsd/tests/cxx/tree/name-clash/inheritance/driver.cxx @@ -0,0 +1,37 @@ +// file : tests/cxx/tree/name-clash/inheritance/driver.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +// Test for name clashes across inheritance hierarchy. +// + +#include <memory> // std::auto_ptr +#include <iostream> + +#include "test.hxx" + +using namespace std; +using namespace test; + +int +main (int argc, char* argv[]) +{ + if (argc != 2) + { + cerr << "usage: " << argv[0] << " test.xml" << endl; + return 1; + } + + try + { + auto_ptr<derived> r (root (argv[1])); + + cout << *r << endl; + } + catch (xml_schema::exception const& e) + { + cerr << e << endl; + return 1; + } +} diff --git a/xsd/tests/cxx/tree/name-clash/inheritance/makefile b/xsd/tests/cxx/tree/name-clash/inheritance/makefile new file mode 100644 index 0000000..b983d91 --- /dev/null +++ b/xsd/tests/cxx/tree/name-clash/inheritance/makefile @@ -0,0 +1,82 @@ +# file : tests/cxx/tree/name-clash/inheritance/makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../../../build/bootstrap.make + +xsd := test.xsd +cxx := driver.cxx + +obj := $(addprefix $(out_base)/,$(cxx:.cxx=.o) $(xsd:.xsd=.o)) +dep := $(obj:.o=.o.d) + +driver := $(out_base)/driver +test := $(out_base)/.test +clean := $(out_base)/.clean + + +# Import. +# +$(call import,\ + $(scf_root)/import/libxerces-c/stub.make,\ + l: xerces_c.l,cpp-options: xerces_c.l.cpp-options) + + +# Build. +# +$(driver): $(obj) $(xerces_c.l) + +$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): $(xerces_c.l.cpp-options) + +genf := $(xsd:.xsd=.hxx) $(xsd:.xsd=.ixx) $(xsd:.xsd=.cxx) +gen := $(addprefix $(out_base)/,$(genf)) + +$(gen): xsd := $(out_root)/xsd/xsd +$(gen): xsd_options := --generate-ostream +$(gen): $(out_root)/xsd/xsd + +$(call include-dep,$(dep)) + +# Convenience alias for default target. +# +$(out_base)/: $(driver) + + +# Test. +# +$(test): driver := $(driver) +$(test): $(driver) $(src_base)/test.xml $(src_base)/output + $(call message,test $$1,$$1 $(src_base)/test.xml | diff -u $(src_base)/output -,$(driver)) + +# Clean. +# +$(clean): $(driver).o.clean \ + $(addsuffix .cxx.clean,$(obj)) \ + $(addsuffix .cxx.clean,$(dep)) \ + $(addprefix $(out_base)/,$(xsd:.xsd=.cxx.xsd.clean)) + +# Generated .gitignore. +# +ifeq ($(out_base),$(src_base)) +$(gen): | $(out_base)/.gitignore +$(driver): | $(out_base)/.gitignore + +$(out_base)/.gitignore: files := driver $(genf) +$(clean): $(out_base)/.gitignore.clean + +$(call include,$(bld_root)/git/gitignore.make) +endif + +# How to. +# +$(call include,$(bld_root)/cxx/o-e.make) +$(call include,$(bld_root)/cxx/cxx-o.make) +$(call include,$(bld_root)/cxx/cxx-d.make) +$(call include,$(scf_root)/xsd/tree/xsd-cxx.make) + + +# Dependencies. +# +$(call import,$(src_root)/xsd/makefile) diff --git a/xsd/tests/cxx/tree/name-clash/inheritance/output b/xsd/tests/cxx/tree/name-clash/inheritance/output new file mode 100644 index 0000000..54565bb --- /dev/null +++ b/xsd/tests/cxx/tree/name-clash/inheritance/output @@ -0,0 +1,3 @@ + +e: e +e: e1 diff --git a/xsd/tests/cxx/tree/name-clash/inheritance/test.xml b/xsd/tests/cxx/tree/name-clash/inheritance/test.xml new file mode 100644 index 0000000..8c17101 --- /dev/null +++ b/xsd/tests/cxx/tree/name-clash/inheritance/test.xml @@ -0,0 +1,8 @@ +<t:root xmlns:t="test" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="test test.xsd"> + + <e>e</e> + <e>e1</e> + +</t:root> diff --git a/xsd/tests/cxx/tree/name-clash/inheritance/test.xsd b/xsd/tests/cxx/tree/name-clash/inheritance/test.xsd new file mode 100644 index 0000000..b83d7df --- /dev/null +++ b/xsd/tests/cxx/tree/name-clash/inheritance/test.xsd @@ -0,0 +1,53 @@ +<?xml version="1.0"?> +<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:t="test" targetNamespace="test"> + + <!-- same member name in base and derived --> + + <complexType name="base"> + <sequence> + <element name="e" type="string"/> + </sequence> + </complexType> + + <complexType name="derived"> + <complexContent> + <extension base="t:base"> + <sequence> + <element name="e" type="string"/> + </sequence> + </extension> + </complexContent> + </complexType> + + <element name="root" type="t:derived"/> + + <!-- same c-tor argument names (compilation only) --> + + <complexType name="ctor-args"> + <simpleContent> + <extension base="string"> + <attribute name="string" type="string" use="required"/> + </extension> + </simpleContent> + </complexType> + + + <!-- same c-tor argument names (compilation only) --> + + <complexType name="ctor-args-base"> + <simpleContent> + <extension base="string"> + <attribute name="ctor-args-derived" type="string" use="required"/> + </extension> + </simpleContent> + </complexType> + + <complexType name="ctor-args-derived"> + <simpleContent> + <extension base="t:ctor-args-base"> + <attribute name="foo" type="string" use="required"/> + </extension> + </simpleContent> + </complexType> + +</schema> diff --git a/xsd/tests/cxx/tree/name-clash/makefile b/xsd/tests/cxx/tree/name-clash/makefile new file mode 100644 index 0000000..ef2fdf0 --- /dev/null +++ b/xsd/tests/cxx/tree/name-clash/makefile @@ -0,0 +1,18 @@ +# file : tests/cxx/tree/name-clash/makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../../build/bootstrap.make + +tests := inheritance + +default := $(out_base)/ +test := $(out_base)/.test +clean := $(out_base)/.clean + +$(default): $(addprefix $(out_base)/,$(addsuffix /,$(tests))) +$(test): $(addprefix $(out_base)/,$(addsuffix /.test,$(tests))) +$(clean): $(addprefix $(out_base)/,$(addsuffix /.clean,$(tests))) + +$(foreach t,$(tests),$(call import,$(src_base)/$t/makefile)) diff --git a/xsd/tests/cxx/tree/naming/camel/driver.cxx b/xsd/tests/cxx/tree/naming/camel/driver.cxx new file mode 100644 index 0000000..96b88d5 --- /dev/null +++ b/xsd/tests/cxx/tree/naming/camel/driver.cxx @@ -0,0 +1,145 @@ +// file : tests/cxx/tree/naming/camel/driver.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +// Test camel case (upper for types, lower for functions) naming style. +// + +#include <memory> // std::auto_ptr +#include <sstream> +#include <iostream> + +#include <xercesc/util/PlatformUtils.hpp> + +#include "test.hxx" + +using namespace std; +using namespace test; + +int +main () +{ + xercesc::XMLPlatformUtils::Initialize (); + + try + { + // Enum 'value' type. + // + { + Gender::Value v; + v = Gender::female; + } + + // Anonymous type. + // + { + Foo f ("a", "b"); + + if (f.a () != "a" || f.b () != "b") + return 1; + } + + // Type name and accessors/modifiers. + // + { + Type t ("bar"); + + // foo + // + { + Type::FooType* p = 0; + Type::FooOptional o; + + if (t.foo ().present ()) + return 1; + + t.foo (o); + } + + // bar + // + { + Type::BarType* p = 0; + + if (t.bar () != "bar") + return 1; + + t.bar ("barbar"); + } + + // baz + // + { + Type::BazType* p = 0; + Type::BazSequence s; + Type::BazIterator i (s.begin ()); + Type::BazConstIterator ci (s.begin ()); + + if (t.baz () != s) + return 1; + + t.baz (s); + } + + // any + // + { + Type::AnySequence s (t.domDocument ()); + Type::AnyIterator i (s.begin ()); + Type::AnyConstIterator ci (s.begin ()); + + if (t.any () != s) + return 1; + + t.any (s); + } + + // foo + // + { + Type::FoxType x = Type::foxDefaultValue (); + + if (t.fox () != x) + return 1; + + t.fox ("fox"); + } + + // any_attribute + // + { + Type::AnyAttributeSet s (t.domDocument ()); + Type::AnyAttributeIterator i (s.begin ()); + Type::AnyAttributeConstIterator ci (s.begin ()); + + if (t.anyAttribute () != s) + return 1; + + t.anyAttribute (s); + } + } + + // Parsing/serialization functions. + // + { + istringstream is ("<t:Root xmlns:t='test'>foo</t:Root>"); + root (is, xml_schema::Flags::dont_validate); + } + + { + ostringstream os; + xml_schema::NamespaceInfomap m; + m["t"].name = "test"; + + root (os, "foo", m); + } + } + catch (xml_schema::Exception const& e) + { + cerr << e << endl; + return 1; + } + + xercesc::XMLPlatformUtils::Terminate (); +} diff --git a/xsd/tests/cxx/tree/naming/camel/makefile b/xsd/tests/cxx/tree/naming/camel/makefile new file mode 100644 index 0000000..e9ce149 --- /dev/null +++ b/xsd/tests/cxx/tree/naming/camel/makefile @@ -0,0 +1,90 @@ +# file : tests/cxx/tree/naming/camel/makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../../../build/bootstrap.make + +xsd := test.xsd +cxx := driver.cxx + +obj := $(addprefix $(out_base)/,$(cxx:.cxx=.o) $(xsd:.xsd=.o)) +dep := $(obj:.o=.o.d) + +driver := $(out_base)/driver +test := $(out_base)/.test +clean := $(out_base)/.clean + + +# Import. +# +$(call import,\ + $(scf_root)/import/libxerces-c/stub.make,\ + l: xerces_c.l,cpp-options: xerces_c.l.cpp-options) + + +# Build. +# +$(driver): $(obj) $(xerces_c.l) + +$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): $(xerces_c.l.cpp-options) + +genf := $(xsd:.xsd=.hxx) $(xsd:.xsd=.ixx) $(xsd:.xsd=.cxx) +gen := $(addprefix $(out_base)/,$(genf)) + +$(gen): xsd := $(out_root)/xsd/xsd + +$(gen): xsd_options := \ +--type-naming ucc \ +--function-naming lcc \ +--generate-ostream \ +--generate-serialization \ +--generate-comparison \ +--generate-wildcard + +$(gen): $(out_root)/xsd/xsd + +$(call include-dep,$(dep)) + +# Convenience alias for default target. +# +$(out_base)/: $(driver) + + +# Test. +# +$(test): driver := $(driver) +$(test): $(driver) + $(call message,test $$1,$$1,$(driver)) + +# Clean. +# +$(clean): $(driver).o.clean \ + $(addsuffix .cxx.clean,$(obj)) \ + $(addsuffix .cxx.clean,$(dep)) \ + $(addprefix $(out_base)/,$(xsd:.xsd=.cxx.xsd.clean)) + +# Generated .gitignore. +# +ifeq ($(out_base),$(src_base)) +$(gen): | $(out_base)/.gitignore +$(driver): | $(out_base)/.gitignore + +$(out_base)/.gitignore: files := driver $(genf) +$(clean): $(out_base)/.gitignore.clean + +$(call include,$(bld_root)/git/gitignore.make) +endif + +# How to. +# +$(call include,$(bld_root)/cxx/o-e.make) +$(call include,$(bld_root)/cxx/cxx-o.make) +$(call include,$(bld_root)/cxx/cxx-d.make) +$(call include,$(scf_root)/xsd/tree/xsd-cxx.make) + + +# Dependencies. +# +$(call import,$(src_root)/xsd/makefile) diff --git a/xsd/tests/cxx/tree/naming/camel/test.xsd b/xsd/tests/cxx/tree/naming/camel/test.xsd new file mode 100644 index 0000000..7d0a745 --- /dev/null +++ b/xsd/tests/cxx/tree/naming/camel/test.xsd @@ -0,0 +1,31 @@ +<?xml version="1.0"?> +<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:t="test" targetNamespace="test"> + + <simpleType name="gender"> + <restriction base="string"> + <enumeration value="male"/> + <enumeration value="female"/> + </restriction> + </simpleType> + + <complexType name="type"> + <sequence> + <element name="foo" minOccurs="0"> + <complexType> + <sequence> + <element name="a" type="string"/> + <element name="b" type="string"/> + </sequence> + </complexType> + </element> + <element name="Bar" type="string"/> + <element name="Baz" type="string" maxOccurs="unbounded"/> + <any namespace="other" processContents="skip" maxOccurs="unbounded"/> + </sequence> + <attribute name="Fox" type="string" default="hello"/> + <anyAttribute namespace="##other" processContents="skip"/> + </complexType> + + <element name="Root" type="string"/> + +</schema> diff --git a/xsd/tests/cxx/tree/naming/java/driver.cxx b/xsd/tests/cxx/tree/naming/java/driver.cxx new file mode 100644 index 0000000..843acff --- /dev/null +++ b/xsd/tests/cxx/tree/naming/java/driver.cxx @@ -0,0 +1,145 @@ +// file : tests/cxx/tree/naming/java/driver.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +// Test Java naming style. +// + +#include <memory> // std::auto_ptr +#include <sstream> +#include <iostream> + +#include <xercesc/util/PlatformUtils.hpp> + +#include "test.hxx" + +using namespace std; +using namespace test; + +int +main () +{ + xercesc::XMLPlatformUtils::Initialize (); + + try + { + // Enum 'value' type. + // + { + Gender::Value v; + v = Gender::female; + } + + // Anonymous type. + // + { + Foo f ("a", "b"); + + if (f.getA () != "a" || f.getB () != "b") + return 1; + } + + // Type name and accessors/modifiers. + // + { + Type t ("bar"); + + // foo + // + { + Type::FooType* p = 0; + Type::FooOptional o; + + if (t.getFoo ().present ()) + return 1; + + t.setFoo (o); + } + + // bar + // + { + Type::BarType* p = 0; + + if (t.getBar () != "bar") + return 1; + + t.setBar ("barbar"); + } + + // baz + // + { + Type::BazType* p = 0; + Type::BazSequence s; + Type::BazIterator i (s.begin ()); + Type::BazConstIterator ci (s.begin ()); + + if (t.getBaz () != s) + return 1; + + t.setBaz (s); + } + + // any + // + { + Type::AnySequence s (t.getDomDocument ()); + Type::AnyIterator i (s.begin ()); + Type::AnyConstIterator ci (s.begin ()); + + if (t.getAny () != s) + return 1; + + t.setAny (s); + } + + // foo + // + { + Type::FoxType x = Type::getFoxDefaultValue (); + + if (t.getFox () != x) + return 1; + + t.setFox ("fox"); + } + + // any_attribute + // + { + Type::AnyAttributeSet s (t.getDomDocument ()); + Type::AnyAttributeIterator i (s.begin ()); + Type::AnyAttributeConstIterator ci (s.begin ()); + + if (t.getAnyAttribute () != s) + return 1; + + t.setAnyAttribute (s); + } + } + + // Parsing/serialization functions. + // + { + istringstream is ("<t:root xmlns:t='test'>foo</t:root>"); + parseRoot (is, xml_schema::Flags::dont_validate); + } + + { + ostringstream os; + xml_schema::NamespaceInfomap m; + m["t"].name = "test"; + + serializeRoot (os, "foo", m); + } + } + catch (xml_schema::Exception const& e) + { + cerr << e << endl; + return 1; + } + + xercesc::XMLPlatformUtils::Terminate (); +} diff --git a/xsd/tests/cxx/tree/naming/java/makefile b/xsd/tests/cxx/tree/naming/java/makefile new file mode 100644 index 0000000..f8e7d04 --- /dev/null +++ b/xsd/tests/cxx/tree/naming/java/makefile @@ -0,0 +1,90 @@ +# file : tests/cxx/tree/naming/java/makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../../../build/bootstrap.make + +xsd := test.xsd +cxx := driver.cxx + +obj := $(addprefix $(out_base)/,$(cxx:.cxx=.o) $(xsd:.xsd=.o)) +dep := $(obj:.o=.o.d) + +driver := $(out_base)/driver +test := $(out_base)/.test +clean := $(out_base)/.clean + + +# Import. +# +$(call import,\ + $(scf_root)/import/libxerces-c/stub.make,\ + l: xerces_c.l,cpp-options: xerces_c.l.cpp-options) + + +# Build. +# +$(driver): $(obj) $(xerces_c.l) + +$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): $(xerces_c.l.cpp-options) + +genf := $(xsd:.xsd=.hxx) $(xsd:.xsd=.ixx) $(xsd:.xsd=.cxx) +gen := $(addprefix $(out_base)/,$(genf)) + +$(gen): xsd := $(out_root)/xsd/xsd + +$(gen): xsd_options := \ +--type-naming java \ +--function-naming java \ +--generate-ostream \ +--generate-serialization \ +--generate-comparison \ +--generate-wildcard + +$(gen): $(out_root)/xsd/xsd + +$(call include-dep,$(dep)) + +# Convenience alias for default target. +# +$(out_base)/: $(driver) + + +# Test. +# +$(test): driver := $(driver) +$(test): $(driver) + $(call message,test $$1,$$1,$(driver)) + +# Clean. +# +$(clean): $(driver).o.clean \ + $(addsuffix .cxx.clean,$(obj)) \ + $(addsuffix .cxx.clean,$(dep)) \ + $(addprefix $(out_base)/,$(xsd:.xsd=.cxx.xsd.clean)) + +# Generated .gitignore. +# +ifeq ($(out_base),$(src_base)) +$(gen): | $(out_base)/.gitignore +$(driver): | $(out_base)/.gitignore + +$(out_base)/.gitignore: files := driver $(genf) +$(clean): $(out_base)/.gitignore.clean + +$(call include,$(bld_root)/git/gitignore.make) +endif + +# How to. +# +$(call include,$(bld_root)/cxx/o-e.make) +$(call include,$(bld_root)/cxx/cxx-o.make) +$(call include,$(bld_root)/cxx/cxx-d.make) +$(call include,$(scf_root)/xsd/tree/xsd-cxx.make) + + +# Dependencies. +# +$(call import,$(src_root)/xsd/makefile) diff --git a/xsd/tests/cxx/tree/naming/java/test.xsd b/xsd/tests/cxx/tree/naming/java/test.xsd new file mode 100644 index 0000000..f525534 --- /dev/null +++ b/xsd/tests/cxx/tree/naming/java/test.xsd @@ -0,0 +1,31 @@ +<?xml version="1.0"?> +<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:t="test" targetNamespace="test"> + + <simpleType name="gender"> + <restriction base="string"> + <enumeration value="male"/> + <enumeration value="female"/> + </restriction> + </simpleType> + + <complexType name="type"> + <sequence> + <element name="foo" minOccurs="0"> + <complexType> + <sequence> + <element name="a" type="string"/> + <element name="b" type="string"/> + </sequence> + </complexType> + </element> + <element name="bar" type="string"/> + <element name="Baz" type="string" maxOccurs="unbounded"/> + <any namespace="other" processContents="skip" maxOccurs="unbounded"/> + </sequence> + <attribute name="Fox" type="string" default="hello"/> + <anyAttribute namespace="##other" processContents="skip"/> + </complexType> + + <element name="root" type="string"/> + +</schema> diff --git a/xsd/tests/cxx/tree/naming/knr/driver.cxx b/xsd/tests/cxx/tree/naming/knr/driver.cxx new file mode 100644 index 0000000..fff944b --- /dev/null +++ b/xsd/tests/cxx/tree/naming/knr/driver.cxx @@ -0,0 +1,145 @@ +// file : tests/cxx/tree/naming/knr/driver.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +// Test K&R naming style. +// + +#include <memory> // std::auto_ptr +#include <sstream> +#include <iostream> + +#include <xercesc/util/PlatformUtils.hpp> + +#include "test.hxx" + +using namespace std; +using namespace test; + +int +main () +{ + xercesc::XMLPlatformUtils::Initialize (); + + try + { + // Enum 'value' type. + // + { + gender::value v; + v = gender::female; + } + + // Anonymous type. + // + { + foo f ("a", "b"); + + if (f.a () != "a" || f.b () != "b") + return 1; + } + + // Type name and accessors/modifiers. + // + { + type t ("bar"); + + // foo + // + { + type::foo_type* p = 0; + type::foo_optional o; + + if (t.foo ().present ()) + return 1; + + t.foo (o); + } + + // bar + // + { + type::bar_type* p = 0; + + if (t.bar () != "bar") + return 1; + + t.bar ("barbar"); + } + + // baz + // + { + type::baz_type* p = 0; + type::baz_sequence s; + type::baz_iterator i (s.begin ()); + type::baz_const_iterator ci (s.begin ()); + + if (t.baz () != s) + return 1; + + t.baz (s); + } + + // any + // + { + type::any_sequence s (t.dom_document ()); + type::any_iterator i (s.begin ()); + type::any_const_iterator ci (s.begin ()); + + if (t.any () != s) + return 1; + + t.any (s); + } + + // foo + // + { + type::fox_type x = type::fox_default_value (); + + if (t.fox () != x) + return 1; + + t.fox ("fox"); + } + + // any_attribute + // + { + type::any_attribute_set s (t.dom_document ()); + type::any_attribute_iterator i (s.begin ()); + type::any_attribute_const_iterator ci (s.begin ()); + + if (t.any_attribute () != s) + return 1; + + t.any_attribute (s); + } + } + + // Parsing/serialization functions. + // + { + istringstream is ("<t:root xmlns:t='test'>foo</t:root>"); + root (is, xml_schema::flags::dont_validate); + } + + { + ostringstream os; + xml_schema::namespace_infomap m; + m["t"].name = "test"; + + root (os, "foo", m); + } + } + catch (xml_schema::exception const& e) + { + cerr << e << endl; + return 1; + } + + xercesc::XMLPlatformUtils::Terminate (); +} diff --git a/xsd/tests/cxx/tree/naming/knr/makefile b/xsd/tests/cxx/tree/naming/knr/makefile new file mode 100644 index 0000000..ac9e75e --- /dev/null +++ b/xsd/tests/cxx/tree/naming/knr/makefile @@ -0,0 +1,90 @@ +# file : tests/cxx/tree/naming/knr/makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../../../build/bootstrap.make + +xsd := test.xsd +cxx := driver.cxx + +obj := $(addprefix $(out_base)/,$(cxx:.cxx=.o) $(xsd:.xsd=.o)) +dep := $(obj:.o=.o.d) + +driver := $(out_base)/driver +test := $(out_base)/.test +clean := $(out_base)/.clean + + +# Import. +# +$(call import,\ + $(scf_root)/import/libxerces-c/stub.make,\ + l: xerces_c.l,cpp-options: xerces_c.l.cpp-options) + + +# Build. +# +$(driver): $(obj) $(xerces_c.l) + +$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): $(xerces_c.l.cpp-options) + +genf := $(xsd:.xsd=.hxx) $(xsd:.xsd=.ixx) $(xsd:.xsd=.cxx) +gen := $(addprefix $(out_base)/,$(genf)) + +$(gen): xsd := $(out_root)/xsd/xsd + +$(gen): xsd_options := \ +--type-naming knr \ +--function-naming knr \ +--generate-ostream \ +--generate-serialization \ +--generate-comparison \ +--generate-wildcard + +$(gen): $(out_root)/xsd/xsd + +$(call include-dep,$(dep)) + +# Convenience alias for default target. +# +$(out_base)/: $(driver) + + +# Test. +# +$(test): driver := $(driver) +$(test): $(driver) + $(call message,test $$1,$$1,$(driver)) + +# Clean. +# +$(clean): $(driver).o.clean \ + $(addsuffix .cxx.clean,$(obj)) \ + $(addsuffix .cxx.clean,$(dep)) \ + $(addprefix $(out_base)/,$(xsd:.xsd=.cxx.xsd.clean)) + +# Generated .gitignore. +# +ifeq ($(out_base),$(src_base)) +$(gen): | $(out_base)/.gitignore +$(driver): | $(out_base)/.gitignore + +$(out_base)/.gitignore: files := driver $(genf) +$(clean): $(out_base)/.gitignore.clean + +$(call include,$(bld_root)/git/gitignore.make) +endif + +# How to. +# +$(call include,$(bld_root)/cxx/o-e.make) +$(call include,$(bld_root)/cxx/cxx-o.make) +$(call include,$(bld_root)/cxx/cxx-d.make) +$(call include,$(scf_root)/xsd/tree/xsd-cxx.make) + + +# Dependencies. +# +$(call import,$(src_root)/xsd/makefile) diff --git a/xsd/tests/cxx/tree/naming/knr/test.xsd b/xsd/tests/cxx/tree/naming/knr/test.xsd new file mode 100644 index 0000000..4361544 --- /dev/null +++ b/xsd/tests/cxx/tree/naming/knr/test.xsd @@ -0,0 +1,31 @@ +<?xml version="1.0"?> +<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:t="test" targetNamespace="test"> + + <simpleType name="gender"> + <restriction base="string"> + <enumeration value="male"/> + <enumeration value="female"/> + </restriction> + </simpleType> + + <complexType name="type"> + <sequence> + <element name="foo" minOccurs="0"> + <complexType> + <sequence> + <element name="a" type="string"/> + <element name="b" type="string"/> + </sequence> + </complexType> + </element> + <element name="bar" type="string"/> + <element name="baz" type="string" maxOccurs="unbounded"/> + <any namespace="other" processContents="skip" maxOccurs="unbounded"/> + </sequence> + <attribute name="fox" type="string" default="hello"/> + <anyAttribute namespace="##other" processContents="skip"/> + </complexType> + + <element name="root" type="string"/> + +</schema> diff --git a/xsd/tests/cxx/tree/naming/makefile b/xsd/tests/cxx/tree/naming/makefile new file mode 100644 index 0000000..90bd7d3 --- /dev/null +++ b/xsd/tests/cxx/tree/naming/makefile @@ -0,0 +1,18 @@ +# file : tests/cxx/tree/naming/makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../../build/bootstrap.make + +tests := camel java knr + +default := $(out_base)/ +test := $(out_base)/.test +clean := $(out_base)/.clean + +$(default): $(addprefix $(out_base)/,$(addsuffix /,$(tests))) +$(test): $(addprefix $(out_base)/,$(addsuffix /.test,$(tests))) +$(clean): $(addprefix $(out_base)/,$(addsuffix /.clean,$(tests))) + +$(foreach t,$(tests),$(call import,$(src_base)/$t/makefile)) diff --git a/xsd/tests/cxx/tree/polymorphism/comparison/driver.cxx b/xsd/tests/cxx/tree/polymorphism/comparison/driver.cxx new file mode 100644 index 0000000..5e52e70 --- /dev/null +++ b/xsd/tests/cxx/tree/polymorphism/comparison/driver.cxx @@ -0,0 +1,75 @@ +// file : tests/cxx/tree/polymorphism/comparison/driver.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +// Test comparison of polymorphic object models. +// + +#include <memory> // std::auto_ptr +#include <iostream> + +#include "test.hxx" + +using namespace std; +using namespace test; + +int +main (int argc, char* argv[]) +{ + if (argc != 2) + { + cerr << "usage: " << argv[0] << " test.xml" << endl; + return 1; + } + + try + { + auto_ptr<type> r (root (argv[1])); + + // Equals. + // + { + derived1 d ("a", 1); + d.b ("b"); + type r1 (d); + + assert (*r == r1); + } + + // Values are not equal. + // + { + derived1 d ("a", 1); + d.b ("c"); + type r1 (d); + + assert (*r != r1); + } + + // Values are not equal. + // + { + derived1 d ("a", 2); + d.b ("b"); + type r1 (d); + + assert (*r != r1); + } + + // Different types. + // + { + derived2 d ("a", 1); + d.c ().push_back ("c"); + type r1 (d); + + assert (*r != r1); + } + } + catch (xml_schema::exception const& e) + { + cerr << e << endl; + return 1; + } +} diff --git a/xsd/tests/cxx/tree/polymorphism/comparison/makefile b/xsd/tests/cxx/tree/polymorphism/comparison/makefile new file mode 100644 index 0000000..ad2c8ec --- /dev/null +++ b/xsd/tests/cxx/tree/polymorphism/comparison/makefile @@ -0,0 +1,83 @@ +# file : tests/cxx/tree/polymorphism/comparison/makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../../../build/bootstrap.make + +xsd := test.xsd +cxx := driver.cxx + +obj := $(addprefix $(out_base)/,$(cxx:.cxx=.o) $(xsd:.xsd=.o)) +dep := $(obj:.o=.o.d) + +driver := $(out_base)/driver +test := $(out_base)/.test +clean := $(out_base)/.clean + + +# Import. +# +$(call import,\ + $(scf_root)/import/libxerces-c/stub.make,\ + l: xerces_c.l,cpp-options: xerces_c.l.cpp-options) + + +# Build. +# +$(driver): $(obj) $(xerces_c.l) + +$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): $(xerces_c.l.cpp-options) + +genf := $(xsd:.xsd=.hxx) $(xsd:.xsd=.ixx) $(xsd:.xsd=.cxx) +gen := $(addprefix $(out_base)/,$(genf)) + +$(gen): xsd := $(out_root)/xsd/xsd +$(gen): xsd_options := --generate-polymorphic --polymorphic-type base \ +--generate-comparison +$(gen): $(out_root)/xsd/xsd + +$(call include-dep,$(dep)) + +# Convenience alias for default target. +# +$(out_base)/: $(driver) + + +# Test. +# +$(test): driver := $(driver) +$(test): $(driver) $(src_base)/test.xml + $(call message,test $$1,$$1 $(src_base)/test.xml,$(driver)) + +# Clean. +# +$(clean): $(driver).o.clean \ + $(addsuffix .cxx.clean,$(obj)) \ + $(addsuffix .cxx.clean,$(dep)) \ + $(addprefix $(out_base)/,$(xsd:.xsd=.cxx.xsd.clean)) + +# Generated .gitignore. +# +ifeq ($(out_base),$(src_base)) +$(gen): | $(out_base)/.gitignore +$(driver): | $(out_base)/.gitignore + +$(out_base)/.gitignore: files := driver $(genf) +$(clean): $(out_base)/.gitignore.clean + +$(call include,$(bld_root)/git/gitignore.make) +endif + +# How to. +# +$(call include,$(bld_root)/cxx/o-e.make) +$(call include,$(bld_root)/cxx/cxx-o.make) +$(call include,$(bld_root)/cxx/cxx-d.make) +$(call include,$(scf_root)/xsd/tree/xsd-cxx.make) + + +# Dependencies. +# +$(call import,$(src_root)/xsd/makefile) diff --git a/xsd/tests/cxx/tree/polymorphism/comparison/test.xml b/xsd/tests/cxx/tree/polymorphism/comparison/test.xml new file mode 100644 index 0000000..0b8c125 --- /dev/null +++ b/xsd/tests/cxx/tree/polymorphism/comparison/test.xml @@ -0,0 +1,7 @@ +<t:root xmlns:t="test" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="test test.xsd"> + + <base xsi:type="t:derived1"><a>a</a><fund>1</fund><b>b</b></base> + +</t:root> diff --git a/xsd/tests/cxx/tree/polymorphism/comparison/test.xsd b/xsd/tests/cxx/tree/polymorphism/comparison/test.xsd new file mode 100644 index 0000000..18532f2 --- /dev/null +++ b/xsd/tests/cxx/tree/polymorphism/comparison/test.xsd @@ -0,0 +1,39 @@ +<?xml version="1.0"?> +<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:t="test" targetNamespace="test"> + + <complexType name="base"> + <sequence> + <element name="a" type="string"/> + <element name="fund" type="int"/> + </sequence> + </complexType> + + <complexType name="derived1"> + <complexContent> + <extension base="t:base"> + <sequence> + <element name="b" type="string" minOccurs="0"/> + </sequence> + </extension> + </complexContent> + </complexType> + + <complexType name="derived2"> + <complexContent> + <extension base="t:base"> + <sequence> + <element name="c" type="string" maxOccurs="unbounded"/> + </sequence> + </extension> + </complexContent> + </complexType> + + <complexType name="type"> + <sequence> + <element name="base" type="t:base"/> + </sequence> + </complexType> + + <element name="root" type="t:type"/> + +</schema> diff --git a/xsd/tests/cxx/tree/polymorphism/makefile b/xsd/tests/cxx/tree/polymorphism/makefile new file mode 100644 index 0000000..bca8f3f --- /dev/null +++ b/xsd/tests/cxx/tree/polymorphism/makefile @@ -0,0 +1,18 @@ +# file : tests/cxx/tree/polymorphism/makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../../build/bootstrap.make + +tests := comparison ostream same-type + +default := $(out_base)/ +test := $(out_base)/.test +clean := $(out_base)/.clean + +$(default): $(addprefix $(out_base)/,$(addsuffix /,$(tests))) +$(test): $(addprefix $(out_base)/,$(addsuffix /.test,$(tests))) +$(clean): $(addprefix $(out_base)/,$(addsuffix /.clean,$(tests))) + +$(foreach t,$(tests),$(call import,$(src_base)/$t/makefile)) diff --git a/xsd/tests/cxx/tree/polymorphism/ostream/driver.cxx b/xsd/tests/cxx/tree/polymorphism/ostream/driver.cxx new file mode 100644 index 0000000..216c887 --- /dev/null +++ b/xsd/tests/cxx/tree/polymorphism/ostream/driver.cxx @@ -0,0 +1,36 @@ +// file : tests/cxx/tree/polymorphism/ostream/driver.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +// Test printing of polymorphic object models. +// + +#include <memory> // std::auto_ptr +#include <iostream> + +#include "test.hxx" + +using namespace std; +using namespace test; + +int +main (int argc, char* argv[]) +{ + if (argc != 2) + { + cerr << "usage: " << argv[0] << " test.xml" << endl; + return 1; + } + + try + { + auto_ptr<type> r (root (argv[1])); + cout << *r << endl; + } + catch (xml_schema::exception const& e) + { + cerr << e << endl; + return 1; + } +} diff --git a/xsd/tests/cxx/tree/polymorphism/ostream/makefile b/xsd/tests/cxx/tree/polymorphism/ostream/makefile new file mode 100644 index 0000000..661ba16 --- /dev/null +++ b/xsd/tests/cxx/tree/polymorphism/ostream/makefile @@ -0,0 +1,84 @@ +# file : tests/cxx/tree/polymorphism/ostream/makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../../../build/bootstrap.make + +xsd := test.xsd +cxx := driver.cxx + +obj := $(addprefix $(out_base)/,$(cxx:.cxx=.o) $(xsd:.xsd=.o)) +dep := $(obj:.o=.o.d) + +driver := $(out_base)/driver +test := $(out_base)/.test +clean := $(out_base)/.clean + + +# Import. +# +$(call import,\ + $(scf_root)/import/libxerces-c/stub.make,\ + l: xerces_c.l,cpp-options: xerces_c.l.cpp-options) + + +# Build. +# +$(driver): $(obj) $(xerces_c.l) + +$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): $(xerces_c.l.cpp-options) + +genf := $(xsd:.xsd=.hxx) $(xsd:.xsd=.ixx) $(xsd:.xsd=.cxx) +gen := $(addprefix $(out_base)/,$(genf)) + +$(gen): xsd := $(out_root)/xsd/xsd +$(gen): xsd_options := --generate-polymorphic --polymorphic-type-all \ +--generate-ostream +$(gen): $(out_root)/xsd/xsd + +$(call include-dep,$(dep)) + +# Convenience alias for default target. +# +$(out_base)/: $(driver) + + +# Test. +# +$(test): driver := $(driver) +$(test): $(driver) $(src_base)/test.xml $(src_base)/output + $(call message,test $$1,$$1 $(src_base)/test.xml | diff -u $(src_base)/output -,$(driver)) + + +# Clean. +# +$(clean): $(driver).o.clean \ + $(addsuffix .cxx.clean,$(obj)) \ + $(addsuffix .cxx.clean,$(dep)) \ + $(addprefix $(out_base)/,$(xsd:.xsd=.cxx.xsd.clean)) + +# Generated .gitignore. +# +ifeq ($(out_base),$(src_base)) +$(gen): | $(out_base)/.gitignore +$(driver): | $(out_base)/.gitignore + +$(out_base)/.gitignore: files := driver $(genf) +$(clean): $(out_base)/.gitignore.clean + +$(call include,$(bld_root)/git/gitignore.make) +endif + +# How to. +# +$(call include,$(bld_root)/cxx/o-e.make) +$(call include,$(bld_root)/cxx/cxx-o.make) +$(call include,$(bld_root)/cxx/cxx-d.make) +$(call include,$(scf_root)/xsd/tree/xsd-cxx.make) + + +# Dependencies. +# +$(call import,$(src_root)/xsd/makefile) diff --git a/xsd/tests/cxx/tree/polymorphism/ostream/output b/xsd/tests/cxx/tree/polymorphism/ostream/output new file mode 100644 index 0000000..bf0e814 --- /dev/null +++ b/xsd/tests/cxx/tree/polymorphism/ostream/output @@ -0,0 +1,13 @@ + +base: +a: a +fund: 1 +base: +a: a +fund: 1 +b: b +base: +a: a +fund: 1 +c: c1 +c: c2 diff --git a/xsd/tests/cxx/tree/polymorphism/ostream/test.xml b/xsd/tests/cxx/tree/polymorphism/ostream/test.xml new file mode 100644 index 0000000..157e15c --- /dev/null +++ b/xsd/tests/cxx/tree/polymorphism/ostream/test.xml @@ -0,0 +1,9 @@ +<t:root xmlns:t="test" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="test test.xsd"> + + <base><a>a</a><fund>1</fund></base> + <base xsi:type="t:derived1"><a>a</a><fund>1</fund><b>b</b></base> + <base xsi:type="t:derived2"><a>a</a><fund>1</fund><c>c1</c><c>c2</c></base> + +</t:root> diff --git a/xsd/tests/cxx/tree/polymorphism/ostream/test.xsd b/xsd/tests/cxx/tree/polymorphism/ostream/test.xsd new file mode 100644 index 0000000..cc1f7a8 --- /dev/null +++ b/xsd/tests/cxx/tree/polymorphism/ostream/test.xsd @@ -0,0 +1,39 @@ +<?xml version="1.0"?> +<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:t="test" targetNamespace="test"> + + <complexType name="base"> + <sequence> + <element name="a" type="string"/> + <element name="fund" type="int"/> + </sequence> + </complexType> + + <complexType name="derived1"> + <complexContent> + <extension base="t:base"> + <sequence> + <element name="b" type="string" minOccurs="0"/> + </sequence> + </extension> + </complexContent> + </complexType> + + <complexType name="derived2"> + <complexContent> + <extension base="t:base"> + <sequence> + <element name="c" type="string" maxOccurs="unbounded"/> + </sequence> + </extension> + </complexContent> + </complexType> + + <complexType name="type"> + <sequence> + <element name="base" type="t:base" maxOccurs="unbounded"/> + </sequence> + </complexType> + + <element name="root" type="t:type"/> + +</schema> diff --git a/xsd/tests/cxx/tree/polymorphism/same-type/driver.cxx b/xsd/tests/cxx/tree/polymorphism/same-type/driver.cxx new file mode 100644 index 0000000..441a742 --- /dev/null +++ b/xsd/tests/cxx/tree/polymorphism/same-type/driver.cxx @@ -0,0 +1,37 @@ +// file : tests/cxx/tree/polymorphism/same-type/driver.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +// Test substitution group and xsi:type that don't change the type. +// + +#include <memory> // std::auto_ptr +#include <iostream> + +#include "test.hxx" + +using namespace std; +using namespace test; + +int +main (int argc, char* argv[]) +{ + if (argc != 2) + { + cerr << "usage: " << argv[0] << " test.xml" << endl; + return 1; + } + + try + { + auto_ptr<type> r (root (argv[1])); + + cout << *r << endl; + } + catch (xml_schema::exception const& e) + { + cerr << e << endl; + return 1; + } +} diff --git a/xsd/tests/cxx/tree/polymorphism/same-type/makefile b/xsd/tests/cxx/tree/polymorphism/same-type/makefile new file mode 100644 index 0000000..c8e7bed --- /dev/null +++ b/xsd/tests/cxx/tree/polymorphism/same-type/makefile @@ -0,0 +1,83 @@ +# file : tests/cxx/tree/polymorphism/same-type/makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../../../build/bootstrap.make + +xsd := test.xsd +cxx := driver.cxx + +obj := $(addprefix $(out_base)/,$(cxx:.cxx=.o) $(xsd:.xsd=.o)) +dep := $(obj:.o=.o.d) + +driver := $(out_base)/driver +test := $(out_base)/.test +clean := $(out_base)/.clean + + +# Import. +# +$(call import,\ + $(scf_root)/import/libxerces-c/stub.make,\ + l: xerces_c.l,cpp-options: xerces_c.l.cpp-options) + + +# Build. +# +$(driver): $(obj) $(xerces_c.l) + +$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): $(xerces_c.l.cpp-options) + +genf := $(xsd:.xsd=.hxx) $(xsd:.xsd=.ixx) $(xsd:.xsd=.cxx) +gen := $(addprefix $(out_base)/,$(genf)) + +$(gen): xsd := $(out_root)/xsd/xsd +$(gen): xsd_options := --generate-ostream --generate-polymorphic \ +--root-element root +$(gen): $(out_root)/xsd/xsd + +$(call include-dep,$(dep)) + +# Convenience alias for default target. +# +$(out_base)/: $(driver) + + +# Test. +# +$(test): driver := $(driver) +$(test): $(driver) $(src_base)/test.xml $(src_base)/output + $(call message,test $$1,$$1 $(src_base)/test.xml | diff -u $(src_base)/output -,$(driver)) + +# Clean. +# +$(clean): $(driver).o.clean \ + $(addsuffix .cxx.clean,$(obj)) \ + $(addsuffix .cxx.clean,$(dep)) \ + $(addprefix $(out_base)/,$(xsd:.xsd=.cxx.xsd.clean)) + +# Generated .gitignore. +# +ifeq ($(out_base),$(src_base)) +$(gen): | $(out_base)/.gitignore +$(driver): | $(out_base)/.gitignore + +$(out_base)/.gitignore: files := driver $(genf) +$(clean): $(out_base)/.gitignore.clean + +$(call include,$(bld_root)/git/gitignore.make) +endif + +# How to. +# +$(call include,$(bld_root)/cxx/o-e.make) +$(call include,$(bld_root)/cxx/cxx-o.make) +$(call include,$(bld_root)/cxx/cxx-d.make) +$(call include,$(scf_root)/xsd/tree/xsd-cxx.make) + + +# Dependencies. +# +$(call import,$(src_root)/xsd/makefile) diff --git a/xsd/tests/cxx/tree/polymorphism/same-type/output b/xsd/tests/cxx/tree/polymorphism/same-type/output new file mode 100644 index 0000000..04b5cbf --- /dev/null +++ b/xsd/tests/cxx/tree/polymorphism/same-type/output @@ -0,0 +1,9 @@ + +base: +a: a1 +base: +a: a2 +base: +a: a3 +base: +a: a4 diff --git a/xsd/tests/cxx/tree/polymorphism/same-type/test.xml b/xsd/tests/cxx/tree/polymorphism/same-type/test.xml new file mode 100644 index 0000000..f8b6d1e --- /dev/null +++ b/xsd/tests/cxx/tree/polymorphism/same-type/test.xml @@ -0,0 +1,10 @@ +<t:root xmlns:t="test" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="test test.xsd"> + + <t:base><a>a1</a></t:base> + <t:derived><a>a2</a></t:derived> + <t:base xsi:type="t:base"><a>a3</a></t:base> + <t:derived xsi:type="t:base"><a>a4</a></t:derived> + +</t:root> diff --git a/xsd/tests/cxx/tree/polymorphism/same-type/test.xsd b/xsd/tests/cxx/tree/polymorphism/same-type/test.xsd new file mode 100644 index 0000000..a4157d3 --- /dev/null +++ b/xsd/tests/cxx/tree/polymorphism/same-type/test.xsd @@ -0,0 +1,21 @@ +<?xml version="1.0"?> +<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:t="test" targetNamespace="test"> + + <complexType name="base"> + <sequence> + <element name="a" type="string"/> + </sequence> + </complexType> + + <element name="base" type="t:base"/> + <element name="derived" type="t:base" substitutionGroup="t:base"/> + + <complexType name="type"> + <sequence> + <element ref="t:base" maxOccurs="unbounded"/> + </sequence> + </complexType> + + <element name="root" type="t:type"/> + +</schema> diff --git a/xsd/tests/cxx/tree/prefix/bar.xsd b/xsd/tests/cxx/tree/prefix/bar.xsd new file mode 100644 index 0000000..4e20902 --- /dev/null +++ b/xsd/tests/cxx/tree/prefix/bar.xsd @@ -0,0 +1,34 @@ +<?xml version="1.0"?> +<schema xmlns="http://www.w3.org/2001/XMLSchema" + xmlns:f="foo" + xmlns:b="bar" + targetNamespace="bar" + attributeFormDefault="qualified"> + + <import namespace="foo" schemaLocation="foo.xsd"/> + + <attribute name="abar" type="int"/> + + <complexType name="derived1"> + <complexContent> + <extension base="f:base"> + <sequence> + <element name="y" type="int"/> + </sequence> + </extension> + </complexContent> + </complexType> + + <complexType name="derived2"> + <complexContent> + <extension base="f:base"> + <sequence> + <element name="z" type="int"/> + </sequence> + </extension> + </complexContent> + </complexType> + + <element name="derived" type="b:derived1" substitutionGroup="f:base"/> + +</schema> diff --git a/xsd/tests/cxx/tree/prefix/driver.cxx b/xsd/tests/cxx/tree/prefix/driver.cxx new file mode 100644 index 0000000..3ce9832 --- /dev/null +++ b/xsd/tests/cxx/tree/prefix/driver.cxx @@ -0,0 +1,36 @@ +// file : tests/cxx/tree/prefix/driver.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +// Test automatic prefix assignment. +// + +#include <memory> // std::auto_ptr +#include <iostream> + +#include "test.hxx" + +using namespace std; +using namespace test; + +int +main (int argc, char* argv[]) +{ + if (argc != 2) + { + cerr << "usage: " << argv[0] << " test.xml" << endl; + return 1; + } + + try + { + auto_ptr<type> r (root (argv[1])); + root (std::cout, *r); + } + catch (xml_schema::exception const& e) + { + cerr << e << endl; + return 1; + } +} diff --git a/xsd/tests/cxx/tree/prefix/foo.xsd b/xsd/tests/cxx/tree/prefix/foo.xsd new file mode 100644 index 0000000..97a35cf --- /dev/null +++ b/xsd/tests/cxx/tree/prefix/foo.xsd @@ -0,0 +1,16 @@ +<?xml version="1.0"?> +<schema xmlns="http://www.w3.org/2001/XMLSchema" + xmlns:f="foo" + targetNamespace="foo"> + + <element name="efoo" type="int"/> + + <complexType name="base"> + <sequence> + <element name="x" type="int"/> + </sequence> + </complexType> + + <element name="base" type="f:base"/> + +</schema> diff --git a/xsd/tests/cxx/tree/prefix/makefile b/xsd/tests/cxx/tree/prefix/makefile new file mode 100644 index 0000000..3317161 --- /dev/null +++ b/xsd/tests/cxx/tree/prefix/makefile @@ -0,0 +1,83 @@ +# file : tests/cxx/tree/prefix/makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../../build/bootstrap.make + +xsd := test.xsd foo.xsd bar.xsd +cxx := driver.cxx + +obj := $(addprefix $(out_base)/,$(cxx:.cxx=.o) $(xsd:.xsd=.o)) +dep := $(obj:.o=.o.d) + +driver := $(out_base)/driver +test := $(out_base)/.test +clean := $(out_base)/.clean + + +# Import. +# +$(call import,\ + $(scf_root)/import/libxerces-c/stub.make,\ + l: xerces_c.l,cpp-options: xerces_c.l.cpp-options) + + +# Build. +# +$(driver): $(obj) $(xerces_c.l) + +$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): $(xerces_c.l.cpp-options) + +genf := $(xsd:.xsd=.hxx) $(xsd:.xsd=.ixx) $(xsd:.xsd=.cxx) +gen := $(addprefix $(out_base)/,$(genf)) + +$(gen): xsd := $(out_root)/xsd/xsd +$(gen): xsd_options := --generate-serialization --generate-polymorphic \ +--polymorphic-type foo\\\#base --root-element root +$(gen): $(out_root)/xsd/xsd + +$(call include-dep,$(dep)) + +# Convenience alias for default target. +# +$(out_base)/: $(driver) + + +# Test. +# +$(test): driver := $(driver) +$(test): $(driver) $(src_base)/test.xml $(src_base)/output + $(call message,test $$1,$$1 $(src_base)/test.xml | diff -u $(src_base)/output -,$(driver)) + +# Clean. +# +$(clean): $(driver).o.clean \ + $(addsuffix .cxx.clean,$(obj)) \ + $(addsuffix .cxx.clean,$(dep)) \ + $(addprefix $(out_base)/,$(xsd:.xsd=.cxx.xsd.clean)) + +# Generated .gitignore. +# +ifeq ($(out_base),$(src_base)) +$(gen): | $(out_base)/.gitignore +$(driver): | $(out_base)/.gitignore + +$(out_base)/.gitignore: files := driver $(genf) +$(clean): $(out_base)/.gitignore.clean + +$(call include,$(bld_root)/git/gitignore.make) +endif + +# How to. +# +$(call include,$(bld_root)/cxx/o-e.make) +$(call include,$(bld_root)/cxx/cxx-o.make) +$(call include,$(bld_root)/cxx/cxx-d.make) +$(call include,$(scf_root)/xsd/tree/xsd-cxx.make) + + +# Dependencies. +# +$(call import,$(src_root)/xsd/makefile) diff --git a/xsd/tests/cxx/tree/prefix/output b/xsd/tests/cxx/tree/prefix/output new file mode 100644 index 0000000..4f40f49 --- /dev/null +++ b/xsd/tests/cxx/tree/prefix/output @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no" ?> +<p1:root xmlns:p1="test"> + + <a xmlns:p3="bar" p3:abar="456" xmlns:p2="foo"> + <p2:efoo>123</p2:efoo> + </a> + + <b xmlns:p2="bar"> + <p2:derived> + <x>1</x> + <y>2</y> + </p2:derived> + </b> + + <c xmlns:p2="foo" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <p2:base xmlns:p3="bar" xsi:type="p3:derived2"> + <x>1</x> + <z>2</z> + </p2:base> + </c> + +</p1:root> diff --git a/xsd/tests/cxx/tree/prefix/test.xml b/xsd/tests/cxx/tree/prefix/test.xml new file mode 100644 index 0000000..b6d0dd6 --- /dev/null +++ b/xsd/tests/cxx/tree/prefix/test.xml @@ -0,0 +1,19 @@ +<t:root xmlns:t="test" + xmlns:f="foo" + xmlns:b="bar" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="test test.xsd"> + + <a b:abar="456"> + <f:efoo>123</f:efoo> + </a> + + <b> + <b:derived><x>1</x><y>2</y></b:derived> + </b> + + <c> + <f:base xsi:type="b:derived2"><x>1</x><z>2</z></f:base> + </c> + +</t:root> diff --git a/xsd/tests/cxx/tree/prefix/test.xsd b/xsd/tests/cxx/tree/prefix/test.xsd new file mode 100644 index 0000000..421fdc0 --- /dev/null +++ b/xsd/tests/cxx/tree/prefix/test.xsd @@ -0,0 +1,40 @@ +<?xml version="1.0"?> +<schema xmlns="http://www.w3.org/2001/XMLSchema" + xmlns:f="foo" + xmlns:b="bar" + xmlns:t="test" + targetNamespace="test"> + + <import namespace="foo" schemaLocation="foo.xsd"/> + <import namespace="bar" schemaLocation="bar.xsd"/> + + <complexType name="a"> + <sequence> + <element ref="f:efoo"/> + </sequence> + <attribute ref="b:abar"/> + </complexType> + + <complexType name="b"> + <sequence> + <element ref="f:base"/> + </sequence> + </complexType> + + <complexType name="c"> + <sequence> + <element ref="f:base"/> + </sequence> + </complexType> + + <complexType name="type"> + <sequence> + <element name="a" type="t:a"/> + <element name="b" type="t:b"/> + <element name="c" type="t:c"/> + </sequence> + </complexType> + + <element name="root" type="t:type"/> + +</schema> diff --git a/xsd/tests/cxx/tree/test-template/driver.cxx b/xsd/tests/cxx/tree/test-template/driver.cxx new file mode 100644 index 0000000..f36cc10 --- /dev/null +++ b/xsd/tests/cxx/tree/test-template/driver.cxx @@ -0,0 +1,37 @@ +// file : tests/cxx/tree/test-template/driver.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +// Insert test description here. +// + +#include <memory> // std::auto_ptr +#include <iostream> + +#include "test.hxx" + +using namespace std; +using namespace test; + +int +main (int argc, char* argv[]) +{ + if (argc != 2) + { + cerr << "usage: " << argv[0] << " test.xml" << endl; + return 1; + } + + try + { + auto_ptr<type> r (root (argv[1])); + + cout << *r << endl; + } + catch (xml_schema::exception const& e) + { + cerr << e << endl; + return 1; + } +} diff --git a/xsd/tests/cxx/tree/test-template/makefile b/xsd/tests/cxx/tree/test-template/makefile new file mode 100644 index 0000000..f94665a --- /dev/null +++ b/xsd/tests/cxx/tree/test-template/makefile @@ -0,0 +1,82 @@ +# file : tests/cxx/tree/test-template/makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../../build/bootstrap.make + +xsd := test.xsd +cxx := driver.cxx + +obj := $(addprefix $(out_base)/,$(cxx:.cxx=.o) $(xsd:.xsd=.o)) +dep := $(obj:.o=.o.d) + +driver := $(out_base)/driver +test := $(out_base)/.test +clean := $(out_base)/.clean + + +# Import. +# +$(call import,\ + $(scf_root)/import/libxerces-c/stub.make,\ + l: xerces_c.l,cpp-options: xerces_c.l.cpp-options) + + +# Build. +# +$(driver): $(obj) $(xerces_c.l) + +$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): $(xerces_c.l.cpp-options) + +genf := $(xsd:.xsd=.hxx) $(xsd:.xsd=.ixx) $(xsd:.xsd=.cxx) +gen := $(addprefix $(out_base)/,$(genf)) + +$(gen): xsd := $(out_root)/xsd/xsd +$(gen): xsd_options := --generate-ostream +$(gen): $(out_root)/xsd/xsd + +$(call include-dep,$(dep)) + +# Convenience alias for default target. +# +$(out_base)/: $(driver) + + +# Test. +# +$(test): driver := $(driver) +$(test): $(driver) $(src_base)/test.xml $(src_base)/output + $(call message,test $$1,$$1 $(src_base)/test.xml | diff -u $(src_base)/output -,$(driver)) + +# Clean. +# +$(clean): $(driver).o.clean \ + $(addsuffix .cxx.clean,$(obj)) \ + $(addsuffix .cxx.clean,$(dep)) \ + $(addprefix $(out_base)/,$(xsd:.xsd=.cxx.xsd.clean)) + +# Generated .gitignore. +# +ifeq ($(out_base),$(src_base)) +$(gen): | $(out_base)/.gitignore +$(driver): | $(out_base)/.gitignore + +$(out_base)/.gitignore: files := driver $(genf) +$(clean): $(out_base)/.gitignore.clean + +$(call include,$(bld_root)/git/gitignore.make) +endif + +# How to. +# +$(call include,$(bld_root)/cxx/o-e.make) +$(call include,$(bld_root)/cxx/cxx-o.make) +$(call include,$(bld_root)/cxx/cxx-d.make) +$(call include,$(scf_root)/xsd/tree/xsd-cxx.make) + + +# Dependencies. +# +$(call import,$(src_root)/xsd/makefile) diff --git a/xsd/tests/cxx/tree/test-template/output b/xsd/tests/cxx/tree/test-template/output new file mode 100644 index 0000000..2a50681 --- /dev/null +++ b/xsd/tests/cxx/tree/test-template/output @@ -0,0 +1,2 @@ + +a: a diff --git a/xsd/tests/cxx/tree/test-template/test.xml b/xsd/tests/cxx/tree/test-template/test.xml new file mode 100644 index 0000000..624a80c --- /dev/null +++ b/xsd/tests/cxx/tree/test-template/test.xml @@ -0,0 +1,7 @@ +<t:root xmlns:t="test" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="test test.xsd"> + + <a>a</a> + +</t:root> diff --git a/xsd/tests/cxx/tree/test-template/test.xsd b/xsd/tests/cxx/tree/test-template/test.xsd new file mode 100644 index 0000000..07bebc7 --- /dev/null +++ b/xsd/tests/cxx/tree/test-template/test.xsd @@ -0,0 +1,12 @@ +<?xml version="1.0"?> +<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:t="test" targetNamespace="test"> + + <complexType name="type"> + <sequence> + <element name="a" type="string"/> + </sequence> + </complexType> + + <element name="root" type="t:type"/> + +</schema> diff --git a/xsd/tests/cxx/tree/types-only/driver.cxx b/xsd/tests/cxx/tree/types-only/driver.cxx new file mode 100644 index 0000000..b0caf72 --- /dev/null +++ b/xsd/tests/cxx/tree/types-only/driver.cxx @@ -0,0 +1,33 @@ +// file : tests/cxx/tree/types-only/driver.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +// Test that code generated without parsing and serialization functions +// still compiles. +// + +#include <memory> // std::auto_ptr +#include <iostream> + +#include "test.hxx" + +using namespace std; +using namespace test; + +int +main () +{ + color_enum red (color_enum::red); + red_blue_enum blue (red_blue_enum::blue); + + long_string_union num ("123"); + + string_list list; + list.push_back ("Hello"); + list.push_back ("World"); + + complex_type t ("Hello, World!", "foo", color_enum::red); + + anon a ("Hello, World!"); +} diff --git a/xsd/tests/cxx/tree/types-only/makefile b/xsd/tests/cxx/tree/types-only/makefile new file mode 100644 index 0000000..972de5a --- /dev/null +++ b/xsd/tests/cxx/tree/types-only/makefile @@ -0,0 +1,82 @@ +# file : tests/cxx/tree/types-only/makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../../build/bootstrap.make + +xsd := test.xsd +cxx := driver.cxx + +obj := $(addprefix $(out_base)/,$(cxx:.cxx=.o) $(xsd:.xsd=.o)) +dep := $(obj:.o=.o.d) + +driver := $(out_base)/driver +test := $(out_base)/.test +clean := $(out_base)/.clean + + +# Import. +# +$(call import,\ + $(scf_root)/import/libxerces-c/stub.make,\ + l: xerces_c.l,cpp-options: xerces_c.l.cpp-options) + + +# Build. +# +$(driver): $(obj) $(xerces_c.l) + +$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): $(xerces_c.l.cpp-options) + +genf := $(xsd:.xsd=.hxx) $(xsd:.xsd=.ixx) $(xsd:.xsd=.cxx) +gen := $(addprefix $(out_base)/,$(genf)) + +$(gen): xsd := $(out_root)/xsd/xsd +$(gen): xsd_options := --suppress-parsing +$(gen): $(out_root)/xsd/xsd + +$(call include-dep,$(dep)) + +# Convenience alias for default target. +# +$(out_base)/: $(driver) + + +# Test. +# +$(test): driver := $(driver) +$(test): $(driver) + $(call message,test $$1,$$1,$(driver)) + +# Clean. +# +$(clean): $(driver).o.clean \ + $(addsuffix .cxx.clean,$(obj)) \ + $(addsuffix .cxx.clean,$(dep)) \ + $(addprefix $(out_base)/,$(xsd:.xsd=.cxx.xsd.clean)) + +# Generated .gitignore. +# +ifeq ($(out_base),$(src_base)) +$(gen): | $(out_base)/.gitignore +$(driver): | $(out_base)/.gitignore + +$(out_base)/.gitignore: files := driver $(genf) +$(clean): $(out_base)/.gitignore.clean + +$(call include,$(bld_root)/git/gitignore.make) +endif + +# How to. +# +$(call include,$(bld_root)/cxx/o-e.make) +$(call include,$(bld_root)/cxx/cxx-o.make) +$(call include,$(bld_root)/cxx/cxx-d.make) +$(call include,$(scf_root)/xsd/tree/xsd-cxx.make) + + +# Dependencies. +# +$(call import,$(src_root)/xsd/makefile) diff --git a/xsd/tests/cxx/tree/types-only/test.xsd b/xsd/tests/cxx/tree/types-only/test.xsd new file mode 100644 index 0000000..9f02240 --- /dev/null +++ b/xsd/tests/cxx/tree/types-only/test.xsd @@ -0,0 +1,52 @@ +<?xml version="1.0"?> +<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:t="test" targetNamespace="test"> + + <simpleType name="color-enum"> + <restriction base="token"> + <enumeration value="red"/> + <enumeration value="green"/> + <enumeration value="blue"/> + </restriction> + </simpleType> + + <simpleType name="red-blue-enum"> + <restriction base="t:color-enum"> + <enumeration value="red"/> + <enumeration value="blue"/> + </restriction> + </simpleType> + + <simpleType name="long-string-union"> + <union memberTypes="long string"/> + </simpleType> + + <simpleType name="string-list"> + <list itemType="string"/> + </simpleType> + + <complexType name="complex-type"> + <sequence> + <element name="a" type="string"/> + </sequence> + <attribute name="text" type="string" use="required"/> + <attribute name="color" type="t:color-enum" use="required"/> + <attribute name="ftext" type="string" fixed="foo"/> + <attribute name="dcolor" type="t:color-enum" default="red"/> + </complexType> + + <!-- Test that we do not perform type/element name conflict resolution + as well as print any warnings. --> + <element name="type" type="string"/> + + <!-- Test that we generate anonymous type for global element. --> + <element name="anon"> + <complexType> + <sequence> + <element name="a" type="string"/> + </sequence> + </complexType> + </element> + + <element name="root" type="t:complex-type"/> + +</schema> diff --git a/xsd/tests/cxx/tree/union/ctor/driver.cxx b/xsd/tests/cxx/tree/union/ctor/driver.cxx new file mode 100644 index 0000000..0aa22ab --- /dev/null +++ b/xsd/tests/cxx/tree/union/ctor/driver.cxx @@ -0,0 +1,32 @@ +// file : tests/cxx/tree/union/ctor/driver.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +// Test union constructors. +// +#include <string> + +#include "test.hxx" + +using namespace std; +using namespace test; + +int +main () +{ + // Test ctor(const std::string&) + // + { + string const s ("123"); + int_string_union u (s); + type t (s); + } + + // Test ctor(const char*). + // + { + int_string_union u ("123"); + type t ("123"); + } +} diff --git a/xsd/tests/cxx/tree/union/ctor/makefile b/xsd/tests/cxx/tree/union/ctor/makefile new file mode 100644 index 0000000..234ee45 --- /dev/null +++ b/xsd/tests/cxx/tree/union/ctor/makefile @@ -0,0 +1,83 @@ +# file : tests/cxx/tree/union/ctor/makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../../../build/bootstrap.make + +xsd := test.xsd +cxx := driver.cxx + +obj := $(addprefix $(out_base)/,$(cxx:.cxx=.o) $(xsd:.xsd=.o)) +dep := $(obj:.o=.o.d) + +driver := $(out_base)/driver +test := $(out_base)/.test +clean := $(out_base)/.clean + + +# Import. +# +$(call import,\ + $(scf_root)/import/libxerces-c/stub.make,\ + l: xerces_c.l,cpp-options: xerces_c.l.cpp-options) + + +# Build. +# +$(driver): $(obj) $(xerces_c.l) + +$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): $(xerces_c.l.cpp-options) + +genf := $(xsd:.xsd=.hxx) $(xsd:.xsd=.ixx) $(xsd:.xsd=.cxx) +gen := $(addprefix $(out_base)/,$(genf)) + +$(gen): xsd := $(out_root)/xsd/xsd +$(gen): xsd_options := --generate-default-ctor --generate-from-base-ctor \ +--generate-doxygen +$(gen): $(out_root)/xsd/xsd + +$(call include-dep,$(dep)) + +# Convenience alias for default target. +# +$(out_base)/: $(driver) + + +# Test. +# +$(test): driver := $(driver) +$(test): $(driver) + $(call message,test $$1,$$1,$(driver)) + +# Clean. +# +$(clean): $(driver).o.clean \ + $(addsuffix .cxx.clean,$(obj)) \ + $(addsuffix .cxx.clean,$(dep)) \ + $(addprefix $(out_base)/,$(xsd:.xsd=.cxx.xsd.clean)) + +# Generated .gitignore. +# +ifeq ($(out_base),$(src_base)) +$(gen): | $(out_base)/.gitignore +$(driver): | $(out_base)/.gitignore + +$(out_base)/.gitignore: files := driver $(genf) +$(clean): $(out_base)/.gitignore.clean + +$(call include,$(bld_root)/git/gitignore.make) +endif + +# How to. +# +$(call include,$(bld_root)/cxx/o-e.make) +$(call include,$(bld_root)/cxx/cxx-o.make) +$(call include,$(bld_root)/cxx/cxx-d.make) +$(call include,$(scf_root)/xsd/tree/xsd-cxx.make) + + +# Dependencies. +# +$(call import,$(src_root)/xsd/makefile) diff --git a/xsd/tests/cxx/tree/union/ctor/test.xsd b/xsd/tests/cxx/tree/union/ctor/test.xsd new file mode 100644 index 0000000..9601093 --- /dev/null +++ b/xsd/tests/cxx/tree/union/ctor/test.xsd @@ -0,0 +1,14 @@ +<?xml version="1.0"?> +<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:t="test" targetNamespace="test"> + + <simpleType name="int-string-union"> + <union memberTypes="int string"/> + </simpleType> + + <complexType name="type"> + <sequence> + <element name="a" type="t:int-string-union"/> + </sequence> + </complexType> + +</schema> diff --git a/xsd/tests/cxx/tree/union/makefile b/xsd/tests/cxx/tree/union/makefile new file mode 100644 index 0000000..5d61aa7 --- /dev/null +++ b/xsd/tests/cxx/tree/union/makefile @@ -0,0 +1,18 @@ +# file : tests/cxx/tree/union/makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../../build/bootstrap.make + +tests := ctor + +default := $(out_base)/ +test := $(out_base)/.test +clean := $(out_base)/.clean + +$(default): $(addprefix $(out_base)/,$(addsuffix /,$(tests))) +$(test): $(addprefix $(out_base)/,$(addsuffix /.test,$(tests))) +$(clean): $(addprefix $(out_base)/,$(addsuffix /.clean,$(tests))) + +$(foreach t,$(tests),$(call import,$(src_base)/$t/makefile)) diff --git a/xsd/tests/cxx/tree/wildcard/driver.cxx b/xsd/tests/cxx/tree/wildcard/driver.cxx new file mode 100644 index 0000000..5bd8229 --- /dev/null +++ b/xsd/tests/cxx/tree/wildcard/driver.cxx @@ -0,0 +1,202 @@ +// file : tests/cxx/tree/wildcard/driver.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +// Test wildcard (any & anyAttribute) mapping. +// + +#include <memory> // std::auto_ptr +#include <sstream> +#include <iostream> + +#include <xsd/cxx/xml/string.hxx> + +#include "test.hxx" + +using namespace std; +using namespace test; +using namespace xercesc; + +namespace xml = xsd::cxx::xml; + +void +print (type& t) +{ + if (t.att ()) + cout << *t.att () << endl; + + type::any_attribute_set& as (t.any_attribute ()); + + for (type::any_attribute_iterator i (as.begin ()); i != as.end (); ++i) + { + cout << xml::transcode<char> (i->getTextContent ()) << endl; + } + + cout << xml::transcode<char> (t.any ().getTextContent ()) << endl + << t.foo () << endl; + + if (t.any1 ()) + cout << xml::transcode<char> (t.any1 ()->getTextContent ()) << endl; + + cout << t.bar () << endl; + + type::any2_sequence& es (t.any2 ()); + + for (type::any2_iterator i (es.begin ()); i != es.end (); ++i) + { + cout << xml::transcode<char> (i->getTextContent ()) << endl; + } + + cout << endl; +} + +int +main (int argc, char* argv[]) +{ + if (argc != 2) + { + cerr << "usage: " << argv[0] << " test.xml" << endl; + return 1; + } + + XMLPlatformUtils::Initialize (); + + try + { + // Test accessors/modifiers for various cardinalities. + // + type t; + + DOMDocument& doc (t.dom_document ()); + + // one + // + { + DOMElement* e (doc.createElement (xml::string ("a").c_str ())); + t.any (*e); + e->release (); + assert (xml::transcode<char> (t.any ().getTagName ()) == "a"); + + t.any (doc.createElement (xml::string ("b").c_str ())); + assert (xml::transcode<char> (t.any ().getTagName ()) == "b"); + } + + // optional + // + { + assert (!t.any1 ().present ()); + + DOMElement* e (doc.createElement (xml::string ("a").c_str ())); + t.any1 (*e); + e->release (); + assert (t.any1 ().present ()); + assert (xml::transcode<char> (t.any1 ().get ().getTagName ()) == "a"); + + t.any1 (doc.createElement (xml::string ("b").c_str ())); + assert (xml::transcode<char> (t.any1 ()->getTagName ()) == "b"); + + type::any1_optional c ( + doc.createElement (xml::string ("c").c_str ()), doc); + t.any1 (c); + assert (xml::transcode<char> (t.any1 ()->getTagName ()) == "c"); + } + + + // sequence + // + { + type::any2_sequence& s (t.any2 ()); + + DOMElement* e (doc.createElement (xml::string ("a").c_str ())); + s.push_back (*e); + e->release (); + s.push_back (doc.createElement (xml::string ("b").c_str ())); + assert (s.size () == 2); + + for (type::any2_iterator i (s.begin ()); i != s.end (); ++i) + { + if (i == s.begin ()) + assert (xml::transcode<char> (i->getTagName ()) == "a"); + else + assert (xml::transcode<char> ((*i).getTagName ()) == "b"); + } + + // copy c-tor + type::any2_sequence cs (s, doc); + assert (cs.size () == 2); + assert (xml::transcode<char> (cs[0].getTagName ()) == "a"); + assert (xml::transcode<char> (cs[1].getTagName ()) == "b"); + + // assignment + t.any2 (cs); + assert (s.size () == 2); + assert (xml::transcode<char> (s[0].getTagName ()) == "a"); + assert (xml::transcode<char> (s[1].getTagName ()) == "b"); + } + + // anyAttribute + // + { + type::any_attribute_set& s (t.any_attribute ()); + + DOMAttr* a (doc.createAttribute (xml::string ("a").c_str ())); + s.insert (*a); + a->release (); + s.insert (doc.createAttribute (xml::string ("b").c_str ())); + assert (s.size () == 2); + + assert (s.find ("a") != s.end ()); + assert (s.find ("b") != s.end ()); + + for (type::any_attribute_iterator i (s.begin ()); i != s.end (); ++i) + { + assert (xml::transcode<char> (i->getName ()) == "a" || + xml::transcode<char> ((*i).getName ()) == "b"); + } + + // copy c-tor + type::any_attribute_set cs (s, doc); + assert (cs.size () == 2); + assert (cs.count ("a")); + assert (cs.count ("b")); + + // assignment + t.any_attribute (cs); + assert (s.size () == 2); + assert (s.count ("a")); + assert (s.count ("b")); + } + + // Test parsing + // + auto_ptr<type> r (root (argv[1])); + print (*r); + + // Test serialization. + // + xml_schema::namespace_infomap map; + + map["t"].name = "test"; + map["t"].schema = "test.xsd"; + map["o"].name = "other"; + + stringstream iostr; + root (iostr, *r, map); + + // cout << iostr.str () << endl + // << endl; + + auto_ptr<type> copy (root (iostr, argv[1])); + assert (*copy == *r); + + print (*copy); + } + catch (xml_schema::exception const& e) + { + cerr << e << endl; + return 1; + } + + XMLPlatformUtils::Terminate (); +} diff --git a/xsd/tests/cxx/tree/wildcard/makefile b/xsd/tests/cxx/tree/wildcard/makefile new file mode 100644 index 0000000..b7b114f --- /dev/null +++ b/xsd/tests/cxx/tree/wildcard/makefile @@ -0,0 +1,83 @@ +# file : tests/cxx/tree/wildcard/makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../../../../build/bootstrap.make + +xsd := test.xsd +cxx := driver.cxx + +obj := $(addprefix $(out_base)/,$(cxx:.cxx=.o) $(xsd:.xsd=.o)) +dep := $(obj:.o=.o.d) + +driver := $(out_base)/driver +test := $(out_base)/.test +clean := $(out_base)/.clean + + +# Import. +# +$(call import,\ + $(scf_root)/import/libxerces-c/stub.make,\ + l: xerces_c.l,cpp-options: xerces_c.l.cpp-options) + + +# Build. +# +$(driver): $(obj) $(xerces_c.l) + +$(obj) $(dep): cpp_options := -I$(src_root)/libxsd +$(obj) $(dep): $(xerces_c.l.cpp-options) + +genf := $(xsd:.xsd=.hxx) $(xsd:.xsd=.ixx) $(xsd:.xsd=.cxx) +gen := $(addprefix $(out_base)/,$(genf)) + +$(gen): xsd := $(out_root)/xsd/xsd +$(gen): xsd_options := --generate-wildcard --generate-default-ctor \ +--generate-from-base-ctor --generate-serialization --generate-comparison +$(gen): $(out_root)/xsd/xsd + +$(call include-dep,$(dep)) + +# Convenience alias for default target. +# +$(out_base)/: $(driver) + + +# Test. +# +$(test): driver := $(driver) +$(test): $(driver) $(src_base)/test.xml $(src_base)/output + $(call message,test $$1,$$1 $(src_base)/test.xml | diff -u $(src_base)/output -,$(driver)) + +# Clean. +# +$(clean): $(driver).o.clean \ + $(addsuffix .cxx.clean,$(obj)) \ + $(addsuffix .cxx.clean,$(dep)) \ + $(addprefix $(out_base)/,$(xsd:.xsd=.cxx.xsd.clean)) + +# Generated .gitignore. +# +ifeq ($(out_base),$(src_base)) +$(gen): | $(out_base)/.gitignore +$(driver): | $(out_base)/.gitignore + +$(out_base)/.gitignore: files := driver $(genf) +$(clean): $(out_base)/.gitignore.clean + +$(call include,$(bld_root)/git/gitignore.make) +endif + +# How to. +# +$(call include,$(bld_root)/cxx/o-e.make) +$(call include,$(bld_root)/cxx/cxx-o.make) +$(call include,$(bld_root)/cxx/cxx-d.make) +$(call include,$(scf_root)/xsd/tree/xsd-cxx.make) + + +# Dependencies. +# +$(call import,$(src_root)/xsd/makefile) diff --git a/xsd/tests/cxx/tree/wildcard/output b/xsd/tests/cxx/tree/wildcard/output new file mode 100644 index 0000000..b23b488 --- /dev/null +++ b/xsd/tests/cxx/tree/wildcard/output @@ -0,0 +1,24 @@ +att +any +o:any +t:any +o:one +foo +t:bar +bar +o:one1 +o:one2 +o:one3 + +att +any +o:any +t:any +o:one +foo +t:bar +bar +o:one1 +o:one2 +o:one3 + diff --git a/xsd/tests/cxx/tree/wildcard/test.xml b/xsd/tests/cxx/tree/wildcard/test.xml new file mode 100644 index 0000000..b0c3267 --- /dev/null +++ b/xsd/tests/cxx/tree/wildcard/test.xml @@ -0,0 +1,19 @@ +<t:root xmlns:t="test" + xmlns:o="other" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="test test.xsd" + + att="att" + any="any" + t:any="t:any" + o:any="o:any"> + + <o:one>o:one</o:one> + <foo>foo</foo> + <t:bar>t:bar</t:bar> + <bar>bar</bar> + <o:seq1>o:one1</o:seq1> + <o:seq2>o:one2</o:seq2> + <o:seq3>o:one3</o:seq3> + +</t:root> diff --git a/xsd/tests/cxx/tree/wildcard/test.xsd b/xsd/tests/cxx/tree/wildcard/test.xsd new file mode 100644 index 0000000..6c7b308 --- /dev/null +++ b/xsd/tests/cxx/tree/wildcard/test.xsd @@ -0,0 +1,18 @@ +<?xml version="1.0"?> +<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:t="test" targetNamespace="test"> + + <complexType name="type"> + <sequence> + <any namespace="##other" processContents="skip"/> + <element name="foo" type="string"/> + <any namespace="##targetNamespace" minOccurs="0" processContents="skip"/> + <element name="bar" type="string"/> + <any namespace="##other" maxOccurs="unbounded" processContents="skip"/> + </sequence> + <attribute name="att" type="string"/> + <anyAttribute namespace="##any" processContents="skip"/> + </complexType> + + <element name="root" type="t:type"/> + +</schema> diff --git a/xsd/tests/failed/test-00.xsd b/xsd/tests/failed/test-00.xsd new file mode 100644 index 0000000..5223f82 --- /dev/null +++ b/xsd/tests/failed/test-00.xsd @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="UTF-8"?> +<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.w3.org/2001/XMLSchema XMLSchema.xsd" + xmlns="http://www.codesynthesis.com/xmlns/test" + targetNamespace="http://www.codesynthesis.com/xmlns/test"> + + <xsd:element name="foo"> + <xsd:complexType/> + </xsd:element> + +</xsd:schema> diff --git a/xsd/tests/makefile b/xsd/tests/makefile new file mode 100644 index 0000000..435bb3a --- /dev/null +++ b/xsd/tests/makefile @@ -0,0 +1,16 @@ +# file : tests/makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../build/bootstrap.make + +default := $(out_base)/ +test := $(out_base)/.test +clean := $(out_base)/.clean + +$(default): $(out_base)/cxx/ +$(test): $(out_base)/cxx/.test +$(clean): $(out_base)/cxx/.clean + +$(call import,$(src_base)/cxx/makefile) diff --git a/xsd/tests/morphing/anonymous/attribute-group/test.xsd b/xsd/tests/morphing/anonymous/attribute-group/test.xsd new file mode 100644 index 0000000..657be8a --- /dev/null +++ b/xsd/tests/morphing/anonymous/attribute-group/test.xsd @@ -0,0 +1,31 @@ +<?xml version="1.0" encoding="UTF-8"?> +<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.w3.org/2001/XMLSchema XMLSchema.xsd" + xmlns="http://www.codesynthesis.com/xmlns/test" + targetNamespace="http://www.codesynthesis.com/xmlns/test"> + + <!-- Attribute Group that names anonymous type. --> + + <xsd:attributeGroup name="gfoo-1"> + <xsd:attribute name="afoo-1"> + <xsd:simpleType> + <xsd:restriction base="xsd:string"/> + </xsd:simpleType> + </xsd:attribute> + </xsd:attributeGroup> + + <xsd:attributeGroup name="gfoo-2"> + <xsd:attributeGroup ref="gfoo-1"/> + <xsd:attribute name="afoo-2" type="xsd:string"/> + </xsd:attributeGroup> + + <xsd:complexType name="Foo1"> + <xsd:attributeGroup ref="gfoo-1"/> + </xsd:complexType> + + <xsd:complexType name="Foo2"> + <xsd:attributeGroup ref="gfoo-2"/> + </xsd:complexType> + +</xsd:schema> diff --git a/xsd/tests/morphing/anonymous/cyclic-inclusion/includee.xsd b/xsd/tests/morphing/anonymous/cyclic-inclusion/includee.xsd new file mode 100644 index 0000000..51f7916 --- /dev/null +++ b/xsd/tests/morphing/anonymous/cyclic-inclusion/includee.xsd @@ -0,0 +1,18 @@ +<?xml version="1.0" ?> +<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.w3.org/2001/XMLSchema XMLSchema.xsd" + xmlns:t="http://www.codesynthesis.com/xmlns/test" + targetNamespace="http://www.codesynthesis.com/xmlns/test"> + + <xsd:include schemaLocation="includer.xsd"/> + + <xsd:element name="bar"> + <xsd:complexType> + <xsd:sequence> + <xsd:element ref="t:foo"/> + </xsd:sequence> + </xsd:complexType> + </xsd:element> + +</xsd:schema> diff --git a/xsd/tests/morphing/anonymous/cyclic-inclusion/includer.xsd b/xsd/tests/morphing/anonymous/cyclic-inclusion/includer.xsd new file mode 100644 index 0000000..54e6b69 --- /dev/null +++ b/xsd/tests/morphing/anonymous/cyclic-inclusion/includer.xsd @@ -0,0 +1,18 @@ +<?xml version="1.0" ?> +<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.w3.org/2001/XMLSchema XMLSchema.xsd" + xmlns:t="http://www.codesynthesis.com/xmlns/test" + targetNamespace="http://www.codesynthesis.com/xmlns/test"> + + <xsd:include schemaLocation="includee.xsd"/> + + <xsd:element name="foo"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="name" type="xsd:string"/> + </xsd:sequence> + </xsd:complexType> + </xsd:element> + +</xsd:schema> diff --git a/xsd/tests/morphing/anonymous/group/test.xsd b/xsd/tests/morphing/anonymous/group/test.xsd new file mode 100644 index 0000000..73e07af --- /dev/null +++ b/xsd/tests/morphing/anonymous/group/test.xsd @@ -0,0 +1,29 @@ +<?xml version="1.0" encoding="UTF-8"?> +<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.w3.org/2001/XMLSchema XMLSchema.xsd" + xmlns="http://www.codesynthesis.com/xmlns/test" + targetNamespace="http://www.codesynthesis.com/xmlns/test"> + + <!-- Simple case. --> + + <xsd:group name="gfoo"> + <xsd:sequence> + <xsd:element name="foo-1"> + <xsd:simpleType> + <xsd:restriction base="xsd:string"/> + </xsd:simpleType> + </xsd:element> + </xsd:sequence> + </xsd:group> + + + <xsd:complexType name="Foo"> + <xsd:group ref="gfoo"/> + </xsd:complexType> + + <xsd:complexType name="Bar"> + <xsd:group ref="gfoo"/> + </xsd:complexType> + +</xsd:schema> diff --git a/xsd/tests/morphing/anonymous/test-000.xsd b/xsd/tests/morphing/anonymous/test-000.xsd new file mode 100644 index 0000000..ce930d8 --- /dev/null +++ b/xsd/tests/morphing/anonymous/test-000.xsd @@ -0,0 +1,20 @@ +<?xml version="1.0"?> +<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:t="test" targetNamespace="test"> + + <!-- Test xpath for nested anonymous types. --> + + <element name="a"> + <complexType> + <sequence> + <element name="b"> + <complexType> + <sequence> + <element name="c" type="string"/> + </sequence> + </complexType> + </element> + </sequence> + </complexType> + </element> + +</schema> diff --git a/xsd/tests/morphing/anonymous/unstable/includee-1.xsd b/xsd/tests/morphing/anonymous/unstable/includee-1.xsd new file mode 100644 index 0000000..916816f --- /dev/null +++ b/xsd/tests/morphing/anonymous/unstable/includee-1.xsd @@ -0,0 +1,12 @@ +<?xml version="1.0" ?> +<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.w3.org/2001/XMLSchema XMLSchema.xsd" + xmlns:test="http://www.codesynthesis.com/xmlns/test" + targetNamespace="http://www.codesynthesis.com/xmlns/test"> + + <xsd:simpleType name="base"> + <xsd:restriction base="xsd:string"/> + </xsd:simpleType> + +</xsd:schema> diff --git a/xsd/tests/morphing/anonymous/unstable/includee-2.xsd b/xsd/tests/morphing/anonymous/unstable/includee-2.xsd new file mode 100644 index 0000000..eb8222c --- /dev/null +++ b/xsd/tests/morphing/anonymous/unstable/includee-2.xsd @@ -0,0 +1,14 @@ +<?xml version="1.0" ?> +<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.w3.org/2001/XMLSchema XMLSchema.xsd" + xmlns:test="http://www.codesynthesis.com/xmlns/test" + targetNamespace="http://www.codesynthesis.com/xmlns/test"> + + <xsd:element name="base"> + <xsd:simpleType> + <xsd:restriction base="xsd:string"/> + </xsd:simpleType> + </xsd:element> + +</xsd:schema> diff --git a/xsd/tests/morphing/anonymous/unstable/includer.xsd b/xsd/tests/morphing/anonymous/unstable/includer.xsd new file mode 100644 index 0000000..4593b5f --- /dev/null +++ b/xsd/tests/morphing/anonymous/unstable/includer.xsd @@ -0,0 +1,18 @@ +<?xml version="1.0" ?> +<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.w3.org/2001/XMLSchema XMLSchema.xsd" + xmlns:Test="http://www.codesynthesis.com/xmlns/test" + targetNamespace="http://www.codesynthesis.com/xmlns/test"> + + <xsd:include schemaLocation="includee-1.xsd"/> + <xsd:include schemaLocation="includee-2.xsd"/> + + <xsd:simpleType name="derived"> + <xsd:restriction base="Test:base"/> + </xsd:simpleType> + + <xsd:element name="element" type="Test:base"/> + <xsd:attribute name="attribute" type="Test:base"/> + +</xsd:schema> diff --git a/xsd/tests/processing/inheritance/test-000.xsd b/xsd/tests/processing/inheritance/test-000.xsd new file mode 100644 index 0000000..ef1ef71 --- /dev/null +++ b/xsd/tests/processing/inheritance/test-000.xsd @@ -0,0 +1,22 @@ +<?xml version="1.0"?> +<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:t="test" targetNamespace="test"> + + <!-- Type base "depends" on itself via e element --> + + <element name="e"> + <complexType> + <complexContent> + <extension base="t:base"/> + </complexContent> + </complexType> + </element> + + <complexType name="base"> + <sequence> + <element ref="t:e"/> + </sequence> + </complexType> + + <element name="root" type="t:base"/> + +</schema> diff --git a/xsd/tests/processing/inheritance/test-001.xsd b/xsd/tests/processing/inheritance/test-001.xsd new file mode 100644 index 0000000..5afc997 --- /dev/null +++ b/xsd/tests/processing/inheritance/test-001.xsd @@ -0,0 +1,26 @@ +<?xml version="1.0"?> +<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:t="test" targetNamespace="test"> + + <!-- Type base depends on derived which in turn depends on base --> + + <complexType name="derived"> + <complexContent> + <extension base="t:base"/> + </complexContent> + </complexType> + + <complexType name="base"> + <sequence> + <element name="e"> + <complexType> + <complexContent> + <extension base="t:derived"/> + </complexContent> + </complexType> + </element> + </sequence> + </complexType> + + <element name="root" type="t:base"/> + +</schema> diff --git a/xsd/tests/schema/anonymous/test.xsd b/xsd/tests/schema/anonymous/test.xsd new file mode 100644 index 0000000..cba3300 --- /dev/null +++ b/xsd/tests/schema/anonymous/test.xsd @@ -0,0 +1,143 @@ +<?xml version="1.0" ?> +<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.w3.org/2001/XMLSchema XMLSchema.xsd" + xmlns:test="http://www.codesynthesis.com/xmlns/test" + targetNamespace="http://www.codesynthesis.com/xmlns/test"> + + <!-- Test 'type' name escaping. --> + <xsd:element name="type"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="name" type="xsd:string"/> + </xsd:sequence> + </xsd:complexType> + </xsd:element> + + + + <!-- Anonymous type via global element. --> + <xsd:element name="global_element"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="name" type="xsd:string"/> + </xsd:sequence> + </xsd:complexType> + </xsd:element> + + + + <!-- Anonymous type via global attribute. --> + <xsd:attribute name="global_attribute"> + <xsd:simpleType> + <xsd:restriction base="xsd:string"/> + </xsd:simpleType> + </xsd:attribute> + + + + <!-- Anonymous type via local element. --> + <xsd:complexType name="local_element_type"> + <xsd:sequence> + <xsd:element name="local_element"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="name" type="xsd:string"/> + </xsd:sequence> + </xsd:complexType> + </xsd:element> + </xsd:sequence> + </xsd:complexType> + + + + <!-- Anonymous type via local attribute. --> + <xsd:complexType name="local_attribute_type"> + <xsd:attribute name="local_attribute"> + <xsd:simpleType> + <xsd:restriction base="xsd:string"/> + </xsd:simpleType> + </xsd:attribute> + </xsd:complexType> + +<!-- + + Various weird anonymous type combinations (some of them are fruits of a + really sick imagination). + +--> + + <xsd:element name="tasks"> + <xsd:complexType> + <xsd:sequence> + <xsd:element ref="test:periodicTask"/> + <xsd:element ref="test:braindamageTask"/> + </xsd:sequence> + </xsd:complexType> + </xsd:element> + + <xsd:element name="periodicTask"> + <xsd:complexType> + <xsd:sequence> + <xsd:element ref="test:tasks"/> + </xsd:sequence> + </xsd:complexType> + </xsd:element> + + <xsd:element name="braindamageTask"> + <xsd:complexType> + <xsd:sequence> + <xsd:element ref="test:tasks"/> + </xsd:sequence> + </xsd:complexType> + </xsd:element> + + + <xsd:complexType name="PropertySeq"> + <xsd:sequence> + <xsd:element name="propery"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="name" type="xsd:string"/> + <xsd:element name="value"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="typecode"> + <xsd:simpleType> + <xsd:restriction base="xsd:NCName"> + <xsd:enumeration value="string"/> + <xsd:enumeration value="integer"/> + </xsd:restriction> + </xsd:simpleType> + </xsd:element> + <xsd:element name="content" type="xsd:string"/> + </xsd:sequence> + </xsd:complexType> + </xsd:element> + </xsd:sequence> + </xsd:complexType> + </xsd:element> + </xsd:sequence> + </xsd:complexType> + + + <xsd:element name="periods"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="period" type="xsd:string"/> + </xsd:sequence> + </xsd:complexType> + </xsd:element> + + + <xsd:element name="typecode"> + <xsd:simpleType> + <xsd:restriction base="xsd:NCName"> + <xsd:enumeration value="string"/> + <xsd:enumeration value="integer"/> + </xsd:restriction> + </xsd:simpleType> + </xsd:element> + + +</xsd:schema> diff --git a/xsd/tests/schema/any-attribute/test.xsd b/xsd/tests/schema/any-attribute/test.xsd new file mode 100644 index 0000000..55419c4 --- /dev/null +++ b/xsd/tests/schema/any-attribute/test.xsd @@ -0,0 +1,22 @@ +<?xml version="1.0" ?> +<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.w3.org/2001/XMLSchema XMLSchema.xsd" + xmlns:test="http://www.codesynthesis.com/xmlns/test" + targetNamespace="http://www.codesynthesis.com/xmlns/test"> + + + <xsd:complexType name="type"> + <xsd:attribute name="a" type="xsd:string"/> + <xsd:anyAttribute namespace="##other" processContents="skip"/> + <xsd:attributeGroup ref="test:agroup"/> + </xsd:complexType> + + <xsd:attributeGroup name="agroup"> + <xsd:attribute name="b" type="xsd:string"/> + <xsd:anyAttribute namespace="##any" processContents="skip"/> + </xsd:attributeGroup> + + <xsd:element name="root" type="test:type"/> + +</xsd:schema> diff --git a/xsd/tests/schema/any-type/test.xsd b/xsd/tests/schema/any-type/test.xsd new file mode 100644 index 0000000..9e3ff79 --- /dev/null +++ b/xsd/tests/schema/any-type/test.xsd @@ -0,0 +1,22 @@ +<?xml version="1.0" ?> +<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.w3.org/2001/XMLSchema XMLSchema.xsd" + xmlns:test="http://www.codesynthesis.com/xmlns/test" + targetNamespace="http://www.codesynthesis.com/xmlns/test"> + + <xsd:complexType name="person"> + <xsd:sequence> + <xsd:element name="name"/> <!-- type="anyType" --> + <xsd:element name="name2" type="xsd:anyType" minOccurs="0"/> + <xsd:element name="name3" type="xsd:anyType" maxOccurs="unbounded"/> + </xsd:sequence> + <xsd:attribute name="id"/> <!-- type="anySimpleType" --> + <xsd:attribute name="id2" type="xsd:anySimpleType" use="required"/> + </xsd:complexType> + + <xsd:element name="person" type="test:person"/> + + <xsd:element name="name"/> <!-- type="anyType" --> + +</xsd:schema> diff --git a/xsd/tests/schema/any/fail.xsd b/xsd/tests/schema/any/fail.xsd new file mode 100644 index 0000000..2eb9513 --- /dev/null +++ b/xsd/tests/schema/any/fail.xsd @@ -0,0 +1,19 @@ +<?xml version="1.0" ?> +<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.w3.org/2001/XMLSchema XMLSchema.xsd" + xmlns:test="http://www.codesynthesis.com/xmlns/test" + targetNamespace="http://www.codesynthesis.com/xmlns/test"> + + <xsd:element name="foo" type="xsd:string"/> + + <xsd:complexType name="person"> + <xsd:sequence> + <xsd:element name="name" type="xsd:string"/> + <xsd:element ref="test:foo"/> + <xsd:any namespace="##any" processContents="strict"/> + <xsd:any namespace="http://www.codesynthesis.com/xmlns/test" processContents="strict"/> + </xsd:sequence> + </xsd:complexType> + +</xsd:schema> diff --git a/xsd/tests/schema/any/test.xsd b/xsd/tests/schema/any/test.xsd new file mode 100644 index 0000000..ff896fd --- /dev/null +++ b/xsd/tests/schema/any/test.xsd @@ -0,0 +1,19 @@ +<?xml version="1.0" ?> +<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.w3.org/2001/XMLSchema XMLSchema.xsd" + xmlns:test="http://www.codesynthesis.com/xmlns/test" + targetNamespace="http://www.codesynthesis.com/xmlns/test"> + + <xsd:complexType name="person"> + <xsd:sequence> + <xsd:element name="name" type="xsd:string"/> + <xsd:any namespace="##other" processContents="strict" maxOccurs="unbounded"/> + </xsd:sequence> + <xsd:attribute name="id" type="xsd:ID"/> + <xsd:anyAttribute namespace="##other" processContents="strict"/> + </xsd:complexType> + + <xsd:element name="person" type="test:person"/> + +</xsd:schema> diff --git a/xsd/tests/schema/attribute-group/global.xsd b/xsd/tests/schema/attribute-group/global.xsd new file mode 100644 index 0000000..6ee0539 --- /dev/null +++ b/xsd/tests/schema/attribute-group/global.xsd @@ -0,0 +1,50 @@ +<?xml version="1.0" encoding="UTF-8"?> +<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.w3.org/2001/XMLSchema XMLSchema.xsd" + xmlns="http://www.codesynthesis.com/xmlns/test" + targetNamespace="http://www.codesynthesis.com/xmlns/test"> + + <!-- Simple case. --> + + <xsd:attributeGroup name="gfoo_1"> + <xsd:attribute name="foo_1_1" type="xsd:string"/> + <xsd:attribute name="foo_1_2" type="xsd:string"/> + </xsd:attributeGroup> + + <xsd:attributeGroup name="gfoo_2"> + <xsd:attributeGroup ref="gfoo_1"/> + <xsd:attribute name="foo_2_1" type="xsd:string"/> + <xsd:attribute name="foo_2_2" type="xsd:string"/> + </xsd:attributeGroup> + + <xsd:complexType name="Foo"> + <xsd:attributeGroup ref="gfoo_2"/> + </xsd:complexType> + + + + <!-- Forward reference. --> + + <xsd:attributeGroup name="gbar_3"> + <xsd:attribute name="bar_3_1" type="xsd:string"/> + <xsd:attribute name="bar_3_2" type="xsd:string"/> + <xsd:attributeGroup ref="gbar_1"/> + </xsd:attributeGroup> + + <xsd:complexType name="Bar"> + <xsd:attributeGroup ref="gbar_2"/> + </xsd:complexType> + + <xsd:attributeGroup name="gbar_2"> + <xsd:attributeGroup ref="gbar_3"/> + <xsd:attribute name="bar_2_1" type="xsd:string"/> + <xsd:attribute name="bar_2_2" type="xsd:string"/> + </xsd:attributeGroup> + + <xsd:attributeGroup name="gbar_1"> + <xsd:attribute name="bar_1_1" type="xsd:string"/> + <xsd:attribute name="bar_1_2" type="xsd:string"/> + </xsd:attributeGroup> + +</xsd:schema> diff --git a/xsd/tests/schema/attribute/global.xsd b/xsd/tests/schema/attribute/global.xsd new file mode 100644 index 0000000..e2dcc93 --- /dev/null +++ b/xsd/tests/schema/attribute/global.xsd @@ -0,0 +1,21 @@ +<?xml version="1.0" encoding="UTF-8"?> +<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.w3.org/2001/XMLSchema XMLSchema.xsd" + xmlns="http://www.codesynthesis.com/xmlns/test" + targetNamespace="http://www.codesynthesis.com/xmlns/test"> + + <!-- Typed with named type. --> + + <xsd:attribute name="foo" type="xsd:string"/> + + + <!-- Typed with anonymous type. --> + + <xsd:attribute name="bar"> + <xsd:simpleType> + <xsd:restriction base="xsd:string"/> + </xsd:simpleType> + </xsd:attribute> + +</xsd:schema> diff --git a/xsd/tests/schema/attribute/local.xsd b/xsd/tests/schema/attribute/local.xsd new file mode 100644 index 0000000..7a7a480 --- /dev/null +++ b/xsd/tests/schema/attribute/local.xsd @@ -0,0 +1,37 @@ +<?xml version="1.0" encoding="UTF-8"?> +<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.w3.org/2001/XMLSchema XMLSchema.xsd" + xmlns="http://www.codesynthesis.com/xmlns/test" + targetNamespace="http://www.codesynthesis.com/xmlns/test"> + + + <!-- Typed with named type. --> + + <xsd:complexType name="Foo"> + <xsd:attribute name="foo" type="xsd:string"/> + </xsd:complexType> + + + <!-- Forward reference to a yet undeclared type. --> + + <xsd:complexType name="Bar"> + <xsd:attribute name="bar" type="Bar2"/> + </xsd:complexType> + + <xsd:simpleType name="Bar2"> + <xsd:restriction base="xsd:string"/> + </xsd:simpleType> + + + <!-- Typed with anonymous type. --> + + <xsd:complexType name="Baz"> + <xsd:attribute name="baz"> + <xsd:simpleType> + <xsd:restriction base="xsd:string"/> + </xsd:simpleType> + </xsd:attribute> + </xsd:complexType> + +</xsd:schema> diff --git a/xsd/tests/schema/attribute/ref.xsd b/xsd/tests/schema/attribute/ref.xsd new file mode 100644 index 0000000..f6c3c10 --- /dev/null +++ b/xsd/tests/schema/attribute/ref.xsd @@ -0,0 +1,42 @@ +<?xml version="1.0" encoding="UTF-8"?> +<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.w3.org/2001/XMLSchema XMLSchema.xsd" + xmlns="http://www.codesynthesis.com/xmlns/test" + targetNamespace="http://www.codesynthesis.com/xmlns/test"> + + + <!-- Easy case. --> + + <xsd:attribute name="foo" type="xsd:string"/> + + <xsd:complexType name="Foo"> + <xsd:attribute ref="foo"/> + </xsd:complexType> + + + + <!-- Forward reference to a yet undeclared attribute. --> + + <xsd:complexType name="Bar"> + <xsd:attribute ref="bar"/> + </xsd:complexType> + + <xsd:attribute name="bar" type="xsd:string"/> + + + + <!-- Reference to an attribute with a forward reference to a yet + undeclared type. --> + + <xsd:attribute name="baz" type="Baz2"/> + + <xsd:complexType name="Baz"> + <xsd:attribute ref="baz"/> + </xsd:complexType> + + <xsd:simpleType name="Baz2"> + <xsd:restriction base="xsd:string"/> + </xsd:simpleType> + +</xsd:schema> diff --git a/xsd/tests/schema/cardinality/test.xsd b/xsd/tests/schema/cardinality/test.xsd new file mode 100644 index 0000000..b27f923 --- /dev/null +++ b/xsd/tests/schema/cardinality/test.xsd @@ -0,0 +1,46 @@ +<?xml version="1.0" ?> +<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.w3.org/2001/XMLSchema XMLSchema.xsd" + xmlns:test="http://www.codesynthesis.com/xmlns/test" + targetNamespace="http://www.codesynthesis.com/xmlns/test"> + + <!-- + This test tries to cover various cardinality cases with + built-in and user-defined types. + --> + + <xsd:complexType name="Foo"> + <xsd:sequence> + <xsd:element name="foo" type="xsd:string"/> + </xsd:sequence> + </xsd:complexType> + + <xsd:complexType name="Bar"> + <xsd:sequence> + + <xsd:element name="one-int" type="xsd:int"/> + <xsd:element name="opt-int" type="xsd:int" minOccurs="0"/> + <xsd:element name="seq-int" type="xsd:int" maxOccurs="unbounded"/> + + <xsd:element name="one-string" type="xsd:string"/> + <xsd:element name="opt-string" type="xsd:string" minOccurs="0"/> + <xsd:element name="seq-string" type="xsd:string" maxOccurs="unbounded"/> + + <xsd:element name="one-foo" type="test:Foo"/> + <xsd:element name="opt-foo" type="test:Foo" minOccurs="0"/> + <xsd:element name="seq-foo" type="test:Foo" maxOccurs="unbounded"/> + + </xsd:sequence> + + <xsd:attribute name="one-int-a" type="xsd:int" use="required"/> + <xsd:attribute name="opt-int-a" type="xsd:int"/> + + <xsd:attribute name="one-string-a" type="xsd:string" use="required"/> + <xsd:attribute name="opt-string-a" type="xsd:string"/> + + </xsd:complexType> + + <xsd:element name="bar" type="test:Bar"/> + +</xsd:schema> diff --git a/xsd/tests/schema/chameleon/includer.xsd b/xsd/tests/schema/chameleon/includer.xsd new file mode 100644 index 0000000..c93ea18 --- /dev/null +++ b/xsd/tests/schema/chameleon/includer.xsd @@ -0,0 +1,17 @@ +<?xml version="1.0" ?> +<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.w3.org/2001/XMLSchema XMLSchema.xsd" + xmlns:Test="http://www.codesynthesis.com/xmlns/test" + targetNamespace="http://www.codesynthesis.com/xmlns/test"> + + <xsd:include schemaLocation="schemas/includee.xsd"/> + + <xsd:simpleType name="derived"> + <xsd:restriction base="Test:base"/> + </xsd:simpleType> + + <xsd:element name="element" type="Test:base"/> + <xsd:attribute name="attribute" type="Test:base"/> + +</xsd:schema> diff --git a/xsd/tests/schema/chameleon/schemas/includee.xsd b/xsd/tests/schema/chameleon/schemas/includee.xsd new file mode 100644 index 0000000..d89b9c4 --- /dev/null +++ b/xsd/tests/schema/chameleon/schemas/includee.xsd @@ -0,0 +1,12 @@ +<?xml version="1.0" ?> +<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.w3.org/2001/XMLSchema XMLSchema.xsd"> + + <xsd:simpleType name="base"> + <xsd:restriction base="xsd:string"/> + </xsd:simpleType> + + <xsd:element name="base_e" type="base"/> + +</xsd:schema> diff --git a/xsd/tests/schema/enumeration/test.xsd b/xsd/tests/schema/enumeration/test.xsd new file mode 100644 index 0000000..b8253d9 --- /dev/null +++ b/xsd/tests/schema/enumeration/test.xsd @@ -0,0 +1,89 @@ +<?xml version="1.0" ?> +<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.w3.org/2001/XMLSchema XMLSchema.xsd" + xmlns:test="http://www.codesynthesis.com/xmlns/test" + targetNamespace="http://www.codesynthesis.com/xmlns/test"> + + <!-- string-based --> + + <xsd:simpleType name="StringEnum"> + <xsd:restriction base="xsd:string"> + <xsd:enumeration value="one"/> + <xsd:enumeration value="two"/> + <xsd:enumeration value="three"/> + </xsd:restriction> + </xsd:simpleType> + + <xsd:simpleType name="StringSimple"> + <xsd:restriction base="xsd:string"/> + </xsd:simpleType> + + <!-- inheritance of a enum from a simple type --> + <xsd:simpleType name="StringSimpleRestriction"> + <xsd:restriction base="test:StringSimple"> + <xsd:enumeration value="one"/> + <xsd:enumeration value="two"/> + </xsd:restriction> + </xsd:simpleType> + + <!-- inheritance of a enum from a strig-based enum --> + <xsd:simpleType name="StringEnumRestriction"> + <xsd:restriction base="test:StringEnum"> + <xsd:enumeration value="one"/> + <xsd:enumeration value="two"/> + </xsd:restriction> + </xsd:simpleType> + + <!-- inheritance of a complex type from a string-based enum --> + <xsd:complexType name="StringComplex"> + <xsd:simpleContent> + <xsd:extension base="test:StringEnumRestriction"> + <xsd:attribute name="lang" type="xsd:language"/> + </xsd:extension> + </xsd:simpleContent> + </xsd:complexType> + + + + <!-- non string-based --> + + <xsd:simpleType name="IntEnum"> + <xsd:restriction base="xsd:int"> + <xsd:enumeration value="1"/> + <xsd:enumeration value="2"/> + <xsd:enumeration value="3"/> + </xsd:restriction> + </xsd:simpleType> + + <xsd:simpleType name="IntSimple"> + <xsd:restriction base="xsd:int"/> + </xsd:simpleType> + + <!-- inheritance of a enum from a simple type --> + <xsd:simpleType name="IntSimpleRestriction"> + <xsd:restriction base="test:IntSimple"> + <xsd:enumeration value="1"/> + <xsd:enumeration value="2"/> + </xsd:restriction> + </xsd:simpleType> + + <!-- inheritance of a enum from a enum --> + <xsd:simpleType name="IntEnumRestriction"> + <xsd:restriction base="test:IntEnum"> + <xsd:enumeration value="1"/> + <xsd:enumeration value="2"/> + </xsd:restriction> + </xsd:simpleType> + + <!-- inheritance of a complex type from a enum --> + <xsd:complexType name="IntComplex"> + <xsd:simpleContent> + <xsd:extension base="test:IntEnumRestriction"> + <xsd:attribute name="lang" type="xsd:language"/> + </xsd:extension> + </xsd:simpleContent> + </xsd:complexType> + + +</xsd:schema> diff --git a/xsd/tests/schema/forward/test.xsd b/xsd/tests/schema/forward/test.xsd new file mode 100644 index 0000000..c7cc24e --- /dev/null +++ b/xsd/tests/schema/forward/test.xsd @@ -0,0 +1,32 @@ +<?xml version="1.0" ?> +<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.w3.org/2001/XMLSchema XMLSchema.xsd" + xmlns:test="http://www.codesynthesis.com/xmlns/test" + targetNamespace="http://www.codesynthesis.com/xmlns/test"> + +<!-- + + Various weird forward reference combinations. + +--> + + <!-- case 1 --> + + <xsd:complexType name="Type1A"> + <xsd:complexContent> + <xsd:extension base="test:Type1B"> + <xsd:sequence> + <xsd:element name="bar" type="xsd:string"/> + </xsd:sequence> + </xsd:extension> + </xsd:complexContent> + </xsd:complexType> + + <xsd:complexType name="Type1B"> + <xsd:sequence> + <xsd:element name="foo" type="xsd:string"/> + </xsd:sequence> + </xsd:complexType> + +</xsd:schema> diff --git a/xsd/tests/schema/group/global.xsd b/xsd/tests/schema/group/global.xsd new file mode 100644 index 0000000..27ccadf --- /dev/null +++ b/xsd/tests/schema/group/global.xsd @@ -0,0 +1,39 @@ +<?xml version="1.0" encoding="UTF-8"?> +<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.w3.org/2001/XMLSchema XMLSchema.xsd" + xmlns="http://www.codesynthesis.com/xmlns/test" + targetNamespace="http://www.codesynthesis.com/xmlns/test"> + + <!-- Simple case. --> + + <xsd:group name="gfoo"> + <xsd:sequence> + <xsd:element name="foo_1" type="xsd:string"/> + <xsd:element name="foo_2" type="xsd:string"/> + </xsd:sequence> + </xsd:group> + + + <xsd:complexType name="Foo"> + <xsd:group ref="gfoo"/> + </xsd:complexType> + + + + <!-- Forward reference. --> + + <xsd:complexType name="Bar"> + <xsd:group ref="gbar"/> + </xsd:complexType> + + <xsd:group name="gbar"> + <xsd:choice> + <xsd:element name="bar_1" type="xsd:string"/> + <xsd:element ref="bar_2"/> + </xsd:choice> + </xsd:group> + + <xsd:element name="bar_2" type="xsd:string"/> + +</xsd:schema> diff --git a/xsd/tests/schema/group/test.xsd b/xsd/tests/schema/group/test.xsd new file mode 100644 index 0000000..7527cbb --- /dev/null +++ b/xsd/tests/schema/group/test.xsd @@ -0,0 +1,148 @@ +<?xml version="1.0" ?> +<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.w3.org/2001/XMLSchema XMLSchema.xsd" + xmlns:test="http://www.codesynthesis.com/xmlns/test" + targetNamespace="http://www.codesynthesis.com/xmlns/test"> + + <!-- + + Various weird group combinations. + + --> + + <!-- case 1 --> + + <xsd:group name="g1"> + <xsd:sequence> + <xsd:element name="e1" type="xsd:string"/> + <xsd:element name="e2" type="xsd:long"/> + </xsd:sequence> + </xsd:group> + + <xsd:complexType name="Type1"> + <xsd:sequence> + <xsd:group ref="test:g1"/> + </xsd:sequence> + </xsd:complexType> + + <!-- case 2 --> + + <xsd:group name="g2"> + <xsd:sequence> + <xsd:element ref="test:g2e1"/> + </xsd:sequence> + </xsd:group> + + <xsd:complexType name="TypeTwo"> + <xsd:sequence> + <xsd:group ref="test:g2"/> + </xsd:sequence> + </xsd:complexType> + + <xsd:element name="g2e1" type="xsd:string"/> + + <!-- case 3 --> + + <xsd:complexType name="Type3"> + <xsd:sequence> + <xsd:group ref="test:g3"/> + </xsd:sequence> + </xsd:complexType> + + <xsd:group name="g3"> + <xsd:sequence> + <xsd:element ref="test:g3e1"/> + </xsd:sequence> + </xsd:group> + + <xsd:element name="g3e1" type="xsd:string"/> + + <!-- case 4 --> + + <xsd:complexType name="Type4A"> + <xsd:sequence> + <xsd:group ref="test:g4" minOccurs="0"/> + </xsd:sequence> + </xsd:complexType> + + <xsd:complexType name="Type4B"> + <xsd:sequence minOccurs="0"> + <xsd:group ref="test:g4"/> + </xsd:sequence> + </xsd:complexType> + + + <xsd:group name="g4"> + <xsd:sequence> + <xsd:element name="e1" type="xsd:string"/> + <xsd:element name="e2" type="xsd:long" maxOccurs="unbounded"/> + </xsd:sequence> + </xsd:group> + + <xsd:complexType name="Type4C"> + <xsd:sequence> + <xsd:group ref="test:g4" minOccurs="0"/> + </xsd:sequence> + </xsd:complexType> + + <!-- case 5 --> + + <xsd:group name="g5-1"> + <xsd:choice> + <xsd:group ref="test:g5-2"/> + <xsd:element name="e1" type="xsd:string"/> + </xsd:choice> + </xsd:group> + + <xsd:group name="g5-2"> + <xsd:choice> + <xsd:group ref="test:g5-3"/> + <xsd:element name="e2" type="xsd:string"/> + </xsd:choice> + </xsd:group> + + <xsd:group name="g5-3"> + <xsd:choice> + <xsd:element name="e3" type="xsd:long"/> + </xsd:choice> + </xsd:group> + + <xsd:complexType name="Type5"> + <xsd:choice> + <xsd:group ref="test:g5-1"/> + </xsd:choice> + </xsd:complexType> + + <!-- case 6 --> + + <xsd:group name="g6-3"> + <xsd:choice> + <xsd:group ref="test:g6-1"/> + <xsd:element name="e_3_1" type="xsd:string"/> + <xsd:element name="e_3_2" type="xsd:string"/> + </xsd:choice> + </xsd:group> + + <xsd:complexType name="Type6"> + <xsd:choice> + <xsd:group ref="test:g6-2"/> + </xsd:choice> + </xsd:complexType> + + <xsd:group name="g6-2"> + <xsd:choice> + <xsd:group ref="test:g6-3"/> + <xsd:element name="e_2_1" type="xsd:string"/> + <xsd:element name="e_2_2" type="xsd:string"/> + </xsd:choice> + </xsd:group> + + <xsd:group name="g6-1"> + <xsd:choice> + <xsd:element name="e_1_1" type="xsd:string"/> + <xsd:element name="e_1_2" type="xsd:string"/> + </xsd:choice> + </xsd:group> + +</xsd:schema> diff --git a/xsd/tests/schema/import/importer.xsd b/xsd/tests/schema/import/importer.xsd new file mode 100644 index 0000000..82fc33c --- /dev/null +++ b/xsd/tests/schema/import/importer.xsd @@ -0,0 +1,20 @@ +<?xml version="1.0" ?> +<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.w3.org/2001/XMLSchema XMLSchema.xsd" + xmlns:Test="http://www.codesynthesis.com/xmlns/test" + xmlns:Impl="http://www.codesynthesis.com/xmlns/test/impl" + targetNamespace="http://www.codesynthesis.com/xmlns/test/impl"> + + <!-- <xsd::element name="foo" type="xsd:string"/> --> + + <xsd:import namespace="http://www.codesynthesis.com/xmlns/test" schemaLocation="schemas/importee.xsd"/> + + <xsd:simpleType name="derived"> + <xsd:restriction base="Test:base"/> + </xsd:simpleType> + + <xsd:element name="element" type="Test:base"/> + <xsd:attribute name="attribute" type="Test:base"/> + +</xsd:schema> diff --git a/xsd/tests/schema/import/schemas/importee.xsd b/xsd/tests/schema/import/schemas/importee.xsd new file mode 100644 index 0000000..9b03315 --- /dev/null +++ b/xsd/tests/schema/import/schemas/importee.xsd @@ -0,0 +1,15 @@ +<?xml version="1.0" ?> +<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.w3.org/2001/XMLSchema XMLSchema.xsd" + xmlns:test="http://www.codesynthesis.com/xmlns/test" + targetNamespace="http://www.codesynthesis.com/xmlns/test"> + + + <xsd:simpleType name="base"> + <xsd:restriction base="xsd:string"/> + </xsd:simpleType> + + <xsd:element name="base_e" type="test:base"/> + +</xsd:schema> diff --git a/xsd/tests/schema/include/includer.xsd b/xsd/tests/schema/include/includer.xsd new file mode 100644 index 0000000..c93ea18 --- /dev/null +++ b/xsd/tests/schema/include/includer.xsd @@ -0,0 +1,17 @@ +<?xml version="1.0" ?> +<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.w3.org/2001/XMLSchema XMLSchema.xsd" + xmlns:Test="http://www.codesynthesis.com/xmlns/test" + targetNamespace="http://www.codesynthesis.com/xmlns/test"> + + <xsd:include schemaLocation="schemas/includee.xsd"/> + + <xsd:simpleType name="derived"> + <xsd:restriction base="Test:base"/> + </xsd:simpleType> + + <xsd:element name="element" type="Test:base"/> + <xsd:attribute name="attribute" type="Test:base"/> + +</xsd:schema> diff --git a/xsd/tests/schema/include/schemas/includee.xsd b/xsd/tests/schema/include/schemas/includee.xsd new file mode 100644 index 0000000..0a928f5 --- /dev/null +++ b/xsd/tests/schema/include/schemas/includee.xsd @@ -0,0 +1,14 @@ +<?xml version="1.0" ?> +<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.w3.org/2001/XMLSchema XMLSchema.xsd" + xmlns:test="http://www.codesynthesis.com/xmlns/test" + targetNamespace="http://www.codesynthesis.com/xmlns/test"> + + <xsd:simpleType name="base"> + <xsd:restriction base="xsd:string"/> + </xsd:simpleType> + + <xsd:element name="base_e" type="test:base"/> + +</xsd:schema> diff --git a/xsd/tests/schema/inheritance/cycle.xsd b/xsd/tests/schema/inheritance/cycle.xsd new file mode 100644 index 0000000..c705311 --- /dev/null +++ b/xsd/tests/schema/inheritance/cycle.xsd @@ -0,0 +1,34 @@ +<?xml version="1.0" ?> +<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.w3.org/2001/XMLSchema XMLSchema.xsd" + xmlns:test="http://www.codesynthesis.com/xmlns/test" + targetNamespace="http://www.codesynthesis.com/xmlns/test"> + + <xsd:complexType name="Base"> + <xsd:sequence> + <xsd:element name="e1"> + <xsd:complexType> + <xsd:complexContent> + <xsd:extension base="test:Derived"> + <xsd:sequence> + <xsd:element name="e2" type="xsd:int"/> + </xsd:sequence> + </xsd:extension> + </xsd:complexContent> + </xsd:complexType> + </xsd:element> + </xsd:sequence> + </xsd:complexType> + + <xsd:complexType name="Derived"> + <xsd:complexContent> + <xsd:extension base="test:Base"> + <xsd:sequence> + <xsd:element name="e3" type="xsd:int"/> + </xsd:sequence> + </xsd:extension> + </xsd:complexContent> + </xsd:complexType> + +</xsd:schema> diff --git a/xsd/tests/schema/inheritance/sourced-forward/includee.xsd b/xsd/tests/schema/inheritance/sourced-forward/includee.xsd new file mode 100644 index 0000000..531027d --- /dev/null +++ b/xsd/tests/schema/inheritance/sourced-forward/includee.xsd @@ -0,0 +1,10 @@ +<?xml version="1.0" ?> +<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.w3.org/2001/XMLSchema XMLSchema.xsd"> + + <xsd:simpleType name="Derived"> + <xsd:restriction base="Base"/> + </xsd:simpleType> + +</xsd:schema> diff --git a/xsd/tests/schema/inheritance/sourced-forward/includer.xsd b/xsd/tests/schema/inheritance/sourced-forward/includer.xsd new file mode 100644 index 0000000..7d18efc --- /dev/null +++ b/xsd/tests/schema/inheritance/sourced-forward/includer.xsd @@ -0,0 +1,14 @@ +<?xml version="1.0" ?> +<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.w3.org/2001/XMLSchema XMLSchema.xsd" + xmlns:test="http://www.codesynthesis.com/xmlns/test" + targetNamespace="http://www.codesynthesis.com/xmlns/test"> + + <xsd:include schemaLocation="includee.xsd"/> + + <xsd:simpleType name="Base"> + <xsd:restriction base="xsd:string"/> + </xsd:simpleType> + +</xsd:schema> diff --git a/xsd/tests/schema/list/anonymous/test.xsd b/xsd/tests/schema/list/anonymous/test.xsd new file mode 100644 index 0000000..7db39ba --- /dev/null +++ b/xsd/tests/schema/list/anonymous/test.xsd @@ -0,0 +1,16 @@ +<?xml version="1.0" ?> +<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.w3.org/2001/XMLSchema XMLSchema.xsd" + xmlns:test="http://www.codesynthesis.com/xmlns/test" + targetNamespace="http://www.codesynthesis.com/xmlns/test"> + + <xsd:simpleType name="IntList"> + <xsd:list> + <xsd:simpleType> + <xsd:restriction base="xsd:int"/> + </xsd:simpleType> + </xsd:list> + </xsd:simpleType> + +</xsd:schema> diff --git a/xsd/tests/schema/list/any-simple-type/test.xsd b/xsd/tests/schema/list/any-simple-type/test.xsd new file mode 100644 index 0000000..29fe95c --- /dev/null +++ b/xsd/tests/schema/list/any-simple-type/test.xsd @@ -0,0 +1,12 @@ +<?xml version="1.0" ?> +<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.w3.org/2001/XMLSchema XMLSchema.xsd" + xmlns:test="http://www.codesynthesis.com/xmlns/test" + targetNamespace="http://www.codesynthesis.com/xmlns/test"> + + <xsd:simpleType name="any"> + <xsd:list itemType="xsd:anySimpleType"/> + </xsd:simpleType> + +</xsd:schema> diff --git a/xsd/tests/schema/list/driver.cxx b/xsd/tests/schema/list/driver.cxx new file mode 100644 index 0000000..7bd46e9 --- /dev/null +++ b/xsd/tests/schema/list/driver.cxx @@ -0,0 +1,13 @@ +#include "test.hxx" + +typedef xmlns::test::IntList<void, int> IntListImpl; +typedef xmlns::test::IntList<void, void> IntListVoidImpl; +typedef xmlns::test::IntComplex<void, int, char*> IntComplexImpl; + +int +main () +{ + IntListImpl int_list_impl; + IntListVoidImpl int_list_void_impl; + IntComplexImpl int_complex_impl; +} diff --git a/xsd/tests/schema/list/test.xsd b/xsd/tests/schema/list/test.xsd new file mode 100644 index 0000000..e16a58d --- /dev/null +++ b/xsd/tests/schema/list/test.xsd @@ -0,0 +1,72 @@ +<?xml version="1.0" ?> +<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.w3.org/2001/XMLSchema XMLSchema.xsd" + xmlns:test="http://www.codesynthesis.com/xmlns/test" + targetNamespace="http://www.codesynthesis.com/xmlns/test"> + + <xsd:simpleType name="IntList"> + <xsd:list itemType="xsd:int"/> + </xsd:simpleType> + + <!-- local element with anonymous list inside. --> + + <xsd:complexType name="Foo"> + <xsd:sequence> + <xsd:element name="string-list"> + <xsd:simpleType> + <xsd:list itemType="xsd:string"/> + </xsd:simpleType> + </xsd:element> + </xsd:sequence> + </xsd:complexType> + + + <!-- global element with anonymous list inside. --> + + <xsd:element name="string-list"> + <xsd:simpleType> + <xsd:list itemType="xsd:string"/> + </xsd:simpleType> + </xsd:element> + + + + <!-- global element and global list with conflicting names --> + + <xsd:simpleType name="long-list"> + <xsd:list itemType="xsd:long"/> + </xsd:simpleType> + + <xsd:element name="long-list" type="test:long-list"/> + + + <!-- forward reference --> + + <xsd:simpleType name="int-list"> + <xsd:list itemType="test:int"/> + </xsd:simpleType> + + <xsd:simpleType name="int"> + <xsd:restriction base="xsd:int"/> + </xsd:simpleType> + + + <!-- inheritance from list --> + + <xsd:complexType name="IntComplex"> + <xsd:simpleContent> + <xsd:extension base="test:IntList"> + <xsd:attribute name="foo" type="xsd:string"/> + </xsd:extension> + </xsd:simpleContent> + </xsd:complexType> + + <xsd:complexType name="IntComplexEmpty"> + <xsd:simpleContent> + <xsd:extension base="test:IntList"> + </xsd:extension> + </xsd:simpleContent> + </xsd:complexType> + +</xsd:schema> diff --git a/xsd/tests/schema/no-namespace/test.xsd b/xsd/tests/schema/no-namespace/test.xsd new file mode 100644 index 0000000..b426e8a --- /dev/null +++ b/xsd/tests/schema/no-namespace/test.xsd @@ -0,0 +1,15 @@ +<?xml version="1.0" ?> +<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.w3.org/2001/XMLSchema XMLSchema.xsd"> + + + <xsd:complexType name="Test"> + <xsd:sequence> + <xsd:element name="name" type="xsd:string"/> + </xsd:sequence> + </xsd:complexType> + + <xsd:element name="test" type="Test"/> + +</xsd:schema> diff --git a/xsd/tests/schema/recursive/test.xsd b/xsd/tests/schema/recursive/test.xsd new file mode 100644 index 0000000..6efc7d2 --- /dev/null +++ b/xsd/tests/schema/recursive/test.xsd @@ -0,0 +1,43 @@ +<?xml version="1.0" ?> +<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.w3.org/2001/XMLSchema XMLSchema.xsd" + xmlns:test="http://www.codesynthesis.com/xmlns/test" + targetNamespace="http://www.codesynthesis.com/xmlns/test"> + + <xsd:element name="BooleanExpression"> + <xsd:complexType> + <xsd:choice> + <xsd:element name="literal" type="xsd:boolean"/> + <xsd:element ref="test:AND"/> + <xsd:element ref="test:OR"/> + <xsd:element ref="test:XOR"/> + </xsd:choice> + </xsd:complexType> + </xsd:element> + + <xsd:element name="AND"> + <xsd:complexType> + <xsd:sequence> + <xsd:element ref="test:BooleanExpression" maxOccurs="2"/> + </xsd:sequence> + </xsd:complexType> + </xsd:element> + + <xsd:element name="OR"> + <xsd:complexType> + <xsd:sequence> + <xsd:element ref="test:BooleanExpression" maxOccurs="2"/> + </xsd:sequence> + </xsd:complexType> + </xsd:element> + + <xsd:element name="XOR"> + <xsd:complexType> + <xsd:sequence> + <xsd:element ref="test:BooleanExpression" maxOccurs="2"/> + </xsd:sequence> + </xsd:complexType> + </xsd:element> + +</xsd:schema> diff --git a/xsd/tests/schema/ref-type/idref.xsd b/xsd/tests/schema/ref-type/idref.xsd new file mode 100644 index 0000000..49ebe40 --- /dev/null +++ b/xsd/tests/schema/ref-type/idref.xsd @@ -0,0 +1,42 @@ +<?xml version="1.0"?> +<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns:xse="http://www.codesynthesis.com/xmlns/xml-schema-extension" + xmlns:test="http://www.codesynthesis.com/xmlns/test" + targetNamespace="http://www.codesynthesis.com/xmlns/test"> + + <!-- attribute --> + + <xsd:attribute name="attribute" type="xsd:IDREF" xse:refType="test:a-author"/> + + <xsd:complexType name="a-author"> + <xsd:sequence> + <xsd:element name="name" type="xsd:string"/> + </xsd:sequence> + <xsd:attribute name="recommends" type="xsd:IDREF" xse:refType="test:a-author"/> + </xsd:complexType> + + + <!-- element --> + + <xsd:element name="element" type="xsd:IDREF" xse:refType="test:e-author"/> + + <xsd:complexType name="e-author"> + <xsd:sequence> + <xsd:element name="recommends" type="xsd:IDREF" xse:refType="test:e-author"/> + </xsd:sequence> + </xsd:complexType> + + <!-- base --> + + <xsd:simpleType name="author-ref"> + <xsd:restriction base="xsd:IDREF" xse:refType="test:e-author"/> + </xsd:simpleType> + + + <!-- itemType --> + + <xsd:simpleType name="author-refs"> + <xsd:list itemType="xsd:IDREF" xse:refType="test:e-author"/> + </xsd:simpleType> + +</xsd:schema> diff --git a/xsd/tests/schema/ref-type/idrefs.xsd b/xsd/tests/schema/ref-type/idrefs.xsd new file mode 100644 index 0000000..b68ed03 --- /dev/null +++ b/xsd/tests/schema/ref-type/idrefs.xsd @@ -0,0 +1,43 @@ +<?xml version="1.0"?> +<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns:xse="http://www.codesynthesis.com/xmlns/xml-schema-extension" + xmlns:test="http://www.codesynthesis.com/xmlns/test" + targetNamespace="http://www.codesynthesis.com/xmlns/test"> + + <!-- attribute --> + + <xsd:attribute name="attribute" type="xsd:IDREFS" xse:refType="test:a-author"/> + + <xsd:complexType name="a-author"> + <xsd:sequence> + <xsd:element name="name" type="xsd:string"/> + </xsd:sequence> + <xsd:attribute name="recommends" type="xsd:IDREFS" xse:refType="test:a-author"/> + </xsd:complexType> + + + <!-- element --> + + <xsd:element name="element" type="xsd:IDREFS" xse:refType="test:e-author"/> + + <xsd:complexType name="e-author"> + <xsd:sequence> + <xsd:element name="recommends" type="xsd:IDREFS" xse:refType="test:e-author"/> + </xsd:sequence> + </xsd:complexType> + + <!-- base --> + + <xsd:simpleType name="author-refs"> + <xsd:restriction base="xsd:IDREFS" xse:refType="test:e-author"/> + </xsd:simpleType> + + + <!-- itemType - illegal --> + <!-- + <xsd:simpleType name="author-refss"> + <xsd:list itemType="xsd:IDREFS" xse:refType="test:e-author"/> + </xsd:simpleType> + --> + +</xsd:schema> diff --git a/xsd/tests/schema/ref-type/invalid-0.xsd b/xsd/tests/schema/ref-type/invalid-0.xsd new file mode 100644 index 0000000..7ce82ed --- /dev/null +++ b/xsd/tests/schema/ref-type/invalid-0.xsd @@ -0,0 +1,17 @@ +<?xml version="1.0"?> +<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns:xse="http://www.codesynthesis.com/xmlns/xml-schema-extension" + xmlns:test="http://www.codesynthesis.com/xmlns/test" + xmlns:phony="http://www.codesynthesis.com/xmlns/phony" + targetNamespace="http://www.codesynthesis.com/xmlns/test"> + + <!-- unresolvable namespace prefix --> + + <xsd:attribute name="attribute1" type="xsd:IDREF" xse:refType="author"/> + <xsd:attribute name="attribute2" type="xsd:IDREF" xse:refType="t:author"/> + + <!-- unresolvable namespace --> + + <xsd:attribute name="attribute3" type="xsd:IDREF" xse:refType="phony:author"/> + +</xsd:schema> diff --git a/xsd/tests/schema/ref-type/invalid-1.xsd b/xsd/tests/schema/ref-type/invalid-1.xsd new file mode 100644 index 0000000..d989065 --- /dev/null +++ b/xsd/tests/schema/ref-type/invalid-1.xsd @@ -0,0 +1,11 @@ +<?xml version="1.0"?> +<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns:xse="http://www.codesynthesis.com/xmlns/xml-schema-extension" + xmlns:test="http://www.codesynthesis.com/xmlns/test" + targetNamespace="http://www.codesynthesis.com/xmlns/test"> + + <!-- unresolvable type --> + + <xsd:attribute name="attribute" type="xsd:IDREF" xse:refType="test:author"/> + +</xsd:schema> diff --git a/xsd/tests/schema/restriction/test.xsd b/xsd/tests/schema/restriction/test.xsd new file mode 100644 index 0000000..331ba78 --- /dev/null +++ b/xsd/tests/schema/restriction/test.xsd @@ -0,0 +1,67 @@ +<?xml version="1.0" ?> +<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.w3.org/2001/XMLSchema XMLSchema.xsd" + xmlns:test="http://www.codesynthesis.com/xmlns/test" + targetNamespace="http://www.codesynthesis.com/xmlns/test"> + + <!-- Simple content. --> + + <xsd:complexType name="SimpleBase"> + <xsd:simpleContent> + <xsd:extension base="xsd:string"> + <xsd:attribute name="lang" type="xsd:language"/> + <xsd:attribute name="note" type="xsd:string"/> + </xsd:extension> + </xsd:simpleContent> + </xsd:complexType> + + <xsd:complexType name="SimpleType"> + <xsd:simpleContent> + <xsd:restriction base="test:SimpleBase"> + <xsd:maxLength value="255"/> + <xsd:attribute name="lang"> + <xsd:simpleType> + <xsd:restriction base="xsd:language"> + <xsd:enumeration value="en"/> + <xsd:enumeration value="es"/> + </xsd:restriction> + </xsd:simpleType> + </xsd:attribute> + </xsd:restriction> + </xsd:simpleContent> + </xsd:complexType> + + <!-- Complex content. --> + + <xsd:complexType name="ComplexBase"> + <xsd:sequence> + <xsd:element name="lang" type="xsd:language"/> + <xsd:element name="note" type="xsd:string" minOccurs="0"/> + </xsd:sequence> + </xsd:complexType> + + + <xsd:complexType name="ComplexType"> + <xsd:complexContent> + <xsd:restriction base="test:ComplexBase"> + <xsd:sequence> + <xsd:element name="lang" type="xsd:language"/> + <xsd:element name="note" type="xsd:string"/> + </xsd:sequence> + </xsd:restriction> + </xsd:complexContent> + </xsd:complexType> + + <xsd:complexType name="AnyType"> + <xsd:complexContent> + <xsd:restriction base="xsd:anyType"> + <xsd:sequence> + <xsd:element name="lang" type="xsd:language"/> + <xsd:element name="note" type="xsd:string"/> + </xsd:sequence> + </xsd:restriction> + </xsd:complexContent> + </xsd:complexType> + +</xsd:schema> diff --git a/xsd/tests/schema/union/test.xsd b/xsd/tests/schema/union/test.xsd new file mode 100644 index 0000000..706f6f2 --- /dev/null +++ b/xsd/tests/schema/union/test.xsd @@ -0,0 +1,65 @@ +<?xml version="1.0" ?> +<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.w3.org/2001/XMLSchema XMLSchema.xsd" + xmlns:test="http://www.codesynthesis.com/xmlns/test" + targetNamespace="http://www.codesynthesis.com/xmlns/test"> + + <xsd:simpleType name="IntUnion"> + <xsd:union memberTypes="xsd:int xsd:string"/> + </xsd:simpleType> + + <!-- local element with anonymous union inside. --> + + <xsd:complexType name="Foo"> + <xsd:sequence> + <xsd:element name="string-union"> + <xsd:simpleType> + <xsd:union memberTypes="xsd:int xsd:string"/> + </xsd:simpleType> + </xsd:element> + </xsd:sequence> + </xsd:complexType> + + + <!-- global element with anonymous union inside. --> + + <xsd:element name="string-union"> + <xsd:simpleType> + <xsd:union memberTypes="xsd:int xsd:string"/> + </xsd:simpleType> + </xsd:element> + + + + <!-- global element and global union with conflicting names --> + + <xsd:simpleType name="long-union"> + <xsd:union memberTypes="xsd:long xsd:string"/> + </xsd:simpleType> + + <xsd:element name="long-union" type="test:long-union"/> + + + <!-- forward reference --> + + <xsd:simpleType name="int-union"> + <xsd:union memberTypes="test:int xsd:string"/> + </xsd:simpleType> + + <xsd:simpleType name="int"> + <xsd:restriction base="xsd:int"/> + </xsd:simpleType> + + + <!-- inheritance from union --> + + <xsd:complexType name="IntComplex"> + <xsd:simpleContent> + <xsd:extension base="test:IntUnion"> + <xsd:attribute name="foo" type="xsd:string"/> + </xsd:extension> + </xsd:simpleContent> + </xsd:complexType> + +</xsd:schema> diff --git a/xsd/version b/xsd/version new file mode 100644 index 0000000..15a2799 --- /dev/null +++ b/xsd/version @@ -0,0 +1 @@ +3.3.0 diff --git a/xsd/xsd/cxx/elements.cxx b/xsd/xsd/cxx/elements.cxx new file mode 100644 index 0000000..d2600dc --- /dev/null +++ b/xsd/xsd/cxx/elements.cxx @@ -0,0 +1,1319 @@ +// file : xsd/cxx/elements.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <cxx/elements.hxx> + +#include <backend-elements/regex.hxx> + +#include <cctype> // std::toupper +#include <memory> +#include <sstream> +#include <fstream> +#include <iostream> + +using std::wcerr; +using std::endl; + +namespace CXX +{ + // + // + wchar_t + upcase (wchar_t c) + { + return std::toupper (c); + } + + namespace + { + WideChar const* keywords[] = { + L"NULL", + L"and", + L"asm", + L"auto", + L"bitand", + L"bitor", + L"bool", + L"break", + L"case", + L"catch", + L"char", + L"class", + L"compl", + L"const", + L"const_cast", + L"continue", + L"default", + L"delete", + L"do", + L"double", + L"dynamic_cast", + L"else", + L"end_eq", + L"enum", + L"explicit", + L"export", + L"extern", + L"false", + L"float", + L"for", + L"friend", + L"goto", + L"if", + L"inline", + L"int", + L"long", + L"mutable", + L"namespace", + L"new", + L"not", + L"not_eq", + L"operator", + L"or", + L"or_eq", + L"private", + L"protected", + L"public", + L"register", + L"reinterpret_cast", + L"return", + L"short", + L"signed", + L"sizeof", + L"static", + L"static_cast", + L"struct", + L"switch", + L"template", + L"this", + L"throw", + L"true", + L"try", + L"typedef", + L"typeid", + L"typename", + L"union", + L"unsigned", + L"using", + L"virtual", + L"void", + L"volatile", + L"wchar_t", + L"while", + L"xor", + L"xor_eq" + }; + } + + // Context + // + + Context:: + Context (std::wostream& o, + SemanticGraph::Schema& root, + SemanticGraph::Path const& path, + StringLiteralMap const* string_literal_map_, + NarrowString const& char_type__, + NarrowString const& char_encoding__, + Boolean include_with_brackets__, + NarrowString const& include_prefix__, + NarrowString const& esymbol, + Containers::Vector<NarrowString> const& nsm, + Containers::Vector<NarrowString> const& nsr, + Boolean trace_namespace_regex_, + Containers::Vector<NarrowString> const& ir, + Boolean trace_include_regex_, + Boolean inline_, + Containers::Vector<NarrowString> const& reserved_name) + : os (o), + schema_root (root), + schema_path (schema_path_), + char_type (char_type_), + char_encoding (char_encoding_), + L (L_), + string_type (string_type_), + string_literal_map (string_literal_map_), + include_with_brackets (include_with_brackets_), + include_prefix (include_prefix_), + type_exp (type_exp_), + inst_exp (inst_exp_), + inl (inl_), + ns_mapping_cache (ns_mapping_cache_), + schema_path_ (path), + xs_ns_ (0), + char_type_ (char_type__), + char_encoding_ (char_encoding__), + L_ (char_type == L"wchar_t" ? L"L" : L""), + include_with_brackets_ (include_with_brackets__), + include_prefix_ (include_prefix__), + type_exp_ (esymbol ? esymbol + " " : esymbol), + inst_exp_ (esymbol ? esymbol + "\n" : esymbol), + inl_ (inline_ ? L"inline\n" : L""), + cxx_id_expr_ (L"^(::)?([a-zA-Z_]\\w*)(::[a-zA-Z_]\\w*)*$"), + cxx_id_expr (cxx_id_expr_), + trace_namespace_regex (trace_namespace_regex_), + urn_mapping_ (L"#^urn.*:([a-zA-Z_].*)$#$1#"), + urn_mapping (urn_mapping_), + nsr_mapping (nsr_mapping_), + nsm_mapping (nsm_mapping_), + include_mapping (include_mapping_), + trace_include_regex (trace_include_regex_), + reserved_name_map (reserved_name_map_), + keyword_set (keyword_set_) + { + // Resolve and cache XML Schema namespace. + // + { + SemanticGraph::Nameable* n; + + if (schema_root.names_begin ()->name () == + L"http://www.w3.org/2001/XMLSchema") + { + // schema_root is the XML Schema itself. + // + n = &schema_root.names_begin ()->named (); + } + else + { + // Otherwise, the first used schema is implied XML Schema. + // + SemanticGraph::Uses& u = *schema_root.uses_begin (); + assert (u.is_a<SemanticGraph::Implies> ()); + n = &u.schema ().names_begin ()->named (); + } + + xs_ns_ = dynamic_cast<SemanticGraph::Namespace*> (n); + } + + // String type. + // + if (char_type == L"char") + string_type_ = L"::std::string"; + else if (char_type == L"wchar_t") + string_type_ = L"::std::wstring"; + else + string_type_ = L"::std::basic_string< " + char_type + L" >"; + + // Default encoding. + // + if (!char_encoding) + { + if (char_type == L"char") + char_encoding = L"utf8"; + else + char_encoding = L"auto"; + } + + // Default mapping. + // + nsr_mapping_.push_back ( + Regex (L"#^.* (.*?/)??"L"(([a-zA-Z_]\\w*)(/[a-zA-Z_]\\w*)*)/?$#$2#")); + nsr_mapping_.push_back ( + Regex (L"#^.* http://www\\.w3\\.org/2001/XMLSchema$#xml_schema#")); + + // Custom regex mapping. + // + for (Containers::Vector<NarrowString>::ConstIterator + i (nsr.begin ()), e (nsr.end ()); i != e; ++i) + { + nsr_mapping_.push_back (Regex (*i)); + } + + // Custom direct mapping. + // + for (Containers::Vector<NarrowString>::ConstIterator + i (nsm.begin ()), e (nsm.end ()); i != e; ++i) + { + String s (*i); + + // Split the string in two parts at the last '='. + // + Size pos (s.rfind ('=')); + + if (pos == String::npos) + throw InvalidNamespaceMapping (s, "delimiter ('=') not found"); + + // Empty xml_ns designates the no-namespace case. + // + String xml_ns (s, 0, pos); + String cxx_ns (s, pos + 1); + + if (!cxx_ns.empty () && !cxx_id_expr.match (cxx_ns)) + throw InvalidNamespaceMapping (s, "invalid C++ identifier"); + + nsm_mapping_[xml_ns] = cxx_ns; + } + + // Include path regex + // + for (Containers::Vector<NarrowString>::ConstIterator + i (ir.begin ()), e (ir.end ()); i != e; ++i) + { + include_mapping_.push_back (Regex (*i)); + } + + // Reserved names. + // + for (Containers::Vector<NarrowString>::ConstIterator + i (reserved_name.begin ()), e (reserved_name.end ()); i != e; ++i) + { + String s (*i); + + // Split the string in two parts at '='. + // + Size pos (s.find ('=')); + + if (pos == String::npos) + reserved_name_map_[s] = L""; + else + reserved_name_map_[String (s, 0, pos)] = String (s, pos + 1); + } + + // Populate the keyword set. + // + for (Size i (0); i < sizeof (keywords) / sizeof (char*); ++i) + keyword_set_.insert (keywords[i]); + } + + String Context:: + ns_name (SemanticGraph::Namespace& ns) + { + using SemanticGraph::Schema; + using SemanticGraph::Includes; + using SemanticGraph::Imports; + using SemanticGraph::Implies; + using SemanticGraph::Sources; + + String tmp; + MapMapping::ConstIterator i (nsm_mapping.find (ns.name ())); + + if (i != nsm_mapping.end ()) + { + tmp = i->second; + } + else + { + SemanticGraph::Path path; + Schema& schema (dynamic_cast<Schema&> (ns.scope ())); + + if (schema.used_p ()) + { + // Here we need to detect a special multi-schema compilation + // case where the root schemas are imported into a special + // schema that doesn't have a namespace. + // + SemanticGraph::Uses& u (*schema.used_begin ()); + SemanticGraph::Schema& s (u.user ()); + + if (s.names_begin () != s.names_end ()) + path = u.path (); + } + else + path = schema_path; + + String pair; + + if (!path.empty ()) + { + // Try to use the portable representation of the path. If that + // fails, fall back to the native representation. + // + try + { + pair = path.string (); + } + catch (SemanticGraph::InvalidPath const&) + { +#if !defined(BOOST_FILESYSTEM_VERSION) || BOOST_FILESYSTEM_VERSION == 2 + pair = path.native_file_string (); +#else + pair = path.string (); +#endif + } + } + + pair += L' ' + ns.name (); + + // Check cache first + // + MappingCache::ConstIterator i (ns_mapping_cache.find (pair)); + + if (i != ns_mapping_cache.end ()) + { + tmp = i->second; + } + else + { + if (trace_namespace_regex) + wcerr << "namespace: '" << pair << "'" << endl; + + Boolean found (false); + Regex colon (L"#/#::#"); + + for (RegexMapping::ConstReverseIterator e (nsr_mapping.rbegin ()); + e != nsr_mapping.rend (); ++e) + { + if (trace_namespace_regex) + wcerr << "try: '" << e->pattern () << "' : "; + + if (e->match (pair)) + { + tmp = e->merge (pair); + tmp = colon.merge (tmp); // replace `/' with `::' + + // Check the result. + // + found = cxx_id_expr.match (tmp); + + if (trace_namespace_regex) + wcerr << "'" << tmp << "' : "; + } + + if (trace_namespace_regex) + wcerr << (found ? '+' : '-') << endl; + + if (found) + break; + } + + if (!found) + { + String const& n (ns.name ()); + + // Check if the name is valid by itself. + // + if (n.empty ()) + { + // Empty name denotes a no-namespace case. + // + tmp = n; + } + else + { + tmp = colon.merge (n); // replace `/' with `::' + + if (!cxx_id_expr.match (tmp)) + { + // See if this is a urn-style namespace. + // + if (urn_mapping.match (n)) + { + Regex filter (L"#[.:-]#_#"); + tmp = urn_mapping.merge (n); + tmp = filter.merge (tmp); + + if (!cxx_id_expr.match (tmp)) + throw NoNamespaceMapping ( + ns.file (), ns.line (), ns.column (), ns.name ()); + } + else + throw NoNamespaceMapping ( + ns.file (), ns.line (), ns.column (), ns.name ()); + } + } + } + + // Add the mapping to the cache. + // + ns_mapping_cache[pair] = tmp; + } + } + + + // Parse resulting namespace string and id() each name. + // + String r; + String::size_type b (0), e; + + do + { + e = tmp.find (L"::", b); + + String name (tmp, b, e == tmp.npos ? e : e - b); + + if (!name.empty ()) + r += L"::" + escape (name); + + b = e; + + if (b == tmp.npos) + break; + + b += 2; + + } while (true); + + return r; + } + + SemanticGraph::Namespace& Context:: + xs_ns () + { + return *xs_ns_; + } + + String Context:: + xs_ns_name () + { + return ns_name (*xs_ns_); + } + + SemanticGraph::Namespace& Context:: + namespace_ (SemanticGraph::Nameable& n) + { + // The basic idea goes like this: go up Names edges until you + // reach Namespace. There are, however, anonymous types which + // need special handling. In the case of an anonymous type we + // will go up the first Belongs edge (because the first edge + // is where the type was defined. + // + + if (n.named_p ()) + { + SemanticGraph::Scope& s (n.scope ()); + + SemanticGraph::Namespace* ns ( + dynamic_cast<SemanticGraph::Namespace*> (&n)); + + return ns ? *ns : namespace_ (s); + } + else + { + SemanticGraph::Type& t (dynamic_cast<SemanticGraph::Type&> (n)); + + SemanticGraph::Belongs& b (*t.classifies_begin ()); + + return namespace_ (b.instance ()); + } + } + + String Context:: + xml_ns_name (SemanticGraph::Nameable& n) + { + return namespace_ (n).name (); + } + + String Context:: + fq_name (SemanticGraph::Nameable& n, Char const* name_key) + { + using namespace SemanticGraph; + + String r; + + if (dynamic_cast<Schema*> (&n)) + { + return L""; // Map to global namespace. + } + else if (SemanticGraph::Namespace* ns = + dynamic_cast<SemanticGraph::Namespace*> (&n)) + { + r = ns_name (*ns); + } + else + { + r = fq_name (n.scope ()); + r += L"::"; + r += n.context ().get<String> (name_key); + } + + return r; + } + + SemanticGraph::Type& Context:: + ultimate_base (SemanticGraph::Complex& c) + { + using namespace SemanticGraph; + + Type* b (&c.inherits ().base ()); + + while (true) + { + Complex* cb (dynamic_cast<Complex*> (b)); + + if (cb != 0 && cb->inherits_p ()) + { + b = &cb->inherits ().base (); + continue; + } + + break; + } + + return *b; + } + + String Context:: + escape (String const& name) + { + String r; + Size n (name.size ()); + + // In most common cases we will have that many chars. + // + r.reserve (n); + + for (Size i (0); i < n; ++i) + { + Boolean first (i == 0); + + UnsignedLong u (unicode_char (name, i)); // May advance i. + + if (first) + { + if (!((u >= 'a' && u <= 'z') || + (u >= 'A' && u <= 'Z') || + u == '_')) + r = (u >= '0' && u <= '9') ? L"cxx_" : L"cxx"; + } + + if (!((u >= 'a' && u <= 'z') || + (u >= 'A' && u <= 'Z') || + (u >= '0' && u <= '9') || + u == '_')) + r.push_back ('_'); + else + r.push_back (static_cast<WideChar> (u)); + } + + if (r.empty ()) + r = L"cxx"; + + // Custom reserved words. + // + ReservedNameMap::ConstIterator i (reserved_name_map.find (r)); + + if (i != reserved_name_map.end ()) + { + if (i->second) + return i->second; + else + r += L'_'; + } + + // Keywords + // + if (keyword_set.find (r) != keyword_set.end ()) + { + r += L'_'; + + // Re-run custom words. + // + i = reserved_name_map.find (r); + + if (i != reserved_name_map.end ()) + { + if (i->second) + return i->second; + else + r += L'_'; + } + } + + return r; + } + + // String escaping. + // + + String + charlit (UnsignedLong u) + { + String r ("\\x"); + Boolean lead (true); + + for (Long i (7); i >= 0; --i) + { + UnsignedLong x ((u >> (i * 4)) & 0x0F); + + if (lead) + { + if (x == 0) + continue; + + lead = false; + } + + r += x < 10 ? ('0' + x) : ('A' + x - 10); + } + + return r; + } + + String + strlit_ascii (String const& str) + { + String r; + Size n (str.size ()); + + // In most common cases we will have that many chars. + // + r.reserve (n + 2); + + r += '"'; + + Boolean escape (false); + + for (Size i (0); i < n; ++i) + { + UnsignedLong u (Context::unicode_char (str, i)); // May advance i. + + // [128 - ] - unrepresentable + // 127 - \x7F + // [32 - 126] - as is + // [0 - 31] - \X or \xXX + // + + if (u < 32 || u == 127) + { + switch (u) + { + case L'\n': + { + r += L"\\n"; + break; + } + case L'\t': + { + r += L"\\t"; + break; + } + case L'\v': + { + r += L"\\v"; + break; + } + case L'\b': + { + r += L"\\b"; + break; + } + case L'\r': + { + r += L"\\r"; + break; + } + case L'\f': + { + r += L"\\f"; + break; + } + case L'\a': + { + r += L"\\a"; + break; + } + default: + { + r += charlit (u); + escape = true; + break; + } + } + } + else if (u < 127) + { + if (escape) + { + // Close and open the string so there are no clashes. + // + r += '"'; + r += '"'; + + escape = false; + } + + switch (u) + { + case L'"': + { + r += L"\\\""; + break; + } + case L'\\': + { + r += L"\\\\"; + break; + } + default: + { + r += static_cast<WideChar> (u); + break; + } + } + } + else + { + // Unrepresentable character. + // + throw UnrepresentableCharacter (str, i + 1); + } + } + + r += '"'; + + return r; + } + + const UnsignedLong utf8_first_char_mask[5] = + { + 0x00, 0x00, 0xC0, 0xE0, 0xF0 + }; + + String + strlit_utf8 (String const& str) + { + String r; + Size n (str.size ()); + + // In most common cases we will have that many chars. + // + r.reserve (n + 2); + + r += '"'; + + Boolean escape (false); + + for (Size i (0); i < n; ++i) + { + UnsignedLong u (Context::unicode_char (str, i)); // May advance i. + + // [128 - ] - UTF-8 + // 127 - \x7F + // [32 - 126] - as is + // [0 - 31] - \X or \xXX + // + + if (u < 32 || u == 127) + { + switch (u) + { + case L'\n': + { + r += L"\\n"; + break; + } + case L'\t': + { + r += L"\\t"; + break; + } + case L'\v': + { + r += L"\\v"; + break; + } + case L'\b': + { + r += L"\\b"; + break; + } + case L'\r': + { + r += L"\\r"; + break; + } + case L'\f': + { + r += L"\\f"; + break; + } + case L'\a': + { + r += L"\\a"; + break; + } + default: + { + r += charlit (u); + escape = true; + break; + } + } + } + else if (u < 127) + { + if (escape) + { + // Close and open the string so there are no clashes. + // + r += '"'; + r += '"'; + + escape = false; + } + + switch (u) + { + case L'"': + { + r += L"\\\""; + break; + } + case L'\\': + { + r += L"\\\\"; + break; + } + default: + { + r += static_cast<WideChar> (u); + break; + } + } + } + else + { + UnsignedLong count; + UnsignedLong tmp[4]; + + if (u < 0x800) + count = 2; + else if (u < 0x10000) + count = 3; + else if (u < 0x110000) + count = 4; + + switch (count) + { + case 4: + { + tmp[3] = (u | 0x80UL) & 0xBFUL; + u >>= 6; + } + case 3: + { + tmp[2] = (u | 0x80UL) & 0xBFUL; + u >>= 6; + } + case 2: + { + tmp[1] = (u | 0x80UL) & 0xBFUL; + u >>= 6; + } + case 1: + { + tmp[0] = u | utf8_first_char_mask[count]; + } + } + + for (UnsignedLong j (0); j < count; ++j) + r += charlit (tmp[j]); + + escape = true; + } + } + + r += '"'; + + return r; + } + + String + strlit_iso8859_1 (String const& str) + { + String r; + Size n (str.size ()); + + // In most common cases we will have that many chars. + // + r.reserve (n + 2); + + r += '"'; + + Boolean escape (false); + + for (Size i (0); i < n; ++i) + { + UnsignedLong u (Context::unicode_char (str, i)); // May advance i. + + // [256 - ] - unrepresentable + // [127 - 255] - \xXX + // [32 - 126] - as is + // [0 - 31] - \X or \xXX + // + + if (u < 32) + { + switch (u) + { + case L'\n': + { + r += L"\\n"; + break; + } + case L'\t': + { + r += L"\\t"; + break; + } + case L'\v': + { + r += L"\\v"; + break; + } + case L'\b': + { + r += L"\\b"; + break; + } + case L'\r': + { + r += L"\\r"; + break; + } + case L'\f': + { + r += L"\\f"; + break; + } + case L'\a': + { + r += L"\\a"; + break; + } + default: + { + r += charlit (u); + escape = true; + break; + } + } + } + else if (u < 127) + { + if (escape) + { + // Close and open the string so there are no clashes. + // + r += '"'; + r += '"'; + + escape = false; + } + + switch (u) + { + case L'"': + { + r += L"\\\""; + break; + } + case L'\\': + { + r += L"\\\\"; + break; + } + default: + { + r += static_cast<WideChar> (u); + break; + } + } + } + else if (u < 256) + { + r += charlit (u); + escape = true; + } + else + { + // Unrepresentable character. + // + throw UnrepresentableCharacter (str, i + 1); + } + } + + r += '"'; + + return r; + } + + String + strlit_utf32 (String const& str) + { + String r; + Size n (str.size ()); + + // In most common cases we will have that many chars. + // + r.reserve (n + 3); + + r += L"L\""; + + Boolean escape (false); + + for (Size i (0); i < n; ++i) + { + UnsignedLong u (Context::unicode_char (str, i)); // May advance i. + + // [128 - ] - \xUUUUUUUU + // 127 - \x7F + // [32 - 126] - as is + // [0 - 31] - \X or \xXX + // + + if (u < 32 || u == 127) + { + switch (u) + { + case L'\n': + { + r += L"\\n"; + break; + } + case L'\t': + { + r += L"\\t"; + break; + } + case L'\v': + { + r += L"\\v"; + break; + } + case L'\b': + { + r += L"\\b"; + break; + } + case L'\r': + { + r += L"\\r"; + break; + } + case L'\f': + { + r += L"\\f"; + break; + } + case L'\a': + { + r += L"\\a"; + break; + } + default: + { + r += charlit (u); + escape = true; + break; + } + } + } + else if (u < 127) + { + if (escape) + { + // Close and open the string so there are no clashes. + // + r += L"\"L\""; + escape = false; + } + + switch (u) + { + case L'"': + { + r += L"\\\""; + break; + } + case L'\\': + { + r += L"\\\\"; + break; + } + default: + { + r += static_cast<WideChar> (u); + break; + } + } + } + else + { + r += charlit (u); + escape = true; + } + } + + r += '"'; + + return r; + } + + String Context:: + strlit (String const& str) + { + // First see if we have a custom mapping. + // + assert (string_literal_map != 0); + StringLiteralMap::ConstIterator i (string_literal_map->find (str)); + + if (i != string_literal_map->end ()) + return i->second; + + if (char_type == L"char") + { + if (char_encoding == L"utf8") + return strlit_utf8 (str); + else if (char_encoding == L"iso8859-1") + return strlit_iso8859_1 (str); + else + { + // For LCP, custom, and other unknown encodings, use ASCII. + // + return strlit_ascii (str); + } + } + else + return strlit_utf32 (str); + } + + String Context:: + comment (String const& str) + { + String r; + + WideChar const* s (str.c_str ()); + Size size (str.size ()); + + // In most common cases we will have that many chars. + // + r.reserve (size); + + for (WideChar const* p (s); p < s + size; ++p) + { + UnsignedLong u (unicode_char (p)); // May advance p. + + // We are going to treat \v, \f and \n as unrepresentable + // here even though they can be present in C++ source code. + // + if (u > 127 || (u < 32 && u != '\t')) + r += L'?'; + else + r += static_cast<WideChar> (u); + } + + return r; + } + + String Context:: + process_include_path (String const& name) const + { + String path (include_prefix + name); + + if (trace_include_regex) + wcerr << "include: '" << path << "'" << endl; + + String r; + Boolean found (false); + + for (RegexMapping::ConstReverseIterator e (include_mapping.rbegin ()); + e != include_mapping.rend (); ++e) + { + if (trace_include_regex) + wcerr << "try: '" << e->pattern () << "' : "; + + if (e->match (path)) + { + r = e->merge (path); + found = true; + + if (trace_include_regex) + wcerr << "'" << r << "' : "; + } + + if (trace_include_regex) + wcerr << (found ? '+' : '-') << endl; + + if (found) + break; + } + + if (!found) + r = path; + + if (!r.empty () && r[0] != L'"' && r[0] != L'<') + { + WideChar op (include_with_brackets ? L'<' : L'"'); + WideChar cl (include_with_brackets ? L'>' : L'"'); + r = op + r + cl; + } + + return r; + } + + // Namespace + // + + Void Namespace:: + pre (Type& n) + { + String ns (ctx_.ns_name (n)); + + String::size_type b (0), e; + + if (st_) + st_->enter (n, L"", ns ? false : true); + + do + { + e = ns.find (L"::", b); + + String name (ns, b, e == ns.npos ? e : e - b); + + if (!name.empty ()) + { + if (st_) + st_->enter (n, name, e == ns.npos); + + ctx_.os << "namespace " << name << "{"; + } + + b = e; + + if (b == ns.npos) + break; + + b += 2; + + } while (true); + } + + Void Namespace:: + post (Type& n) + { + String ns (ctx_.ns_name (n)); + + String::size_type b (0), e; + + do + { + e = ns.find (L"::", b); + + String name (ns, b, e == ns.npos ? e : e - b); + + if (!name.empty ()) + { + ctx_.os << "}"; + + if (st_) + st_->leave (); + } + + + b = e; + + if (b == ns.npos) + break; + + b += 2; + + } + while (true); + + if (st_) + st_->leave (); + } +} diff --git a/xsd/xsd/cxx/elements.hxx b/xsd/xsd/cxx/elements.hxx new file mode 100644 index 0000000..59938c5 --- /dev/null +++ b/xsd/xsd/cxx/elements.hxx @@ -0,0 +1,627 @@ +// file : xsd/cxx/elements.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef CXX_ELEMENTS_HXX +#define CXX_ELEMENTS_HXX + +#include <ostream> + +#include <cult/types.hxx> +#include <cult/containers/set.hxx> +#include <cult/containers/map.hxx> +#include <cult/containers/vector.hxx> + +#include <backend-elements/regex.hxx> + +#include <xsd-frontend/semantic-graph.hxx> +#include <xsd-frontend/traversal.hxx> + +#include <elements.hxx> +#include <cxx/literal-map.hxx> + +namespace CXX +{ + using std::endl; + typedef WideString String; + + + // On some platforms std::toupper can be something other than a + // function with C++ linkage. + // + wchar_t + upcase (wchar_t c); + + + // Exceptions. + // + + struct UnrepresentableCharacter + { + UnrepresentableCharacter (String const& str, Size pos) + : str_ (str), pos_ (pos) + { + } + + String const& + string () const + { + return str_; + } + + Size + position () const + { + return pos_; + } + + private: + String str_; + Size pos_; + }; + + struct NoNamespaceMapping + { + NoNamespaceMapping (SemanticGraph::Path const& file, + UnsignedLong line, + UnsignedLong column, + String const& ns) + : file_ (file), + line_ (line), + column_ (column), + ns_ (ns) + { + } + + + SemanticGraph::Path const& + file () const + { + return file_; + } + + UnsignedLong + line () const + { + return line_; + } + + UnsignedLong + column () const + { + return column_; + } + + String const& + ns () const + { + return ns_; + } + + private: + SemanticGraph::Path file_; + UnsignedLong line_; + UnsignedLong column_; + String ns_; + }; + + struct InvalidNamespaceMapping + { + InvalidNamespaceMapping (String const& mapping, + String const& reason) + : mapping_ (mapping), reason_ (reason) + { + } + + String const& + mapping () const + { + return mapping_; + } + + String const& + reason () const + { + return reason_; + } + + private: + String mapping_; + String reason_; + }; + + // + // + class Context + { + public: + typedef BackendElements::Regex::Pattern<WideChar> RegexPat; + typedef BackendElements::Regex::Expression<WideChar> Regex; + typedef Cult::Containers::Vector<Regex> RegexMapping; + typedef Cult::Containers::Map<String, String> MapMapping; + typedef Cult::Containers::Map<String, String> MappingCache; + + typedef Cult::Containers::Map<String, String> ReservedNameMap; + typedef Cult::Containers::Set<String> KeywordSet; + + public: + Context (std::wostream& o, + SemanticGraph::Schema& root, + SemanticGraph::Path const& path, + StringLiteralMap const* custom_literals_map, + NarrowString const& char_type__, + NarrowString const& char_encoding__, + Boolean include_with_brackets__, + NarrowString const& include_prefix__, + NarrowString const& esymbol, + Containers::Vector<NarrowString> const& nsm, + Containers::Vector<NarrowString> const& nsr, + Boolean trace_namespace_regex_, + Containers::Vector<NarrowString> const& include_regex, + Boolean trace_include_regex_, + Boolean inline_, + Containers::Vector<NarrowString> const& reserved_name); + + protected: + Context (Context& c) + : os (c.os), + schema_root (c.schema_root), + schema_path (c.schema_path), + char_type (c.char_type), + char_encoding (c.char_encoding), + L (c.L), + string_type (c.string_type), + string_literal_map (c.string_literal_map), + include_with_brackets (c.include_with_brackets), + include_prefix (c.include_prefix), + type_exp (c.type_exp), + inst_exp (c.inst_exp), + inl (c.inl), + ns_mapping_cache (c.ns_mapping_cache), + xs_ns_ (c.xs_ns_), + cxx_id_expr (c.cxx_id_expr), + trace_namespace_regex (c.trace_namespace_regex), + urn_mapping (c.urn_mapping), + nsr_mapping (c.nsr_mapping), + nsm_mapping (c.nsm_mapping), + include_mapping (c.include_mapping), + trace_include_regex (c.trace_include_regex), + reserved_name_map (c.reserved_name_map), + keyword_set (c.keyword_set) + { + } + + Context (Context& c, std::wostream& o) + : os (o), + schema_root (c.schema_root), + schema_path (c.schema_path), + char_type (c.char_type), + char_encoding (c.char_encoding), + L (c.L), + string_type (c.string_type), + string_literal_map (c.string_literal_map), + include_with_brackets (c.include_with_brackets), + include_prefix (c.include_prefix), + type_exp (c.type_exp), + inst_exp (c.inst_exp), + inl (c.inl), + ns_mapping_cache (c.ns_mapping_cache), + xs_ns_ (c.xs_ns_), + cxx_id_expr (c.cxx_id_expr), + trace_namespace_regex (c.trace_namespace_regex), + urn_mapping (c.urn_mapping), + nsr_mapping (c.nsr_mapping), + nsm_mapping (c.nsm_mapping), + include_mapping (c.include_mapping), + trace_include_regex (c.trace_include_regex), + reserved_name_map (c.reserved_name_map), + keyword_set (c.keyword_set) + { + } + + public: + static String + unclash (String const& name, String const& new_name) + { + return name == new_name ? (new_name + L'_') : new_name; + } + + public: + // Return UTF-32 character starting at this position. Position is + // advanced by 1 if this Unicode character takes more than one + // underlying character. + // + static UnsignedLong + unicode_char (String const& str, Size& pos); + + static UnsignedLong + unicode_char (WideChar const*& p); + + // Escape C++ keywords and illegal characters. + // + String + escape (String const&); + + // Create a string literal so that it can be used in C++ source + // code. It includes "". + // + String + strlit (String const&); + + // Escape the string so that it can be used in C++ comment. + // + String + comment (String const&); + + // Translate XML namespace name to a C++ identifier. + // + String + ns_name (SemanticGraph::Namespace&); + + // XML Schema namespace. + // + SemanticGraph::Namespace& + xs_ns (); + + // C++ namespace for XML Schema. + // + String + xs_ns_name (); + + // + // + SemanticGraph::Namespace& + namespace_ (SemanticGraph::Nameable& n); + + // Original XML namespace name. + // + String + xml_ns_name (SemanticGraph::Nameable& ns); + + + // Fully-qualified C++ name. + // + String + fq_name (SemanticGraph::Nameable& n, Char const* name_key = "name"); + + public: + static SemanticGraph::Type& + ultimate_base (SemanticGraph::Complex&); + + public: + String + process_include_path (String const&) const; + + public: + static Boolean + skip (SemanticGraph::Member& m) + { + // "Subsequent" local element. + // + return !m.scope ().is_a<SemanticGraph::Namespace> () && + m.context ().count ("min") == 0; + } + + static UnsignedLong + min (SemanticGraph::Member const& m) + { + return m.context ().get<UnsignedLong> ("min"); + } + + static UnsignedLong + min (SemanticGraph::Any const& a) + { + return a.context ().get<UnsignedLong> ("min"); + } + + static UnsignedLong + max (SemanticGraph::Member const& m) + { + return m.context ().get<UnsignedLong> ("max"); + } + + static UnsignedLong + max (SemanticGraph::Any const& a) + { + return a.context ().get<UnsignedLong> ("max"); + } + + public: + // Get escaped name. + // + static String const& + ename (SemanticGraph::Nameable const& n) + { + return n.context ().get<String> ("name"); + } + + public: + std::wostream& os; + + SemanticGraph::Schema& schema_root; + SemanticGraph::Path const& schema_path; + + String& char_type; + String& char_encoding; + String& L; // string literal prefix + String& string_type; + StringLiteralMap const* string_literal_map; + + Boolean& include_with_brackets; + String& include_prefix; + + String& type_exp; + String& inst_exp; + String& inl; + + public: + MappingCache& ns_mapping_cache; + + private: + SemanticGraph::Path const schema_path_; + + SemanticGraph::Namespace* xs_ns_; + + String char_type_; + String char_encoding_; + String L_; + String string_type_; + + Boolean include_with_brackets_; + String include_prefix_; + + String type_exp_; + String inst_exp_; + String inl_; + + private: + RegexPat const cxx_id_expr_; + RegexPat const& cxx_id_expr; + Boolean trace_namespace_regex; + Regex urn_mapping_; + RegexMapping nsr_mapping_; + MapMapping nsm_mapping_; + Regex const& urn_mapping; + RegexMapping const& nsr_mapping; + MapMapping const& nsm_mapping; + MappingCache ns_mapping_cache_; + + RegexMapping include_mapping_; + RegexMapping const& include_mapping; + Boolean trace_include_regex; + + ReservedNameMap const& reserved_name_map; + ReservedNameMap reserved_name_map_; + + KeywordSet const& keyword_set; + KeywordSet keyword_set_; + }; + + inline UnsignedLong Context:: + unicode_char (String const& str, Size& pos) + { + if (sizeof (WideChar) == 4) + { + return str[pos]; + } + else if (sizeof (WideChar) == 2) + { + WideChar x (str[pos]); + + if (x < 0xD800 || x > 0xDBFF) + return x; + else + return ((x - 0xD800) << 10) + (str[++pos] - 0xDC00) + 0x10000; + } + else + return 0; + } + + inline UnsignedLong Context:: + unicode_char (WideChar const*& p) + { + if (sizeof (WideChar) == 4) + { + return *p; + } + else if (sizeof (WideChar) == 2) + { + WideChar x (*p); + + if (x < 0xD800 || x > 0xDBFF) + return x; + else + return ((x - 0xD800) << 10) + (*(++p) - 0xDC00) + 0x10000; + } + else + return 0; + } + + // Usual namespace mapping. + // + struct Namespace: Traversal::Namespace + { + struct ScopeTracker + { + // First scope name if always empty (global scope). The last flag + // signals the last scope. + // + virtual Void + enter (Type&, String const& name, Boolean last) = 0; + + virtual Void + leave () = 0; + }; + + + Namespace (Context& c) + : ctx_ (c), st_ (0) + { + } + + Namespace (Context& c, ScopeTracker& st) + : ctx_ (c), st_ (&st) + { + } + + virtual Void + pre (Type&); + + virtual Void + post (Type&); + + private: + Context& ctx_; + ScopeTracker* st_; + }; + + + // + // + template <typename X> + struct Has : X + { + Has (Boolean& result) + : result_ (result) + { + } + + virtual Void + traverse (typename X::Type&) + { + result_ = true; + } + + private: + Boolean& result_; + }; + + // Checks if scope 'Y' names any of 'X' + // + template <typename X, typename Y> + Boolean + has (Y& y) + { + using SemanticGraph::Scope; + + Boolean result (false); + Has<X> t (result); + + for (Scope::NamesIterator i (y.names_begin ()), e (y.names_end ()); + !result && i != e; ++i) + t.dispatch (i->named ()); + + return result; + } + + // Checks if the compositor has any particle of 'X' + // + template <typename X> + Boolean + has_particle (SemanticGraph::Compositor& y) + { + using SemanticGraph::Compositor; + + Boolean result (false); + Has<X> t (result); + + for (Compositor::ContainsIterator i (y.contains_begin ()), + e (y.contains_end ()); !result && i != e; ++i) + { + SemanticGraph::Particle& p (i->particle ()); + + t.dispatch (p); + + if (!result && p.is_a<Compositor> ()) + result = has_particle<X> (dynamic_cast<Compositor&> (p)); + } + + return result; + } + + // Specialization for Complex + // + template <typename X> + Boolean + has_particle (SemanticGraph::Complex& c) + { + return c.contains_compositor_p () && + has_particle<X> (c.contains_compositor ().compositor ()); + } + + // Fundamental type mapping helper. + // + struct Fundamental: Traversal::Fundamental::Type, + Traversal::Fundamental::String, + Traversal::Fundamental::NormalizedString, + Traversal::Fundamental::Token, + Traversal::Fundamental::Name, + Traversal::Fundamental::NameToken, + Traversal::Fundamental::NCName, + Traversal::Fundamental::Id, + Traversal::Fundamental::IdRef + { + virtual Void + fundamental_type (SemanticGraph::Fundamental::Type& t) = 0; + + virtual Void + fundamental_template (SemanticGraph::Fundamental::Type& t) = 0; + + virtual Void + traverse (SemanticGraph::Fundamental::Type& t) + { + fundamental_type (t); + } + + virtual Void + traverse (SemanticGraph::Fundamental::String& t) + { + fundamental_template (t); + } + + virtual Void + traverse (SemanticGraph::Fundamental::NormalizedString& t) + { + fundamental_template (t); + } + + virtual Void + traverse (SemanticGraph::Fundamental::Token& t) + { + fundamental_template (t); + } + + virtual Void + traverse (SemanticGraph::Fundamental::Name& t) + { + fundamental_template (t); + } + + virtual Void + traverse (SemanticGraph::Fundamental::NameToken& t) + { + fundamental_template (t); + } + + virtual Void + traverse (SemanticGraph::Fundamental::NCName& t) + { + fundamental_template (t); + } + + virtual Void + traverse (SemanticGraph::Fundamental::Id& t) + { + fundamental_template (t); + } + + virtual Void + traverse (SemanticGraph::Fundamental::IdRef& t) + { + fundamental_template (t); + } + }; +} + +#endif // CXX_TREE_ELEMENTS_HXX diff --git a/xsd/xsd/cxx/literal-map.cxx b/xsd/xsd/cxx/literal-map.cxx new file mode 100644 index 0000000..c531b5e --- /dev/null +++ b/xsd/xsd/cxx/literal-map.cxx @@ -0,0 +1,296 @@ +// file : xsd/cxx/literal-map.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <memory> // std::auto_ptr +#include <cstddef> // std::size_t +#include <fstream> +#include <iostream> + +#include <xercesc/util/XMLUni.hpp> +#include <xercesc/util/XercesVersion.hpp> + +#include <xercesc/framework/LocalFileInputSource.hpp> + +#include <xercesc/sax/Locator.hpp> +#include <xercesc/sax/SAXParseException.hpp> +#include <xercesc/sax2/DefaultHandler.hpp> +#include <xercesc/sax2/SAX2XMLReader.hpp> +#include <xercesc/sax2/XMLReaderFactory.hpp> + +#include <xsd-frontend/xml.hxx> + +#include <cxx/literal-map.hxx> + +using namespace std; +using namespace xercesc; +namespace XML = XSDFrontend::XML; + +namespace CXX +{ + class Handler: public DefaultHandler + { + public: + struct Failed {}; + + Handler (String const& file, StringLiteralMap& map) + : state_ (s_init), file_ (file), map_ (map) + { + } + + virtual void + setDocumentLocator (const Locator* const l) + { + locator_ = l; + } + + virtual Void + startElement (const XMLCh* const, + const XMLCh* const lname, + const XMLCh* const, + const xercesc::Attributes&) + { + String n (XML::transcode (lname)); + + if (n == L"string-literal-map" && state_ == s_init) + state_ = s_map; + else if (n == L"entry" && state_ == s_map) + { + str_seen_ = false; + lit_seen_ = false; + state_ = s_entry; + } + else if (n == L"string" && state_ == s_entry) + { + str_seen_ = true; + str_.clear (); + state_ = s_string; + } + else if (n == L"literal" && state_ == s_entry) + { + lit_seen_ = true; + lit_.clear (); + state_ = s_literal; + } + else + { + wcerr << file_ << ":" << line () << ":" << col () << ": error: " + << "unexpected element '" << n << "'" << endl; + throw Failed (); + } + } + + virtual Void + endElement (const XMLCh* const, + const XMLCh* const lname, + const XMLCh* const) + { + String n (XML::transcode (lname)); + + if (n == L"string-literal-map") + state_ = s_init; + else if (n == L"entry") + { + if (!str_seen_) + { + wcerr << file_ << ":" << line () << ":" << col () << ": error: " + << "expected 'string' element" << endl; + throw Failed (); + } + + if (!lit_seen_) + { + wcerr << file_ << ":" << line () << ":" << col () << ": error: " + << "expected 'literal' element" << endl; + throw Failed (); + } + + map_[str_] = lit_; + state_ = s_map; + } + else if (n == L"string") + state_ = s_entry; + else if (n == L"literal") + state_ = s_entry; + } + +#if _XERCES_VERSION >= 30000 + virtual Void + characters (const XMLCh* const s, const XMLSize_t length) +#else + virtual Void + characters (const XMLCh* const s, const unsigned int length) +#endif + { + String str (XML::transcode (s, length)); + + if (state_ == s_string) + str_ += str; + else if (state_ == s_literal) + lit_ += str; + else + { + for (Size i (0); i < str.size (); ++i) + { + WideChar c (str[i]); + + if (c != 0x20 && c != 0x0A && c != 0x0D && c != 0x09) + { + wcerr << file_ << ":" << line () << ":" << col () << ": error: " + << "unexpected character data" << endl; + throw Failed (); + } + } + } + } + + // Error hanlding. + // + enum Severity {s_warning, s_error, s_fatal}; + + virtual Void + warning (const SAXParseException& e) + { + handle (e, s_warning); + } + + virtual Void + error (const SAXParseException& e) + { + handle (e, s_error); + } + + virtual Void + fatalError (const SAXParseException& e) + { + handle (e, s_fatal); + } + + virtual Void + resetErrors () + { + } + + Void + handle (const SAXParseException& e, Severity s) + { + wcerr << file_ << ":"; + +#if _XERCES_VERSION >= 30000 + wcerr << e.getLineNumber () << ":" << e.getColumnNumber () << ": "; +#else + XMLSSize_t l (e.getLineNumber ()); + XMLSSize_t c (e.getColumnNumber ()); + wcerr << (l == -1 ? 0 : l) << ":" << (c == -1 ? 0 : c) << ": "; +#endif + + String msg (XML::transcode (e.getMessage ())); + wcerr << (s == s_warning ? "warning: " : "error: ") << msg << endl; + + if (s != s_warning) + throw Failed (); + } + + size_t + line () const + { + size_t r (0); + + if (locator_ != 0) + { +#if _XERCES_VERSION >= 30000 + r = static_cast<size_t> (locator_->getLineNumber ()); +#else + XMLSSize_t l (locator_->getLineNumber ()); + r = l == -1 ? 0 : static_cast<size_t> (l); +#endif + } + + return r; + } + + size_t + col () const + { + size_t r (0); + + if (locator_ != 0) + { +#if _XERCES_VERSION >= 30000 + r = static_cast<size_t> (locator_->getColumnNumber ()); +#else + XMLSSize_t c (locator_->getColumnNumber ()); + r = c == -1 ? 0 : static_cast<size_t> (c); +#endif + } + + return r; + } + + private: + const Locator* locator_; + + enum + { + s_init, + s_map, + s_entry, + s_string, + s_literal + } state_; + + String file_; + StringLiteralMap& map_; + + Boolean str_seen_; + Boolean lit_seen_; + + String str_; + String lit_; + }; + + bool + read_literal_map (NarrowString const& file, StringLiteralMap& map) + { + try + { + // Try to open the file with fstream. This way we get to + // report the error in a consistent manner. + // + { + ifstream ifs (file.c_str ()); + if (!ifs.is_open ()) + { + wcerr << file.c_str () << ": unable to open in read mode" << endl; + return false; + } + } + + String wfile (file); + + LocalFileInputSource is (XML::XMLChString (wfile).c_str ()); + Handler h (wfile, map); + + auto_ptr<SAX2XMLReader> parser ( + XMLReaderFactory::createXMLReader ()); + + parser->setFeature (XMLUni::fgSAX2CoreNameSpaces, true); + parser->setFeature (XMLUni::fgSAX2CoreNameSpacePrefixes, true); + parser->setFeature (XMLUni::fgSAX2CoreValidation, false); + parser->setFeature (XMLUni::fgXercesSchema, false); + parser->setFeature (XMLUni::fgXercesSchemaFullChecking, false); + + parser->setErrorHandler (&h); + parser->setContentHandler (&h); + + parser->parse (is); + } + catch (Handler::Failed const&) + { + return false; + } + + return true; + } +} diff --git a/xsd/xsd/cxx/literal-map.hxx b/xsd/xsd/cxx/literal-map.hxx new file mode 100644 index 0000000..6edeb00 --- /dev/null +++ b/xsd/xsd/cxx/literal-map.hxx @@ -0,0 +1,23 @@ +// file : xsd/cxx/literal-map.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef CXX_LITERAL_MAP_HXX +#define CXX_LITERAL_MAP_HXX + +#include <cult/types.hxx> +#include <cult/containers/map.hxx> + +namespace CXX +{ + using namespace Cult; + typedef WideString String; + + typedef Cult::Containers::Map<String, String> StringLiteralMap; + + bool + read_literal_map (NarrowString const& file, StringLiteralMap& map); +} + +#endif // CXX_LITERAL_MAP_HXX diff --git a/xsd/xsd/cxx/parser/attribute-validation-source.cxx b/xsd/xsd/cxx/parser/attribute-validation-source.cxx new file mode 100644 index 0000000..536e2da --- /dev/null +++ b/xsd/xsd/cxx/parser/attribute-validation-source.cxx @@ -0,0 +1,404 @@ +// file : xsd/cxx/parser/attribute-validation-source.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <cxx/parser/attribute-validation-source.hxx> + +#include <xsd-frontend/semantic-graph.hxx> +#include <xsd-frontend/traversal.hxx> + +namespace CXX +{ + namespace Parser + { + namespace + { + struct Test: Traversal::Attribute, + Traversal::AnyAttribute, + Context + { + Test (Context& c) + : Context (c) + { + } + + virtual Void + traverse (SemanticGraph::Attribute& a) + { + String const& name (a.name ()); + + if (a.qualified_p () && a.namespace_ ().name ()) + { + String const& ns (a.namespace_ ().name ()); + + os << "n == " << strlit (name) << " &&" << endl + << "ns == " << strlit (ns); + } + else + os << "n == " << strlit (name) << " && ns.empty ()"; + } + + virtual Void + traverse (SemanticGraph::AnyAttribute& a) + { + String const& ns (a.definition_namespace ().name ()); + + for (SemanticGraph::AnyAttribute::NamespaceIterator + i (a.namespace_begin ()), e (a.namespace_end ()); i != e;) + { + if (*i == L"##any") + { + os << "!n.empty ()"; + } + else if (*i == L"##other") + { + if (ns) + { + // Note that here I assume that ##other does not include + // unqualified names in a schema with target namespace. + // This is not what the spec says but that seems to be + // the consensus. + // + os << "(!ns.empty () && ns != " << strlit (ns) << ")"; + } + else + os << "!ns.empty ()"; + } + else if (*i == L"##local") + { + os << "(ns.empty () && !n.empty ())"; + } + else if (*i == L"##targetNamespace") + { + os << "ns == " << strlit (ns); + } + else + { + os << "ns == " << strlit (*i); + } + + if (++i != e) + os << " ||" << endl; + } + } + }; + + // + // + struct PhaseOne: Traversal::Attribute, Context + { + PhaseOne (Context& c) + : Context (c), test_ (c) + { + } + + virtual Void + traverse (Type& a) + { + String const& name (ename (a)); + String const& inst (emember (a)); + + SemanticGraph::Type& type (a.type ()); + String const& post (post_name (type)); + String const& ret (ret_type (type)); + + os << "if ("; + + test_.traverse (a); + + os << ")" + << "{" + << "if (this->" << inst << ")" + << "{" + << "this->" << inst << "->pre ();" + << "this->" << inst << "->_pre_impl ();" + << "this->" << inst << "->_characters (s);" + << "this->" << inst << "->_post_impl ();"; + + if (ret == L"void") + os << "this->" << inst << "->" << post << " ();" + << "this->" << name << " ();"; + else + os << arg_type (type) << " tmp (this->" << inst << "->" << + post << " ());" + << "this->" << name << " (tmp);" + << endl; + + os << "}"; + + if (!a.optional_p ()) + os << "static_cast< v_state_attr_* > (" << + "this->v_state_attr_stack_.top ())->" << name << " = true;"; + + os << "return true;" + << "}"; + } + + private: + Test test_; + }; + + + // + // + struct PhaseTwo: Traversal::AnyAttribute, Context + { + PhaseTwo (Context& c) + : Context (c), test_ (c) + { + } + + virtual Void + traverse (Type& a) + { + os << "if ("; + + test_.traverse (a); + + os << ")" << endl + << "{" + << "this->_any_attribute (ns, n, s);" + << "return true;" + << "}"; + } + + private: + Test test_; + }; + + + // + // + struct AttributeStateInit: Traversal::Attribute, Context + { + AttributeStateInit (Context& c) + : Context (c) + { + } + + virtual Void + traverse (Type& a) + { + if (!a.optional_p ()) + os << "as." << ename (a) << " = false;"; + } + }; + + + // + // + struct AttributeStateCheck: Traversal::Attribute, Context + { + AttributeStateCheck (Context& c) + : Context (c) + { + } + + virtual Void + traverse (Type& a) + { + if (!a.optional_p ()) + { + String ns (a.qualified_p () ? a.namespace_ ().name () : String ()); + + os << "if (!as." << ename (a) << ")" << endl + << "this->_expected_attribute (" << endl + << strlit (ns) << ", " << strlit (a.name ()) << ");"; + } + } + }; + + // + // + struct Complex: Traversal::Complex, Context + { + Complex (Context& c) + : Context (c), + phase_one_ (c), + phase_two_ (c), + attribute_state_init_ (c), + attribute_state_check_ (c) + { + names_phase_one_ >> phase_one_; + names_phase_two_ >> phase_two_; + + names_attribute_state_init_ >> attribute_state_init_; + names_attribute_state_check_ >> attribute_state_check_; + } + + virtual Void + traverse (Type& c) + { + Boolean has_att (has<Traversal::Attribute> (c)); + Boolean has_any (has<Traversal::AnyAttribute> (c)); + + if (!has_att && !has_any) + return; + + Boolean has_req_att (false); + if (has_att) + { + RequiredAttributeTest test (has_req_att); + Traversal::Names names_test (test); + names (c, names_test); + } + + String const& name (ename (c)); + + os <<"// Attribute validation and dispatch functions for " << + name << "." << endl + <<"//" << endl; + + if (has_att) + { + // _attribute_impl_phase_one + // + os << "bool " << name << "::" << endl + << "_attribute_impl_phase_one (const " << string_type << + "& ns," << endl + << "const " << string_type << "& n," << endl + << "const " << string_type << "& s)" << endl + << "{"; + + names (c, names_phase_one_); + + // Nothing matched - call our base (extension) or return false + // if there is no base (or restriction (even from anyType)). + // + os << "return "; + + if (c.inherits_p () && + !c.inherits ().is_a<SemanticGraph::Restricts> ()) + { + os << "this->" << fq_name (c.inherits ().base ()) << + "::_attribute_impl_phase_one (ns, n, s);"; + } + else + os << "false;"; + + os << "}"; + } + + + if (has_any) + { + // _attribute_impl_phase_two + // + os << "bool " << name << "::" << endl + << "_attribute_impl_phase_two (const " << string_type << + "& ns," << endl + << "const " << string_type << "& n," << endl + << "const " << string_type << "& s)" + << "{"; + + names (c, names_phase_two_); + + // Nothing matched - call our base (extension) or return false + // if there is no base (or restriction (even from anyType)). + // + os << "return "; + + if (c.inherits_p () && + !c.inherits ().is_a<SemanticGraph::Restricts> ()) + { + os << "this->" << fq_name (c.inherits ().base ()) << + "::_attribute_impl_phase_two (ns, n, s);"; + } + else + os << "false;"; + + os << "}"; + } + + if (has_req_att) + { + // _pre_a_validate + // + os << "void " << name << "::" << endl + << "_pre_a_validate ()" + << "{" + << "this->v_state_attr_stack_.push ();" + << "v_state_attr_& as = *static_cast< v_state_attr_* > (" << + "this->v_state_attr_stack_.top ());" + << endl; + + names (c, names_attribute_state_init_); + + // Call our base (extension) last. + // + if (c.inherits_p () && + !c.inherits ().is_a<SemanticGraph::Restricts> ()) + { + os << "this->" << fq_name (c.inherits ().base ()) << + "::_pre_a_validate ();"; + } + + os << "}"; + + + // _post_a_validate + // + os << "void " << name << "::" << endl + << "_post_a_validate ()" + << "{"; + + // Call our base (extension) first. + // + if (c.inherits_p () && + !c.inherits ().is_a<SemanticGraph::Restricts> ()) + { + os << "this->" << fq_name (c.inherits ().base ()) << + "::_post_a_validate ();" + << endl; + } + + os << "v_state_attr_& as = *static_cast< v_state_attr_* > (" << + "this->v_state_attr_stack_.top ());" + << endl; + + names (c, names_attribute_state_check_); + + os << endl + << "this->v_state_attr_stack_.pop ();" + << "}"; + } + } + + private: + PhaseOne phase_one_; + Traversal::Names names_phase_one_; + + PhaseTwo phase_two_; + Traversal::Names names_phase_two_; + + AttributeStateInit attribute_state_init_; + Traversal::Names names_attribute_state_init_; + + AttributeStateCheck attribute_state_check_; + Traversal::Names names_attribute_state_check_; + }; + } + + Void + generate_attribute_validation_source (Context& ctx) + { + Traversal::Schema schema; + + Traversal::Sources sources; + Traversal::Names schema_names; + + Namespace ns (ctx); + Traversal::Names names; + + schema >> sources >> schema; + schema >> schema_names >> ns >> names; + + Complex complex (ctx); + + names >> complex; + + schema.dispatch (ctx.schema_root); + } + } +} diff --git a/xsd/xsd/cxx/parser/attribute-validation-source.hxx b/xsd/xsd/cxx/parser/attribute-validation-source.hxx new file mode 100644 index 0000000..a11f434 --- /dev/null +++ b/xsd/xsd/cxx/parser/attribute-validation-source.hxx @@ -0,0 +1,20 @@ +// file : xsd/cxx/parser/attribute-validation-source.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef CXX_PARSER_ATTRIBUTE_VALIDATION_SOURCE_HXX +#define CXX_PARSER_ATTRIBUTE_VALIDATION_SOURCE_HXX + +#include <cxx/parser/elements.hxx> + +namespace CXX +{ + namespace Parser + { + Void + generate_attribute_validation_source (Context&); + } +} + +#endif // CXX_PARSER_ATTRIBUTE_VALIDATION_SOURCE_HXX diff --git a/xsd/xsd/cxx/parser/characters-validation-source.cxx b/xsd/xsd/cxx/parser/characters-validation-source.cxx new file mode 100644 index 0000000..236f2f5 --- /dev/null +++ b/xsd/xsd/cxx/parser/characters-validation-source.cxx @@ -0,0 +1,75 @@ +// file : xsd/cxx/parser/characters-validation-source.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <cxx/parser/characters-validation-source.hxx> + +#include <xsd-frontend/semantic-graph.hxx> +#include <xsd-frontend/traversal.hxx> + +namespace CXX +{ + namespace Parser + { + namespace + { + // + // + struct Complex: Traversal::Complex, Context + { + Complex (Context& c) + : Context (c) + { + } + + virtual Void + traverse (Type& c) + { + if (!c.mixed_p ()) + return; + + String const& name (ename (c)); + + os <<"// Character validation functions for " << name << "." << endl + <<"//" << endl; + + // _characters_impl + // + os << "bool " << name << "::" << endl + << "_characters_impl (const " << string_type << "& s)" + << "{" + << "this->_any_characters (s);" + << "return true;" + << "}"; + } + }; + } + + Void + generate_characters_validation_source (Context& ctx) + { + //@@ Most of the time there is no mixed content type so + // we generate an empty namespace which looks ugly. Will + // need to implement smart namespace to handle this at + // some point. + // + Traversal::Schema schema; + + Traversal::Sources sources; + Traversal::Names schema_names; + + Namespace ns (ctx); + Traversal::Names names; + + schema >> sources >> schema; + schema >> schema_names >> ns >> names; + + Complex complex (ctx); + + names >> complex; + + schema.dispatch (ctx.schema_root); + } + } +} diff --git a/xsd/xsd/cxx/parser/characters-validation-source.hxx b/xsd/xsd/cxx/parser/characters-validation-source.hxx new file mode 100644 index 0000000..2c1a1b1 --- /dev/null +++ b/xsd/xsd/cxx/parser/characters-validation-source.hxx @@ -0,0 +1,20 @@ +// file : xsd/cxx/parser/characters-validation-source.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef CXX_PARSER_CHARACTERS_VALIDATION_SOURCE_HXX +#define CXX_PARSER_CHARACTERS_VALIDATION_SOURCE_HXX + +#include <cxx/parser/elements.hxx> + +namespace CXX +{ + namespace Parser + { + Void + generate_characters_validation_source (Context&); + } +} + +#endif // CXX_PARSER_CHARACTERS_VALIDATION_SOURCE_HXX diff --git a/xsd/xsd/cxx/parser/cli.hxx b/xsd/xsd/cxx/parser/cli.hxx new file mode 100644 index 0000000..bc7ca1a --- /dev/null +++ b/xsd/xsd/cxx/parser/cli.hxx @@ -0,0 +1,154 @@ +// file : xsd/cxx/parser/cli.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef CXX_PARSER_CLI_HXX +#define CXX_PARSER_CLI_HXX + +#include <cult/types.hxx> + +#include <cult/containers/vector.hxx> + +#include <cult/cli/options.hxx> +#include <cult/cli/options-spec.hxx> + +namespace CXX +{ + namespace Parser + { + namespace CLI + { + using namespace Cult::Types; + + typedef Char const Key[]; + + extern Key type_map; + extern Key char_encoding; + extern Key char_type; + extern Key output_dir; + extern Key xml_parser; + extern Key generate_inline; + extern Key generate_validation; + extern Key suppress_validation; + extern Key generate_polymorphic; + extern Key generate_noop_impl; + extern Key generate_print_impl; + extern Key generate_test_driver; + extern Key force_overwrite; + extern Key root_element_first; + extern Key root_element_last; + extern Key root_element; + extern Key generate_xml_schema; + extern Key extern_xml_schema; + extern Key skel_type_suffix; + extern Key skel_file_suffix; + extern Key impl_type_suffix; + extern Key impl_file_suffix; + extern Key namespace_map; + extern Key namespace_regex; + extern Key namespace_regex_trace; + extern Key reserved_name; + extern Key include_with_brackets; + extern Key include_prefix; + extern Key include_regex; + extern Key include_regex_trace; + extern Key guard_prefix; + extern Key hxx_suffix; + extern Key ixx_suffix; + extern Key cxx_suffix; + extern Key hxx_regex; + extern Key ixx_regex; + extern Key cxx_regex; + extern Key hxx_prologue; + extern Key ixx_prologue; + extern Key cxx_prologue; + extern Key prologue; + extern Key hxx_epilogue; + extern Key ixx_epilogue; + extern Key cxx_epilogue; + extern Key epilogue; + extern Key hxx_prologue_file; + extern Key ixx_prologue_file; + extern Key cxx_prologue_file; + extern Key prologue_file; + extern Key hxx_epilogue_file; + extern Key ixx_epilogue_file; + extern Key cxx_epilogue_file; + extern Key epilogue_file; + extern Key export_symbol; + extern Key export_maps; + extern Key import_maps; + extern Key show_anonymous; + extern Key show_sloc; + extern Key proprietary_license; + + typedef Cult::CLI::Options< + type_map, Cult::Containers::Vector<NarrowString>, + char_type, NarrowString, + char_encoding, NarrowString, + output_dir, NarrowString, + xml_parser, NarrowString, + generate_inline, Boolean, + generate_validation, Boolean, + suppress_validation, Boolean, + generate_polymorphic, Boolean, + generate_noop_impl, Boolean, + generate_print_impl, Boolean, + generate_test_driver, Boolean, + force_overwrite, Boolean, + root_element_first, Boolean, + root_element_last, Boolean, + root_element, NarrowString, + generate_xml_schema, Boolean, + extern_xml_schema, NarrowString, + skel_type_suffix, NarrowString, + skel_file_suffix, NarrowString, + impl_type_suffix, NarrowString, + impl_file_suffix, NarrowString, + namespace_map, Cult::Containers::Vector<NarrowString>, + namespace_regex, Cult::Containers::Vector<NarrowString>, + namespace_regex_trace, Boolean, + reserved_name, Cult::Containers::Vector<NarrowString>, + include_with_brackets, Boolean, + include_prefix, NarrowString, + include_regex, Cult::Containers::Vector<NarrowString>, + include_regex_trace, Boolean, + guard_prefix, NarrowString, + hxx_suffix, NarrowString, + ixx_suffix, NarrowString, + cxx_suffix, NarrowString, + hxx_regex, NarrowString, + ixx_regex, NarrowString, + cxx_regex, NarrowString, + hxx_prologue, Cult::Containers::Vector<NarrowString>, + ixx_prologue, Cult::Containers::Vector<NarrowString>, + cxx_prologue, Cult::Containers::Vector<NarrowString>, + prologue, Cult::Containers::Vector<NarrowString>, + hxx_epilogue, Cult::Containers::Vector<NarrowString>, + ixx_epilogue, Cult::Containers::Vector<NarrowString>, + cxx_epilogue, Cult::Containers::Vector<NarrowString>, + epilogue, Cult::Containers::Vector<NarrowString>, + hxx_prologue_file, NarrowString, + ixx_prologue_file, NarrowString, + cxx_prologue_file, NarrowString, + prologue_file, NarrowString, + hxx_epilogue_file, NarrowString, + ixx_epilogue_file, NarrowString, + cxx_epilogue_file, NarrowString, + epilogue_file, NarrowString, + export_symbol, NarrowString, + export_maps, Boolean, + import_maps, Boolean, + show_anonymous, Boolean, + show_sloc, Boolean, + proprietary_license, Boolean + + > Options; + + struct OptionsSpec: Cult::CLI::OptionsSpec<Options> {}; + } + } +} + +#endif // CXX_PARSER_CLI_HXX diff --git a/xsd/xsd/cxx/parser/driver-source.cxx b/xsd/xsd/cxx/parser/driver-source.cxx new file mode 100644 index 0000000..b48b0e0 --- /dev/null +++ b/xsd/xsd/cxx/parser/driver-source.cxx @@ -0,0 +1,768 @@ +// file : xsd/cxx/parser/driver-source.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <cxx/parser/driver-source.hxx> +#include <cxx/parser/print-impl-common.hxx> + +#include <xsd-frontend/semantic-graph.hxx> +#include <xsd-frontend/traversal.hxx> + +#include <cult/containers/map.hxx> +#include <cult/containers/set.hxx> + +#include <sstream> + +namespace CXX +{ + namespace Parser + { + namespace + { + typedef + Cult::Containers::Map<SemanticGraph::Type*, String> + TypeInstanceMap; + + typedef Cult::Containers::Set<String> InstanceSet; + + // For base types we only want member's types, but not the + // base itself. + // + struct BaseType: Traversal::Complex, Context + { + BaseType (Context& c) + : Context (c) + { + } + + virtual Void + traverse (SemanticGraph::Complex& c) + { + inherits (c); + + if (!restriction_p (c)) + names (c); + } + }; + + struct ParserDef: Traversal::Type, + Traversal::List, + Traversal::Complex, + + Traversal::AnyType, + Traversal::AnySimpleType, + + Traversal::Fundamental::Byte, + Traversal::Fundamental::UnsignedByte, + Traversal::Fundamental::Short, + Traversal::Fundamental::UnsignedShort, + Traversal::Fundamental::Int, + Traversal::Fundamental::UnsignedInt, + Traversal::Fundamental::Long, + Traversal::Fundamental::UnsignedLong, + Traversal::Fundamental::Integer, + Traversal::Fundamental::NonPositiveInteger, + Traversal::Fundamental::NonNegativeInteger, + Traversal::Fundamental::PositiveInteger, + Traversal::Fundamental::NegativeInteger, + + Traversal::Fundamental::Boolean, + + Traversal::Fundamental::Float, + Traversal::Fundamental::Double, + Traversal::Fundamental::Decimal, + + Traversal::Fundamental::String, + Traversal::Fundamental::NormalizedString, + Traversal::Fundamental::Token, + Traversal::Fundamental::Name, + Traversal::Fundamental::NameToken, + Traversal::Fundamental::NameTokens, + Traversal::Fundamental::NCName, + Traversal::Fundamental::Language, + + Traversal::Fundamental::QName, + + Traversal::Fundamental::Id, + Traversal::Fundamental::IdRef, + Traversal::Fundamental::IdRefs, + + Traversal::Fundamental::AnyURI, + + Traversal::Fundamental::Base64Binary, + Traversal::Fundamental::HexBinary, + + Traversal::Fundamental::Date, + Traversal::Fundamental::DateTime, + Traversal::Fundamental::Duration, + Traversal::Fundamental::Day, + Traversal::Fundamental::Month, + Traversal::Fundamental::MonthDay, + Traversal::Fundamental::Year, + Traversal::Fundamental::YearMonth, + Traversal::Fundamental::Time, + + Traversal::Fundamental::Entity, + Traversal::Fundamental::Entities, + + Context + { + ParserDef (Context& c, TypeInstanceMap& map, InstanceSet& set) + : Context (c), map_ (map), set_ (set), base_ (c) + { + *this >> inherits_ >> base_ >> inherits_; + + *this >> names_; + base_ >> names_; + + names_ >> member_ >> belongs_ >> *this; + } + + virtual Void + traverse (SemanticGraph::Type& t) + { + if (map_.find (&t) == map_.end ()) + { + String inst (find_instance_name (t)); + map_[&t] = inst; + + os << fq_name (t, "impl") << " " << inst << ";"; + } + } + + virtual Void + traverse (SemanticGraph::List& l) + { + if (map_.find (&l) == map_.end ()) + { + String inst (find_instance_name (l)); + map_[&l] = inst; + + os << fq_name (l, "impl") << " " << inst << ";"; + + dispatch (l.argumented ().type ()); + } + } + + virtual Void + traverse (SemanticGraph::Complex& c) + { + if (map_.find (&c) == map_.end ()) + { + String inst (find_instance_name (c)); + map_[&c] = inst; + + os << fq_name (c, "impl") << " " << inst << ";"; + + inherits (c); + + if (!restriction_p (c)) + names (c); + } + } + + // anyType & anySimpleType. + // + virtual Void + traverse (SemanticGraph::AnyType& t) + { + fund_type (t, "any_type"); + } + + virtual Void + traverse (SemanticGraph::AnySimpleType& t) + { + fund_type (t, "any_simple_type"); + } + + // Boolean. + // + virtual Void + traverse (SemanticGraph::Fundamental::Boolean& t) + { + fund_type (t, "boolean"); + } + + // Integral types. + // + virtual Void + traverse (SemanticGraph::Fundamental::Byte& t) + { + fund_type (t, "byte"); + } + + virtual Void + traverse (SemanticGraph::Fundamental::UnsignedByte& t) + { + fund_type (t, "unsigned_byte"); + } + + virtual Void + traverse (SemanticGraph::Fundamental::Short& t) + { + fund_type (t, "short"); + } + + virtual Void + traverse (SemanticGraph::Fundamental::UnsignedShort& t) + { + fund_type (t, "unsigned_short"); + } + + virtual Void + traverse (SemanticGraph::Fundamental::Int& t) + { + fund_type (t, "int"); + } + + virtual Void + traverse (SemanticGraph::Fundamental::UnsignedInt& t) + { + fund_type (t, "unsigned_int"); + } + + virtual Void + traverse (SemanticGraph::Fundamental::Long& t) + { + fund_type (t, "long"); + } + + virtual Void + traverse (SemanticGraph::Fundamental::UnsignedLong& t) + { + fund_type (t, "unsigned_long"); + } + + virtual Void + traverse (SemanticGraph::Fundamental::Integer& t) + { + fund_type (t, "integer"); + } + + virtual Void + traverse (SemanticGraph::Fundamental::NonPositiveInteger& t) + { + fund_type (t, "non_positive_integer"); + } + + virtual Void + traverse (SemanticGraph::Fundamental::NonNegativeInteger& t) + { + fund_type (t, "non_negative_integer"); + } + + virtual Void + traverse (SemanticGraph::Fundamental::PositiveInteger& t) + { + fund_type (t, "positive_integer"); + } + + virtual Void + traverse (SemanticGraph::Fundamental::NegativeInteger& t) + { + fund_type (t, "negative_integer"); + } + + // Floats. + // + virtual Void + traverse (SemanticGraph::Fundamental::Float& t) + { + fund_type (t, "float"); + } + + virtual Void + traverse (SemanticGraph::Fundamental::Double& t) + { + fund_type (t, "double"); + } + + virtual Void + traverse (SemanticGraph::Fundamental::Decimal& t) + { + fund_type (t, "decimal"); + } + + // Strings. + // + virtual Void + traverse (SemanticGraph::Fundamental::String& t) + { + fund_type (t, "string"); + } + + virtual Void + traverse (SemanticGraph::Fundamental::NormalizedString& t) + { + fund_type (t, "normalized_string"); + } + + virtual Void + traverse (SemanticGraph::Fundamental::Token& t) + { + fund_type (t, "token"); + } + + virtual Void + traverse (SemanticGraph::Fundamental::NameToken& t) + { + fund_type (t, "nmtoken"); + } + + virtual Void + traverse (SemanticGraph::Fundamental::NameTokens& t) + { + fund_type (t, "nmtokens"); + } + + virtual Void + traverse (SemanticGraph::Fundamental::Name& t) + { + fund_type (t, "name"); + } + + virtual Void + traverse (SemanticGraph::Fundamental::NCName& t) + { + fund_type (t, "ncname"); + } + + virtual Void + traverse (SemanticGraph::Fundamental::Language& t) + { + fund_type (t, "language"); + } + + + // Qualified name. + // + virtual Void + traverse (SemanticGraph::Fundamental::QName& t) + { + fund_type (t, "qname"); + } + + + // ID/IDREF. + // + virtual Void + traverse (SemanticGraph::Fundamental::Id& t) + { + fund_type (t, "id"); + } + + virtual Void + traverse (SemanticGraph::Fundamental::IdRef& t) + { + fund_type (t, "idref"); + } + + virtual Void + traverse (SemanticGraph::Fundamental::IdRefs& t) + { + fund_type (t, "idrefs"); + } + + // URI. + // + virtual Void + traverse (SemanticGraph::Fundamental::AnyURI& t) + { + fund_type (t, "uri"); + } + + // Binary. + // + virtual Void + traverse (SemanticGraph::Fundamental::Base64Binary& t) + { + fund_type (t, "base64_binary"); + } + + virtual Void + traverse (SemanticGraph::Fundamental::HexBinary& t) + { + fund_type (t, "hex_binary"); + } + + + // Date/time. + // + virtual Void + traverse (SemanticGraph::Fundamental::Date& t) + { + fund_type (t, "date"); + } + + virtual Void + traverse (SemanticGraph::Fundamental::DateTime& t) + { + fund_type (t, "date_time"); + } + + virtual Void + traverse (SemanticGraph::Fundamental::Duration& t) + { + fund_type (t, "duration"); + } + + virtual Void + traverse (SemanticGraph::Fundamental::Day& t) + { + fund_type (t, "day"); + } + + virtual Void + traverse (SemanticGraph::Fundamental::Month& t) + { + fund_type (t, "month"); + } + + virtual Void + traverse (SemanticGraph::Fundamental::MonthDay& t) + { + fund_type (t, "month_day"); + } + + virtual Void + traverse (SemanticGraph::Fundamental::Year& t) + { + fund_type (t, "year"); + } + + virtual Void + traverse (SemanticGraph::Fundamental::YearMonth& t) + { + fund_type (t, "year_month"); + } + + virtual Void + traverse (SemanticGraph::Fundamental::Time& t) + { + fund_type (t, "time"); + } + + // Entity. + // + virtual Void + traverse (SemanticGraph::Fundamental::Entity& t) + { + fund_type (t, "entity"); + } + + virtual Void + traverse (SemanticGraph::Fundamental::Entities& t) + { + fund_type (t, "entities"); + } + + private: + virtual Void + fund_type (SemanticGraph::Type& t, String const& name) + { + if (map_.find (&t) == map_.end ()) + { + String inst (find_instance_name (name)); + map_[&t] = inst; + + os << fq_name (t, "impl") << " " << inst << ";"; + } + } + + String + find_instance_name (String const& raw_name) + { + String base_name (escape (raw_name + L"_p")); + String name (base_name); + + for (UnsignedLong i (1); set_.find (name) != set_.end (); ++i) + { + std::wostringstream os; + os << i; + name = base_name + os.str (); + } + + set_.insert (name); + return name; + } + + String + find_instance_name (SemanticGraph::Type& t) + { + return find_instance_name (t.name ()); + } + + TypeInstanceMap& map_; + InstanceSet& set_; + + BaseType base_; + Traversal::Inherits inherits_; + + Traversal::Names names_; + Traversal::Member member_; + Traversal::Belongs belongs_; + }; + + struct ArgList: Traversal::Complex, + Traversal::List, + Traversal::Member, + Context + { + ArgList (Context& c, TypeInstanceMap& map) + : Context (c), map_ (map), first_ (true) + { + inherits_ >> *this; + names_ >> *this; + } + + virtual Void + traverse (SemanticGraph::Complex& c) + { + inherits (c, inherits_); + + if (!restriction_p (c)) + names (c, names_); + } + + virtual Void + traverse (SemanticGraph::List& l) + { + if (!first_) + os << "," << endl; + else + first_ = false; + + os << map_[&l.argumented ().type ()]; + } + + virtual Void + traverse (SemanticGraph::Member& m) + { + if (skip (m)) + return; + + if (!first_) + os << "," << endl; + else + first_ = false; + + os << map_[&m.type ()]; + } + + private: + TypeInstanceMap& map_; + + Traversal::Inherits inherits_; + Traversal::Names names_; + + Boolean first_; + }; + + struct ParserConnect: Traversal::List, + Traversal::Complex, + Context + { + ParserConnect (Context& c, TypeInstanceMap& map) + : Context (c), map_ (map), base_ (c) + { + *this >> inherits_ >> base_ >> inherits_; + + *this >> names_; + base_ >> names_; + + names_ >> member_ >> belongs_ >> *this; + } + + virtual Void + traverse (SemanticGraph::List& l) + { + if (type_set_.find (&l) == type_set_.end ()) + { + os << map_[&l] << ".parsers (" << + map_[&l.argumented ().type ()] << ");" + << endl; + + type_set_.insert (&l); + } + } + + virtual Void + traverse (SemanticGraph::Complex& c) + { + if (type_set_.find (&c) == type_set_.end ()) + { + if (has_members (c)) + { + os << map_[&c] << ".parsers ("; + + ArgList args (*this, map_); + args.dispatch (c); + + os << ");" + << endl; + } + + type_set_.insert (&c); + + inherits (c); + + if (!restriction_p (c)) + names (c); + } + } + + private: + Boolean + has_members (SemanticGraph::Complex& c) + { + using SemanticGraph::Complex; + + if (has<Traversal::Member> (c)) + return true; + + if (c.inherits_p ()) + { + SemanticGraph::Type& b (c.inherits ().base ()); + + if (Complex* cb = dynamic_cast<Complex*> (&b)) + return has_members (*cb); + + return b.is_a<SemanticGraph::List> (); + } + + return false; + } + + private: + TypeInstanceMap& map_; + Cult::Containers::Set<SemanticGraph::Type*> type_set_; + + BaseType base_; + Traversal::Inherits inherits_; + + Traversal::Names names_; + Traversal::Member member_; + Traversal::Belongs belongs_; + }; + } + + Void + generate_driver_source (Context& ctx) + { + // Figure out the root element. Validator should have made sure + // it is unique. + // + SemanticGraph::Element* root (0); + { + Traversal::Schema schema; + Traversal::Sources sources; + + schema >> sources >> schema; + + Traversal::Names schema_names; + Traversal::Namespace ns; + Traversal::Names ns_names; + RootElement root_element (ctx.options, root); + + schema >> schema_names >> ns >> ns_names >> root_element; + + schema.dispatch (ctx.schema_root); + } + + std::wostream& os (ctx.os); + String const& L (ctx.L); + String const& cerr (ctx.cerr_inst); + + InstanceSet set; + TypeInstanceMap map; + SemanticGraph::Type& root_type (root->type ()); + + set.insert ("doc_p"); + + os << "#include <iostream>" << endl + << endl + << "int" << endl + << "main (int argc, char* argv[])" + << "{" + << "if (argc != 2)" + << "{" + << cerr << " << " << L << "\"usage: \" << argv[0] << " << + L << "\" file.xml\" << std::endl;" + << "return 1;" + << "}" + << "try" + << "{" + << "// Instantiate individual parsers." << endl + << "//" << endl; + + { + ParserDef def (ctx, map, set); + def.dispatch (root_type); + } + + os << endl + << "// Connect the parsers together." << endl + << "//" << endl; + + { + ParserConnect connect (ctx, map); + connect.dispatch (root_type); + } + + String const& root_p (map[&root_type]); + + os << "// Parse the XML document." << endl + << "//" << endl; + + if (root->namespace_().name ()) + os << ctx.xs_ns_name () << "::document doc_p (" << endl + << root_p << "," << endl + << ctx.strlit (root->namespace_().name ()) << "," << endl + << ctx.strlit (root->name ()) << ");" + << endl; + else + os << ctx.xs_ns_name () << "::document doc_p (" << root_p << ", " << + ctx.strlit (root->name ()) << ");" + << endl; + + os << root_p << ".pre ();" + << "doc_p.parse (argv[1]);"; + + String const& ret (Context::ret_type (root_type)); + String const& post (Context::post_name (root_type)); + + if (ret == L"void") + os << root_p << "." << post << " ();"; + else + { + os << Context::arg_type (root_type) << " v (" << + root_p << "." << post << " ());" + << endl; + + if (ctx.options.value<CLI::generate_print_impl> ()) + { + PrintCall t (ctx, root->name (), "v"); + t.dispatch (root_type); + } + else + os << "// TODO" << endl + << "//" << endl; + } + + os << "}" // try + << "catch (const " << ctx.xs_ns_name () << "::exception& e)" + << "{" + << cerr << " << e << std::endl;" + << "return 1;" + << "}" + << "catch (const std::ios_base::failure&)" + << "{" + << cerr << " << argv[1] << " << + L << "\": error: io failure\" << std::endl;" + << "return 1;" + << "}" + << "}"; + } + } +} diff --git a/xsd/xsd/cxx/parser/driver-source.hxx b/xsd/xsd/cxx/parser/driver-source.hxx new file mode 100644 index 0000000..9b5a8b1 --- /dev/null +++ b/xsd/xsd/cxx/parser/driver-source.hxx @@ -0,0 +1,20 @@ +// file : xsd/cxx/parser/driver-source.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef CXX_PARSER_DRIVER_SOURCE_HXX +#define CXX_PARSER_DRIVER_SOURCE_HXX + +#include <cxx/parser/elements.hxx> + +namespace CXX +{ + namespace Parser + { + Void + generate_driver_source (Context&); + } +} + +#endif // CXX_PARSER_DRIVER_SOURCE_HXX diff --git a/xsd/xsd/cxx/parser/element-validation-source.cxx b/xsd/xsd/cxx/parser/element-validation-source.cxx new file mode 100644 index 0000000..211a0d3 --- /dev/null +++ b/xsd/xsd/cxx/parser/element-validation-source.cxx @@ -0,0 +1,1586 @@ +// file : xsd/cxx/parser/element-validation-source.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <cxx/parser/element-validation-source.hxx> + +#include <xsd-frontend/semantic-graph.hxx> +#include <xsd-frontend/traversal.hxx> + +#include <cult/containers/vector.hxx> + +namespace CXX +{ + namespace Parser + { + namespace + { + typedef Cult::Containers::Vector<SemanticGraph::Particle*> Particles; + + + // + // + struct ParticleTest: Traversal::Compositor, + Traversal::Element, + Traversal::Any, + Context + { + ParticleTest (Context& c) + : Context (c) + { + } + + virtual Void + traverse (SemanticGraph::Element& e) + { + String const& name (e.name ()); + + if (polymorphic && e.global_p ()) + os << "("; + + if (e.qualified_p () && e.namespace_ ().name ()) + { + String const& ns (e.namespace_ ().name ()); + + os << "n == " << strlit (name) << " &&" << endl + << "ns == " << strlit (ns); + } + else + os << "n == " << strlit (name) << " && ns.empty ()"; + + + // Only a globally-defined element can be a subst-group root. + // + if (polymorphic && e.global_p ()) + { + os << ") ||" << endl + << "::xsd::cxx::parser::substitution_map_instance< " << + char_type << " > ().check (" << endl + << "ns, n, " << strlit (e.namespace_ ().name ()) << + ", " << strlit (name) << ", t)"; + } + } + + virtual Void + traverse (SemanticGraph::Any& a) + { + String const& ns (a.definition_namespace ().name ()); + + // Note that we need to make sure the "flush" element (both name + // and namespace are empty) does not match any compositor. + // + for (SemanticGraph::Any::NamespaceIterator i (a.namespace_begin ()), + e (a.namespace_end ()); i != e;) + { + if (*i == L"##any") + { + os << "!n.empty ()"; + } + else if (*i == L"##other") + { + if (ns) + { + // Note that here I assume that ##other does not include + // unqualified names in a schema with target namespace. + // This is not what the spec says but that seems to be + // the consensus. + // + os << "(!ns.empty () && ns != " << strlit (ns) << ")"; + } + else + os << "!ns.empty ()"; + } + else if (*i == L"##local") + { + os << "(ns.empty () && !n.empty ())"; + } + else if (*i == L"##targetNamespace") + { + os << "ns == " << strlit (ns); + } + else + { + os << "ns == " << strlit (*i); + } + + if (++i != e) + os << " ||" << endl; + } + } + + virtual Void + traverse (SemanticGraph::Compositor& c) + { + // This compositor should already have been tested for + // triviality (empty). + // + Particles const& p (c.context ().get<Particles> ("prefixes")); + + Boolean paren (p.size () != 1); + + for (Particles::ConstIterator i (p.begin ()), e (p.end ()); + i != e;) + { + if (paren) + os << "("; + + dispatch (**i); + + if (paren) + os << ")"; + + if (++i != e) + os << " ||" << endl; + } + } + }; + + + // Generates particle namespace-name pair. Used to generate + // the _expected_element call. + // + struct ParticleName: Traversal::Compositor, + Traversal::Element, + Traversal::Any, + Context + { + ParticleName (Context& c) + : Context (c) + { + } + + virtual Void + traverse (SemanticGraph::Element& e) + { + String ns (e.qualified_p () ? e.namespace_ ().name () : String ()); + os << strlit (ns) << ", " << strlit (e.name ()); + } + + virtual Void + traverse (SemanticGraph::Any& a) + { + String const& ns (*a.namespace_begin ()); + os << strlit (ns) << ", " << L << "\"*\""; + } + + virtual Void + traverse (SemanticGraph::Compositor& c) + { + Particles const& p (c.context ().get<Particles> ("prefixes")); + + dispatch (**p.begin ()); + } + }; + + + // Common base for the ParticleIn{All, Choice, Sequence} treversers. + // + struct ParticleInCompositor: Context + { + protected: + ParticleInCompositor (Context& c, SemanticGraph::Complex& type) + : Context (c), type_ (type), particle_test_ (c) + { + } + + + // Generate sub-parser setup code as well as the pre/post calls. + // + Void + pre_post_calls (SemanticGraph::Particle& p) + { + using SemanticGraph::Element; + using SemanticGraph::Complex; + + if (Element* e = dynamic_cast<Element*> (&p)) + { + SemanticGraph::Type& type (e->type ()); + Boolean poly (polymorphic && !anonymous (type)); + + String name, inst, def_parser, map; + + if (e->context ().count("name")) + { + name = ename (*e); + inst = poly ? emember_cache (*e) : emember (*e); + + if (poly) + { + def_parser = emember (*e); + map = emember_map (*e); + } + } + else + { + // This is the subsequent mentioning of this element in the + // content. We need to find the first one in order to get + // to the escaped names. + // + Complex::NamesIteratorPair ip (type_.find (e->name ())); + assert (ip.first != ip.second); + Element& fe (dynamic_cast<Element&>(ip.first->named ())); + + name = ename (fe); + inst = poly ? emember_cache (fe) : emember (fe); + + if (poly) + { + def_parser = emember (fe); + map = emember_map (fe); + } + } + + if (poly) + { + // For pre-computing length. + // + String type_id (type.name ()); + + if (String type_ns = xml_ns_name (type)) + { + type_id += L' '; + type_id += type_ns; + } + + os << "if (t == 0 && this->" << def_parser << " != 0)" << endl + << "this->" << inst << " = this->" << def_parser << ";" + << "else" + << "{" + << string_type << " ts (" << fq_name (type) << + "::_static_type (), " << type_id.size () << "UL);" + << endl + << "if (t == 0)" << endl + << "t = &ts;" + << endl + << "if (this->" << def_parser << " != 0 && *t == ts)" << endl + << "this->" << inst << " = this->" << def_parser << ";" + << "else" + << "{"; + + // Check that the types are related by inheritance. + // + os << "if (t != &ts &&" << endl + << "!::xsd::cxx::parser::validating::" << + "inheritance_map_instance< " << char_type << + " > ().check (" << endl + << "t->data (), ts))" << endl + << "throw ::xsd::cxx::parser::dynamic_type< " << char_type << + " > (*t);" + << endl + << "if (this->" << map << " != 0)" << endl + << "this->" << inst << " = dynamic_cast< " << + fq_name (type) << "* > (" << endl + << "this->" << map << "->find (*t));" + << "else" << endl + << "this->" << inst << " = 0;" + << "}" + << "}"; + } + + os << "this->" << complex_base << "::context_.top ()." << + "parser_ = this->" << inst << ";" + << endl + << "if (this->" << inst << ")" << endl + << "this->" << inst << "->pre ();" + << "}" + << "else" // start + << "{" + << "if (this->" << inst << ")" + << "{"; + + String const& ret (ret_type (type)); + String const& post (post_name (type)); + + if (ret == L"void") + os << "this->" << inst << "->" << post << " ();" + << "this->" << name << " ();"; + else + os << arg_type (type) << " tmp (this->" << inst << "->" << + post << " ());" + << "this->" << name << " (tmp);"; + + os << "}"; + } + else + { + os << "this->_start_any_element (ns, n, t);" + << "this->" << complex_base << "::context_.top ().any_ = true;" + << "}" + << "else" // start + << "{" + << "this->" << complex_base << "::context_.top ().any_ = false;" + << "this->_end_any_element (ns, n);"; + } + } + + protected: + SemanticGraph::Complex& type_; + ParticleTest particle_test_; + }; + + + + // The 'all' compositor can only contain elements with min={0,1}, max=1. + // + struct ParticleInAll: Traversal::Element, + ParticleInCompositor + { + ParticleInAll (Context& c, SemanticGraph::Complex& type) + : ParticleInCompositor (c, type) + { + } + + virtual Void + traverse (SemanticGraph::Element& e) + { + UnsignedLong state (e.context ().get<UnsignedLong> ("state")); + + if (state != 0) + os << "else "; + + os << "if ("; + + particle_test_.traverse (e); + + os << ")" + << "{" + << "if (count[" << state << "UL] == 0)" + << "{" + << "if (start)" + << "{"; + + pre_post_calls (e); + + os << "count[" << state << "UL] = 1;" + << "}" + << "}" + << "else" // count != 0 + << "{" + << "assert (start);" // Assuming well-formed XML. + + // Since there is never more content after 'all', we could have + // as well thrown here. But instead we will let the code in + // start_element handle this along with other unexpected + // elements. + // + << "state = ~0UL;" + << "}" + << "}"; + } + }; + + + // + // + struct ParticleInChoice: Traversal::Particle, + Traversal::Compositor, + ParticleInCompositor + { + ParticleInChoice (Context& c, SemanticGraph::Complex& type) + : ParticleInCompositor (c, type), particle_name_ (c) + { + } + + virtual Void + traverse (SemanticGraph::Particle& p) + { + using SemanticGraph::Element; + + UnsignedLong state (p.context ().get<UnsignedLong> ("state")); + + UnsignedLong min (p.min ()), max (p.max ()); + + os << "case " << state << "UL:" << endl + << "{"; + + if (max != 1) // We don't need the test if max == 1. + { + os << "if ("; + + particle_test_.dispatch (p); + + os << ")" + << "{"; + } + + os << "if (start)" + << "{"; + + pre_post_calls (p); + + switch (max) + { + case 0: + { + os << "count++;"; + break; + } + case 1: + { + // We do not need to increment count because min <= max and + // we do not generate min check for min <= 1 (see below). + // + os << "state = ~0UL;"; + break; + } + default: + { + os << "if (++count == " << max << "UL)" << endl + << "state = ~0UL;"; + } + }; + + os << "}"; // start + + // We've already moved to the final state if max == 1. + // + if (max != 1) + { + os << "}" + << "else" + << "{" + << "assert (start);"; // Assuming well-formed XML + + // Check if min cardinality requirements have been met. Since + // count is always >= 1, don't generate dead code if min <= 1. + // + if (min > 1) + { + os << "if (count < " << min << "UL)" << endl + << "this->_expected_element (" << endl; + + particle_name_.dispatch (p); + + os << "," << endl + << "ns, n);"; + } + + + os << "state = ~0UL;" + << "}"; + } + + os << "break;" + << "}"; // case + } + + virtual Void + traverse (SemanticGraph::Compositor& c) + { + using SemanticGraph::Compositor; + + UnsignedLong max (c.max ()); + UnsignedLong min (c.context ().get<UnsignedLong> ("effective-min")); + UnsignedLong n (c.context ().get<UnsignedLong> ("comp-number")); + UnsignedLong state (c.context ().get<UnsignedLong> ("state")); + + String func (c.is_a<SemanticGraph::Choice> () ? + "choice_" : "sequence_"); + + os << "case " << state << "UL:" << endl + << "{" + << "unsigned long s (~0UL);" + << endl; + + Boolean first (true); + + for (Compositor::ContainsIterator ci (c.contains_begin ()); + ci != c.contains_end (); ++ci) + { + SemanticGraph::Particle& p (ci->particle ()); + + if (p.is_a<Compositor> () && !c.context ().count ("comp-number")) + continue; // Empty compositor. + + if (!p.context ().count ("prefix")) + break; + + UnsignedLong state (p.context ().get<UnsignedLong> ("state")); + + if (first) + first = false; + else + os << "else "; + + os << "if ("; + + particle_test_.dispatch (p); + + os << ")" << endl + << "s = " << state << "UL;"; + } + + // This compositor. + // + os << endl + << "if (s != ~0UL)" + << "{" + << "assert (start);"; // End is handled by the sub-machine. + + switch (max) + { + case 0: + { + os << "count++;"; + break; + } + case 1: + { + // We do not need to increment count because min <= max and + // we do not generate min check for min <= 1 (see below). + // + os << "state = ~0UL;"; + break; + } + default: + { + os << "if (++count == " << max << "UL)" << endl + << "state = ~0UL;"; + } + }; + + // Delegate to the sub-machine. + // + + os << endl + << "v_state_& vs = *static_cast< v_state_* > (" << + "this->v_state_stack_.top ());" + << "v_state_descr_& vd = vs.data[vs.size++];" // push + << endl + << "vd.func = &" << ename (type_) << "::" << func << n << ";" + << "vd.state = s;" + << "vd.count = 0;" + << endl + << "this->" << func << n << " (vd.state, vd.count, ns, n, t, true);" + << "}"; + + + // Not this compositor. We've elready moved to the final state + // if max == 1. + // + if (max != 1) + { + os << "else" + << "{" + << "assert (start);"; // Assuming well-formed XML + + // Check if min cardinality requirements have been met. Since + // count is always >= 1, don't generate dead code if min <= 1. + // + if (min > 1) + { + os << "if (count < " << min << "UL)" << endl + << "this->_expected_element (" << endl; + + particle_name_.dispatch (c); + + os << "," << endl + << "ns, n);"; + } + + os << "state = ~0UL;" + << "}"; + } + + os << "break;" + << "}"; // case + } + + private: + ParticleName particle_name_; + }; + + + // + // + struct ParticleInSequence: Traversal::Particle, + Traversal::Compositor, + ParticleInCompositor + { + ParticleInSequence (Context& c, + UnsignedLong state, + UnsignedLong next_state, + SemanticGraph::Complex& type) + : ParticleInCompositor (c, type), + state_ (state), particle_name_ (c) + { + // next_state == 0 indicates the terminal state (~0UL). + // + if (next_state != 0) + { + std::wostringstream ostr; + ostr << next_state; + next_state_ = ostr.str (); + } + else + next_state_ = L"~0"; + } + + virtual Void + traverse (SemanticGraph::Particle& p) + { + UnsignedLong min (p.min ()), max (p.max ()); + + os << "case " << state_ << "UL:" << endl + << "{" + << "if ("; + + particle_test_.dispatch (p); + + os << ")" + << "{"; + + // This element. + // + + os << "if (start)" + << "{"; + + pre_post_calls (p); + + switch (max) + { + case 0: + { + os << "count++;"; + break; + } + case 1: + { + os << "count = 0;" + << "state = " << next_state_ << "UL;"; + break; + } + default: + { + os << "if (++count == " << max << "UL)" + << "{" + << "count = 0;" + << "state = " << next_state_ << "UL;" + << "}"; + } + }; + + os << "}" // start + << "break;" + << "}"; + + // Not this element. + // + + os << "else" + << "{" + << "assert (start);"; // Assuming well-formed XML. + + // Check if min cardinality requirements have been met. Since + // count is always >= 0, don't generate dead code if min == 0. + // + if (min != 0) + { + os << "if (count < " << min << "UL)" << endl + << "this->_expected_element (" << endl; + + particle_name_.dispatch (p); + + os << "," << endl + << "ns, n);"; + } + + os << "count = 0;" + << "state = " << next_state_ << "UL;" + << "// Fall through." << endl + << "}" // else + << "}"; // case + } + + virtual Void + traverse (SemanticGraph::Compositor& c) + { + using SemanticGraph::Compositor; + + UnsignedLong max (c.max ()); + UnsignedLong min (c.context ().get<UnsignedLong> ("effective-min")); + UnsignedLong n (c.context ().get<UnsignedLong> ("comp-number")); + + String func (c.is_a<SemanticGraph::Choice> () ? + "choice_" : "sequence_"); + + os << "case " << state_ << "UL:" << endl + << "{" + << "unsigned long s (~0UL);" + << endl; + + Boolean first (true); + + for (Compositor::ContainsIterator ci (c.contains_begin ()); + ci != c.contains_end (); ++ci) + { + SemanticGraph::Particle& p (ci->particle ()); + + if (p.is_a<Compositor> () && !c.context ().count ("comp-number")) + continue; // Empty compositor. + + if (!p.context ().count ("prefix")) + break; + + UnsignedLong state (p.context ().get<UnsignedLong> ("state")); + + if (first) + first = false; + else + os << "else "; + + os << "if ("; + + particle_test_.dispatch (p); + + os << ")" << endl + << "s = " << state << "UL;"; + } + + // This element. + // + + os << endl + << "if (s != ~0UL)" + << "{" + << "assert (start);"; // End is handled by the sub-machine. + + switch (max) + { + case 0: + { + os << "count++;" + << endl; + break; + } + case 1: + { + os << "count = 0;" + << "state = " << next_state_ << "UL;" + << endl; + break; + } + default: + { + os << "if (++count == " << max << "UL)" + << "{" + << "count = 0;" + << "state = " << next_state_ << "UL;" + << "}"; + } + }; + + // Delegate to the sub-machine. + // + + os << "v_state_& vs = *static_cast< v_state_* > (" << + "this->v_state_stack_.top ());" + << "v_state_descr_& vd = vs.data[vs.size++];" // push + << endl + << "vd.func = &" << ename (type_) << "::" << func << n << ";" + << "vd.state = s;" + << "vd.count = 0;" + << endl + << "this->" << func << n << " (vd.state, vd.count, ns, n, t, true);" + << "break;" + << "}"; + + // Not this compositor. + // + + os << "else" + << "{" + << "assert (start);"; // Assuming well-formed XML + + // Check if min cardinality requirements have been met. Since + // count is always >= 0, don't generate dead code if min == 0. + // + if (min != 0) + { + os << "if (count < " << min << "UL)" << endl + << "this->_expected_element (" << endl; + + particle_name_.dispatch (c); + + os << "," << endl + << "ns, n);"; + } + + os << "count = 0;" + << "state = " << next_state_ << "UL;" + << "// Fall through." << endl + << "}" // else + << "}"; // case + } + + private: + UnsignedLong state_; + String next_state_; + + ParticleName particle_name_; + }; + + + // + // + struct ParticleFunction: Traversal::All, + Traversal::Choice, + Traversal::Sequence, + Context + { + ParticleFunction (Context& c, SemanticGraph::Complex& type) + : Context (c), type_ (type) + { + *this >> contains_particle_ >> *this; + } + + + virtual Void + traverse (SemanticGraph::All& a) + { + if (!a.context().count ("comp-number")) // Empty compositor. + return; + + using SemanticGraph::Element; + using SemanticGraph::Compositor; + + + os << "void " << ename (type_) << "::" << endl + << "all_0 (unsigned long& state," << endl + << "unsigned char* count," << endl + << "const " << string_type << "& ns," << endl + << "const " << string_type << "& n," << endl + << "const " << string_type << "* t," << endl + << "bool start)" + << "{" + << "XSD_UNUSED (t);" + << endl; + + for (Compositor::ContainsIterator ci (a.contains_begin ()), + ce (a.contains_end ()); ci != ce; ++ci) + { + ParticleInAll t (*this, type_); + t.dispatch (ci->particle ()); + } + + // Handle the flush. + // + os << "else if (n.empty () && ns.empty ())" + << "{"; + + for (Compositor::ContainsIterator ci (a.contains_begin ()), + ce (a.contains_end ()); ci != ce; ++ci) + { + if (ci->min () == 0) + continue; + + Element& e (dynamic_cast<Element&> (ci->particle ())); + String ns (e.qualified_p () ? e.namespace_ ().name () : String ()); + UnsignedLong state (e.context ().get<UnsignedLong> ("state")); + + os << "if (count[" << state << "UL] == 0)" << endl + << "this->_expected_element (" << endl + << strlit (ns) << ", " << + strlit (e.name ()) << ");" + << endl; + } + + os << "state = ~0UL;" + << "}" + << "else" << endl + << "state = ~0UL;" + << "}"; + } + + virtual Void + traverse (SemanticGraph::Choice& c) + { + if (!c.context().count ("comp-number")) // Empty compositor. + return; + + using SemanticGraph::Compositor; + + UnsignedLong n (c.context ().get<UnsignedLong> ("comp-number")); + + os << "void " << ename (type_) << "::" << endl + << "choice_" << n << " (unsigned long& state," << endl + << "unsigned long& count," << endl + << "const " << string_type << "& ns," << endl + << "const " << string_type << "& n," << endl + << "const " << string_type << "* t," << endl + << "bool start)" + << "{" + << "XSD_UNUSED (count);" + << "XSD_UNUSED (ns);" + << "XSD_UNUSED (n);" + << "XSD_UNUSED (t);" + << endl + << "switch (state)" + << "{"; + + for (Compositor::ContainsIterator ci (c.contains_begin ()), + ce (c.contains_end ()); ci != ce; ++ci) + { + SemanticGraph::Particle& p (ci->particle ()); + + if (p.is_a<Compositor> () && !p.context().count ("comp-number")) + continue; // Empty compositor. + + ParticleInChoice t (*this, type_); + t.dispatch (p); + } + + os << "}" // switch + << "}"; + + // Generate nested compositor functions. + // + Traversal::Choice::traverse (c); + } + + virtual Void + traverse (SemanticGraph::Sequence& s) + { + if (!s.context().count ("comp-number")) // Empty compositor. + return; + + using SemanticGraph::Compositor; + + UnsignedLong n (s.context ().get<UnsignedLong> ("comp-number")); + + os << "void " << ename (type_) << "::" << endl + << "sequence_" << n << " (unsigned long& state," << endl + << "unsigned long& count," << endl + << "const " << string_type << "& ns," << endl + << "const " << string_type << "& n," << endl + << "const " << string_type << "* t," << endl + << "bool start)" + << "{" + << "XSD_UNUSED (t);" + << endl + << "switch (state)" + << "{"; + + UnsignedLong state (0); + + for (Compositor::ContainsIterator ci (s.contains_begin ()), + ce (s.contains_end ()); ci != ce;) + { + SemanticGraph::Particle& p (ci->particle ()); + + if (p.is_a<Compositor> () && !p.context().count ("comp-number")) + { + // Empty compositor. + // + ++ci; + continue; + } + + // Find the next state. + // + do + ++ci; + while (ci != ce && + ci->particle ().is_a<Compositor> () && + !ci->particle ().context().count ("comp-number")); + + UnsignedLong next (ci == ce ? 0 : state + 1); + + ParticleInSequence t (*this, state++, next, type_); + t.dispatch (p); + } + + os << "case ~0UL:" << endl + << "break;" + << "}" // switch + << "}"; + + // Generate nested compositor functions. + // + Traversal::Sequence::traverse (s); + } + + private: + SemanticGraph::Complex& type_; + Traversal::ContainsParticle contains_particle_; + }; + + + // + // + struct CompositorPre: Traversal::All, + Traversal::Compositor, + Context + { + CompositorPre (Context& c, SemanticGraph::Complex& type) + : Context (c), type_ (type) + { + } + + virtual Void + traverse (SemanticGraph::All& a) + { + // Clear the counts and push the initial state. + // + os << "v_all_count_.push ();" + << endl; + + SemanticGraph::Compositor& c (a); + traverse (c); + } + + virtual Void + traverse (SemanticGraph::Compositor&) // Choice and sequence. + { + os << "v_state_& vs = *static_cast< v_state_* > (" << + "this->v_state_stack_.top ());" + << "v_state_descr_& vd = vs.data[vs.size++];" // push + << endl + << "vd.func = 0;" + << "vd.state = 0;" + << "vd.count = 0;"; + } + + private: + SemanticGraph::Complex& type_; + }; + + + // + // + struct CompositorStartElement: Traversal::All, + Traversal::Compositor, + Context + { + CompositorStartElement (Context& c, SemanticGraph::Complex& type) + : Context (c), type_ (type), + particle_test_ (c), particle_name_ (c) + { + } + + virtual Void + traverse (SemanticGraph::All&) + { + // The 'all' state machine reaches the final state only + // on an unknown element, in which case we won't get here + // again (it would be a validation error). Note that 'all' + // compositor cannot contain nested compositors so we don't + // need to re-set vd. + // + os << "all_0 (vd->state, v_all_count_.top (), ns, n, t, true);" + << endl + << "if (vd->state != ~0UL)" << endl + << "vd->count++;" + << "else" << endl + << "return false;" // Let our parent handle this. + << endl; + } + + virtual Void + traverse (SemanticGraph::Compositor& c) // Choice and sequence. + { + using SemanticGraph::Compositor; + + UnsignedLong max (c.max ()); + UnsignedLong min (c.context ().get<UnsignedLong> ("effective-min")); + UnsignedLong n (c.context ().get<UnsignedLong> ("comp-number")); + + String func (c.is_a<SemanticGraph::Choice> () ? + "choice_" : "sequence_"); + + // Invoke the current state machine. If it reaches its + // terminal state, pop it and invoke the next one until + // we reach the top, which requires special handling. + // + os << "while (vd->func != 0)" + << "{" + << "(this->*vd->func) (vd->state, vd->count, ns, n, t, true);" + << endl + << "vd = vs.data + (vs.size - 1);" // re-acquire + << endl + << "if (vd->state == ~0UL)" << endl + << "vd = vs.data + (--vs.size - 1);" // pop + << "else" << endl + << "break;" + << "}"; + + + // Check if we got to the top. This code is pretty much the + // same as the one found in ParticleInSequence. + // + os << "if (vd->func == 0)" + << "{" + << "if (vd->state != ~0UL)" + << "{" + << "unsigned long s = ~0UL;" + << endl; + + Boolean first (true); + + // Note that we don't need to worry about the compositor + // being empty - this case is handled by our caller. + // + for (Compositor::ContainsIterator ci (c.contains_begin ()); + ci != c.contains_end (); ++ci) + { + SemanticGraph::Particle& p (ci->particle ()); + + if (p.is_a<Compositor> () && !c.context ().count ("comp-number")) + continue; // Empty compositor. + + if (!p.context ().count ("prefix")) + break; + + UnsignedLong state (p.context ().get<UnsignedLong> ("state")); + + if (first) + first = false; + else + os << "else "; + + os << "if ("; + + particle_test_.dispatch (p); + + os << ")" << endl + << "s = " << state << "UL;"; + } + + os << endl + << "if (s != ~0UL)" + << "{"; + + // This element is a prefix of the root compositor. + // + + switch (max) + { + case 0: + { + os << "vd->count++;"; + break; + } + case 1: + { + os << "vd->count++;" + << "vd->state = ~0UL;"; + break; + } + default: + { + os << "if (++vd->count == " << max << "UL)" << endl + << "vd->state = ~0UL;"; + } + }; + + // Delegate to the sub-machine. + // + + os << endl + << "vd = vs.data + vs.size++;" // push + << "vd->func = &" << ename (type_) << "::" << func << n << ";" + << "vd->state = s;" + << "vd->count = 0;" + << endl + << "this->" << func << n << " (vd->state, vd->count, ns, n, t, true);" + << "}"; + + // This element is not our prefix. + // + + os << "else" + << "{"; + + // Check if min cardinality requirements have been met. Since + // count is always >= 0, don't generate dead code if min == 0. + // + if (min != 0) + { + os << "if (vd->count < " << min << "UL)" << endl + << "this->_expected_element (" << endl; + + particle_name_.dispatch (c); + + os << "," << endl + << "ns, n);"; + } + + // Return false to indicate that we are not handling this element. + // + os << "return false;" + << "}" + << "}" // if (state != ~0) + << "else" << endl + << "return false;" + << "}"; // if (function == 0) + } + + private: + SemanticGraph::Complex& type_; + ParticleTest particle_test_; + ParticleName particle_name_; + }; + + + // + // + struct CompositorEndElement: Traversal::All, + Traversal::Compositor, + Context + { + CompositorEndElement (Context& c, SemanticGraph::Complex& type) + : Context (c), type_ (type) + { + } + + virtual Void + traverse (SemanticGraph::All&) + { + os << "all_0 (vd.state, v_all_count_.top (), " << + "ns, n, 0, false);" + << endl; + } + + virtual Void + traverse (SemanticGraph::Compositor&) // Choice and sequence. + { + os << "assert (vd.func != 0);" + << "(this->*vd.func) (vd.state, vd.count, ns, n, 0, false);" + << endl + << "if (vd.state == ~0UL)" << endl + << "vs.size--;" // pop + << endl; + } + + private: + SemanticGraph::Complex& type_; + }; + + + // + // + struct CompositorPost: Traversal::All, + Traversal::Compositor, + Context + { + CompositorPost (Context& c, SemanticGraph::Complex& type) + : Context (c), type_ (type), particle_name_ (c) + { + } + + virtual Void + traverse (SemanticGraph::All& a) + { + using SemanticGraph::Element; + + os << "v_state_& vs = *static_cast< v_state_* > (" << + "this->v_state_stack_.top ());" + << "v_state_descr_& vd = vs.data[vs.size - 1];" + << endl; + + // Flush the state machine with the empty element name. This + // allows us to detect missing content. + // + os << "if (vd.count != 0)" + << "{" + << string_type << " empty;" + << "all_0 (vd.state, v_all_count_.top (), empty, empty, 0, true);" + << "}"; + + if (a.context ().get<UnsignedLong> ("effective-min") != 0) + { + os << "else" << endl + << "this->_expected_element (" << endl; + + particle_name_.dispatch (a); + + os << ");"; + } + + os << endl + << "vs.size--;" // pop + << "v_all_count_.pop ();"; + } + + virtual Void + traverse (SemanticGraph::Compositor& c) // Choice and sequence. + { + UnsignedLong min (c.context ().get<UnsignedLong> ("effective-min")); + + os << "v_state_& vs = *static_cast< v_state_* > (" << + "this->v_state_stack_.top ());" + << "v_state_descr_* vd = vs.data + (vs.size - 1);" + << endl; + + + // Flush unfinished state machines with the empty element name. + // This allows us to detect missing content. Note that I am + // not re-setting vd since no new compositors are pushed on + // flush. + // + os << string_type << " empty;" + << "while (vd->func != 0)" + << "{" + << "(this->*vd->func) (vd->state, vd->count, empty, empty, 0, true);" + << "assert (vd->state == ~0UL);" + << "vd = vs.data + (--vs.size - 1);" // pop + << "}"; + + // Check if min cardinality requirements have been met. Since + // count is always >= 0, don't generate dead code if min == 0. + // + if (min != 0) + { + os << "if (vd->count < " << min << "UL)" << endl + << "this->_expected_element (" << endl; + + particle_name_.dispatch (c); + + os << ");"; + } + } + + private: + SemanticGraph::Complex& type_; + ParticleName particle_name_; + }; + + + // + // + struct Complex: Traversal::Complex, Context + { + Complex (Context& c) + : Context (c) + { + } + + virtual Void + traverse (Type& c) + { + // Nothing to generate if we don't have any elements and wildcards. + // + if (!has<Traversal::Element> (c) && + !has_particle<Traversal::Any> (c)) + return; + + using SemanticGraph::Compositor; + + String const& name (ename (c)); + Compositor& comp (c.contains_compositor ().compositor ()); + + // Don't use restriction_p here since we don't want special + // treatment of anyType. + // + Boolean restriction ( + c.inherits_p () && + c.inherits ().is_a<SemanticGraph::Restricts> ()); + + os <<"// Element validation and dispatch functions for " << + name << "." << endl + <<"//" << endl; + + // _start_element_impl + // + + os << "bool " << name << "::" << endl + << "_start_element_impl (const " << string_type << "& ns," << endl + << "const " << string_type << "& n," << endl + << "const " << string_type << "* t)" + << "{" + << "XSD_UNUSED (t);" + << endl; + + os << "v_state_& vs = *static_cast< v_state_* > (" << + "this->v_state_stack_.top ());" + << "v_state_descr_* vd = vs.data + (vs.size - 1);" + << endl; + + //@@ OPT: I don't really need to call parser_base since it always + // returns false. + // + // In case of an inheritance-by-extension, call our base first. + // We don't need to generate this code for the 'all' compositor + // because it can only inherit from the empty content model. + // States of the root machine for sequence and choice: + // + // 0 - calling base + // 1 - base returned false + // ~0 - terminal state + // + if (!restriction && !comp.is_a<SemanticGraph::All> ()) + { + os << "if (vd->func == 0 && vd->state == 0)" + << "{" + << "if (this->"; + + if (c.inherits_p ()) + os << fq_name (c.inherits ().base ()); + else + os << complex_base; + + + os << "::_start_element_impl (ns, n, t))" << endl + << "return true;" + << "else" << endl + << "vd->state = 1;" + << "}"; + } + + { + CompositorStartElement t (*this, c); + t.dispatch (comp); + } + + os << "return true;" + << "}"; + + + // _end_element_impl + // + + os << "bool " << name << "::" << endl + << "_end_element_impl (const " << string_type << "& ns," << endl + << "const " << string_type << "& n)" + << "{"; + + os << "v_state_& vs = *static_cast< v_state_* > (" << + "this->v_state_stack_.top ());" + << "v_state_descr_& vd = vs.data[vs.size - 1];" + << endl; + + //@@ OPT: I don't really need to call parser_base since it always + // returns false. + // + // In case of an inheritance-by-extension, call our base first. + // We don't need to generate this code for the 'all' compositor + // because it can only inherit from the empty content model. + // + if (!restriction && !comp.is_a<SemanticGraph::All> ()) + { + os << "if (vd.func == 0 && vd.state == 0)" + << "{" + << "if (!"; + + if (c.inherits_p ()) + os << fq_name (c.inherits ().base ()); + else + os << complex_base; + + os << "::_end_element_impl (ns, n))" << endl + << "assert (false);" // Start and end should match. + << "return true;" + << "}"; + } + + { + CompositorEndElement t (*this, c); + t.dispatch (comp); + } + + os << "return true;" + << "}"; + + + // _pre_e_validate + // + os << "void " << name << "::" << endl + << "_pre_e_validate ()" + << "{" + << "this->v_state_stack_.push ();" + << "static_cast< v_state_* > (this->v_state_stack_.top ())->" << + "size = 0;" + << endl; + + { + CompositorPre t (*this, c); + t.dispatch (comp); + } + + // In case of an inheritance-by-extension, call our base + // _pre_e_validate. We don't need to generate this code for the + // 'all' compositor because it can only inherit from the empty + // content model. + // + if (!restriction && !comp.is_a<SemanticGraph::All> ()) + { + // We don't need to call parser_base's implementation + // since it does nothing. + // + if (c.inherits_p ()) + { + os << endl + << fq_name (c.inherits ().base ()) << "::_pre_e_validate ();"; + } + } + + os << "}"; + + + // _post_e_validate + // + os << "void " << name << "::" << endl + << "_post_e_validate ()" + << "{"; + + // In case of an inheritance-by-extension, call our base + // _post_e_validate. We don't need to generate this code for + // the 'all' compositor because it can only inherit from + // the empty content model. + // + if (!restriction && !comp.is_a<SemanticGraph::All> ()) + { + // We don't need to call parser_base's implementation + // since it does nothing. + // + if (c.inherits_p ()) + { + os << fq_name (c.inherits ().base ()) << "::_post_e_validate ();" + << endl; + } + } + + { + CompositorPost t (*this, c); + t.dispatch (c.contains_compositor ().compositor ()); + } + + os << endl + << "this->v_state_stack_.pop ();" + << "}"; + + // + // + ParticleFunction t (*this, c); + t.dispatch (c.contains_compositor ().compositor ()); + } + }; + } + + Void + generate_element_validation_source (Context& ctx) + { + ctx.os << "#include <cassert>" << endl + << endl; + + Traversal::Schema schema; + + Traversal::Sources sources; + Traversal::Names schema_names; + + Namespace ns (ctx); + Traversal::Names names; + + schema >> sources >> schema; + schema >> schema_names >> ns >> names; + + Complex complex (ctx); + + names >> complex; + + schema.dispatch (ctx.schema_root); + } + } +} diff --git a/xsd/xsd/cxx/parser/element-validation-source.hxx b/xsd/xsd/cxx/parser/element-validation-source.hxx new file mode 100644 index 0000000..544b8f1 --- /dev/null +++ b/xsd/xsd/cxx/parser/element-validation-source.hxx @@ -0,0 +1,20 @@ +// file : xsd/cxx/parser/element-validation-source.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef CXX_PARSER_ELEMENT_VALIDATION_SOURCE_HXX +#define CXX_PARSER_ELEMENT_VALIDATION_SOURCE_HXX + +#include <cxx/parser/elements.hxx> + +namespace CXX +{ + namespace Parser + { + Void + generate_element_validation_source (Context&); + } +} + +#endif // CXX_PARSER_ELEMENT_VALIDATION_SOURCE_HXX diff --git a/xsd/xsd/cxx/parser/elements.cxx b/xsd/xsd/cxx/parser/elements.cxx new file mode 100644 index 0000000..b3458c7 --- /dev/null +++ b/xsd/xsd/cxx/parser/elements.cxx @@ -0,0 +1,275 @@ +// file : xsd/cxx/parser/elements.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <cxx/parser/elements.hxx> + +namespace CXX +{ + namespace Parser + { + // Keep this symbol first to help HP-UX linker (long symbols?). + // + Content::Value Context:: + content (SemanticGraph::Complex& c) + { + using namespace SemanticGraph; + + if (c.mixed_p ()) + return Content::mixed; + + if (c.inherits_p ()) + { + Type& base (c.inherits ().base ()); + + if (Complex* cb = dynamic_cast<Complex*> (&base)) + return content (*cb); + + if (base.is_a<AnyType> ()) + return Content::complex; + + // Everyhting else (built-in type and AnySimpleType) is simple + // content. + // + return Content::simple; + } + else + return Content::complex; + } + + Context:: + Context (std::wostream& o, + SemanticGraph::Schema& root, + SemanticGraph::Path const& path, + CLI::Options const& ops, + StringLiteralMap const* map, + Regex const* he, + Regex const* ie, + Regex const* hie) + : CXX::Context (o, + root, + path, + map, + ops.value<CLI::char_type> (), + ops.value<CLI::char_encoding> (), + ops.value<CLI::include_with_brackets> (), + ops.value<CLI::include_prefix> (), + ops.value<CLI::export_symbol> (), + ops.value<CLI::namespace_map> (), + ops.value<CLI::namespace_regex> (), + ops.value<CLI::namespace_regex_trace> (), + ops.value<CLI::include_regex> (), + ops.value<CLI::include_regex_trace> (), + ops.value<CLI::generate_inline> (), + ops.value<CLI::reserved_name> ()), + options (ops), + xml_parser (xml_parser_), + simple_base (simple_base_), + complex_base (complex_base_), + list_base (list_base_), + cout_inst (cout_inst_), + cerr_inst (cerr_inst_), + parser_map (parser_map_), + std_string_type (std_string_type_), + validation (validation_), + polymorphic (polymorphic_), + hxx_expr (he), + ixx_expr (ie), + hxx_impl_expr (hie), + xml_parser_ (ops.value<CLI::xml_parser> ()), + validation_ ((ops.value<CLI::xml_parser> () == "expat" || + ops.value<CLI::generate_validation> ()) && + !ops.value<CLI::suppress_validation> ()), + polymorphic_ (ops.value<CLI::generate_polymorphic> ()) + { + if (char_type == L"char") + std_string_type = L"::std::string"; + else if (char_type == L"wchar_t") + std_string_type = L"::std::wstring"; + else + std_string_type = L"::std::basic_string< " + char_type + L" >"; + + String xs_ns (xs_ns_name ()); + + string_type = xs_ns + L"::ro_string"; + simple_base = xs_ns + L"::simple_content"; + complex_base = xs_ns + L"::complex_content"; + list_base = xs_ns + L"::list_base"; + + cout_inst = (char_type == L"char" ? L"std::cout" : L"std::wcout"); + cerr_inst = (char_type == L"char" ? L"std::cerr" : L"std::wcerr"); + + if (polymorphic) + parser_map_ = xs_ns + L"::parser_map"; + } + + Context:: + Context (Context& c) + : CXX::Context (c), + options (c.options), + xml_parser (c.xml_parser), + simple_base (c.simple_base), + complex_base (c.complex_base), + list_base (c.list_base), + cout_inst (c.cout_inst), + cerr_inst (c.cerr_inst), + parser_map (c.parser_map), + std_string_type (c.std_string_type), + validation (c.validation), + polymorphic (c.polymorphic), + hxx_expr (c.hxx_expr), + ixx_expr (c.ixx_expr), + hxx_impl_expr (c.hxx_impl_expr) + { + } + + Context:: + Context (Context& c, std::wostream& o) + : CXX::Context (c, o), + options (c.options), + xml_parser (c.xml_parser), + simple_base (c.simple_base), + complex_base (c.complex_base), + list_base (c.list_base), + cout_inst (c.cout_inst), + cerr_inst (c.cerr_inst), + parser_map (c.parser_map), + std_string_type (c.std_string_type), + validation (c.validation), + polymorphic (c.polymorphic), + hxx_expr (c.hxx_expr), + ixx_expr (c.ixx_expr), + hxx_impl_expr (c.hxx_impl_expr) + { + } + + Boolean Context:: + anonymous (SemanticGraph::Type& t) + { + return t.context ().count ("anonymous"); + } + + String const& Context:: + ret_type (SemanticGraph::Type& t) + { + return t.context ().get<String> ("ret-type"); + } + + String const& Context:: + arg_type (SemanticGraph::Type& t) + { + return t.context ().get<String> ("arg-type"); + } + + String const& Context:: + post_name (SemanticGraph::Type& t) + { + return t.context ().get<String> ("post"); + } + + String const& Context:: + eparser (SemanticGraph::Member& m) + { + return m.context ().get<String> ("parser"); + } + + String const& Context:: + emember (SemanticGraph::Member& m) + { + return m.context ().get<String> ("member"); + } + + String const& Context:: + emember_cache (SemanticGraph::Member& m) + { + return m.context ().get<String> ("member-cache"); + } + + String const& Context:: + emember_map (SemanticGraph::Member& m) + { + return m.context ().get<String> ("member-map"); + } + + String const& Context:: + eimpl (SemanticGraph::Type& t) + { + return t.context ().get<String> ("impl"); + } + + // Includes + // + Void TypeForward:: + traverse (SemanticGraph::Type& t) + { + os << "class " << t.context ().get<String> (name_key_) << ";"; + } + + Void Includes:: + traverse_ (SemanticGraph::Uses& u) + { + // Support for weak (forward) inclusion used in the file-per-type + // compilation model. + // + SemanticGraph::Schema& s (u.schema ()); + Boolean weak (u.context ().count ("weak")); + + if (weak && (type_ == header || type_ == impl_header)) + { + // Generate forward declarations. We don't really need them + // in the impl files. + // + if (type_ == header) + schema_.dispatch (s); + + return; + } + + if (type_ == source && !weak) + return; + + SemanticGraph::Path path ( + s.context ().count ("renamed") + ? s.context ().get<SemanticGraph::Path> ("renamed") + : u.path ()); + + // Try to use the portable representation of the path. If that + // fails, fall back to the native representation. + // + NarrowString path_str; + try + { + path_str = path.string (); + } + catch (SemanticGraph::InvalidPath const&) + { +#if !defined(BOOST_FILESYSTEM_VERSION) || BOOST_FILESYSTEM_VERSION == 2 + path_str = path.native_file_string (); +#else + path_str = path.string (); +#endif + } + + String inc_path; + + switch (type_) + { + case header: + case source: + { + inc_path = ctx_.hxx_expr->merge (path_str); + break; + } + case impl_header: + { + inc_path = ctx_.hxx_impl_expr->merge (path_str); + break; + } + } + + ctx_.os << "#include " << ctx_.process_include_path (inc_path) << endl + << endl; + } + } +} diff --git a/xsd/xsd/cxx/parser/elements.hxx b/xsd/xsd/cxx/parser/elements.hxx new file mode 100644 index 0000000..ee5ca86 --- /dev/null +++ b/xsd/xsd/cxx/parser/elements.hxx @@ -0,0 +1,314 @@ +// file : xsd/cxx/parser/elements.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef CXX_PARSER_ELEMENTS_HXX +#define CXX_PARSER_ELEMENTS_HXX + +#include <sstream> + +#include <backend-elements/regex.hxx> + +#include <cxx/elements.hxx> + +#include <cxx/parser/cli.hxx> + +namespace CXX +{ + namespace Parser + { + struct Content + { + enum Value + { + simple, + complex, + mixed + }; + }; + + // + // + class Context: public CXX::Context + { + public: + typedef BackendElements::Regex::Expression<Char> Regex; + + public: + Context (std::wostream&, + SemanticGraph::Schema&, + SemanticGraph::Path const& path, + CLI::Options const&, + StringLiteralMap const*, + Regex const* hxx_expr, + Regex const* ixx_expr, + Regex const* hxx_impl_expr); + + protected: + Context (Context& c); + Context (Context& c, std::wostream& o); + + public: + Boolean + restriction_p (SemanticGraph::Complex& c) const + { + if (c.inherits_p () && + c.inherits ().is_a<SemanticGraph::Restricts> ()) + { + // Restriction of anyType is a special case. + // + return !c.inherits ().base ().is_a<SemanticGraph::AnyType> (); + } + + return false; + } + + public: + static Content::Value + content (SemanticGraph::Complex&); + + public: + static Boolean + anonymous (SemanticGraph::Type&); + + public: + static String const& + ret_type (SemanticGraph::Type&); + + static String const& + arg_type (SemanticGraph::Type&); + + static String const& + post_name (SemanticGraph::Type&); + + public: + static String const& + eparser (SemanticGraph::Member&); + + static String const& + emember (SemanticGraph::Member&); + + static String const& + emember_cache (SemanticGraph::Member&); + + static String const& + emember_map (SemanticGraph::Member&); + + public: + static String const& + eimpl (SemanticGraph::Type&); + + public: + CLI::Options const& options; + String& xml_parser; + String& simple_base; + String& complex_base; + String& list_base; + String& cout_inst; + String& cerr_inst; + String& parser_map; + String& std_string_type; + Boolean& validation; + Boolean& polymorphic; + + Regex const* hxx_expr; + Regex const* ixx_expr; + Regex const* hxx_impl_expr; + + private: + String xml_parser_; + String simple_base_; + String complex_base_; + String list_base_; + String cout_inst_; + String cerr_inst_; + String parser_map_; + String std_string_type_; + Boolean validation_; + Boolean polymorphic_; + }; + + // + // + struct RequiredAttributeTest: Traversal::Attribute + { + RequiredAttributeTest (Boolean& result) + : result_ (result) + { + } + + virtual Void + traverse (Type& a) + { + if (!result_ && !a.optional_p ()) + result_ = true; + } + + private: + Boolean& result_; + }; + + // + // + struct ParserParamDecl: Traversal::Complex, + Traversal::List, + Traversal::Member, + Context + { + ParserParamDecl (Context& c, Boolean name_arg) + : Context (c), first_ (true), name_arg_ (name_arg) + { + inherits_ >> *this; + names_ >> *this; + } + + virtual Void + traverse (SemanticGraph::Complex& c) + { + inherits (c, inherits_); + + if (!restriction_p (c)) + names (c, names_); + } + + virtual Void + traverse (SemanticGraph::List& l) + { + if (!first_) + os << "," << endl; + else + first_ = false; + + os << fq_name (l.argumented ().type ()) << "&"; + + if (name_arg_) + os << " " << ename (l) << "_item"; + else + os << " /* " << comment (l.name ()) << " item */"; + } + + virtual Void + traverse (SemanticGraph::Member& m) + { + if (skip (m)) return; + + if (!first_) + os << "," << endl; + else + first_ = false; + + os << fq_name (m.type ()) << "&"; + + if (name_arg_) + os << " " << ename (m); + else + os << " /* " << comment (m.name ()) << " */"; + } + + private: + Traversal::Inherits inherits_; + Traversal::Names names_; + + Boolean first_; + Boolean name_arg_; + }; + + + // + // + struct TypeForward: Traversal::Type, Context + { + TypeForward (Context& c, Char const* name_key) + : Context (c), name_key_ (name_key) + { + } + + virtual Void + traverse (SemanticGraph::Type& t); + + private: + Char const* name_key_; + }; + + struct Includes: Traversal::Imports, + Traversal::Includes + { + enum Type + { + header, + source, + impl_header + }; + + Includes (Context& c, Type t) + : ctx_ (c), + type_ (t), + namespace_ (c), + type_forward_ (c, t == header ? "name" : "impl") + { + schema_ >> schema_names_ >> namespace_ >> names_ >> type_forward_; + } + + virtual Void + traverse (SemanticGraph::Imports& i) + { + traverse_ (i); + } + + virtual Void + traverse (SemanticGraph::Includes& i) + { + traverse_ (i); + } + + private: + Void + traverse_ (SemanticGraph::Uses&); + + private: + Context& ctx_; + Type type_; + + Traversal::Schema schema_; + Traversal::Names schema_names_; + Namespace namespace_; + Traversal::Names names_; + TypeForward type_forward_; + }; + + // Find root element for the test driver. + // + struct RootElement: Traversal::Element + { + RootElement (CLI::Options const& options, + SemanticGraph::Element*& element) + : options_ (options), element_ (element) + { + } + + virtual Void + traverse (Type& e) + { + if (options_.value<CLI::root_element_first> ()) + { + if (element_ == 0) + element_ = &e; + } + else if (String name = options_.value<CLI::root_element> ()) + { + if (e.name () == name) + element_ = &e; + } + else + element_ = &e; // Cover root-element-last and no option. + } + + private: + CLI::Options const& options_; + SemanticGraph::Element*& element_; + }; + } +} + +#endif // CXX_PARSER_ELEMENTS_HXX diff --git a/xsd/xsd/cxx/parser/generator.cxx b/xsd/xsd/cxx/parser/generator.cxx new file mode 100644 index 0000000..b3aee76 --- /dev/null +++ b/xsd/xsd/cxx/parser/generator.cxx @@ -0,0 +1,1588 @@ +// file : xsd/cxx/parser/generator.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <type-map/lexer.hxx> +#include <type-map/parser.hxx> +#include <type-map/type-map.hxx> + +#include <cxx/parser/elements.hxx> +#include <cxx/parser/generator.hxx> + +#include <cxx/parser/validator.hxx> +#include <cxx/parser/name-processor.hxx> +#include <cxx/parser/state-processor.hxx> +#include <cxx/parser/type-processor.hxx> + +#include <cxx/parser/parser-header.hxx> +#include <cxx/parser/parser-inline.hxx> +#include <cxx/parser/parser-source.hxx> +#include <cxx/parser/parser-forward.hxx> + +#include <cxx/parser/impl-header.hxx> +#include <cxx/parser/impl-source.hxx> +#include <cxx/parser/driver-source.hxx> + +#include <cxx/parser/element-validation-source.hxx> +#include <cxx/parser/attribute-validation-source.hxx> +#include <cxx/parser/characters-validation-source.hxx> + +#include <xsd-frontend/semantic-graph.hxx> + +#include <backend-elements/regex.hxx> +#include <backend-elements/indentation/cxx.hxx> +#include <backend-elements/indentation/sloc.hxx> +#include <backend-elements/indentation/clip.hxx> + +#include <cult/containers/set.hxx> +#include <cult/containers/vector.hxx> + +#include <boost/filesystem/fstream.hpp> + +#include <iostream> + +#include <usage.hxx> + +#include "../../../libxsd/xsd/cxx/version.hxx" + +using std::endl; +using std::wcerr; + +using namespace XSDFrontend::SemanticGraph; + +// +// +typedef +boost::filesystem::wifstream +WideInputFileStream; + +typedef +boost::filesystem::wofstream +WideOutputFileStream; + +typedef +boost::filesystem::ifstream +NarrowInputFileStream; + +namespace CXX +{ + namespace + { + Char const copyright_gpl[] = + "// Copyright (C) 2005-2010 Code Synthesis Tools CC\n" + "//\n" + "// This program was generated by CodeSynthesis XSD, an XML Schema to\n" + "// C++ data binding compiler.\n" + "//\n" + "// This program is free software; you can redistribute it and/or modify\n" + "// it under the terms of the GNU General Public License version 2 as\n" + "// published by the Free Software Foundation.\n" + "//\n" + "// This program is distributed in the hope that it will be useful,\n" + "// but WITHOUT ANY WARRANTY; without even the implied warranty of\n" + "// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n" + "// GNU General Public License for more details.\n" + "//\n" + "// You should have received a copy of the GNU General Public License\n" + "// along with this program; if not, write to the Free Software\n" + "// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA\n" + "//\n" + "// In addition, as a special exception, Code Synthesis Tools CC gives\n" + "// permission to link this program with the Xerces-C++ library (or with\n" + "// modified versions of Xerces-C++ that use the same license as Xerces-C++),\n" + "// and distribute linked combinations including the two. You must obey\n" + "// the GNU General Public License version 2 in all respects for all of\n" + "// the code used other than Xerces-C++. If you modify this copy of the\n" + "// program, you may extend this exception to your version of the program,\n" + "// but you are not obligated to do so. If you do not wish to do so, delete\n" + "// this exception statement from your version.\n" + "//\n" + "// Furthermore, Code Synthesis Tools CC makes a special exception for\n" + "// the Free/Libre and Open Source Software (FLOSS) which is described\n" + "// in the accompanying FLOSSE file.\n" + "//\n\n"; + + Char const copyright_proprietary[] = + "// Copyright (C) 2005-2010 Code Synthesis Tools CC\n" + "//\n" + "// This program was generated by CodeSynthesis XSD, an XML Schema\n" + "// to C++ data binding compiler, in the Proprietary License mode.\n" + "// You should have received a proprietary license from Code Synthesis\n" + "// Tools CC prior to generating this code. See the license text for\n" + "// conditions.\n" + "//\n\n"; + + Char const copyright_impl[] = + "// Not copyrighted - public domain.\n" + "//\n" + "// This sample parser implementation was generated by CodeSynthesis XSD,\n" + "// an XML Schema to C++ data binding compiler. You may use it in your\n" + "// programs without any restrictions.\n" + "//\n\n"; + } + + namespace Parser + { + namespace CLI + { + extern Key type_map = "type-map"; + extern Key char_type = "char-type"; + extern Key char_encoding = "char-encoding"; + extern Key output_dir = "output-dir"; + extern Key xml_parser = "xml-parser"; + extern Key generate_inline = "generate-inline"; + extern Key generate_validation = "generate-validation"; + extern Key suppress_validation = "suppress-validation"; + extern Key generate_polymorphic = "generate-polymorphic"; + extern Key generate_noop_impl = "generate-noop-impl"; + extern Key generate_print_impl = "generate-print-impl"; + extern Key generate_test_driver = "generate-test-driver"; + extern Key force_overwrite = "force-overwrite"; + extern Key root_element_first = "root-element-first"; + extern Key root_element_last = "root-element-last"; + extern Key root_element = "root-element"; + extern Key generate_xml_schema = "generate-xml-schema"; + extern Key extern_xml_schema = "extern-xml-schema"; + extern Key skel_type_suffix = "skel-type-suffix"; + extern Key skel_file_suffix = "skel-file-suffix"; + extern Key impl_type_suffix = "impl-type-suffix"; + extern Key impl_file_suffix = "impl-file-suffix"; + extern Key namespace_map = "namespace-map"; + extern Key namespace_regex = "namespace-regex"; + extern Key namespace_regex_trace = "namespace-regex-trace"; + extern Key reserved_name = "reserved-name"; + extern Key include_with_brackets = "include-with-brackets"; + extern Key include_prefix = "include-prefix"; + extern Key include_regex = "include-regex"; + extern Key include_regex_trace = "include-regex-trace"; + extern Key guard_prefix = "guard-prefix"; + extern Key hxx_suffix = "hxx-suffix"; + extern Key ixx_suffix = "ixx-suffix"; + extern Key cxx_suffix = "cxx-suffix"; + extern Key hxx_regex = "hxx-regex"; + extern Key ixx_regex = "ixx-regex"; + extern Key cxx_regex = "cxx-regex"; + extern Key hxx_prologue = "hxx-prologue"; + extern Key ixx_prologue = "ixx-prologue"; + extern Key cxx_prologue = "cxx-prologue"; + extern Key prologue = "prologue"; + extern Key hxx_epilogue = "hxx-epilogue"; + extern Key ixx_epilogue = "ixx-epilogue"; + extern Key cxx_epilogue = "cxx-epilogue"; + extern Key epilogue = "epilogue"; + extern Key hxx_prologue_file = "hxx-prologue-file"; + extern Key ixx_prologue_file = "ixx-prologue-file"; + extern Key cxx_prologue_file = "cxx-prologue-file"; + extern Key prologue_file = "prologue-file"; + extern Key hxx_epilogue_file = "hxx-epilogue-file"; + extern Key ixx_epilogue_file = "ixx-epilogue-file"; + extern Key cxx_epilogue_file = "cxx-epilogue-file"; + extern Key epilogue_file = "epilogue-file"; + extern Key export_symbol = "export-symbol"; + extern Key export_maps = "export-maps"; + extern Key import_maps = "import-maps"; + extern Key show_anonymous = "show-anonymous"; + extern Key show_sloc = "show-sloc"; + extern Key proprietary_license = "proprietary-license"; + } + } + + Void Parser::Generator:: + usage () + { + std::wostream& e (wcerr); + ::CLI::Indent::Clip< ::CLI::OptionsUsage, WideChar> clip (e); + + e << "--type-map <mapfile>" << endl + << " Read XML Schema to C++ type mapping information\n" + << " from <mapfile>. Repeat this option to specify\n" + << " several type maps. Type maps are considered in\n" + << " order of appearance and the first match is used." + << endl; + + e << "--char-type <type>" << endl + << " Use <type> as the base character type. Valid\n" + << " values are 'char' (default) and 'wchar_t'." + << endl; + + e << "--char-encoding <enc>" << endl + << " Specify the character encoding that should be used\n" + << " in the object model. Valid values for the 'char'\n" + << " character type are 'utf8' (default), 'iso8859-1',\n" + << " 'lcp', and 'custom'. For the 'wchar_t' character\n" + << " type the only valid value is 'auto'." + << endl; + + e << "--output-dir <dir>" << endl + << " Write generated files to <dir> instead of current\n" + << " directory." + << endl; + + e << "--xml-parser <parser>" << endl + << " Use <parser> as the underlying XML parser. Valid\n" + << " values are 'xerces' (default) and 'expat'." + << endl; + + e << "--generate-inline" << endl + << " Generate certain functions inline." + << endl; + + e << "--generate-validation" << endl + << " Generate validation code." + << endl; + + e << "--suppress-validation" << endl + << " Suppress the generation of validation code." + << endl; + + e << "--generate-polymorphic" << endl + << " Generate polymorphism-aware code. Specify this\n" + << " option if you use substitution groups or xsi:type." + << endl; + + e << "--generate-noop-impl" << endl + << " Generate a sample parser implementation that\n" + << " does nothing (no operation)." + << endl; + + e << "--generate-print-impl" << endl + << " Generate a sample parser implementation that\n" + << " prints the XML data to STDOUT." + << endl; + + e << "--generate-test-driver" << endl + << " Generate a test driver for the sample parser\n" + << " implementation." + << endl; + + e << "--force-overwrite" << endl + << " Force overwriting of the existing implementation\n" + << " and test driver files." + << endl; + + e << "--root-element-first" << endl + << " Indicate that the first global element is the\n" + << " document root." + << endl; + + e << "--root-element-last" << endl + << " Indicate that the last global element is the\n" + << " document root." + << endl; + + e << "--root-element <element>" << endl + << " Indicate that <element> is the document root." + << endl; + + e << "--generate-xml-schema" << endl + << " Generate a C++ header file as if the schema being\n" + << " compiled defines the XML Schema namespace." + << endl; + + e << "--extern-xml-schema <file>" << endl + << " Generate code as if the XML Schema namespace was\n" + << " defined in <file> and xsd:included in the schema\n" + << " being compiled." + << endl; + + e << "--skel-type-suffix <suffix>" << endl + << " Use <suffix> instead of the default '_pskel' to\n" + << " construct the names of generated parser skeletons." + << endl; + + e << "--skel-file-suffix <suffix>" << endl + << " Use <suffix> instead of the default '-pskel' to\n" + << " construct the names of generated parser skeleton\n" + << " files." + << endl; + + e << "--impl-type-suffix <suffix>" << endl + << " Use <suffix> instead of the default '_pimpl' to\n" + << " construct the names of parser implementations for\n" + << " the built-in XML Schema types and sample parser\n" + << " implementations." + << endl; + + e << "--impl-file-suffix <suffix>" << endl + << " Use <suffix> instead of the default '-pimpl' to\n" + << " construct the names of generated sample parser\n" + << " implementation files." + << endl; + + e << "--namespace-map <xns>=<cns>" << endl + << " Map XML Schema namespace <xns> to C++ namespace\n" + << " <cns>. Repeat this option to specify mapping for\n" + << " more than one XML Schema namespace." + << endl; + + e << "--namespace-regex <regex>" << endl + << " Add <regex> to the list of regular expressions\n" + << " used to translate XML Schema namespace names to\n" + << " C++ namespace names." + << endl; + + e << "--namespace-regex-trace" << endl + << " Trace the process of applying regular expressions\n" + << " specified with the --namespace-regex option." + << endl; + + e << "--reserved-name <name>" << endl + << " Add <name> to the list of names that should not\n" + << " be used as identifiers. The name can optionally\n" + << " be followed by '=' and the replacement name that\n" + << " should be used instead." + << endl; + + e << "--include-with-brackets" << endl + << " Use angle brackets (<>) instead of quotes (\"\") in\n" + << " generated #include directives." + << endl; + + e << "--include-prefix <prefix>" << endl + << " Add <prefix> to generated #include directive\n" + << " paths." + << endl; + + e << "--include-regex <regex>" << endl + << " Add <regex> to the list of regular expressions\n" + << " used to transform #include directive paths." + << endl; + + e << "--include-regex-trace" << endl + << " Trace the process of applying regular expressions\n" + << " specified with the --include-regex option." + << endl; + + e << "--guard-prefix <prefix>" << endl + << " Add <prefix> to generated header inclusion guards." + << endl; + + e << "--hxx-suffix <suffix>" << endl + << " Use <suffix> instead of the default '.hxx' to\n" + << " construct the name of the header file." + << endl; + + e << "--ixx-suffix <suffix>" << endl + << " Use <suffix> instead of the default '.ixx' to\n" + << " construct the name of the inline file." + << endl; + + e << "--cxx-suffix <suffix>" << endl + << " Use <suffix> instead of the default '.cxx' to\n" + << " construct the name of the source file." + << endl; + + e << "--hxx-regex <regex>" << endl + << " Use <regex> to construct the name of the header\n" + << " file." + << endl; + + e << "--ixx-regex <regex>" << endl + << " Use <regex> to construct the name of the inline\n" + << " file." + << endl; + + e << "--cxx-regex <regex>" << endl + << " Use <regex> to construct the name of the source\n" + << " file." + << endl; + + + // Prologues. + // + e << "--hxx-prologue <text>" << endl + << " Insert <text> at the beginning of the header file." + << endl; + + e << "--ixx-prologue <text>" << endl + << " Insert <text> at the beginning of the inline file." + << endl; + + e << "--cxx-prologue <text>" << endl + << " Insert <text> at the beginning of the source file." + << endl; + + e << "--prologue <text>" << endl + << " Insert <text> at the beginning of each generated\n" + << " file for which there is no file-specific prologue." + << endl; + + + // Epilogues. + // + e << "--hxx-epilogue <text>" << endl + << " Insert <text> at the end of the header file." + << endl; + + e << "--ixx-epilogue <text>" << endl + << " Insert <text> at the end of the inline file." + << endl; + + e << "--cxx-epilogue <text>" << endl + << " Insert <text> at the end of the source file." + << endl; + + e << "--epilogue <text>" << endl + << " Insert <text> at the end of each generated file\n" + << " for which there is no file-specific epilogue." + << endl; + + + // Prologue files. + // + e << "--hxx-prologue-file <file>" << endl + << " Insert the content of the <file> at the beginning\n" + << " of the header file." + << endl; + + e << "--ixx-prologue-file <file>" << endl + << " Insert the content of the <file> at the beginning\n" + << " of the inline file." + << endl; + + e << "--cxx-prologue-file <file>" << endl + << " Insert the content of the <file> at the beginning\n" + << " of the source file." + << endl; + + e << "--prologue-file <file>" << endl + << " Insert the content of the <file> at the beginning\n" + << " of each generated file for which there is no file-\n" + << " specific prologue file." + << endl; + + + // Epilogue files. + // + e << "--hxx-epilogue-file <file>" << endl + << " Insert the content of the <file> at the end of\n" + << " the header file." + << endl; + + e << "--ixx-epilogue-file <file>" << endl + << " Insert the content of the <file> at the end of\n" + << " the inline file." + << endl; + + e << "--cxx-epilogue-file <file>" << endl + << " Insert the content of the <file> at the end of\n" + << " the source file." + << endl; + + e << "--epilogue-file <file>" << endl + << " Insert the content of the <file> at the end of\n" + << " each generated file for which there is no file-\n" + << " specific epilogue file." + << endl; + + + // Misc. + // + e << "--custom-literals <file>" << endl + << " Load custom XML string to C++ literal mappings\n" + << " from <file>." + << endl; + + e << "--export-symbol <symbol>" << endl + << " Export symbol for Win32 DLL export/import control." + << endl; + + e << "--export-maps" << endl + << " Export polymorphism support maps from Win32 DLL." + << endl; + + e << "--import-maps" << endl + << " Import polymorphism support maps from Win32 DLL." + << endl; + + e << "--show-anonymous" << endl + << " Show elements and attributes that are of anonymous\n" + << " types." + << endl; + + e << "--show-sloc" << endl + << " Show the number of generated physical source lines\n" + << " of code (SLOC)." + << endl; + + e << "--sloc-limit <num>" << endl + << " Check that the number of generated physical source\n" + << " lines of code (SLOC) does not exceed <num>." + << endl; + + e << "--options-file <file>" << endl + << " Read additional options from <file>. Each option\n" + << " should appear on a separate line optionally\n" + << " followed by space and an argument." + << endl; + + e << "--proprietary-license" << endl + << " Indicate that the generated code is licensed under\n" + << " a proprietary license instead of the GPL." + << endl; + } + + Parser::CLI::OptionsSpec Parser::Generator:: + options_spec () + { + CLI::OptionsSpec spec; + + spec.option<CLI::char_type> ().default_value ("char"); + spec.option<CLI::xml_parser> ().default_value ("xerces"); + + spec.option<CLI::skel_file_suffix> ().default_value ("-pskel"); + spec.option<CLI::skel_type_suffix> ().default_value ("_pskel"); + spec.option<CLI::impl_file_suffix> ().default_value ("-pimpl"); + spec.option<CLI::impl_type_suffix> ().default_value ("_pimpl"); + + spec.option<CLI::hxx_suffix> ().default_value (".hxx"); + spec.option<CLI::ixx_suffix> ().default_value (".ixx"); + spec.option<CLI::cxx_suffix> ().default_value (".cxx"); + + return spec; + } + + + namespace + { + template <typename S> + Void + open (S& ifs, NarrowString const& path) + { + try + { +#if !defined(BOOST_FILESYSTEM_VERSION) || BOOST_FILESYSTEM_VERSION == 2 + Path fs_path (path, boost::filesystem::native); +#else + Path fs_path (path.c_str()); +#endif + ifs.open (fs_path, std::ios_base::in | std::ios_base::binary); + + if (!ifs.is_open ()) + { + wcerr << path.c_str () << ": error: unable to open in read mode" + << endl; + + throw Parser::Generator::Failed (); + } + } + catch (InvalidPath const&) + { + wcerr << "error: '" << path.c_str () << "' is not a valid " + << "filesystem path" << endl; + + throw Parser::Generator::Failed (); + } + } + + Void + append (WideOutputFileStream& os, + NarrowString const& path, + WideInputFileStream& default_is) + { + using std::ios_base; + + if (path) + { + WideInputFileStream is; + open (is, path); + os << is.rdbuf (); + } + else if (default_is.is_open ()) + { + os << default_is.rdbuf (); + default_is.seekg (0, ios_base::beg); + } + } + + Void + append (WideOutputFileStream& os, + Cult::Containers::Vector<NarrowString> const& primary, + Cult::Containers::Vector<NarrowString> const& def) + { + Cult::Containers::Vector<NarrowString> const& v ( + primary.empty () ? def : primary); + + for (Containers::Vector<NarrowString>::ConstIterator + i (v.begin ()), e (v.end ()); i != e; ++i) + { + os << i->c_str () << endl; + } + } + } + + + UnsignedLong Parser::Generator:: + generate (Parser::CLI::Options const& ops, + Schema& schema, + Path const& file_path, + Boolean fpt, + StringLiteralMap const& string_literal_map, + Boolean gen_driver, + const WarningSet& disabled_warnings, + FileList& file_list, + AutoUnlinks& unlinks) + { + using std::ios_base; + namespace Indentation = BackendElements::Indentation; + + typedef BackendElements::Regex::Expression<Char> Regex; + + try + { + Boolean generate_xml_schema (ops.value<CLI::generate_xml_schema> ()); + + // We could be compiling several schemas at once in which case + // handling of the --generate-xml-schema option gets tricky: we + // will need to rely on the presence of the --extern-xml-schema + // to tell us which (fake) schema file corresponds to XML Schema. + // + if (generate_xml_schema) + { + if (NarrowString name = ops.value<CLI::extern_xml_schema> ()) + { +#if !defined(BOOST_FILESYSTEM_VERSION) || BOOST_FILESYSTEM_VERSION == 2 + if (file_path.native_file_string () != name) +#else + if (file_path.string () != name) +#endif + generate_xml_schema = false; + } + } + + Boolean impl (!generate_xml_schema && + (ops.value<CLI::generate_noop_impl> () || + ops.value<CLI::generate_print_impl> ())); + + Boolean driver (gen_driver && !generate_xml_schema && + ops.value<CLI::generate_test_driver> ()); + + // Evaluate the graph for possibility of generating something useful. + // + { + Validator validator; + if (!validator.validate ( + ops, schema, file_path, driver, disabled_warnings)) + throw Failed (); + } + + // Process names. + // + { + NameProcessor proc; + proc.process (ops, schema, file_path, string_literal_map); + } + + Boolean validation ((ops.value<CLI::xml_parser> () == "expat" || + ops.value<CLI::generate_validation> ()) && + !ops.value<CLI::suppress_validation> ()); + + // Compute state machine info. + // + if (validation) + { + StateProcessor proc; + proc.process (schema, file_path); + } + + // Read-in type maps. + // + TypeMap::Namespaces type_map; + { + using namespace TypeMap; + typedef Containers::Vector<NarrowString> Files; + + Files const& files (ops.value<CLI::type_map> ()); + + for (Files::ConstIterator f (files.begin ()); f != files.end (); ++f ) + { + NarrowInputFileStream ifs; + open (ifs, *f); + + Lexer l (ifs, *f); + TypeMap::Parser p (l, *f); + + if (!p.parse (type_map)) + throw Failed (); + } + + // Add the built-in mappings at the end. + // + + // String-based types. + // + String char_type (ops.value<CLI::char_type> ()); + String string_type; + + if (char_type == L"char") + string_type = L"::std::string"; + else if (char_type == L"wchar_t") + string_type = L"::std::wstring"; + else + string_type = L"::std::basic_string< " + char_type + L" >"; + + String xns; + { + Context ctx (std::wcerr, schema, file_path, ops, 0, 0, 0, 0); + xns = ctx.xs_ns_name (); + } + + String buffer (L"::std::auto_ptr< " + xns + L"::buffer >"); + TypeMap::Namespace xsd ("http://www\\.w3\\.org/2001/XMLSchema"); + + xsd.types_push_back ("string", string_type); + xsd.types_push_back ("normalizedString", string_type); + xsd.types_push_back ("token", string_type); + xsd.types_push_back ("Name", string_type); + xsd.types_push_back ("NMTOKEN", string_type); + xsd.types_push_back ("NMTOKENS", xns + L"::string_sequence"); + xsd.types_push_back ("NCName", string_type); + + xsd.types_push_back ("ID", string_type); + xsd.types_push_back ("IDREF", string_type); + xsd.types_push_back ("IDREFS", xns + L"::string_sequence"); + + xsd.types_push_back ("language", string_type); + xsd.types_push_back ("anyURI", string_type); + xsd.types_push_back ("QName", xns + L"::qname"); + + xsd.types_push_back ("base64Binary", buffer, buffer); + xsd.types_push_back ("hexBinary", buffer, buffer); + + xsd.types_push_back ("gDay", xns + L"::gday"); + xsd.types_push_back ("gMonth", xns + L"::gmonth"); + xsd.types_push_back ("gYear", xns + L"::gyear"); + xsd.types_push_back ("gMonthDay", xns + L"::gmonth_day"); + xsd.types_push_back ("gYearMonth", xns + L"::gyear_month"); + xsd.types_push_back ("date", xns + L"::date"); + xsd.types_push_back ("time", xns + L"::time"); + xsd.types_push_back ("dateTime", xns + L"::date_time"); + xsd.types_push_back ("duration", xns + L"::duration"); + + // Fundamental C++ types. + // + xsd.types_push_back ("boolean", "bool", "bool"); + + xsd.types_push_back ("byte", "signed char", "signed char"); + xsd.types_push_back ("unsignedByte", + "unsigned char", + "unsigned char"); + + xsd.types_push_back ("short", "short", "short"); + xsd.types_push_back ("unsignedShort", + "unsigned short", + "unsigned short"); + + xsd.types_push_back ("int", "int", "int"); + xsd.types_push_back ("unsignedInt", "unsigned int", "unsigned int"); + + xsd.types_push_back ("long", "long long", "long long"); + xsd.types_push_back ("unsignedLong", + "unsigned long long", + "unsigned long long"); + + xsd.types_push_back ("integer", "long long", "long long"); + + xsd.types_push_back ("negativeInteger", "long long", "long long"); + xsd.types_push_back ("nonPositiveInteger", "long long", "long long"); + + xsd.types_push_back ("positiveInteger", + "unsigned long long", + "unsigned long long"); + xsd.types_push_back ("nonNegativeInteger", + "unsigned long long", + "unsigned long long"); + + xsd.types_push_back ("float", "float", "float"); + xsd.types_push_back ("double", "double", "double"); + xsd.types_push_back ("decimal", "double", "double"); + + type_map.push_back (xsd); + + // Everyhting else maps to void. + // + TypeMap::Namespace rest (".*"); + rest.types_push_back (".*", "void", "void"); + type_map.push_back (rest); + } + + // Process types. + // + { + TypeProcessor proc; + proc.process (ops, schema, gen_driver, type_map); + } + + // + // + Boolean inline_ (ops.value<CLI::generate_inline> () && + !generate_xml_schema); + + Boolean source (!generate_xml_schema); + + // Generate code. + // +#if !defined(BOOST_FILESYSTEM_VERSION) || BOOST_FILESYSTEM_VERSION == 2 + NarrowString name (file_path.leaf ()); +#else + NarrowString name (file_path.filename().string()); +#endif + NarrowString skel_suffix (ops.value <CLI::skel_file_suffix> ()); + NarrowString impl_suffix (ops.value <CLI::impl_file_suffix> ()); + + NarrowString hxx_suffix (ops.value <CLI::hxx_suffix> ()); + NarrowString ixx_suffix (ops.value <CLI::ixx_suffix> ()); + NarrowString cxx_suffix (ops.value <CLI::cxx_suffix> ()); + + Regex hxx_expr ( + ops.value <CLI::hxx_regex> ().empty () + ? "#^(.+?)(\\.[^./\\\\]+)?$#$1" + skel_suffix + hxx_suffix + "#" + : ops.value <CLI::hxx_regex> ()); + + Regex ixx_expr ( + ops.value <CLI::ixx_regex> ().empty () + ? "#^(.+?)(\\.[^./\\\\]+)?$#$1" + skel_suffix + ixx_suffix + "#" + : ops.value <CLI::ixx_regex> ()); + + Regex cxx_expr ( + ops.value <CLI::cxx_regex> ().empty () + ? "#^(.+?)(\\.[^./\\\\]+)?$#$1" + skel_suffix + cxx_suffix + "#" + : ops.value <CLI::cxx_regex> ()); + + + Regex hxx_impl_expr; + Regex cxx_impl_expr; + Regex cxx_driver_expr; + + if (impl || driver) + { + hxx_impl_expr = + "#^(.+?)(\\.[^./\\\\]+)?$#$1" + impl_suffix + hxx_suffix + "#"; + + cxx_impl_expr = + "#^(.+?)(\\.[^./\\\\]+)?$#$1" + impl_suffix + cxx_suffix + "#"; + + cxx_driver_expr = + "#^(.+?)(\\.[^./\\\\]+)?$#$1-driver" + cxx_suffix + "#"; + } + + if (!hxx_expr.match (name)) + { + wcerr << "error: header expression '" << + hxx_expr.pattern () << "' does not match '" << + name.c_str () << "'" << endl; + throw Failed (); + } + + if (inline_ && !ixx_expr.match (name)) + { + wcerr << "error: inline expression '" << + ixx_expr.pattern () << "' does not match '" << + name.c_str () << "'" << endl; + throw Failed (); + } + + if (source && !cxx_expr.match (name)) + { + wcerr << "error: source expression '" << + cxx_expr.pattern () << "' does not match '" << + name.c_str () << "'" << endl; + throw Failed (); + } + + if (impl || driver) + { + if (!hxx_impl_expr.match (name)) + { + wcerr << "error: implementation header expression '" << + hxx_impl_expr.pattern () << "' does not match '" << + name.c_str () << "'" << endl; + throw Failed (); + } + + if (!cxx_impl_expr.match (name)) + { + wcerr << "error: implementation source expression '" << + cxx_impl_expr.pattern () << "' does not match '" << + name.c_str () << "'" << endl; + throw Failed (); + } + + if (!cxx_driver_expr.match (name)) + { + wcerr << "error: driver source expression '" << + cxx_driver_expr.pattern () << "' does not match '" << + name.c_str () << "'" << endl; + throw Failed (); + } + } + + NarrowString hxx_name (hxx_expr.merge (name)); + NarrowString ixx_name (inline_ ? ixx_expr.merge (name) : NarrowString ()); + NarrowString cxx_name (source ? cxx_expr.merge (name) : NarrowString ()); + + NarrowString hxx_impl_name; + NarrowString cxx_impl_name; + NarrowString cxx_driver_name; + + if (impl || driver) + { + hxx_impl_name = hxx_impl_expr.merge (name); + cxx_impl_name = cxx_impl_expr.merge (name); + cxx_driver_name = cxx_driver_expr.merge (name); + } + +#if !defined(BOOST_FILESYSTEM_VERSION) || BOOST_FILESYSTEM_VERSION == 2 + Path hxx_path (hxx_name, boost::filesystem::native); + Path ixx_path (ixx_name, boost::filesystem::native); + Path cxx_path (cxx_name, boost::filesystem::native); +#else + Path hxx_path (hxx_name.c_str()); + Path ixx_path (ixx_name.c_str()); + Path cxx_path (cxx_name.c_str()); +#endif + + Path hxx_impl_path; + Path cxx_impl_path; + Path cxx_driver_path; + + if (impl || driver) + { +#if !defined(BOOST_FILESYSTEM_VERSION) || BOOST_FILESYSTEM_VERSION == 2 + hxx_impl_path = Path (hxx_impl_name, boost::filesystem::native); + cxx_impl_path = Path (cxx_impl_name, boost::filesystem::native); + cxx_driver_path = Path (cxx_driver_name, boost::filesystem::native); +#else + hxx_impl_path = Path (hxx_impl_name.c_str()); + cxx_impl_path = Path (cxx_impl_name.c_str()); + cxx_driver_path = Path (cxx_driver_name.c_str()); +#endif + } + + Path out_dir; + + if (NarrowString dir = ops.value<CLI::output_dir> ()) + { + try + { +#if !defined(BOOST_FILESYSTEM_VERSION) || BOOST_FILESYSTEM_VERSION == 2 + out_dir = Path (dir, boost::filesystem::native); +#else + out_dir = Path (dir.c_str()); +#endif + } + catch (InvalidPath const&) + { + wcerr << dir.c_str () << ": error: invalid path" << endl; + throw Failed (); + } + } + + if (fpt && !generate_xml_schema) + { + // In the file-per-type mode the schema files are always local + // unless the user added the directory so that we propagate this + // to the output files. + // + Path fpt_dir (file_path.branch_path ()); + + if (!fpt_dir.empty ()) + out_dir /= fpt_dir; + } + + if (!out_dir.empty ()) + { + hxx_path = out_dir / hxx_path; + ixx_path = out_dir / ixx_path; + cxx_path = out_dir / cxx_path; + + if (impl || driver) + { + hxx_impl_path = out_dir / hxx_impl_path; + cxx_impl_path = out_dir / cxx_impl_path; + cxx_driver_path = out_dir /cxx_driver_path; + } + } + + // Open the impl files first so that if open fails, the skel files + // are not deleted. + // + WideOutputFileStream hxx_impl; + WideOutputFileStream cxx_impl; + WideOutputFileStream cxx_driver; + + if (impl) + { + if (!ops.value<CLI::force_overwrite> ()) + { + WideInputFileStream tmp (hxx_impl_path, ios_base::in); + + if (tmp.is_open ()) + { + wcerr << hxx_impl_path << ": error: cowardly refusing to " << + "overwrite an existing file" << endl; + throw Failed (); + } + + tmp.close (); + } + + hxx_impl.open (hxx_impl_path, ios_base::out); + + if (!hxx_impl.is_open ()) + { + wcerr << hxx_impl_path << ": error: unable to open in write mode" + << endl; + throw Failed (); + } + + unlinks.add (hxx_impl_path); +#if !defined(BOOST_FILESYSTEM_VERSION) || BOOST_FILESYSTEM_VERSION == 2 + file_list.push_back (hxx_impl_path.native_file_string ()); +#else + file_list.push_back (hxx_impl_path.string ()); +#endif + + if (!ops.value<CLI::force_overwrite> ()) + { + WideInputFileStream tmp (cxx_impl_path, ios_base::in); + + if (tmp.is_open ()) + { + wcerr << cxx_impl_path << ": error: cowardly refusing to " << + "overwrite an existing file" << endl; + throw Failed (); + } + + tmp.close (); + } + + cxx_impl.open (cxx_impl_path, ios_base::out); + + if (!cxx_impl.is_open ()) + { + wcerr << cxx_impl_path << ": error: unable to open in write mode" + << endl; + throw Failed (); + } + + unlinks.add (cxx_impl_path); +#if !defined(BOOST_FILESYSTEM_VERSION) || BOOST_FILESYSTEM_VERSION == 2 + file_list.push_back (cxx_impl_path.native_file_string ()); +#else + file_list.push_back (cxx_impl_path.string ()); +#endif + } + + if (driver) + { + if (!ops.value<CLI::force_overwrite> ()) + { + WideInputFileStream tmp (cxx_driver_path, ios_base::in); + + if (tmp.is_open ()) + { + wcerr << cxx_driver_path << ": error: cowardly refusing to " << + "overwrite an existing file" << endl; + throw Failed (); + } + + tmp.close (); + } + + cxx_driver.open (cxx_driver_path, ios_base::out); + + if (!cxx_driver.is_open ()) + { + wcerr << cxx_driver_path << ": error: unable to open in write " << + "mode" << endl; + throw Failed (); + } + + unlinks.add (cxx_driver_path); +#if !defined(BOOST_FILESYSTEM_VERSION) || BOOST_FILESYSTEM_VERSION == 2 + file_list.push_back (cxx_driver_path.native_file_string ()); +#else + file_list.push_back (cxx_driver_path.string ()); +#endif + } + + // Open the skel files. + // + WideOutputFileStream hxx (hxx_path, ios_base::out); + WideOutputFileStream ixx; + WideOutputFileStream cxx; + + if (!hxx.is_open ()) + { + wcerr << hxx_path << ": error: unable to open in write mode" << endl; + throw Failed (); + } + + unlinks.add (hxx_path); +#if !defined(BOOST_FILESYSTEM_VERSION) || BOOST_FILESYSTEM_VERSION == 2 + file_list.push_back (hxx_path.native_file_string ()); +#else + file_list.push_back (hxx_path.string ()); +#endif + + if (inline_) + { + ixx.open (ixx_path, ios_base::out); + + if (!ixx.is_open ()) + { + wcerr << ixx_path << ": error: unable to open in write mode" << endl; + throw Failed (); + } + + unlinks.add (ixx_path); +#if !defined(BOOST_FILESYSTEM_VERSION) || BOOST_FILESYSTEM_VERSION == 2 + file_list.push_back (ixx_path.native_file_string ()); +#else + file_list.push_back (ixx_path.string ()); +#endif + } + + + if (source) + { + cxx.open (cxx_path, ios_base::out); + + if (!cxx.is_open ()) + { + wcerr << cxx_path << ": error: unable to open in write mode" << endl; + throw Failed (); + } + + unlinks.add (cxx_path); +#if !defined(BOOST_FILESYSTEM_VERSION) || BOOST_FILESYSTEM_VERSION == 2 + file_list.push_back (cxx_path.native_file_string ()); +#else + file_list.push_back (cxx_path.string ()); +#endif + } + + // Print copyright and license. + // + Char const* copyright ( + ops.value<CLI::proprietary_license> () + ? copyright_proprietary + : copyright_gpl); + + hxx << copyright; + + if (inline_) + ixx << copyright; + + if (source) + cxx << copyright; + + if (impl) + { + hxx_impl << copyright_impl; + cxx_impl << copyright_impl; + } + + if (driver) + cxx_driver << copyright_impl; + + // Prologue. + // + WideInputFileStream prologue; + { + NarrowString name (ops.value<CLI::prologue_file> ()); + + if (name) + open (prologue, name); + } + + // Epilogue. + // + WideInputFileStream epilogue; + { + NarrowString name (ops.value<CLI::epilogue_file> ()); + + if (name) + open (epilogue, name); + } + + // SLOC counter. + // + UnsignedLong sloc (0); + Boolean show_sloc (ops.value<CLI::show_sloc> ()); + + // + // + Regex guard_expr ("/([a-z])([A-Z])/$1_$2/"); // Split words. + + NarrowString guard_prefix (ops.value<CLI::guard_prefix> ()); + + if (!guard_prefix) +#if !defined(BOOST_FILESYSTEM_VERSION) || BOOST_FILESYSTEM_VERSION == 2 + guard_prefix = file_path.branch_path ().native_directory_string (); +#else + guard_prefix = file_path.branch_path ().string (); +#endif + + if (guard_prefix) + guard_prefix += '_'; + + // HXX + // + { + Context ctx (hxx, + schema, + file_path, + ops, + &string_literal_map, + &hxx_expr, + &ixx_expr, + &hxx_impl_expr); + + Indentation::Clip<Indentation::SLOC, WideChar> hxx_sloc (hxx); + + String guard (guard_expr.merge (guard_prefix + hxx_name)); + guard = ctx.escape (guard); // Make it a C++ id. + std::transform (guard.begin (), guard.end(), guard.begin (), upcase); + + hxx << "#ifndef " << guard << endl + << "#define " << guard << endl + << endl; + + // Copy prologue. + // + hxx << "// Begin prologue." << endl + << "//" << endl; + + append ( + hxx, ops.value<CLI::hxx_prologue> (), ops.value<CLI::prologue> ()); + append (hxx, ops.value<CLI::hxx_prologue_file> (), prologue); + + hxx << "//" << endl + << "// End prologue." << endl + << endl; + + // Version check. + // + hxx << "#include <xsd/cxx/config.hxx>" << endl + << endl + << "#if (XSD_INT_VERSION != " << XSD_INT_VERSION << "L)" << endl + << "#error XSD runtime version mismatch" << endl + << "#endif" << endl + << endl; + + { + hxx << "#include <xsd/cxx/pre.hxx>" << endl + << endl; + + // Set auto-indentation. + // + Indentation::Clip<Indentation::CXX, WideChar> hxx_clip (hxx); + + + // Generate. + // + if (!generate_xml_schema) + generate_parser_forward (ctx); + + generate_parser_header (ctx, generate_xml_schema); + + + if (inline_) + hxx << "#include " << ctx.process_include_path (ixx_name) << endl; + + hxx << "#include <xsd/cxx/post.hxx>" << endl + << endl; + } + + // Copy epilogue. + // + hxx << "// Begin epilogue." << endl + << "//" << endl; + + append (hxx, ops.value<CLI::hxx_epilogue_file> (), epilogue); + append ( + hxx, ops.value<CLI::hxx_epilogue> (), ops.value<CLI::epilogue> ()); + + hxx << "//" << endl + << "// End epilogue." << endl + << endl; + + hxx << "#endif // " << guard << endl; + + if (show_sloc) + { + wcerr << hxx_path << ": " + << hxx_sloc.buffer ().count () << endl; + + sloc += hxx_sloc.buffer ().count (); + } + } + + + // IXX + // + if (inline_) + { + Context ctx (ixx, + schema, + file_path, + ops, + &string_literal_map, + &hxx_expr, + &ixx_expr, + &hxx_impl_expr); + + Indentation::Clip<Indentation::SLOC, WideChar> ixx_sloc (ixx); + + + // Copy prologue. + // + ixx << "// Begin prologue." << endl + << "//" << endl; + + append ( + ixx, ops.value<CLI::ixx_prologue> (), ops.value<CLI::prologue> ()); + append (ixx, ops.value<CLI::ixx_prologue_file> (), prologue); + + ixx << "//" << endl + << "// End prologue." << endl + << endl; + + { + // Set auto-indentation. + // + Indentation::Clip<Indentation::CXX, WideChar> ixx_clip (ixx); + + + // Generate. + // + generate_parser_inline (ctx); + } + + // Copy epilogue. + // + ixx << "// Begin epilogue." << endl + << "//" << endl; + + append (ixx, ops.value<CLI::ixx_epilogue_file> (), epilogue); + append ( + ixx, ops.value<CLI::ixx_epilogue> (), ops.value<CLI::epilogue> ()); + + ixx << "//" << endl + << "// End epilogue." << endl + << endl; + + if (show_sloc) + { + wcerr << ixx_path << ": " + << ixx_sloc.buffer ().count () << endl; + + sloc += ixx_sloc.buffer ().count (); + } + } + + + // CXX + // + if (source) + { + Context ctx (cxx, + schema, + file_path, + ops, + &string_literal_map, + &hxx_expr, + &ixx_expr, + &hxx_impl_expr); + + Indentation::Clip<Indentation::SLOC, WideChar> cxx_sloc (cxx); + + // Copy prologue. + // + cxx << "// Begin prologue." << endl + << "//" << endl; + + append ( + cxx, ops.value<CLI::cxx_prologue> (), ops.value<CLI::prologue> ()); + append (cxx, ops.value<CLI::cxx_prologue_file> (), prologue); + + cxx << "//" << endl + << "// End prologue." << endl + << endl; + + { + // Set auto-indentation. + // + Indentation::Clip<Indentation::CXX, WideChar> cxx_clip (cxx); + + cxx << "#include " << ctx.process_include_path (hxx_name) << endl + << endl; + + if (!inline_) + generate_parser_inline (ctx); + + generate_parser_source (ctx); + + if (validation) + { + generate_element_validation_source (ctx); + generate_attribute_validation_source (ctx); + generate_characters_validation_source (ctx); + } + } + + // Copy epilogue. + // + cxx << "// Begin epilogue." << endl + << "//" << endl; + + append (cxx, ops.value<CLI::cxx_epilogue_file> (), epilogue); + append ( + cxx, ops.value<CLI::cxx_epilogue> (), ops.value<CLI::epilogue> ()); + + cxx << "//" << endl + << "// End epilogue." << endl + << endl; + + if (show_sloc) + { + wcerr << cxx_path << ": " + << cxx_sloc.buffer ().count () << endl; + + sloc += cxx_sloc.buffer ().count (); + } + } + + // HXX impl + // + if (impl) + { + Context ctx (hxx_impl, + schema, + file_path, + ops, + &string_literal_map, + &hxx_expr, + &ixx_expr, + &hxx_impl_expr); + + String guard (guard_expr.merge (guard_prefix + hxx_impl_name)); + guard = ctx.escape (guard); // Make it a C++ id. + std::transform (guard.begin (), guard.end(), guard.begin (), upcase); + + hxx_impl << "#ifndef " << guard << endl + << "#define " << guard << endl + << endl; + + { + // Set auto-indentation. + // + Indentation::Clip<Indentation::CXX, WideChar> clip (hxx_impl); + + hxx_impl << "#include " << ctx.process_include_path (hxx_name) + << endl << endl; + + generate_impl_header (ctx); + } + + hxx_impl << "#endif // " << guard << endl; + } + + // CXX impl + // + if (impl) + { + Context ctx (cxx_impl, + schema, + file_path, + ops, + &string_literal_map, + &hxx_expr, + &ixx_expr, + &hxx_impl_expr); + + // Set auto-indentation. + // + Indentation::Clip<Indentation::CXX, WideChar> clip (cxx_impl); + + cxx_impl << "#include " << ctx.process_include_path (hxx_impl_name) + << endl << endl; + + generate_impl_source (ctx); + } + + // CXX driver + // + if (driver) + { + Context ctx (cxx_driver, + schema, + file_path, + ops, + &string_literal_map, + &hxx_expr, + &ixx_expr, + &hxx_impl_expr); + + // Set auto-indentation. + // + Indentation::Clip<Indentation::CXX, WideChar> clip (cxx_driver); + + cxx_driver << "#include " << ctx.process_include_path (hxx_impl_name) + << endl << endl; + + generate_driver_source (ctx); + } + + return sloc; + } + catch (UnrepresentableCharacter const& e) + { + wcerr << "error: character at position " << e.position () << " " + << "in string '" << e.string () << "' is unrepresentable in " + << "the target encoding" << endl; + + wcerr << "info: use the --custom-literals option to provide custom " + << "string literals mapping" << endl; + + throw Failed (); + } + catch (NoNamespaceMapping const& e) + { + wcerr << e.file () << ":" << e.line () << ":" << e.column () + << ": error: unable to map XML Schema namespace '" << e.ns () + << "' to C++ namespace" << endl; + + wcerr << e.file () << ":" << e.line () << ":" << e.column () + << ": info: use the --namespace-map or --namespace-regex option " + << "to provide custom mapping" << endl; + + throw Failed (); + } + catch (InvalidNamespaceMapping const& e) + { + wcerr << "error: invalid XML to C++ namespace mapping specified: " + << "'" << e.mapping () << "': " << e.reason () << endl; + + throw Failed (); + } + catch (BackendElements::Regex::Format<Char> const& e) + { + wcerr << "error: invalid regex: '" << + e.expression ().c_str () << "': " << + e.description ().c_str () << endl; + + throw Failed (); + } + catch (BackendElements::Regex::Format<WideChar> const& e) + { + wcerr << "error: invalid regex: '" << + e.expression () << "': " << e.description () << endl; + + throw Failed (); + } + } +} diff --git a/xsd/xsd/cxx/parser/generator.hxx b/xsd/xsd/cxx/parser/generator.hxx new file mode 100644 index 0000000..eaa1ecd --- /dev/null +++ b/xsd/xsd/cxx/parser/generator.hxx @@ -0,0 +1,58 @@ +// file : xsd/cxx/parser/generator.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef CXX_PARSER_GENERATOR_HXX +#define CXX_PARSER_GENERATOR_HXX + +#include <cult/types.hxx> + +#include <cult/containers/vector.hxx> + +#include <cult/cli/options.hxx> +#include <cult/cli/options-spec.hxx> + +#include <xsd-frontend/semantic-graph/elements.hxx> // Path +#include <xsd-frontend/semantic-graph/schema.hxx> + +#include <xsd.hxx> + +#include <cxx/literal-map.hxx> +#include <cxx/parser/cli.hxx> + +namespace CXX +{ + namespace Parser + { + using namespace Cult::Types; + + class Generator + { + public: + static Void + usage (); + + static CLI::OptionsSpec + options_spec (); + + struct Failed {}; + + static UnsignedLong + generate (CLI::Options const& options, + XSDFrontend::SemanticGraph::Schema&, + XSDFrontend::SemanticGraph::Path const& file, + Boolean file_per_type, + StringLiteralMap const&, + Boolean gen_driver, + const WarningSet& disabled_warnings, + FileList& file_list, + AutoUnlinks& unlinks); + + private: + Generator (); + }; + } +} + +#endif // CXX_PARSER_GENERATOR_HXX diff --git a/xsd/xsd/cxx/parser/impl-header.cxx b/xsd/xsd/cxx/parser/impl-header.cxx new file mode 100644 index 0000000..ff635f1 --- /dev/null +++ b/xsd/xsd/cxx/parser/impl-header.cxx @@ -0,0 +1,234 @@ +// file : xsd/cxx/parser/impl-header.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <cxx/parser/impl-header.hxx> + +#include <xsd-frontend/semantic-graph.hxx> +#include <xsd-frontend/traversal.hxx> + +namespace CXX +{ + namespace Parser + { + namespace + { + struct Enumeration: Traversal::Enumeration, Context + { + Enumeration (Context& c) + : Context (c) + { + } + + virtual Void + traverse (Type& e) + { + String const& name (eimpl (e)); + String const& ret (ret_type (e)); + SemanticGraph::Type& base (e.inherits ().base ()); + + os << "class " << type_exp << name << ": " << + "public virtual " << ename (e) << "," << endl + << " public " << fq_name (base, "impl") + << "{" + << "public:" << endl + << "virtual void" << endl + << "pre ();" + << endl + << "virtual " << ret << endl + << post_name (e) << " ();" + << "};"; + } + }; + + // + // + struct List: Traversal::List, Context + { + List (Context& c) + : Context (c) + { + } + + virtual Void + traverse (Type& l) + { + String const& name (eimpl (l)); + SemanticGraph::Type& t (l.argumented ().type ()); + + String item (unclash (ename (l), "item")); + + os << "class " << type_exp << name << ": public virtual " << + ename (l) + << "{" + << "public:" << endl + << "virtual void" << endl + << "pre ();" + << endl; + + // item + // + String const& arg (arg_type (t)); + + os << "virtual void" << endl + << item; + + if (arg == L"void") + os << " ();"; + else + os << " (" << arg << ");"; + + os << endl; + + // post + // + String const& ret (ret_type (l)); + + os << "virtual " << ret << endl + << post_name (l) << " ();" + << "};"; + } + }; + + struct Union: Traversal::Union, Context + { + Union (Context& c) + : Context (c) + { + } + + virtual Void + traverse (Type& u) + { + String const& name (eimpl (u)); + String const& ret (ret_type (u)); + + os << "class " << type_exp << name << ": public virtual " << + ename (u) + << "{" + << "public:" << endl + << "virtual void" << endl + << "pre ();" + << endl + << "virtual void" << endl + << "_characters (const " << string_type << "&);" + << endl + << "virtual " << ret << endl + << post_name (u) << " ();" + << "};"; + } + }; + + + // + // + struct ParserCallback: Traversal::Member, Context + { + ParserCallback (Context& c) + : Context (c) + { + } + + virtual Void + traverse (Type& m) + { + if (skip (m)) + return; + + String const& arg (arg_type (m.type ())); + + os << "virtual void" << endl + << ename (m); + + if (arg == L"void") + os << " ();"; + else + os << " (" << arg << ");"; + + os << endl; + } + }; + + // + // + struct Complex: Traversal::Complex, Context + { + Complex (Context& c) + : Context (c), + parser_callback_ (c) + { + names_parser_callback_ >> parser_callback_; + } + + virtual Void + traverse (Type& c) + { + String const& name (eimpl (c)); + String const& ret (ret_type (c)); + + os << "class " << type_exp << name << ": public virtual " << + ename (c); + + if (c.inherits_p ()) + os << "," << endl + << " public " << fq_name (c.inherits ().base (), "impl"); + + os << "{" + << "public:" << endl + << "virtual void" << endl + << "pre ();" + << endl; + + // In case of an inheritance-by-restriction, we don't need to + // generate parser callbacks, etc. since they are the same as in + // the base. + // + if (!restriction_p (c)) + { + names (c, names_parser_callback_); + } + + os << "virtual " << ret << endl + << post_name (c) << " ();" + << "};"; + } + + private: + // + // + ParserCallback parser_callback_; + Traversal::Names names_parser_callback_; + }; + } + + Void + generate_impl_header (Context& ctx) + { + Traversal::Schema schema; + + Traversal::Sources sources; + Includes includes (ctx, Includes::impl_header); + Traversal::Names schema_names; + + Namespace ns (ctx); + Traversal::Names names; + + schema >> includes; + schema >> sources >> schema; + schema >> schema_names >> ns >> names; + + List list (ctx); + Union union_ (ctx); + Complex complex (ctx); + Enumeration enumeration (ctx); + + names >> list; + names >> union_; + names >> complex; + names >> enumeration; + + schema.dispatch (ctx.schema_root); + } + } +} diff --git a/xsd/xsd/cxx/parser/impl-header.hxx b/xsd/xsd/cxx/parser/impl-header.hxx new file mode 100644 index 0000000..dd63e52 --- /dev/null +++ b/xsd/xsd/cxx/parser/impl-header.hxx @@ -0,0 +1,20 @@ +// file : xsd/cxx/parser/impl-header.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef CXX_PARSER_IMPL_HEADER_HXX +#define CXX_PARSER_IMPL_HEADER_HXX + +#include <cxx/parser/elements.hxx> + +namespace CXX +{ + namespace Parser + { + Void + generate_impl_header (Context&); + } +} + +#endif // CXX_PARSER_IMPL_HEADER_HXX diff --git a/xsd/xsd/cxx/parser/impl-source.cxx b/xsd/xsd/cxx/parser/impl-source.cxx new file mode 100644 index 0000000..b951f6a --- /dev/null +++ b/xsd/xsd/cxx/parser/impl-source.cxx @@ -0,0 +1,386 @@ +// file : xsd/cxx/parser/impl-source.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <cxx/parser/impl-source.hxx> +#include <cxx/parser/print-impl-common.hxx> + +#include <xsd-frontend/semantic-graph.hxx> +#include <xsd-frontend/traversal.hxx> + +namespace CXX +{ + namespace Parser + { + namespace + { + struct Enumeration: Traversal::Enumeration, Context + { + Enumeration (Context& c) + : Context (c) + { + } + + virtual Void + traverse (Type& e) + { + String const& name (eimpl (e)); + String const& ret (ret_type (e)); + SemanticGraph::Type& base (e.inherits ().base ()); + String const& base_ret (ret_type (base)); + + os << "// " << name << endl + << "//" << endl + << endl; + + // pre + // + os << "void " << name << "::" << endl + << "pre ()" + << "{" + << "}"; + + // post + // + os << ret << " " << name << "::" << endl + << post_name (e) << " ()" + << "{"; + + if (ret == base_ret) + { + os << (ret != L"void" ? "return " : "") << + post_name (base) << " ();"; + } + else if (ret == L"void") + { + os << arg_type (base) << " v (" << post_name (base) << " ());" + << endl; + + if (options.value<CLI::generate_print_impl> ()) + { + PrintCall t (*this, e.name (), "v"); + t.dispatch (base); + } + else + os << "// TODO" << endl + << "//" << endl; + } + else + { + if (base_ret == L"void") + os << post_name (base) << " ();"; + else + os << arg_type (base) << " v (" << post_name (base) << " ());" + << endl + << "// TODO" << endl + << "//" << endl + << "// return ... ;" << endl; + } + + os << "}"; + } + }; + + // + // + struct List: Traversal::List, Context + { + List (Context& c) + : Context (c) + { + } + + virtual Void + traverse (Type& l) + { + String const& name (eimpl (l)); + SemanticGraph::Type& type (l.argumented ().type ()); + + String item (unclash (ename (l), "item")); + + os << "// " << name << endl + << "//" << endl + << endl; + + // pre + // + os << "void " << name << "::" << endl + << "pre ()" + << "{" + << "}"; + + // item + // + String const& arg (arg_type (type)); + + os << "void " << name << "::" << endl + << item; + + if (arg == L"void") + os << " ()"; + else + os << " (" << arg << " " << item << ")"; + + os << "{"; + + if (arg != L"void") + { + if (options.value<CLI::generate_print_impl> ()) + { + PrintCall t (*this, type.name (), item); + t.dispatch (type); + } + else + os << "// TODO" << endl + << "//" << endl; + } + + os << "}"; + + // post + // + String const& ret (ret_type (l)); + + os << ret << " " << name << "::" << endl + << post_name (l) << " ()" + << "{"; + + if (ret != L"void") + os << "// TODO" << endl + << "//" << endl + << "// return ... ;" << endl; + + os << "}"; + } + }; + + // + // + struct Union: Traversal::Union, Context + { + Union (Context& c) + : Context (c) + { + } + + virtual Void + traverse (Type& u) + { + String const& name (eimpl (u)); + + os << "// " << name << endl + << "//" << endl + << endl; + + // pre + // + os << "void " << name << "::" << endl + << "pre ()" + << "{" + << "}"; + + // _characters + // + os << "void " << name << "::" << endl + << "_characters (const " << string_type << "& s)" + << "{"; + + if (options.value<CLI::generate_print_impl> ()) + os << cout_inst << " << " << strlit (u.name () + L": ") << + " << s << std::endl;"; + else + os << "// TODO" << endl + << "//" << endl; + + os << "}"; + + // post + // + String const& ret (ret_type (u)); + + os << ret << " " << name << "::" << endl + << post_name (u) << " ()" + << "{"; + + if (ret != L"void") + os << "// TODO" << endl + << "//" << endl + << "// return ... ;" << endl; + + os << "}"; + } + }; + + // + // + struct ParserCallback: Traversal::Member, Context + { + ParserCallback (Context& c) + : Context (c) + { + } + + virtual Void + traverse (Type& m) + { + if (skip (m)) + return; + + String const& name (ename (m)); + String const& arg (arg_type (m.type ())); + + os << "void " << + eimpl (dynamic_cast<SemanticGraph::Complex&> (m.scope ())) << + "::" << endl + << name; + + if (arg == L"void") + os << " ()"; + else + os << " (" << arg << " " << name << ")"; + + os << "{"; + + if (arg != L"void") + { + if (options.value<CLI::generate_print_impl> ()) + { + PrintCall t (*this, m.name (), name); + t.dispatch (m.type ()); + } + else + os << "// TODO" << endl + << "//" << endl; + } + + os << "}"; + } + }; + + // + // + struct Complex: Traversal::Complex, Context + { + Complex (Context& c) + : Context (c), parser_callback_ (c) + { + names_parser_callback_ >> parser_callback_; + } + + virtual Void + traverse (Type& c) + { + String const& name (eimpl (c)); + + Boolean restriction (restriction_p (c)); + + os << "// " << name << endl + << "//" << endl + << endl; + + // pre + // + os << "void " << name << "::" << endl + << "pre ()" + << "{" + << "}"; + + // Parser callbacks. + // + if (!restriction) + names (c, names_parser_callback_); + + // post + // + String const& ret (ret_type (c)); + + os << ret << " " << name << "::" << endl + << post_name (c) << " ()" + << "{"; + + if (c.inherits_p ()) + { + SemanticGraph::Type& base (c.inherits ().base ()); + String const& base_ret (ret_type (base)); + + if (ret == base_ret) + { + os << (ret != L"void" ? "return " : "") << + post_name (base) << " ();"; + } + else if (ret == L"void") + { + os << arg_type (base) << " v (" << post_name (base) << " ());" + << endl; + + if (options.value<CLI::generate_print_impl> ()) + { + PrintCall t (*this, c.name (), "v"); + t.dispatch (base); + } + else + os << "// TODO" << endl + << "//" << endl; + } + else + { + if (base_ret == L"void") + os << post_name (base) << " ();"; + else + os << arg_type (base) << " v (" << post_name (base) << " ());" + << endl + << "// TODO" << endl + << "//" << endl + << "// return ... ;" << endl; + } + } + else + { + if (ret != L"void") + os << "// TODO" << endl + << "//" << endl + << "// return ... ;" << endl; + } + + os << "}"; + } + + private: + // + // + ParserCallback parser_callback_; + Traversal::Names names_parser_callback_; + }; + } + + Void + generate_impl_source (Context& ctx) + { + if (ctx.options.value<CLI::generate_print_impl> ()) + ctx.os << "#include <iostream>" << endl + << endl; + + Traversal::Schema schema; + Traversal::Sources sources; + Traversal::Names schema_names; + Namespace ns (ctx); + Traversal::Names names; + + schema >> sources >> schema; + schema >> schema_names >> ns >> names; + + List list (ctx); + Union union_ (ctx); + Complex complex (ctx); + Enumeration enumeration (ctx); + + names >> list; + names >> union_; + names >> complex; + names >> enumeration; + + schema.dispatch (ctx.schema_root); + } + } +} diff --git a/xsd/xsd/cxx/parser/impl-source.hxx b/xsd/xsd/cxx/parser/impl-source.hxx new file mode 100644 index 0000000..0d60162 --- /dev/null +++ b/xsd/xsd/cxx/parser/impl-source.hxx @@ -0,0 +1,20 @@ +// file : xsd/cxx/parser/impl-source.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef CXX_PARSER_IMPL_SOURCE_HXX +#define CXX_PARSER_IMPL_SOURCE_HXX + +#include <cxx/parser/elements.hxx> + +namespace CXX +{ + namespace Parser + { + Void + generate_impl_source (Context&); + } +} + +#endif // CXX_PARSER_IMPL_SOURCE_HXX diff --git a/xsd/xsd/cxx/parser/name-processor.cxx b/xsd/xsd/cxx/parser/name-processor.cxx new file mode 100644 index 0000000..d323187 --- /dev/null +++ b/xsd/xsd/cxx/parser/name-processor.cxx @@ -0,0 +1,1201 @@ +// file : xsd/cxx/parser/name-processor.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <cxx/parser/name-processor.hxx> + +#include <xsd-frontend/semantic-graph.hxx> +#include <xsd-frontend/traversal.hxx> + +#include <cult/containers/set.hxx> + +#include <sstream> +#include <iostream> + +namespace CXX +{ + namespace Parser + { + NameProcessor:: + NameProcessor () + { + // Dummy ctor, helps with long symbols on HP-UX. + } + + namespace + { + // + // + typedef Cult::Containers::Set<String> NameSet; + + class Context: public CXX::Context + { + public: + Context (CLI::Options const& ops, + SemanticGraph::Schema& root, + SemanticGraph::Path const& path, + StringLiteralMap const* map) + : CXX::Context (std::wcerr, + root, + path, + map, + ops.value<CLI::char_type> (), + ops.value<CLI::char_encoding> (), + ops.value<CLI::include_with_brackets> (), + ops.value<CLI::include_prefix> (), + ops.value<CLI::export_symbol> (), + ops.value<CLI::namespace_map> (), + ops.value<CLI::namespace_regex> (), + ops.value<CLI::namespace_regex_trace> (), + ops.value<CLI::include_regex> (), + ops.value<CLI::include_regex_trace> (), + ops.value<CLI::generate_inline> (), + ops.value<CLI::reserved_name> ()), + skel_suffix_ (ops.value<CLI::skel_type_suffix> ()), + impl_suffix_ (ops.value<CLI::impl_type_suffix> ()), + impl (ops.value<CLI::generate_noop_impl> () || + ops.value<CLI::generate_print_impl> () || + ops.value<CLI::generate_test_driver> ()), + skel_suffix (skel_suffix_), + impl_suffix (impl_suffix_), + global_type_names (global_type_names_), + polymorphic (ops.value<CLI::generate_polymorphic> ()) + { + } + + protected: + Context (Context& c) + : CXX::Context (c), + impl (c.impl), + skel_suffix (c.skel_suffix), + impl_suffix (c.impl_suffix), + global_type_names (c.global_type_names), + polymorphic (c.polymorphic) + { + } + + public: + String + find_name (String const& n, NameSet& set) + { + String base_name (escape (n)); + String name (base_name); + + for (UnsignedLong i (1); set.find (name) != set.end (); ++i) + { + std::wostringstream os; + os << i; + name = base_name + os.str (); + } + + set.insert (name); + return name; + } + + private: + String const skel_suffix_; + String const impl_suffix_; + + Cult::Containers::Map<String, NameSet> global_type_names_; + + public: + Boolean const impl; + String const& skel_suffix; + String const& impl_suffix; + + Cult::Containers::Map<String, NameSet>& global_type_names; + + Boolean polymorphic; + }; + + + // + // + struct PrimaryMember: Traversal::Member, Context + { + PrimaryMember (Context& c, NameSet& set) + : Context (c), set_ (set) + { + } + + virtual Void + traverse (Type& m) + { + if (Parser::Context::skip (m)) + return; + + m.context ().set ("name", find_name (m.name (), set_)); + } + + private: + NameSet& set_; + }; + + struct DerivedMember: Traversal::Member, Context + { + DerivedMember (Context& c, NameSet& set) + : Context (c), set_ (set) + { + } + + virtual Void + traverse (Type& m) + { + if (Parser::Context::skip (m)) + return; + + m.context ().set ("parser", + find_name (m.name () + L"_parser", set_)); + + String const& base (m.context ().get<String> ("name")); + m.context ().set ("member", find_name (base + L"_parser_", set_)); + + if (polymorphic && + m.is_a<SemanticGraph::Element> () && + !m.type ().context ().count ("anonymous")) + { + m.context ().set ( + "member-cache", find_name (base + L"_parser_cache_", set_)); + + m.context ().set ( + "member-map", find_name (base + L"_parser_map_", set_)); + + m.context ().set ( + "member-map-impl", + find_name (base + L"_parser_map_impl_", set_)); + } + } + + private: + NameSet& set_; + }; + + + // + // + struct MemberInRestrictionBase: Traversal::Member + { + protected: + MemberInRestrictionBase (NameSet& set, SemanticGraph::Complex& base) + : set_ (set), base_ (base) + { + } + + struct NotFound {}; + + Type& + find_member (SemanticGraph::Complex& c, Type& m) + { + using SemanticGraph::Complex; + + Complex::NamesIteratorPair r (c.find (m.name ())); + + for (; r.first != r.second; ++r.first) + { + if (r.first->named ().is_a<Type> ()) + { + Type& bm (dynamic_cast<Type&> (r.first->named ())); + + if (typeid (bm) != typeid (m)) + continue; + + if (m.qualified_p ()) + { + if (bm.qualified_p () && + m.name () == bm.name () && + m.namespace_ ().name () == bm.namespace_ ().name ()) + return bm; + } + else + { + if (!bm.qualified_p () && m.name () == bm.name ()) + return bm; + } + } + } + + // If we didn't find anything, try our base. + // + if (c.inherits_p ()) + { + SemanticGraph::Type& base (c.inherits ().base ()); + + if (base.is_a<Complex> ()) + return find_member (dynamic_cast<Complex&> (base), m); + } + + //std::wcerr << "unable to find member " << m.name () << " in " + // << c.name () << std::endl; + + throw NotFound (); + } + + protected: + NameSet& set_; + SemanticGraph::Complex& base_; + }; + + struct PrimaryMemberInRestriction: MemberInRestrictionBase, Context + { + PrimaryMemberInRestriction (Context& c, + NameSet& set, + SemanticGraph::Complex& base) + : MemberInRestrictionBase (set, base), Context (c) + { + } + + virtual Void + traverse (Type& m) + { + if (Parser::Context::skip (m)) + return; + + String name; + + try + { + // Try to find corresponding member in one of our bases. + // This may fail if we use an element that substitutes + // one in our base. + // + Type& bm (find_member (base_, m)); + name = bm.context ().get<String> ("name"); + } + catch (NotFound const&) + { + // Fall back to the standard name assignment. + // + name = find_name (m.name (), set_); + } + + m.context ().set ("name", name); + } + }; + + struct DerivedMemberInRestriction: MemberInRestrictionBase, Context + { + DerivedMemberInRestriction (Context& c, + NameSet& set, + SemanticGraph::Complex& base) + : MemberInRestrictionBase (set, base), Context (c) + { + } + + virtual Void + traverse (Type& m) + { + if (Parser::Context::skip (m)) + return; + + Boolean poly (polymorphic && + m.is_a<SemanticGraph::Element> () && + !m.type ().context ().count ("anonymous")); + + String parser, member, member_cache, member_map, member_map_impl; + + try + { + // Try to find corresponding member in one of our bases. + // This may fail if we use an element that substitutes + // one in our base. + // + Type& bm (find_member (base_, m)); + parser = bm.context ().get<String> ("parser"); + member = bm.context ().get<String> ("member"); + + if (poly) + { + member_cache = bm.context ().get<String> ("member-cache"); + member_map = bm.context ().get<String> ("member-map"); + member_map_impl = bm.context ().get<String> ("member-map-impl"); + } + } + catch (NotFound const&) + { + // Fall back to the standard name assignment. + // + String const& base (m.context ().get<String> ("name")); + + parser = find_name (m.name () + L"_parser", set_); + member = find_name (base + L"_parser_", set_); + + if (poly) + { + member_cache = find_name (base + L"_parser_cache_", set_); + member_map = find_name (base + L"_parser_map_", set_); + member_map_impl = find_name (base + L"_parser_map_impl_", set_); + } + } + + m.context ().set ("parser", parser); + m.context ().set ("member", member); + + if (poly) + { + m.context ().set ("member-cache", member_cache); + m.context ().set ("member-map", member_map); + m.context ().set ("member-map-impl", member_map_impl); + } + } + }; + + // + // + struct Complex: Traversal::Complex, Context + { + Complex (Context& c) + : Context (c) + { + } + + virtual Void + traverse (Type& c) + { + SemanticGraph::Context& cc (c.context ()); + + // Use processed name. + // + String const& name (cc.get<String> ("name")); + + // We leave this set around to allow other mappings to use + // this information. + // + cc.set ("cxx-parser-name-processor-member-set", NameSet ()); + NameSet& member_set ( + cc.get<NameSet> ("cxx-parser-name-processor-member-set")); + + member_set.insert (name); + + // Add our base's members to the initial list unless we are + // inheriting by restriction in which case we need to have + // the same names as our base. + // + Boolean restriction (false); + + if (c.inherits_p ()) + { + // @@ What if this types name is the same as one of base's + // members? + // + SemanticGraph::Type& base (c.inherits ().base ()); + + if (base.is_a<SemanticGraph::Complex> ()) + { + if (!base.context ().count ( + "cxx-parser-name-processor-member-set")) + { + dispatch (base); + } + + NameSet const& base_set ( + base.context ().get<NameSet> ( + "cxx-parser-name-processor-member-set")); + + member_set.insert (base_set.begin (), base_set.end ()); + + // Inheritance by restriction from anyType is a special case. + // + restriction = c.inherits ().is_a<SemanticGraph::Restricts> () && + !c.inherits ().base ().is_a<SemanticGraph::AnyType> (); + } + } + + if (restriction) + { + // First assign the "primary" names. + // + { + PrimaryMemberInRestriction member ( + *this, + member_set, + dynamic_cast<SemanticGraph::Complex&> ( + c.inherits ().base ())); + + Traversal::Names names (member); + + Complex::names (c, names); + } + + // Assign "derived" names. + // + { + DerivedMemberInRestriction member ( + *this, + member_set, + dynamic_cast<SemanticGraph::Complex&> ( + c.inherits ().base ())); + + Traversal::Names names (member); + + Complex::names (c, names); + } + } + else + { + // First assign the "primary" names. + // + { + PrimaryMember member (*this, member_set); + Traversal::Names names (member); + + Complex::names (c, names); + } + + // Assign "derived" names. + // + { + DerivedMember member (*this, member_set); + Traversal::Names names (member); + + Complex::names (c, names); + } + } + } + }; + + + // + // + struct GlobalType: Traversal::Type, Context + { + GlobalType (Context& c, NameSet& set) + : Context (c), set_ (set) + { + } + + virtual Void + traverse (SemanticGraph::Type& t) + { + SemanticGraph::Context& c (t.context ()); + String const& n (t.name ()); + + String name (find_name (n + skel_suffix, set_)); + c.set ("name", name); + + // Assign the post_* name. + // + c.set ("post", find_post_name (t)); + + // Note that we do not add this name to the set so that it + // does not influence other names. + // + if (impl) + c.set ("impl", escape (n + impl_suffix)); + } + + private: + String + find_post_name (SemanticGraph::Type& t) + { + String const& n (t.name ()); + + // It is possible that our base has the same type name (just + // in a different namespaces). Avoid name clash in this case. + // + using SemanticGraph::Complex; + + Complex* c = dynamic_cast<Complex*> (&t); + + if (c == 0 || !c->inherits_p ()) + { + return escape (L"post_" + n); + } + else + { + NameSet set; + + // Collect all base's post_*. In some mutual inclusion cases it + // is possible that our base won't have the post name assigned + // yet. In this situation will will have to figure it out + // ourselves (we can do it since we use the "raw" type name). + // + SemanticGraph::Type* b (&c->inherits ().base ()); + + while (true) + { + if (b->context ().count ("post")) + set.insert (b->context ().get<String> ("post")); + else + set.insert (find_post_name (*b)); + + Complex* cb (dynamic_cast<Complex*> (b)); + + if (cb != 0 && cb->inherits_p ()) + { + b = &cb->inherits ().base (); + continue; + } + + break; + } + + String base_name (escape (L"post_" + n)); + String post (base_name); + + for (UnsignedLong i (1); set.find (post) != set.end (); ++i) + { + std::wostringstream os; + os << i; + post = base_name + os.str (); + } + + return post; + } + } + + private: + NameSet& set_; + }; + + + struct Namespace: Traversal::Namespace, Context + { + Namespace (Context& c) + : Context (c) + { + } + + virtual Void + traverse (Type& ns) + { + NameSet& type_set (global_type_names[ns.name ()]); + + GlobalType type (*this, type_set); + Traversal::Names names (type); + + Traversal::Namespace::names (ns, names); + } + }; + + + struct FundType: Traversal::AnyType, + Traversal::AnySimpleType, + + Traversal::Fundamental::Byte, + Traversal::Fundamental::UnsignedByte, + Traversal::Fundamental::Short, + Traversal::Fundamental::UnsignedShort, + Traversal::Fundamental::Int, + Traversal::Fundamental::UnsignedInt, + Traversal::Fundamental::Long, + Traversal::Fundamental::UnsignedLong, + Traversal::Fundamental::Integer, + Traversal::Fundamental::NonPositiveInteger, + Traversal::Fundamental::NonNegativeInteger, + Traversal::Fundamental::PositiveInteger, + Traversal::Fundamental::NegativeInteger, + + Traversal::Fundamental::Boolean, + + Traversal::Fundamental::Float, + Traversal::Fundamental::Double, + Traversal::Fundamental::Decimal, + + Traversal::Fundamental::String, + Traversal::Fundamental::NormalizedString, + Traversal::Fundamental::Token, + Traversal::Fundamental::Name, + Traversal::Fundamental::NameToken, + Traversal::Fundamental::NameTokens, + Traversal::Fundamental::NCName, + Traversal::Fundamental::Language, + + Traversal::Fundamental::QName, + + Traversal::Fundamental::Id, + Traversal::Fundamental::IdRef, + Traversal::Fundamental::IdRefs, + + Traversal::Fundamental::AnyURI, + + Traversal::Fundamental::Base64Binary, + Traversal::Fundamental::HexBinary, + + Traversal::Fundamental::Date, + Traversal::Fundamental::DateTime, + Traversal::Fundamental::Duration, + Traversal::Fundamental::Day, + Traversal::Fundamental::Month, + Traversal::Fundamental::MonthDay, + Traversal::Fundamental::Year, + Traversal::Fundamental::YearMonth, + Traversal::Fundamental::Time, + + Traversal::Fundamental::Entity, + Traversal::Fundamental::Entities, + + Context + { + FundType (Context& c) + : Context (c) + { + } + + // anyType & anySimpleType. + // + virtual Void + traverse (SemanticGraph::AnyType& t) + { + t.context ().set ("name", make_skel_name ("any_type")); + t.context ().set ("impl", make_impl_name ("any_type")); + t.context ().set ("post", String ("post_any_type")); + } + + virtual Void + traverse (SemanticGraph::AnySimpleType& t) + { + t.context ().set ("name", make_skel_name ("any_simple_type")); + t.context ().set ("impl", make_impl_name ("any_simple_type")); + t.context ().set ("post", String ("post_any_simple_type")); + } + + // Boolean. + // + virtual Void + traverse (SemanticGraph::Fundamental::Boolean& t) + { + t.context ().set ("name", make_skel_name ("boolean")); + t.context ().set ("impl", make_impl_name ("boolean")); + t.context ().set ("post", String ("post_boolean")); + } + + // Integral types. + // + virtual Void + traverse (SemanticGraph::Fundamental::Byte& t) + { + t.context ().set ("name", make_skel_name ("byte")); + t.context ().set ("impl", make_impl_name ("byte")); + t.context ().set ("post", String ("post_byte")); + } + + virtual Void + traverse (SemanticGraph::Fundamental::UnsignedByte& t) + { + t.context ().set ("name", make_skel_name ("unsigned_byte")); + t.context ().set ("impl", make_impl_name ("unsigned_byte")); + t.context ().set ("post", String ("post_unsigned_byte")); + } + + virtual Void + traverse (SemanticGraph::Fundamental::Short& t) + { + t.context ().set ("name", make_skel_name ("short")); + t.context ().set ("impl", make_impl_name ("short")); + t.context ().set ("post", String ("post_short")); + } + + virtual Void + traverse (SemanticGraph::Fundamental::UnsignedShort& t) + { + t.context ().set ("name", make_skel_name ("unsigned_short")); + t.context ().set ("impl", make_impl_name ("unsigned_short")); + t.context ().set ("post", String ("post_unsigned_short")); + } + + virtual Void + traverse (SemanticGraph::Fundamental::Int& t) + { + t.context ().set ("name", make_skel_name ("int")); + t.context ().set ("impl", make_impl_name ("int")); + t.context ().set ("post", String ("post_int")); + } + + virtual Void + traverse (SemanticGraph::Fundamental::UnsignedInt& t) + { + t.context ().set ("name", make_skel_name ("unsigned_int")); + t.context ().set ("impl", make_impl_name ("unsigned_int")); + t.context ().set ("post", String ("post_unsigned_int")); + } + + virtual Void + traverse (SemanticGraph::Fundamental::Long& t) + { + t.context ().set ("name", make_skel_name ("long")); + t.context ().set ("impl", make_impl_name ("long")); + t.context ().set ("post", String ("post_long")); + } + + virtual Void + traverse (SemanticGraph::Fundamental::UnsignedLong& t) + { + t.context ().set ("name", make_skel_name ("unsigned_long")); + t.context ().set ("impl", make_impl_name ("unsigned_long")); + t.context ().set ("post", String ("post_unsigned_long")); + } + + virtual Void + traverse (SemanticGraph::Fundamental::Integer& t) + { + t.context ().set ("name", make_skel_name ("integer")); + t.context ().set ("impl", make_impl_name ("integer")); + t.context ().set ("post", String ("post_integer")); + } + + virtual Void + traverse (SemanticGraph::Fundamental::NonPositiveInteger& t) + { + t.context ().set ("name", make_skel_name ("non_positive_integer")); + t.context ().set ("impl", make_impl_name ("non_positive_integer")); + t.context ().set ("post", String ("post_non_positive_integer")); + } + + virtual Void + traverse (SemanticGraph::Fundamental::NonNegativeInteger& t) + { + t.context ().set ("name", make_skel_name ("non_negative_integer")); + t.context ().set ("impl", make_impl_name ("non_negative_integer")); + t.context ().set ("post", String ("post_non_negative_integer")); + } + + virtual Void + traverse (SemanticGraph::Fundamental::PositiveInteger& t) + { + t.context ().set ("name", make_skel_name ("positive_integer")); + t.context ().set ("impl", make_impl_name ("positive_integer")); + t.context ().set ("post", String ("post_positive_integer")); + } + + virtual Void + traverse (SemanticGraph::Fundamental::NegativeInteger& t) + { + t.context ().set ("name", make_skel_name ("negative_integer")); + t.context ().set ("impl", make_impl_name ("negative_integer")); + t.context ().set ("post", String ("post_negative_integer")); + } + + // Floats. + // + virtual Void + traverse (SemanticGraph::Fundamental::Float& t) + { + t.context ().set ("name", make_skel_name ("float")); + t.context ().set ("impl", make_impl_name ("float")); + t.context ().set ("post", String ("post_float")); + } + + virtual Void + traverse (SemanticGraph::Fundamental::Double& t) + { + t.context ().set ("name", make_skel_name ("double")); + t.context ().set ("impl", make_impl_name ("double")); + t.context ().set ("post", String ("post_double")); + } + + virtual Void + traverse (SemanticGraph::Fundamental::Decimal& t) + { + t.context ().set ("name", make_skel_name ("decimal")); + t.context ().set ("impl", make_impl_name ("decimal")); + t.context ().set ("post", String ("post_decimal")); + } + + // Strings. + // + virtual Void + traverse (SemanticGraph::Fundamental::String& t) + { + t.context ().set ("name", make_skel_name ("string")); + t.context ().set ("impl", make_impl_name ("string")); + t.context ().set ("post", String ("post_string")); + } + + virtual Void + traverse (SemanticGraph::Fundamental::NormalizedString& t) + { + t.context ().set ("name", make_skel_name ("normalized_string")); + t.context ().set ("impl", make_impl_name ("normalized_string")); + t.context ().set ("post", String ("post_normalized_string")); + } + + virtual Void + traverse (SemanticGraph::Fundamental::Token& t) + { + t.context ().set ("name", make_skel_name ("token")); + t.context ().set ("impl", make_impl_name ("token")); + t.context ().set ("post", String ("post_token")); + } + + virtual Void + traverse (SemanticGraph::Fundamental::NameToken& t) + { + t.context ().set ("name", make_skel_name ("nmtoken")); + t.context ().set ("impl", make_impl_name ("nmtoken")); + t.context ().set ("post", String ("post_nmtoken")); + } + + virtual Void + traverse (SemanticGraph::Fundamental::NameTokens& t) + { + t.context ().set ("name", make_skel_name ("nmtokens")); + t.context ().set ("impl", make_impl_name ("nmtokens")); + t.context ().set ("post", String ("post_nmtokens")); + } + + virtual Void + traverse (SemanticGraph::Fundamental::Name& t) + { + t.context ().set ("name", make_skel_name ("name")); + t.context ().set ("impl", make_impl_name ("name")); + t.context ().set ("post", String ("post_name")); + } + + virtual Void + traverse (SemanticGraph::Fundamental::NCName& t) + { + t.context ().set ("name", make_skel_name ("ncname")); + t.context ().set ("impl", make_impl_name ("ncname")); + t.context ().set ("post", String ("post_ncname")); + } + + virtual Void + traverse (SemanticGraph::Fundamental::Language& t) + { + t.context ().set ("name", make_skel_name ("language")); + t.context ().set ("impl", make_impl_name ("language")); + t.context ().set ("post", String ("post_language")); + } + + + // Qualified name. + // + virtual Void + traverse (SemanticGraph::Fundamental::QName& t) + { + t.context ().set ("name", make_skel_name ("qname")); + t.context ().set ("impl", make_impl_name ("qname")); + t.context ().set ("post", String ("post_qname")); + } + + + // ID/IDREF. + // + virtual Void + traverse (SemanticGraph::Fundamental::Id& t) + { + t.context ().set ("name", make_skel_name ("id")); + t.context ().set ("impl", make_impl_name ("id")); + t.context ().set ("post", String ("post_id")); + } + + virtual Void + traverse (SemanticGraph::Fundamental::IdRef& t) + { + t.context ().set ("name", make_skel_name ("idref")); + t.context ().set ("impl", make_impl_name ("idref")); + t.context ().set ("post", String ("post_idref")); + } + + virtual Void + traverse (SemanticGraph::Fundamental::IdRefs& t) + { + t.context ().set ("name", make_skel_name ("idrefs")); + t.context ().set ("impl", make_impl_name ("idrefs")); + t.context ().set ("post", String ("post_idrefs")); + } + + // URI. + // + virtual Void + traverse (SemanticGraph::Fundamental::AnyURI& t) + { + t.context ().set ("name", make_skel_name ("uri")); + t.context ().set ("impl", make_impl_name ("uri")); + t.context ().set ("post", String ("post_uri")); + } + + // Binary. + // + virtual Void + traverse (SemanticGraph::Fundamental::Base64Binary& t) + { + t.context ().set ("name", make_skel_name ("base64_binary")); + t.context ().set ("impl", make_impl_name ("base64_binary")); + t.context ().set ("post", String ("post_base64_binary")); + } + + virtual Void + traverse (SemanticGraph::Fundamental::HexBinary& t) + { + t.context ().set ("name", make_skel_name ("hex_binary")); + t.context ().set ("impl", make_impl_name ("hex_binary")); + t.context ().set ("post", String ("post_hex_binary")); + } + + + // Date/time. + // + virtual Void + traverse (SemanticGraph::Fundamental::Date& t) + { + t.context ().set ("name", make_skel_name ("date")); + t.context ().set ("impl", make_impl_name ("date")); + t.context ().set ("post", String ("post_date")); + } + + virtual Void + traverse (SemanticGraph::Fundamental::DateTime& t) + { + t.context ().set ("name", make_skel_name ("date_time")); + t.context ().set ("impl", make_impl_name ("date_time")); + t.context ().set ("post", String ("post_date_time")); + } + + virtual Void + traverse (SemanticGraph::Fundamental::Duration& t) + { + t.context ().set ("name", make_skel_name ("duration")); + t.context ().set ("impl", make_impl_name ("duration")); + t.context ().set ("post", String ("post_duration")); + } + + virtual Void + traverse (SemanticGraph::Fundamental::Day& t) + { + t.context ().set ("name", make_skel_name ("gday")); + t.context ().set ("impl", make_impl_name ("gday")); + t.context ().set ("post", String ("post_gday")); + } + + virtual Void + traverse (SemanticGraph::Fundamental::Month& t) + { + t.context ().set ("name", make_skel_name ("gmonth")); + t.context ().set ("impl", make_impl_name ("gmonth")); + t.context ().set ("post", String ("post_gmonth")); + } + + virtual Void + traverse (SemanticGraph::Fundamental::MonthDay& t) + { + t.context ().set ("name", make_skel_name ("gmonth_day")); + t.context ().set ("impl", make_impl_name ("gmonth_day")); + t.context ().set ("post", String ("post_gmonth_day")); + } + + virtual Void + traverse (SemanticGraph::Fundamental::Year& t) + { + t.context ().set ("name", make_skel_name ("gyear")); + t.context ().set ("impl", make_impl_name ("gyear")); + t.context ().set ("post", String ("post_gyear")); + } + + virtual Void + traverse (SemanticGraph::Fundamental::YearMonth& t) + { + t.context ().set ("name", make_skel_name ("gyear_month")); + t.context ().set ("impl", make_impl_name ("gyear_month")); + t.context ().set ("post", String ("post_gyear_month")); + } + + virtual Void + traverse (SemanticGraph::Fundamental::Time& t) + { + t.context ().set ("name", make_skel_name ("time")); + t.context ().set ("impl", make_impl_name ("time")); + t.context ().set ("post", String ("post_time")); + } + + // Entity. + // + virtual Void + traverse (SemanticGraph::Fundamental::Entity& t) + { + t.context ().set ("name", make_skel_name ("entity")); + t.context ().set ("impl", make_impl_name ("entity")); + t.context ().set ("post", String ("post_entity")); + } + + virtual Void + traverse (SemanticGraph::Fundamental::Entities& t) + { + t.context ().set ("name", make_skel_name ("entities")); + t.context ().set ("impl", make_impl_name ("entities")); + t.context ().set ("post", String ("post_entities")); + } + + private: + String + make_skel_name (String const& base) + { + return escape (base + skel_suffix); + } + + String + make_impl_name (String const& base) + { + return escape (base + impl_suffix); + } + }; + + // Go into sourced/included/imported schemas while making sure + // we don't process the same stuff more than once. + // + struct Uses: Traversal::Sources, + Traversal::Includes, + Traversal::Imports + { + virtual Void + traverse (SemanticGraph::Sources& sr) + { + SemanticGraph::Schema& s (sr.schema ()); + + if (!s.context ().count ("cxx-parser-name-processor-seen")) + { + s.context ().set ("cxx-parser-name-processor-seen", true); + Traversal::Sources::traverse (sr); + } + } + + virtual Void + traverse (SemanticGraph::Includes& i) + { + SemanticGraph::Schema& s (i.schema ()); + + if (!s.context ().count ("cxx-parser-name-processor-seen")) + { + s.context ().set ("cxx-parser-name-processor-seen", true); + Traversal::Includes::traverse (i); + } + } + + virtual Void + traverse (SemanticGraph::Imports& i) + { + SemanticGraph::Schema& s (i.schema ()); + + if (!s.context ().count ("cxx-parser-name-processor-seen")) + { + s.context ().set ("cxx-parser-name-processor-seen", true); + Traversal::Imports::traverse (i); + } + } + }; + + // Go into implied schemas while making sure we don't process + // the same stuff more than once. + // + struct Implies: Traversal::Implies + { + virtual Void + traverse (SemanticGraph::Implies& i) + { + SemanticGraph::Schema& s (i.schema ()); + + if (!s.context ().count ("cxx-parser-name-processor-seen")) + { + s.context ().set ("cxx-parser-name-processor-seen", true); + Traversal::Implies::traverse (i); + } + } + }; + + Void + process_impl (CLI::Options const& ops, + SemanticGraph::Schema& tu, + SemanticGraph::Path const& file, + StringLiteralMap const& map) + { + Context ctx (ops, tu, file, &map); + + if (tu.names_begin ()->named ().name () == + L"http://www.w3.org/2001/XMLSchema") + { + // XML Schema namespace. + // + Traversal::Schema schema; + + Traversal::Names schema_names; + Traversal::Namespace ns; + Traversal::Names ns_names; + FundType fund_type (ctx); + + schema >> schema_names >> ns >> ns_names >> fund_type; + + schema.dispatch (tu); + } + else + { + + // Pass one - assign names to fundamental types. + // + { + Traversal::Schema schema; + Implies implies; + Traversal::Schema xs_schema; + + schema >> implies >> xs_schema; + + Traversal::Names xs_schema_names; + Traversal::Namespace ns; + Traversal::Names ns_names; + FundType fund_type (ctx); + + xs_schema >> xs_schema_names >> ns >> ns_names >> fund_type; + + schema.dispatch (tu); + } + + // Pass two - assign names to global types. This pass cannot + // be combined with pass three because of possible recursive + // schema inclusions. Also note that we check first if this + // schema has already been processed which may happen in the + // file-per-type compilation mode. + // + if (!tu.context ().count ("cxx-parser-name-processor-seen")) + { + Traversal::Schema schema; + Uses uses; + + schema >> uses >> schema; + + Traversal::Names schema_names; + Namespace ns (ctx); + + schema >> schema_names >> ns; + + // Some twisted schemas do recusive self-inclusion. + // + tu.context ().set ("cxx-parser-name-processor-seen", true); + + schema.dispatch (tu); + } + + // Pass three - assign names inside complex types. Here we don't + // need to go into included/imported schemas. + // + { + Traversal::Schema schema; + Traversal::Sources sources; + + schema >> sources >> schema; + + Traversal::Names schema_names; + Traversal::Namespace ns; + Traversal::Names ns_names; + + schema >> schema_names >> ns >> ns_names; + + Complex complex (ctx); + + ns_names >> complex; + + schema.dispatch (tu); + } + } + } + } + + Void NameProcessor:: + process (CLI::Options const& ops, + SemanticGraph::Schema& tu, + SemanticGraph::Path const& file, + StringLiteralMap const& map) + { + process_impl (ops, tu, file, map); + } + } +} diff --git a/xsd/xsd/cxx/parser/name-processor.hxx b/xsd/xsd/cxx/parser/name-processor.hxx new file mode 100644 index 0000000..5c28371 --- /dev/null +++ b/xsd/xsd/cxx/parser/name-processor.hxx @@ -0,0 +1,34 @@ +// file : xsd/cxx/parser/name-processor.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef CXX_PARSER_NAME_PROCESSOR_HXX +#define CXX_PARSER_NAME_PROCESSOR_HXX + +#include <xsd-frontend/semantic-graph.hxx> + +#include <cxx/elements.hxx> +#include <cxx/parser/cli.hxx> + +namespace CXX +{ + namespace Parser + { + using namespace Cult::Types; + + class NameProcessor + { + public: + NameProcessor (); // Dummy ctor, helps with long symbols on HP-UX. + + Void + process (CLI::Options const& ops, + XSDFrontend::SemanticGraph::Schema&, + XSDFrontend::SemanticGraph::Path const& file, + StringLiteralMap const& map); + }; + } +} + +#endif // CXX_PARSER_NAME_PROCESSOR_HXX diff --git a/xsd/xsd/cxx/parser/parser-forward.cxx b/xsd/xsd/cxx/parser/parser-forward.cxx new file mode 100644 index 0000000..a4e8ae7 --- /dev/null +++ b/xsd/xsd/cxx/parser/parser-forward.cxx @@ -0,0 +1,112 @@ +// file : xsd/cxx/parser/parser-forward.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <cxx/parser/parser-forward.hxx> + +#include <xsd-frontend/semantic-graph.hxx> +#include <xsd-frontend/traversal.hxx> + +namespace CXX +{ + namespace Parser + { + namespace + { + struct Enumeration: Traversal::Enumeration, Context + { + Enumeration (Context& c) + : Context (c) + { + } + + virtual Void + traverse (Type& e) + { + os << "class " << ename (e) << ";"; + } + }; + + // + // + struct List: Traversal::List, Context + { + List (Context& c) + : Context (c) + { + } + + virtual Void + traverse (Type& l) + { + os << "class " << ename (l) << ";"; + } + }; + + // + // + struct Union: Traversal::Union, Context + { + Union (Context& c) + : Context (c) + { + } + + virtual Void + traverse (Type& u) + { + os << "class " << ename (u) << ";"; + } + }; + + // + // + struct Complex: Traversal::Complex, Context + { + Complex (Context& c) + : Context (c) + { + } + + virtual Void + traverse (Type& c) + { + os << "class " << ename (c) << ";"; + } + }; + } + + Void + generate_parser_forward (Context& ctx) + { + ctx.os << "// Forward declarations" << endl + << "//" << endl; + + Traversal::Schema schema; + + Traversal::Sources sources; + Traversal::Names schema_names; + + Namespace ns (ctx); + Traversal::Names names; + + schema >> sources >> schema; + schema >> schema_names >> ns >> names; + + List list (ctx); + Union union_ (ctx); + Complex complex (ctx); + Enumeration enumeration (ctx); + + names >> list; + names >> union_; + names >> complex; + names >> enumeration; + + schema.dispatch (ctx.schema_root); + + ctx.os << endl; + } + } +} diff --git a/xsd/xsd/cxx/parser/parser-forward.hxx b/xsd/xsd/cxx/parser/parser-forward.hxx new file mode 100644 index 0000000..a8a17f1 --- /dev/null +++ b/xsd/xsd/cxx/parser/parser-forward.hxx @@ -0,0 +1,20 @@ +// file : xsd/cxx/parser/parser-forward.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef CXX_PARSER_PARSER_FORWARD_HXX +#define CXX_PARSER_PARSER_FORWARD_HXX + +#include <cxx/parser/elements.hxx> + +namespace CXX +{ + namespace Parser + { + Void + generate_parser_forward (Context&); + } +} + +#endif // CXX_PARSER_PARSER_FORWARD_HXX diff --git a/xsd/xsd/cxx/parser/parser-header.cxx b/xsd/xsd/cxx/parser/parser-header.cxx new file mode 100644 index 0000000..aade743 --- /dev/null +++ b/xsd/xsd/cxx/parser/parser-header.cxx @@ -0,0 +1,1440 @@ +// file : xsd/cxx/parser/parser-header.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <cxx/parser/parser-header.hxx> + +#include <xsd-frontend/semantic-graph.hxx> +#include <xsd-frontend/traversal.hxx> + +namespace CXX +{ + namespace Parser + { + namespace + { + struct Enumeration: Traversal::Enumeration, Context + { + Enumeration (Context& c) + : Context (c) + { + } + + virtual Void + traverse (Type& e) + { + String const& name (ename (e)); + SemanticGraph::Type& base (e.inherits ().base ()); + + os << "class " << type_exp << name << ": public virtual " << + fq_name (base) + << "{" + << "public:" << endl + << "// Parser callbacks. Override them in your " << + "implementation." << endl + << "//" << endl; + + os << "// virtual void" << endl + << "// pre ();" << endl + << endl; + + String const& ret (ret_type (e)); + + Boolean same (ret == ret_type (base)); + + os << "virtual " << ret << endl + << post_name (e) << " ()" << + (same || ret == L"void" ? ";" : " = 0;"); + + if (polymorphic) + { + os << endl + << "public:" << endl + << "static const " << char_type << "*" << endl + << "_static_type ();" + << endl + << "virtual const " << char_type << "*" << endl + << "_dynamic_type () const;"; + } + + os << "};"; + } + }; + + // + // + struct List: Traversal::List, Context + { + List (Context& c) + : Context (c) + { + } + + virtual Void + traverse (Type& l) + { + String const& name (ename (l)); + SemanticGraph::Type& t (l.argumented ().type ()); + + String item (unclash (name, "item")); + + os << "class " << type_exp << name << ": public " << list_base + << "{" + << "public:" << endl + << "// Parser callbacks. Override them in your " << + "implementation." << endl + << "//" << endl; + + // pre + // + os << "// virtual void" << endl + << "// pre ();" << endl + << endl; + + // item + // + String const& arg (arg_type (t)); + + os << "virtual void" << endl + << item; + + if (arg == L"void") + os << " ();"; + else + os << " (" << arg << ");"; + + os << endl; + + // post + // + String const& ret (ret_type (l)); + + os << "virtual " << ret << endl + << post_name (l) << " ()" << (ret == L"void" ? ";" : " = 0;") + << endl; + + // + // + os << "// Parser construction API." << endl + << "//" << endl; + + // item_parser + // + os << "void" << endl + << unclash (name, "item_parser") << " (" << fq_name (t) << "&);" + << endl; + + // parsers + // + os << "void" << endl + << "parsers (" << fq_name (t) << "& /* item */);" + << endl; + + // c-tor + // + os << "// Constructor." << endl + << "//" << endl + << name << " ();" + << endl; + + + if (polymorphic) + { + os << "public:" << endl + << "static const " << char_type << "*" << endl + << "_static_type ();" + << endl + << "virtual const " << char_type << "*" << endl + << "_dynamic_type () const;" + << endl; + } + + // + // + os << "// Implementation." << endl + << "//" << endl + << "protected:" << endl; + + os << "virtual void" << endl + << "_xsd_parse_item (const " << string_type << "&);" + << endl; + + os << "protected:" << endl + << fq_name (t) << "* _xsd_" << item << "_;" + << "};"; + } + }; + + struct Union: Traversal::Union, Context + { + Union (Context& c) + : Context (c) + { + } + + virtual Void + traverse (Type& u) + { + String const& name (ename (u)); + + os << "class " << type_exp << name << ": public " << simple_base + << "{" + << "public:" << endl + << "// Parser callbacks. Override them in your " << + "implementation." << endl + << "//" << endl; + + os << "// virtual void" << endl + << "// pre ();" << endl + << "//" << endl + << "// virtual void" << endl + << "// _characters (const " << string_type << "&);" << endl + << endl; + + String const& ret (ret_type (u)); + + os << "virtual " << ret << endl + << post_name (u) << " ()" << (ret == L"void" ? ";" : " = 0;"); + + if (polymorphic) + { + os << endl + << "public:" << endl + << "static const " << char_type << "*" << endl + << "_static_type ();" + << endl + << "virtual const " << char_type << "*" << endl + << "_dynamic_type () const;"; + } + + os << "};"; + } + }; + + + // + // + struct ParserCallback: Traversal::Member, Context + { + ParserCallback (Context& c) + : Context (c) + { + } + + virtual Void + traverse (Type& m) + { + if (skip (m)) return; + + String const& arg (arg_type (m.type ())); + + os << "virtual void" << endl + << ename (m); + + if (arg == L"void") + os << " ();"; + else + os << " (" << arg << ");"; + + os << endl; + } + }; + + + // + // + struct ParserModifier: Traversal::Member, Context + { + ParserModifier (Context& c) + : Context (c) + { + } + + virtual Void + traverse (Type& m) + { + if (skip (m)) + return; + + os << "void" << endl + << eparser (m) << " (" << fq_name (m.type ()) << "&);" + << endl; + + if (polymorphic && + m.is_a<SemanticGraph::Element> () && + !anonymous (m.type ())) + { + os << "void" << endl + << eparser (m) << " (const " << parser_map << "&);" + << endl; + } + } + }; + + // + // + struct ParserMember: Traversal::Member, Context + { + ParserMember (Context& c) + : Context (c) + { + } + + virtual Void + traverse (Type& m) + { + if (skip (m)) + return; + + String type (fq_name (m.type ())); + + os << type << "* " << emember (m) << ";"; + + if (polymorphic && + m.is_a<SemanticGraph::Element> () && + !anonymous (m.type ())) + { + os << type << "* " << emember_cache (m) << ";" + << "const " << parser_map << "* " << emember_map (m) << ";" + << endl; + } + } + }; + + // + // + struct Particle: Traversal::All, + Traversal::Choice, + Traversal::Sequence, + Context + { + Particle (Context& c) + : Context (c) + { + *this >> contains_particle_ >> *this; + } + + + virtual Void + traverse (SemanticGraph::All& a) + { + if (!a.context().count ("comp-number")) + return; + + UnsignedLong state_count ( + a.context().get<UnsignedLong> ("state-count")); + + os << "void" << endl + << "all_0 (unsigned long& state," << endl + << "unsigned char* count," << endl + << "const " << string_type << "& ns," << endl + << "const " << string_type << "& n," << endl + << "const " << string_type << "* t," << endl + << "bool start);" + << endl + << "unsigned char v_all_first_[" << state_count << "UL];" + << "::xsd::cxx::parser::validating::all_stack v_all_count_;" + << endl; + } + + virtual Void + traverse (SemanticGraph::Choice& c) + { + if (!c.context().count ("comp-number")) + return; + + UnsignedLong n (c.context ().get<UnsignedLong> ("comp-number")); + + os << "void" << endl + << "choice_" << n << " (unsigned long& state," << endl + << "unsigned long& count," << endl + << "const " << string_type << "& ns," << endl + << "const " << string_type << "& n," << endl + << "const " << string_type << "* t," << endl + << "bool start);" + << endl; + + Traversal::Choice::traverse (c); + } + + virtual Void + traverse (SemanticGraph::Sequence& s) + { + if (!s.context().count ("comp-number")) + return; + + UnsignedLong n (s.context ().get<UnsignedLong> ("comp-number")); + + os << "void" << endl + << "sequence_" << n << " (unsigned long& state," << endl + << "unsigned long& count," << endl + << "const " << string_type << "& ns," << endl + << "const " << string_type << "& n," << endl + << "const " << string_type << "* t," << endl + << "bool start);" + << endl; + + Traversal::Sequence::traverse (s); + } + + private: + Traversal::ContainsParticle contains_particle_; + }; + + + // + // + struct AttributeValidationState: Traversal::Attribute, Context + { + AttributeValidationState (Context& c) + : Context (c) + { + } + + virtual Void + traverse (Type& a) + { + if (!a.optional_p ()) + { + os << "bool " << ename (a) << ";"; + } + } + }; + + // + // + struct Complex: Traversal::Complex, Context + { + Complex (Context& c) + : Context (c), + parser_callback_ (c), + parser_member_ (c), + parser_modifier_ (c), + attribute_validation_state_ (c) + { + names_parser_callback_ >> parser_callback_; + names_parser_member_ >> parser_member_; + names_parser_modifier_ >> parser_modifier_; + names_attribute_validation_state_ >> attribute_validation_state_; + } + + virtual Void + traverse (Type& c) + { + String const& name (ename (c)); + + // In case of an inheritance-by-restriction, we don't need to + // generate parser callbacks, etc. since they are the same as in + // the base. We only need the parsing/validation code. + // + Boolean restriction (restriction_p (c)); + + Boolean he (has<Traversal::Element> (c)); + Boolean ha (has<Traversal::Attribute> (c)); + + Boolean hae (has_particle<Traversal::Any> (c)); + Boolean haa (has<Traversal::AnyAttribute> (c)); + + Boolean hra (false); // Has required attribute. + if (ha) + { + RequiredAttributeTest test (hra); + Traversal::Names names_test (test); + names (c, names_test); + } + + + // + // + os << "class " << type_exp << name << ": public "; + + if (c.inherits_p ()) + os << "virtual " << fq_name (c.inherits ().base ()); + else + os << complex_base; + + os << "{" + << "public:" << endl + << "// Parser callbacks. Override them in your " << + "implementation." << endl + << "//" << endl; + + os << "// virtual void" << endl + << "// pre ();" << endl + << endl; + + + if (!restriction && (ha || he)) + { + names (c, names_parser_callback_); + } + + String const& ret (ret_type (c)); + + Boolean same (c.inherits_p () && + ret == ret_type (c.inherits ().base ())); + + os << "virtual " << ret << endl + << post_name (c) << " ()" << + (same || ret == L"void" ? ";" : " = 0;") + << endl; + + // + // + if (!restriction && (he || ha)) + { + os << "// Parser construction API." << endl + << "//" << endl; + + names (c, names_parser_modifier_); + + os << "void" << endl + << "parsers ("; + + { + ParserParamDecl decl (*this, false); + decl.traverse (c); + } + + os << ");" + << endl; + } + + // Default c-tor. + // + if ((!restriction && (he || ha)) || + (validation && (he || hae || hra))) + { + os << "// Constructor." << endl + << "//" << endl + << name << " ();" + << endl; + } + + if (polymorphic) + { + os << "public:" << endl + << "static const " << char_type << "*" << endl + << "_static_type ();" + << endl + << "virtual const " << char_type << "*" << endl + << "_dynamic_type () const;" + << endl; + } + + // Implementation. + // + if (he || ha || (validation && (hae || haa))) + { + os << "// Implementation." << endl + << "//" << endl + << "protected:" << endl; + } + + // element + // + if (he || (validation && hae)) + { + // _start_element_impl + // + os << "virtual bool" << endl + << "_start_element_impl (const " << string_type << "&," << endl + << "const " << string_type << "&," << endl + << "const " << string_type << "*);" + << endl; + + // end_element + // + os << "virtual bool" << endl + << "_end_element_impl (const " << string_type << "&," << endl + << "const " << string_type << "&);" + << endl; + } + + // attribute + // + if (validation) + { + if (ha) + { + os << "virtual bool" << endl + << "_attribute_impl_phase_one (const " << string_type << + "&," << endl + << "const " << string_type << "&," << endl + << "const " << string_type << "&);" << endl + << endl; + } + + if (haa) + { + os << "virtual bool" << endl + << "_attribute_impl_phase_two (const " << string_type << + "&," << endl + << "const " << string_type << "&," << endl + << "const " << string_type << "&);" + << endl; + } + } + else + { + if (ha) + { + os << "virtual bool" << endl + << "_attribute_impl (const " << string_type << "&," << endl + << "const " << string_type << "&," << endl + << "const " << string_type << "&);" + << endl; + } + } + + // characters + // + if (validation && c.mixed_p ()) + { + os << "virtual bool" << endl + << "_characters_impl (const " << string_type << "&);" + << endl; + } + + if (!restriction && (he || ha)) + { + os << "protected:" << endl; + names (c, names_parser_member_); + os << endl; + } + + if (validation && (he || hae)) + { + UnsignedLong depth (c.context ().get<UnsignedLong> ("depth")); + + os << "protected:" << endl; + + os << "struct v_state_descr_" + << "{" + << "void (" << fq_name (c) << "::*func) (" << endl + << "unsigned long&," << endl + << "unsigned long&," << endl + << "const " << string_type << "&," << endl + << "const " << string_type << "&," << endl + << "const " << string_type << "*," << endl + << "bool);" + << "unsigned long state;" + << "unsigned long count;" + << "};"; + + // Allocate one extra slot for the special state. + // + os << "struct v_state_" + << "{" + << "v_state_descr_ data[" << depth + 1 << "UL];" + << "unsigned long size;" + << "};"; + + os << "v_state_ v_state_first_;" + << "::xsd::cxx::parser::pod_stack v_state_stack_;" + << endl; + + os << "virtual void" << endl + << "_pre_e_validate ();" + << endl; + + os << "virtual void" << endl + << "_post_e_validate ();" + << endl; + + Particle t (*this); + t.dispatch (c.contains_compositor ().compositor ()); + } + + if (validation && hra) + { + os << "protected:" << endl; + + os << "struct v_state_attr_" + << "{"; + + names (c, names_attribute_validation_state_); + + os << "};"; + + os << "v_state_attr_ v_state_attr_first_;" + << "::xsd::cxx::parser::pod_stack v_state_attr_stack_;" + << endl; + + os << "virtual void" << endl + << "_pre_a_validate ();" + << endl; + + os << "virtual void" << endl + << "_post_a_validate ();" + << endl; + } + + os << "};"; + } + + private: + // + // + ParserCallback parser_callback_; + Traversal::Names names_parser_callback_; + + // + // + ParserMember parser_member_; + Traversal::Names names_parser_member_; + + // + // + ParserModifier parser_modifier_; + Traversal::Names names_parser_modifier_; + + // + // + AttributeValidationState attribute_validation_state_; + Traversal::Names names_attribute_validation_state_; + }; + + struct FundType : Context, + + Traversal::AnyType, + Traversal::AnySimpleType, + + Traversal::Fundamental::Byte, + Traversal::Fundamental::UnsignedByte, + Traversal::Fundamental::Short, + Traversal::Fundamental::UnsignedShort, + Traversal::Fundamental::Int, + Traversal::Fundamental::UnsignedInt, + Traversal::Fundamental::Long, + Traversal::Fundamental::UnsignedLong, + Traversal::Fundamental::Integer, + Traversal::Fundamental::NonPositiveInteger, + Traversal::Fundamental::NonNegativeInteger, + Traversal::Fundamental::PositiveInteger, + Traversal::Fundamental::NegativeInteger, + + Traversal::Fundamental::Boolean, + + Traversal::Fundamental::Float, + Traversal::Fundamental::Double, + Traversal::Fundamental::Decimal, + + Traversal::Fundamental::String, + Traversal::Fundamental::NormalizedString, + Traversal::Fundamental::Token, + Traversal::Fundamental::Name, + Traversal::Fundamental::NameToken, + Traversal::Fundamental::NameTokens, + Traversal::Fundamental::NCName, + Traversal::Fundamental::Language, + + Traversal::Fundamental::QName, + + Traversal::Fundamental::Id, + Traversal::Fundamental::IdRef, + Traversal::Fundamental::IdRefs, + + Traversal::Fundamental::AnyURI, + + Traversal::Fundamental::Base64Binary, + Traversal::Fundamental::HexBinary, + + Traversal::Fundamental::Date, + Traversal::Fundamental::DateTime, + Traversal::Fundamental::Duration, + Traversal::Fundamental::Day, + Traversal::Fundamental::Month, + Traversal::Fundamental::MonthDay, + Traversal::Fundamental::Year, + Traversal::Fundamental::YearMonth, + Traversal::Fundamental::Time, + + Traversal::Fundamental::Entity, + Traversal::Fundamental::Entities + { + FundType (Context& c) + : Context (c), xs_ns_ (xs_ns_name ()) + { + impl_ns_ = "::xsd::cxx::parser::"; + impl_ns_ += (validation ? L"validating" : L"non_validating"); + + if (char_type == L"char") + string_type_ = L"::std::string"; + else if (char_type == L"wchar_t") + string_type_ = L"::std::wstring"; + else + string_type_ = L"::std::basic_string< " + char_type + L" >"; + } + + // anyType & anySimpleType. + // + virtual Void + traverse (SemanticGraph::AnyType& t) + { + gen_typedef (t, "void", "any_type_pskel", "any_type_pimpl"); + } + + virtual Void + traverse (SemanticGraph::AnySimpleType& t) + { + gen_typedef (t, "void", + "any_simple_type_pskel", "any_simple_type_pimpl"); + } + + // Boolean. + // + virtual Void + traverse (SemanticGraph::Fundamental::Boolean& t) + { + gen_typedef (t, "bool", "boolean_pskel", "boolean_pimpl"); + } + + // Integral types. + // + virtual Void + traverse (SemanticGraph::Fundamental::Byte& t) + { + gen_typedef (t, "signed char", "byte_pskel", "byte_pimpl"); + } + + virtual Void + traverse (SemanticGraph::Fundamental::UnsignedByte& t) + { + gen_typedef (t, "unsigned char", + "unsigned_byte_pskel", "unsigned_byte_pimpl"); + } + + virtual Void + traverse (SemanticGraph::Fundamental::Short& t) + { + gen_typedef (t, "short", "short_pskel", "short_pimpl"); + } + + virtual Void + traverse (SemanticGraph::Fundamental::UnsignedShort& t) + { + gen_typedef (t, "unsigned short", + "unsigned_short_pskel", "unsigned_short_pimpl"); + } + + virtual Void + traverse (SemanticGraph::Fundamental::Int& t) + { + gen_typedef (t, "int", "int_pskel", "int_pimpl"); + } + + virtual Void + traverse (SemanticGraph::Fundamental::UnsignedInt& t) + { + gen_typedef (t, "unsigned int", + "unsigned_int_pskel", "unsigned_int_pimpl"); + } + + virtual Void + traverse (SemanticGraph::Fundamental::Long& t) + { + gen_typedef (t, "long long", "long_pskel", "long_pimpl"); + } + + virtual Void + traverse (SemanticGraph::Fundamental::UnsignedLong& t) + { + gen_typedef (t, "unsigned long long", + "unsigned_long_pskel", "unsigned_long_pimpl"); + } + + virtual Void + traverse (SemanticGraph::Fundamental::Integer& t) + { + gen_typedef (t, "long long", "integer_pskel", "integer_pimpl"); + } + + virtual Void + traverse (SemanticGraph::Fundamental::NegativeInteger& t) + { + gen_typedef (t, "long long", + "negative_integer_pskel", "negative_integer_pimpl"); + } + + virtual Void + traverse (SemanticGraph::Fundamental::NonPositiveInteger& t) + { + gen_typedef (t, "long long", + "non_positive_integer_pskel", + "non_positive_integer_pimpl"); + } + + virtual Void + traverse (SemanticGraph::Fundamental::PositiveInteger& t) + { + gen_typedef (t, "unsigned long long", + "positive_integer_pskel", "positive_integer_pimpl"); + } + + virtual Void + traverse (SemanticGraph::Fundamental::NonNegativeInteger& t) + { + gen_typedef (t, "unsigned long long", + "non_negative_integer_pskel", + "non_negative_integer_pimpl"); + } + + // Floats. + // + virtual Void + traverse (SemanticGraph::Fundamental::Float& t) + { + gen_typedef (t, "float", "float_pskel", "float_pimpl"); + } + + virtual Void + traverse (SemanticGraph::Fundamental::Double& t) + { + gen_typedef (t, "double", "double_pskel", "double_pimpl"); + } + + virtual Void + traverse (SemanticGraph::Fundamental::Decimal& t) + { + gen_typedef (t, "double", "decimal_pskel", "decimal_pimpl"); + } + + // Strings. + // + virtual Void + traverse (SemanticGraph::Fundamental::String& t) + { + gen_typedef (t, string_type_, "string_pskel", "string_pimpl"); + } + + virtual Void + traverse (SemanticGraph::Fundamental::NormalizedString& t) + { + gen_typedef (t, string_type_, + "normalized_string_pskel", "normalized_string_pimpl"); + } + + virtual Void + traverse (SemanticGraph::Fundamental::Token& t) + { + gen_typedef (t, string_type_, "token_pskel", "token_pimpl"); + } + + virtual Void + traverse (SemanticGraph::Fundamental::NameToken& t) + { + nmtoken_ = gen_typedef (t, string_type_, + "nmtoken_pskel", "nmtoken_pimpl"); + } + + virtual Void + traverse (SemanticGraph::Fundamental::NameTokens& t) + { + // NMTOKENS uses NMTOKEN implementation to parse individual items. + // As a result, we don't generate NMTOKENS if we didn't generate + // NMTOKEN. Here we assume NMTOKEN is handled before NMTOKENS. + // + if(nmtoken_) + gen_typedef (t, xs_ns_ + L"::string_sequence", + "nmtokens_pskel", "nmtokens_pimpl"); + } + + virtual Void + traverse (SemanticGraph::Fundamental::Name& t) + { + gen_typedef (t, string_type_, "name_pskel", "name_pimpl"); + } + + virtual Void + traverse (SemanticGraph::Fundamental::NCName& t) + { + gen_typedef (t, string_type_, "ncname_pskel", "ncname_pimpl"); + } + + virtual Void + traverse (SemanticGraph::Fundamental::Language& t) + { + gen_typedef (t, string_type_, "language_pskel", "language_pimpl"); + } + + // Qualified name. + // + virtual Void + traverse (SemanticGraph::Fundamental::QName& t) + { + gen_typedef (t, xs_ns_ + L"::qname", "qname_pskel", "qname_pimpl"); + } + + // ID/IDREF. + // + virtual Void + traverse (SemanticGraph::Fundamental::Id& t) + { + gen_typedef (t, string_type_, "id_pskel", "id_pimpl"); + } + + virtual Void + traverse (SemanticGraph::Fundamental::IdRef& t) + { + idref_ = gen_typedef (t, string_type_, "idref_pskel", "idref_pimpl"); + } + + virtual Void + traverse (SemanticGraph::Fundamental::IdRefs& t) + { + // IDREFS uses IDREF implementation to parse individual items. + // As a result, we don't generate IDREFS if we didn't generate + // IDREF. Here we assume IDREF is handled before IDREFS. + // + if (idref_) + gen_typedef (t, xs_ns_ + L"::string_sequence", + "idrefs_pskel", "idrefs_pimpl"); + } + + // URI. + // + virtual Void + traverse (SemanticGraph::Fundamental::AnyURI& t) + { + gen_typedef (t, string_type_, "uri_pskel", "uri_pimpl"); + } + + // Binary. + // + virtual Void + traverse (SemanticGraph::Fundamental::Base64Binary& t) + { + String buffer (L"::std::auto_ptr< " + xs_ns_ + L"::buffer >"); + gen_typedef (t, buffer, + "base64_binary_pskel", "base64_binary_pimpl"); + } + + virtual Void + traverse (SemanticGraph::Fundamental::HexBinary& t) + { + String buffer (L"::std::auto_ptr< " + xs_ns_ + L"::buffer >"); + gen_typedef (t, buffer, "hex_binary_pskel", "hex_binary_pimpl"); + } + + + // Date/time. + // + virtual Void + traverse (SemanticGraph::Fundamental::Date& t) + { + gen_typedef (t, xs_ns_ + L"::date", "date_pskel", "date_pimpl"); + } + + virtual Void + traverse (SemanticGraph::Fundamental::DateTime& t) + { + gen_typedef (t, xs_ns_ + L"::date_time", + "date_time_pskel", "date_time_pimpl"); + } + + virtual Void + traverse (SemanticGraph::Fundamental::Duration& t) + { + gen_typedef (t, xs_ns_ + L"::duration", + "duration_pskel", "duration_pimpl"); + } + + virtual Void + traverse (SemanticGraph::Fundamental::Day& t) + { + gen_typedef (t, xs_ns_ + L"::gday", "gday_pskel", "gday_pimpl"); + } + + virtual Void + traverse (SemanticGraph::Fundamental::Month& t) + { + gen_typedef (t, xs_ns_ + L"::gmonth", + "gmonth_pskel", "gmonth_pimpl"); + } + + virtual Void + traverse (SemanticGraph::Fundamental::MonthDay& t) + { + gen_typedef (t, xs_ns_ + L"::gmonth_day", + "gmonth_day_pskel", "gmonth_day_pimpl"); + } + + virtual Void + traverse (SemanticGraph::Fundamental::Year& t) + { + gen_typedef (t, xs_ns_ + L"::gyear", "gyear_pskel", "gyear_pimpl"); + } + + virtual Void + traverse (SemanticGraph::Fundamental::YearMonth& t) + { + gen_typedef (t, xs_ns_ + L"::gyear_month", + "gyear_month_pskel", "gyear_month_pimpl"); + } + + virtual Void + traverse (SemanticGraph::Fundamental::Time& t) + { + gen_typedef (t, xs_ns_ + L"::time", "time_pskel", "time_pimpl"); + } + + // Entity. + // + virtual Void + traverse (SemanticGraph::Fundamental::Entity&) + { + } + + virtual Void + traverse (SemanticGraph::Fundamental::Entities&) + { + } + + private: + Boolean + gen_typedef (SemanticGraph::Type& t, + String const& type, + String const& pskel, + String const& pimpl) + { + if (ret_type (t) == type) + { + os << "typedef " << impl_ns_ << "::" << pskel << "< " << + char_type << " > " << ename (t) << ";"; + + String const& pimpl_name (t.context ().get<String> ("impl")); + + os << "typedef " << impl_ns_ << "::" << pimpl << "< " << + char_type << " > " << pimpl_name << ";" + << endl; + + return true; + } + + return false; + } + + String xs_ns_; + String impl_ns_; + String string_type_; + + Boolean idref_; + Boolean nmtoken_; + }; + + struct FundNamespace: Namespace, Context + { + FundNamespace (Context& c) + : Namespace (c), Context (c) + { + } + + void + traverse (Type& ns) + { + pre (ns); + + String impl ("::xsd::cxx::parser::"); + impl += (validation ? L"validating" : L"non_validating"); + + String const c (char_type); + + os << "// Built-in XML Schema types mapping." << endl + << "//" << endl + << "typedef ::xsd::cxx::parser::string_sequence< " << c << + " > string_sequence;" + << "typedef ::xsd::cxx::parser::qname< " << c << " > qname;" + << "typedef ::xsd::cxx::parser::buffer buffer;" + << "typedef ::xsd::cxx::parser::time_zone time_zone;" + << "typedef ::xsd::cxx::parser::gday gday;" + << "typedef ::xsd::cxx::parser::gmonth gmonth;" + << "typedef ::xsd::cxx::parser::gyear gyear;" + << "typedef ::xsd::cxx::parser::gmonth_day gmonth_day;" + << "typedef ::xsd::cxx::parser::gyear_month gyear_month;" + << "typedef ::xsd::cxx::parser::date date;" + << "typedef ::xsd::cxx::parser::time time;" + << "typedef ::xsd::cxx::parser::date_time date_time;" + << "typedef ::xsd::cxx::parser::duration duration;" + << endl; + + os << "// Base parser skeletons." << endl + << "//" << endl + << "typedef ::xsd::cxx::parser::parser_base< " << c << + " > parser_base;" + << "typedef " << impl << "::empty_content< " << c << + " > empty_content;" + << "typedef " << impl << "::simple_content< " << c << + " > simple_content;" + << "typedef " << impl << "::complex_content< " << c << + " > complex_content;" + << "typedef " << impl << "::list_base< " << c << " > list_base;" + << endl; + + if (polymorphic) + { + os << "// Parser map interface and default implementation." << endl + << "//" << endl + << "typedef ::xsd::cxx::parser::parser_map< " << c << + " > parser_map;" + << "typedef ::xsd::cxx::parser::parser_map_impl< " << c << + " > parser_map_impl;" + << endl; + } + + os << "// Parser skeletons and implementations for the XML Schema" << endl + << "// built-in types." << endl + << "//" << endl; + + names (ns); + + os << "// Exceptions. See libxsd/xsd/cxx/parser/exceptions.hxx " << + "for details." << endl + << "//" << endl + << "typedef ::xsd::cxx::parser::exception< " << + char_type << " > exception;" + << endl + << "// Parsing diagnostics." << endl + << "//" << endl + << "typedef ::xsd::cxx::parser::severity severity;" + << "typedef ::xsd::cxx::parser::error< " << c << " > error;" + << "typedef ::xsd::cxx::parser::diagnostics< " << c << + " > diagnostics;" + << "typedef ::xsd::cxx::parser::parsing< " << c << " > parsing;" + << endl; + + os << "// Error handler. See " << + "libxsd/xsd/cxx/xml/error-handler.hxx for details." << endl + << "//" << endl + << "typedef ::xsd::cxx::xml::error_handler< " << c << + " > error_handler;" + << endl; + + os << "// Read-only string." << endl + << "//" << endl + << "typedef ::xsd::cxx::ro_string< " << c << " > ro_string;" + << endl; + + if (xml_parser == L"xerces") + { + os << "// Parsing flags. See " << + "libxsd/xsd/cxx/parser/xerces/elements.hxx" << endl + << "// for details." << endl + << "//" << endl + << "typedef ::xsd::cxx::parser::xerces::flags flags;" + << endl; + + os << "// Parsing properties. See " << + "libxsd/xsd/cxx/parser/xerces/elements.hxx" << endl + << "// for details." << endl + << "//" << endl + << "typedef ::xsd::cxx::parser::xerces::properties< " << c << + " > properties;" + << endl; + + os << "// Document type. See " << + "libxsd/xsd/cxx/parser/xerces/elements.hxx" << endl + << "// for details." << endl + << "//" << endl + << "typedef ::xsd::cxx::parser::xerces::document< " << c << + " > document;" + << endl; + + } + else if (xml_parser == L"expat") + { + os << "// Document type. See " << + "libxsd/xsd/cxx/parser/expat/elements.hxx" << endl + << "// for details." << endl + << "//" << endl + << "typedef ::xsd::cxx::parser::expat::document< " << c << + " > document;" + << endl; + } + + post (ns); + } + }; + } + + Void + generate_parser_header (Context& ctx, Boolean generate_xml_schema) + { + String c (ctx.char_type); + + // + // + if (c == L"char") + { + ctx.os << "#ifndef XSD_USE_CHAR" << endl + << "#define XSD_USE_CHAR" << endl + << "#endif" << endl + << endl; + + ctx.os << "#ifndef XSD_CXX_PARSER_USE_CHAR" << endl + << "#define XSD_CXX_PARSER_USE_CHAR" << endl + << "#endif" << endl + << endl; + } + else if (c == L"wchar_t") + { + ctx.os << "#ifndef XSD_USE_WCHAR" << endl + << "#define XSD_USE_WCHAR" << endl + << "#endif" << endl + << endl; + + ctx.os << "#ifndef XSD_CXX_PARSER_USE_WCHAR" << endl + << "#define XSD_CXX_PARSER_USE_WCHAR" << endl + << "#endif" << endl + << endl; + } + + // + // + NarrowString extern_xml_schema; + + if (!generate_xml_schema) + extern_xml_schema = ctx.options.value<CLI::extern_xml_schema> (); + + if (extern_xml_schema) + { + String name (ctx.hxx_expr->merge (extern_xml_schema)); + + ctx.os << "#include " << ctx.process_include_path (name) << endl + << endl; + + // Generate includes that came from the type map. + // + if (ctx.schema_root.context ().count ("includes")) + { + typedef Cult::Containers::Set<String> Includes; + + Includes const& is ( + ctx.schema_root.context ().get<Includes> ("includes")); + + for (Includes::ConstReverseIterator i (is.rbegin ()); + i != is.rend (); ++i) + { + ctx.os << "#include " << *i << endl; + } + + ctx.os << endl; + } + } + else + { + if (ctx.char_type == L"char" && + ctx.xml_parser == L"xerces" && + ctx.char_encoding != L"custom") + { + ctx.os << "#include <xsd/cxx/xml/char-" << ctx.char_encoding << ".hxx>" << endl; + } + + ctx.os << "#include <xsd/cxx/xml/error-handler.hxx>" << endl + << "#include <xsd/cxx/parser/exceptions.hxx>" << endl + << "#include <xsd/cxx/parser/elements.hxx>" << endl + << "#include <xsd/cxx/parser/xml-schema.hxx>" << endl; + + if (ctx.polymorphic) + ctx.os << "#include <xsd/cxx/parser/map.hxx>" << endl; + + if (ctx.validation) + ctx.os << "#include <xsd/cxx/parser/validating/parser.hxx>" << endl + << "#include <xsd/cxx/parser/validating/exceptions.hxx>" << endl + << "#include <xsd/cxx/parser/validating/xml-schema-pskel.hxx>" << endl + << "#include <xsd/cxx/parser/validating/xml-schema-pimpl.hxx>" << endl; + else + ctx.os << "#include <xsd/cxx/parser/non-validating/parser.hxx>" << endl + << "#include <xsd/cxx/parser/non-validating/xml-schema-pskel.hxx>" << endl + << "#include <xsd/cxx/parser/non-validating/xml-schema-pimpl.hxx>" << endl; + + ctx.os << "#include <xsd/cxx/parser/" << ctx.xml_parser << + "/elements.hxx>" << endl + << endl; + + // Generate includes that came from the type map. + // + if (ctx.schema_root.context ().count ("includes")) + { + typedef Cult::Containers::Set<String> Includes; + + Includes const& is ( + ctx.schema_root.context ().get<Includes> ("includes")); + + for (Includes::ConstReverseIterator i (is.rbegin ()); + i != is.rend (); ++i) + { + ctx.os << "#include " << *i << endl; + } + + ctx.os << endl; + } + + // Generate fundamental types. + // + if (generate_xml_schema) + { + Traversal::Schema schema; + Traversal::Names names; + FundNamespace ns (ctx); + + schema >> names >> ns; + + Traversal::Names ns_names; + FundType type (ctx); + + ns >> ns_names >> type; + + schema.dispatch (ctx.schema_root); + } + else + { + Traversal::Schema schema, xsd; + Traversal::Implies implies; + Traversal::Names names; + FundNamespace ns (ctx); + + schema >> implies >> xsd >> names >> ns; + + Traversal::Names ns_names; + FundType type (ctx); + + ns >> ns_names >> type; + + schema.dispatch (ctx.schema_root); + } + } + + // Generate user type mapping. + // + if (!generate_xml_schema) + { + Traversal::Schema schema; + + Traversal::Sources sources; + Includes includes (ctx, Includes::header); + Traversal::Names schema_names; + + Namespace ns (ctx); + Traversal::Names names; + + schema >> includes; + schema >> sources >> schema; + schema >> schema_names >> ns >> names; + + List list (ctx); + Union union_ (ctx); + Complex complex (ctx); + Enumeration enumeration (ctx); + + names >> list; + names >> union_; + names >> complex; + names >> enumeration; + + schema.dispatch (ctx.schema_root); + } + } + } +} diff --git a/xsd/xsd/cxx/parser/parser-header.hxx b/xsd/xsd/cxx/parser/parser-header.hxx new file mode 100644 index 0000000..c4e114d --- /dev/null +++ b/xsd/xsd/cxx/parser/parser-header.hxx @@ -0,0 +1,20 @@ +// file : xsd/cxx/parser/parser-header.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef CXX_PARSER_PARSER_HEADER_HXX +#define CXX_PARSER_PARSER_HEADER_HXX + +#include <cxx/parser/elements.hxx> + +namespace CXX +{ + namespace Parser + { + Void + generate_parser_header (Context&, Boolean generate_xml_schema); + } +} + +#endif // CXX_PARSER_PARSER_HEADER_HXX diff --git a/xsd/xsd/cxx/parser/parser-inline.cxx b/xsd/xsd/cxx/parser/parser-inline.cxx new file mode 100644 index 0000000..b491b72 --- /dev/null +++ b/xsd/xsd/cxx/parser/parser-inline.cxx @@ -0,0 +1,402 @@ +// file : xsd/cxx/parser/parser-inline.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <cxx/parser/parser-inline.hxx> + +#include <xsd-frontend/semantic-graph.hxx> +#include <xsd-frontend/traversal.hxx> + +namespace CXX +{ + namespace Parser + { + namespace + { + // + // + struct List: Traversal::List, Context + { + List (Context& c) + : Context (c) + { + } + + virtual Void + traverse (Type& l) + { + String const& name (ename (l)); + SemanticGraph::Type& t (l.argumented ().type ()); + + String item (unclash (name, "item")); + + os << "// " << name << endl + << "//" << endl + << endl; + + // item_parser + // + os << inl + << "void " << name << "::" << endl + << unclash (name, "item_parser") << " (" << + fq_name (t) << "& " << item << ")" + << "{" + << "this->_xsd_" << item << "_ = &" << item << ";" + << "}"; + + // parsers + // + os << inl + << "void " << name << "::" << endl + << "parsers (" << fq_name (t) << "& " << item << ")" + << "{" + << "this->_xsd_" << item << "_ = &" << item << ";" + << "}"; + + // c-tor + // + os << inl + << name << "::" << endl + << name << " ()" << endl + << ": _xsd_" << item << "_ (0)" + << "{" + << "}"; + } + }; + + + // + // + struct ParserModifier: Traversal::Member, Context + { + ParserModifier (Context& c) + : Context (c) + { + } + + virtual Void + traverse (Type& m) + { + if (skip (m)) + return; + + String const& scope (ename (m.scope ())); + String const& parser (eparser (m)); + + Boolean poly (polymorphic && + m.is_a<SemanticGraph::Element> () && + !anonymous (m.type ())); + + os << inl + << "void " << scope << "::" << endl + << parser << " (" << fq_name (m.type ()) << "& p)" + << "{" + << "this->" << emember (m) << " = &p;" + << "}"; + + if (poly) + { + os << inl + << "void " << scope << "::" << endl + << parser << " (const " << parser_map << "& m)" + << "{" + << "this->" << emember_map (m) << " = &m;" + << "}"; + } + } + }; + + + // + // + struct ParserMemberSet: Traversal::Member, Context + { + ParserMemberSet (Context& c) + : Context (c) + { + } + + virtual Void + traverse (Type& m) + { + if (skip (m)) return; + + String const& name (ename (m)); + + os << "this->" << emember (m) << " = &" << name << ";"; + } + }; + + + // + // + struct ParserMemberInit: Traversal::Member, Context + { + ParserMemberInit (Context& c) + : Context (c), first_ (true) + { + } + + virtual Void + traverse (Type& m) + { + if (skip (m)) return; + + if (first_) + first_ = false; + else + os << "," << endl << " "; + + os << emember (m) << " (0)"; + + if (polymorphic && + m.is_a<SemanticGraph::Element> () && + !anonymous (m.type ())) + { + os << "," << endl + << " " << emember_map (m) << " (0)"; + } + } + + Boolean + comma () const + { + return !first_; + } + + private: + Boolean first_; + }; + + struct ParserBaseSet: Traversal::Complex, + Traversal::List, + Context + { + ParserBaseSet (Context& c) + : Context (c), member_ (c) + { + inherits_ >> *this; + names_ >> member_; + } + + virtual Void + traverse (SemanticGraph::Complex& c) + { + inherits (c, inherits_); + + if (!restriction_p (c)) + names (c, names_); + } + + virtual Void + traverse (SemanticGraph::List& l) + { + String const& name (ename (l)); + String item (unclash (name, "item")); + + os << "this->_xsd_" << item << "_ = &" << name << "_item;"; + } + + private: + Traversal::Inherits inherits_; + + ParserMemberSet member_; + Traversal::Names names_; + }; + + struct Particle: Traversal::All, Context + { + Particle (Context& c) + : Context (c) + { + } + + virtual Void + traverse (SemanticGraph::All& a) + { + if (!a.context().count ("comp-number")) + return; + + UnsignedLong state_count ( + a.context().get<UnsignedLong> ("state-count")); + + os << "," << endl + << " v_all_count_ (" << state_count << "UL, v_all_first_)"; + } + }; + + // + // + struct Complex: Traversal::Complex, Context + { + Complex (Context& c) + : Context (c), + parser_modifier_ (c), + parser_base_set_ (c), + parser_member_set_ (c), + particle_ (c) + { + names_parser_modifier_ >> parser_modifier_; + inherits_parser_base_set_ >> parser_base_set_; + names_parser_member_set_ >> parser_member_set_; + } + + virtual Void + traverse (Type& c) + { + Boolean he (has<Traversal::Element> (c)); + Boolean ha (has<Traversal::Attribute> (c)); + + Boolean hae (has_particle<Traversal::Any> (c)); + + Boolean hra (false); // Has required attribute. + if (ha) + { + RequiredAttributeTest test (hra); + Traversal::Names names_test (test); + names (c, names_test); + } + + Boolean restriction (restriction_p (c)); + + if (!((!restriction && (he || ha)) || + (validation && (he || hae || hra)))) + return; + + String const& name (ename (c)); + + os << "// " << name << endl + << "//" << endl + << endl; + + if (!restriction && (he || ha)) + { + // <name>_parser () + // + names (c, names_parser_modifier_); + + + // parsers () + // + + os << inl + << "void " << name << "::" << endl + << "parsers ("; + + { + ParserParamDecl decl (*this, true); + decl.traverse (c); + } + + os << ")" + << "{"; + + inherits (c, inherits_parser_base_set_); + names (c, names_parser_member_set_); + + os << "}"; + } + + // Default c-tor. + // + os << inl + << name << "::" << endl + << name << " ()" << endl + << ": "; + + Boolean comma (false); + + if (!restriction && (he || ha)) + { + ParserMemberInit member_init (*this); + Traversal::Names names_member_init (member_init); + + names (c, names_member_init); + + comma = member_init.comma (); + } + + if (validation && (he || hae)) + { + if (comma) + os << "," << endl << " "; + + os << "v_state_stack_ (sizeof (v_state_), &v_state_first_)"; + + particle_.dispatch (c.contains_compositor ().compositor ()); + + comma = true; + } + + if (validation && (hra)) + { + if (comma) + os << "," << endl << " "; + + os << "v_state_attr_stack_ (sizeof (v_state_attr_), " << + "&v_state_attr_first_)"; + } + + os << "{" + << "}"; + } + + private: + // + // + ParserModifier parser_modifier_; + Traversal::Names names_parser_modifier_; + + // + // + ParserBaseSet parser_base_set_; + Traversal::Inherits inherits_parser_base_set_; + + // + // + ParserMemberSet parser_member_set_; + Traversal::Names names_parser_member_set_; + + // + // + Particle particle_; + }; + } + + Void + generate_parser_inline (Context& ctx) + { + // Emit "weak" header includes that are used in the file-per-type + // compilation model. + // + if (!ctx.options.value<CLI::generate_inline> ()) + { + Traversal::Schema schema; + Includes includes (ctx, Includes::source); + + schema >> includes; + schema.dispatch (ctx.schema_root); + } + + Traversal::Schema schema; + + Traversal::Sources sources; + Traversal::Names schema_names; + + Namespace ns (ctx); + Traversal::Names names; + + schema >> sources >> schema; + schema >> schema_names >> ns >> names; + + List list (ctx); + Complex complex (ctx); + + names >> list; + names >> complex; + + schema.dispatch (ctx.schema_root); + } + } +} diff --git a/xsd/xsd/cxx/parser/parser-inline.hxx b/xsd/xsd/cxx/parser/parser-inline.hxx new file mode 100644 index 0000000..51f5b93 --- /dev/null +++ b/xsd/xsd/cxx/parser/parser-inline.hxx @@ -0,0 +1,20 @@ +// file : xsd/cxx/parser/parser-inline.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef CXX_PARSER_PARSER_INLINE_HXX +#define CXX_PARSER_PARSER_INLINE_HXX + +#include <cxx/parser/elements.hxx> + +namespace CXX +{ + namespace Parser + { + Void + generate_parser_inline (Context&); + } +} + +#endif // CXX_PARSER_PARSER_INLINE_HXX diff --git a/xsd/xsd/cxx/parser/parser-source.cxx b/xsd/xsd/cxx/parser/parser-source.cxx new file mode 100644 index 0000000..99bc566 --- /dev/null +++ b/xsd/xsd/cxx/parser/parser-source.cxx @@ -0,0 +1,935 @@ +// file : xsd/cxx/parser/parser-source.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <cxx/parser/parser-source.hxx> + +#include <xsd-frontend/semantic-graph.hxx> +#include <xsd-frontend/traversal.hxx> + +namespace CXX +{ + namespace Parser + { + namespace + { + struct Enumeration: Traversal::Enumeration, Context + { + Enumeration (Context& c) + : Context (c) + { + } + + virtual Void + traverse (Type& e) + { + String const& name (ename (e)); + String const& ret (ret_type (e)); + + SemanticGraph::Type& base (e.inherits ().base ()); + + Boolean same (ret == ret_type (base)); + + if (same || ret == L"void" || polymorphic) + { + os << "// " << name << endl + << "//" << endl + << endl; + } + + if (same || ret == L"void") + { + os << ret << " " << name << "::" << endl + << post_name (e) << " ()" + << "{"; + + if (same) + { + if (ret == L"void") + os << post_name (base) << " ();"; + else + os << "return " << post_name (base) << " ();"; + } + + os << "}"; + } + + if (polymorphic) + { + String id (e.name ()); + + if (String ns = xml_ns_name (e)) + { + id += L' '; + id += ns; + } + + os << "const " << char_type << "* " << name << "::" << endl + << "_static_type ()" + << "{" + << "return " << strlit (id) << ";" + << "}"; + + os << "const " << char_type << "* " << name << "::" << endl + << "_dynamic_type () const" + << "{" + << "return _static_type ();" + << "}"; + + if (validation) + { + Boolean gen (!anonymous (e)); + + // We normally don't need to enter anonymous types into + // the inheritance map. The only exception is when an + // anonymous types is defined inside an element that + // is a member of a substitution group. + // + if (!gen) + { + // The first instance that this anonymous type classifies + // is the prototype for others if any. + // + SemanticGraph::Instance& i ( + e.classifies_begin ()->instance ()); + + if (SemanticGraph::Element* e = + dynamic_cast<SemanticGraph::Element*> (&i)) + { + if (e->substitutes_p ()) + gen = true; + } + } + + if (gen) + { + os << "static" << endl + << "const ::xsd::cxx::parser::validating::inheritance_map_entry< " << + char_type << " >" << endl + << "_xsd_" << name << "_inheritance_map_entry_ (" << endl + << name << "::_static_type ()," << endl + << fq_name (base) << "::_static_type ());" + << endl; + } + } + } + } + }; + + // + // + struct List: Traversal::List, Context + { + List (Context& c) + : Context (c) + { + } + + virtual Void + traverse (Type& l) + { + String const& name (ename (l)); + SemanticGraph::Type& t (l.argumented ().type ()); + + String item (unclash (name, "item")); + + os << "// " << name << endl + << "//" << endl + << endl; + + // item + // + String const& arg (arg_type (t)); + + os << "void " << name << "::" << endl + << item; + + if (arg == L"void") + os << " ()"; + else + os << " (" << arg << ")"; + + os << "{" + << "}"; + + // post + // + if (ret_type (l) == L"void") + os << "void " << name << "::" << endl + << post_name (l) << " ()" + << "{" + << "}"; + + // parse_item + // + String inst (L"_xsd_" + item + L"_"); + String const& post (post_name (t)); + + os << "void " << name << "::" << endl + << "_xsd_parse_item (const " << string_type << "& v)" + << "{" + << "if (this->" << inst << ")" + << "{" + << "this->" << inst << "->pre ();" + << "this->" << inst << "->_pre_impl ();" + << "this->" << inst << "->_characters (v);" + << "this->" << inst << "->_post_impl ();"; + + if (ret_type (t) == L"void") + os << "this->" << inst << "->" << post << " ();" + << "this->" << item << " ();"; + else + os << "this->" << item << " (this->" << inst << "->" << + post << " ());"; + + os << "}" + << "}"; + + // + // + if (polymorphic) + { + String id (l.name ()); + + if (String ns = xml_ns_name (l)) + { + id += L' '; + id += ns; + } + + os << "const " << char_type << "* " << name << "::" << endl + << "_static_type ()" + << "{" + << "return " << strlit (id) << ";" + << "}"; + + os << "const " << char_type << "* " << name << "::" << endl + << "_dynamic_type () const" + << "{" + << "return _static_type ();" + << "}"; + } + } + }; + + // + // + struct Union: Traversal::Union, Context + { + Union (Context& c) + : Context (c) + { + } + + virtual Void + traverse (Type& u) + { + String const& name (ename (u)); + String const& ret (ret_type (u)); + + if (ret == L"void" || polymorphic) + { + os << "// " << name << endl + << "//" << endl + << endl; + } + + if (ret == L"void") + { + os << "void " << name << "::" << endl + << post_name (u) << " ()" + << "{" + << "}"; + } + + if (polymorphic) + { + String id (u.name ()); + + if (String ns = xml_ns_name (u)) + { + id += L' '; + id += ns; + } + + os << "const " << char_type << "* " << name << "::" << endl + << "_static_type ()" + << "{" + << "return " << strlit (id) << ";" + << "}"; + + os << "const " << char_type << "* " << name << "::" << endl + << "_dynamic_type () const" + << "{" + << "return _static_type ();" + << "}"; + } + } + }; + + // + // + struct StartElement: Traversal::Element, Context + { + StartElement (Context& c) + : Context (c) + { + } + + virtual Void + traverse (Type& e) + { + if (skip (e)) + return; + + Boolean poly (polymorphic && !anonymous (e.type ())); + + String const& inst (poly ? emember_cache (e) : emember (e)); + + os << "if ("; + + if (poly && e.global_p ()) + os << "("; + + if (e.qualified_p () && e.namespace_ ().name ()) + { + os << "n == " << strlit (e.name ()) << " && " << + "ns == " << strlit (e.namespace_ ().name ()); + } + else + { + os << "n == " << strlit (e.name ()) << " && ns.empty ()"; + } + + // Only a globally-defined element can be a subst-group root. + // + if (poly && e.global_p ()) + { + os << ") ||" << endl + << "::xsd::cxx::parser::substitution_map_instance< " << + char_type << " > ().check (" << endl + << "ns, n, " << strlit (e.namespace_ ().name ()) << + ", " << strlit (e.name ()) << ", t)"; + } + + os << ")" + << "{"; + + if (poly) + { + SemanticGraph::Type& t (e.type ()); + + // For pre-computing length. + // + String type_id (t.name ()); + + if (String type_ns = xml_ns_name (t)) + { + type_id += L' '; + type_id += type_ns; + } + + String fq_type (fq_name (t)); + String const& member (emember (e)); + String const& member_map (emember_map (e)); + + os << "if (t == 0 && this->" << member << " != 0)" << endl + << "this->" << inst << " = this->" << member << ";" + << "else" + << "{" + << string_type << " ts (" << fq_type << + "::_static_type (), " << type_id.size () << "UL);" + << endl + << "if (t == 0)" << endl + << "t = &ts;" + << endl + << "if (this->" << member << " != 0 && *t == ts)" << endl + << "this->" << inst << " = this->" << member << ";" + << "else if (this->" << member_map << " != 0)" << endl + << "this->" << inst << " = dynamic_cast< " << fq_type << + "* > (" << endl + << "this->" << member_map << "->find (*t));" + << "else" << endl + << "this->" << inst << " = 0;" + << "}"; + } + + os << "this->" << complex_base << "::context_.top ().parser_ = " << + "this->" << inst << ";" + << endl + << "if (this->" << inst << ")" << endl + << "this->" << inst << "->pre ();" // _start_element calls _pre + << endl + << "return true;" + << "}"; + } + }; + + + // + // + struct EndElement: Traversal::Element, Context + { + EndElement (Context& c) + : Context (c) + { + } + + virtual Void + traverse (Type& e) + { + if (skip (e)) + return; + + Boolean poly (polymorphic && !anonymous (e.type ())); + + String const& name (ename (e)); + String const& inst (poly ? emember_cache (e) : emember (e)); + + os << "if ("; + + if (poly && e.global_p ()) + os << "("; + + if (e.qualified_p () && e.namespace_ ().name ()) + { + os << "n == " << strlit (e.name ()) << " && " << + "ns == " << strlit (e.namespace_ ().name ()); + } + else + { + os << "n == " << strlit (e.name ()) << " && ns.empty ()"; + } + + // Only a globally-defined element can be a subst-group root. + // + if (poly && e.global_p ()) + { + os << ") ||" << endl + << "::xsd::cxx::parser::substitution_map_instance< " << + char_type << " > ().check (" << endl + << "ns, n, " << strlit (e.namespace_ ().name ()) << + ", " << strlit (e.name ()) << ")"; + } + + os << ")" + << "{"; + + // _end_element calls post + // + + SemanticGraph::Type& type (e.type ()); + String const& post (post_name (type)); + + os << "if (this->" << inst << ")"; + + if (ret_type (type) == L"void") + os << "{" + << "this->" << inst << "->" << post << " ();" + << "this->" << name << " ();" + << "}"; + else + os << endl + << "this->" << name << " (this->" << inst << "->" << + post << " ());" + << endl; + + os << "return true;" + << "}"; + } + }; + + // + // + struct Attribute: Traversal::Attribute, Context + { + Attribute (Context& c) + : Context (c) + { + } + + virtual Void + traverse (Type& a) + { + String const& name (ename (a)); + String const& inst (emember (a)); + + if (a.qualified_p () && a.namespace_ ().name ()) + { + os << "if (n == " << strlit (a.name ()) << " && " << + "ns == " << strlit (a.namespace_ ().name ()) << ")" + << "{"; + } + else + { + os << "if (n == " << strlit (a.name ()) << " && ns.empty ())" + << "{"; + } + + SemanticGraph::Type& type (a.type ()); + String const& post (post_name (type)); + String const& ret (ret_type (type)); + + os << "if (this->" << inst << ")" + << "{" + << "this->" << inst << "->pre ();" + << "this->" << inst << "->_pre_impl ();" + << "this->" << inst << "->_characters (v);" + << "this->" << inst << "->_post_impl ();"; + + if (ret == L"void") + os << "this->" << inst << "->" << post << " ();" + << "this->" << name << " ();"; + else + os << "this->" << name << " (this->" << inst << "->" << + post << " ());"; + + os << "}" + << "return true;" + << "}"; + } + }; + + // + // + struct ParserCallback: Traversal::Member, Context + { + ParserCallback (Context& c) + : Context (c) + { + } + + virtual Void + traverse (Type& m) + { + if (skip (m)) + return; + + String const& arg (arg_type (m.type ())); + + os << "void " << ename (m.scope ()) << "::" << endl + << ename (m); + + if (arg == L"void") + os << " ()"; + else + os << " (" << arg << ")"; + + os << "{" + << "}"; + } + }; + + // + // + struct Complex: Traversal::Complex, Context + { + Complex (Context& c) + : Context (c), + parser_callback_ (c), + start_element_ (c), + end_element_ (c), + attribute_ (c) + { + names_parser_callback_ >> parser_callback_; + names_start_element_ >> start_element_; + names_end_element_ >> end_element_; + names_attribute_ >> attribute_; + } + + virtual Void + traverse (Type& c) + { + Boolean he (has<Traversal::Element> (c)); + Boolean ha (has<Traversal::Attribute> (c)); + + String const& ret (ret_type (c)); + Boolean same (c.inherits_p () && + ret == ret_type (c.inherits ().base ())); + + String const& name (ename (c)); + + if ((he || ha || same || ret == L"void") || polymorphic) + { + os << "// " << name << endl + << "//" << endl + << endl; + } + + if (polymorphic) + { + String id (c.name ()); + + if (String ns = xml_ns_name (c)) + { + id += L' '; + id += ns; + } + + os << "const " << char_type << "* " << name << "::" << endl + << "_static_type ()" + << "{" + << "return " << strlit (id) << ";" + << "}"; + + os << "const " << char_type << "* " << name << "::" << endl + << "_dynamic_type () const" + << "{" + << "return _static_type ();" + << "}"; + + if (c.inherits_p () && validation) + { + Boolean gen (!anonymous (c)); + + // We normally don't need to enter anonymous types into + // the inheritance map. The only exception is when an + // anonymous types is defined inside an element that + // is a member of a substitution group. + // + if (!gen) + { + // The first instance that this anonymous type classifies + // is the prototype for others if any. + // + SemanticGraph::Instance& i ( + c.classifies_begin ()->instance ()); + + if (SemanticGraph::Element* e = + dynamic_cast<SemanticGraph::Element*> (&i)) + { + if (e->substitutes_p ()) + gen = true; + } + } + + if (gen) + { + SemanticGraph::Type& base (c.inherits ().base ()); + + os << "static" << endl + << "const ::xsd::cxx::parser::validating::inheritance_map_entry< " << + char_type << " >" << endl + << "_xsd_" << name << "_inheritance_map_entry_ (" << endl + << name << "::_static_type ()," << endl + << fq_name (base) << "::_static_type ());" + << endl; + } + } + } + + if (!(he || ha || same || ret == L"void")) + return; + + // Parser callbacks. + // + if (!restriction_p (c)) + names (c, names_parser_callback_); + + if (same || ret == L"void") + { + os << ret << " " << name << "::" << endl + << post_name (c) << " ()" + << "{"; + + if (same) + { + SemanticGraph::Type& base (c.inherits ().base ()); + + if (ret == L"void") + os << post_name (base) << " ();"; + else + os << "return " << post_name (base) << " ();"; + } + + os << "}"; + } + + // The rest is parsing/validation code which is generated in + // *-validation-source.cxx. + // + if (validation) + return; + + // Don't use restriction_p here since we don't want special + // treatment of anyType. + // + Boolean restriction ( + c.inherits_p () && + c.inherits ().is_a<SemanticGraph::Restricts> ()); + + // _start_element_impl & _end_element_impl + // + if (he) + { + os << "bool " << name << "::" << endl + << "_start_element_impl (const " << string_type << "& ns," << endl + << "const " << string_type << "& n," << endl + << "const " << string_type << "* t)" + << "{" + << "XSD_UNUSED (t);" + << endl; + + if (!restriction) + { + os << "if (this->"; + + if (c.inherits_p ()) + os << fq_name (c.inherits ().base ()); + else + os << complex_base; + + os << "::_start_element_impl (ns, n, t))" << endl + << "return true;" + << endl; + } + + names (c, names_start_element_); + + os << "return false;" + << "}"; + + + // _end_element_impl + // + os << "bool " << name << "::" << endl + << "_end_element_impl (const " << string_type << "& ns," << endl + << "const " << string_type << "& n)" + << "{"; + + if (!restriction) + { + os << "if (this->"; + + if (c.inherits_p () && !restriction) + os << fq_name (c.inherits ().base ()); + else + os << complex_base; + + os << "::_end_element_impl (ns, n))" << endl + << "return true;" + << endl; + } + + names (c, names_end_element_); + + os << "return false;" + << "}"; + } + + + if (ha) + { + // _attribute_impl + // + os << "bool " << name << "::" << endl + << "_attribute_impl (const " << string_type << "& ns," << endl + << "const " << string_type << "& n," << endl + << "const " << string_type << "& v)" + << "{"; + + if (!restriction) + { + os << "if (this->"; + + if (c.inherits_p ()) + os << fq_name (c.inherits ().base ()); + else + os << complex_base; + + os << "::_attribute_impl (ns, n, v))" << endl + << "return true;" + << endl; + } + + names (c, names_attribute_); + + os << "return false;" + << "}"; + } + } + + private: + // + // + ParserCallback parser_callback_; + Traversal::Names names_parser_callback_; + + // + // + StartElement start_element_; + Traversal::Names names_start_element_; + + // + // + EndElement end_element_; + Traversal::Names names_end_element_; + + // + // + Attribute attribute_; + Traversal::Names names_attribute_; + }; + + + // Generate substitution group map entries. + // + struct GlobalElement: Traversal::Element, Context + { + GlobalElement (Context& c) + : Context (c) + { + } + + virtual Void + traverse (Type& e) + { + if (e.substitutes_p ()) + { + String name (escape (e.name ())); + Type& r (e.substitutes ().root ()); + + SemanticGraph::Type& type (e.type ()); + + os << "// Substitution map entry for " << comment (e.name ()) << "." << endl + << "//" << endl + << "static" << endl + << "const ::xsd::cxx::parser::substitution_map_entry< " << + char_type << " >" << endl + << "_xsd_" << name << "_substitution_map_entry_ (" << endl + << strlit (e.namespace_ ().name ()) << "," << endl + << strlit (e.name ()) << "," << endl + << strlit (r.namespace_ ().name ()) << "," << endl + << strlit (r.name ()) << "," << endl + << fq_name (type) << "::_static_type ());" + << endl; + } + } + }; + } + + Void + generate_parser_source (Context& ctx) + { + if (ctx.polymorphic) + { + ctx.os << "#include <xsd/cxx/parser/substitution-map.hxx>" << endl; + + if (ctx.validation) + ctx.os << "#include <xsd/cxx/parser/validating/inheritance-map.hxx>" << endl + << endl; + else + ctx.os << endl; + + Boolean import_maps (ctx.options.value<CLI::import_maps> ()); + Boolean export_maps (ctx.options.value<CLI::export_maps> ()); + + if (import_maps || export_maps) + { + ctx.os << "#ifndef XSD_NO_EXPORT" << endl + << endl + << "namespace xsd" + << "{" + << "namespace cxx" + << "{" + << "namespace parser" + << "{" + << "#ifdef _MSC_VER" << endl; + + if (export_maps) + ctx.os << "template struct __declspec (dllexport) " << + "substitution_map_init< " << ctx.char_type << " >;"; + + if (import_maps) + ctx.os << "template struct __declspec (dllimport) " << + "substitution_map_init< " << ctx.char_type << " >;"; + + if (ctx.validation && export_maps) + ctx.os << "template struct __declspec (dllexport) " << + "inheritance_map_init< " << ctx.char_type << " >;"; + + if (ctx.validation && import_maps) + ctx.os << "template struct __declspec (dllimport) " << + "inheritance_map_init< " << ctx.char_type << " >;"; + + ctx.os << "#elif defined(__GNUC__) && __GNUC__ >= 4" << endl + << "template struct __attribute__ ((visibility(\"default\"))) " << + "substitution_map_init< " << ctx.char_type << " >;"; + + if (ctx.validation) + ctx.os << "template struct __attribute__ ((visibility(\"default\"))) " << + "inheritance_map_init< " << ctx.char_type << " >;"; + + ctx.os << "#elif defined(XSD_MAP_VISIBILITY)" << endl + << "template struct XSD_MAP_VISIBILITY " << + "substitution_map_init< " << ctx.char_type << " >;"; + + if (ctx.validation) + ctx.os << "template struct XSD_MAP_VISIBILITY " << + "inheritance_map_init< " << ctx.char_type << " >;"; + + ctx.os << "#endif" << endl + << "}" // parser + << "}" // cxx + << "}" // xsd + << "#endif // XSD_NO_EXPORT" << endl + << endl; + } + + ctx.os << "static" << endl + << "const ::xsd::cxx::parser::substitution_map_init< " << + ctx.char_type << " >" << endl + << "_xsd_substitution_map_init_;" + << endl; + + if (ctx.validation) + { + ctx.os << "static" << endl + << "const ::xsd::cxx::parser::validating::inheritance_map_init< " << + ctx.char_type << " >" << endl + << "_xsd_inheritance_map_init_;" + << endl; + } + } + + // Emit "weak" header includes that are used in the file-per-type + // compilation model. + // + if (ctx.options.value<CLI::generate_inline> ()) + { + Traversal::Schema schema; + Includes includes (ctx, Includes::source); + + schema >> includes; + schema.dispatch (ctx.schema_root); + } + + Traversal::Schema schema; + Traversal::Sources sources; + Traversal::Names schema_names; + + Namespace ns (ctx); + Traversal::Names names; + + schema >> sources >> schema; + schema >> schema_names >> ns >> names; + + List list (ctx); + Union union_ (ctx); + Complex complex (ctx); + Enumeration enumeration (ctx); + GlobalElement global_element (ctx); + + names >> list; + names >> union_; + names >> complex; + names >> enumeration; + + if (ctx.polymorphic) + names >> global_element; + + schema.dispatch (ctx.schema_root); + } + } +} diff --git a/xsd/xsd/cxx/parser/parser-source.hxx b/xsd/xsd/cxx/parser/parser-source.hxx new file mode 100644 index 0000000..f6496ea --- /dev/null +++ b/xsd/xsd/cxx/parser/parser-source.hxx @@ -0,0 +1,20 @@ +// file : xsd/cxx/parser/parser-source.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef CXX_PARSER_PARSER_SOURCE_HXX +#define CXX_PARSER_PARSER_SOURCE_HXX + +#include <cxx/parser/elements.hxx> + +namespace CXX +{ + namespace Parser + { + Void + generate_parser_source (Context&); + } +} + +#endif // CXX_PARSER_PARSER_SOURCE_HXX diff --git a/xsd/xsd/cxx/parser/print-impl-common.hxx b/xsd/xsd/cxx/parser/print-impl-common.hxx new file mode 100644 index 0000000..5a91931 --- /dev/null +++ b/xsd/xsd/cxx/parser/print-impl-common.hxx @@ -0,0 +1,643 @@ +// file : xsd/cxx/parser/print-impl-common.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef CXX_PARSER_PRINT_IMPL_COMMON_HXX +#define CXX_PARSER_PRINT_IMPL_COMMON_HXX + +#include <xsd-frontend/semantic-graph.hxx> +#include <xsd-frontend/traversal.hxx> + +#include <cxx/parser/elements.hxx> + +namespace CXX +{ + namespace Parser + { + struct PrintCall: Traversal::Type, + + Traversal::Fundamental::Boolean, + + Traversal::Fundamental::Byte, + Traversal::Fundamental::UnsignedByte, + Traversal::Fundamental::Short, + Traversal::Fundamental::UnsignedShort, + Traversal::Fundamental::Int, + Traversal::Fundamental::UnsignedInt, + Traversal::Fundamental::Long, + Traversal::Fundamental::UnsignedLong, + Traversal::Fundamental::Integer, + Traversal::Fundamental::NonPositiveInteger, + Traversal::Fundamental::NonNegativeInteger, + Traversal::Fundamental::PositiveInteger, + Traversal::Fundamental::NegativeInteger, + + Traversal::Fundamental::Float, + Traversal::Fundamental::Double, + Traversal::Fundamental::Decimal, + + Traversal::Fundamental::String, + Traversal::Fundamental::NormalizedString, + Traversal::Fundamental::Token, + Traversal::Fundamental::Name, + Traversal::Fundamental::NameToken, + Traversal::Fundamental::NameTokens, + Traversal::Fundamental::NCName, + Traversal::Fundamental::Language, + + Traversal::Fundamental::QName, + + Traversal::Fundamental::Id, + Traversal::Fundamental::IdRef, + Traversal::Fundamental::IdRefs, + + Traversal::Fundamental::AnyURI, + + Traversal::Fundamental::Base64Binary, + Traversal::Fundamental::HexBinary, + + Traversal::Fundamental::Date, + Traversal::Fundamental::DateTime, + Traversal::Fundamental::Duration, + Traversal::Fundamental::Day, + Traversal::Fundamental::Month, + Traversal::Fundamental::MonthDay, + Traversal::Fundamental::Year, + Traversal::Fundamental::YearMonth, + Traversal::Fundamental::Time, + + Context + { + PrintCall (Context& c, String const& tag, String const& arg) + : Context (c), tag_ (tag), arg_ (arg) + { + } + + virtual Void + traverse (SemanticGraph::Type&) + { + gen_user_type (); + } + + // Boolean. + // + virtual Void + traverse (SemanticGraph::Fundamental::Boolean& t) + { + if (default_type (t, "bool")) + { + os << cout_inst << " << " << strlit (tag_ + L": ") << " << " << + arg_ << " << std::endl;"; + } + else + gen_user_type (); + } + + // Integral types. + // + virtual Void + traverse (SemanticGraph::Fundamental::Byte& t) + { + if (default_type (t, "signed char")) + { + os << cout_inst << " << " << strlit (tag_ + L": ") << + " << static_cast<short> (" << arg_ << ") << std::endl;"; + } + else + gen_user_type (); + } + + virtual Void + traverse (SemanticGraph::Fundamental::UnsignedByte& t) + { + if (default_type (t, "unsigned char")) + { + os << cout_inst << " << " << strlit (tag_ + L": ") << + " << static_cast<unsigned short> (" << arg_ << ") << std::endl;"; + } + else + gen_user_type (); + } + + virtual Void + traverse (SemanticGraph::Fundamental::Short& t) + { + if (default_type (t, "short")) + { + os << cout_inst << " << " << strlit (tag_ + L": ") << " << " << + arg_ << " << std::endl;"; + } + else + gen_user_type (); + } + + virtual Void + traverse (SemanticGraph::Fundamental::UnsignedShort& t) + { + if (default_type (t, "unsigned short")) + { + os << cout_inst << " << " << strlit (tag_ + L": ") << " << " << + arg_ << " << std::endl;"; + } + else + gen_user_type (); + } + + virtual Void + traverse (SemanticGraph::Fundamental::Int& t) + { + if (default_type (t, "int")) + { + os << cout_inst << " << " << strlit (tag_ + L": ") << " << " << + arg_ << " << std::endl;"; + } + else + gen_user_type (); + } + + virtual Void + traverse (SemanticGraph::Fundamental::UnsignedInt& t) + { + if (default_type (t, "unsigned int")) + { + os << cout_inst << " << " << strlit (tag_ + L": ") << " << " << + arg_ << " << std::endl;"; + } + else + gen_user_type (); + } + + virtual Void + traverse (SemanticGraph::Fundamental::Long& t) + { + if (default_type (t, "long long")) + { + os << cout_inst << " << " << strlit (tag_ + L": ") << " << " << + arg_ << " << std::endl;"; + } + else + gen_user_type (); + } + + virtual Void + traverse (SemanticGraph::Fundamental::UnsignedLong& t) + { + if (default_type (t, "unsigned long long")) + { + os << cout_inst << " << " << strlit (tag_ + L": ") << " << " << + arg_ << " << std::endl;"; + } + else + gen_user_type (); + } + + virtual Void + traverse (SemanticGraph::Fundamental::Integer& t) + { + if (default_type (t, "long long")) + { + os << cout_inst << " << " << strlit (tag_ + L": ") << " << " << + arg_ << " << std::endl;"; + } + else + gen_user_type (); + } + + virtual Void + traverse (SemanticGraph::Fundamental::NegativeInteger& t) + { + if (default_type (t, "long long")) + { + os << cout_inst << " << " << strlit (tag_ + L": ") << " << " << + arg_ << " << std::endl;"; + } + else + gen_user_type (); + } + + virtual Void + traverse (SemanticGraph::Fundamental::NonPositiveInteger& t) + { + if (default_type (t, "long long")) + { + os << cout_inst << " << " << strlit (tag_ + L": ") << " << " << + arg_ << " << std::endl;"; + } + else + gen_user_type (); + } + + virtual Void + traverse (SemanticGraph::Fundamental::PositiveInteger& t) + { + if (default_type (t, "unsigned long long")) + { + os << cout_inst << " << " << strlit (tag_ + L": ") << " << " << + arg_ << " << std::endl;"; + } + else + gen_user_type (); + } + + virtual Void + traverse (SemanticGraph::Fundamental::NonNegativeInteger& t) + { + if (default_type (t, "unsigned long long")) + { + os << cout_inst << " << " << strlit (tag_ + L": ") << " << " << + arg_ << " << std::endl;"; + } + else + gen_user_type (); + } + + // Floats. + // + virtual Void + traverse (SemanticGraph::Fundamental::Float& t) + { + if (default_type (t, "float")) + { + os << cout_inst << " << " << strlit (tag_ + L": ") << " << " << + arg_ << " << std::endl;"; + } + else + gen_user_type (); + } + + virtual Void + traverse (SemanticGraph::Fundamental::Double& t) + { + if (default_type (t, "double")) + { + os << cout_inst << " << " << strlit (tag_ + L": ") << " << " << + arg_ << " << std::endl;"; + } + else + gen_user_type (); + } + + virtual Void + traverse (SemanticGraph::Fundamental::Decimal& t) + { + if (default_type (t, "double")) + { + os << cout_inst << " << " << strlit (tag_ + L": ") << " << " << + arg_ << " << std::endl;"; + } + else + gen_user_type (); + } + + // Strings. + // + virtual Void + traverse (SemanticGraph::Fundamental::String& t) + { + gen_string (t); + } + + virtual Void + traverse (SemanticGraph::Fundamental::NormalizedString& t) + { + gen_string (t); + } + + virtual Void + traverse (SemanticGraph::Fundamental::Token& t) + { + gen_string (t); + } + + virtual Void + traverse (SemanticGraph::Fundamental::NameToken& t) + { + gen_string (t); + } + + virtual Void + traverse (SemanticGraph::Fundamental::Name& t) + { + gen_string (t); + } + + virtual Void + traverse (SemanticGraph::Fundamental::NCName& t) + { + gen_string (t); + } + + virtual Void + traverse (SemanticGraph::Fundamental::Language& t) + { + gen_string (t); + } + + virtual Void + traverse (SemanticGraph::Fundamental::Id& t) + { + gen_string (t); + } + + virtual Void + traverse (SemanticGraph::Fundamental::IdRef& t) + { + gen_string (t); + } + + virtual Void + traverse (SemanticGraph::Fundamental::AnyURI& t) + { + gen_string (t); + } + + // String sequences. + // + + virtual Void + traverse (SemanticGraph::Fundamental::NameTokens& t) + { + gen_sequence (t); + } + + virtual Void + traverse (SemanticGraph::Fundamental::IdRefs& t) + { + gen_sequence (t); + } + + // QName + // + + virtual Void + traverse (SemanticGraph::Fundamental::QName& t) + { + if (default_type (t, xs_ns_name () + L"::qname")) + { + os << cout_inst << " << " << strlit (tag_ + L": ") << ";" + << endl + << "if (" << arg_ << ".prefix ().empty ())" << endl + << cout_inst << " << " << arg_ << ".name ();" + << "else" << endl + << cout_inst << " << " << arg_ << ".prefix () << " << L << + "':' << " << arg_ << ".name ();" + << endl + << cout_inst << " << std::endl;"; + } + else + gen_user_type (); + } + + // Binary. + // + virtual Void + traverse (SemanticGraph::Fundamental::Base64Binary& t) + { + gen_buffer (t); + } + + virtual Void + traverse (SemanticGraph::Fundamental::HexBinary& t) + { + gen_buffer (t); + } + + // Date/time. + // + virtual Void + traverse (SemanticGraph::Fundamental::Date& t) + { + if (default_type (t, xs_ns_name () + L"::date")) + { + os << cout_inst << " << " << strlit (tag_ + L": ") << endl + << " << " << arg_ << ".year () << '-'" << endl + << " << " << arg_ << ".month () << '-'" << endl + << " << " << arg_ << ".day ();"; + + gen_time_zone (); + } + else + gen_user_type (); + } + + virtual Void + traverse (SemanticGraph::Fundamental::DateTime& t) + { + if (default_type (t, xs_ns_name () + L"::date_time")) + { + os << cout_inst << " << " << strlit (tag_ + L": ") << endl + << " << " << arg_ << ".year () << '-'" << endl + << " << " << arg_ << ".month () << '-'" << endl + << " << " << arg_ << ".day () << 'T'" << endl + << " << " << arg_ << ".hours () << ':'" << endl + << " << " << arg_ << ".minutes () << ':'" << endl + << " << " << arg_ << ".seconds ();"; + + gen_time_zone (); + } + else + gen_user_type (); + } + + virtual Void + traverse (SemanticGraph::Fundamental::Duration& t) + { + if (default_type (t, xs_ns_name () + L"::duration")) + { + os << cout_inst << " << " << strlit (tag_ + L": ") << ";" + << endl + << "if (" << arg_ << ".negative ())" << endl + << cout_inst << " << '-';" + << endl + << cout_inst << " << 'P'" << endl + << " << " << arg_ << ".years () << 'Y'" << endl + << " << " << arg_ << ".months () << 'M'" << endl + << " << " << arg_ << ".days () << " << L << "\"DT\"" << endl + << " << " << arg_ << ".hours () << 'H'" << endl + << " << " << arg_ << ".minutes () << 'M'" << endl + << " << " << arg_ << ".seconds () << 'S'" + << " << std::endl;"; + } + else + gen_user_type (); + } + + virtual Void + traverse (SemanticGraph::Fundamental::Day& t) + { + if (default_type (t, xs_ns_name () + L"::gday")) + { + os << cout_inst << " << " << strlit (tag_ + L": ---") << + " << " << arg_ << ".day ();"; + + gen_time_zone (); + } + else + gen_user_type (); + } + + virtual Void + traverse (SemanticGraph::Fundamental::Month& t) + { + if (default_type (t, xs_ns_name () + L"::gmonth")) + { + os << cout_inst << " << " << strlit (tag_ + L": --") << + " << " << arg_ << ".month ();"; + + gen_time_zone (); + } + else + gen_user_type (); + } + + virtual Void + traverse (SemanticGraph::Fundamental::MonthDay& t) + { + if (default_type (t, xs_ns_name () + L"::gmonth_day")) + { + os << cout_inst << " << " << strlit (tag_ + L": --") << endl + << " << " << arg_ << ".month () << '-'" << endl + << " << " << arg_ << ".day ();"; + + gen_time_zone (); + } + else + gen_user_type (); + } + + virtual Void + traverse (SemanticGraph::Fundamental::Year& t) + { + if (default_type (t, xs_ns_name () + L"::gyear")) + { + os << cout_inst << " << " << strlit (tag_ + L": ") << " << " << + arg_ << ".year ();"; + + gen_time_zone (); + } + else + gen_user_type (); + } + + virtual Void + traverse (SemanticGraph::Fundamental::YearMonth& t) + { + if (default_type (t, xs_ns_name () + L"::gyear_month")) + { + os << cout_inst << " << " << strlit (tag_ + L": ") << endl + << " << " << arg_ << ".year () << '-'" << endl + << " << " << arg_ << ".month ();"; + + gen_time_zone (); + } + else + gen_user_type (); + } + + virtual Void + traverse (SemanticGraph::Fundamental::Time& t) + { + if (default_type (t, xs_ns_name () + L"::time")) + { + os << cout_inst << " << " << strlit (tag_ + L": ") << endl + << " << " << arg_ << ".hours () << ':'" << endl + << " << " << arg_ << ".minutes () << ':'" << endl + << " << " << arg_ << ".seconds ();"; + + gen_time_zone (); + } + else + gen_user_type (); + } + + private: + bool + default_type (SemanticGraph::Type& t, String const& def_type) + { + return ret_type (t) == def_type; + } + + void + gen_user_type () + { + os << "// TODO" << endl + << "//" << endl; + } + + void + gen_string (SemanticGraph::Type& t) + { + if ((char_type == L"char" && default_type (t, "::std::string")) || + (char_type == L"wchar_t" && default_type (t, "::std::wstring"))) + { + os << cout_inst << " << " << strlit (tag_ + L": ") << " << " << + arg_ << " << std::endl;"; + } + else + gen_user_type (); + } + + void + gen_sequence (SemanticGraph::Type& t) + { + String type (xs_ns_name () + L"::string_sequence"); + + if (default_type (t, type)) + { + os << cout_inst << " << " << strlit (tag_ + L": ") << ";" + << endl; + + os << "for (" << type << "::const_iterator i (" << arg_ << + ".begin ()), e (" << arg_ << ".end ());" << endl + << "i != e;)" + << "{" + << cout_inst << " << *i++;" + << "if (i != e)" << endl + << cout_inst << " << ' ';" + << "}" + << cout_inst << " << std::endl;"; + } + else + gen_user_type (); + } + + void + gen_buffer (SemanticGraph::Type& t) + { + String type (L"::std::auto_ptr< " + xs_ns_name () + L"::buffer >"); + + if (default_type (t, type)) + { + os << cout_inst << " << " << strlit (tag_ + L": ") << " << " + << arg_ << "->size () << " << L << "\" bytes\" << std::endl;"; + } + else + gen_user_type (); + } + + void + gen_time_zone () + { + os << endl + << "if (" << arg_ << ".zone_present ())" + << "{" + << "if (" << arg_ << ".zone_hours () < 0)" << endl + << cout_inst << " << " << arg_ << ".zone_hours () << ':' << -" << + arg_ << ".zone_minutes ();" + << "else" << endl + << cout_inst << " << '+' << " << arg_ << ".zone_hours () << " << + "':' << " << arg_ << ".zone_minutes ();"; + + os << "}" + << cout_inst << " << std::endl;"; + } + + private: + String tag_; + String arg_; + }; + } +} + +#endif // CXX_PARSER_PRINT_IMPL_COMMON_HXX diff --git a/xsd/xsd/cxx/parser/state-processor.cxx b/xsd/xsd/cxx/parser/state-processor.cxx new file mode 100644 index 0000000..7fe3ff6 --- /dev/null +++ b/xsd/xsd/cxx/parser/state-processor.cxx @@ -0,0 +1,318 @@ +// file : xsd/cxx/parser/state-processor.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <cxx/parser/state-processor.hxx> + +#include <cxx/parser/elements.hxx> + +#include <xsd-frontend/semantic-graph.hxx> +#include <xsd-frontend/traversal.hxx> + +#include <cult/containers/vector.hxx> + +#include <iostream> + +namespace CXX +{ + namespace Parser + { + namespace + { + typedef Cult::Containers::Vector<SemanticGraph::Particle*> Particles; + + void + print (Particles const& p) + { + using std::wcerr; + using std::endl; + + wcerr << "prefixes: " << endl; + + for (Particles::ConstIterator i (p.begin ()); i != p.end (); ++i) + { + if (SemanticGraph::Element* e = + dynamic_cast<SemanticGraph::Element*> (*i)) + { + wcerr << e->name () << endl; + } + else + { + wcerr << "<any>" << endl; + } + } + + wcerr << endl; + } + + // + // + struct Particle: Traversal::All, + Traversal::Choice, + Traversal::Sequence + { + Particle (UnsignedLong& all, + UnsignedLong& choice, + UnsignedLong& sequence, + UnsignedLong& depth) + : all_ (all), + choice_ (choice), + sequence_ (sequence), + depth_ (depth) + { + } + + virtual Void + traverse (SemanticGraph::All& a) + { + using SemanticGraph::Compositor; + + // Go over particles, collecting "prefix" particles in prefixes_, + // assigning state numbers and calculating effective minOccurs. + // If all prefixes of this compositor have minOccurs = 0, then + // the compositor itself effectively has minOccurs = 0 regardless + // of the actual value specified in the schema. + // + // Note that we don't need to care about depth since the 'all' + // compositor cannot contain any nested compositors. + // + + UnsignedLong state (0); + UnsignedLong min (0); + + for (Compositor::ContainsIterator ci (a.contains_begin ()); + ci != a.contains_end (); ++ci) + { + SemanticGraph::Particle& p (ci->particle ()); + + // The 'all' compositor can only include elements. + // + prefixes_.push_back (&p); + + if (min == 0 && ci->min () != 0) + min = 1; + + p.context ().set ("prefix", true); + p.context ().set ("state", state++); + } + + if (!prefixes_.empty ()) + { + a.context ().set ("comp-number", choice_++); + a.context ().set ("prefixes", prefixes_); + a.context ().set ("state-count", UnsignedLong (prefixes_.size ())); + + // effective-min = min * actual-min + // + if (min == 1) + min = a.min (); + + a.context ().set ("effective-min", min); + + // print (prefixes_); + } + } + + virtual Void + traverse (SemanticGraph::Choice& c) + { + using SemanticGraph::Compositor; + + // Go over particles, collecting "prefix" particles in prefixes_, + // assigning state numbers and calculating effective minOccurs. + // If any prefix of this compositor have minOccurs = 0, then the + // compositor itself effectively has minOccurs = 0 regardless of + // the actual value specified in the schema. + // + + UnsignedLong state (0); + UnsignedLong min (1); + + for (Compositor::ContainsIterator ci (c.contains_begin ()); + ci != c.contains_end (); ++ci) + { + SemanticGraph::Particle& p (ci->particle ()); + + if (p.is_a<SemanticGraph::Element> () || + p.is_a<SemanticGraph::Any> ()) + { + prefixes_.push_back (&p); + + if (min == 1 && ci->min () == 0) + min = 0; + } + else + { + UnsignedLong depth (0); + Particle t (all_, choice_, sequence_, depth); + t.dispatch (p); + + if (t.prefixes_.empty ()) + continue; // Skip empty compositors. + + if (++depth > depth_) // One for this compositor. + depth_ = depth; + + prefixes_.insert (prefixes_.end (), + t.prefixes_.begin ().base (), + t.prefixes_.end ().base ()); + + if (min == 1 && + p.context ().get<UnsignedLong> ("effective-min") == 0) + min = 0; + } + + p.context ().set ("prefix", true); + p.context ().set ("state", state++); + } + + if (!prefixes_.empty ()) + { + c.context ().set ("comp-number", choice_++); + c.context ().set ("prefixes", prefixes_); + + // effective-min = min * actual-min + // + if (min == 1) + min = c.min (); + + c.context ().set ("effective-min", min); + + // print (prefixes_); + } + } + + virtual Void + traverse (SemanticGraph::Sequence& s) + { + using SemanticGraph::Compositor; + + // Go over particles, collecting "prefix" particles in prefixes_, + // assigning state numbers and calculating effective minOccurs. + // If all prefixes of this compositor have minOccurs = 0, then + // the compositor itself effectively has minOccurs = 0 regardless + // of the actual value specified in the schema. + // + + Boolean prefix (true); + UnsignedLong state (0); + UnsignedLong min (0); + + for (Compositor::ContainsIterator ci (s.contains_begin ()); + ci != s.contains_end (); ++ci) + { + SemanticGraph::Particle& p (ci->particle ()); + + if (p.is_a<SemanticGraph::Element> () || + p.is_a<SemanticGraph::Any> ()) + { + if (prefix) + { + prefixes_.push_back (&p); + + if (ci->min () != 0) + min = 1; + } + } + else + { + UnsignedLong depth (0); + Particle t (all_, choice_, sequence_, depth); + t.dispatch (p); + + if (t.prefixes_.empty ()) + continue; // Skip empty compositors. + + if (++depth > depth_) // One for this compositor. + depth_ = depth; + + if (prefix) + { + prefixes_.insert (prefixes_.end (), + t.prefixes_.begin ().base (), + t.prefixes_.end ().base ()); + + if (p.context ().get<UnsignedLong> ("effective-min") != 0) + min = 1; + } + } + + p.context ().set ("state", state++); + + if (prefix) + p.context ().set ("prefix", true); + + if (prefix && min != 0) + prefix = false; + } + + if (!prefixes_.empty ()) + { + s.context ().set ("comp-number", sequence_++); + s.context ().set ("prefixes", prefixes_); + + // effective-min = min * actual-min + // + if (min == 1) + min = s.min (); + + s.context ().set ("effective-min", min); + + // print (prefixes_); + } + } + + private: + Particles prefixes_; + + UnsignedLong& all_; + UnsignedLong& choice_; + UnsignedLong& sequence_; + + UnsignedLong& depth_; + }; + + + // + // + struct Complex: Traversal::Complex + { + virtual Void + traverse (Type& c) + { + if (c.contains_compositor_p ()) + { + UnsignedLong all (0), choice (0), sequence (0), depth (0); + Particle t (all, choice, sequence, depth); + t.dispatch (c.contains_compositor ().compositor ()); + + // Set the maximum stack depth for this type. Used to + // allocate fixed-size state stack. + // + c.context ().set ("depth", depth + 1); + } + } + }; + } + + Void StateProcessor:: + process (SemanticGraph::Schema& tu, SemanticGraph::Path const&) + { + Traversal::Schema schema; + Traversal::Sources sources; + Traversal::Names schema_names; + Traversal::Namespace ns; + Traversal::Names ns_names; + + schema >> sources >> schema; + schema >> schema_names >> ns >> ns_names; + + Complex complex_type; + + ns_names >> complex_type; + + schema.dispatch (tu); + } + } +} diff --git a/xsd/xsd/cxx/parser/state-processor.hxx b/xsd/xsd/cxx/parser/state-processor.hxx new file mode 100644 index 0000000..630ac13 --- /dev/null +++ b/xsd/xsd/cxx/parser/state-processor.hxx @@ -0,0 +1,28 @@ +// file : xsd/cxx/parser/state-processor.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef CXX_PARSER_STATE_PROCESSOR_HXX +#define CXX_PARSER_STATE_PROCESSOR_HXX + +#include <cult/types.hxx> +#include <xsd-frontend/semantic-graph.hxx> + +namespace CXX +{ + namespace Parser + { + using namespace Cult::Types; + + class StateProcessor + { + public: + Void + process (XSDFrontend::SemanticGraph::Schema&, + XSDFrontend::SemanticGraph::Path const& file); + }; + } +} + +#endif // CXX_PARSER_STATE_PROCESSOR_HXX diff --git a/xsd/xsd/cxx/parser/type-processor.cxx b/xsd/xsd/cxx/parser/type-processor.cxx new file mode 100644 index 0000000..4744c0a --- /dev/null +++ b/xsd/xsd/cxx/parser/type-processor.cxx @@ -0,0 +1,352 @@ +// file : xsd/cxx/parser/type-processor.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <cult/containers/set.hxx> + +#include <cxx/parser/elements.hxx> +#include <cxx/parser/type-processor.hxx> + +#include <xsd-frontend/semantic-graph.hxx> +#include <xsd-frontend/traversal.hxx> + +namespace CXX +{ + namespace Parser + { + TypeProcessor:: + TypeProcessor () + { + // Dummy ctor, helps with long symbols on HP-UX. + } + + namespace + { + // + // + struct Type: Traversal::Type + { + Type (SemanticGraph::Schema& schema, + TypeMap::Namespaces& type_map, + Boolean add_includes) + : schema_ (schema), + type_map_ (type_map), + add_includes_ (add_includes) + { + } + + virtual Void + traverse (SemanticGraph::Type& type) + { + using TypeMap::Namespace; + using TypeMap::Namespaces; + + SemanticGraph::Context& tc (type.context ()); + + // There are two situations where we may try to process the + // same type more than once. The first is when the type is + // used in several element declarations in the same schema. + // The second situation only occurs when we are in the file- + // per-type mode. In this case the type was processed as part + // of another root schema. In the second case, while the ret + // and arg types are assumed to be the same, we need to re- + // match the type in order to add include directives to the + // new root schema. + // + Boolean set (true); + + if (tc.count ("ret-type")) + { + SemanticGraph::Schema* s ( + tc.get<SemanticGraph::Schema*> ("root-schema")); + + if (&schema_ == s) + return; + + set = false; + } + + SemanticGraph::Namespace& ns ( + dynamic_cast<SemanticGraph::Namespace&> (type.scope ())); + + String ns_name (ns.name ()); + String t_name (type.name ()); + + // std::wcerr << "traversing: " << ns_name << "#" << t_name << endl; + + for (Namespaces::ConstIterator n (type_map_.begin ()); + n != type_map_.end (); ++n) + { + // Check if the namespace matches. + // + Boolean ns_match; + + if (!n->xsd_name ().empty ()) + { + ns_match = n->xsd_name ().match (ns_name); + } + else + ns_match = ns_name.empty (); + + // std::wcerr << "considering ns expr: " << n->xsd_name () << endl; + + if (ns_match) + { + // Namespace matched. See if there is a type that matches. + // + for (Namespace::TypesIterator t (n->types_begin ()); + t != n->types_end (); ++t) + { + if (t->xsd_name ().match (t_name)) + { + if (set) + { + // Got a match. See if the namespace has the C++ + // namespace mapping. + // + String cxx_ns; + + if (n->has_cxx_name ()) + { + if (!n->xsd_name ().empty ()) + { + cxx_ns = n->xsd_name ().merge ( + n->cxx_name (), ns_name, true); + } + else + cxx_ns = n->cxx_name (); + + cxx_ns += L"::"; + } + + // Figure out ret and arg type names. + // + String ret_type (cxx_ns); + + ret_type += t->xsd_name ().merge ( + t->cxx_ret_name (), t_name, true); + + String arg_type; + + if (t->cxx_arg_name ()) + { + arg_type = cxx_ns; + arg_type += t->xsd_name ().merge ( + t->cxx_arg_name (), t_name, true); + } + else + { + if (ret_type == L"void") + arg_type = ret_type; + else + { + WideChar last (ret_type[ret_type.size () - 1]); + + // If it is already a pointer or reference then use + // it as is. + // + if (last == L'*' || last == L'&') + arg_type = ret_type; + else + arg_type = L"const " + ret_type + L"&"; + } + } + + tc.set ("ret-type", ret_type); + tc.set ("arg-type", arg_type); + } + + tc.set ("root-schema", &schema_); + + //std::wcerr << t_name << " -> " << ret_type << endl; + + // See of we need to add any includes to the translations + // unit. + // + if (add_includes_) + { + if (n->includes_begin () != n->includes_end ()) + { + typedef Cult::Containers::Set<String> Includes; + + if (!schema_.context ().count ("includes")) + schema_.context ().set ("includes", Includes ()); + + Includes& is ( + schema_.context ().get<Includes> ("includes")); + + for (Namespace::IncludesIterator i (n->includes_begin ()); + i != n->includes_end (); ++i) + { + is.insert (*i); + } + } + } + + return; + } + } + } + } + } + + private: + SemanticGraph::Schema& schema_; + TypeMap::Namespaces& type_map_; + Boolean add_includes_; + }; + + + // + // + struct GlobalType: Traversal::Type, + Traversal::List, + Traversal::Complex, + Traversal::Enumeration + { + GlobalType (SemanticGraph::Schema& schema, + TypeMap::Namespaces& type_map, + Boolean add_includes) + : type_ (schema, type_map, add_includes) + { + inherits_ >> type_; + names_ >> instance_ >> belongs_ >> type_; + argumented_ >> type_; + } + + virtual Void + traverse (SemanticGraph::Type& t) + { + type_.traverse (t); + } + + virtual Void + traverse (SemanticGraph::List& l) + { + type_.traverse (l); + Traversal::List::argumented (l, argumented_); + } + + virtual Void + traverse (SemanticGraph::Complex& c) + { + type_.traverse (c); + Complex::inherits (c, inherits_); + Complex::names (c, names_); + } + + virtual Void + traverse (SemanticGraph::Enumeration& e) + { + type_.traverse (e); + Complex::inherits (e, inherits_); + } + + private: + Parser::Type type_; + Traversal::Names names_; + Traversal::Instance instance_; + Traversal::Inherits inherits_; + Traversal::Belongs belongs_; + Traversal::Argumented argumented_; + }; + + Void + process_impl (CLI::Options const& options, + XSDFrontend::SemanticGraph::Schema& tu, + Boolean gen_driver, + TypeMap::Namespaces& type_map) + { + if (tu.names_begin ()->named ().name () == + L"http://www.w3.org/2001/XMLSchema") + { + // XML Schema namespace. + // + Traversal::Schema schema; + + Traversal::Names schema_names; + Traversal::Namespace ns; + Traversal::Names ns_names; + GlobalType global_type (tu, type_map, true); + + schema >> schema_names >> ns >> ns_names >> global_type; + + schema.dispatch (tu); + } + else + { + // If --extern-xml-schema is specified, then we don't want + // includes from the XML Schema type map. + // + Boolean extern_xml_schema ( + options.value<CLI::extern_xml_schema> ()); + + // + // + Traversal::Schema schema; + Traversal::Schema xs_schema; + Traversal::Sources sources; + Traversal::Implies implies; + + schema >> sources >> schema; + schema >> implies >> xs_schema; + + Traversal::Names schema_names; + Traversal::Namespace ns; + Traversal::Names ns_names; + GlobalType global_type (tu, type_map, true); + + schema >> schema_names >> ns >> ns_names >> global_type; + + Traversal::Names xs_schema_names; + Traversal::Namespace xs_ns; + Traversal::Names xs_ns_names; + GlobalType xs_global_type (tu, type_map, !extern_xml_schema); + + xs_schema >> xs_schema_names >> xs_ns >> xs_ns_names >> + xs_global_type; + + schema.dispatch (tu); + + // If we are generating the test driver, make sure the root + // element type is processed. + // + if (gen_driver && options.value<CLI::generate_test_driver> ()) + { + // Figure out the root element. Validator should have made sure + // it is unique. + // + SemanticGraph::Element* root (0); + { + Traversal::Schema schema; + Traversal::Sources sources; + + schema >> sources >> schema; + + Traversal::Names schema_names; + Traversal::Namespace ns; + Traversal::Names ns_names; + RootElement root_element (options, root); + + schema >> schema_names >> ns >> ns_names >> root_element; + + schema.dispatch (tu); + } + + global_type.dispatch (root->type ()); + } + } + } + } + + Void TypeProcessor:: + process (CLI::Options const& options, + XSDFrontend::SemanticGraph::Schema& s, + Boolean gen_driver, + TypeMap::Namespaces& tm) + { + process_impl (options, s, gen_driver, tm); + } + } +} diff --git a/xsd/xsd/cxx/parser/type-processor.hxx b/xsd/xsd/cxx/parser/type-processor.hxx new file mode 100644 index 0000000..02a090f --- /dev/null +++ b/xsd/xsd/cxx/parser/type-processor.hxx @@ -0,0 +1,37 @@ +// file : xsd/cxx/parser/type-processor.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef CXX_PARSER_TYPE_PROCESSOR_HXX +#define CXX_PARSER_TYPE_PROCESSOR_HXX + +#include <cult/types.hxx> + +#include <xsd-frontend/semantic-graph.hxx> + +#include <type-map/type-map.hxx> + +#include <cxx/parser/cli.hxx> + +namespace CXX +{ + namespace Parser + { + using namespace Cult::Types; + + class TypeProcessor + { + public: + TypeProcessor (); // Dummy ctor, helps with long symbols on HP-UX. + + Void + process (CLI::Options const& options, + XSDFrontend::SemanticGraph::Schema&, + Boolean gen_driver, + TypeMap::Namespaces&); + }; + } +} + +#endif // CXX_PARSER_TYPE_PROCESSOR_HXX diff --git a/xsd/xsd/cxx/parser/validator.cxx b/xsd/xsd/cxx/parser/validator.cxx new file mode 100644 index 0000000..19b15c6 --- /dev/null +++ b/xsd/xsd/cxx/parser/validator.cxx @@ -0,0 +1,727 @@ +// file : xsd/cxx/parser/validator.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <cxx/parser/validator.hxx> + +#include <xsd-frontend/semantic-graph.hxx> +#include <xsd-frontend/traversal.hxx> + +#include <cxx/parser/elements.hxx> + +#include <iostream> + +using std::wcerr; + +namespace CXX +{ + namespace Parser + { + namespace + { + class ValidationContext: public Context + { + public: + ValidationContext (SemanticGraph::Schema& root, + SemanticGraph::Path const& path, + CLI::Options const& options, + const WarningSet& disabled_warnings, + Boolean& valid_) + : Context (std::wcerr, root, path, options, 0, 0, 0, 0), + disabled_warnings_ (disabled_warnings), + disabled_warnings_all_ (false), + valid (valid_), + subst_group_warning_issued (subst_group_warning_issued_), + subst_group_warning_issued_ (false) + { + } + + public: + Boolean + is_disabled (Char const* w) + { + return disabled_warnings_all_ || + disabled_warnings_.find (w) != disabled_warnings_.end (); + } + + public: + String + xpath (SemanticGraph::Nameable& n) + { + if (n.is_a<SemanticGraph::Namespace> ()) + return L"<namespace-level>"; // There is a bug if you see this. + + assert (n.named_p ()); + + SemanticGraph::Scope& scope (n.scope ()); + + if (scope.is_a<SemanticGraph::Namespace> ()) + return n.name (); + + return xpath (scope) + L"/" + n.name (); + } + + protected: + ValidationContext (ValidationContext& c) + : Context (c), + disabled_warnings_ (c.disabled_warnings_), + disabled_warnings_all_ (c.disabled_warnings_all_), + valid (c.valid), + subst_group_warning_issued (c.subst_group_warning_issued) + { + } + + protected: + const WarningSet& disabled_warnings_; + Boolean disabled_warnings_all_; + Boolean& valid; + Boolean& subst_group_warning_issued; + Boolean subst_group_warning_issued_; + }; + + // + // + struct Any: Traversal::Any, ValidationContext + { + Any (ValidationContext& c) + : ValidationContext (c) + { + } + + struct Element: Traversal::Element, ValidationContext + { + Element (ValidationContext& c, SemanticGraph::Any& any) + : ValidationContext (c), + any_ (any), + ns_ (any.definition_namespace ().name ()) + { + } + + virtual Void + traverse (SemanticGraph::Element& e) + { + if (skip (e)) return; + + using SemanticGraph::Any; + + Boolean q (e.qualified_p ()); + String ns (q ? e.namespace_ ().name () : ""); + + for (Any::NamespaceIterator i (any_.namespace_begin ()); + i != any_.namespace_end (); ++i) + { + Boolean failed (false); + + if (*i == L"##any") + { + failed = true; + } + else if (*i == L"##other") + { + if (ns_) + { + // Note that here I assume that ##other does not + // include names without target namespace. This + // is not what the spec says but that seems to be + // the consensus. + // + failed = q && ns != ns_; + } + else + { + // No target namespace. + // + failed = q && ns != L""; + } + } + else if (*i == L"##local") + { + failed = !q || ns == L""; + } + else if (*i == L"##targetNamespace") + { + failed = (q && ns_ == ns) || (!q && ns_ == L""); + } + else + { + failed = q && *i == ns; + } + + if (failed) + { + Any& a (any_); + + os << a.file () << ":" << a.line () << ":" << a.column () + << ": warning P001: namespace '" << *i << "' allows for " + << "element '" << e.name () << "'" << endl; + + os << a.file () << ":" << a.line () << ":" << a.column () + << ": warning P001: generated code may not associate element '" + << e.name () << "' correctly if it appears in place of " + << "this wildcard" << endl; + + os << e.file () << ":" << e.line () << ":" << e.column () + << ": info: element '" << e.name () << "' is defined " + << "here" << endl; + + os << a.file () << ":" << a.line () << ":" << a.column () + << ": info: turn on validation to ensure correct " + << "association" << endl; + } + } + } + + private: + SemanticGraph::Any& any_; + String ns_; + }; + + struct Complex: Traversal::Complex + { + Complex () + : up_ (true), down_ (true) + { + } + + virtual Void + post (Type& c) + { + // Go down the inheritance hierarchy. + // + if (down_) + { + Boolean up = up_; + up_ = false; + + if (c.inherits_p ()) + dispatch (c.inherits ().base ()); + + up_ = up; + } + + // Go up the inheritance hierarchy. + // + if (up_) + { + Boolean down = down_; + down_ = false; + + for (Type::BegetsIterator i (c.begets_begin ()); + i != c.begets_end (); ++i) + { + dispatch (i->derived ()); + } + + down_ = down; + } + } + + private: + Boolean up_, down_; + }; + + virtual Void + traverse (SemanticGraph::Any& a) + { + using SemanticGraph::Compositor; + + // Find our complex type. + // + Compositor* c (&a.contained_particle ().compositor ()); + + while(!c->contained_compositor_p ()) + c = &c->contained_particle ().compositor (); + + SemanticGraph::Complex& type ( + dynamic_cast<SemanticGraph::Complex&> ( + c->contained_compositor ().container ())); + + Complex complex; + Traversal::Names names; + Element element (*this, a); + + complex >> names >> element; + + complex.dispatch (type); + } + }; + + + // + // + struct Traverser: Traversal::Schema, + Traversal::Complex, + Traversal::Type, + Traversal::Element, + ValidationContext + { + Traverser (ValidationContext& c) + : ValidationContext (c), + any_ (c) + { + *this >> sources_ >> *this; + *this >> schema_names_ >> ns_ >> names_ >> *this; + + // Any + // + if (!validation && !is_disabled ("P001")) + { + *this >> contains_compositor_ >> compositor_ >> contains_particle_; + contains_particle_ >> compositor_; + contains_particle_ >> any_; + } + } + + virtual Void + traverse (SemanticGraph::Complex& c) + { + using SemanticGraph::Schema; + + traverse (static_cast<SemanticGraph::Type&> (c)); + + if (c.inherits_p ()) + { + SemanticGraph::Type& t (c.inherits ().base ()); + + if (t.named_p () && + types_.find ( + t.scope ().name () + L"#" + t.name ()) == types_.end ()) + { + // Don't worry about types that are in included/imported + // schemas. + // + Schema& s (dynamic_cast<Schema&> (t.scope ().scope ())); + + if (&s == &schema_root || sources_p (schema_root, s)) + { + valid = false; + + wcerr << c.file () << ":" << c.line () << ":" << c.column () + << ": error: type '" << xpath (c) << "' inherits from " + << "yet undefined type '" << xpath (t) << "'" << endl; + + wcerr << t.file () << ":" << t.line () << ":" << t.column () + << ": info: '" << xpath (t) << "' is defined here" + << endl; + + wcerr << c.file () << ":" << c.line () << ":" << c.column () + << ": info: inheritance from a yet-undefined type is " + << "not supported" << endl; + + wcerr << c.file () << ":" << c.line () << ":" << c.column () + << ": info: re-arrange your schema and try again" + << endl; + } + } + } + + Complex::traverse (c); + } + + virtual Void + traverse (SemanticGraph::Type& t) + { + if (t.named_p ()) + { + types_.insert (t.scope ().name () + L"#" + t.name ()); + } + } + + virtual Void + traverse (SemanticGraph::Element& e) + { + if (is_disabled ("P002")) + return; + + if (e.substitutes_p () && + !options.value<CLI::generate_polymorphic> () && + !subst_group_warning_issued) + { + subst_group_warning_issued = true; + + os << e.file () << ":" << e.line () << ":" << e.column () + << ": warning P002: substitution groups are used but " + << "--generate-polymorphic was not specified" << endl; + + os << e.file () << ":" << e.line () << ":" << e.column () + << ": info: generated code may not be able to parse " + << "some conforming instances" << endl; + } + } + + // Return true if root sources s. + // + Boolean + sources_p (SemanticGraph::Schema& root, SemanticGraph::Schema& s) + { + using SemanticGraph::Schema; + using SemanticGraph::Sources; + + for (Schema::UsesIterator i (root.uses_begin ()); + i != root.uses_end (); ++i) + { + if (i->is_a<Sources> ()) + { + if (&i->schema () == &s || sources_p (i->schema (), s)) + return true; + } + } + + return false; + } + + private: + Containers::Set<String> types_; + + Traversal::Sources sources_; + + Traversal::Names schema_names_; + Traversal::Namespace ns_; + + Traversal::Names names_; + + // Any. + // + Any any_; + Traversal::Compositor compositor_; + Traversal::ContainsParticle contains_particle_; + Traversal::ContainsCompositor contains_compositor_; + }; + + + struct AnonymousType: Traversal::Schema, + Traversal::Complex, + Traversal::Element, + Traversal::Attribute, + ValidationContext + { + AnonymousType (ValidationContext& c) + : ValidationContext (c), + anonymous_error_issued_ (false) + { + *this >> sources_ >> *this; + *this >> schema_names_ >> ns_ >> names_ >> *this; + *this >> names_; + } + + Boolean + traverse_common (SemanticGraph::Member& m) + { + SemanticGraph::Type& t (m.type ()); + + if (!t.named_p () + && !t.is_a<SemanticGraph::Fundamental::IdRef> () + && !t.is_a<SemanticGraph::Fundamental::IdRefs> ()) + { + if (!anonymous_error_issued_) + { + valid = false; + anonymous_error_issued_ = true; + + wcerr << t.file () + << ": error: anonymous types detected" + << endl; + + wcerr << t.file () + << ": info: " + << "anonymous types are not supported in this mapping" + << endl; + + wcerr << t.file () + << ": info: consider explicitly naming these types or " + << "remove the --preserve-anonymous option to " + << "automatically name them" + << endl; + + if (!options.value<CLI::show_anonymous> ()) + wcerr << t.file () + << ": info: use --show-anonymous option to see these " + << "types" << endl; + } + + return true; + } + + return false; + } + + virtual Void + traverse (SemanticGraph::Element& e) + { + if (skip (e)) return; + + if (traverse_common (e)) + { + if (options.value<CLI::show_anonymous> ()) + { + wcerr << e.file () << ":" << e.line () << ":" << e.column () + << ": error: element '" << xpath (e) << "' " + << "is of anonymous type" << endl; + } + } + else + Traversal::Element::traverse (e); + } + + virtual Void + traverse (SemanticGraph::Attribute& a) + { + if (traverse_common (a)) + { + if (options.value<CLI::show_anonymous> ()) + { + wcerr << a.file () << ":" << a.line () << ":" << a.column () + << ": error: attribute '" << xpath (a) << "' " + << "is of anonymous type" << endl; + } + } + else + Traversal::Attribute::traverse (a); + } + + private: + Boolean anonymous_error_issued_; + + Containers::Set<String> types_; + + Traversal::Sources sources_; + + Traversal::Names schema_names_; + Traversal::Namespace ns_; + + Traversal::Names names_; + }; + + struct GlobalElement: Traversal::Element, ValidationContext + { + GlobalElement (ValidationContext& c, SemanticGraph::Element*& element) + : ValidationContext (c), element_ (element) + { + } + + virtual Void + traverse (Type& e) + { + if (!valid) + return; + + if (options.value<CLI::root_element_first> ()) + { + if (element_ == 0) + element_ = &e; + } + else if (options.value<CLI::root_element_last> ()) + { + element_ = &e; + } + else if (String name = options.value<CLI::root_element> ()) + { + if (e.name () == name) + element_ = &e; + } + else + { + if (element_ == 0) + element_ = &e; + else + { + wcerr << schema_root.file () << ": error: unable to generate " + << "the test driver without a unique document root" + << endl; + + wcerr << schema_root.file () << ": info: use --root-element-* " + << "options to specify the document root" << endl; + + valid = false; + } + } + } + + private: + SemanticGraph::Element*& element_; + }; + + } + + Validator:: + Validator () + { + // Dummy ctor, helps with long symbols on HP-UX. + } + + Boolean Validator:: + validate (CLI::Options const& options, + SemanticGraph::Schema& root, + SemanticGraph::Path const& path, + Boolean gen_driver, + const WarningSet& disabled_warnings) + { + Boolean valid (true); + ValidationContext ctx (root, path, options, disabled_warnings, valid); + + // + // + if (options.value<CLI::char_type> () != "char" && + options.value<CLI::char_type> () != "wchar_t" && + !ctx.is_disabled ("P003")) + { + wcerr << "warning P003: unknown base character type '" << + options.value<CLI::char_type> ().c_str () << "'" << endl; + } + + // + // + if (options.value<CLI::xml_parser> () != "xerces" && + options.value<CLI::xml_parser> () != "expat" && + !ctx.is_disabled ("P004")) + { + wcerr << "warning P004: unknown underlying XML parser '" << + options.value<CLI::xml_parser> ().c_str () << "'" << endl; + } + + // + // + if (options.value<CLI::xml_parser> () == "expat" && + options.value<CLI::char_type> () == "wchar_t") + { + wcerr << "error: using expat with wchar_t is not supported" + << endl; + + return false; + } + + // + // + if (options.value<CLI::xml_parser> () == "expat" && + !options.value<CLI::char_encoding> ().empty () && + options.value<CLI::char_encoding> () != "utf8") + { + wcerr << "error: using expat with character encoding other than " + << "utf8 is not supported" + << endl; + + return false; + } + + // + // + if (options.value<CLI::generate_validation> () && + options.value<CLI::suppress_validation> ()) + { + wcerr << "error: mutually exclusive options specified: " + << "--generate-validation and --suppress-validation" + << endl; + + return false; + } + + // + // + if (options.value<CLI::generate_noop_impl> () && + options.value<CLI::generate_print_impl> ()) + { + wcerr << "error: mutually exclusive options specified: " + << "--generate-noop-impl and --generate-print-impl" + << endl; + + return false; + } + + // + // + { + Boolean ref (options.value<CLI::root_element_first> ()); + Boolean rel (options.value<CLI::root_element_last> ()); + Boolean re (options.value<CLI::root_element> ()); + + if ((ref && rel) || (ref && re) || (rel && re)) + { + wcerr << "error: mutually exclusive options specified: " + << "--root-element-last, --root-element-first, and " + << "--root-element" + << endl; + + return false; + } + } + + // + // + Boolean import_maps (options.value<CLI::import_maps> ()); + Boolean export_maps (options.value<CLI::export_maps> ()); + + if (import_maps && export_maps) + { + wcerr << "error: --import-maps and --export-maps are " + << "mutually exclusive" << endl; + + return false; + } + + if (import_maps && !ctx.polymorphic) + { + wcerr << "error: --import-maps can only be specified together with " + << "--generate-polymorphic" << endl; + + return false; + } + + if (export_maps && !ctx.polymorphic) + { + wcerr << "error: --export-maps can only be specified together with " + << "--generate-polymorphic" << endl; + + return false; + } + + // Test for anonymout types. + // + { + AnonymousType traverser (ctx); + traverser.dispatch (root); + } + + + // Test the rest. + // + if (valid) + { + Traverser traverser (ctx); + traverser.dispatch (root); + } + + // Test that the document root is unique. + // + if (valid && gen_driver) + { + SemanticGraph::Element* element (0); + + Traversal::Schema schema; + Traversal::Sources sources; + + schema >> sources >> schema; + + Traversal::Names schema_names; + Traversal::Namespace ns; + Traversal::Names ns_names; + GlobalElement global_element (ctx, element); + + schema >> schema_names >> ns >> ns_names >> global_element; + + schema.dispatch (root); + + if (valid && element == 0) + { + wcerr << root.file () << ": error: unable to generate the " + << "test driver without a global element (document root)" + << endl; + + valid = false; + } + } + + return valid; + } + } +} diff --git a/xsd/xsd/cxx/parser/validator.hxx b/xsd/xsd/cxx/parser/validator.hxx new file mode 100644 index 0000000..f519b05 --- /dev/null +++ b/xsd/xsd/cxx/parser/validator.hxx @@ -0,0 +1,35 @@ +// file : xsd/cxx/parser/validator.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef CXX_PARSER_VALIDATOR_HXX +#define CXX_PARSER_VALIDATOR_HXX + +#include <cxx/parser/elements.hxx> +#include <cxx/parser/cli.hxx> + +#include <xsd.hxx> + +namespace CXX +{ + namespace Parser + { + using namespace Cult::Types; + + class Validator + { + public: + Validator (); // Dummy ctor, helps with long symbols on HP-UX. + + Boolean + validate (CLI::Options const& options, + SemanticGraph::Schema&, + SemanticGraph::Path const& tu, + Boolean gen_driver, + const WarningSet& disabled_warnings); + }; + } +} + +#endif // CXX_PARSER_VALIDATOR_HXX diff --git a/xsd/xsd/cxx/tree/cli.hxx b/xsd/xsd/cxx/tree/cli.hxx new file mode 100644 index 0000000..171711d --- /dev/null +++ b/xsd/xsd/cxx/tree/cli.hxx @@ -0,0 +1,228 @@ +// file : xsd/cxx/tree/cli.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef CXX_TREE_CLI_HXX +#define CXX_TREE_CLI_HXX + +#include <cult/types.hxx> + +#include <cult/containers/vector.hxx> + +#include <cult/cli/options.hxx> +#include <cult/cli/options-spec.hxx> + +namespace CXX +{ + namespace Tree + { + namespace CLI + { + using namespace Cult::Types; + + typedef Char const Key[]; + + extern Key char_type; + extern Key char_encoding; + extern Key output_dir; + extern Key generate_polymorphic; + extern Key polymorphic_type; + extern Key polymorphic_type_all; + extern Key generate_serialization; + extern Key generate_inline; + extern Key generate_ostream; + extern Key generate_doxygen; + extern Key generate_comparison; + extern Key generate_default_ctor; + extern Key generate_from_base_ctor; + extern Key generate_detach; + extern Key generate_wildcard; + extern Key generate_insertion; + extern Key generate_extraction; + extern Key generate_forward; + extern Key generate_xml_schema; + extern Key extern_xml_schema; + extern Key suppress_parsing; + extern Key generate_element_type; + extern Key generate_element_map; + extern Key generate_intellisense; + extern Key omit_default_attributes; + extern Key namespace_map; + extern Key namespace_regex; + extern Key namespace_regex_trace; + extern Key reserved_name; + extern Key type_naming; + extern Key function_naming; + extern Key type_regex; + extern Key accessor_regex; + extern Key one_accessor_regex; + extern Key opt_accessor_regex; + extern Key seq_accessor_regex; + extern Key modifier_regex; + extern Key one_modifier_regex; + extern Key opt_modifier_regex; + extern Key seq_modifier_regex; + extern Key parser_regex; + extern Key serializer_regex; + extern Key enumerator_regex; + extern Key element_type_regex; + extern Key name_regex_trace; + extern Key include_with_brackets; + extern Key include_prefix; + extern Key include_regex; + extern Key include_regex_trace; + extern Key guard_prefix; + extern Key root_element_first; + extern Key root_element_last; + extern Key root_element_all; + extern Key root_element_none; + extern Key root_element; + extern Key custom_type; + extern Key custom_type_regex; + extern Key hxx_suffix; + extern Key ixx_suffix; + extern Key cxx_suffix; + extern Key fwd_suffix; + extern Key hxx_regex; + extern Key ixx_regex; + extern Key cxx_regex; + extern Key fwd_regex; + extern Key hxx_prologue; + extern Key ixx_prologue; + extern Key cxx_prologue; + extern Key fwd_prologue; + extern Key prologue; + extern Key hxx_epilogue; + extern Key ixx_epilogue; + extern Key cxx_epilogue; + extern Key fwd_epilogue; + extern Key epilogue; + extern Key hxx_prologue_file; + extern Key ixx_prologue_file; + extern Key cxx_prologue_file; + extern Key fwd_prologue_file; + extern Key prologue_file; + extern Key hxx_epilogue_file; + extern Key ixx_epilogue_file; + extern Key cxx_epilogue_file; + extern Key fwd_epilogue_file; + extern Key epilogue_file; + extern Key parts; + extern Key parts_suffix; + extern Key export_symbol; + extern Key export_xml_schema; + extern Key export_maps; + extern Key import_maps; + extern Key show_anonymous; + extern Key show_sloc; + extern Key proprietary_license; + extern Key disable_multi_import; // Undocumented. + + + typedef Cult::CLI::Options< + + char_type, NarrowString, + char_encoding, NarrowString, + output_dir, NarrowString, + generate_polymorphic, Boolean, + polymorphic_type, Cult::Containers::Vector<NarrowString>, + polymorphic_type_all, Boolean, + generate_serialization, Boolean, + generate_inline, Boolean, + generate_ostream, Boolean, + generate_doxygen, Boolean, + generate_comparison, Boolean, + generate_default_ctor, Boolean, + generate_from_base_ctor, Boolean, + generate_detach, Boolean, + generate_wildcard, Boolean, + generate_insertion, Cult::Containers::Vector<NarrowString>, + generate_extraction, Cult::Containers::Vector<NarrowString>, + generate_forward, Boolean, + generate_xml_schema, Boolean, + extern_xml_schema, NarrowString, + suppress_parsing, Boolean, + generate_element_type, Boolean, + generate_element_map, Boolean, + generate_intellisense, Boolean, + omit_default_attributes, Boolean, + namespace_map, Cult::Containers::Vector<NarrowString>, + namespace_regex, Cult::Containers::Vector<NarrowString>, + namespace_regex_trace, Boolean, + reserved_name, Cult::Containers::Vector<NarrowString>, + type_naming, NarrowString, + function_naming, NarrowString, + type_regex, Cult::Containers::Vector<NarrowString>, + accessor_regex, Cult::Containers::Vector<NarrowString>, + one_accessor_regex, Cult::Containers::Vector<NarrowString>, + opt_accessor_regex, Cult::Containers::Vector<NarrowString>, + seq_accessor_regex, Cult::Containers::Vector<NarrowString>, + modifier_regex, Cult::Containers::Vector<NarrowString>, + one_modifier_regex, Cult::Containers::Vector<NarrowString>, + opt_modifier_regex, Cult::Containers::Vector<NarrowString>, + seq_modifier_regex, Cult::Containers::Vector<NarrowString>, + parser_regex, Cult::Containers::Vector<NarrowString>, + serializer_regex, Cult::Containers::Vector<NarrowString>, + enumerator_regex, Cult::Containers::Vector<NarrowString>, + element_type_regex, Cult::Containers::Vector<NarrowString>, + name_regex_trace, Boolean, + include_with_brackets, Boolean, + include_prefix, NarrowString, + include_regex, Cult::Containers::Vector<NarrowString>, + include_regex_trace, Boolean, + guard_prefix, NarrowString, + root_element_first, Boolean, + root_element_last, Boolean, + root_element_all, Boolean, + root_element_none, Boolean, + root_element, Cult::Containers::Vector<NarrowString>, + custom_type, Cult::Containers::Vector<NarrowString>, + custom_type_regex, Cult::Containers::Vector<NarrowString>, + hxx_suffix, NarrowString, + ixx_suffix, NarrowString, + cxx_suffix, NarrowString, + fwd_suffix, NarrowString, + hxx_regex, NarrowString, + ixx_regex, NarrowString, + cxx_regex, NarrowString, + fwd_regex, NarrowString, + hxx_prologue, Cult::Containers::Vector<NarrowString>, + ixx_prologue, Cult::Containers::Vector<NarrowString>, + cxx_prologue, Cult::Containers::Vector<NarrowString>, + fwd_prologue, Cult::Containers::Vector<NarrowString>, + prologue, Cult::Containers::Vector<NarrowString>, + hxx_epilogue, Cult::Containers::Vector<NarrowString>, + ixx_epilogue, Cult::Containers::Vector<NarrowString>, + cxx_epilogue, Cult::Containers::Vector<NarrowString>, + fwd_epilogue, Cult::Containers::Vector<NarrowString>, + epilogue, Cult::Containers::Vector<NarrowString>, + hxx_prologue_file, NarrowString, + ixx_prologue_file, NarrowString, + cxx_prologue_file, NarrowString, + fwd_prologue_file, NarrowString, + prologue_file, NarrowString, + hxx_epilogue_file, NarrowString, + ixx_epilogue_file, NarrowString, + cxx_epilogue_file, NarrowString, + fwd_epilogue_file, NarrowString, + epilogue_file, NarrowString, + parts, UnsignedLong, + parts_suffix, NarrowString, + export_symbol, NarrowString, + export_xml_schema, Boolean, + export_maps, Boolean, + import_maps, Boolean, + show_anonymous, Boolean, + show_sloc, Boolean, + proprietary_license, Boolean, + disable_multi_import, Boolean + + > Options; + + struct OptionsSpec: Cult::CLI::OptionsSpec<Options> {}; + } + } +} + +#endif // CXX_TREE_CLI_HXX diff --git a/xsd/xsd/cxx/tree/counter.cxx b/xsd/xsd/cxx/tree/counter.cxx new file mode 100644 index 0000000..9254226 --- /dev/null +++ b/xsd/xsd/cxx/tree/counter.cxx @@ -0,0 +1,267 @@ +// file : xsd/cxx/tree/counter.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <cxx/tree/counter.hxx> + +#include <iostream> + +namespace CXX +{ + namespace Tree + { + namespace + { + struct Member: Traversal::Member + { + Member (UnsignedLong& complexity) + : complexity_ (complexity) + { + } + + virtual Void + traverse (Type&) + { + complexity_++; + } + + UnsignedLong& complexity_; + }; + + struct Any: Traversal::Any, Traversal::AnyAttribute + { + Any (UnsignedLong& complexity) + : complexity_ (complexity) + { + } + + virtual Void + traverse (SemanticGraph::Any&) + { + complexity_++; + } + + virtual Void + traverse (SemanticGraph::AnyAttribute&) + { + complexity_++; + } + + UnsignedLong& complexity_; + }; + + struct TypeBase: Traversal::List, + Traversal::Union, + Traversal::Enumeration, + Traversal::Complex, + Context + { + TypeBase (Context& c, UnsignedLong& complexity) + : Context (c), complexity_ (complexity) + { + } + + virtual Void + traverse (SemanticGraph::List&) + { + complexity_++; + } + + virtual Void + traverse (SemanticGraph::Union&) + { + complexity_++; + } + + virtual Void + traverse (SemanticGraph::Enumeration& e) + { + Boolean string_based (false); + { + IsStringBasedType t (string_based); + t.dispatch (e); + } + + complexity_ += (string_based ? 1 : 2); + } + + virtual Void + traverse (SemanticGraph::Complex& c) + { + complexity_++; // One for the type itself. + + // Plus some for each member. + // + Any any (complexity_); + Member member (complexity_); + Traversal::Names names; + + names >> member; + + if (options.value<CLI::generate_wildcard> ()) + names >> any; + + Complex::names (c, names); + } + + private: + UnsignedLong& complexity_; + }; + + + // + // + struct GlobalType: Traversal::Type, Context + + { + GlobalType (Context& c, Counts& counts) + : Context (c), counts_ (counts) + { + } + + virtual Void + traverse (SemanticGraph::Type& t) + { + counts_.global_types++; + + UnsignedLong complexity (0); + TypeBase type (*this, complexity); + type.dispatch (t); + + counts_.complexity_total += complexity; + counts_.complexity.push_back (complexity); + } + + private: + Counts& counts_; + }; + + // + // + struct GlobalElement: Traversal::Element, + GlobalElementBase, + Context + { + GlobalElement (Context& c, Counts& counts) + : GlobalElementBase (c), + Context (c), + counts_ (counts), + last_ (0) + { + } + + ~GlobalElement () + { + if (last_ != 0) + { + last_->context ().set ("last", true); + count_last (); + } + } + + virtual Void + traverse (Type& e) + { + // Check if the previous element we saw needs to be generated. + // + if (last_ != 0) + count_last (); + + last_ = &e; + + if (counts_.global_elements == 0) + e.context ().set ("first", true); + + counts_.global_elements++; + } + + private: + Void + count_last () + { + if (generate_p (*last_)) + { + counts_.generated_global_elements++; + + UnsignedLong complexity (0); + + if (doc_root_p (*last_)) + { + if (options.value<CLI::generate_element_type> ()) + { + complexity += 1; // For c-tors and d-tor. + + if (!options.value<CLI::suppress_parsing> ()) + complexity += 1; + + if (options.value<CLI::generate_serialization> ()) + complexity += 1; + } + else + { + if (!options.value<CLI::suppress_parsing> ()) + complexity += 6; // 13 parsing functions. + + if (options.value<CLI::generate_serialization> ()) + complexity += 4; // 8 serialization functions. + } + } + + if (complexity == 0) + { + // This element must be a substitution group members. For + // such elements we are only generating an entry in a map. + // We will assign it a complexity of 1 so that we don't + // end up with the total complexity that is less than the + // number of elements and types. + // + complexity = 1; + } + + counts_.complexity_total += complexity; + counts_.complexity.push_back (complexity); + } + } + + private: + Counts& counts_; + SemanticGraph::Element* last_; + }; + } + + Counter:: + Counter () + { + } + + Counts Counter:: + count (CLI::Options const& options, + SemanticGraph::Schema& tu, + SemanticGraph::Path const& path) + { + Counts counts; + Context ctx (std::wcerr, tu, path, options, counts, false, 0, 0, 0, 0); + + Traversal::Schema schema; + Traversal::Sources sources; + + schema >> sources >> schema; + + Traversal::Names schema_names; + Traversal::Namespace ns; + Traversal::Names ns_names; + GlobalType global_type (ctx, counts); + GlobalElement global_element (ctx, counts); + + schema >> schema_names >> ns >> ns_names; + + ns_names >> global_element; + ns_names >> global_type; + + schema.dispatch (tu); + + return counts; + } + } +} diff --git a/xsd/xsd/cxx/tree/counter.hxx b/xsd/xsd/cxx/tree/counter.hxx new file mode 100644 index 0000000..726de47 --- /dev/null +++ b/xsd/xsd/cxx/tree/counter.hxx @@ -0,0 +1,29 @@ +// file : xsd/cxx/tree/counter.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef CXX_TREE_COUNTER_HXX +#define CXX_TREE_COUNTER_HXX + +#include <cxx/tree/elements.hxx> +#include <cxx/tree/cli.hxx> + +namespace CXX +{ + namespace Tree + { + class Counter + { + public: + Counter (); // Dummy ctor, helps with long symbols on HP-UX. + + Counts + count (CLI::Options const&, + SemanticGraph::Schema&, + SemanticGraph::Path const&); + }; + } +} + +#endif // CXX_TREE_COUNTER_HXX diff --git a/xsd/xsd/cxx/tree/default-value.cxx b/xsd/xsd/cxx/tree/default-value.cxx new file mode 100644 index 0000000..ff964d3 --- /dev/null +++ b/xsd/xsd/cxx/tree/default-value.cxx @@ -0,0 +1,1256 @@ +// file : xsd/cxx/tree/default-value.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <cxx/tree/default-value.hxx> + +using std::hex; + +namespace CXX +{ + namespace Tree + { + namespace + { + Void + normalize (String& s) + { + Size n (s.size ()); + + for (Size i (0); i < n; ++i) + { + WideChar& c (s[i]); + + if (c == 0x0D || // carriage return + c == 0x09 || // tab + c == 0x0A) + c = 0x20; + } + } + + Void + collapse (String& s) + { + Size n (s.size ()), j (0); + Boolean subs (false), trim (true); + + for (Size i (0); i < n; ++i) + { + WideChar c (s[i]); + + if (c == 0x20 || c == 0x09 || c == 0x0A) + subs = true; + else + { + if (subs) + { + subs = false; + + if (!trim) + s[j++] = 0x20; + } + + if (trim) + trim = false; + + s[j++] = c; + } + } + + s.resize (j); + } + + Void + strip_zeros (String& s) + { + Size n (s.size ()), i (0); + + if (n > 0 && (s[i] == '-' || s[i] == '+')) + i++; + + Size j (i); + + Boolean strip (true); + + for (; i < n; ++i) + { + WideChar c (s[i]); + + if (c == '0') + { + if (!strip) + s[j++] = c; + } + else + { + s[j++] = c; + + if (strip) + strip = false; + } + } + + if (strip && j < n) + s[j++] = '0'; // There was nothing except zeros so add one back. + + s.resize (j); + } + + Void + make_float (String& s) + { + if (s.find ('.') == String::npos && + s.find ('e') == String::npos && + s.find ('E') == String::npos) + s += L".0"; + } + } + + // + // IsLiteralValue + // + + IsLiteralValue:: + IsLiteralValue (Boolean& r) + : IsFundamentalType (r) + { + *this >> inherits_ >> *this; + } + + Void IsLiteralValue:: + traverse (SemanticGraph::Complex& c) + { + inherits (c); + } + + // + // LiteralValue + // + + LiteralValue:: + LiteralValue (Context& c) + : Context (c) + { + *this >> inherits_ >> *this; + } + + String LiteralValue:: + dispatch (SemanticGraph::Node& type, String const& value) + { + literal_.clear (); + value_ = value; + Traversal::NodeBase::dispatch (type); + return literal_; + } + + Void LiteralValue:: + traverse (SemanticGraph::Complex& c) + { + inherits (c); + } + + // Boolean. + // + Void LiteralValue:: + traverse (SemanticGraph::Fundamental::Boolean&) + { + collapse (value_); + literal_ = (value_ == L"true" || value_ == L"1") ? L"true" : L"false"; + } + + // Integral types. + // + Void LiteralValue:: + traverse (SemanticGraph::Fundamental::Byte&) + { + collapse (value_); + strip_zeros (value_); + literal_ = value_; + } + + Void LiteralValue:: + traverse (SemanticGraph::Fundamental::UnsignedByte&) + { + collapse (value_); + strip_zeros (value_); + literal_ = value_; + } + + Void LiteralValue:: + traverse (SemanticGraph::Fundamental::Short&) + { + collapse (value_); + strip_zeros (value_); + literal_ = value_; + } + + Void LiteralValue:: + traverse (SemanticGraph::Fundamental::UnsignedShort&) + { + collapse (value_); + strip_zeros (value_); + literal_ = value_; + } + + Void LiteralValue:: + traverse (SemanticGraph::Fundamental::Int&) + { + collapse (value_); + strip_zeros (value_); + literal_ = value_; + } + + Void LiteralValue:: + traverse (SemanticGraph::Fundamental::UnsignedInt&) + { + collapse (value_); + strip_zeros (value_); + literal_ = value_; + } + + Void LiteralValue:: + traverse (SemanticGraph::Fundamental::Long&) + { + collapse (value_); + strip_zeros (value_); + literal_ = value_; + literal_ += L"LL"; + } + + Void LiteralValue:: + traverse (SemanticGraph::Fundamental::UnsignedLong&) + { + collapse (value_); + strip_zeros (value_); + literal_ = value_; + literal_ += L"ULL"; + } + + Void LiteralValue:: + traverse (SemanticGraph::Fundamental::Integer&) + { + collapse (value_); + strip_zeros (value_); + literal_ = value_ + L"LL"; + } + + Void LiteralValue:: + traverse (SemanticGraph::Fundamental::NonPositiveInteger&) + { + collapse (value_); + strip_zeros (value_); + literal_ = value_ + L"LL"; + } + + Void LiteralValue:: + traverse (SemanticGraph::Fundamental::NonNegativeInteger&) + { + collapse (value_); + strip_zeros (value_); + literal_ = value_ + L"ULL"; + } + + Void LiteralValue:: + traverse (SemanticGraph::Fundamental::PositiveInteger&) + { + collapse (value_); + strip_zeros (value_); + literal_ = value_ + L"ULL"; + } + + Void LiteralValue:: + traverse (SemanticGraph::Fundamental::NegativeInteger&) + { + collapse (value_); + strip_zeros (value_); + literal_ = value_ + L"LL"; + } + + // Floats. + // + Void LiteralValue:: + traverse (SemanticGraph::Fundamental::Float& t) + { + collapse (value_); + + if (value_ == L"NaN") + { + literal_ = L"::std::numeric_limits< " + fq_name (t) + + L" >::quiet_NaN ()"; + } + else if (value_ == L"INF") + { + literal_ = L"::std::numeric_limits< " + fq_name (t) + + L" >::infinity ()"; + } + else if (value_ == L"-INF") + { + literal_ = L"- ::std::numeric_limits< " + fq_name (t) + + L" >::infinity ()"; + } + else + { + strip_zeros (value_); + make_float (value_); + literal_ = value_ + L"F"; + } + } + + Void LiteralValue:: + traverse (SemanticGraph::Fundamental::Double& t) + { + collapse (value_); + + if (value_ == L"NaN") + { + literal_ = L"::std::numeric_limits< " + fq_name (t) + + L" >::quiet_NaN ()"; + } + else if (value_ == L"INF") + { + literal_ = L"::std::numeric_limits< " + fq_name (t) + + L" >::infinity ()"; + } + else if (value_ == L"-INF") + { + literal_ = L"- ::std::numeric_limits< " + fq_name (t) + + L" >::infinity ()"; + } + else + { + strip_zeros (value_); + make_float (value_); + literal_ = value_; + } + } + + Void LiteralValue:: + traverse (SemanticGraph::Fundamental::Decimal&) + { + collapse (value_); + strip_zeros (value_); + make_float (value_); + literal_ = value_; + } + + // + // InitKind + // + + InitKind:: + InitKind (Kind& r) + : r_ (r) + { + *this >> inherits_ >> *this; + } + + Void InitKind:: + traverse (SemanticGraph::List&) + { + r_ = function; + } + + Void InitKind:: + traverse (SemanticGraph::Complex& c) + { + inherits (c); + } + + Void InitKind:: + traverse (SemanticGraph::Fundamental::Base64Binary&) + { + r_ = data; + } + + Void InitKind:: + traverse (SemanticGraph::Fundamental::HexBinary&) + { + r_ = data; + } + + Void InitKind:: + traverse (SemanticGraph::Fundamental::NameTokens&) + { + r_ = function; + } + + Void InitKind:: + traverse (SemanticGraph::Fundamental::IdRefs&) + { + r_ = function; + } + + Void InitKind:: + traverse (SemanticGraph::Fundamental::Entities&) + { + r_ = function; + } + + // + // InitValue + // + + InitValue:: + InitValue (Context& c) + : Context (c), type_name_ (c), literal_value_ (c) + { + } + + Void InitValue:: + dispatch (SemanticGraph::Node& type, String const& value) + { + value_ = value; + Traversal::NodeBase::dispatch (type); + } + + Void InitValue:: + traverse (SemanticGraph::List& l) + { + collapse (value_); + + if (!value_) + return; + + SemanticGraph::Type& t (l.argumented ().type ()); + + String ov (value_); + Size b (0); + + for (Size e (ov.find (' ')); ; e = ov.find (' ', b)) + { + String v (ov, b, e != String::npos ? e - b : e); + + os << "{"; + type_name_.dispatch (t); + os << " tmp ("; + + String lit (literal_value_.dispatch (t, v)); + + if (lit) + os << lit; + else + { + value_ = v; + Traversal::NodeBase::dispatch (t); + } + + os << ");" + << "r.push_back (tmp);" + << "}"; + + if (e == String::npos) + break; + + b = e + 1; + } + + value_ = ov; + } + + Void InitValue:: + traverse (SemanticGraph::Union&) + { + os << strlit (value_); + } + + Void InitValue:: + traverse (SemanticGraph::Complex& c) + { + Traversal::NodeBase::dispatch (ultimate_base (c)); + } + + // anySimpleType. + // + Void InitValue:: + traverse (SemanticGraph::AnySimpleType& t) + { + os << fq_name (t) << " (" << strlit (value_) << ")"; + } + + // Strings. + // + Void InitValue:: + traverse (SemanticGraph::Fundamental::String&) + { + os << strlit (value_); + } + + Void InitValue:: + traverse (SemanticGraph::Fundamental::NormalizedString&) + { + normalize (value_); + os << strlit (value_); + } + + Void InitValue:: + traverse (SemanticGraph::Fundamental::Token&) + { + collapse (value_); + os << strlit (value_); + } + + Void InitValue:: + traverse (SemanticGraph::Fundamental::NameToken&) + { + collapse (value_); + os << strlit (value_); + } + + Void InitValue:: + traverse (SemanticGraph::Fundamental::NameTokens&) + { + string_sequence_type ( + dynamic_cast<SemanticGraph::Type&> ( + xs_ns ().find ("NMTOKEN").first->named ())); + } + + Void InitValue:: + traverse (SemanticGraph::Fundamental::Name&) + { + collapse (value_); + os << strlit (value_); + } + + Void InitValue:: + traverse (SemanticGraph::Fundamental::NCName&) + { + collapse (value_); + os << strlit (value_); + } + + Void InitValue:: + traverse (SemanticGraph::Fundamental::Language&) + { + collapse (value_); + os << strlit (value_); + } + + // Qualified name. + // + Void InitValue:: + traverse (SemanticGraph::Fundamental::QName& t) + { + Size p (value_.rfind ('#')); + + if (p != String::npos) + { + String ns (value_, 0, p); + String qname (value_, p + 1, String::npos); + + collapse (ns); + collapse (qname); + + p = qname.find (':'); + + String name; + if (p != String::npos) + name.assign (qname, p + 1, String::npos); + else + name = qname; + + os << fq_name (t) << " (" << strlit (ns) << ", " << + strlit (name) << ")"; + } + else + { + // Unqualified name. + // + collapse (value_); + os << fq_name (t) << " (" << strlit (value_) << ")"; + } + } + + // ID/IDREF. + // + Void InitValue:: + traverse (SemanticGraph::Fundamental::Id&) + { + collapse (value_); + os << strlit (value_); + } + + Void InitValue:: + traverse (SemanticGraph::Fundamental::IdRef&) + { + collapse (value_); + os << strlit (value_); + } + + Void InitValue:: + traverse (SemanticGraph::Fundamental::IdRefs&) + { + string_sequence_type ( + dynamic_cast<SemanticGraph::Type&> ( + xs_ns ().find ("IDREF").first->named ())); + } + + // URI. + // + Void InitValue:: + traverse (SemanticGraph::Fundamental::AnyURI&) + { + collapse (value_); + os << strlit (value_); + } + + // Binary. + // + static unsigned char + base64_decode (unsigned char c) + { + unsigned char r = 0xFF; + + if (c >= 'A' && c <= 'Z') + r = static_cast<unsigned char> (c - 'A'); + else if (c >= 'a' && c <= 'z') + r = static_cast<unsigned char> (c - 'a' + 26); + else if (c >= '0' && c <= '9') + r = static_cast<unsigned char> (c - '0' + 52); + else if (c == '+') + r = 62; + else if (c == '/') + r = 63; + + return r; + } + + Void InitValue:: + traverse (SemanticGraph::Fundamental::Base64Binary& t) + { + collapse (value_); + + if (dispatch_count_++ == 0) + { + if (value_) + { + os << "unsigned char " << data_ << "[] = {"; + + // Decode. + // + Size size (value_.size ()); + + // Remove all whitespaces. + // + { + Size j (0); + Boolean subs (false); + + for (Size i (0); i < size; ++i) + { + WideChar c (value_[i]); + + if (c == 0x20 || c == 0x0A || c == 0x0D || c == 0x09) + subs = true; + else + { + if (subs) + subs = false; + + value_[j++] = c; + } + } + + size = j; + value_.resize (size, '\0'); + } + + // Our length should be a multiple of four. + // + Size quad_count (size / 4); + + // Source and destination indexes. + // + Size si (0), di (0); + + // Process all quads except the last one. + // + unsigned short v; + unsigned char b1, b2, b3, b4; + + WideChar prev_fill (os.fill ('0')); + + for (Size q (0); q < quad_count - 1; ++q) + { + b1 = base64_decode (value_[si++]); + b2 = base64_decode (value_[si++]); + b3 = base64_decode (value_[si++]); + b4 = base64_decode (value_[si++]); + + if (q != 0) + os << ", "; + + if (di % 9 == 0) + os << endl; + + v = static_cast<unsigned char> ((b1 << 2) | (b2 >> 4)); + os.width (2); + os << "0x" << hex << v; + + v = static_cast<unsigned char> ((b2 << 4) | (b3 >> 2)); + os.width (2); + os << ", 0x" << hex << v; + + v = static_cast<unsigned char> ((b3 << 6) | b4); + os.width (2); + os << ", 0x" << hex << v; + + di += 3; + } + + // Process the last quad. The first two octets are always there. + // + b1 = base64_decode (value_[si++]); + b2 = base64_decode (value_[si++]); + + WideChar e3 (value_[si++]), e4 (value_[si++]); + + if (quad_count != 1) + os << ", "; + + if (di % 9 == 0) + os << endl; + + if (e4 == '=') + { + if (e3 == '=') + { + // Two pads. Last 4 bits in b2 should be zero. + // + v = static_cast<unsigned char> ((b1 << 2) | (b2 >> 4)); + os << "0x" << hex << v; + di++; + } + else + { + // One pad. Last 2 bits in b3 should be zero. + // + b3 = base64_decode (e3); + + v = static_cast<unsigned char> ((b1 << 2) | (b2 >> 4)); + os.width (2); + os << "0x" << hex << v; + + v = static_cast<unsigned char> ((b2 << 4) | (b3 >> 2)); + os.width (2); + os << ", 0x" << hex << v; + + di += 2; + } + } + else + { + // No pads. + // + b3 = base64_decode (e3); + b4 = base64_decode (e4); + + v = static_cast<unsigned char> ((b1 << 2) | (b2 >> 4)); + os.width (2); + os << "0x" << hex << v; + + v = static_cast<unsigned char> ((b2 << 4) | (b3 >> 2)); + os.width (2); + os << ", 0x" << hex << v; + + v = static_cast<unsigned char> ((b3 << 6) | b4); + os.width (2); + os << ", 0x" << hex << v; + + di += 3; + } + + os.fill (prev_fill); + + os << "};"; + } + } + else + { + os << fq_name (t) << " ("; + + if (value_) + os << data_ << "," << endl + << "sizeof (" << data_ << ")," << endl + << "sizeof (" << data_ << ")," << endl + << "false"; + else + os << "0"; + + + os << ")"; + } + } + + static unsigned char + hex_decode (unsigned char c) + { + unsigned char r = 0xFF; + + if (c >= '0' && c <= '9') + r = static_cast<unsigned char> (c - '0'); + else if (c >= 'A' && c <= 'F') + r = static_cast<unsigned char> (10 + (c - 'A')); + else if (c >= 'a' && c <= 'f') + r = static_cast<unsigned char> (10 + (c - 'a')); + + return r; + } + + Void InitValue:: + traverse (SemanticGraph::Fundamental::HexBinary& t) + { + collapse (value_); + + if (dispatch_count_++ == 0) + { + if (value_) + { + os << "unsigned char " << data_ << "[] = {"; + + // Decode. + // + Size n (value_.size () / 2); + WideChar prev_fill (os.fill ('0')); + + for (Size i (0); i < n; ++i) + { + unsigned char h (hex_decode (value_[2 * i])); + unsigned char l (hex_decode (value_[2 * i + 1])); + + if (h == 0xFF || l == 0xFF) + break; + + if (i != 0) + os << ", "; + + if (i % 9 == 0) + os << endl; + + unsigned short v = static_cast<unsigned char> ((h << 4) | l); + os.width (2); + os << "0x" << hex << v; + } + + os.fill (prev_fill); + + os << "};"; + } + } + else + { + os << fq_name (t) << " ("; + + if (value_) + os << data_ << "," << endl + << "sizeof (" << data_ << ")," << endl + << "sizeof (" << data_ << ")," << endl + << "false"; + else + os << "0"; + + + os << ")"; + } + } + + // Date/time. + // + Void InitValue:: + traverse (SemanticGraph::Fundamental::Date& t) + { + // date := [-]CCYY[N]*-MM-DD[Z|(+|-)HH:MM] + // + collapse (value_); + + Size b (0); + Size e (value_.find ('-', value_[0] == '-' ? 5 : 4)); + String year (value_, 0, e); + + b = e + 1; + String month (value_, b, 2); + + b += 3; + String day (value_, b, 2); + + strip_zeros (year); + strip_zeros (month); + strip_zeros (day); + + os << fq_name (t) << " (" << year << ", " << month << ", " << day; + time_zone (b + 2); + os << ")"; + } + + Void InitValue:: + traverse (SemanticGraph::Fundamental::DateTime& t) + { + // date_time := [-]CCYY[N]*-MM-DDTHH:MM:SS[.S+][Z|(+|-)HH:MM] + // + collapse (value_); + + Size b (0); + Size e (value_.find ('-', value_[0] == '-' ? 5 : 4)); + String year (value_, 0, e); + b = e + 1; + + String month (value_, b, 2); + b += 3; + + String day (value_, b, 2); + b += 3; + + String hours (value_, b, 2); + b += 3; + + String minutes (value_, b, 2); + b += 3; + + e = b + 2; + for (; e < value_.size (); ++e) + { + WideChar c (value_[e]); + + if (c == 'Z' || c == '+' || c == '-') + break; + } + + String seconds (value_, b, e - b); + + strip_zeros (year); + strip_zeros (month); + strip_zeros (day); + strip_zeros (hours); + strip_zeros (minutes); + strip_zeros (seconds); + make_float (seconds); + + os << fq_name (t) << " (" + << year << ", " << month << ", " << day << ", " + << hours << ", " << minutes << ", " << seconds; + time_zone (e); + os << ")"; + } + + namespace + { + Size + find_delim (String const& s, Size pos) + { + for (; pos < s.size (); ++pos) + { + WideChar c (s[pos]); + + if (c == 'Y' || c == 'D' || c == 'M' || c == 'H' || + c == 'M' || c == 'S' || c == 'T') + break; + } + + return pos; + } + } + + Void InitValue:: + traverse (SemanticGraph::Fundamental::Duration& t) + { + // duration := [-]P[nY][nM][nD][TnHnMn[.n+]S] + // + collapse (value_); + + Size b (1), e, n (value_.size ()); + + os << fq_name (t) << " ("; + + if (value_[0] == '-') + { + os << "true, "; + b++; + } + else + os << "false, "; + + e = find_delim (value_, b); + + if (e < n && value_[e] == 'Y') + { + String v (value_, b, e - b); + strip_zeros (v); + os << v << ", "; + + b = e + 1; + e = find_delim (value_, b); + } + else + os << "0, "; + + if (e < n && value_[e] == 'M') + { + String v (value_, b, e - b); + strip_zeros (v); + os << v << ", "; + + b = e + 1; + e = find_delim (value_, b); + } + else + os << "0, "; + + if (e < n && value_[e] == 'D') + { + String v (value_, b, e - b); + strip_zeros (v); + os << v << ", "; + + b = e + 1; + e = find_delim (value_, b); + } + else + os << "0, "; + + if (e < n && value_[e] == 'T') + { + b = e + 1; + e = find_delim (value_, b); + } + + if (e < n && value_[e] == 'H') + { + String v (value_, b, e - b); + strip_zeros (v); + os << v << ", "; + + b = e + 1; + e = find_delim (value_, b); + } + else + os << "0, "; + + if (e < n && value_[e] == 'M') + { + String v (value_, b, e - b); + strip_zeros (v); + os << v << ", "; + + b = e + 1; + e = find_delim (value_, b); + } + else + os << "0, "; + + if (e < n && value_[e] == 'S') + { + String v (value_, b, e - b); + strip_zeros (v); + make_float (v); + os << v; + + b = e + 1; + e = find_delim (value_, b); + } + else + os << "0.0"; + + os << ")"; + } + + Void InitValue:: + traverse (SemanticGraph::Fundamental::Day& t) + { + // gday := ---DD[Z|(+|-)HH:MM] + // + collapse (value_); + + String day (value_, 3, 2); + strip_zeros (day); + + os << fq_name (t) << " (" << day; + time_zone (5); + os << ")"; + } + + Void InitValue:: + traverse (SemanticGraph::Fundamental::Month& t) + { + // gmonth := --MM[Z|(+|-)HH:MM] + // + collapse (value_); + + String month (value_, 2, 2); + strip_zeros (month); + + os << fq_name (t) << " (" << month; + time_zone (4); + os << ")"; + } + + Void InitValue:: + traverse (SemanticGraph::Fundamental::MonthDay& t) + { + // gmonth_day := --MM-DD[Z|(+|-)HH:MM] + // + collapse (value_); + + String month (value_, 2, 2); + String day (value_, 5, 2); + + strip_zeros (month); + strip_zeros (day); + + os << fq_name (t) << " (" << month << ", " << day; + time_zone (7); + os << ")"; + } + + Void InitValue:: + traverse (SemanticGraph::Fundamental::Year& t) + { + // gyear := [-]CCYY[N]*[Z|(+|-)HH:MM] + // + collapse (value_); + + Size pos (value_[0] == '-' ? 5 : 4); + for (; pos < value_.size (); ++pos) + { + WideChar c (value_[pos]); + + if (c == 'Z' || c == '+' || c == '-') + break; + } + + String year (value_, 0, pos); + strip_zeros (year); + + os << fq_name (t) << " (" << year; + time_zone (pos); + os << ")"; + } + + Void InitValue:: + traverse (SemanticGraph::Fundamental::YearMonth& t) + { + // gyear_month := [-]CCYY[N]*-MM[Z|(+|-)HH:MM] + // + collapse (value_); + + Size pos (value_.find ('-', value_[0] == '-' ? 5 : 4)); + + String year (value_, 0, pos); + String month (value_, pos + 1, 2); + + strip_zeros (year); + strip_zeros (month); + + os << fq_name (t) << " (" << year << ", " << month; + time_zone (pos + 3); + os << ")"; + } + + Void InitValue:: + traverse (SemanticGraph::Fundamental::Time& t) + { + // time := HH:MM:SS[.S+][Z|(+|-)HH:MM] + // + collapse (value_); + + String hours (value_, 0, 2); + String minutes (value_, 3, 2); + + Size e (8); + for (; e < value_.size (); ++e) + { + WideChar c (value_[e]); + + if (c == 'Z' || c == '+' || c == '-') + break; + } + + String seconds (value_, 6, e - 6); + + strip_zeros (hours); + strip_zeros (minutes); + strip_zeros (seconds); + make_float (seconds); + + os << fq_name (t) << " (" << hours << ", " << minutes << ", " << seconds; + time_zone (e); + os << ")"; + } + + Void InitValue:: + time_zone (Size pos) + { + // time_zone := Z|(+|-)HH:MM + // + if (pos < value_.size ()) + { + String h, m; + + if (value_[pos] == 'Z') + { + h = "0"; + m = "0"; + } + else + { + if (value_[pos] == '-') + { + h = "-"; + m = "-"; + } + + h.append (value_, pos + 1, 2); + m.append (value_, pos + 4, 2); + + strip_zeros (h); + strip_zeros (m); + } + + os << ", " << h << ", " << m; + } + } + + // Entity. + // + Void InitValue:: + traverse (SemanticGraph::Fundamental::Entity&) + { + collapse (value_); + os << strlit (value_); + } + + Void InitValue:: + traverse (SemanticGraph::Fundamental::Entities&) + { + string_sequence_type ( + dynamic_cast<SemanticGraph::Type&> ( + xs_ns ().find ("ENTITY").first->named ())); + } + + Void InitValue:: + string_sequence_type (SemanticGraph::Type& t) + { + collapse (value_); + + if (!value_) + return; + + Size b (0); + + for (Size e (value_.find (' ')); ; e = value_.find (' ', b)) + { + String v (value_, b, e != String::npos ? e - b : e); + + os << "{"; + type_name_.dispatch (t); + os << " tmp (" << strlit (v) << ");" + << "r.push_back (tmp);" + << "}"; + + if (e == String::npos) + break; + + b = e + 1; + } + } + } +} diff --git a/xsd/xsd/cxx/tree/default-value.hxx b/xsd/xsd/cxx/tree/default-value.hxx new file mode 100644 index 0000000..c80132e --- /dev/null +++ b/xsd/xsd/cxx/tree/default-value.hxx @@ -0,0 +1,353 @@ +// file : xsd/cxx/tree/default-value.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef CXX_TREE_DEFAULT_VALUE_HXX +#define CXX_TREE_DEFAULT_VALUE_HXX + +#include <xsd-frontend/semantic-graph.hxx> +#include <xsd-frontend/traversal.hxx> + +#include <cxx/tree/elements.hxx> + +namespace CXX +{ + namespace Tree + { + struct IsLiteralValue: IsFundamentalType, Traversal::Complex + { + IsLiteralValue (Boolean& r); + + virtual Void + traverse (SemanticGraph::Complex&); + + private: + Traversal::Inherits inherits_; + }; + + struct LiteralValue: Traversal::Fundamental::Byte, + Traversal::Fundamental::UnsignedByte, + Traversal::Fundamental::Short, + Traversal::Fundamental::UnsignedShort, + Traversal::Fundamental::Int, + Traversal::Fundamental::UnsignedInt, + Traversal::Fundamental::Long, + Traversal::Fundamental::UnsignedLong, + Traversal::Fundamental::Integer, + Traversal::Fundamental::NonPositiveInteger, + Traversal::Fundamental::NonNegativeInteger, + Traversal::Fundamental::PositiveInteger, + Traversal::Fundamental::NegativeInteger, + + Traversal::Fundamental::Boolean, + + Traversal::Fundamental::Float, + Traversal::Fundamental::Double, + Traversal::Fundamental::Decimal, + + Traversal::Complex, + + Context + { + LiteralValue (Context&); + + String + dispatch (SemanticGraph::Node& type, String const& value); + + // Handle inheritance. + // + virtual Void + traverse (SemanticGraph::Complex&); + + // Boolean. + // + virtual Void + traverse (SemanticGraph::Fundamental::Boolean&); + + // Integral types. + // + virtual Void + traverse (SemanticGraph::Fundamental::Byte&); + + virtual Void + traverse (SemanticGraph::Fundamental::UnsignedByte&); + + virtual Void + traverse (SemanticGraph::Fundamental::Short&); + + virtual Void + traverse (SemanticGraph::Fundamental::UnsignedShort&); + + virtual Void + traverse (SemanticGraph::Fundamental::Int&); + + virtual Void + traverse (SemanticGraph::Fundamental::UnsignedInt&); + + virtual Void + traverse (SemanticGraph::Fundamental::Long&); + + virtual Void + traverse (SemanticGraph::Fundamental::UnsignedLong&); + + virtual Void + traverse (SemanticGraph::Fundamental::Integer&); + + virtual Void + traverse (SemanticGraph::Fundamental::NonPositiveInteger&); + + virtual Void + traverse (SemanticGraph::Fundamental::NonNegativeInteger&); + + virtual Void + traverse (SemanticGraph::Fundamental::PositiveInteger&); + + virtual Void + traverse (SemanticGraph::Fundamental::NegativeInteger&); + + // Floats. + // + virtual Void + traverse (SemanticGraph::Fundamental::Float&); + + virtual Void + traverse (SemanticGraph::Fundamental::Double&); + + virtual Void + traverse (SemanticGraph::Fundamental::Decimal&); + + private: + String value_; + String literal_; + + Traversal::Inherits inherits_; + }; + + // Some initialization (e.g., list) need a function body while others + // (e.g., *binary) require extra data. + // + struct InitKind: Traversal::List, + Traversal::Complex, + + Traversal::Fundamental::Base64Binary, + Traversal::Fundamental::HexBinary, + + Traversal::Fundamental::NameTokens, + Traversal::Fundamental::IdRefs, + Traversal::Fundamental::Entities + { + enum Kind + { + simple, + data, + function + }; + + // Should be simple initially. + // + InitKind (Kind& r); + + virtual Void + traverse (SemanticGraph::List&); + + virtual Void + traverse (SemanticGraph::Complex&); + + virtual Void + traverse (SemanticGraph::Fundamental::Base64Binary&); + + virtual Void + traverse (SemanticGraph::Fundamental::HexBinary&); + + virtual Void + traverse (SemanticGraph::Fundamental::NameTokens&); + + virtual Void + traverse (SemanticGraph::Fundamental::IdRefs&); + + virtual Void + traverse (SemanticGraph::Fundamental::Entities&); + + private: + Kind& r_; + Traversal::Inherits inherits_; + }; + + struct InitValue: Traversal::List, + Traversal::Union, + Traversal::Complex, + + Traversal::AnySimpleType, + + Traversal::Fundamental::String, + Traversal::Fundamental::NormalizedString, + Traversal::Fundamental::Token, + Traversal::Fundamental::Name, + Traversal::Fundamental::NameToken, + Traversal::Fundamental::NameTokens, + Traversal::Fundamental::NCName, + Traversal::Fundamental::Language, + + Traversal::Fundamental::QName, + + Traversal::Fundamental::Id, + Traversal::Fundamental::IdRef, + Traversal::Fundamental::IdRefs, + + Traversal::Fundamental::AnyURI, + + Traversal::Fundamental::Base64Binary, + Traversal::Fundamental::HexBinary, + + Traversal::Fundamental::Date, + Traversal::Fundamental::DateTime, + Traversal::Fundamental::Duration, + Traversal::Fundamental::Day, + Traversal::Fundamental::Month, + Traversal::Fundamental::MonthDay, + Traversal::Fundamental::Year, + Traversal::Fundamental::YearMonth, + Traversal::Fundamental::Time, + + Traversal::Fundamental::Entity, + Traversal::Fundamental::Entities, + + Context + { + InitValue (Context&); + + Void + data (String const& data) + { + data_ = data; + dispatch_count_ = 0; + } + + Void + dispatch (SemanticGraph::Node& type, String const& value); + + virtual Void + traverse (SemanticGraph::List&); + + virtual Void + traverse (SemanticGraph::Union&); + + virtual Void + traverse (SemanticGraph::Complex&); + + // anySimpleType. + // + virtual Void + traverse (SemanticGraph::AnySimpleType&); + + // Strings. + // + virtual Void + traverse (SemanticGraph::Fundamental::String&); + + virtual Void + traverse (SemanticGraph::Fundamental::NormalizedString&); + + virtual Void + traverse (SemanticGraph::Fundamental::Token&); + + virtual Void + traverse (SemanticGraph::Fundamental::NameToken&); + + virtual Void + traverse (SemanticGraph::Fundamental::NameTokens&); + + virtual Void + traverse (SemanticGraph::Fundamental::Name&); + + virtual Void + traverse (SemanticGraph::Fundamental::NCName&); + + virtual Void + traverse (SemanticGraph::Fundamental::Language&); + + // Qualified name. + // + virtual Void + traverse (SemanticGraph::Fundamental::QName&); + + // ID/IDREF. + // + virtual Void + traverse (SemanticGraph::Fundamental::Id&); + + virtual Void + traverse (SemanticGraph::Fundamental::IdRef&); + + virtual Void + traverse (SemanticGraph::Fundamental::IdRefs&); + + // URI. + // + virtual Void + traverse (SemanticGraph::Fundamental::AnyURI&); + + // Binary. + // + virtual Void + traverse (SemanticGraph::Fundamental::Base64Binary&); + + virtual Void + traverse (SemanticGraph::Fundamental::HexBinary&); + + // Date/time. + // + virtual Void + traverse (SemanticGraph::Fundamental::Date&); + + virtual Void + traverse (SemanticGraph::Fundamental::DateTime&); + + virtual Void + traverse (SemanticGraph::Fundamental::Duration&); + + virtual Void + traverse (SemanticGraph::Fundamental::Day&); + + virtual Void + traverse (SemanticGraph::Fundamental::Month&); + + virtual Void + traverse (SemanticGraph::Fundamental::MonthDay&); + + virtual Void + traverse (SemanticGraph::Fundamental::Year&); + + virtual Void + traverse (SemanticGraph::Fundamental::YearMonth&); + + virtual Void + traverse (SemanticGraph::Fundamental::Time&); + + // Entity. + // + virtual Void + traverse (SemanticGraph::Fundamental::Entity&); + + virtual Void + traverse (SemanticGraph::Fundamental::Entities&); + + private: + Void + string_sequence_type (SemanticGraph::Type& element_type); + + Void + time_zone (Size pos); + + private: + String value_; + String data_; + Size dispatch_count_; + MemberTypeName type_name_; + LiteralValue literal_value_; + }; + } +} + +#endif // CXX_TREE_DEFAULT_VALUE_HXX diff --git a/xsd/xsd/cxx/tree/elements.cxx b/xsd/xsd/cxx/tree/elements.cxx new file mode 100644 index 0000000..cad5a33 --- /dev/null +++ b/xsd/xsd/cxx/tree/elements.cxx @@ -0,0 +1,1355 @@ +// file : xsd/cxx/tree/elements.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <cxx/tree/elements.hxx> + +namespace CXX +{ + namespace Tree + { + // Context + // + Void Context:: + update_ns_scope () // Keeping this function first helps HP-UX + { // (long symbols). + ns_scope.clear (); + + Boolean first (true); + + for (NamespaceStack::Iterator i (ns_scope_stack.begin ()); + i != ns_scope_stack.end (); + ++i) + { + // We only qualify names until the namespace level. + // + if (first) + first = false; + else + ns_scope += L"::"; + + ns_scope += *i; + } + } + + Context:: + Context (std::wostream& o, + SemanticGraph::Schema& root, + SemanticGraph::Path const& path, + CLI::Options const& ops, + Counts const& counts_, + Boolean generate_xml_schema__, + StringLiteralMap const* map, + Regex const* fe, + Regex const* he, + Regex const* ie) + : CXX::Context (o, + root, + path, + map, + ops.value<CLI::char_type> (), + ops.value<CLI::char_encoding> (), + ops.value<CLI::include_with_brackets> (), + ops.value<CLI::include_prefix> (), + ops.value<CLI::export_symbol> (), + ops.value<CLI::namespace_map> (), + ops.value<CLI::namespace_regex> (), + ops.value<CLI::namespace_regex_trace> (), + ops.value<CLI::include_regex> (), + ops.value<CLI::include_regex_trace> (), + ops.value<CLI::generate_inline> (), + ops.value<CLI::reserved_name> ()), + options (ops), + counts (counts_), + any_type (any_type_), + any_simple_type (any_simple_type_), + element_type (element_type_), + container (container_), + flags_type (flags_type_), + qname_type (qname_type_), + xs_string_type (xs_string_type_), + properties_type (properties_type_), + error_handler_type (error_handler_type_), + list_stream_type (list_stream_type_), + namespace_infomap_type (namespace_infomap_type_), + parser_type (parser_type_), + std_ostream_type (std_ostream_type_), + ostream_type (ostream_type_), + istream_type (istream_type_), + xerces_ns (xerces_ns_), + dom_auto_ptr (dom_auto_ptr_), + dom_node_key (dom_node_key_), + as_double_type (as_double_type_), + as_decimal_type (as_decimal_type_), + generate_xml_schema (generate_xml_schema_), + doxygen (doxygen_), + polymorphic (ops.value<CLI::generate_polymorphic> ()), + polymorphic_all (ops.value<CLI::polymorphic_type_all> ()), + detach (ops.value<CLI::generate_detach> ()), + fwd_expr (fe), + hxx_expr (he), + ixx_expr (ie), + ns_scope (ns_scope_), + regex_custom_type_map (regex_custom_type_map_), + direct_custom_type_map (direct_custom_type_map_), + qname_type_ (L"::xsd::cxx::xml::qualified_name< " + char_type + L" >"), + parser_type_ (L"::xsd::cxx::xml::dom::parser< " + char_type + L" >"), + generate_xml_schema_ (generate_xml_schema__), + doxygen_ (ops.value<CLI::generate_doxygen> ()), + ns_scope_stack (ns_scope_stack_), + cxx_uq_id_expr_ (L"^[a-zA-Z_]\\w*$"), + cxx_uq_id_expr (cxx_uq_id_expr_) + { + SemanticGraph::Namespace& xs (xs_ns ()); + SemanticGraph::Context& xsc (xs.context ()); + + // Cache some often-used names from the XML Schema namespace + // if names have already been processed. + // + if (xsc.count ("container")) + { + String xs_name (ns_name (xs)); + + any_type = fq_name (xs.find ("anyType").first->named ()); + any_simple_type = fq_name (xs.find ("anySimpleType").first->named ()); + xs_string_type = fq_name (xs.find ("string").first->named ()); + + container = xs_name + L"::" + xsc.get<String> ("container"); + flags_type = xs_name + L"::" + xsc.get<String> ("flags"); + + if (ops.value<CLI::generate_element_type> ()) + element_type = xs_name + L"::" + xsc.get<String> ("element-type"); + + properties_type = xs_name + L"::" + xsc.get<String> ("properties"); + + if (!ops.value<CLI::suppress_parsing> () || + ops.value<CLI::generate_serialization> ()) + { + error_handler_type = xs_name + L"::" + + xsc.get<String> ("error-handler"); + } + + dom_auto_ptr_ = xs_name + L"::dom::auto_ptr"; + dom_node_key_ = xs_name + L"::dom::" + + xsc.get<String> ("tree-node-key"); + + if (ops.value<CLI::generate_serialization> ()) + { + as_double_type_ = xs_name + L"::" + + xsc.get<String> ("as-double"); + + as_decimal_type_ = xs_name + L"::" + + xsc.get<String> ("as-decimal"); + + list_stream_type = xs_name + L"::" + + xsc.get<String> ("list-stream"); + + namespace_infomap_type = xs_name + L"::" + + xsc.get<String> ("namespace-infomap"); + } + + // istream and ostream are templates and for now use the same + // names regardless of the naming convention. + // + if (!ops.value<CLI::generate_extraction> ().empty ()) + istream_type = xs_name + L"::istream"; + + if (!ops.value<CLI::generate_insertion> ().empty ()) + ostream_type = xs_name + L"::ostream"; + } + + // Xerces-C++ namespace. IntelliSense for some reason does not like + // it fully-qualified (maybe because it's a namespace alias). + // + if (ops.value<CLI::generate_intellisense> ()) + xerces_ns = "xercesc"; + else + xerces_ns = "::xercesc"; + + // + // + if (char_type == L"char") + std_ostream_type_ = L"::std::ostream"; + else if (char_type == L"wchar_t") + std_ostream_type_ = L"::std::wostream"; + else + std_ostream_type_ = L"::std::basic_ostream< " + char_type + L" >"; + + // Custom type mapping. + // + typedef Containers::Vector<NarrowString> Vector; + + // Direct custom type mapping. + // + { + Vector const& v (ops.value<CLI::custom_type> ()); + + for (Vector::ConstIterator i (v.begin ()), e (v.end ()); i != e; ++i) + { + String s (*i); + + if (s.empty ()) + throw InvalidCustomTypeMapping (s, "mapping string is empty"); + + // Split the string in two parts at the last '='. + // + Size pos (s.rfind ('=')); + + // If no delimiter found then both type and base are empty. + // + if (pos == String::npos) + { + direct_custom_type_map[s].type.clear (); + direct_custom_type_map[s].base.clear (); + continue; + } + + String name (s, 0, pos); + String rest (s, pos + 1); + + // See if we've got the base part after '/'. + // + pos = rest.rfind ('/'); + + String type, base; + + if (pos != String::npos) + { + type.assign (rest, 0, pos); + base.assign (rest, pos + 1, String::npos); + } + else + type = rest; + + // type can be a potentially-qualified template-id. base is + // an unqualified C++ name. + // + + if (!base.empty () && !cxx_uq_id_expr.match (base)) + throw InvalidCustomTypeMapping (s, "invalid C++ identifier"); + + direct_custom_type_map[name].type = type; + direct_custom_type_map[name].base = base; + } + } + + // Regex custom type mapping. + // + { + Vector const& v (ops.value<CLI::custom_type_regex> ()); + + for (Vector::ConstIterator i (v.begin ()), e (v.end ()); i != e; ++i) + { + String s (*i); + + if (s.empty ()) + throw InvalidCustomTypeMapping (s, "mapping string is empty"); + + WideChar delimiter (s[0]); + + // First get pattern. + // + Size pos (s.find (delimiter, 1)); + + if (pos == String::npos) + throw InvalidCustomTypeMapping ( + s, "missing pattern-substitution separator"); + + String pat (s, 1, pos - 1); + String rest (s, pos + 1); + + String type, base; + + // See if we've got type and base. + // + if (!rest.empty ()) + { + pos = rest.find (delimiter); + + if (pos == String::npos) + throw InvalidCustomTypeMapping ( + s, "missing pattern-substitution separator"); + + type.assign (rest, 0, pos); + rest = String (rest, pos + 1); + + if (!rest.empty ()) + { + pos = rest.find (delimiter); + + if (pos == String::npos) + throw InvalidCustomTypeMapping ( + s, "missing pattern-substitution separator"); + + base.assign (rest, 0, pos); + rest = String (rest, pos + 1); + + if (!rest.empty ()) + throw InvalidCustomTypeMapping (s, "invalid format"); + } + } + + regex_custom_type_map.push_back ( + RegexCustomTypeMapInfo (pat, type, base)); + } + } + } + + Context:: + Context (Context& c) + : CXX::Context (c), + options (c.options), + counts (c.counts), + any_type (c.any_type), + any_simple_type (c.any_simple_type), + element_type (c.element_type), + container (c.container), + flags_type (c.flags_type), + qname_type (c.qname_type), + xs_string_type (c.xs_string_type), + properties_type (c.properties_type), + error_handler_type (c.error_handler_type), + list_stream_type (c.list_stream_type), + namespace_infomap_type (c.namespace_infomap_type), + parser_type (c.parser_type), + std_ostream_type (c.std_ostream_type), + ostream_type (c.ostream_type), + istream_type (c.istream_type), + xerces_ns (c.xerces_ns), + dom_auto_ptr (c.dom_auto_ptr), + dom_node_key (c.dom_node_key), + as_double_type (c.as_double_type), + as_decimal_type (c.as_decimal_type), + generate_xml_schema (c.generate_xml_schema), + doxygen (c.doxygen), + polymorphic (c.polymorphic), + polymorphic_all (c.polymorphic_all), + detach (c.detach), + fwd_expr (c.fwd_expr), + hxx_expr (c.hxx_expr), + ixx_expr (c.ixx_expr), + ns_scope (c.ns_scope), + regex_custom_type_map (c.regex_custom_type_map), + direct_custom_type_map (c.direct_custom_type_map), + ns_scope_stack (c.ns_scope_stack), + cxx_uq_id_expr (c.cxx_uq_id_expr) + { + } + + Context:: + Context (Context& c, std::wostream& o) + : CXX::Context (c, o), + options (c.options), + counts (c.counts), + any_type (c.any_type), + any_simple_type (c.any_simple_type), + element_type (c.element_type), + container (c.container), + flags_type (c.flags_type), + qname_type (c.qname_type), + xs_string_type (c.xs_string_type), + properties_type (c.properties_type), + error_handler_type (c.error_handler_type), + list_stream_type (c.list_stream_type), + namespace_infomap_type (c.namespace_infomap_type), + parser_type (c.parser_type), + std_ostream_type (c.std_ostream_type), + ostream_type (c.ostream_type), + istream_type (c.istream_type), + xerces_ns (c.xerces_ns), + dom_auto_ptr (c.dom_auto_ptr), + dom_node_key (c.dom_node_key), + as_double_type (c.as_double_type), + as_decimal_type (c.as_decimal_type), + generate_xml_schema (c.generate_xml_schema), + doxygen (c.doxygen), + polymorphic (c.polymorphic), + polymorphic_all (c.polymorphic_all), + detach (c.detach), + fwd_expr (c.fwd_expr), + hxx_expr (c.hxx_expr), + ixx_expr (c.ixx_expr), + ns_scope (c.ns_scope), + regex_custom_type_map (c.regex_custom_type_map), + direct_custom_type_map (c.direct_custom_type_map), + ns_scope_stack (c.ns_scope_stack), + cxx_uq_id_expr (c.cxx_uq_id_expr) + { + } + + Boolean Context:: + custom_type (SemanticGraph::Type const& t, String& r) const + { + String const& name (t.name ()); + + // First search the direct mapping. + // + { + DirectCustomTypeMap::ConstIterator i ( + direct_custom_type_map.find (name)); + + if (i != direct_custom_type_map.end ()) + { + r = i->second.type; + return true; + } + } + + + // Second search the regex mapping. + // + for (RegexCustomTypeMap::ConstIterator + i (regex_custom_type_map.begin ()), + e (regex_custom_type_map.end ()); + i != e; ++i) + { + if (i->pat.match (name)) + { + // Empty type sub tells us to use the original name. + // + if (i->type_sub.empty ()) + { + r.clear (); + return true; + } + + r = i->pat.merge (i->type_sub, name); + return true; + } + } + + return false; + } + + String Context:: + custom_type (SemanticGraph::Type const& t) const + { + String r; + if (custom_type (t, r)) + { + // Empty type name tells us to use the original name. + // + if (r.empty ()) + r = ename (t); + } + + return r; + } + + Boolean Context:: + renamed_type (SemanticGraph::Type const& t, String& r) const + { + String const& name (t.name ()); + + // First search the direct mapping. + // + { + DirectCustomTypeMap::ConstIterator i ( + direct_custom_type_map.find (name)); + + if (i != direct_custom_type_map.end ()) + { + r = i->second.base; + return true; + } + } + + + // Second search the regex mapping. + // + for (RegexCustomTypeMap::ConstIterator + i (regex_custom_type_map.begin ()), + e (regex_custom_type_map.end ()); + i != e; ++i) + { + if (i->pat.match (name)) + { + if (!i->base_sub.empty ()) + { + r = i->pat.merge (i->base_sub, name); + } + else + r.clear (); + + return true; + } + } + + return false; + } + + Void Context:: + write_annotation (SemanticGraph::Annotation& a) + { + String const& doc (a.documentation ()); + WideChar const* s (doc.c_str ()); + Size size (doc.size ()); + + // Remove leading and trailing whitespaces. + // + while (*s == WideChar (0x20) || *s == WideChar (0x0A) || + *s == WideChar (0x0D) || *s == WideChar (0x09)) + { + s++; + size--; + } + + if (size != 0) + { + WideChar const* e (s + size - 1); + + while (e > s && + (*e == WideChar (0x20) || *e == WideChar (0x0A) || + *e == WideChar (0x0D) || *e == WideChar (0x09))) + --e; + + size = s <= e ? e - s + 1 : 0; + } + + if (size != 0) + { + os << " * "; + + // Go over the data, forcing newline after 80 chars and adding + // ' * ' after each new line. + // + WideChar const* last_space (0); + WideChar const* b (s); + WideChar const* e (s); + Boolean after_newline (false); + Boolean rogue (false); + + for (; e < s + size; ++e) + { + UnsignedLong u (unicode_char (e)); // May advance e. + + // We are going to treat \v and \f as rogue here even though + // they can be present in C++ source code. + // + if (u > 127 || (u < 32 && u != '\t' && u != '\n')) + rogue = true; + + if (u == ' ' || u == '\t') + { + if (after_newline) + { + if (e == b) + b++; // Skip leading spaces after newline. + + continue; + } + else + last_space = e; + } + else if (after_newline) + { + os << " * "; + after_newline = false; + } + + if (u == '\n') + { + write_rogue_text (b, e - b + 1, rogue); + + b = e + 1; + last_space = 0; + after_newline = true; + rogue = false; + continue; + } + + if (e - b >= 70 && last_space != 0) + { + write_rogue_text (b, last_space - b, rogue); + os << endl; + + b = last_space + 1; + last_space = 0; + after_newline = true; + // Cannot reset rogue since we don't output the whole string. + } + } + + if (e != b) + write_rogue_text (b, e - b, rogue); + + if (!after_newline) + os << endl; + } + } + + Void Context:: + write_rogue_text (WideChar const* s, Size size, Boolean rogue) + { + if (!rogue) + os.write (s, size); + else + { + for (WideChar const* p (s); p < s + size; ++p) + { + UnsignedLong u (unicode_char (p)); // May advance p. + + // We are going to treat \v and \f as rogue here even though + // they can be present in C++ source code. + // + if (u > 127 || (u < 32 && u != '\t' && u != '\n')) + os.put ('?'); + else + os.put (static_cast<WideChar> (u)); + } + } + } + + Boolean Context:: + polymorphic_p (SemanticGraph::Type& t) + { + if (polymorphic_all) + { + Boolean fund (false); + IsFundamentalType test (fund); + test.dispatch (t); + return !fund; + } + else + return t.context ().get<Boolean> ("polymorphic"); + } + + // GenerateDefautCtor + // + GenerateDefaultCtor:: + GenerateDefaultCtor (Context& c, Boolean& generate, Boolean no_base) + : Context (c), generate_ (generate), no_base_ (no_base) + { + *this >> inherits_ >> *this; + *this >> names_ >> *this; + } + + Void GenerateDefaultCtor:: + traverse (SemanticGraph::Complex& c) + { + // Make sure we figure out if we have any required members before + // we base our decision on the base type. + // + Complex::names (c, names_); + + if (!generate_) + Complex::inherits (c, inherits_); + } + + Void GenerateDefaultCtor:: + traverse (SemanticGraph::Type&) + { + if (!no_base_) + generate_ = true; + } + + Void GenerateDefaultCtor:: + traverse (SemanticGraph::Enumeration&) + { + if (!no_base_) + generate_ = true; + } + + Void GenerateDefaultCtor:: + traverse (SemanticGraph::Element& e) + { + if (!skip (e) && min (e) == 1 && max (e) == 1) + generate_ = true; + } + + Void GenerateDefaultCtor:: + traverse (SemanticGraph::Attribute& a) + { + if (min (a) == 1 && !a.fixed_p ()) + generate_ = true; + } + + Void GenerateDefaultCtor:: + traverse (SemanticGraph::Any& a) + { + if (options.value<CLI::generate_wildcard> () && + min (a) == 1 && max (a) == 1) + generate_ = true; + } + + + // GenerateFromBaseCtor + // + GenerateFromBaseCtor:: + GenerateFromBaseCtor (Context& c, Boolean& generate) + : generate_ (generate), + custom_ (false), + traverser_ (c, generate, custom_) + { + inherits_ >> traverser_; + } + + Void GenerateFromBaseCtor:: + traverse (SemanticGraph::Complex& c) + { + inherits (c, inherits_); + + if (!generate_ && custom_) + { + // We have a customized type in the hierarchy. In this case we + // want to generate the c-tor unless base and ultimate-base are + // the same (see CtorArgs). + // + SemanticGraph::Type& b (c.inherits ().base ()); + generate_ = b.is_a<SemanticGraph::Complex> () && + !b.is_a<SemanticGraph::Enumeration> (); + } + } + + GenerateFromBaseCtor::Traverser:: + Traverser (Context& c, Boolean& generate, Boolean& custom) + : Context (c), generate_ (generate), custom_ (custom) + { + *this >> inherits_ >> *this; + *this >> names_ >> *this; + } + + Void GenerateFromBaseCtor::Traverser:: + traverse (SemanticGraph::Type& t) + { + if (!custom_) + { + String tmp; + custom_ = custom_type (t, tmp); + } + } + + Void GenerateFromBaseCtor::Traverser:: + traverse (SemanticGraph::Complex& c) + { + names (c, names_); + + if (!generate_) + inherits (c, inherits_); + + if (!generate_) + traverse (static_cast<SemanticGraph::Type&> (c)); + } + + Void GenerateFromBaseCtor::Traverser:: + traverse (SemanticGraph::Element& e) + { + if (!skip (e) && min (e) == 1 && max (e) == 1) + generate_ = true; + } + + Void GenerateFromBaseCtor::Traverser:: + traverse (SemanticGraph::Attribute& a) + { + if (min (a) == 1 && !a.fixed_p ()) + generate_ = true; + } + + Void GenerateFromBaseCtor::Traverser:: + traverse (SemanticGraph::Any& a) + { + if (options.value<CLI::generate_wildcard> () && + min (a) == 1 && max (a) == 1) + generate_ = true; + } + + // HasComplexNonOptArgs + // + HasComplexPolyNonOptArgs:: + HasComplexPolyNonOptArgs (Context& c, + Boolean base, + Boolean& complex, + Boolean& poly, + Boolean& clash) + : Context (c), + complex_ (complex), + poly_ (poly), + clash_ (clash) + { + if (base) + *this >> inherits_ >> *this; + + *this >> names_ >> *this; + } + + Void HasComplexPolyNonOptArgs:: + traverse (SemanticGraph::Complex& c) + { + // No optimizations: need to check every arg for clashes. + // + inherits (c, inherits_); + names (c, names_); + } + + Void HasComplexPolyNonOptArgs:: + traverse (SemanticGraph::Element& e) + { + if (!skip (e) && min (e) == 1 && max (e) == 1) + { + Boolean poly (polymorphic && polymorphic_p (e.type ())); + + Boolean simple (true); + IsSimpleType t (simple); + t.dispatch (e.type ()); + + if (poly) + poly_ = true; + + if (!simple) + complex_ = true; + + if (poly && simple) + clash_ = false; + } + } + + // FromBaseCtorArg + // + FromBaseCtorArg:: + FromBaseCtorArg (Context& c, ArgType at, Boolean arg) + : Context (c), arg_type_ (at), arg_ (arg) + { + } + + Void FromBaseCtorArg:: + traverse (SemanticGraph::Any& a) + { + if (!options.value<CLI::generate_wildcard> ()) + return; + + if (min (a) == 1 && max (a) == 1) + { + String const& name (ename (a)); + + os << "," << endl + << "const " << xerces_ns << "::DOMElement&"; + + if (arg_) + os << " " << name; + } + } + + Void FromBaseCtorArg:: + traverse (SemanticGraph::Element& e) + { + if (skip (e)) + return; + + if (min (e) == 1 && max (e) == 1) + { + String const& name (ename (e)); + + os << "," << endl; + + Boolean auto_ptr (false); + + switch (arg_type_) + { + case arg_complex_auto_ptr: + { + Boolean simple (true); + IsSimpleType t (simple); + t.dispatch (e.type ()); + auto_ptr = !simple; + break; + } + case arg_poly_auto_ptr: + { + auto_ptr = polymorphic && polymorphic_p (e.type ()); + break; + } + case arg_type: + break; + } + + if (auto_ptr) + os << "::std::auto_ptr< " << etype (e) << " >&"; + else + os << "const " << etype (e) << "&"; + + if (arg_) + os << " " << name; + } + } + + Void FromBaseCtorArg:: + traverse (SemanticGraph::Attribute& a) + { + // Note that we are not going to include attributes with + // default or required fixed values here. Instead we are + // going to default-initialize them. + // + if (min (a) == 1 && !a.fixed_p ()) + { + String const& name (ename (a)); + + os << "," << endl + << "const " << etype (a) << "&"; + + if (arg_) + os << " " << name; + } + } + + // CtorArgs + // + CtorArgs:: + CtorArgs (Context& c, ArgType at) + : Context (c), + arg_type_ (at), + base_arg_ (0), + first_ (true), + member_name_ (c) + { + *this >> inherits_ >> *this; + *this >> names_ >> *this; + } + + CtorArgs:: + CtorArgs (Context& c, ArgType at, String& base_arg) + : Context (c), + arg_type_ (at), + base_arg_ (&base_arg), + first_ (true), + member_name_ (c) + { + *this >> inherits_ >> *this; + *this >> names_ >> *this; + } + + Void CtorArgs:: + traverse (SemanticGraph::Type& t) + { + os << comma () << "const "; + + member_name_.dispatch (t); + + os << "&"; + + if (base_arg_ != 0) + { + *base_arg_ = L"_xsd_" + ename (t) + L"_base"; + + os << " " << *base_arg_; + } + } + + Void CtorArgs:: + traverse (SemanticGraph::Enumeration& e) + { + os << comma () << "const "; + + member_name_.traverse (e); + + os << "&"; + + if (base_arg_ != 0) + { + *base_arg_ = L"_xsd_" + ename (e) + L"_base"; + + os << " " << *base_arg_; + } + } + + Void CtorArgs:: + traverse (SemanticGraph::Any& a) + { + if (!options.value<CLI::generate_wildcard> ()) + return; + + if (min (a) == 1 && max (a) == 1) + { + os << comma () << "const " << xerces_ns << "::DOMElement&"; + + if (base_arg_ != 0) + os << " " << ename (a); + } + } + + Void CtorArgs:: + traverse (SemanticGraph::Element& e) + { + if (skip (e)) + return; + + if (min (e) == 1 && max (e) == 1) + { + Boolean auto_ptr (false); + + switch (arg_type_) + { + case arg_complex_auto_ptr: + { + Boolean simple (true); + IsSimpleType t (simple); + t.dispatch (e.type ()); + auto_ptr = !simple; + break; + } + case arg_poly_auto_ptr: + { + auto_ptr = polymorphic && polymorphic_p (e.type ()); + break; + } + case arg_type: + break; + } + + if (auto_ptr) + os << comma () << "::std::auto_ptr< " << etype (e) << " >&"; + else + os << comma () << "const " << etype (e) << "&"; + + if (base_arg_ != 0) + os << " " << ename (e); + } + } + + Void CtorArgs:: + traverse (SemanticGraph::Attribute& a) + { + // Note that we are not going to include attributes with + // default or required fixed values here. Instead we are + // going to default-initialize them. + // + if (min (a) == 1 && !a.fixed_p ()) + { + os << comma () << "const " << etype (a) << "&"; + + if (base_arg_ != 0) + os << " " << ename (a); + } + } + + String CtorArgs:: + comma () + { + Boolean tmp (first_); + first_ = false; + return tmp ? "" : ",\n"; + } + + + // CtorArgsWithoutBase + // + CtorArgsWithoutBase:: + CtorArgsWithoutBase (Context& c, ArgType at, Boolean arg, Boolean first) + : Context (c), arg_type_ (at), arg_ (arg), first_ (first) + { + *this >> inherits_ >> *this; + *this >> names_ >> *this; + } + + Void CtorArgsWithoutBase:: + traverse (SemanticGraph::Any& a) + { + if (!options.value<CLI::generate_wildcard> ()) + return; + + if (min (a) == 1 && max (a) == 1) + { + os << comma () << "const " << xerces_ns << "::DOMElement&"; + + if (arg_) + os << " " << ename (a); + } + } + + Void CtorArgsWithoutBase:: + traverse (SemanticGraph::Element& e) + { + if (skip (e)) + return; + + if (min (e) == 1 && max (e) == 1) + { + Boolean auto_ptr (false); + + switch (arg_type_) + { + case arg_complex_auto_ptr: + { + Boolean simple (true); + IsSimpleType t (simple); + t.dispatch (e.type ()); + auto_ptr = !simple; + break; + } + case arg_poly_auto_ptr: + { + auto_ptr = polymorphic && polymorphic_p (e.type ()); + break; + } + case arg_type: + break; + } + + if (auto_ptr) + os << comma () << "::std::auto_ptr< " << etype (e) << " >&"; + else + os << comma () << "const " << etype (e) << "&"; + + if (arg_) + os << " " << ename (e); + } + } + + Void CtorArgsWithoutBase:: + traverse (SemanticGraph::Attribute& a) + { + // Note that we are not going to include attributes with + // default or required fixed values here. Instead we are + // going to default-initialize them. + // + if (min (a) == 1 && !a.fixed_p ()) + { + os << comma () << "const " << etype (a) << "&"; + + if (arg_) + os << " " << ename (a); + } + } + + String CtorArgsWithoutBase:: + comma () + { + Boolean tmp (first_); + first_ = false; + return tmp ? "" : ",\n"; + } + + // GlobalElementBase + // + Boolean GlobalElementBase:: + generate_p (SemanticGraph::Element& e) + { + if (e.substitutes_p () && ctx_.polymorphic) + return true; + + if (!doc_root_p (e)) + return false; + + // If we are not generating element types nor parsing/serialization + // code then we won't generate anything from it. + // + if (!ctx_.options.value<CLI::generate_element_type> () && + ctx_.options.value<CLI::suppress_parsing> () && + !ctx_.options.value<CLI::generate_serialization> ()) + return false; + + return true; + } + + Boolean GlobalElementBase:: + doc_root_p (SemanticGraph::Element& e) + { + if (!ctx_.options.value<CLI::root_element_first> () && + !ctx_.options.value<CLI::root_element_last> () && + !ctx_.options.value<CLI::root_element_all> () && + !ctx_.options.value<CLI::root_element_none> () && + ctx_.options.value<CLI::root_element> ().empty ()) + return true; // By default treat them all. + + if (ctx_.options.value<CLI::root_element_none> ()) + return false; + + if (ctx_.options.value<CLI::root_element_all> ()) + return true; + + if (ctx_.options.value<CLI::root_element_first> () && + e.context ().count ("first") != 0) + return true; + + if (ctx_.options.value<CLI::root_element_last> () && + e.context ().count ("last") != 0) + return true; + + typedef Cult::Containers::Vector<NarrowString> Names; + Names const& names (ctx_.options.value<CLI::root_element> ()); + + // Hopefully nobody will specify more than a handful of names ;-). + // + for (Names::ConstIterator i (names.begin ()); i != names.end (); ++i) + { + String name (*i); + + if (e.name () == name) + return true; + } + + return false; + } + + // Namespace + // + Namespace:: + Namespace (Context& c, + UnsignedLong first, + UnsignedLong last) + : CXX::Namespace (c, *this), + GlobalElementBase (c), + ctx_ (c), + first_ (first), + last_ (last), + count_ (0) + { + } + + Void Namespace:: + traverse (Type& ns) + { + using SemanticGraph::Element; + + if (first_ > last_) + CXX::Namespace::traverse (ns); + else + { + Boolean opened (false); + + for (Type::NamesIterator i (ns.names_begin ()); + i != ns.names_end (); ++i) + { + SemanticGraph::Nameable& n (i->named ()); + + if (n.is_a<SemanticGraph::Type> () || + (n.is_a<Element> () && generate_p (dynamic_cast<Element&> (n)))) + { + if (count_ >= first_ && count_ <= last_) + { + if (!opened) + { + opened = true; + pre (ns); + } + + edge_traverser ().dispatch (*i); + } + + ++count_; + } + } + + if (opened) + post (ns); + } + } + + Void Namespace:: + enter (Type&, String const& name, Boolean) + { + ctx_.enter_ns_scope (name); + } + + Void Namespace:: + leave () + { + ctx_.leave_ns_scope (); + } + + // Includes + // + Void TypeForward:: + traverse (SemanticGraph::Type& t) + { + String const& name (ename (t)); + + if (String custom = custom_type (t)) + { + String new_name; + renamed_type (t, new_name); + + if (new_name) + os << "class " << new_name << ";"; + + if (custom == name) + os << "class " << name << ";"; + else + os << "typedef " << custom << " " << name << ";"; + } + else + os << "class " << name << ";"; + } + + Void Includes:: + traverse_ (SemanticGraph::Uses& u) + { + // Support for weak (forward) inclusion used in the file-per-type + // compilation model. + // + Type t (type_); + Boolean weak (u.context ().count ("weak")); + SemanticGraph::Schema& s (u.schema ()); + + if (weak && t == header) + { + // Generate forward declarations. + // + if (forward_) + t = forward; + else + { + schema_.dispatch (s); + return; + } + } + + if (t == source && !weak) + return; + + SemanticGraph::Path path ( + s.context ().count ("renamed") + ? s.context ().get<SemanticGraph::Path> ("renamed") + : u.path ()); + + // Try to use the portable representation of the path. If that + // fails, fall back to the native representation. + // + NarrowString path_str; + try + { + path_str = path.string (); + } + catch (SemanticGraph::InvalidPath const&) + { +#if !defined(BOOST_FILESYSTEM_VERSION) || BOOST_FILESYSTEM_VERSION == 2 + path_str = path.native_file_string (); +#else + path_str = path.string (); +#endif + } + + String inc_path; + + switch (t) + { + case forward: + { + inc_path = ctx_.fwd_expr->merge (path_str); + break; + } + case header: + case source: + { + inc_path = ctx_.hxx_expr->merge (path_str); + break; + } + case inline_: + { + if (weak) + { + inc_path = ctx_.hxx_expr->merge (path_str); + ctx_.os << "#include " << ctx_.process_include_path (inc_path) + << endl; + } + + inc_path = ctx_.ixx_expr->merge (path_str); + break; + } + } + + ctx_.os << "#include " << ctx_.process_include_path (inc_path) << endl + << endl; + } + } +} diff --git a/xsd/xsd/cxx/tree/elements.hxx b/xsd/xsd/cxx/tree/elements.hxx new file mode 100644 index 0000000..afe3951 --- /dev/null +++ b/xsd/xsd/cxx/tree/elements.hxx @@ -0,0 +1,2055 @@ +// file : xsd/cxx/tree/elements.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef CXX_TREE_ELEMENTS_HXX +#define CXX_TREE_ELEMENTS_HXX + +#include <sstream> + +#include <cult/containers/map.hxx> +#include <cult/containers/deque.hxx> +#include <cult/containers/vector.hxx> + +#include <backend-elements/regex.hxx> + +#include <cxx/elements.hxx> + +#include <cxx/tree/cli.hxx> + + +namespace CXX +{ + namespace Tree + { + struct Counts + { + Counts () + : global_types (0), + global_elements (0), + generated_global_elements (0), + complexity_total (0) + { + } + + UnsignedLong global_types; + UnsignedLong global_elements; + UnsignedLong generated_global_elements; + + // Complexity value for each global type and generated global + // element, in order. + // + Cult::Containers::Vector<UnsignedLong> complexity; + UnsignedLong complexity_total; + }; + + struct InvalidCustomTypeMapping + { + InvalidCustomTypeMapping (String const& mapping, + String const& reason) + : mapping_ (mapping), reason_ (reason) + { + } + + String const& + mapping () const + { + return mapping_; + } + + String const& + reason () const + { + return reason_; + } + + private: + String mapping_; + String reason_; + }; + + // + // + class Context: public CXX::Context + { + public: + typedef BackendElements::Regex::Expression<Char> Regex; + typedef BackendElements::Regex::Pattern<WideChar> WideRegexPat; + + struct DirectCustomTypeMapInfo + { + DirectCustomTypeMapInfo (String const& t = L"", + String const& b = L"") + : type (t), base (b) + { + } + + String type; + String base; + }; + + struct RegexCustomTypeMapInfo + { + RegexCustomTypeMapInfo (WideRegexPat const& p, + String const& t, + String const& b) + : pat (p), type_sub (t), base_sub (b) + { + } + + WideRegexPat pat; + String type_sub; + String base_sub; + }; + + typedef + Cult::Containers::Vector<RegexCustomTypeMapInfo> + RegexCustomTypeMap; + + typedef + Cult::Containers::Map<String, DirectCustomTypeMapInfo> + DirectCustomTypeMap; + + public: + Context (std::wostream& o, + SemanticGraph::Schema& root, + SemanticGraph::Path const& path, + CLI::Options const& ops, + Counts const& counts_, + Boolean generate_xml_schema, + StringLiteralMap const*, + Regex const* fwd_expr, + Regex const* hxx_expr, + Regex const* ixx_expr); + + protected: + Context (Context& c); + Context (Context& c, std::wostream& o); + + // Custom type mapping. + // + public: + // Returns empty string if custom mapping is not required. + // + String + custom_type (SemanticGraph::Type const&) const; + + // Returns true if custom mapping is required. name is + // populated with the custom type name or empty if the + // original name should be used. + // + Boolean + custom_type (SemanticGraph::Type const&, String& name) const; + + // Returns true if this type has been renamed as part of the + // customization process. If the function returns true, the + // name string is populated with the new name or empty if + // the type should not be generated at all. + // + Boolean + renamed_type (SemanticGraph::Type const&, String& name) const; + + public: + // Performs a number of processing steps, including forcing a new + // line after 80 characters as well as "commentizing" the text by + // adding '* ' after each newline. + // + Void + write_annotation (SemanticGraph::Annotation&); + + // + // + public: + Boolean + polymorphic_p (SemanticGraph::Type&); + + Boolean + anonymous_p (SemanticGraph::Type const& t) + { + return t.context ().count ("anonymous"); + } + + // Escaped names. + // + public: + // Accessor name. + // + static String const& + eaname (SemanticGraph::Member const& m) + { + return m.context ().get<String> ("aname"); + } + + static String const& + eaname (SemanticGraph::Any const& a) + { + return a.context ().get<String> ("aname"); + } + + static String const& + eaname (SemanticGraph::AnyAttribute const& a) + { + return a.context ().get<String> ("aname"); + } + + // Modifier name. + // + static String const& + emname (SemanticGraph::Member const& m) + { + return m.context ().get<String> ("mname"); + } + + static String const& + emname (SemanticGraph::Any const& a) + { + return a.context ().get<String> ("mname"); + } + + static String const& + emname (SemanticGraph::AnyAttribute const& a) + { + return a.context ().get<String> ("mname"); + } + + // Detach name. + // + static String const& + edname (SemanticGraph::Member const& m) + { + return m.context ().get<String> ("dname"); + } + + // + // + static String const& + etype (SemanticGraph::Member const& m) + { + return m.context ().get<String> ("type"); + } + + static String const& + etraits (SemanticGraph::Member const& m) + { + return m.context ().get<String> ("traits"); + } + + static String const& + econtainer (SemanticGraph::Member const& m) + { + return m.context ().get<String> ("container"); + } + + static String const& + econtainer (SemanticGraph::Any const& a) + { + return a.context ().get<String> ("container"); + } + + static String const& + econtainer (SemanticGraph::AnyAttribute const& a) + { + return a.context ().get<String> ("container"); + } + + static String const& + eiterator (SemanticGraph::Member const& m) + { + return m.context ().get<String> ("iterator"); + } + + static String const& + eiterator (SemanticGraph::Any const& a) + { + return a.context ().get<String> ("iterator"); + } + + static String const& + eiterator (SemanticGraph::AnyAttribute const& a) + { + return a.context ().get<String> ("iterator"); + } + + static String const& + econst_iterator (SemanticGraph::Member const& m) + { + return m.context ().get<String> ("const-iterator"); + } + + static String const& + econst_iterator (SemanticGraph::Any const& a) + { + return a.context ().get<String> ("const-iterator"); + } + + static String const& + econst_iterator (SemanticGraph::AnyAttribute const& a) + { + return a.context ().get<String> ("const-iterator"); + } + + static String const& + emember (SemanticGraph::Member const& m) + { + return m.context ().get<String> ("member"); + } + + static String const& + emember (SemanticGraph::Any const& a) + { + return a.context ().get<String> ("member"); + } + + static String const& + emember (SemanticGraph::AnyAttribute const& a) + { + return a.context ().get<String> ("member"); + } + + static String const& + edefault_value (SemanticGraph::Member const& m) + { + return m.context ().get<String> ("default-value"); + } + + static String const& + edefault_value_member (SemanticGraph::Member const& m) + { + return m.context ().get<String> ("default-value-member"); + } + + // Underlying enum value type. + // + static String const& + evalue (SemanticGraph::Enumeration const& e) + { + return e.context ().get<String> ("value"); + } + + // dom_document + // + static Boolean + edom_document_p (SemanticGraph::Complex const& c) + { + return c.context ().count ("dom-document"); + } + + static String const& + edom_document (SemanticGraph::Complex const& c) + { + return c.context ().get<String> ("dom-document"); + } + + static Boolean + edom_document_member_p (SemanticGraph::Complex const& c) + { + return c.context ().count ("dom-document-member"); + } + + static String const& + edom_document_member (SemanticGraph::Complex const& c) + { + return c.context ().get<String> ("dom-document-member"); + } + + // Parsing and serialization function names. + // + static String const& + eparser (SemanticGraph::Element const& e) + { + return e.context ().get<String> ("parser"); + } + + static String const& + eserializer (SemanticGraph::Element const& e) + { + return e.context ().get<String> ("serializer"); + } + + public: + Void + enter_ns_scope (String const& name) + { + ns_scope_stack.push_back (name); + update_ns_scope (); + } + + Void + leave_ns_scope () + { + ns_scope_stack.pop_back (); + update_ns_scope (); + } + + private: + Void + update_ns_scope (); + + private: + // Write text that may contain characters that we will have + // to escape (indicated by the rogue flag). + // + Void + write_rogue_text (WideChar const* s, Size size, Boolean rogue); + + public: + CLI::Options const& options; + Counts const& counts; + String& any_type; + String& any_simple_type; + String& element_type; + String& container; + String& flags_type; + String& qname_type; + String& xs_string_type; + String& properties_type; + String& error_handler_type; + String& list_stream_type; + String& namespace_infomap_type; + String& parser_type; + String& std_ostream_type; + String& ostream_type; + String& istream_type; + String& xerces_ns; + String& dom_auto_ptr; + String& dom_node_key; + String& as_double_type; + String& as_decimal_type; + + Boolean& generate_xml_schema; + Boolean& doxygen; + Boolean polymorphic; + Boolean polymorphic_all; + Boolean detach; + + Regex const* fwd_expr; + Regex const* hxx_expr; + Regex const* ixx_expr; + + String& ns_scope; + + RegexCustomTypeMap& regex_custom_type_map; + DirectCustomTypeMap& direct_custom_type_map; + + private: + String any_type_; + String any_simple_type_; + String element_type_; + String container_; + String flags_type_; + String qname_type_; + String xs_string_type_; + String properties_type_; + String error_handler_type_; + String list_stream_type_; + String namespace_infomap_type_; + String parser_type_; + String std_ostream_type_; + String ostream_type_; + String istream_type_; + String xerces_ns_; + String dom_auto_ptr_; + String dom_node_key_; + String as_double_type_; + String as_decimal_type_; + + Boolean generate_xml_schema_; + Boolean doxygen_; + + typedef + Cult::Containers::Deque<String> + NamespaceStack; + + typedef + Cult::Containers::Deque<String> + ScopeStack; + + String ns_scope_; + + NamespaceStack& ns_scope_stack; + NamespaceStack ns_scope_stack_; + + RegexCustomTypeMap regex_custom_type_map_; + DirectCustomTypeMap direct_custom_type_map_; + + private: + WideRegexPat const cxx_uq_id_expr_; + WideRegexPat const& cxx_uq_id_expr; + }; + + // Check whether this Schema type maps to a fundamental C++ type. + // + struct IsFundamentalType: Traversal::Fundamental::Byte, + Traversal::Fundamental::UnsignedByte, + Traversal::Fundamental::Short, + Traversal::Fundamental::UnsignedShort, + Traversal::Fundamental::Int, + Traversal::Fundamental::UnsignedInt, + Traversal::Fundamental::Long, + Traversal::Fundamental::UnsignedLong, + Traversal::Fundamental::Integer, + Traversal::Fundamental::NonPositiveInteger, + Traversal::Fundamental::NonNegativeInteger, + Traversal::Fundamental::PositiveInteger, + Traversal::Fundamental::NegativeInteger, + + Traversal::Fundamental::Boolean, + + Traversal::Fundamental::Float, + Traversal::Fundamental::Double, + Traversal::Fundamental::Decimal + + { + IsFundamentalType (Boolean& r) + : r_ (r) + { + } + + // Integral types. + // + virtual Void + traverse (SemanticGraph::Fundamental::Byte&) + { + r_ = true; + } + + virtual Void + traverse (SemanticGraph::Fundamental::UnsignedByte&) + { + r_ = true; + } + + virtual Void + traverse (SemanticGraph::Fundamental::Short&) + { + r_ = true; + } + + virtual Void + traverse (SemanticGraph::Fundamental::UnsignedShort&) + { + r_ = true; + } + + virtual Void + traverse (SemanticGraph::Fundamental::Int&) + { + r_ = true; + } + + virtual Void + traverse (SemanticGraph::Fundamental::UnsignedInt&) + { + r_ = true; + } + + virtual Void + traverse (SemanticGraph::Fundamental::Long&) + { + r_ = true; + } + + virtual Void + traverse (SemanticGraph::Fundamental::UnsignedLong&) + { + r_ = true; + } + + virtual Void + traverse (SemanticGraph::Fundamental::Integer&) + { + r_ = true; + } + + virtual Void + traverse (SemanticGraph::Fundamental::NonPositiveInteger&) + { + r_ = true; + } + + virtual Void + traverse (SemanticGraph::Fundamental::NonNegativeInteger&) + { + r_ = true; + } + + virtual Void + traverse (SemanticGraph::Fundamental::PositiveInteger&) + { + r_ = true; + } + + virtual Void + traverse (SemanticGraph::Fundamental::NegativeInteger&) + { + r_ = true; + } + + // Boolean. + // + virtual Void + traverse (SemanticGraph::Fundamental::Boolean&) + { + r_ = true; + } + + // Floats. + // + virtual Void + traverse (SemanticGraph::Fundamental::Float&) + { + r_ = true; + } + + virtual Void + traverse (SemanticGraph::Fundamental::Double&) + { + r_ = true; + } + + virtual Void + traverse (SemanticGraph::Fundamental::Decimal&) + { + r_ = true; + } + + private: + Boolean& r_; + }; + + // Check whether this is a string-based type. + // + struct IsStringBasedType: Traversal::Complex, + Traversal::Union, + Traversal::Fundamental::String, + Traversal::Fundamental::NormalizedString, + Traversal::Fundamental::Token, + Traversal::Fundamental::Name, + Traversal::Fundamental::NameToken, + Traversal::Fundamental::NCName, + Traversal::Fundamental::Language + { + IsStringBasedType (Boolean& r) + : r_ (r) + { + *this >> inherits_ >> *this; + } + + virtual Void + traverse (SemanticGraph::Complex& c) + { + inherits (c, inherits_); + } + + virtual Void + traverse (SemanticGraph::Union&) + { + // Current mapping of union is string-based. + // + r_ = true; + } + + // Strings. + // + virtual Void + traverse (SemanticGraph::Fundamental::String&) + { + r_ = true; + } + + virtual Void + traverse (SemanticGraph::Fundamental::NormalizedString&) + { + r_ = true; + } + + virtual Void + traverse (SemanticGraph::Fundamental::Token&) + { + r_ = true; + } + + virtual Void + traverse (SemanticGraph::Fundamental::NameToken&) + { + r_ = true; + } + + virtual Void + traverse (SemanticGraph::Fundamental::Name&) + { + r_ = true; + } + + virtual Void + traverse (SemanticGraph::Fundamental::NCName&) + { + r_ = true; + } + + virtual Void + traverse (SemanticGraph::Fundamental::Language&) + { + r_ = true; + } + + private: + Boolean& r_; + Traversal::Inherits inherits_; + }; + + + // Check whether this is a enumeration-based type. + // + struct IsEnumBasedType: Traversal::Complex + { + IsEnumBasedType (SemanticGraph::Enumeration*& e) + : enum_ (e) + { + *this >> inherits_; + + inherits_ >> *this; + inherits_ >> enum_; + } + + virtual Void + traverse (SemanticGraph::Complex& c) + { + inherits (c, inherits_); + } + + private: + struct Enumeration: Traversal::Enumeration + { + Enumeration (SemanticGraph::Enumeration*& e) + : e_ (e) + { + } + + virtual Void + traverse (Type& e) + { + if (e_ == 0) + e_ = &e; + } + + private: + SemanticGraph::Enumeration*& e_; + }; + + + private: + Enumeration enum_; + Traversal::Inherits inherits_; + }; + + + // + // + struct MemberTypeName : Context, + Traversal::Type, + Traversal::List, + Traversal::Union, + Traversal::Complex, + + Traversal::AnyType, + Traversal::AnySimpleType, + + Traversal::Fundamental::Byte, + Traversal::Fundamental::UnsignedByte, + Traversal::Fundamental::Short, + Traversal::Fundamental::UnsignedShort, + Traversal::Fundamental::Int, + Traversal::Fundamental::UnsignedInt, + Traversal::Fundamental::Long, + Traversal::Fundamental::UnsignedLong, + Traversal::Fundamental::Integer, + Traversal::Fundamental::NonPositiveInteger, + Traversal::Fundamental::NonNegativeInteger, + Traversal::Fundamental::PositiveInteger, + Traversal::Fundamental::NegativeInteger, + + Traversal::Fundamental::Boolean, + + Traversal::Fundamental::Float, + Traversal::Fundamental::Double, + Traversal::Fundamental::Decimal, + + Traversal::Fundamental::String, + Traversal::Fundamental::NormalizedString, + Traversal::Fundamental::Token, + Traversal::Fundamental::Name, + Traversal::Fundamental::NameToken, + Traversal::Fundamental::NameTokens, + Traversal::Fundamental::NCName, + Traversal::Fundamental::Language, + + Traversal::Fundamental::QName, + + Traversal::Fundamental::Id, + Traversal::Fundamental::IdRef, + Traversal::Fundamental::IdRefs, + + Traversal::Fundamental::AnyURI, + + Traversal::Fundamental::Base64Binary, + Traversal::Fundamental::HexBinary, + + Traversal::Fundamental::Date, + Traversal::Fundamental::DateTime, + Traversal::Fundamental::Duration, + Traversal::Fundamental::Day, + Traversal::Fundamental::Month, + Traversal::Fundamental::MonthDay, + Traversal::Fundamental::Year, + Traversal::Fundamental::YearMonth, + Traversal::Fundamental::Time, + + Traversal::Fundamental::Entity, + Traversal::Fundamental::Entities + + { + MemberTypeName (Context& c) + : Context (c) + { + } + + MemberTypeName (Context& c, std::wostream& o) + : Context (c, o) + { + } + + virtual Void + traverse (SemanticGraph::Type&) + { + abort (); + } + + virtual Void + traverse (SemanticGraph::List& l) + { + os << fq_name (l); + } + + virtual Void + traverse (SemanticGraph::Union& u) + { + os << fq_name (u); + } + + virtual Void + traverse (SemanticGraph::Complex& c) + { + os << fq_name (c); + } + + // anyType & anySimpleType. + // + virtual Void + traverse (SemanticGraph::AnyType& t) + { + os << fq_name (t); + } + + virtual Void + traverse (SemanticGraph::AnySimpleType& t) + { + os << fq_name (t); + } + + // Integral types. + // + virtual Void + traverse (SemanticGraph::Fundamental::Byte& t) + { + os << fq_name (t); + } + + virtual Void + traverse (SemanticGraph::Fundamental::UnsignedByte& t) + { + os << fq_name (t); + } + + virtual Void + traverse (SemanticGraph::Fundamental::Short& t) + { + os << fq_name (t); + } + + virtual Void + traverse (SemanticGraph::Fundamental::UnsignedShort& t) + { + os << fq_name (t); + } + + virtual Void + traverse (SemanticGraph::Fundamental::Int& t) + { + os << fq_name (t); + } + + virtual Void + traverse (SemanticGraph::Fundamental::UnsignedInt& t) + { + os << fq_name (t); + } + + virtual Void + traverse (SemanticGraph::Fundamental::Long& t) + { + os << fq_name (t); + } + + virtual Void + traverse (SemanticGraph::Fundamental::UnsignedLong& t) + { + os << fq_name (t); + } + + virtual Void + traverse (SemanticGraph::Fundamental::Integer& t) + { + os << fq_name (t); + } + + virtual Void + traverse (SemanticGraph::Fundamental::NonPositiveInteger& t) + { + os << fq_name (t); + } + + virtual Void + traverse (SemanticGraph::Fundamental::NonNegativeInteger& t) + { + os << fq_name (t); + } + + virtual Void + traverse (SemanticGraph::Fundamental::PositiveInteger& t) + { + os << fq_name (t); + } + + virtual Void + traverse (SemanticGraph::Fundamental::NegativeInteger& t) + { + os << fq_name (t); + } + + // Boolean. + // + virtual Void + traverse (SemanticGraph::Fundamental::Boolean& t) + { + os << fq_name (t); + } + + // Floats. + // + virtual Void + traverse (SemanticGraph::Fundamental::Float& t) + { + os << fq_name (t); + } + + virtual Void + traverse (SemanticGraph::Fundamental::Double& t) + { + os << fq_name (t); + } + + virtual Void + traverse (SemanticGraph::Fundamental::Decimal& t) + { + os << fq_name (t); + } + + // Strings. + // + virtual Void + traverse (SemanticGraph::Fundamental::String& t) + { + os << fq_name (t); + } + + virtual Void + traverse (SemanticGraph::Fundamental::NormalizedString& t) + { + os << fq_name (t); + } + + virtual Void + traverse (SemanticGraph::Fundamental::Token& t) + { + os << fq_name (t); + } + + virtual Void + traverse (SemanticGraph::Fundamental::NameToken& t) + { + os << fq_name (t); + } + + virtual Void + traverse (SemanticGraph::Fundamental::NameTokens& t) + { + os << fq_name (t); + } + + virtual Void + traverse (SemanticGraph::Fundamental::Name& t) + { + os << fq_name (t); + } + + virtual Void + traverse (SemanticGraph::Fundamental::NCName& t) + { + os << fq_name (t); + } + + virtual Void + traverse (SemanticGraph::Fundamental::Language& t) + { + os << fq_name (t); + } + + + // Qualified name. + // + virtual Void + traverse (SemanticGraph::Fundamental::QName& t) + { + os << fq_name (t); + } + + + // ID/IDREF. + // + virtual Void + traverse (SemanticGraph::Fundamental::Id& t) + { + os << fq_name (t); + } + + virtual Void + traverse (SemanticGraph::Fundamental::IdRef& t) + { + if (t.named_p ()) + { + // IDREF<anyType> + // + os << fq_name (t); + } + else + { + SemanticGraph::Nameable& ncname ( + xs_ns ().find ("NCName").first->named ()); + + os << "::xsd::cxx::tree::idref< " << char_type << ", " << + fq_name (ncname) << ", " << + type_name (t.argumented ().type ()) << " >"; + } + } + + virtual Void + traverse (SemanticGraph::Fundamental::IdRefs& t) + { + if (t.named_p ()) + { + // IDREFS<anyType> + // + os << fq_name (t); + } + else + { + SemanticGraph::Nameable& ncname ( + xs_ns ().find ("NCName").first->named ()); + + os << "::xsd::cxx::tree::idrefs< " << char_type << ", " << + any_simple_type << ", ::xsd::cxx::tree::idref< " << + char_type << ", " << fq_name (ncname) << ", " << + type_name (t.argumented ().type ()) << " > >"; + } + } + + // URI. + // + virtual Void + traverse (SemanticGraph::Fundamental::AnyURI& t) + { + os << fq_name (t); + } + + // Binary. + // + virtual Void + traverse (SemanticGraph::Fundamental::Base64Binary& t) + { + os << fq_name (t); + } + + virtual Void + traverse (SemanticGraph::Fundamental::HexBinary& t) + { + os << fq_name (t); + } + + + // Date/time. + // + virtual Void + traverse (SemanticGraph::Fundamental::Date& t) + { + os << fq_name (t); + } + + virtual Void + traverse (SemanticGraph::Fundamental::DateTime& t) + { + os << fq_name (t); + } + + virtual Void + traverse (SemanticGraph::Fundamental::Duration& t) + { + os << fq_name (t); + } + + virtual Void + traverse (SemanticGraph::Fundamental::Day& t) + { + os << fq_name (t); + } + + virtual Void + traverse (SemanticGraph::Fundamental::Month& t) + { + os << fq_name (t); + } + + virtual Void + traverse (SemanticGraph::Fundamental::MonthDay& t) + { + os << fq_name (t); + } + + virtual Void + traverse (SemanticGraph::Fundamental::Year& t) + { + os << fq_name (t); + } + + virtual Void + traverse (SemanticGraph::Fundamental::YearMonth& t) + { + os << fq_name (t); + } + + virtual Void + traverse (SemanticGraph::Fundamental::Time& t) + { + os << fq_name (t); + } + + // Entity. + // + virtual Void + traverse (SemanticGraph::Fundamental::Entity& t) + { + os << fq_name (t); + } + + virtual Void + traverse (SemanticGraph::Fundamental::Entities& t) + { + os << fq_name (t); + } + + private: + // For idref/idrefs + // + String + type_name (SemanticGraph::Type& t) + { + // This type is always named. + // + std::wostringstream o; + + MemberTypeName type (*this, o); + type.dispatch (t); + + return o.str (); + } + }; + + + // + // + struct BaseTypeName : MemberTypeName + { + BaseTypeName (Context& c) + : MemberTypeName (c) + { + } + + BaseTypeName (Context& c, std::wostream& o) + : MemberTypeName (c, o) + { + } + + virtual Void + fundamental_base (SemanticGraph::Type& t) + { + os << "::xsd::cxx::tree::fundamental_base< " << + fq_name (t) << ", " << char_type << ", " << + any_simple_type << " >"; + } + + // Integrals. + // + virtual Void + traverse (SemanticGraph::Fundamental::Byte& t) + { + fundamental_base (t); + } + + virtual Void + traverse (SemanticGraph::Fundamental::UnsignedByte& t) + { + fundamental_base (t); + } + + virtual Void + traverse (SemanticGraph::Fundamental::Short& t) + { + fundamental_base (t); + } + + virtual Void + traverse (SemanticGraph::Fundamental::UnsignedShort& t) + { + fundamental_base (t); + } + + virtual Void + traverse (SemanticGraph::Fundamental::Int& t) + { + fundamental_base (t); + } + + virtual Void + traverse (SemanticGraph::Fundamental::UnsignedInt& t) + { + fundamental_base (t); + } + + virtual Void + traverse (SemanticGraph::Fundamental::Long& t) + { + fundamental_base (t); + } + + virtual Void + traverse (SemanticGraph::Fundamental::UnsignedLong& t) + { + fundamental_base (t); + } + + virtual Void + traverse (SemanticGraph::Fundamental::Integer& t) + { + fundamental_base (t); + } + + virtual Void + traverse (SemanticGraph::Fundamental::NonPositiveInteger& t) + { + fundamental_base (t); + } + + virtual Void + traverse (SemanticGraph::Fundamental::NonNegativeInteger& t) + { + fundamental_base (t); + } + + virtual Void + traverse (SemanticGraph::Fundamental::PositiveInteger& t) + { + fundamental_base (t); + } + + virtual Void + traverse (SemanticGraph::Fundamental::NegativeInteger& t) + { + fundamental_base (t); + } + + // Boolean. + // + virtual Void + traverse (SemanticGraph::Fundamental::Boolean& t) + { + fundamental_base (t); + } + + // Floats. + // + virtual Void + traverse (SemanticGraph::Fundamental::Float& t) + { + fundamental_base (t); + } + + virtual Void + traverse (SemanticGraph::Fundamental::Double& t) + { + os << "::xsd::cxx::tree::fundamental_base< " << + fq_name (t) << ", " << char_type << ", " << + any_simple_type << ", " << + "::xsd::cxx::tree::schema_type::double_ >"; + } + + virtual Void + traverse (SemanticGraph::Fundamental::Decimal& t) + { + os << "::xsd::cxx::tree::fundamental_base< " << + fq_name (t) << ", " << char_type << ", " << + any_simple_type << ", " << + "::xsd::cxx::tree::schema_type::decimal >"; + } + }; + + // Initial value should be true. + // + struct IsSimpleType: Traversal::Complex, + Traversal::Member, + Traversal::Any, + Traversal::AnyAttribute + { + IsSimpleType (Boolean& v) + : v_ (v) + { + *this >> names_ >> *this; + *this >> inherits_ >> *this; + } + + virtual Void + traverse (SemanticGraph::Complex& c) + { + names (c, names_); + + if (v_) + inherits (c, inherits_); + } + + virtual Void + traverse (SemanticGraph::Member&) + { + v_ = false; + } + + virtual Void + traverse (SemanticGraph::Any&) + { + v_ = false; + } + + virtual Void + traverse (SemanticGraph::AnyAttribute&) + { + v_ = false; + } + + private: + Boolean& v_; + Traversal::Names names_; + Traversal::Inherits inherits_; + }; + + // Test whether we need to generate default c-tor. Note that we are not + // interested in anyAttribute since it is always mapped to a sequence. + // + struct GenerateDefaultCtor: Traversal::Complex, + Traversal::Enumeration, + Traversal::Type, + Traversal::Element, + Traversal::Attribute, + Traversal::Any, + Context + { + // generate should initially be false. + // + GenerateDefaultCtor (Context&, Boolean& generate, Boolean no_base); + + virtual Void + traverse (SemanticGraph::Complex&); + + virtual Void + traverse (SemanticGraph::Type&); + + virtual Void + traverse (SemanticGraph::Enumeration&); + + virtual Void + traverse (SemanticGraph::Element&); + + virtual Void + traverse (SemanticGraph::Attribute&); + + virtual Void + traverse (SemanticGraph::Any&); + + private: + Boolean& generate_; + Boolean no_base_; + + private: + Traversal::Inherits inherits_; + Traversal::Names names_; + }; + + // Test whether we need to generate from-base c-tor. + // + struct GenerateFromBaseCtor: Traversal::Complex + { + // generate should initially be false. + // + GenerateFromBaseCtor (Context& c, Boolean& generate); + + virtual Void + traverse (SemanticGraph::Complex& c); + + private: + Boolean& generate_; + Boolean custom_; + + // Note that we are not interested in anyAttribute since it is always + // mapped to a sequence. + // + struct Traverser: Traversal::Type, + Traversal::Complex, + Traversal::Element, + Traversal::Attribute, + Traversal::Any, + Context + { + Traverser (Context& c, Boolean& generate, Boolean& custom); + + virtual Void + traverse (SemanticGraph::Type&); + + virtual Void + traverse (SemanticGraph::Complex&); + + virtual Void + traverse (SemanticGraph::Attribute&); + + virtual Void + traverse (SemanticGraph::Element&); + + virtual Void + traverse (SemanticGraph::Any&); + + private: + Boolean& generate_; + Boolean& custom_; + + private: + Traversal::Inherits inherits_; + Traversal::Names names_; + } traverser_; + + Traversal::Inherits inherits_; + }; + + // Test whether the type has any non-optional element of complex + // (has attributes/elements) and polymorpjic types. + // + struct HasComplexPolyNonOptArgs: Traversal::Complex, + Traversal::Element, + Context + { + // complex and poly should initially be false. clash + // should initially be true. + // + HasComplexPolyNonOptArgs (Context& c, + Boolean including_base, + Boolean& complex, + Boolean& poly, + Boolean& clash); + + virtual Void + traverse (SemanticGraph::Complex&); + + virtual Void + traverse (SemanticGraph::Element&); + + private: + Boolean& complex_; + Boolean& poly_; + Boolean& clash_; + + Traversal::Inherits inherits_; + Traversal::Names names_; + }; + + // Immediate non-optional member. Note that AnyAttribute is always + // mapped to a sequence. + // + struct FromBaseCtorArg: Traversal::Any, + Traversal::Element, + Traversal::Attribute, + Context + { + enum ArgType + { + arg_type, + arg_complex_auto_ptr, + arg_poly_auto_ptr + }; + + FromBaseCtorArg (Context& c, ArgType, Boolean arg); + + virtual Void + traverse (SemanticGraph::Any&); + + virtual Void + traverse (SemanticGraph::Attribute&); + + virtual Void + traverse (SemanticGraph::Element&); + + private: + ArgType arg_type_; + Boolean arg_; + }; + + // List of all non-optional members and a simple base. Note that + // AnyAttribute is always mapped to a sequence. + // + struct CtorArgs: Traversal::Complex, + Traversal::Enumeration, + Traversal::Type, + Traversal::Any, + Traversal::Element, + Traversal::Attribute, + Context + { + enum ArgType + { + arg_type, + arg_complex_auto_ptr, + arg_poly_auto_ptr + }; + + // The second version outputs the argument name and stores + // in in the base_arg string. + // + CtorArgs (Context&, ArgType); + CtorArgs (Context&, ArgType, String& base_arg); + + virtual Void + traverse (SemanticGraph::Type&); + + virtual Void + traverse (SemanticGraph::Enumeration&); + + virtual Void + traverse (SemanticGraph::Any&); + + virtual Void + traverse (SemanticGraph::Attribute&); + + virtual Void + traverse (SemanticGraph::Element&); + + private: + String + comma (); + + private: + ArgType arg_type_; + String base_; + String* base_arg_; + Boolean first_; + + private: + Traversal::Inherits inherits_; + Traversal::Names names_; + + MemberTypeName member_name_; + }; + + + // Check whether we need to generate c-tor without the base argument. + // + struct GenerateWithoutBaseCtor: Traversal::List, + Traversal::Union, + Traversal::Complex, + Traversal::Enumeration, + + Traversal::AnyType, + Traversal::AnySimpleType, + + Traversal::Fundamental::String, + Traversal::Fundamental::NormalizedString, + Traversal::Fundamental::Token, + + Traversal::Fundamental::NameTokens, + Traversal::Fundamental::IdRefs, + + Traversal::Fundamental::Base64Binary, + Traversal::Fundamental::HexBinary + { + // generate should initially be false. + // + GenerateWithoutBaseCtor (Boolean& generate) + : generate_ (generate) + { + *this >> inherits_ >> *this; + } + + virtual Void + traverse (SemanticGraph::List&) + { + generate_ = true; + } + + virtual Void + traverse (SemanticGraph::Union&) + { + // No default initialization. + } + + virtual Void + traverse (SemanticGraph::Complex& c) + { + Complex::inherits (c); + } + + virtual Void + traverse (SemanticGraph::Enumeration&) + { + // No default initialization. + } + + virtual Void + traverse (SemanticGraph::AnyType&) + { + generate_ = true; + } + + virtual Void + traverse (SemanticGraph::AnySimpleType&) + { + generate_ = true; + } + + virtual Void + traverse (SemanticGraph::Fundamental::String&) + { + generate_ = true; + } + + virtual Void + traverse (SemanticGraph::Fundamental::NormalizedString&) + { + generate_ = true; + } + + virtual Void + traverse (SemanticGraph::Fundamental::Token&) + { + generate_ = true; + } + + virtual Void + traverse (SemanticGraph::Fundamental::NameTokens&) + { + generate_ = true; + } + + virtual Void + traverse (SemanticGraph::Fundamental::IdRefs&) + { + generate_ = true; + } + + virtual Void + traverse (SemanticGraph::Fundamental::Base64Binary&) + { + generate_ = true; + } + + virtual Void + traverse (SemanticGraph::Fundamental::HexBinary&) + { + generate_ = true; + } + + private: + Boolean& generate_; + Traversal::Inherits inherits_; + }; + + + // List of all non-optional members sans simple base. Note that + // AnyAttribute is always mapped to a sequence. + // + struct CtorArgsWithoutBase: Traversal::Complex, + Traversal::Any, + Traversal::Element, + Traversal::Attribute, + Context + { + enum ArgType + { + arg_type, + arg_complex_auto_ptr, + arg_poly_auto_ptr + }; + + CtorArgsWithoutBase (Context& c, ArgType, Boolean arg, Boolean first); + + virtual Void + traverse (SemanticGraph::Any&); + + virtual Void + traverse (SemanticGraph::Element&); + + virtual Void + traverse (SemanticGraph::Attribute&); + + private: + String + comma (); + + private: + ArgType arg_type_; + Boolean arg_; + Boolean first_; + + private: + Traversal::Inherits inherits_; + Traversal::Names names_; + }; + + // + // + struct GlobalElementBase + { + GlobalElementBase (Context& c) + : ctx_ (c) + { + } + + Boolean + generate_p (SemanticGraph::Element&); + + Boolean + doc_root_p (SemanticGraph::Element&); + + private: + Context& ctx_; + }; + + + // + // + struct Namespace: CXX::Namespace, + GlobalElementBase, + CXX::Namespace::ScopeTracker + { + Namespace (Context&, + UnsignedLong first = 1, + UnsignedLong last = 0); + + virtual Void + traverse (Type&); + + protected: + virtual Void + enter (Type&, String const& name, Boolean last); + + virtual Void + leave (); + + protected: + Context& ctx_; + + private: + UnsignedLong first_; + UnsignedLong last_; + UnsignedLong count_; + }; + + // + // + struct DocumentedNamespace: Namespace + { + DocumentedNamespace (Context& c) + : Namespace (c) + { + } + + virtual Void + enter (Type& ns, String const& name, Boolean last) + { + Namespace::enter (ns, name, last); + + // Only add documentation to the innermost namespace. + // + if (ctx_.doxygen && name && last) + { + ctx_.os << "/**" << endl + << " * @brief C++ namespace for the %" << + ctx_.comment (ns.name ()) << endl + << " * schema namespace." << endl + << " */" << endl; + } + } + }; + + // + // + struct TypeForward: Traversal::Type, Context + { + TypeForward (Context& c) + : Context (c) + { + } + + virtual Void + traverse (SemanticGraph::Type& t); + }; + + struct Includes: Traversal::Imports, + Traversal::Includes + { + enum Type + { + forward, + header, + inline_, + source + }; + + Includes (Context& c, Type type) + : ctx_ (c), + type_ (type), + forward_ (c.options.value<CLI::generate_forward> ()), + namespace_ (c), + type_forward_ (c) + { + schema_ >> schema_names_ >> namespace_ >> names_ >> type_forward_; + } + + virtual Void + traverse (SemanticGraph::Imports& i) + { + traverse_ (i); + } + + virtual Void + traverse (SemanticGraph::Includes& i) + { + traverse_ (i); + } + + private: + Void + traverse_ (SemanticGraph::Uses&); + + private: + Context& ctx_; + Type type_; + Boolean forward_; + + Traversal::Schema schema_; + Traversal::Names schema_names_; + Namespace namespace_; + Traversal::Names names_; + TypeForward type_forward_; + }; + + // + // + struct FundIncludes: Traversal::Fundamental::Byte, + Traversal::Fundamental::UnsignedByte, + Traversal::Fundamental::Short, + Traversal::Fundamental::UnsignedShort, + Traversal::Fundamental::Int, + Traversal::Fundamental::UnsignedInt, + Traversal::Fundamental::Long, + Traversal::Fundamental::UnsignedLong, + Traversal::Fundamental::Integer, + Traversal::Fundamental::NonPositiveInteger, + Traversal::Fundamental::NonNegativeInteger, + Traversal::Fundamental::PositiveInteger, + Traversal::Fundamental::NegativeInteger, + + Traversal::Fundamental::Boolean, + + Traversal::Fundamental::Float, + Traversal::Fundamental::Double, + Traversal::Fundamental::Decimal, + Context + { + FundIncludes (Context& c, String const& prefix) + : Context (c), prefix_ (prefix), + long_ (false), unsigned_long_ (false) + { + } + + // Integral types. + // + virtual Void + traverse (SemanticGraph::Fundamental::Byte& t) + { + gen_include (t, "byte.hxx"); + } + + virtual Void + traverse (SemanticGraph::Fundamental::UnsignedByte& t) + { + gen_include (t, "unsigned-byte.hxx"); + } + + virtual Void + traverse (SemanticGraph::Fundamental::Short& t) + { + gen_include (t, "short.hxx"); + } + + virtual Void + traverse (SemanticGraph::Fundamental::UnsignedShort& t) + { + gen_include (t, "unsigned-short.hxx"); + } + + virtual Void + traverse (SemanticGraph::Fundamental::Int& t) + { + gen_include (t, "int.hxx"); + } + + virtual Void + traverse (SemanticGraph::Fundamental::UnsignedInt& t) + { + gen_include (t, "unsigned-int.hxx"); + } + + virtual Void + traverse (SemanticGraph::Fundamental::Long& t) + { + if (!long_) + long_ = gen_include (t, "long.hxx"); + } + + virtual Void + traverse (SemanticGraph::Fundamental::UnsignedLong& t) + { + if (!unsigned_long_) + unsigned_long_ = gen_include (t, "unsigned-long.hxx"); + } + + virtual Void + traverse (SemanticGraph::Fundamental::Integer& t) + { + if (!long_) + long_ = gen_include (t, "long.hxx"); + } + + virtual Void + traverse (SemanticGraph::Fundamental::NonPositiveInteger& t) + { + if (!long_) + long_ = gen_include (t, "long.hxx"); + } + + virtual Void + traverse (SemanticGraph::Fundamental::NonNegativeInteger& t) + { + if (!unsigned_long_) + unsigned_long_ = gen_include (t, "unsigned-long.hxx"); + } + + virtual Void + traverse (SemanticGraph::Fundamental::PositiveInteger& t) + { + if (!unsigned_long_) + unsigned_long_ = gen_include (t, "unsigned-long.hxx"); + } + + virtual Void + traverse (SemanticGraph::Fundamental::NegativeInteger& t) + { + if (!long_) + long_ = gen_include (t, "long.hxx"); + } + + // Boolean. + // + virtual Void + traverse (SemanticGraph::Fundamental::Boolean& t) + { + gen_include (t, "boolean.hxx"); + } + + // Floats. + // + virtual Void + traverse (SemanticGraph::Fundamental::Float& t) + { + gen_include (t, "float.hxx"); + } + + virtual Void + traverse (SemanticGraph::Fundamental::Double& t) + { + gen_include (t, "double.hxx"); + } + + virtual Void + traverse (SemanticGraph::Fundamental::Decimal& t) + { + gen_include (t, "decimal.hxx"); + } + + private: + Boolean + gen_include (SemanticGraph::Type& t, String const& file) + { + String custom; + + // XML Schema built-in type customization is only possible when + // we are generating separate header. + // + if (generate_xml_schema && custom_type (t, custom)) + { + String new_name; + renamed_type (t, new_name); + + if (!new_name) + return false; + } + + os << "#include <xsd/cxx/tree/" << prefix_ << "/" << file << ">" + << endl; + + return true; + } + + private: + String prefix_; + Boolean long_; + Boolean unsigned_long_; + }; + } +} + +#endif // CXX_TREE_ELEMENTS_HXX diff --git a/xsd/xsd/cxx/tree/fundamental-header.hxx b/xsd/xsd/cxx/tree/fundamental-header.hxx new file mode 100644 index 0000000..71cfbea --- /dev/null +++ b/xsd/xsd/cxx/tree/fundamental-header.hxx @@ -0,0 +1,1320 @@ +// file : xsd/cxx/tree/fundamental-header.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef CXX_TREE_FUNDAMENTAL_HEADER_HXX +#define CXX_TREE_FUNDAMENTAL_HEADER_HXX + +#include <cult/containers/set.hxx> +#include <cult/containers/vector.hxx> + +#include <xsd-frontend/semantic-graph.hxx> +#include <xsd-frontend/traversal.hxx> + +#include <cxx/tree/elements.hxx> + +namespace CXX +{ + namespace Tree + { + struct FundamentalNamespace : DocumentedNamespace, + + Traversal::AnyType, + Traversal::AnySimpleType, + + Traversal::Fundamental::Byte, + Traversal::Fundamental::UnsignedByte, + Traversal::Fundamental::Short, + Traversal::Fundamental::UnsignedShort, + Traversal::Fundamental::Int, + Traversal::Fundamental::UnsignedInt, + Traversal::Fundamental::Long, + Traversal::Fundamental::UnsignedLong, + Traversal::Fundamental::Integer, + Traversal::Fundamental::NonPositiveInteger, + Traversal::Fundamental::NonNegativeInteger, + Traversal::Fundamental::PositiveInteger, + Traversal::Fundamental::NegativeInteger, + + Traversal::Fundamental::Boolean, + + Traversal::Fundamental::Float, + Traversal::Fundamental::Double, + Traversal::Fundamental::Decimal, + + Traversal::Fundamental::String, + Traversal::Fundamental::NormalizedString, + Traversal::Fundamental::Token, + Traversal::Fundamental::Name, + Traversal::Fundamental::NameToken, + Traversal::Fundamental::NameTokens, + Traversal::Fundamental::NCName, + Traversal::Fundamental::Language, + + Traversal::Fundamental::Id, + Traversal::Fundamental::IdRef, + Traversal::Fundamental::IdRefs, + + Traversal::Fundamental::AnyURI, + + Traversal::Fundamental::QName, + + Traversal::Fundamental::Base64Binary, + Traversal::Fundamental::HexBinary, + + Traversal::Fundamental::Date, + Traversal::Fundamental::DateTime, + Traversal::Fundamental::Duration, + Traversal::Fundamental::Day, + Traversal::Fundamental::Month, + Traversal::Fundamental::MonthDay, + Traversal::Fundamental::Year, + Traversal::Fundamental::YearMonth, + Traversal::Fundamental::Time, + + Traversal::Fundamental::Entity, + Traversal::Fundamental::Entities, + Context + { + FundamentalNamespace (Context& c) + : DocumentedNamespace (c), + Context (c), + export_ (c.options.value<CLI::export_xml_schema> () && type_exp) + { + *this >> names_ >> *this; + + if (export_) + xs_ns_ = ns_name (xs_ns ()); + } + + Void + gen_typedef (String const& name, + String const& type, + String const& arg1 = L"", + String const& arg2 = L"", + String const& arg3 = L"", + Boolean export_type = true) + { + os << "typedef " << type; + + // Use unqualified arguments since we are in the same + // namespace. + // + if (arg1) + { + os << arg1; + + if (arg2) + { + os << ", " << arg2; + + if (arg3) + os << ", " << arg3; + } + + os << " >"; + } + + os << " " << name << ";"; + + if (export_type && export_ && type.find (L'<') != String::npos) + { + String s (type); + + // Use qualified arguments. + // + if (arg1) + { + s += xs_ns_; + s += L"::"; + s += arg1; + + if (arg2) + { + s += L", "; + s += xs_ns_; + s += L"::"; + s += arg2; + + if (arg3) + { + s += L", "; + s += xs_ns_; + s += L"::"; + s += arg3; + } + } + + s += " >"; + } + + if (exports_set_.count (s) == 0) + { + exports_.push_back (s); + exports_set_.insert (s); + } + } + } + + String + built_in_type (SemanticGraph::Type& t, + String const& type, + String const& arg1 = L"", + String const& arg2 = L"", + String const& arg3 = L"") + { + String custom; + + String name (ename (t)); + + // XML Schema built-in type customization is only possible when + // we are generating separate header. + // + if (generate_xml_schema && custom_type (t, custom)) + { + if (custom.empty ()) + custom = name; + + String new_name; + renamed_type (t, new_name); + + if (new_name) + { + gen_typedef (new_name, type, arg1, arg2, arg3); + + if (doxygen) + os << endl; + } + + if (doxygen) + os << "/**" << endl + << " * @brief C++ type corresponding to the " << + comment (t.name ()) << " XML Schema" << endl + << " * built-in type." << endl + << " */" << endl; + + if (custom == name) + os << "class " << name << ";"; + else + os << "typedef " << custom << " " << name << ";"; + + if (doxygen) + os << endl; + } + else + { + // Otherwise generate simple typedef. + // + + if (doxygen) + os << "/**" << endl + << " * @brief C++ type corresponding to the " << + comment (t.name ()) << " XML Schema" << endl + << " * built-in type." << endl + << " */" << endl; + + gen_typedef (name, type, arg1, arg2, arg3); + + if (doxygen) + os << endl; + } + + return name; + } + + // anyType and anySimpleType + // + virtual Void + traverse (SemanticGraph::AnyType& t) + { + os << "// anyType and anySimpleType." << endl + << "//" << endl; + + if (doxygen) + os << endl; + + type_ = built_in_type (t, "::xsd::cxx::tree::type"); + } + + virtual Void + traverse (SemanticGraph::AnySimpleType& t) + { + simple_type_ = built_in_type ( + t, L"::xsd::cxx::tree::simple_type< ", type_); + + if (doxygen) + os << "/**" << endl + << " * @brief Alias for the anyType type." << endl + << " */" << endl; + + gen_typedef (xs_ns ().context().get<String> ("container"), + "::xsd::cxx::tree::type"); + + os << endl; + + if (doxygen) + os << endl; + } + + // Integrals. + // + virtual Void + traverse (SemanticGraph::Fundamental::Byte& t) + { + os << "// 8-bit" << endl + << "//" << endl; + + if (doxygen) + os << endl; + + built_in_type (t, "signed char"); + } + + virtual Void + traverse (SemanticGraph::Fundamental::UnsignedByte& t) + { + built_in_type (t, "unsigned char"); + os << endl; + } + + virtual Void + traverse (SemanticGraph::Fundamental::Short& t) + { + os << "// 16-bit" << endl + << "//" << endl; + + if (doxygen) + os << endl; + + built_in_type (t, "short"); + } + + virtual Void + traverse (SemanticGraph::Fundamental::UnsignedShort& t) + { + built_in_type (t, "unsigned short"); + os << endl; + } + + virtual Void + traverse (SemanticGraph::Fundamental::Int& t) + { + os << "// 32-bit" << endl + << "//" << endl; + + if (doxygen) + os << endl; + + built_in_type (t, "int"); + } + + virtual Void + traverse (SemanticGraph::Fundamental::UnsignedInt& t) + { + built_in_type (t, "unsigned int"); + os << endl; + } + + virtual Void + traverse (SemanticGraph::Fundamental::Long& t) + { + os << "// 64-bit" << endl + << "//" <<endl; + + if (doxygen) + os << endl; + + built_in_type (t, "long long"); + } + + virtual Void + traverse (SemanticGraph::Fundamental::UnsignedLong& t) + { + built_in_type (t, "unsigned long long"); + os << endl; + } + + virtual Void + traverse (SemanticGraph::Fundamental::Integer& t) + { + os << "// Supposed to be arbitrary-length integral types." << endl + << "//" << endl; + + if (doxygen) + os << endl; + + built_in_type (t, "long long"); + } + + virtual Void + traverse (SemanticGraph::Fundamental::NonPositiveInteger& t) + { + built_in_type (t, "long long"); + } + + virtual Void + traverse (SemanticGraph::Fundamental::NonNegativeInteger& t) + { + built_in_type (t, "unsigned long long"); + } + + virtual Void + traverse (SemanticGraph::Fundamental::PositiveInteger& t) + { + built_in_type (t, "unsigned long long"); + } + + virtual Void + traverse (SemanticGraph::Fundamental::NegativeInteger& t) + { + built_in_type (t, "long long"); + os << endl; + } + + // Boolean. + // + virtual Void + traverse (SemanticGraph::Fundamental::Boolean& t) + { + os << "// Boolean." << endl + << "//" << endl; + + if (doxygen) + os << endl; + + built_in_type (t, "bool"); + + os << endl; + } + + // Floats. + // + virtual Void + traverse (SemanticGraph::Fundamental::Float& t) + { + os << "// Floating-point types." << endl + << "//" << endl; + + if (doxygen) + os << endl; + + built_in_type (t, "float"); + } + + virtual Void + traverse (SemanticGraph::Fundamental::Double& t) + { + double_ = built_in_type (t, "double"); + } + + virtual Void + traverse (SemanticGraph::Fundamental::Decimal& t) + { + decimal_ = built_in_type (t, "double"); + os << endl; + } + + + // Strings. + // + virtual Void + traverse (SemanticGraph::Fundamental::String& t) + { + os << "// String types." << endl + << "//" << endl; + + if (doxygen) + os << endl; + + string_ = built_in_type ( + t, L"::xsd::cxx::tree::string< " + char_type + L", ", simple_type_); + } + + virtual Void + traverse (SemanticGraph::Fundamental::NormalizedString& t) + { + norm_string_ = built_in_type ( + t, + L"::xsd::cxx::tree::normalized_string< " + char_type + L", ", + string_); + } + + virtual Void + traverse (SemanticGraph::Fundamental::Token& t) + { + token_ = built_in_type ( + t, L"::xsd::cxx::tree::token< " + char_type + L", ", norm_string_); + } + + virtual Void + traverse (SemanticGraph::Fundamental::NameToken& t) + { + nmtoken_ = built_in_type ( + t, L"::xsd::cxx::tree::nmtoken< " + char_type + L", ", token_); + } + + virtual Void + traverse (SemanticGraph::Fundamental::NameTokens& t) + { + built_in_type ( + t, + L"::xsd::cxx::tree::nmtokens< " + char_type + L", ", + simple_type_, + nmtoken_); + } + + virtual Void + traverse (SemanticGraph::Fundamental::Name& t) + { + name_ = built_in_type ( + t, L"::xsd::cxx::tree::name< " + char_type + L", ", token_); + } + + virtual Void + traverse (SemanticGraph::Fundamental::NCName& t) + { + ncname_ = built_in_type ( + t, L"::xsd::cxx::tree::ncname< " + char_type + L", ", name_); + } + + virtual Void + traverse (SemanticGraph::Fundamental::Language& t) + { + built_in_type ( + t, L"::xsd::cxx::tree::language< " + char_type + L", ", token_); + + os << endl; + } + + // ID/IDREF. + // + virtual Void + traverse (SemanticGraph::Fundamental::Id& t) + { + os << "// ID/IDREF." << endl + << "//" << endl; + + if (doxygen) + os << endl; + + built_in_type ( + t, L"::xsd::cxx::tree::id< " + char_type + L", ", ncname_); + } + + virtual Void + traverse (SemanticGraph::Fundamental::IdRef& t) + { + idref_ = built_in_type ( + t, L"::xsd::cxx::tree::idref< " + char_type + L", ", ncname_, type_); + } + + virtual Void + traverse (SemanticGraph::Fundamental::IdRefs& t) + { + built_in_type ( + t, + L"::xsd::cxx::tree::idrefs< " + char_type + L", ", + simple_type_, + idref_); + + os << endl; + } + + + // URI. + // + virtual Void + traverse (SemanticGraph::Fundamental::AnyURI& t) + { + os << "// URI." << endl + << "//" << endl; + + if (doxygen) + os << endl; + + uri_ = built_in_type ( + t, L"::xsd::cxx::tree::uri< " + char_type + L", ", simple_type_); + + os << endl; + } + + // Qualified name. + // + virtual Void + traverse (SemanticGraph::Fundamental::QName& t) + { + os << "// Qualified name." << endl + << "//" << endl; + + if (doxygen) + os << endl; + + built_in_type ( + t, + L"::xsd::cxx::tree::qname< " + char_type + L", ", + simple_type_, + uri_, + ncname_); + + os << endl; + } + + // Binary. + // + virtual Void + traverse (SemanticGraph::Fundamental::Base64Binary& t) + { + os << "// Binary." << endl + << "//" << endl; + + if (doxygen) + os << endl + << "/**" << endl + << " * @brief Binary buffer type." << endl + << " */" << endl; + + gen_typedef (xs_ns ().context().get<String> ("buffer"), + L"::xsd::cxx::tree::buffer< " + char_type + L" >"); + + if (doxygen) + os << endl; + + built_in_type ( + t, + L"::xsd::cxx::tree::base64_binary< " + char_type + L", ", + simple_type_); + } + + virtual Void + traverse (SemanticGraph::Fundamental::HexBinary& t) + { + built_in_type ( + t, + L"::xsd::cxx::tree::hex_binary< " + char_type + L", ", + simple_type_); + + os << endl; + } + + + // Date/time. + // + virtual Void + traverse (SemanticGraph::Fundamental::Date& t) + { + os << "// Date/time." << endl + << "//" << endl; + + if (doxygen) + os << endl + << "/**" << endl + << " * @brief Time zone type." << endl + << " */" << endl; + + gen_typedef (xs_ns ().context().get<String> ("time-zone"), + "::xsd::cxx::tree::time_zone"); + + if (doxygen) + os << endl; + + built_in_type ( + t, L"::xsd::cxx::tree::date< " + char_type + L", ", simple_type_); + } + + virtual Void + traverse (SemanticGraph::Fundamental::DateTime& t) + { + built_in_type ( + t, + L"::xsd::cxx::tree::date_time< " + char_type + L", ", + simple_type_); + } + + virtual Void + traverse (SemanticGraph::Fundamental::Duration& t) + { + built_in_type ( + t, + L"::xsd::cxx::tree::duration< " + char_type + L", ", + simple_type_); + } + + virtual Void + traverse (SemanticGraph::Fundamental::Day& t) + { + built_in_type ( + t, L"::xsd::cxx::tree::gday< " + char_type + L", ", simple_type_); + } + + virtual Void + traverse (SemanticGraph::Fundamental::Month& t) + { + built_in_type ( + t, L"::xsd::cxx::tree::gmonth< " + char_type + L", ", simple_type_); + } + + virtual Void + traverse (SemanticGraph::Fundamental::MonthDay& t) + { + built_in_type ( + t, + L"::xsd::cxx::tree::gmonth_day< " + char_type + L", ", + simple_type_); + } + + virtual Void + traverse (SemanticGraph::Fundamental::Year& t) + { + built_in_type ( + t, L"::xsd::cxx::tree::gyear< " + char_type + L", ", simple_type_); + } + + virtual Void + traverse (SemanticGraph::Fundamental::YearMonth& t) + { + built_in_type ( + t, + L"::xsd::cxx::tree::gyear_month< " + char_type + L", ", + simple_type_); + } + + virtual Void + traverse (SemanticGraph::Fundamental::Time& t) + { + built_in_type ( + t, L"::xsd::cxx::tree::time< " + char_type + L", ", simple_type_); + + os << endl; + } + + // Entity. + // + virtual Void + traverse (SemanticGraph::Fundamental::Entity& t) + { + os << "// Entity." << endl + << "//" << endl; + + if (doxygen) + os << endl; + + entity_ = built_in_type ( + t, L"::xsd::cxx::tree::entity< " + char_type + L", ", ncname_); + } + + virtual Void + traverse (SemanticGraph::Fundamental::Entities& t) + { + built_in_type ( + t, + L"::xsd::cxx::tree::entities< " + char_type + L", ", + simple_type_, + entity_); + + os << endl; + } + + virtual Void + post (SemanticGraph::Namespace& n) + { + SemanticGraph::Context& c (xs_ns ().context()); + + Boolean parsing (!options.value<CLI::suppress_parsing> ()); + Boolean serialization (options.value<CLI::generate_serialization> ()); + Boolean element_map (options.value<CLI::generate_element_map> ()); + + if (options.value<CLI::generate_element_type> ()) + { + if (doxygen) + os << "/**" << endl + << " * @brief Base class for element types." << endl + << " */" << endl; + else + os << "// Base class for element types." << endl + << "//" << endl; + + gen_typedef ( + c.get<String> ("element-type"), + L"::xsd::cxx::tree::element_type< " + char_type + L", ", + type_); + + os << endl; + } + + if (element_map) + { + if (doxygen) + os << "/**" << endl + << " * @brief Root element map." << endl + << " */" << endl; + else + os << "// Root element map." << endl + << "//" << endl; + + gen_typedef ( + c.get<String> ("element-map"), + L"::xsd::cxx::tree::element_map< " + char_type + L", ", + type_); + + os << endl; + } + + if (serialization) + { + os << "// Namespace information and list stream. Used in" << endl + << "// serialization functions." << endl + << "//" << endl; + + if (doxygen) + os << "/**" << endl + << " * @brief Namespace serialization information." << endl + << " */" << endl; + + gen_typedef ( + c.get<String> ("namespace-info"), + L"::xsd::cxx::xml::dom::namespace_info< " + char_type + L" >"); + + if (doxygen) + os << endl + << "/**" << endl + << " * @brief Namespace serialization information map." << endl + << " */" << endl; + + gen_typedef (c.get<String> ("namespace-infomap"), + L"::xsd::cxx::xml::dom::namespace_infomap< " + + char_type + L" >"); + + if (doxygen) + os << endl + << "/**" << endl + << " * @brief List serialization stream." << endl + << " */" << endl; + + gen_typedef ( + c.get<String> ("list-stream"), + L"::xsd::cxx::tree::list_stream< " + char_type + L" >"); + + if (doxygen) + os << endl + << "/**" << endl + << " * @brief Serialization wrapper for the %double type." << endl + << " */" << endl; + + // Do not export as_double and as_decimal since they are already + // instantiated. + // + gen_typedef (c.get<String> ("as-double"), + L"::xsd::cxx::tree::as_double< ", + double_, + "", + "", + false); + + if (doxygen) + os << endl + << "/**" << endl + << " * @brief Serialization wrapper for the %decimal type." << endl + << " */" << endl; + + gen_typedef (c.get<String> ("as-decimal"), + L"::xsd::cxx::tree::as_decimal< ", + decimal_, + "", + "", + false); + + if (doxygen) + os << endl + << "/**" << endl + << " * @brief Simple type facet." << endl + << " */" << endl; + + gen_typedef (c.get<String> ("facet"), "::xsd::cxx::tree::facet"); + + os << endl; + } + + //@@ Can't change names of ostream/istream since they are + // templates. + // + if (!options.value<CLI::generate_insertion> ().empty ()) + { + if (doxygen) + os << "/**" << endl + << " * @brief Data representation output stream template." << endl + << " */" << endl; + else + os << "// Data representation output stream template." << endl + << "//" << endl; + + os << "using ::xsd::cxx::tree::ostream;" + << endl; + } + + if (!options.value<CLI::generate_extraction> ().empty ()) + { + if (doxygen) + os << "/**" << endl + << " * @brief Data representation input stream template." << endl + << " */" << endl; + else + os << "// Data representation input stream template." << endl + << "//" << endl; + + os << "using ::xsd::cxx::tree::istream;" + << endl; + } + + os << "// Flags and properties." << endl + << "//" << endl; + + if (doxygen) + os << endl + << "/**" << endl + << " * @brief Parsing and serialization flags." << endl + << " */" << endl; + + gen_typedef (c.get<String> ("flags"), "::xsd::cxx::tree::flags"); + + if (doxygen) + os << endl + << "/**" << endl + << " * @brief Parsing properties." << endl + << " */" << endl; + + gen_typedef (c.get<String> ("properties"), + L"::xsd::cxx::tree::properties< " + char_type + L" >"); + os << endl; + + + // + // + if (parsing || serialization) + { + os << "// Parsing/serialization diagnostics." << endl + << "//" << endl; + + if (doxygen) + os << endl + << "/**" << endl + << " * @brief Error severity." << endl + << " */" << endl; + + gen_typedef (c.get<String> ("severity"), + "::xsd::cxx::tree::severity"); + + if (doxygen) + os << endl + << "/**" << endl + << " * @brief Error condition." << endl + << " */" << endl; + + gen_typedef (c.get<String> ("error"), + L"::xsd::cxx::tree::error< " + char_type + L" >"); + + if (doxygen) + os << endl + << "/**" << endl + << " * @brief List of %error conditions." << endl + << " */" << endl; + + gen_typedef (c.get<String> ("diagnostics"), + L"::xsd::cxx::tree::diagnostics< " + char_type + L" >"); + os << endl; + } + + // + // + os << "// Exceptions." << endl + << "//" << endl; + + if (doxygen) + os << endl + << "/**" << endl + << " * @brief Root of the C++/Tree %exception hierarchy." << endl + << " */" << endl; + + gen_typedef (c.get<String> ("exception"), + L"::xsd::cxx::tree::exception< " + char_type + L" >"); + + if (doxygen) + os << endl + << "/**" << endl + << " * @brief Exception indicating that the size argument exceeds" << + endl + << " * the capacity argument." << endl + << " */" << endl; + + gen_typedef (c.get<String> ("bounds"), + L"::xsd::cxx::tree::bounds< " + char_type + L" >"); + + if (doxygen) + os << endl + << "/**" << endl + << " * @brief Exception indicating that a duplicate ID value" << + endl + << " * was encountered in the object model." << endl + << " */" << endl; + + gen_typedef (c.get<String> ("duplicate-id"), + L"::xsd::cxx::tree::duplicate_id< " + char_type + L" >"); + + if (parsing) + { + if (doxygen) + os << endl + << "/**" << endl + << " * @brief Exception indicating a parsing failure." << endl + << " */" << endl; + + gen_typedef (c.get<String> ("parsing"), + L"::xsd::cxx::tree::parsing< " + char_type + L" >"); + + if (doxygen) + os << endl + << "/**" << endl + << " * @brief Exception indicating that an expected element" << + endl + << " * was not encountered." << endl + << " */" << endl; + + gen_typedef ( + c.get<String> ("expected-element"), + L"::xsd::cxx::tree::expected_element< " + char_type + L" >"); + } + + if (parsing || serialization) + { + if (doxygen) + os << endl + << "/**" << endl + << " * @brief Exception indicating that an unexpected " << + "element" << endl + << " * was encountered." << endl + << " */" << endl; + + gen_typedef ( + c.get<String> ("unexpected-element"), + L"::xsd::cxx::tree::unexpected_element< " + char_type + L" >"); + } + + if (parsing) + { + if (doxygen) + os << endl + << "/**" << endl + << " * @brief Exception indicating that an expected " << + "attribute" << endl + << " * was not encountered." << endl + << " */" << endl; + + gen_typedef ( + c.get<String> ("expected-attribute"), + L"::xsd::cxx::tree::expected_attribute< " + char_type + L" >"); + + if (doxygen) + os << endl + << "/**" << endl + << " * @brief Exception indicating that an unexpected " << + "enumerator" << endl + << " * was encountered." << endl + << " */" << endl; + + gen_typedef ( + c.get<String> ("unexpected-enumerator"), + L"::xsd::cxx::tree::unexpected_enumerator< " + char_type + L" >"); + + if (doxygen) + os << endl + << "/**" << endl + << " * @brief Exception indicating that the text content " << + "was" << endl + << " * expected for an element." << endl + << " */" << endl; + + gen_typedef ( + c.get<String> ("expected-text-content"), + L"::xsd::cxx::tree::expected_text_content< " + char_type + L" >"); + + if (doxygen) + os << endl + << "/**" << endl + << " * @brief Exception indicating that a prefix-namespace" << + endl + << " * mapping was not provided." << endl + << " */" << endl; + + gen_typedef ( + c.get<String> ("no-prefix-mapping"), + L"::xsd::cxx::tree::no_prefix_mapping< " + char_type + L" >"); + } + + if (options.value<CLI::generate_polymorphic> ()) + { + if (parsing || serialization) + { + if (doxygen) + os << endl + << "/**" << endl + << " * @brief Exception indicating that the type " << + "information" << endl + << " * is not available for a type." << endl + << " */" << endl; + + gen_typedef ( + c.get<String> ("no-type-info"), + L"::xsd::cxx::tree::no_type_info< " + char_type + L" >"); + } + + if (parsing) + { + if (doxygen) + os << endl + << "/**" << endl + << " * @brief Exception indicating that the types are not" << + endl + << " * related by inheritance." << endl + << " */" << endl; + + gen_typedef ( + c.get<String> ("not-derived"), + L"::xsd::cxx::tree::not_derived< " + char_type + L" >"); + } + } + + if (element_map) + { + if (doxygen) + os << endl + << "/**" << endl + << " * @brief Exception indicating that parsing or " << + "serialization" << endl + << " * information is not available for an element." << endl + << " */" << endl; + + gen_typedef ( + c.get<String> ("no-element-info"), + L"::xsd::cxx::tree::no_element_info< " + char_type + L" >"); + } + + if (serialization) + { + if (doxygen) + os << endl + << "/**" << endl + << " * @brief Exception indicating a serialization " << + "failure." << endl + << " */" << endl; + + gen_typedef ( + c.get<String> ("serialization"), + L"::xsd::cxx::tree::serialization< " + char_type + L" >"); + } + + os << endl; + + if (parsing || serialization) + { + if (doxygen) + os << "/**" << endl + << " * @brief Error handler callback interface." << endl + << " */" << endl; + else + os << "// Error handler callback interface." << endl + << "//" << endl; + + gen_typedef ( + c.get<String> ("error-handler"), + L"::xsd::cxx::xml::error_handler< " + char_type + L" >"); + + os << endl; + } + + if (parsing || serialization) + { + if (doxygen) + os << "/**" << endl + << " * @brief DOM interaction." << endl + << " */" << endl; + else + os << "// DOM interaction." << endl + << "//" << endl; + + os << "namespace dom" + << "{"; + + // @@ Disregarding current naming convention by using the + // fixed name (no template typedef). + // + if (doxygen) + os << "/**" << endl + << " * @brief Automatic pointer for DOMDocument." << endl + << " */" << endl; + else + os << "// Automatic pointer for DOMDocument." << endl + << "//" << endl; + + os << "using ::xsd::cxx::xml::dom::auto_ptr;" + << endl; + + if (parsing) + { + if (!generate_xml_schema) + { + String g (L"XSD_CXX_TREE_TREE_NODE_KEY" + ns_name (n)); + + std::transform (g.begin (), g.end(), g.begin (), upcase); + g = escape (g); // Make it a C++ id. + + os << "#ifndef " << g << endl + << "#define " << g << endl; + } + + if (doxygen) + os << "/**" << endl + << " * @brief DOM user data key for back pointers to " << + "tree nodes." << endl + << " */" << endl; + else + os << "// DOM user data key for back pointers to tree nodes." << endl + << "//" << endl; + + os << "const XMLCh* const " << c.get<String> ("tree-node-key") << + " = ::xsd::cxx::tree::user_data_keys::node;"; + + if (!generate_xml_schema) + os << "#endif" << endl; + } + + os << "}"; // namespace dom + } + + if (element_map) + { + if (doxygen) + os << "//@cond" << endl + << endl; + + if (!generate_xml_schema) + { + String g (L"XSD_CXX_TREE_ELEMENT_MAP_INIT" + ns_name (n)); + + std::transform (g.begin (), g.end(), g.begin (), upcase); + g = escape (g); // Make it a C++ id. + + os << "#ifndef " << g << endl + << "#define " << g << endl; + } + + os << "static" << endl + << "const ::xsd::cxx::tree::element_map_init< " << + char_type << ", " << type_ << " >" << endl + << "_xsd_element_map_init;"; + + if (!generate_xml_schema) + os << "#endif" << endl; + + if (doxygen) + os << endl + << "//@endcond" << endl; + } + + Namespace::post (n); + + // Generate exports. + // + if (export_) + { + StringSet ns_set; + + for (StringList::ConstIterator i (exports_.begin ()); + i != exports_.end (); ++i) + { + String const& e (*i); + + // 12 is to skip ::xsd::cxx:: + // + ns_set.insert (String (e, 12, e.rfind (':', e.find ('<')) - 13)); + } + + os << "#ifndef XSD_NO_EXPORT" << endl + << endl + << "namespace xsd" + << "{" + << "namespace cxx" + << "{"; + + for (StringSet::ConstIterator i (ns_set.begin ()); + i != ns_set.end (); ++i) + { + String const& ns (*i); + String prefix (L"::xsd::cxx::" + ns); + + Size n (1); + for (Size b (0), e (ns.find (':')); ; n++) + { + os << "namespace " << String (ns, b, e) + << "{"; + + if (e == String::npos) + break; + + b = e + 2; + e = ns.find (':', b); + } + + for (StringList::ConstIterator i (exports_.begin ()); + i != exports_.end (); ++i) + { + String const& e (*i); + String ens (e, 12, e.rfind (':', e.find ('<')) - 13); + + if (ns == ens) + { + String type (e, e.rfind (':', e.find ('<')) + 1); + os << "template class " << type_exp << type << ";"; + } + } + + while (n--) + os << "}"; + } + + os << "}" // cxx + << "}" // xsd + << "#endif // XSD_NO_EXPORT" << endl + << endl; + } + } + + private: + typedef Cult::Containers::Set<String> StringSet; + typedef Cult::Containers::Vector<String> StringList; + + Boolean export_; + StringList exports_; + StringSet exports_set_; + String xs_ns_; + + Traversal::Names names_; + + String type_; + String simple_type_; + String string_; + String norm_string_; + String token_; + String nmtoken_; + String name_; + String ncname_; + String idref_; + String uri_; + String entity_; + + String double_; + String decimal_; + }; + } +} + +#endif // CXX_TREE_FUNDAMENTAL_HEADER_HXX diff --git a/xsd/xsd/cxx/tree/generator.cxx b/xsd/xsd/cxx/tree/generator.cxx new file mode 100644 index 0000000..fe5286a --- /dev/null +++ b/xsd/xsd/cxx/tree/generator.cxx @@ -0,0 +1,1842 @@ +// file : xsd/cxx/tree/generator.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <cxx/tree/generator.hxx> + +#include <cxx/tree/elements.hxx> + +#include <cxx/tree/counter.hxx> +#include <cxx/tree/validator.hxx> +#include <cxx/tree/name-processor.hxx> +#include <cxx/tree/polymorphism-processor.hxx> + +#include <cxx/tree/tree-forward.hxx> +#include <cxx/tree/tree-header.hxx> +#include <cxx/tree/tree-inline.hxx> +#include <cxx/tree/tree-source.hxx> + +#include <cxx/tree/parser-header.hxx> +#include <cxx/tree/parser-source.hxx> + +#include <cxx/tree/stream-header.hxx> +#include <cxx/tree/stream-source.hxx> + +#include <cxx/tree/serialization-header.hxx> +#include <cxx/tree/serialization-source.hxx> + +#include <cxx/tree/stream-insertion-header.hxx> +#include <cxx/tree/stream-insertion-source.hxx> +#include <cxx/tree/stream-extraction-source.hxx> + +#include <xsd-frontend/semantic-graph.hxx> + +#include <backend-elements/regex.hxx> +#include <backend-elements/indentation/cxx.hxx> +#include <backend-elements/indentation/sloc.hxx> +#include <backend-elements/indentation/clip.hxx> + +#include <cult/containers/set.hxx> +#include <cult/containers/vector.hxx> + +#include <boost/filesystem/fstream.hpp> + +#include <iostream> + +#include <usage.hxx> + +#include "../../../libxsd/xsd/cxx/version.hxx" + +using std::endl; +using std::wcerr; + +using namespace XSDFrontend::SemanticGraph; + +// +// +typedef +boost::filesystem::wifstream +WideInputFileStream; + +typedef +boost::filesystem::wofstream +WideOutputFileStream; + +namespace CXX +{ + namespace + { + Char const copyright_gpl[] = + "// Copyright (C) 2005-2010 Code Synthesis Tools CC\n" + "//\n" + "// This program was generated by CodeSynthesis XSD, an XML Schema to\n" + "// C++ data binding compiler.\n" + "//\n" + "// This program is free software; you can redistribute it and/or modify\n" + "// it under the terms of the GNU General Public License version 2 as\n" + "// published by the Free Software Foundation.\n" + "//\n" + "// This program is distributed in the hope that it will be useful,\n" + "// but WITHOUT ANY WARRANTY; without even the implied warranty of\n" + "// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n" + "// GNU General Public License for more details.\n" + "//\n" + "// You should have received a copy of the GNU General Public License\n" + "// along with this program; if not, write to the Free Software\n" + "// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA\n" + "//\n" + "// In addition, as a special exception, Code Synthesis Tools CC gives\n" + "// permission to link this program with the Xerces-C++ library (or with\n" + "// modified versions of Xerces-C++ that use the same license as Xerces-C++),\n" + "// and distribute linked combinations including the two. You must obey\n" + "// the GNU General Public License version 2 in all respects for all of\n" + "// the code used other than Xerces-C++. If you modify this copy of the\n" + "// program, you may extend this exception to your version of the program,\n" + "// but you are not obligated to do so. If you do not wish to do so, delete\n" + "// this exception statement from your version.\n" + "//\n" + "// Furthermore, Code Synthesis Tools CC makes a special exception for\n" + "// the Free/Libre and Open Source Software (FLOSS) which is described\n" + "// in the accompanying FLOSSE file.\n" + "//\n\n"; + + Char const copyright_proprietary[] = + "// Copyright (C) 2005-2010 Code Synthesis Tools CC\n" + "//\n" + "// This program was generated by CodeSynthesis XSD, an XML Schema\n" + "// to C++ data binding compiler, in the Proprietary License mode.\n" + "// You should have received a proprietary license from Code Synthesis\n" + "// Tools CC prior to generating this code. See the license text for\n" + "// conditions.\n" + "//\n\n"; + } + + namespace Tree + { + namespace CLI + { + extern Key char_type = "char-type"; + extern Key char_encoding = "char-encoding"; + extern Key output_dir = "output-dir"; + extern Key generate_polymorphic = "generate-polymorphic"; + extern Key polymorphic_type = "polymorphic-type"; + extern Key polymorphic_type_all = "polymorphic-type-all"; + extern Key generate_serialization = "generate-serialization"; + extern Key generate_inline = "generate-inline"; + extern Key generate_ostream = "generate-ostream"; + extern Key generate_doxygen = "generate-doxygen"; + extern Key generate_comparison = "generate-comparison"; + extern Key generate_default_ctor = "generate-default-ctor"; + extern Key generate_from_base_ctor = "generate-from-base-ctor"; + extern Key generate_detach = "generate-detach"; + extern Key generate_wildcard = "generate-wildcard"; + extern Key generate_insertion = "generate-insertion"; + extern Key generate_extraction = "generate-extraction"; + extern Key generate_forward = "generate-forward"; + extern Key generate_xml_schema = "generate-xml-schema"; + extern Key extern_xml_schema = "extern-xml-schema"; + extern Key suppress_parsing = "suppress-parsing"; + extern Key generate_element_type = "generate-element-type"; + extern Key generate_element_map = "generate-element-map"; + extern Key generate_intellisense = "generate-intellisense"; + extern Key omit_default_attributes = "omit-default-attributes"; + extern Key namespace_map = "namespace-map"; + extern Key namespace_regex = "namespace-regex"; + extern Key namespace_regex_trace = "namespace-regex-trace"; + extern Key reserved_name = "reserved-name"; + extern Key type_naming = "type-naming"; + extern Key function_naming = "function-naming"; + extern Key type_regex = "type-regex"; + extern Key accessor_regex = "accessor-regex"; + extern Key one_accessor_regex = "one-accessor-regex"; + extern Key opt_accessor_regex = "opt-accessor-regex"; + extern Key seq_accessor_regex = "seq-accessor-regex"; + extern Key modifier_regex = "modifier-regex"; + extern Key one_modifier_regex = "one-modifier-regex"; + extern Key opt_modifier_regex = "opt-modifier-regex"; + extern Key seq_modifier_regex = "seq-modifier-regex"; + extern Key parser_regex = "parser-regex"; + extern Key serializer_regex = "serializer-regex"; + extern Key enumerator_regex = "enumerator-regex"; + extern Key element_type_regex = "element-type-regex"; + extern Key name_regex_trace = "name-regex-trace"; + extern Key include_with_brackets = "include-with-brackets"; + extern Key include_prefix = "include-prefix"; + extern Key include_regex = "include-regex"; + extern Key include_regex_trace = "include-regex-trace"; + extern Key guard_prefix = "guard-prefix"; + extern Key root_element_first = "root-element-first"; + extern Key root_element_last = "root-element-last"; + extern Key root_element_all = "root-element-all"; + extern Key root_element_none = "root-element-none"; + extern Key root_element = "root-element"; + extern Key custom_type = "custom-type"; + extern Key custom_type_regex = "custom-type-regex"; + extern Key hxx_suffix = "hxx-suffix"; + extern Key ixx_suffix = "ixx-suffix"; + extern Key cxx_suffix = "cxx-suffix"; + extern Key fwd_suffix = "fwd-suffix"; + extern Key hxx_regex = "hxx-regex"; + extern Key ixx_regex = "ixx-regex"; + extern Key cxx_regex = "cxx-regex"; + extern Key fwd_regex = "fwd-regex"; + extern Key hxx_prologue = "hxx-prologue"; + extern Key ixx_prologue = "ixx-prologue"; + extern Key cxx_prologue = "cxx-prologue"; + extern Key fwd_prologue = "fwd-prologue"; + extern Key prologue = "prologue"; + extern Key hxx_epilogue = "hxx-epilogue"; + extern Key ixx_epilogue = "ixx-epilogue"; + extern Key cxx_epilogue = "cxx-epilogue"; + extern Key fwd_epilogue = "fwd-epilogue"; + extern Key epilogue = "epilogue"; + extern Key hxx_prologue_file = "hxx-prologue-file"; + extern Key ixx_prologue_file = "ixx-prologue-file"; + extern Key cxx_prologue_file = "cxx-prologue-file"; + extern Key fwd_prologue_file = "fwd-prologue-file"; + extern Key prologue_file = "prologue-file"; + extern Key hxx_epilogue_file = "hxx-epilogue-file"; + extern Key ixx_epilogue_file = "ixx-epilogue-file"; + extern Key cxx_epilogue_file = "cxx-epilogue-file"; + extern Key fwd_epilogue_file = "fwd-epilogue-file"; + extern Key epilogue_file = "epilogue-file"; + extern Key parts = "parts"; + extern Key parts_suffix = "parts-suffix"; + extern Key export_symbol = "export-symbol"; + extern Key export_xml_schema = "export-xml-schema"; + extern Key export_maps = "export-maps"; + extern Key import_maps = "import-maps"; + extern Key show_anonymous = "show-anonymous"; + extern Key show_sloc = "show-sloc"; + extern Key proprietary_license = "proprietary-license"; + extern Key disable_multi_import = "disable-multi-import"; + } + } + + Void Tree::Generator:: + usage () + { + std::wostream& e (wcerr); + ::CLI::Indent::Clip< ::CLI::OptionsUsage, WideChar> clip (e); + + e << "--char-type <type>" << endl + << " Use <type> as the base character type. Valid\n" + << " values are 'char' (default) and 'wchar_t'." + << endl; + + e << "--char-encoding <enc>" << endl + << " Specify the character encoding that should be used\n" + << " in the object model. Valid values for the 'char'\n" + << " character type are 'utf8' (default), 'iso8859-1',\n" + << " 'lcp', and 'custom'. For the 'wchar_t' character\n" + << " type the only valid value is 'auto'." + << endl; + + e << "--output-dir <dir>" << endl + << " Write generated files to <dir> instead of current\n" + << " directory." + << endl; + + e << "--generate-polymorphic" << endl + << " Generate polymorphism-aware code. Specify this\n" + << " option if you use substitution groups or xsi:type." + << endl; + + e << "--polymorphic-type <type>" << endl + << " Indicate that <type> is a root of a polymorphic\n" + << " type hierarchy." + << endl; + + e << "--polymorphic-type-all" << endl + << " Indicate that all types should be treated as\n" + << " polymorphic." + << endl; + + e << "--generate-serialization" << endl + << " Generate serialization functions. They convert an\n" + << " in-memory representation back to XML." + << endl; + + e << "--generate-inline" << endl + << " Generate certain functions inline." + << endl; + + e << "--generate-ostream" << endl + << " Generate ostream insertion operators." + << endl; + + e << "--generate-doxygen" << endl + << " Generate documentation comments in the Doxygen\n" + << " format." + << endl; + + e << "--generate-comparison" << endl + << " Generate comparison operators." + << endl; + + e << "--generate-default-ctor" << endl + << " Generate default constructors even for types that\n" + << " have required members." + << endl; + + e << "--generate-from-base-ctor" << endl + << " Generate from-base constructors." + << endl; + + e << "--generate-detach" << endl + << " Generate detach functions for required members." + << endl; + + e << "--generate-wildcard" << endl + << " Generate accessors/modifiers as well as parsing\n" + << " and serialization code for XML Schema wildcards." + << endl; + + e << "--generate-insertion <os>" << endl + << " Generate data representation stream insertion\n" + << " operators for the <os> output stream type." + << endl; + + e << "--generate-extraction <is>" << endl + << " Generate data representation stream extraction\n" + << " constructors for the <is> input stream type." + << endl; + + e << "--generate-forward" << endl + << " Generate forward declaration file." + << endl; + + e << "--generate-xml-schema" << endl + << " Generate a C++ header file as if the schema being\n" + << " compiled defines the XML Schema namespace." + << endl; + + e << "--extern-xml-schema <file>" << endl + << " Generate code as if the XML Schema namespace was\n" + << " defined in <file> and xsd:included in the schema\n" + << " being compiled." + << endl; + + e << "--suppress-parsing" << endl + << " Suppress the generation of parsing functions." + << endl; + + e << "--generate-element-type" << endl + << " Generate types instead of parsing/serialization\n" + << " functions for root elements." + << endl; + + e << "--generate-element-map" << endl + << " Generate a root element map that allows uniform\n" + << " parsing/serialization of multiple root elements.\n" + << endl; + + e << "--generate-intellisense" << endl + << " Generate workarounds for IntelliSense bugs in\n" + << " Visual Studio 2005 (8.0)." + << endl; + + e << "--omit-default-attributes" << endl + << " Omit attributes with default and fixed values\n" + << " from serialized XML documents." + << endl; + + e << "--namespace-map <xns>=<cns>" << endl + << " Map XML Schema namespace <xns> to C++ namespace\n" + << " <cns>. Repeat this option to specify mapping for\n" + << " more than one XML Schema namespace." + << endl; + + e << "--namespace-regex <regex>" << endl + << " Add <regex> to the list of regular expressions\n" + << " used to translate XML Schema namespace names to\n" + << " C++ namespace names." + << endl; + + e << "--namespace-regex-trace" << endl + << " Trace the process of applying regular expressions\n" + << " specified with the --namespace-regex option." + << endl; + + e << "--reserved-name <name>" << endl + << " Add <name> to the list of names that should not\n" + << " be used as identifiers. The name can optionally\n" + << " be followed by '=' and the replacement name that\n" + << " should be used instead." + << endl; + + e << "--type-naming <style>" << endl + << " Specify the type naming convention that should be\n" + << " used in the generated code. Valid styles are 'knr'\n" + << " (default), 'ucc', and 'java'." + << endl; + + e << "--function-naming <style>" << endl + << " Specify the function naming convention that should\n" + << " be used in the generated code. Valid styles are\n" + << " 'knr' (default), 'lcc', and 'java'." + << endl; + + e << "--type-regex <expr>" << endl + << " Add <expr> to the list of regular expressions\n" + << " used to translate XML Schema type names to C++\n" + << " type names." + << endl; + + e << "--accessor-regex <expr>" << endl + << " Add <expr> to the list of regular expressions\n" + << " used to translate XML Schema names of elements and\n" + << " attributes to C++ accessor function names." + << endl; + + e << "--one-accessor-regex <expr>" << endl + << " Add <expr> to the list of regular expressions\n" + << " used to translate XML Schema names of elements\n" + << " and attributes with cardinality one to C++\n" + << " accessor function names." + << endl; + + e << "--opt-accessor-regex <expr>" << endl + << " Add <expr> to the list of regular expressions\n" + << " used to translate XML Schema names of elements\n" + << " and attributes with cardinality optional to C++\n" + << " accessor function names." + << endl; + + e << "--seq-accessor-regex <expr>" << endl + << " Add <expr> to the list of regular expressions\n" + << " used to translate XML Schema names of elements\n" + << " and attributes with cardinality sequence to C++\n" + << " accessor function names." + << endl; + + e << "--modifier-regex <expr>" << endl + << " Add <expr> to the list of regular expressions\n" + << " used to translate XML Schema names of elements and\n" + << " attributes to C++ modifier function names." + << endl; + + e << "--one-modifier-regex <expr>" << endl + << " Add <expr> to the list of regular expressions\n" + << " used to translate XML Schema names of elements\n" + << " and attributes with cardinality one to C++\n" + << " modifier function names." + << endl; + + e << "--opt-modifier-regex <expr>" << endl + << " Add <expr> to the list of regular expressions\n" + << " used to translate XML Schema names of elements\n" + << " and attributes with cardinality optional to C++\n" + << " modifier function names." + << endl; + + e << "--seq-modifier-regex <expr>" << endl + << " Add <expr> to the list of regular expressions\n" + << " used to translate XML Schema names of elements\n" + << " and attributes with cardinality sequence to C++\n" + << " modifier function names." + << endl; + + e << "--parser-regex <expr>" << endl + << " Add <expr> to the list of regular expressions\n" + << " used to translate XML Schema element names to\n" + << " C++ parsing function names." + << endl; + + e << "--serializer-regex <expr>" << endl + << " Add <expr> to the list of regular expressions\n" + << " used to translate XML Schema element names to\n" + << " C++ serialization function names." + << endl; + + e << "--enumerator-regex <expr>" << endl + << " Add <expr> to the list of regular expressions\n" + << " used to translate XML Schema enumeration values\n" + << " to C++ enumerator names." + << endl; + + e << "--element-type-regex <expr>" << endl + << " Add <expr> to the list of regular expressions\n" + << " used to translate XML Schema element names to\n" + << " C++ element type names." + << endl; + + e << "--name-regex-trace" << endl + << " Trace the process of applying regular expressions\n" + << " specified with the name transformation options." + << endl; + + e << "--include-with-brackets" << endl + << " Use angle brackets (<>) instead of quotes (\"\") in\n" + << " generated #include directives." + << endl; + + e << "--include-prefix <prefix>" << endl + << " Add <prefix> to generated #include directive\n" + << " paths." + << endl; + + e << "--include-regex <regex>" << endl + << " Add <regex> to the list of regular expressions\n" + << " used to transform #include directive paths." + << endl; + + e << "--include-regex-trace" << endl + << " Trace the process of applying regular expressions\n" + << " specified with the --include-regex option." + << endl; + + e << "--guard-prefix <prefix>" << endl + << " Add <prefix> to generated header inclusion guards." + << endl; + + e << "--root-element-first" << endl + << " Treat only the first global element as a document\n" + << " root." + << endl; + + e << "--root-element-last" << endl + << " Treat only the last global element as a document\n" + << " root." + << endl; + + e << "--root-element-all" << endl + << " Treat all global elements as document roots." + << endl; + + e << "--root-element-none" << endl + << " Don't treat any global elements as document roots." + << endl; + + e << "--root-element <element>" << endl + << " Treat only <element> as a document root. Repeat\n" + << " this option to specify more than one root element." + << endl; + + e << "--custom-type <map>" << endl + << " Use a custom C++ type instead of the generated\n" + << " class. The <map> argument is in the form\n" + << " name[=type[/base]], where <name> is a type name as\n" + << " defined in XML Schema, <type> is a C++ type name\n" + << " that should be used instead, and optional <base>\n" + << " is a C++ name that should be given to the C++\n" + << " class generated from the XML Schema definition\n" + << " which is normally used as a base for the custom\n" + << " type." + << endl; + + e << "--custom-type-regex <regex>" << endl + << " Use custom C++ types instead of the generated\n" + << " classes. The <regex> argument is in the form\n" + << " /name/[type/[base/]], where <name> is a regex\n" + << " pattern that will be matched against type names\n" + << " as defined in XML Schema, <type> is a C++ type\n" + << " name that should be used instead, and optional\n" + << " <base> is a C++ name that should be given to\n" + << " the C++ class generated from the XML Schema\n" + << " definition." + << endl; + + e << "--hxx-suffix <suffix>" << endl + << " Use <suffix> instead of the default '.hxx' to\n" + << " construct the name of the header file." + << endl; + + e << "--ixx-suffix <suffix>" << endl + << " Use <suffix> instead of the default '.ixx' to\n" + << " construct the name of the inline file." + << endl; + + e << "--cxx-suffix <suffix>" << endl + << " Use <suffix> instead of the default '.cxx' to\n" + << " construct the name of the source file." + << endl; + + e << "--fwd-suffix <suffix>" << endl + << " Use <suffix> instead of the default '-fwd.hxx'\n" + << " to construct the name of the forward declaration\n" + << " file." + << endl; + + e << "--hxx-regex <regex>" << endl + << " Use <regex> to construct the name of the header\n" + << " file." + << endl; + + e << "--ixx-regex <regex>" << endl + << " Use <regex> to construct the name of the inline\n" + << " file." + << endl; + + e << "--cxx-regex <regex>" << endl + << " Use <regex> to construct the name of the source\n" + << " file." + << endl; + + e << "--fwd-regex <regex>" << endl + << " Use <regex> to construct the name of the forward\n" + << " declaration file." + << endl; + + // Prologues. + // + e << "--hxx-prologue <text>" << endl + << " Insert <text> at the beginning of the header file." + << endl; + + e << "--ixx-prologue <text>" << endl + << " Insert <text> at the beginning of the inline file." + << endl; + + e << "--cxx-prologue <text>" << endl + << " Insert <text> at the beginning of the source file." + << endl; + + e << "--fwd-prologue <text>" << endl + << " Insert <text> at the beginning of the forward\n" + << " declaration file." + << endl; + + e << "--prologue <text>" << endl + << " Insert <text> at the beginning of each generated\n" + << " file for which there is no file-specific prologue." + << endl; + + + // Epilogues. + // + e << "--hxx-epilogue <text>" << endl + << " Insert <text> at the end of the header file." + << endl; + + e << "--ixx-epilogue <text>" << endl + << " Insert <text> at the end of the inline file." + << endl; + + e << "--cxx-epilogue <text>" << endl + << " Insert <text> at the end of the source file." + << endl; + + e << "--fwd-epilogue <text>" << endl + << " Insert <text> at the end of the forward\n" + << " declaration file." + << endl; + + e << "--epilogue <text>" << endl + << " Insert <text> at the end of each generated file\n" + << " for which there is no file-specific epilogue." + << endl; + + + // Prologue files. + // + e << "--hxx-prologue-file <file>" << endl + << " Insert the content of the <file> at the beginning\n" + << " of the header file." + << endl; + + e << "--ixx-prologue-file <file>" << endl + << " Insert the content of the <file> at the beginning\n" + << " of the inline file." + << endl; + + e << "--cxx-prologue-file <file>" << endl + << " Insert the content of the <file> at the beginning\n" + << " of the source file." + << endl; + + e << "--fwd-prologue-file <file>" << endl + << " Insert the content of the <file> at the beginning\n" + << " of the forward declaration file." + << endl; + + e << "--prologue-file <file>" << endl + << " Insert the content of the <file> at the beginning\n" + << " of each generated file for which there is no file-\n" + << " specific prologue file." + << endl; + + // Epilogue files. + // + e << "--hxx-epilogue-file <file>" << endl + << " Insert the content of the <file> at the end of\n" + << " the header file." + << endl; + + e << "--ixx-epilogue-file <file>" << endl + << " Insert the content of the <file> at the end of\n" + << " the inline file." + << endl; + + e << "--cxx-epilogue-file <file>" << endl + << " Insert the content of the <file> at the end of\n" + << " the source file." + << endl; + + e << "--fwd-epilogue-file <file>" << endl + << " Insert the content of the <file> at the end of\n" + << " the forward declaration file." + << endl; + + e << "--epilogue-file <file>" << endl + << " Insert the content of the <file> at the end of\n" + << " each generated file for which there is no file-\n" + << " specific epilogue file." + << endl; + + // Misc. + // + e << "--parts <num>" << endl + << " Split generated source code into <num> parts." + << endl; + + e << "--parts-suffix <suffix>" << endl + << " Use <suffix> instead of the default '-' to\n" + << " separate the file name from the part number." + << endl; + + e << "--custom-literals <file>" << endl + << " Load custom XML string to C++ literal mappings\n" + << " from <file>." + << endl; + + e << "--export-symbol <symbol>" << endl + << " Export symbol for Win32 DLL export/import control." + << endl; + + e << "--export-xml-schema" << endl + << " Export/import types in the XML Schema namespace." + << endl; + + e << "--export-maps" << endl + << " Export polymorphism support maps from Win32 DLL." + << endl; + + e << "--import-maps" << endl + << " Import polymorphism support maps from Win32 DLL." + << endl; + + e << "--show-anonymous" << endl + << " Show elements and attributes that are of anonymous\n" + << " types." + << endl; + + e << "--show-sloc" << endl + << " Show the number of generated physical source lines\n" + << " of code (SLOC)." + << endl; + + e << "--sloc-limit <num>" << endl + << " Check that the number of generated physical source\n" + << " lines of code (SLOC) does not exceed <num>." + << endl; + + e << "--options-file <file>" << endl + << " Read additional options from <file>. Each option\n" + << " should appear on a separate line optionally\n" + << " followed by space and an argument." + << endl; + + e << "--proprietary-license" << endl + << " Indicate that the generated code is licensed under\n" + << " a proprietary license instead of the GPL." + << endl; + } + + Tree::CLI::OptionsSpec Tree::Generator:: + options_spec () + { + CLI::OptionsSpec spec; + + spec.option<CLI::char_type> ().default_value ("char"); + + spec.option<CLI::hxx_suffix> ().default_value (".hxx"); + spec.option<CLI::ixx_suffix> ().default_value (".ixx"); + spec.option<CLI::cxx_suffix> ().default_value (".cxx"); + spec.option<CLI::fwd_suffix> ().default_value ("-fwd.hxx"); + + spec.option<CLI::type_naming> ().default_value ("knr"); + spec.option<CLI::function_naming> ().default_value ("knr"); + + spec.option<CLI::parts> ().default_value (1); + spec.option<CLI::parts_suffix> ().default_value ("-"); + + return spec; + } + + + namespace + { + Void + open (WideInputFileStream& ifs, NarrowString const& path) + { + try + { +#if !defined(BOOST_FILESYSTEM_VERSION) || BOOST_FILESYSTEM_VERSION == 2 + Path fs_path (path, boost::filesystem::native); +#else + Path fs_path (path.c_str()); +#endif + ifs.open (fs_path, std::ios_base::in | std::ios_base::binary); + + if (!ifs.is_open ()) + { + wcerr << path.c_str () << ": error: unable to open in read mode" + << endl; + + throw Tree::Generator::Failed (); + } + } + catch (InvalidPath const&) + { + wcerr << "error: '" << path.c_str () << "' is not a valid " + << "filesystem path" << endl; + + throw Tree::Generator::Failed (); + } + } + + Void + append (WideOutputFileStream& os, + NarrowString const& path, + WideInputFileStream& default_is) + { + using std::ios_base; + + if (path) + { + WideInputFileStream is; + open (is, path); + os << is.rdbuf (); + } + else if (default_is.is_open ()) + { + os << default_is.rdbuf (); + default_is.seekg (0, ios_base::beg); + } + } + + Void + append (WideOutputFileStream& os, + Cult::Containers::Vector<NarrowString> const& primary, + Cult::Containers::Vector<NarrowString> const& def) + { + Cult::Containers::Vector<NarrowString> const& v ( + primary.empty () ? def : primary); + + for (Containers::Vector<NarrowString>::ConstIterator + i (v.begin ()), e (v.end ()); i != e; ++i) + { + os << i->c_str () << endl; + } + } + } + + + UnsignedLong Tree::Generator:: + generate (Tree::CLI::Options const& ops, + Schema& schema, + Path const& file_path, + Boolean fpt, + StringLiteralMap const& string_literal_map, + const WarningSet& disabled_warnings, + FileList& file_list, + AutoUnlinks& unlinks) + { + using std::ios_base; + namespace Indentation = BackendElements::Indentation; + + typedef BackendElements::Regex::Expression<Char> Regex; + + using Cult::Containers::Vector; + + typedef Vector<Path> Paths; + typedef Vector<Evptr<WideOutputFileStream> > WideOutputFileStreams; + + try + { + // Do option validation. + // + if (ops.value<CLI::parts> () < 1) + { + wcerr << "error: invalid value for option --parts: " << + ops.value<CLI::parts> () << endl; + throw Failed (); + } + + // Get counts. + // + Counts counts; + { + Counter counter; + counts = counter.count (ops, schema, file_path); + + /* + wcerr << "global type count: " << counts.global_types << endl; + wcerr << "global element count: " << counts.global_elements << endl; + wcerr << "generated global element count: " << + counts.generated_global_elements << endl; + + wcerr << "total complexity: " << counts.complexity_total << endl; + wcerr << "complexity vector size: " << counts.complexity.size () + << endl; + */ + } + + // Evaluate the graph for possibility of generating something useful. + // + { + Validator validator; + if (!validator.validate ( + ops, schema, file_path, disabled_warnings, counts)) + throw Failed (); + } + + // Process names. + // + { + NameProcessor proc; + if (!proc.process (ops, schema, file_path, string_literal_map)) + throw Failed (); + } + + // Process polymorphic types. + // + if (ops.value<CLI::generate_polymorphic> () && + !ops.value<CLI::polymorphic_type_all> ()) + { + PolymorphismProcessor proc; + if (!proc.process (ops, schema, file_path, disabled_warnings)) + throw Failed (); + } + + // Parts. + // + UnsignedLong parts (ops.value<CLI::parts> ()); + UnsignedLong units ( + counts.global_types + counts.generated_global_elements); + + UnsignedLong units_per_part (units / parts); + + if (parts != 1 && units_per_part < 1) + { + wcerr << "error: too many parts specified: " << parts << endl; + throw Failed (); + } + + UnsignedLong complexity_per_part (counts.complexity_total / parts); + + + NarrowString parts_suffix (ops.value<CLI::parts_suffix> ()); + + // + // + Boolean generate_xml_schema (ops.value<CLI::generate_xml_schema> ()); + + // We could be compiling several schemas at once in which case + // handling of the --generate-xml-schema option gets tricky: we + // will need to rely on the presence of the --extern-xml-schema + // to tell us which (fake) schema file corresponds to XML Schema. + // + if (generate_xml_schema) + { + if (NarrowString name = ops.value<CLI::extern_xml_schema> ()) + { +#if !defined(BOOST_FILESYSTEM_VERSION) || BOOST_FILESYSTEM_VERSION == 2 + if (file_path.native_file_string () != name) +#else + if (file_path.string () != name) +#endif + generate_xml_schema = false; + } + } + + Boolean inline_ (ops.value<CLI::generate_inline> () && + !generate_xml_schema); + + Boolean forward (ops.value<CLI::generate_forward> () && + !generate_xml_schema); + + Boolean source (!generate_xml_schema); + + // Generate code. + // +#if !defined(BOOST_FILESYSTEM_VERSION) || BOOST_FILESYSTEM_VERSION == 2 + NarrowString name (file_path.leaf ()); +#else + NarrowString name (file_path.filename ().string()); +#endif + + NarrowString hxx_suffix (ops.value <CLI::hxx_suffix> ()); + NarrowString ixx_suffix (ops.value <CLI::ixx_suffix> ()); + NarrowString cxx_suffix (ops.value <CLI::cxx_suffix> ()); + NarrowString fwd_suffix (ops.value <CLI::fwd_suffix> ()); + + Regex hxx_expr (ops.value <CLI::hxx_regex> ().empty () + ? "#^(.+?)(\\.[^./\\\\]+)?$#$1" + hxx_suffix + "#" + : ops.value <CLI::hxx_regex> ()); + + Regex ixx_expr (ops.value <CLI::ixx_regex> ().empty () + ? "#^(.+?)(\\.[^./\\\\]+)?$#$1" + ixx_suffix + "#" + : ops.value <CLI::ixx_regex> ()); + + Regex cxx_expr (ops.value <CLI::cxx_regex> ().empty () + ? "#^(.+?)(\\.[^./\\\\]+)?$#$1" + cxx_suffix + "#" + : ops.value <CLI::cxx_regex> ()); + + Regex fwd_expr (ops.value <CLI::fwd_regex> ().empty () + ? "#^(.+?)(\\.[^./\\\\]+)?$#$1" + fwd_suffix + "#" + : ops.value <CLI::fwd_regex> ()); + + if (!hxx_expr.match (name)) + { + wcerr << "error: header expression '" << + hxx_expr.pattern () << "' does not match '" << + name.c_str () << "'" << endl; + throw Failed (); + } + + if (inline_ && !ixx_expr.match (name)) + { + wcerr << "error: inline expression '" << + ixx_expr.pattern () << "' does not match '" << + name.c_str () << "'" << endl; + throw Failed (); + } + + if (source && parts == 1 && !cxx_expr.match (name)) + { + wcerr << "error: source expression '" << + cxx_expr.pattern () << "' does not match '" << + name.c_str () << "'" << endl; + throw Failed (); + } + + if (forward && !fwd_expr.match (name)) + { + wcerr << "error: forward expression '" << + fwd_expr.pattern () << "' does not match '" << + name.c_str () << "'" << endl; + throw Failed (); + } + + NarrowString hxx_name (hxx_expr.merge (name)); + NarrowString ixx_name (inline_ ? ixx_expr.merge (name) : NarrowString ()); + NarrowString fwd_name (forward ? fwd_expr.merge (name) : NarrowString ()); + +#if !defined(BOOST_FILESYSTEM_VERSION) || BOOST_FILESYSTEM_VERSION == 2 + Path hxx_path (hxx_name, boost::filesystem::native); + Path ixx_path (ixx_name, boost::filesystem::native); + Path fwd_path (fwd_name, boost::filesystem::native); +#else + Path hxx_path (hxx_name.c_str()); + Path ixx_path (ixx_name.c_str()); + Path fwd_path (fwd_name.c_str()); +#endif + Paths cxx_paths; + + if (source) + { + if (parts > 1) + { + for (UnsignedLong i (0); i < parts; ++i) + { + std::ostringstream os; + os << i; + + Regex expr ( + "#^(.+?)(\\.[^./\\\\]+)?$#$1" + parts_suffix + os.str () + "$2#"); + + NarrowString part_name (expr.merge (name)); + + if (!cxx_expr.match (part_name)) + { + wcerr << "error: source expression '" << + cxx_expr.pattern () << "' does not match '" << + part_name.c_str () << "'" << endl; + throw Failed (); + } + + cxx_paths.push_back ( +#if !defined(BOOST_FILESYSTEM_VERSION) || BOOST_FILESYSTEM_VERSION == 2 + Path (cxx_expr.merge (part_name), boost::filesystem::native)); +#else + Path (cxx_expr.merge (part_name).c_str())); +#endif + } + } + else + cxx_paths.push_back ( +#if !defined(BOOST_FILESYSTEM_VERSION) || BOOST_FILESYSTEM_VERSION == 2 + Path (cxx_expr.merge (name), boost::filesystem::native)); +#else + Path (cxx_expr.merge (name).c_str())); +#endif + } + + Path out_dir; + + if (NarrowString dir = ops.value<CLI::output_dir> ()) + { + try + { +#if !defined(BOOST_FILESYSTEM_VERSION) || BOOST_FILESYSTEM_VERSION == 2 + out_dir = Path (dir, boost::filesystem::native); +#else + out_dir = Path (dir.c_str()); +#endif + } + catch (InvalidPath const&) + { + wcerr << dir.c_str () << ": error: invalid path" << endl; + throw Failed (); + } + } + + if (fpt && !generate_xml_schema) + { + // In the file-per-type mode the schema files are always local + // unless the user added the directory so that we propagate this + // to the output files. + // + Path fpt_dir (file_path.branch_path ()); + + if (!fpt_dir.empty ()) + out_dir /= fpt_dir; + } + + if (!out_dir.empty ()) + { + hxx_path = out_dir / hxx_path; + ixx_path = out_dir / ixx_path; + fwd_path = out_dir / fwd_path; + + for (Paths::Iterator i (cxx_paths.begin ()); + i != cxx_paths.end (); ++i) + *i = out_dir / *i; + } + + // + // + WideOutputFileStream hxx (hxx_path, ios_base::out); + WideOutputFileStream ixx; + WideOutputFileStream fwd; + WideOutputFileStreams cxx; + + + // FWD + // + if (forward) + { + fwd.open (fwd_path, ios_base::out); + + if (!fwd.is_open ()) + { + wcerr << fwd_path << ": error: unable to open in write mode" << endl; + throw Failed (); + } + + unlinks.add (fwd_path); +#if !defined(BOOST_FILESYSTEM_VERSION) || BOOST_FILESYSTEM_VERSION == 2 + file_list.push_back (fwd_path.native_file_string ()); +#else + file_list.push_back (fwd_path.string ()); +#endif + } + + + // HXX + // + if (!hxx.is_open ()) + { + wcerr << hxx_path << ": error: unable to open in write mode" << endl; + throw Failed (); + } + + unlinks.add (hxx_path); +#if !defined(BOOST_FILESYSTEM_VERSION) || BOOST_FILESYSTEM_VERSION == 2 + file_list.push_back (hxx_path.native_file_string ()); +#else + file_list.push_back (hxx_path.string ()); +#endif + + + // IXX + // + if (inline_) + { + ixx.open (ixx_path, ios_base::out); + + if (!ixx.is_open ()) + { + wcerr << ixx_path << ": error: unable to open in write mode" << endl; + throw Failed (); + } + + unlinks.add (ixx_path); +#if !defined(BOOST_FILESYSTEM_VERSION) || BOOST_FILESYSTEM_VERSION == 2 + file_list.push_back (ixx_path.native_file_string ()); +#else + file_list.push_back (ixx_path.string ()); +#endif + } + + + // CXX + // + if (source) + { + for (Paths::Iterator i (cxx_paths.begin ()); + i != cxx_paths.end (); ++i) + { + Evptr<WideOutputFileStream> s ( + new WideOutputFileStream (*i, ios_base::out)); + + if (!s->is_open ()) + { + wcerr << *i << ": error: unable to open in write mode" << endl; + throw Failed (); + } + + unlinks.add (*i); +#if !defined(BOOST_FILESYSTEM_VERSION) || BOOST_FILESYSTEM_VERSION == 2 + file_list.push_back (i->native_file_string ()); +#else + file_list.push_back (i->string ()); +#endif + cxx.push_back (s); + } + } + + + // Print copyright and license. + // + Char const* copyright ( + ops.value<CLI::proprietary_license> () + ? copyright_proprietary + : copyright_gpl); + + if (forward) + fwd << copyright; + + hxx << copyright; + + if (ops.value<CLI::generate_doxygen> ()) + { + // Use native path format. + // + hxx << "/**" << endl + << " * @file" << endl + << " * @brief Generated from " << name.c_str () << "." << endl + << " */" << endl + << endl; + + } + + if (inline_) + ixx << copyright; + + if (source) + { + for (WideOutputFileStreams::Iterator i (cxx.begin ()); + i != cxx.end (); ++i) + **i << copyright; + } + + + // Prologue. + // + WideInputFileStream prologue; + { + NarrowString name (ops.value<CLI::prologue_file> ()); + + if (name) + open (prologue, name); + } + + // Epilogue. + // + WideInputFileStream epilogue; + { + NarrowString name (ops.value<CLI::epilogue_file> ()); + + if (name) + open (epilogue, name); + } + + // SLOC counter. + // + UnsignedLong sloc (0); + Boolean show_sloc (ops.value<CLI::show_sloc> ()); + + // + // + Regex guard_expr ("/([a-z])([A-Z])/$1_$2/"); // Split words. + NarrowString guard_prefix (ops.value<CLI::guard_prefix> ()); + + if (!guard_prefix) +#if !defined(BOOST_FILESYSTEM_VERSION) || BOOST_FILESYSTEM_VERSION == 2 + guard_prefix = file_path.branch_path ().native_directory_string (); +#else + guard_prefix = file_path.branch_path ().string (); +#endif + + if (guard_prefix) + guard_prefix += '_'; + + // FWD + // + if (forward) + { + Context ctx (fwd, + schema, + file_path, + ops, + counts, + generate_xml_schema, + &string_literal_map, + &fwd_expr, + &hxx_expr, + &ixx_expr); + + Indentation::Clip<Indentation::SLOC, WideChar> fwd_sloc (fwd); + + // Guard + // + String guard (guard_expr.merge (guard_prefix + fwd_name)); + guard = ctx.escape (guard); // make a c++ id + std::transform (guard.begin (), guard.end(), guard.begin (), upcase); + + fwd << "#ifndef " << guard << endl + << "#define " << guard << endl + << endl; + + // Copy prologue. + // + fwd << "// Begin prologue." << endl + << "//" << endl; + + append (fwd, + ops.value<CLI::fwd_prologue> (), + ops.value<CLI::prologue> ()); + append (fwd, ops.value<CLI::fwd_prologue_file> (), prologue); + + fwd << "//" << endl + << "// End prologue." << endl + << endl; + + // Version check. + // + fwd << "#include <xsd/cxx/version.hxx>" << endl + << endl + << "#if (XSD_INT_VERSION != " << XSD_INT_VERSION << "L)" << endl + << "#error XSD runtime version mismatch" << endl + << "#endif" << endl + + << endl; + { + fwd << "#include <xsd/cxx/pre.hxx>" << endl + << endl; + + if (ctx.char_type == L"char") + { + fwd << "#ifndef XSD_USE_CHAR" << endl + << "#define XSD_USE_CHAR" << endl + << "#endif" << endl + << endl; + + fwd << "#ifndef XSD_CXX_TREE_USE_CHAR" << endl + << "#define XSD_CXX_TREE_USE_CHAR" << endl + << "#endif" << endl + << endl; + } + else if (ctx.char_type == L"wchar_t") + { + fwd << "#ifndef XSD_USE_WCHAR" << endl + << "#define XSD_USE_WCHAR" << endl + << "#endif" << endl + << endl; + + fwd << "#ifndef XSD_CXX_TREE_USE_WCHAR" << endl + << "#define XSD_CXX_TREE_USE_WCHAR" << endl + << "#endif" << endl + << endl; + } + + // Set auto-indentation. + // + Indentation::Clip<Indentation::CXX, WideChar> fwd_clip (fwd); + + + // Generate. + // + generate_forward (ctx); + + fwd << "#include <xsd/cxx/post.hxx>" << endl + << endl; + } + + // Copy epilogue. + // + fwd << "// Begin epilogue." << endl + << "//" << endl; + + append (fwd, ops.value<CLI::fwd_epilogue_file> (), epilogue); + append (fwd, + ops.value<CLI::fwd_epilogue> (), + ops.value<CLI::epilogue> ()); + + fwd << "//" << endl + << "// End epilogue." << endl + << endl; + + fwd << "#endif // " << guard << endl; + + if (show_sloc) + { + wcerr << fwd_path << ": " + << fwd_sloc.buffer ().count () << endl; + + sloc += fwd_sloc.buffer ().count (); + } + } + + // HXX + // + { + Context ctx (hxx, + schema, + file_path, + ops, + counts, + generate_xml_schema, + &string_literal_map, + &fwd_expr, + &hxx_expr, + &ixx_expr); + + Indentation::Clip<Indentation::SLOC, WideChar> hxx_sloc (hxx); + + // Guard + // + String guard (guard_expr.merge (guard_prefix + hxx_name)); + guard = ctx.escape (guard); // make a c++ id + std::transform (guard.begin (), guard.end(), guard.begin (), upcase); + + hxx << "#ifndef " << guard << endl + << "#define " << guard << endl + << endl; + + // Copy prologue. + // + hxx << "// Begin prologue." << endl + << "//" << endl; + + append ( + hxx, ops.value<CLI::hxx_prologue> (), ops.value<CLI::prologue> ()); + append (hxx, ops.value<CLI::hxx_prologue_file> (), prologue); + + hxx << "//" << endl + << "// End prologue." << endl + << endl; + + // Version check. + // + hxx << "#include <xsd/cxx/config.hxx>" << endl + << endl + << "#if (XSD_INT_VERSION != " << XSD_INT_VERSION << "L)" << endl + << "#error XSD runtime version mismatch" << endl + << "#endif" << endl + << endl; + + { + hxx << "#include <xsd/cxx/pre.hxx>" << endl + << endl; + + // Generate character selection defines. + // + if (!forward) + { + if (ctx.char_type == L"char") + { + hxx << "#ifndef XSD_USE_CHAR" << endl + << "#define XSD_USE_CHAR" << endl + << "#endif" << endl + << endl; + + hxx << "#ifndef XSD_CXX_TREE_USE_CHAR" << endl + << "#define XSD_CXX_TREE_USE_CHAR" << endl + << "#endif" << endl + << endl; + } + else if (ctx.char_type == L"wchar_t") + { + hxx << "#ifndef XSD_USE_WCHAR" << endl + << "#define XSD_USE_WCHAR" << endl + << "#endif" << endl + << endl; + + hxx << "#ifndef XSD_CXX_TREE_USE_WCHAR" << endl + << "#define XSD_CXX_TREE_USE_WCHAR" << endl + << "#endif" << endl + << endl; + } + } + + // Set auto-indentation. + // + Indentation::Clip<Indentation::CXX, WideChar> hxx_clip (hxx); + + + // Generate. + // + if (!generate_xml_schema) + { + if (forward) + hxx << "#include " << ctx.process_include_path (fwd_name) + << endl << endl; + else + generate_forward (ctx); + } + + generate_tree_header (ctx); + + if (!generate_xml_schema) + { + + if (ops.value<CLI::generate_ostream> ()) + generate_stream_header (ctx); + + if (!ops.value<CLI::generate_element_type> () && + !ops.value<CLI::suppress_parsing> ()) + generate_parser_header (ctx); + + if (ops.value<CLI::generate_serialization> ()) + generate_serialization_header (ctx); + + if (!ops.value<CLI::generate_insertion> ().empty ()) + generate_stream_insertion_header (ctx); + } + + if (inline_) + { + hxx << "#ifndef XSD_DONT_INCLUDE_INLINE" << endl + << "#include " << ctx.process_include_path (ixx_name) << endl + << "#endif // XSD_DONT_INCLUDE_INLINE" << endl + << endl; + } + + hxx << "#include <xsd/cxx/post.hxx>" << endl + << endl; + } + + // Copy epilogue. + // + hxx << "// Begin epilogue." << endl + << "//" << endl; + + append (hxx, ops.value<CLI::hxx_epilogue_file> (), epilogue); + append ( + hxx, ops.value<CLI::hxx_epilogue> (), ops.value<CLI::epilogue> ()); + + hxx << "//" << endl + << "// End epilogue." << endl + << endl; + + hxx << "#endif // " << guard << endl; + + if (show_sloc) + { + wcerr << hxx_path << ": " + << hxx_sloc.buffer ().count () << endl; + + sloc += hxx_sloc.buffer ().count (); + } + } + + + // IXX + // + if (inline_) + { + Context ctx (ixx, + schema, + file_path, + ops, + counts, + generate_xml_schema, + &string_literal_map, + &fwd_expr, + &hxx_expr, + &ixx_expr); + + Indentation::Clip<Indentation::SLOC, WideChar> ixx_sloc (ixx); + + // Guard + // + String guard (guard_expr.merge (guard_prefix + ixx_name)); + guard = ctx.escape (guard); // make a c++ id + std::transform (guard.begin (), guard.end(), guard.begin (), upcase); + + ixx << "#ifndef " << guard.c_str () << endl + << "#define " << guard.c_str () << endl + << endl; + + // Copy prologue. + // + ixx << "// Begin prologue." << endl + << "//" << endl; + + append ( + ixx, ops.value<CLI::ixx_prologue> (), ops.value<CLI::prologue> ()); + append (ixx, ops.value<CLI::ixx_prologue_file> (), prologue); + + ixx << "//" << endl + << "// End prologue." << endl + << endl; + + { + // Set auto-indentation. + // + Indentation::Clip<Indentation::CXX, WideChar> ixx_clip (ixx); + + + // Generate. + // + generate_tree_inline (ctx, 1, 0); + } + + // Copy epilogue. + // + ixx << "// Begin epilogue." << endl + << "//" << endl; + + append (ixx, ops.value<CLI::ixx_epilogue_file> (), epilogue); + append ( + ixx, ops.value<CLI::ixx_epilogue> (), ops.value<CLI::epilogue> ()); + + ixx << "//" << endl + << "// End epilogue." << endl + << endl; + + ixx << "#endif // " << guard.c_str () << endl; + + if (show_sloc) + { + wcerr << ixx_path << ": " + << ixx_sloc.buffer ().count () << endl; + + sloc += ixx_sloc.buffer ().count (); + } + } + + + // CXX + // + + if (source) + { + UnsignedLong first_unit (0); // First unit in the current part. + + for (UnsignedLong part (0); part < parts; ++part) + { + // Figure out the range of units for this part. + // + UnsignedLong last_unit (first_unit); + + if (units != 0) + { + UnsignedLong complexity (counts.complexity[last_unit]); + + while (complexity < complexity_per_part) + { + // Make sure there will be at least one unit for each part left. + // + if ((last_unit + 1) >= units || + (units - (last_unit + 1) - 1) < (parts - part - 1)) + break; + + // Check if the increase in complexity should be kept in this + // part or moved to the next. + // + UnsignedLong new_complexity ( + complexity + counts.complexity[last_unit + 1]); + + if (new_complexity > complexity_per_part) + { + if ((new_complexity - complexity_per_part) > + (counts.complexity[last_unit + 1] / 2)) + break; + } + + last_unit++; + complexity = new_complexity; + } + + if (part + 1 == parts) + { + // Last part. + // + last_unit = units - 1; + } + } + + // + // + UnsignedLong first (first_unit); + UnsignedLong last (last_unit); + + first_unit = last_unit + 1; + + //wcerr << "[" << first << ", " << last << "]: " << complexity + // << endl; + + WideOutputFileStream& os (*cxx[part]); + + Context ctx (os, + schema, + file_path, + ops, + counts, + generate_xml_schema, + &string_literal_map, + &fwd_expr, + &hxx_expr, + &ixx_expr); + + Indentation::Clip<Indentation::SLOC, WideChar> cxx_sloc (os); + + // Copy prologue. + // + os << "// Begin prologue." << endl + << "//" << endl; + + append (os, + ops.value<CLI::cxx_prologue> (), + ops.value<CLI::prologue> ()); + append (os, ops.value<CLI::cxx_prologue_file> (), prologue); + + os << "//" << endl + << "// End prologue." << endl + << endl; + + { + os << "#include <xsd/cxx/pre.hxx>" << endl + << endl; + + // Set auto-indentation. + // + Indentation::Clip<Indentation::CXX, WideChar> cxx_clip (os); + + + // Generate. + // + os << "#include " << ctx.process_include_path (hxx_name) << endl + << endl; + + if (!inline_) + generate_tree_inline (ctx, first, last); + + generate_tree_source (ctx, first, last); + + if (ops.value<CLI::generate_ostream> ()) + generate_stream_source (ctx, first, last); + + if (!ops.value<CLI::generate_element_type> () && + !ops.value<CLI::suppress_parsing> ()) + generate_parser_source (ctx, first, last); + + if (ops.value<CLI::generate_serialization> ()) + generate_serialization_source (ctx, first, last); + + if (!ops.value<CLI::generate_extraction> ().empty ()) + generate_stream_extraction_source (ctx); + + if (!ops.value<CLI::generate_insertion> ().empty ()) + generate_stream_insertion_source (ctx); + + os << "#include <xsd/cxx/post.hxx>" << endl + << endl; + } + + // Copy epilogue. + // + os << "// Begin epilogue." << endl + << "//" << endl; + + append (os, ops.value<CLI::cxx_epilogue_file> (), epilogue); + append (os, + ops.value<CLI::cxx_epilogue> (), + ops.value<CLI::epilogue> ()); + + os << "//" << endl + << "// End epilogue." << endl + << endl; + + if (show_sloc) + { + wcerr << cxx_paths[part] << ": " + << cxx_sloc.buffer ().count () << endl; + + sloc += cxx_sloc.buffer ().count (); + } + } + } + + return sloc; + } + catch (UnrepresentableCharacter const& e) + { + wcerr << "error: character at position " << e.position () << " " + << "in string '" << e.string () << "' is unrepresentable in " + << "the target encoding" << endl; + + wcerr << "info: use the --custom-literals option to provide custom " + << "string literals mapping" << endl; + + throw Failed (); + } + catch (NoNamespaceMapping const& e) + { + wcerr << e.file () << ":" << e.line () << ":" << e.column () + << ": error: unable to map XML Schema namespace '" << e.ns () + << "' to C++ namespace" << endl; + + wcerr << e.file () << ":" << e.line () << ":" << e.column () + << ": info: use the --namespace-map or --namespace-regex option " + << "to provide custom mapping" << endl; + + throw Failed (); + } + catch (InvalidNamespaceMapping const& e) + { + wcerr << "error: invalid XML to C++ namespace mapping specified: " + << "'" << e.mapping () << "': " << e.reason () << endl; + + throw Failed (); + } + catch (InvalidCustomTypeMapping const& e) + { + wcerr << "error: invalid custom type mapping specified: " + << "'" << e.mapping () << "': " << e.reason () << endl; + + throw Failed (); + } + catch (BackendElements::Regex::Format<Char> const& e) + { + wcerr << "error: invalid regex: '" << + e.expression ().c_str () << "': " << + e.description ().c_str () << endl; + + throw Failed (); + } + catch (BackendElements::Regex::Format<WideChar> const& e) + { + wcerr << "error: invalid regex: '" << + e.expression () << "': " << e.description () << endl; + + throw Failed (); + } + } +} diff --git a/xsd/xsd/cxx/tree/generator.hxx b/xsd/xsd/cxx/tree/generator.hxx new file mode 100644 index 0000000..2e50392 --- /dev/null +++ b/xsd/xsd/cxx/tree/generator.hxx @@ -0,0 +1,52 @@ +// file : xsd/cxx/tree/generator.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef CXX_TREE_GENERATOR_HXX +#define CXX_TREE_GENERATOR_HXX + +#include <cult/types.hxx> + +#include <xsd-frontend/semantic-graph/elements.hxx> // Path +#include <xsd-frontend/semantic-graph/schema.hxx> + +#include <xsd.hxx> + +#include <cxx/literal-map.hxx> +#include <cxx/tree/cli.hxx> + +namespace CXX +{ + namespace Tree + { + using namespace Cult::Types; + + class Generator + { + public: + static Void + usage (); + + static CLI::OptionsSpec + options_spec (); + + struct Failed {}; + + static UnsignedLong + generate (CLI::Options const& options, + XSDFrontend::SemanticGraph::Schema&, + XSDFrontend::SemanticGraph::Path const& file, + Boolean file_per_type, + StringLiteralMap const&, + const WarningSet& disabled_warnings, + FileList& file_list, + AutoUnlinks& unlinks); + + private: + Generator (); + }; + } +} + +#endif // CXX_TREE_GENERATOR_HXX diff --git a/xsd/xsd/cxx/tree/name-processor.cxx b/xsd/xsd/cxx/tree/name-processor.cxx new file mode 100644 index 0000000..4949bed --- /dev/null +++ b/xsd/xsd/cxx/tree/name-processor.cxx @@ -0,0 +1,2140 @@ +// file : xsd/cxx/tree/name-processor.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <sstream> +#include <iostream> + +#include <cult/containers/set.hxx> +#include <cult/containers/map.hxx> +#include <cult/containers/vector.hxx> + +#include <backend-elements/regex.hxx> + +#include <cxx/tree/default-value.hxx> +#include <cxx/tree/name-processor.hxx> + +namespace CXX +{ + namespace Tree + { + NameProcessor:: + NameProcessor () + { + // Dummy ctor, helps with long symbols on HP-UX. + } + + namespace + { + // + // + typedef Cult::Containers::Set<String> NameSet; + + class Context: public Tree::Context + { + public: + struct Failed {}; + + Context (CLI::Options const& options, + Counts const& counts, + Boolean generate_xml_schema, + SemanticGraph::Schema& root, + SemanticGraph::Path const& path, + StringLiteralMap const& map) + : Tree::Context (std::wcerr, + root, + path, + options, + counts, + generate_xml_schema, + &map, + 0, + 0, + 0), + global_type_names (global_type_names_), + global_element_names (global_element_names_), + detach (options.value<CLI::generate_detach> ()), + type_regex (type_regex_), + accessor_regex (accessor_regex_), + one_accessor_regex (one_accessor_regex_), + opt_accessor_regex (opt_accessor_regex_), + seq_accessor_regex (seq_accessor_regex_), + modifier_regex (modifier_regex_), + one_modifier_regex (one_modifier_regex_), + opt_modifier_regex (opt_modifier_regex_), + seq_modifier_regex (seq_modifier_regex_), + parser_regex (parser_regex_), + serializer_regex (serializer_regex_), + enumerator_regex (enumerator_regex_), + element_type_regex (element_type_regex_) + { + typedef Containers::Vector<NarrowString> Vector; + + NarrowString tn (options.value<CLI::type_naming> ()); + NarrowString fn (options.value<CLI::function_naming> ()); + + + // Type name regex. + // + { + // Predefined rules. The most frequently used come last: global + // names, two components (<name>,type), three components + // (<name>,const,iterator), and one component (value in enum). + // + if (tn == "knr") + { + type_regex.push_back ("/(?:[^ ]* )?([^,]+),([^,]+),([^,]+),([^,]+)/$1_$2_$3_$4/"); + type_regex.push_back ("/(?:[^ ]* )?([^,]+),([^,]+),([^,]+)/$1_$2_$3/"); + type_regex.push_back ("/(?:[^ ]* )?([^,]+),([^,]+)/$1_$2/"); + type_regex.push_back ("/(?:[^ ]* )?([^,]+)/$1/"); + + /* + type_regex.push_back ("/([^,]+)/$1/"); + type_regex.push_back ("/([^,]+),([^,]+),([^,]+),([^,]+)/$1_$2_$3_$4/"); + type_regex.push_back ("/([^,]+),([^,]+),([^,]+)/$1_$2_$3/"); + type_regex.push_back ("/([^,]+),([^,]+)/$1_$2/"); + type_regex.push_back ("/[^ ]* (.+)/$1/"); + */ + } + else + { + // Upper camel case or Java. + // + type_regex.push_back ("/(?:[^ ]* )?([^,]+),([^,]+),([^,]+),([^,]+)/\\u$1\\u$2\\u$3\\u$4/"); + type_regex.push_back ("/(?:[^ ]* )?([^,]+),([^,]+),([^,]+)/\\u$1\\u$2\\u$3/"); + type_regex.push_back ("/(?:[^ ]* )?([^,]+),([^,]+)/\\u$1\\u$2/"); + type_regex.push_back ("/(?:[^ ]* )?([^,]+)/\\u$1/"); + + /* + type_regex.push_back ("/([^,]+)/\\u$1/"); + type_regex.push_back ("/([^,]+),([^,]+),([^,]+),([^,]+)/\\u$1\\u$2\\u$3\\u$4/"); + type_regex.push_back ("/([^,]+),([^,]+),([^,]+)/\\u$1\\u$2\\u$3/"); + type_regex.push_back ("/([^,]+),([^,]+)/\\u$1\\u$2/"); + type_regex.push_back ("/[^ ]* (.+)/\\u$1/"); + */ + + } + + compile_regex (options.value<CLI::type_regex> (), + type_regex, + "type"); + } + + // Accessor name regex. + // + { + // Predefined rules. The most frequently used come last: one + // component, three components (<name>,default,value) and two + // component (dom,document). + // + if (fn == "knr") + { + accessor_regex.push_back ("/([^,]+),([^,]+)/$1_$2/"); + accessor_regex.push_back ("/([^,]+),([^,]+),([^,]+)/$1_$2_$3/"); + accessor_regex.push_back ("/([^,]+)/$1/"); + } + else if (fn == "lcc") + { + accessor_regex.push_back ("/([^,]+),([^,]+)/\\l$1\\u$2/"); + accessor_regex.push_back ("/([^,]+),([^,]+),([^,]+)/\\l$1\\u$2\\u$3/"); + accessor_regex.push_back ("/([^,]+)/\\l$1/"); + } + else + { + // Java: add get. + // + accessor_regex.push_back ("/([^,]+),([^,]+)/get\\u$1\\u$2/"); + accessor_regex.push_back ("/([^,]+),([^,]+),([^,]+)/get\\u$1\\u$2\\u$3/"); + accessor_regex.push_back ("/([^,]+)/get\\u$1/"); + } + + compile_regex (options.value<CLI::accessor_regex> (), + accessor_regex, + "accessor"); + + compile_regex (options.value<CLI::one_accessor_regex> (), + one_accessor_regex, + "one accessor"); + + compile_regex (options.value<CLI::opt_accessor_regex> (), + opt_accessor_regex, + "optional accessor"); + + compile_regex (options.value<CLI::seq_accessor_regex> (), + seq_accessor_regex, + "sequence accessor"); + } + + + // Modifier name regex. + // + { + if (fn == "knr") + { + // any,attribute + // + modifier_regex.push_back ("/([^,]+),([^,]+)/$1_$2/"); + } + else if (fn == "lcc") + { + modifier_regex.push_back ("/([^,]+),([^,]+)/\\l$1\\u$2/"); + modifier_regex.push_back ("/([^,]+)/\\l$1/"); + } + else + { + // Java: add set. + // + modifier_regex.push_back ("/([^,]+),([^,]+)/set\\u$1\\u$2/"); + modifier_regex.push_back ("/([^,]+)/set\\u$1/"); + modifier_regex.push_back ("/detach,([^,]+)/detach\\u$1/"); + } + + compile_regex (options.value<CLI::modifier_regex> (), + modifier_regex, + "modifier"); + + compile_regex (options.value<CLI::one_modifier_regex> (), + one_modifier_regex, + "one modifier"); + + compile_regex (options.value<CLI::opt_modifier_regex> (), + opt_modifier_regex, + "optional modifier"); + + compile_regex (options.value<CLI::seq_modifier_regex> (), + seq_modifier_regex, + "sequence modifier"); + } + + + // Parser name regex. + // + { + if (fn == "lcc") + { + parser_regex.push_back ("/(.+)/\\l$1/"); + } + else if (fn == "java") + { + // Java: add parse. + // + parser_regex.push_back ("/(.+)/parse\\u$1/"); + } + + compile_regex (options.value<CLI::parser_regex> (), + parser_regex, + "parser"); + } + + // Serializer name regex. + // + { + if (fn == "lcc") + { + serializer_regex.push_back ("/(.+)/\\l$1/"); + } + else if (fn == "java") + { + // Java: add serialize. + // + serializer_regex.push_back ("/(.+)/serialize\\u$1/"); + } + + compile_regex (options.value<CLI::serializer_regex> (), + serializer_regex, + "serializer"); + } + + // Enumerator name regex. + // + { + // By default map an empty enumerator to the 'empty' word. + // + enumerator_regex.push_back ("/^$/empty/"); + + compile_regex (options.value<CLI::enumerator_regex> (), + enumerator_regex, + "enumerator"); + } + + // Element type regex. + // + compile_regex (options.value<CLI::element_type_regex> (), + element_type_regex, + "element_type"); + } + + protected: + Context (Context& c) + : Tree::Context (c), + global_type_names (c.global_type_names), + global_element_names (c.global_element_names), + detach (c.detach), + type_regex (c.type_regex), + accessor_regex (c.accessor_regex), + one_accessor_regex (c.one_accessor_regex), + opt_accessor_regex (c.opt_accessor_regex), + seq_accessor_regex (c.seq_accessor_regex), + modifier_regex (c.modifier_regex), + one_modifier_regex (c.one_modifier_regex), + opt_modifier_regex (c.opt_modifier_regex), + seq_modifier_regex (c.seq_modifier_regex), + parser_regex (c.parser_regex), + serializer_regex (c.serializer_regex), + enumerator_regex (c.enumerator_regex), + element_type_regex (c.element_type_regex) + { + } + + public: + typedef BackendElements::Regex::Expression<WideChar> Regex; + typedef BackendElements::Regex::Format<WideChar> RegexFormat; + typedef Cult::Containers::Vector<Regex> RegexVector; + + String + process_regex (String const& name, + RegexVector const& rv, + String const& id) + { + Boolean trace (options.value<CLI::name_regex_trace> ()); + + if (trace) + os << id << " name: '" << name << "'" << endl; + + for (RegexVector::ConstReverseIterator i (rv.rbegin ()); + i != rv.rend (); ++i) + { + if (trace) + os << "try: '" << i->pattern () << "' : "; + + if (i->match (name)) + { + String r (i->merge (name)); + + if (trace) + os << "'" << r << "' : +" << endl; + + return r; + } + + if (trace) + os << '-' << endl; + } + + return name; + } + + String + process_regex (String const& name, + RegexVector const& primary, + RegexVector const& backup, + String const& id) + { + Boolean trace (options.value<CLI::name_regex_trace> ()); + + if (trace) + os << id << " name: '" << name << "'" << endl; + + for (RegexVector::ConstReverseIterator i (primary.rbegin ()); + i != primary.rend (); ++i) + { + if (trace) + os << "try: '" << i->pattern () << "' : "; + + if (i->match (name)) + { + String r (i->merge (name)); + + if (trace) + os << "'" << r << "' : +" << endl; + + return r; + } + + if (trace) + os << '-' << endl; + } + + for (RegexVector::ConstReverseIterator i (backup.rbegin ()); + i != backup.rend (); ++i) + { + if (trace) + os << "try: '" << i->pattern () << "' : "; + + if (i->match (name)) + { + String r (i->merge (name)); + + if (trace) + os << "'" << r << "' : +" << endl; + + return r; + } + + if (trace) + os << '-' << endl; + } + + return name; + } + + String + process_regex (String const& ns, + String const& name, + RegexVector const& rv, + String const& id) + { + String s (ns + L' ' + name); + Boolean trace (options.value<CLI::name_regex_trace> ()); + + if (trace) + os << id << " name: '" << s << "'" << endl; + + for (RegexVector::ConstReverseIterator i (rv.rbegin ()); + i != rv.rend (); ++i) + { + if (trace) + os << "try: '" << i->pattern () << "' : "; + + if (i->match (s)) + { + String r (i->merge (s)); + + if (trace) + os << "'" << r << "' : +" << endl; + + return r; + } + + if (trace) + os << '-' << endl; + } + + return name; + } + + String + process_regex (String const& ns, + String const& name, + RegexVector const& primary, + RegexVector const& backup, + String const& id) + { + String s (ns + L' ' + name); + Boolean trace (options.value<CLI::name_regex_trace> ()); + + if (trace) + os << id << " name: '" << s << "'" << endl; + + for (RegexVector::ConstReverseIterator i (primary.rbegin ()); + i != primary.rend (); ++i) + { + if (trace) + os << "try: '" << i->pattern () << "' : "; + + if (i->match (s)) + { + String r (i->merge (s)); + + if (trace) + os << "'" << r << "' : +" << endl; + + return r; + } + + if (trace) + os << '-' << endl; + } + + for (RegexVector::ConstReverseIterator i (backup.rbegin ()); + i != backup.rend (); ++i) + { + if (trace) + os << "try: '" << i->pattern () << "' : "; + + if (i->match (s)) + { + String r (i->merge (s)); + + if (trace) + os << "'" << r << "' : +" << endl; + + return r; + } + + if (trace) + os << '-' << endl; + } + + return name; + } + + public: + String + find_name (String const& base_name, + NameSet& set, + Boolean insert = true) + { + String name (base_name); + + for (UnsignedLong i (1); set.find (name) != set.end (); ++i) + { + std::wostringstream os; + os << i; + name = base_name + os.str (); + } + + if (insert) + set.insert (name); + + return name; + } + + private: + Void + compile_regex (Containers::Vector<NarrowString> const& sv, + RegexVector& rv, + String const& id) + { + typedef Containers::Vector<NarrowString> Vector; + + for (Vector::ConstIterator i (sv.begin ()); i != sv.end (); ++i) + { + try + { + rv.push_back (Regex (*i)); + } + catch (RegexFormat const& e) + { + os << "error: invalid " << id << " name regex: '" << + e.expression () << "': " << e.description () << endl; + + throw Failed (); + } + } + } + + private: + Cult::Containers::Map<String, NameSet> global_type_names_; + Cult::Containers::Map<String, NameSet> global_element_names_; + + RegexVector type_regex_; + RegexVector accessor_regex_; + RegexVector one_accessor_regex_; + RegexVector opt_accessor_regex_; + RegexVector seq_accessor_regex_; + RegexVector modifier_regex_; + RegexVector one_modifier_regex_; + RegexVector opt_modifier_regex_; + RegexVector seq_modifier_regex_; + RegexVector parser_regex_; + RegexVector serializer_regex_; + RegexVector enumerator_regex_; + RegexVector element_type_regex_; + + public: + Cult::Containers::Map<String, NameSet>& global_type_names; + Cult::Containers::Map<String, NameSet>& global_element_names; + + Boolean detach; + + RegexVector& type_regex; + RegexVector& accessor_regex; + RegexVector& one_accessor_regex; + RegexVector& opt_accessor_regex; + RegexVector& seq_accessor_regex; + RegexVector& modifier_regex; + RegexVector& one_modifier_regex; + RegexVector& opt_modifier_regex; + RegexVector& seq_modifier_regex; + RegexVector& parser_regex; + RegexVector& serializer_regex; + RegexVector& enumerator_regex; + RegexVector& element_type_regex; + }; + + // + // + struct Enumerator: Traversal::Enumerator, Context + { + Enumerator (Context& c, NameSet& set) + : Context (c), set_ (set) + { + } + + virtual Void + traverse (Type& e) + { + // Process the name with enumerator name regex. + // + String name ( + process_regex (e.name (), enumerator_regex, L"enumerator")); + + // Escape and unclash. + // + name = find_name (escape (name), set_); + e.context ().set ("name", name); + } + + private: + NameSet& set_; + }; + + // + // + struct Enumeration: Traversal::Enumeration, Context + { + Enumeration (Context& c) + : Context (c) + { + } + + virtual Void + traverse (Type& e) + { + // Use processed name. + // + String name (e.context ().get<String> ("name")); + + // If renamed name is empty then we are not generating + // anything for this type and name processing is not + // required. + // + if (renamed_type (e, name) && !name) + return; + + NameSet enum_set; + enum_set.insert (name); + + Enumerator enumerator (*this, enum_set); + Traversal::Names names (enumerator); + + Traversal::Enumeration::names (e, names); + + // Assign name to the value type. First process the name + // with type name regex. + // + String value_name ( + escape (process_regex ("value", type_regex, L"type"))); + e.context ().set ("value", find_name (value_name, enum_set)); + } + }; + + // + // + struct PrimaryMember: Traversal::Member, Context + { + PrimaryMember (Context& c, NameSet& name_set, NameSet& stem_set) + : Context (c), name_set_ (name_set), stem_set_ (stem_set) + { + } + + virtual Void + traverse (Type& m) + { + if (Tree::Context::skip (m)) + return; + + String stem (find_name (m.name (), stem_set_)); + + m.context ().set ("stem", stem); + m.context ().set ("name", + find_name (escape (stem), name_set_, false)); + } + + private: + NameSet& name_set_; + NameSet& stem_set_; + }; + + // + // + struct DerivedMember: Traversal::Member, Context + { + DerivedMember (Context& c, NameSet& name_set) + : Context (c), name_set_ (name_set) + { + } + + virtual Void + traverse (Type& m) + { + if (Tree::Context::skip (m)) + return; + + UnsignedLong max (Tree::Context::max (m)); + UnsignedLong min (Tree::Context::min (m)); + + String const& s (m.context ().get<String> ("stem")); + String const& b (m.context ().get<String> ("name")); + + Boolean def_attr (m.default_p () && + m.is_a<SemanticGraph::Attribute> ()); + + // Accessors/modifiers. Note that we postpone inserting + // the names into the name_set to avoid over-escaping. + // + String an, mn; + + if (max != 1) + { + an = find_name ( + escape (process_regex (s, + seq_accessor_regex, + accessor_regex, + L"sequence accessor")), + name_set_, + false); + + mn = find_name ( + escape (process_regex (s, + seq_modifier_regex, + modifier_regex, + L"sequence modifier")), + name_set_, + false); + } + else if (min == 0 && !def_attr) + { + an = find_name ( + escape (process_regex (s, + opt_accessor_regex, + accessor_regex, + L"optional accessor")), + name_set_, + false); + + mn = find_name ( + escape (process_regex (s, + opt_modifier_regex, + modifier_regex, + L"optional modifier")), + name_set_, + false); + } + else + { + an = find_name ( + escape (process_regex (s, + one_accessor_regex, + accessor_regex, + L"one accessor")), + name_set_, + false); + + mn = find_name ( + escape (process_regex (s, + one_modifier_regex, + modifier_regex, + L"one modifier")), + name_set_, + false); + } + + m.context ().set ("aname", an); + m.context ().set ("mname", mn); + + name_set_.insert (b); + + if (an != b) + name_set_.insert (an); + + if (mn != b && mn != an) + name_set_.insert (mn); + + // Detach. + // + if (detach && max == 1 && (min == 1 || def_attr)) + { + String dn (find_name ( + escape (process_regex (L"detach," + s, + one_modifier_regex, + modifier_regex, + L"one modifier")), + name_set_)); + + m.context ().set ("dname", dn); + } + + // Types. + // + m.context ().set ( + "type", + find_name ( + escape (process_regex (s + L",type", type_regex, L"type")), + name_set_)); + + m.context ().set ( + "traits", + find_name ( + escape (process_regex (s + L",traits", type_regex, L"type")), + name_set_)); + + if (max != 1) + { + m.context ().set ( + "container", + find_name ( + escape (process_regex (s + L",sequence", type_regex, L"type")), + name_set_)); + + m.context ().set ( + "iterator", + find_name ( + escape (process_regex (s + L",iterator", type_regex, L"type")), + name_set_)); + + m.context ().set ( + "const-iterator", + find_name ( + escape ( + process_regex (s + L",const,iterator", type_regex, L"type")), + name_set_)); + } + else if (min == 0 && !def_attr) + { + m.context ().set ( + "container", + find_name ( + escape (process_regex (s + L",optional", type_regex, L"type")), + name_set_)); + } + + // Data member. + // + m.context ().set ("member", find_name (b + L"_", name_set_)); + + // Default value. + // + if (m.default_p ()) + { + Boolean simple (true); + + if (m.is_a<SemanticGraph::Element> ()) + { + IsSimpleType test (simple); + test.dispatch (m.type ()); + } + + if (simple) + { + String an ( + escape ( + process_regex ( + s + L",default,value", accessor_regex, L"accessor"))); + + m.context ().set ( "default-value", find_name (an, name_set_)); + + Boolean lit (false); + { + IsLiteralValue test (lit); + test.dispatch (m.type ()); + } + + if (!lit) + { + m.context ().set ( + "default-value-member", + find_name (b + L"_default_value_", name_set_)); + } + } + } + } + + private: + NameSet& name_set_; + }; + + + // + // + struct Any: Traversal::Any, Traversal::AnyAttribute, Context + { + Any (Context& c, + NameSet& name_set, + NameSet& stem_set, + Boolean& has_wildcard) + : Context (c), + name_set_ (name_set), + stem_set_ (stem_set), + has_wildcard_ (has_wildcard) + { + } + + virtual Void + traverse (SemanticGraph::Any& a) + { + UnsignedLong max (Tree::Context::max (a)); + UnsignedLong min (Tree::Context::min (a)); + + String s (find_name (L"any", stem_set_)); + + String b (find_name (escape (s), name_set_, false)); + a.context ().set ("name", b); + + // Accessors/modifiers. Note that we postpone inserting the + // names into the name_set to avoid over-escaping. + // + String an, mn; + + if (max != 1) + { + an = find_name ( + escape (process_regex (s, + seq_accessor_regex, + accessor_regex, + L"sequence accessor")), + name_set_, + false); + + mn = find_name ( + escape (process_regex (s, + seq_modifier_regex, + modifier_regex, + L"sequence modifier")), + name_set_, + false); + } + else if (min == 0) + { + an = find_name ( + escape (process_regex (s, + opt_accessor_regex, + accessor_regex, + L"optional accessor")), + name_set_, + false); + + mn = find_name ( + escape (process_regex (s, + opt_modifier_regex, + modifier_regex, + L"optional modifier")), + name_set_, + false); + } + else + { + an = find_name ( + escape (process_regex (s, + one_accessor_regex, + accessor_regex, + L"one accessor")), + name_set_, + false); + + mn = find_name ( + escape (process_regex (s, + one_modifier_regex, + modifier_regex, + L"one modifier")), + name_set_, + false); + } + + a.context ().set ("aname", an); + a.context ().set ("mname", mn); + + name_set_.insert (b); + + if (an != b) + name_set_.insert (an); + + if (mn != b && mn != an) + name_set_.insert (mn); + + // Types + // + if (max != 1) + { + a.context ().set ( + "container", + find_name ( + escape (process_regex (s + L",sequence", type_regex, L"type")), + name_set_)); + + a.context ().set ( + "iterator", + find_name ( + escape (process_regex (s + L",iterator", type_regex, L"type")), + name_set_)); + + a.context ().set ( + "const-iterator", + find_name ( + escape ( + process_regex (s + L",const,iterator", type_regex, L"type")), + name_set_)); + } + else if (min == 0) + { + a.context ().set ( + "container", + find_name ( + escape (process_regex (s + L",optional", type_regex, L"type")), + name_set_)); + } + + // Data member. + // + a.context ().set ("member", find_name (b + L"_", name_set_)); + + if (!has_wildcard_) + has_wildcard_ = true; + } + + virtual Void + traverse (SemanticGraph::AnyAttribute& a) + { + String s (find_name (L"any,attribute", stem_set_)); + + String b (find_name (escape (s), name_set_, false)); + a.context ().set ("name", b); + + // Accessors/modifiers. Note that we postpone inserting the + // names into the name_set to avoid over-escaping. + // + String an ( + find_name ( + escape (process_regex (s, accessor_regex, L"accessor")), + name_set_, + false)); + + String mn ( + find_name ( + escape (process_regex (s, modifier_regex, L"modifier")), + name_set_, + false)); + + a.context ().set ("aname", an); + a.context ().set ("mname", mn); + + name_set_.insert (b); + + if (an != b) + name_set_.insert (an); + + if (mn != b && mn != an) + name_set_.insert (mn); + + // Types + // + a.context ().set ( + "container", + find_name ( + escape (process_regex (s + L",set", type_regex, L"type")), + name_set_)); + + a.context ().set ( + "iterator", + find_name ( + escape (process_regex (s + L",iterator", type_regex, L"type")), + name_set_)); + + a.context ().set ( + "const-iterator", + find_name ( + escape ( + process_regex (s + L",const,iterator", type_regex, L"type")), + name_set_)); + + // Data member. + // + a.context ().set ("member", find_name (b + L"_", name_set_)); + + if (!has_wildcard_) + has_wildcard_ = true; + } + + private: + NameSet& name_set_; + NameSet& stem_set_; + Boolean& has_wildcard_; + }; + + // + // + struct Complex: Traversal::Complex, Context + { + Complex (Context& c) + : Context (c) + { + } + + virtual Void + traverse (Type& c) + { + SemanticGraph::Context& cc (c.context ()); + + // We leave this set around to allow other mappings to use + // this information. + // + cc.set ("cxx-tree-name-processor-stem-set", NameSet ()); + cc.set ("cxx-tree-name-processor-member-set", NameSet ()); + + // Use processed name. + // + String name (cc.get<String> ("name")); + + // If renamed name is empty then we are not generating + // anything for this type and name processing is not + // required. + // + if (renamed_type (c, name) && !name) + return; + + NameSet& stem_set ( + cc.get<NameSet> ("cxx-tree-name-processor-stem-set")); + + NameSet& member_set ( + cc.get<NameSet> ("cxx-tree-name-processor-member-set")); + + stem_set.insert (c.name ()); + member_set.insert (name); + + // Add our base's stems and members to the initial list. + // + if (c.inherits_p ()) + { + // @@ What if this types name is the same as one of base's + // members? + // + SemanticGraph::Type& base (c.inherits ().base ()); + + if (base.is_a<SemanticGraph::Complex> () && + !base.is_a<SemanticGraph::Enumeration> ()) + { + if (!base.context ().count ( + "cxx-tree-name-processor-member-set")) + { + dispatch (base); + } + + NameSet const& base_stem_set ( + base.context ().get<NameSet> ( + "cxx-tree-name-processor-stem-set")); + + stem_set.insert (base_stem_set.begin (), base_stem_set.end ()); + + NameSet const& base_member_set ( + base.context ().get<NameSet> ( + "cxx-tree-name-processor-member-set")); + + member_set.insert (base_member_set.begin (), + base_member_set.end ()); + } + } + + // First assign the "primary" names. + // + { + PrimaryMember member (*this, member_set, stem_set); + Traversal::Names names (member); + + Complex::names (c, names); + } + + // Derived names for members. + // + { + DerivedMember member (*this, member_set); + Traversal::Names names (member); + + Complex::names (c, names); + } + + // Names for wildcards. + // + if (options.value<CLI::generate_wildcard> ()) + { + Boolean has_wildcard (false); + Any any (*this, member_set, stem_set, has_wildcard); + Traversal::Names names (any); + Complex::names (c, names); + + // Assign names for dom_document. + // + if (has_wildcard) + { + // Check if we already have dom_document down inheritance + // hierarchy. + // + for (SemanticGraph::Complex* p (&c); p->inherits_p ();) + { + if (SemanticGraph::Complex* base = + dynamic_cast<SemanticGraph::Complex*> ( + &p->inherits ().base ())) + { + if (base->context ().count ("dom-document")) + { + c.context ().set ( + "dom-document", + base->context ().get<String> ("dom-document")); + break; + } + + p = base; + } + else + break; + } + + // If not, set up the names. + // + if (!c.context ().count ("dom-document")) + { + String stem (find_name (L"dom,document", stem_set)); + + String an ( + escape ( + process_regex (stem, accessor_regex, L"accessor"))); + + c.context ().set ("dom-document", find_name (an, member_set)); + + c.context ().set ( + "dom-document-member", + find_name (escape (stem + L"_"), member_set)); + } + } + } + } + }; + + + // + // + struct GlobalType: Traversal::Type, Context + { + GlobalType (Context& c, NameSet& set) + : Context (c), set_ (set) + { + } + + virtual Void + traverse (SemanticGraph::Type& t) + { + // Process the name with type name regex. + // + String name (process_regex ( + namespace_ (t).name (), + t.name (), + type_regex, + L"type")); + + // Escape and unclash. + // + name = find_name (escape (name), set_); + t.context ().set ("name", name); + + // Also add renamed name if any. + // + if (renamed_type (t, name) && name) + set_.insert (name); + } + + private: + NameSet& set_; + }; + + + // + // + struct GlobalElement: Traversal::Element, + GlobalElementBase, + Context + { + GlobalElement (Context& c, + NameSet const& type_set, + NameSet& element_set) + : GlobalElementBase (c), + Context (c), + type_set_ (type_set), + element_set_ (element_set) + { + } + + virtual Void + traverse (Type& e) + { + // First we need to figure out if we need to process this + // global element. + // + if (!generate_p (e)) + return; + + if (options.value<CLI::generate_element_type> ()) + { + SemanticGraph::Context& ec (e.context ()); + + String name; + + if (doc_root_p (e)) + { + name = find_name ( + escape ( + process_regex ( + namespace_ (e).name (), + e.name (), + element_type_regex, + type_regex, + L"element type"))); + + // Assign inner names. + // + NameSet set; + set.insert (name); + + ec.set ( + "type", + Context::find_name ( + escape (process_regex (L"value,type", type_regex, L"type")), + set)); + + ec.set ( + "traits", + Context::find_name ( + escape (process_regex (L"value,traits", type_regex, L"type")), + set)); + + String an (Context::find_name ( + escape (process_regex ("value", + one_accessor_regex, + accessor_regex, + L"one accessor")), + set, + false)); + + String mn (Context::find_name ( + escape (process_regex ("value", + one_modifier_regex, + modifier_regex, + L"one modifier")), + set, + false)); + + ec.set ("aname", an); + ec.set ("mname", mn); + + set.insert (an); + + if (an != mn) + set.insert (mn); + + // Detach. + // + if (detach) + { + String dn (Context::find_name ( + escape (process_regex (L"detach,value", + one_modifier_regex, + modifier_regex, + L"one modifier")), + set)); + + ec.set ("dname", dn); + } + + // Assign name() and namespace_() names. + // + ec.set ( + "element-name", + Context::find_name ( + escape ( + process_regex ("name", accessor_regex, L"modifier")), + set)); + + ec.set ( + "element-ns", + Context::find_name ( + escape ( + process_regex ("namespace", accessor_regex, L"modifier")), + set)); + + // Data members. + // + ec.set ("member", Context::find_name ("value_", set)); + ec.set ("element-name-member", + Context::find_name ("name_", set)); + ec.set ("element-ns-member", + Context::find_name ("namespace__", set)); + } + else + name = find_name (escape (e.name ())); + + ec.set ("name", name); + element_set_.insert (name); + } + else + { + // Make sure the name is unique among global elements and + // does not collide with a global type name. + // + String base (find_name (escape (e.name ()))); + e.context ().set ("name", base); + + String n (e.name ()); + + // Assign the parsing function name. + // + String p; + + if (!options.value<CLI::suppress_parsing> () && doc_root_p (e)) + { + p = find_name ( + escape ( + process_regex (n, parser_regex, L"parsing function"))); + + e.context ().set ("parser", p); + } + + // Assign the serialization function name. + // + String s; + + if (options.value<CLI::generate_serialization> () && + doc_root_p (e)) + { + s = find_name ( + escape ( + process_regex ( + n, serializer_regex, L"serialization function"))); + + e.context ().set ("serializer", s); + } + + // Add the names to the set only after processing parsing and + // serialization function names so that we do not over-escape + // them. + // + element_set_.insert (base); + + if (p && p != base) + element_set_.insert (p); + + if (s && s != base && s != p) + element_set_.insert (s); + } + } + + private: + String + find_name (String const& name) + { + String r (name); + + // If we are conflicting with a type name let's first try to + // simply append an underscore and only resort to ugly names + // like name1, etc., if this fails. + // + if (type_set_.find (r) != type_set_.end ()) + r += L"_"; + + for (UnsignedLong i (1); + element_set_.find (r) != element_set_.end () || + type_set_.find (r) != type_set_.end (); ++i) + { + std::wostringstream os; + os << i; + r = name + os.str (); + } + + return r; + } + + private: + NameSet const& type_set_; + NameSet& element_set_; + }; + + struct NamespacePassOne: Traversal::Namespace, Context + { + NamespacePassOne (Context& c) + : Context (c) + { + } + + virtual Void + traverse (Type& ns) + { + NameSet& type_set (global_type_names[ns.name ()]); + + GlobalType type (*this, type_set); + Traversal::Names names (type); + + Traversal::Namespace::names (ns, names); + Traversal::Namespace::names (ns); + } + }; + + + struct NamespacePassThree: Traversal::Namespace, Context + { + NamespacePassThree (Context& c) + : Context (c) + { + } + + virtual Void + traverse (Type& ns) + { + String const& name (ns.name ()); + + NameSet const& type_set (global_type_names[name]); + NameSet& element_set (global_element_names[name]); + + GlobalElement element (*this, type_set, element_set); + Traversal::Names names (element); + + Traversal::Namespace::names (ns, names); + } + }; + + + struct FundamentalNamespace: Traversal::Namespace, + + Traversal::AnyType, + Traversal::AnySimpleType, + + Traversal::Fundamental::Byte, + Traversal::Fundamental::UnsignedByte, + Traversal::Fundamental::Short, + Traversal::Fundamental::UnsignedShort, + Traversal::Fundamental::Int, + Traversal::Fundamental::UnsignedInt, + Traversal::Fundamental::Long, + Traversal::Fundamental::UnsignedLong, + Traversal::Fundamental::Integer, + Traversal::Fundamental::NonPositiveInteger, + Traversal::Fundamental::NonNegativeInteger, + Traversal::Fundamental::PositiveInteger, + Traversal::Fundamental::NegativeInteger, + + Traversal::Fundamental::Boolean, + + Traversal::Fundamental::Float, + Traversal::Fundamental::Double, + Traversal::Fundamental::Decimal, + + Traversal::Fundamental::String, + Traversal::Fundamental::NormalizedString, + Traversal::Fundamental::Token, + Traversal::Fundamental::Name, + Traversal::Fundamental::NameToken, + Traversal::Fundamental::NameTokens, + Traversal::Fundamental::NCName, + Traversal::Fundamental::Language, + + Traversal::Fundamental::Id, + Traversal::Fundamental::IdRef, + Traversal::Fundamental::IdRefs, + + Traversal::Fundamental::AnyURI, + + Traversal::Fundamental::QName, + + Traversal::Fundamental::Base64Binary, + Traversal::Fundamental::HexBinary, + + Traversal::Fundamental::Date, + Traversal::Fundamental::DateTime, + Traversal::Fundamental::Duration, + Traversal::Fundamental::Day, + Traversal::Fundamental::Month, + Traversal::Fundamental::MonthDay, + Traversal::Fundamental::Year, + Traversal::Fundamental::YearMonth, + Traversal::Fundamental::Time, + + Traversal::Fundamental::Entity, + Traversal::Fundamental::Entities, + + Context + { + FundamentalNamespace (Context& c) + : Context (c) + { + *this >> names_ >> *this; + } + + Void + process_name (SemanticGraph::Type& t, String const& name) + { + String r ( + process_regex ( + namespace_ (t).name (), name, type_regex, L"type")); + + t.context ().set ("name", escape (r)); + } + + Void + process_name (SemanticGraph::Namespace& n, + String const& name, + Char const* key) + { + String r (process_regex (name, type_regex, L"type")); + n.context ().set (key, escape (r)); + } + + // anyType and anySimpleType + // + virtual Void + traverse (SemanticGraph::AnyType& t) + { + process_name (t, "type"); + } + + virtual Void + traverse (SemanticGraph::AnySimpleType& t) + { + process_name (t, "simple,type"); + } + + // Integrals. + // + virtual Void + traverse (SemanticGraph::Fundamental::Byte& t) + { + process_name (t, "byte"); + } + + virtual Void + traverse (SemanticGraph::Fundamental::UnsignedByte& t) + { + process_name (t, "unsigned,byte"); + } + + virtual Void + traverse (SemanticGraph::Fundamental::Short& t) + { + process_name (t, "short"); + } + + virtual Void + traverse (SemanticGraph::Fundamental::UnsignedShort& t) + { + process_name (t, "unsigned,short"); + } + + virtual Void + traverse (SemanticGraph::Fundamental::Int& t) + { + process_name (t, "int"); + } + + virtual Void + traverse (SemanticGraph::Fundamental::UnsignedInt& t) + { + process_name (t, "unsigned,int"); + } + + virtual Void + traverse (SemanticGraph::Fundamental::Long& t) + { + process_name (t, "long"); + } + + virtual Void + traverse (SemanticGraph::Fundamental::UnsignedLong& t) + { + process_name (t, "unsigned,long"); + } + + virtual Void + traverse (SemanticGraph::Fundamental::Integer& t) + { + process_name (t, "integer"); + } + + virtual Void + traverse (SemanticGraph::Fundamental::NonPositiveInteger& t) + { + process_name (t, "non,positive,integer"); + } + + virtual Void + traverse (SemanticGraph::Fundamental::NonNegativeInteger& t) + { + process_name (t, "non,negative,integer"); + } + + virtual Void + traverse (SemanticGraph::Fundamental::PositiveInteger& t) + { + process_name (t, "positive,integer"); + } + + virtual Void + traverse (SemanticGraph::Fundamental::NegativeInteger& t) + { + process_name (t, "negative,integer"); + } + + // Boolean. + // + virtual Void + traverse (SemanticGraph::Fundamental::Boolean& t) + { + process_name (t, "boolean"); + } + + // Floats. + // + virtual Void + traverse (SemanticGraph::Fundamental::Float& t) + { + process_name (t, "float"); + } + + virtual Void + traverse (SemanticGraph::Fundamental::Double& t) + { + process_name (t, "double"); + } + + virtual Void + traverse (SemanticGraph::Fundamental::Decimal& t) + { + process_name (t, "decimal"); + } + + // Strings. + // + virtual Void + traverse (SemanticGraph::Fundamental::String& t) + { + process_name (t, "string"); + } + + virtual Void + traverse (SemanticGraph::Fundamental::NormalizedString& t) + { + process_name (t, "normalized,string"); + } + + virtual Void + traverse (SemanticGraph::Fundamental::Token& t) + { + process_name (t, "token"); + } + + virtual Void + traverse (SemanticGraph::Fundamental::NameToken& t) + { + process_name (t, "nmtoken"); + } + + virtual Void + traverse (SemanticGraph::Fundamental::NameTokens& t) + { + process_name (t, "nmtokens"); + } + + virtual Void + traverse (SemanticGraph::Fundamental::Name& t) + { + process_name (t, "name"); + } + + virtual Void + traverse (SemanticGraph::Fundamental::NCName& t) + { + process_name (t, "ncname"); + } + + virtual Void + traverse (SemanticGraph::Fundamental::Language& t) + { + process_name (t, "language"); + } + + // ID/IDREF. + // + virtual Void + traverse (SemanticGraph::Fundamental::Id& t) + { + process_name (t, "id"); + } + + virtual Void + traverse (SemanticGraph::Fundamental::IdRef& t) + { + process_name (t, "idref"); + } + + virtual Void + traverse (SemanticGraph::Fundamental::IdRefs& t) + { + process_name (t, "idrefs"); + } + + + // URI. + // + virtual Void + traverse (SemanticGraph::Fundamental::AnyURI& t) + { + process_name (t, "uri"); + } + + // Qualified name. + // + virtual Void + traverse (SemanticGraph::Fundamental::QName& t) + { + process_name (t, "qname"); + } + + // Binary. + // + virtual Void + traverse (SemanticGraph::Fundamental::Base64Binary& t) + { + process_name (t, "base64,binary"); + } + + virtual Void + traverse (SemanticGraph::Fundamental::HexBinary& t) + { + process_name (t, "hex,binary"); + } + + + // Date/time. + // + virtual Void + traverse (SemanticGraph::Fundamental::Date& t) + { + process_name (t, "date"); + } + + virtual Void + traverse (SemanticGraph::Fundamental::DateTime& t) + { + process_name (t, "date,time"); + } + + virtual Void + traverse (SemanticGraph::Fundamental::Duration& t) + { + process_name (t, "duration"); + } + + virtual Void + traverse (SemanticGraph::Fundamental::Day& t) + { + process_name (t, "gday"); + } + + virtual Void + traverse (SemanticGraph::Fundamental::Month& t) + { + process_name (t, "gmonth"); + } + + virtual Void + traverse (SemanticGraph::Fundamental::MonthDay& t) + { + process_name (t, "gmonth,day"); + } + + virtual Void + traverse (SemanticGraph::Fundamental::Year& t) + { + process_name (t, "gyear"); + } + + virtual Void + traverse (SemanticGraph::Fundamental::YearMonth& t) + { + process_name (t, "gyear,month"); + } + + virtual Void + traverse (SemanticGraph::Fundamental::Time& t) + { + process_name (t, "time"); + } + + // Entity. + // + virtual Void + traverse (SemanticGraph::Fundamental::Entity& t) + { + process_name (t, "entity"); + } + + virtual Void + traverse (SemanticGraph::Fundamental::Entities& t) + { + process_name (t, "entities"); + } + + virtual Void + post (SemanticGraph::Namespace& n) + { + // Assign names to extra stuff in the XML Schema namespace. + // + process_name (n, "container", "container"); + process_name (n, "buffer", "buffer"); + process_name (n, "time,zone", "time-zone"); + + if (options.value<CLI::generate_element_type> ()) + process_name (n, "element,type", "element-type"); + + if (options.value<CLI::generate_element_map> ()) + process_name (n, "element,map", "element-map"); + + if (options.value<CLI::generate_serialization> ()) + { + process_name (n, "namespace,info", "namespace-info"); + process_name (n, "namespace,infomap", "namespace-infomap"); + process_name (n, "list,stream", "list-stream"); + process_name (n, "as,double", "as-double"); + process_name (n, "as,decimal", "as-decimal"); + process_name (n, "facet", "facet"); + } + + if (!options.value<CLI::generate_insertion> ().empty ()) + { + process_name (n, "ostream", "ostream"); + } + + if (!options.value<CLI::generate_extraction> ().empty ()) + { + process_name (n, "istream", "istream"); + } + + process_name (n, "flags", "flags"); + process_name (n, "properties", "properties"); + + NarrowString fn (options.value<CLI::function_naming> ()); + + if (fn == "knr") + n.context ().set ("tree-node-key", String ("tree_node_key")); + else + n.context ().set ("tree-node-key", String ("treeNodeKey")); + + process_name (n, "exception", "exception"); + process_name (n, "parsing", "parsing"); + process_name (n, "expected,element", "expected-element"); + process_name (n, "unexpected,element", "unexpected-element"); + process_name (n, "expected,attribute", "expected-attribute"); + process_name (n, "unexpected,enumerator", "unexpected-enumerator"); + process_name (n, "expected,text,content", "expected-text-content"); + process_name (n, "no,type,info", "no-type-info"); + process_name (n, "no,element,info", "no-element-info"); + process_name (n, "not,derived", "not-derived"); + process_name (n, "duplicate,id", "duplicate-id"); + process_name (n, "serialization", "serialization"); + process_name (n, "no,namespace,mapping", "no-namespace-mapping"); + process_name (n, "no,prefix,mapping", "no-prefix-mapping"); + process_name (n, "xsi,already,in,use", "xsi-already-in-use"); + process_name (n, "bounds", "bounds"); + + process_name (n, "severity", "severity"); + process_name (n, "error", "error"); + process_name (n, "diagnostics", "diagnostics"); + + if (!options.value<CLI::suppress_parsing> () || + options.value<CLI::generate_serialization> ()) + { + process_name (n, "error,handler", "error-handler"); + } + + Namespace::post (n); + } + + private: + Traversal::Names names_; + }; + + + // Go into sourced/included/imported schemas while making sure + // we don't process the same stuff more than once. + // + struct UsesPassOne: Traversal::Uses + { + virtual Void + traverse (Type& u) + { + SemanticGraph::Schema& s (u.schema ()); + + if (!s.context ().count ("cxx-tree-name-processor-pass-1")) + { + s.context ().set ("cxx-tree-name-processor-pass-1", true); + Traversal::Uses::traverse (u); + } + } + }; + + struct UsesPassThree: Traversal::Uses + { + virtual Void + traverse (Type& u) + { + SemanticGraph::Schema& s (u.schema ()); + + if (!s.context ().count ("cxx-tree-name-processor-pass-3")) + { + s.context ().set ("cxx-tree-name-processor-pass-3", true); + Traversal::Uses::traverse (u); + } + } + }; + + // Go into implied schemas while making sure we don't process + // the same stuff more than once. + // + struct Implies: Traversal::Implies + { + virtual Void + traverse (SemanticGraph::Implies& i) + { + SemanticGraph::Schema& s (i.schema ()); + + if (!s.context ().count ("cxx-tree-name-processor-seen")) + { + s.context ().set ("cxx-tree-name-processor-seen", true); + Traversal::Implies::traverse (i); + } + } + }; + + Boolean + process_impl (CLI::Options const& ops, + SemanticGraph::Schema& tu, + SemanticGraph::Path const& file, + StringLiteralMap const& map) + { + try + { + Counts counts; + Context ctx (ops, counts, false, tu, file, map); + + if (tu.names_begin ()->named ().name () == + L"http://www.w3.org/2001/XMLSchema") + { + // XML Schema namespace. + // + Traversal::Schema xs_schema; + Traversal::Names xs_schema_names; + FundamentalNamespace xs_ns (ctx); + + xs_schema >> xs_schema_names >> xs_ns; + + xs_schema.dispatch (tu); + } + else + { + + // Pass one - assign names to global types. This pass cannot + // be combined with pass two because of possible recursive + // schema inclusions. Also note that we check first if this + // schema has already been processed which may happen in the + // file-per-type compilation mode. + // + if (!tu.context ().count ("cxx-tree-name-processor-pass-1")) + { + Traversal::Schema schema; + Traversal::Schema xs_schema; + UsesPassOne uses; + Implies implies; + + schema >> uses >> schema; + schema >> implies >> xs_schema; + + Traversal::Names schema_names; + Traversal::Names xs_schema_names; + NamespacePassOne ns (ctx); + FundamentalNamespace xs_ns (ctx); + + schema >> schema_names >> ns; + xs_schema >> xs_schema_names >> xs_ns; + + // Some twisted schemas do recusive self-inclusion. + // + tu.context ().set ("cxx-tree-name-processor-pass-1", true); + + schema.dispatch (tu); + } + + // Pass two - assign names inside complex types. Here + // we don't need to go into included/imported schemas. + // + { + Traversal::Schema schema; + Traversal::Sources sources; + + schema >> sources >> schema; + + Traversal::Names schema_names; + Traversal::Namespace ns; + Traversal::Names ns_names; + + schema >> schema_names >> ns >> ns_names; + + Complex complex (ctx); + Traversal::Enumeration enumeration; // Avoid fallback on complex. + + ns_names >> complex; + ns_names >> enumeration; + + schema.dispatch (tu); + } + + // Pass three - assign names to global elements as well as + // inside enums. Also note that we check first if this schema + // has already been processed which may happen in the file-per- + // type compilation mode. + // + if (!tu.context ().count ("cxx-tree-name-processor-pass-3")) + { + Traversal::Schema schema; + UsesPassThree uses; + + schema >> uses >> schema; + + Traversal::Names schema_names; + NamespacePassThree ns (ctx); + Traversal::Namespace ns_enum; + + schema >> schema_names; + + schema_names >> ns; + schema_names >> ns_enum; + + Traversal::Names ns_names; + Enumeration enumeration (ctx); + + ns_enum >> ns_names >> enumeration; + + // Some twisted schemas do recusive self-inclusion. + // + tu.context ().set ("cxx-tree-name-processor-pass-3", true); + + schema.dispatch (tu); + } + } + } + catch (Context::Failed const&) + { + // Diagnostics has already been issued. + // + return false; + } + + return true; + } + } + + Boolean NameProcessor:: + process (CLI::Options const& ops, + SemanticGraph::Schema& tu, + SemanticGraph::Path const& file, + StringLiteralMap const& map) + { + return process_impl (ops, tu, file, map); + } + } +} diff --git a/xsd/xsd/cxx/tree/name-processor.hxx b/xsd/xsd/cxx/tree/name-processor.hxx new file mode 100644 index 0000000..cf187b7 --- /dev/null +++ b/xsd/xsd/cxx/tree/name-processor.hxx @@ -0,0 +1,31 @@ +// file : xsd/cxx/tree/name-processor.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef CXX_TREE_NAME_PROCESSOR_HXX +#define CXX_TREE_NAME_PROCESSOR_HXX + +#include <cxx/tree/elements.hxx> + +namespace CXX +{ + namespace Tree + { + using namespace Cult::Types; + + class NameProcessor + { + public: + NameProcessor (); // Dummy ctor, helps with long symbols on HP-UX. + + Boolean + process (CLI::Options const&, + XSDFrontend::SemanticGraph::Schema&, + XSDFrontend::SemanticGraph::Path const& file, + StringLiteralMap const&); + }; + } +} + +#endif // CXX_TREE_NAME_PROCESSOR_HXX diff --git a/xsd/xsd/cxx/tree/parser-header.cxx b/xsd/xsd/cxx/tree/parser-header.cxx new file mode 100644 index 0000000..c1d1ab9 --- /dev/null +++ b/xsd/xsd/cxx/tree/parser-header.cxx @@ -0,0 +1,474 @@ +// file : xsd/cxx/tree/parser-header.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <cxx/tree/parser-header.hxx> + +#include <xsd-frontend/semantic-graph.hxx> +#include <xsd-frontend/traversal.hxx> + +namespace CXX +{ + namespace Tree + { + namespace + { + struct ElementFunction: Traversal::Element, + GlobalElementBase, + Context + { + ElementFunction (Context& c) + : GlobalElementBase (c), Context (c) + { + } + + virtual Void + traverse (Type& e) + { + if (!doc_root_p (e)) + return; + + String const& name (eparser (e)); + String const& error_handler (error_handler_type); + + if (doxygen) + { + os << "/**" << endl + << " * @name Parsing functions for the %" << + comment (e.name ()) << " document root." << endl; + + if (e.annotated_p ()) + { + os << " *" << endl; + write_annotation (e.annotation ()); + } + + os << " */" << endl + << "//@{" << endl + << endl; + } + + if (!doxygen) + { + os << "// Parse a URI or a local file." << endl + << "//" << endl + << endl; + } + + if (doxygen) + { + os << "/**" << endl + << " * @brief Parse a URI or a local file." << endl + << " *" << endl + << " * @param uri A URI or a local file name." << endl + << " * @param f Parsing flags." << endl + << " * @param p Parsing properties. " << endl + << " * @return A pointer to the root of the object model." << endl + << " *" << endl + << " * This function uses exceptions to report parsing errors." << endl + << " */" << endl; + } + + os << inst_exp + << "::std::auto_ptr< " << type_name (e) << " >" << endl + << name << " (const " << string_type << "& uri," << endl + << flags_type << " f = 0," << endl + << "const " << properties_type << "& p = " << properties_type << " ());" + << endl; + + if (doxygen) + { + os << "/**" << endl + << " * @brief Parse a URI or a local file with an error handler." << endl + << " *" << endl + << " * @param uri A URI or a local file name." << endl + << " * @param eh An error handler." << endl + << " * @param f Parsing flags." << endl + << " * @param p Parsing properties. " << endl + << " * @return A pointer to the root of the object model." << endl + << " *" << endl + << " * This function reports parsing errors by calling the " << + "error handler." << endl + << " */" << endl; + } + + os << inst_exp + << "::std::auto_ptr< " << type_name (e) << " >" << endl + << name << " (const " << string_type << "& uri," << endl + << error_handler << "& eh," << endl + << flags_type << " f = 0," << endl + << "const " << properties_type << "& p = " << properties_type << " ());" + << endl; + + if (doxygen) + { + os << "/**" << endl + << " * @brief Parse a URI or a local file with a Xerces-C++ " << + "DOM error" << endl + << " * handler." << endl + << " *" << endl + << " * @param uri A URI or a local file name." << endl + << " * @param eh A Xerces-C++ DOM error handler." << endl + << " * @param f Parsing flags." << endl + << " * @param p Parsing properties. " << endl + << " * @return A pointer to the root of the object model." << endl + << " *" << endl + << " * This function reports parsing errors by calling the " << + "error handler." << endl + << " */" << endl; + } + + os << inst_exp + << "::std::auto_ptr< " << type_name (e) << " >" << endl + << name << " (const " << string_type << "& uri," << endl + << xerces_ns << "::DOMErrorHandler& eh," << endl + << flags_type << " f = 0," << endl + << "const " << properties_type << "& p = " << properties_type << " ());" + << endl; + + if (!doxygen) + { + os << "// Parse std::istream." << endl + << "//" << endl + << endl; + } + + if (doxygen) + { + os << "/**" << endl + << " * @brief Parse a standard input stream." << endl + << " *" << endl + << " * @param is A standrad input stream." << endl + << " * @param f Parsing flags." << endl + << " * @param p Parsing properties. " << endl + << " * @return A pointer to the root of the object model." << endl + << " *" << endl + << " * This function uses exceptions to report parsing errors." << endl + << " */" << endl; + } + + os << inst_exp + << "::std::auto_ptr< " << type_name (e) << " >" << endl + << name << " (::std::istream& is," << endl + << flags_type << " f = 0," << endl + << "const " << properties_type << "& p = " << properties_type << " ());" + << endl; + + if (doxygen) + { + os << "/**" << endl + << " * @brief Parse a standard input stream with an error handler." << endl + << " *" << endl + << " * @param is A standrad input stream." << endl + << " * @param eh An error handler." << endl + << " * @param f Parsing flags." << endl + << " * @param p Parsing properties. " << endl + << " * @return A pointer to the root of the object model." << endl + << " *" << endl + << " * This function reports parsing errors by calling the " << + "error handler." << endl + << " */" << endl; + } + + os << inst_exp + << "::std::auto_ptr< " << type_name (e) << " >" << endl + << name << " (::std::istream& is," << endl + << error_handler << "& eh," << endl + << flags_type << " f = 0," << endl + << "const " << properties_type << "& p = " << properties_type << " ());" + << endl; + + if (doxygen) + { + os << "/**" << endl + << " * @brief Parse a standard input stream with a " << + "Xerces-C++ DOM error" << endl + << " * handler." << endl + << " *" << endl + << " * @param is A standrad input stream." << endl + << " * @param eh A Xerces-C++ DOM error handler." << endl + << " * @param f Parsing flags." << endl + << " * @param p Parsing properties. " << endl + << " * @return A pointer to the root of the object model." << endl + << " *" << endl + << " * This function reports parsing errors by calling the " << + "error handler." << endl + << " */" << endl; + } + + os << inst_exp + << "::std::auto_ptr< " << type_name (e) << " >" << endl + << name << " (::std::istream& is," << endl + << xerces_ns << "::DOMErrorHandler& eh," << endl + << flags_type << " f = 0," << endl + << "const " << properties_type << "& p = " << properties_type << " ());" + << endl; + + if (doxygen) + { + os << "/**" << endl + << " * @brief Parse a standard input stream with a resource id." << endl + << " *" << endl + << " * @param is A standrad input stream." << endl + << " * @param id A resource id." << endl + << " * @param f Parsing flags." << endl + << " * @param p Parsing properties. " << endl + << " * @return A pointer to the root of the object model." << endl + << " *" << endl + << " * The resource id is used to identify the document " << + "being parsed in" << endl + << " * diagnostics as well as to resolve relative paths." << endl + << " *" << endl + << " * This function uses exceptions to report parsing errors." << endl + << " */" << endl; + } + + os << inst_exp + << "::std::auto_ptr< " << type_name (e) << " >" << endl + << name << " (::std::istream& is," << endl + << "const " << string_type << "& id," << endl + << flags_type << " f = 0," << endl + << "const " << properties_type << "& p = " << properties_type << " ());" + << endl; + + if (doxygen) + { + os << "/**" << endl + << " * @brief Parse a standard input stream with a resource " << + "id and an" << endl + << " * error handler." << endl + << " *" << endl + << " * @param is A standrad input stream." << endl + << " * @param id A resource id." << endl + << " * @param eh An error handler." << endl + << " * @param f Parsing flags." << endl + << " * @param p Parsing properties. " << endl + << " * @return A pointer to the root of the object model." << endl + << " *" << endl + << " * The resource id is used to identify the document " << + "being parsed in" << endl + << " * diagnostics as well as to resolve relative paths." << endl + << " *" << endl + << " * This function reports parsing errors by calling the " << + "error handler." << endl + << " */" << endl; + } + + os << inst_exp + << "::std::auto_ptr< " << type_name (e) << " >" << endl + << name << " (::std::istream& is," << endl + << "const " << string_type << "& id," << endl + << error_handler << "& eh," << endl + << flags_type << " f = 0," << endl + << "const " << properties_type << "& p = " << properties_type << " ());" + << endl; + + if (doxygen) + { + os << "/**" << endl + << " * @brief Parse a standard input stream with a resource " << + "id and a" << endl + << " * Xerces-C++ DOM error handler." << endl + << " *" << endl + << " * @param is A standrad input stream." << endl + << " * @param id A resource id." << endl + << " * @param eh A Xerces-C++ DOM error handler." << endl + << " * @param f Parsing flags." << endl + << " * @param p Parsing properties. " << endl + << " * @return A pointer to the root of the object model." << endl + << " *" << endl + << " * The resource id is used to identify the document " << + "being parsed in" << endl + << " * diagnostics as well as to resolve relative paths." << endl + << " *" << endl + << " * This function reports parsing errors by calling the " << + "error handler." << endl + << " */" << endl; + } + + os << inst_exp + << "::std::auto_ptr< " << type_name (e) << " >" << endl + << name << " (::std::istream& is," << endl + << "const " << string_type << "& id," << endl + << xerces_ns << "::DOMErrorHandler& eh," << endl + << flags_type << " f = 0," << endl + << "const " << properties_type << "& p = " << properties_type << " ());" + << endl; + + if (!doxygen) + { + os << "// Parse xercesc::InputSource." << endl + << "//" << endl + << endl; + } + + if (doxygen) + { + os << "/**" << endl + << " * @brief Parse a Xerces-C++ input source." << endl + << " *" << endl + << " * @param is A Xerces-C++ input source." << endl + << " * @param f Parsing flags." << endl + << " * @param p Parsing properties. " << endl + << " * @return A pointer to the root of the object model." << endl + << " *" << endl + << " * This function uses exceptions to report parsing errors." << endl + << " */" << endl; + } + + os << inst_exp + << "::std::auto_ptr< " << type_name (e) << " >" << endl + << name << " (" << xerces_ns << "::InputSource& is," << endl + << flags_type << " f = 0," << endl + << "const " << properties_type << "& p = " << properties_type << " ());" + << endl; + + if (doxygen) + { + os << "/**" << endl + << " * @brief Parse a Xerces-C++ input source with an " << + "error handler." << endl + << " *" << endl + << " * @param is A Xerces-C++ input source." << endl + << " * @param eh An error handler." << endl + << " * @param f Parsing flags." << endl + << " * @param p Parsing properties. " << endl + << " * @return A pointer to the root of the object model." << endl + << " *" << endl + << " * This function reports parsing errors by calling the " << + "error handler." << endl + << " */" << endl; + } + + os << inst_exp + << "::std::auto_ptr< " << type_name (e) << " >" << endl + << name << " (" << xerces_ns << "::InputSource& is," << endl + << error_handler << "& eh," << endl + << flags_type << " f = 0," << endl + << "const " << properties_type << "& p = " << properties_type << " ());" + << endl; + + if (doxygen) + { + os << "/**" << endl + << " * @brief Parse a Xerces-C++ input source with a " << + "Xerces-C++ DOM" << endl + << " * error handler." << endl + << " *" << endl + << " * @param is A Xerces-C++ input source." << endl + << " * @param eh A Xerces-C++ DOM error handler." << endl + << " * @param f Parsing flags." << endl + << " * @param p Parsing properties. " << endl + << " * @return A pointer to the root of the object model." << endl + << " *" << endl + << " * This function reports parsing errors by calling the " << + "error handler." << endl + << " */" << endl; + } + + os << inst_exp + << "::std::auto_ptr< " << type_name (e) << " >" << endl + << name << " (" << xerces_ns << "::InputSource& is," << endl + << xerces_ns << "::DOMErrorHandler& eh," << endl + << flags_type << " f = 0," << endl + << "const " << properties_type << "& p = " << properties_type << " ());" + << endl; + + if (!doxygen) + { + os << "// Parse xercesc::DOMDocument." << endl + << "//" << endl + << endl; + } + + if (doxygen) + { + os << "/**" << endl + << " * @brief Parse a Xerces-C++ DOM document." << endl + << " *" << endl + << " * @param d A Xerces-C++ DOM document." << endl + << " * @param f Parsing flags." << endl + << " * @param p Parsing properties. " << endl + << " * @return A pointer to the root of the object model." << endl + << " */" << endl; + } + + os << inst_exp + << "::std::auto_ptr< " << type_name (e) << " >" << endl + << name << " (const " << xerces_ns << "::DOMDocument& d," << endl + << flags_type << " f = 0," << endl + << "const " << properties_type << "& p = " << properties_type << " ());" + << endl; + + if (doxygen) + { + os << "/**" << endl + << " * @brief Parse a Xerces-C++ DOM document." << endl + << " *" << endl + << " * @param d A pointer to the Xerces-C++ DOM document." << endl + << " * @param f Parsing flags." << endl + << " * @param p Parsing properties. " << endl + << " * @return A pointer to the root of the object model." << endl + << " *" << endl + << " * This function is normally used together with the " << + "keep_dom and" << endl + << " * own_dom parsing flags to assign ownership of the DOM " << + "document" << endl + << " * to the object model." << endl + << " */" << endl; + } + + os << inst_exp + << "::std::auto_ptr< " << type_name (e) << " >" << endl + << name << " (" << dom_auto_ptr << "< " << xerces_ns << + "::DOMDocument >& d," << endl + << flags_type << " f = 0," << endl + << "const " << properties_type << "& p = " << properties_type << " ());" + << endl; + + if (doxygen) + { + os << "//@}" << endl + << endl; + } + } + + private: + String + type_name (Type& e) + { + std::wostringstream o; + + MemberTypeName type (*this, o); + type.dispatch (e.type ()); + + return o.str (); + } + }; + } + + + Void + generate_parser_header (Context& ctx) + { + ctx.os << "#include <iosfwd>" << endl + << endl + << "#include <xercesc/sax/InputSource.hpp>" << endl + << "#include <xercesc/dom/DOMDocument.hpp>" << endl + << "#include <xercesc/dom/DOMErrorHandler.hpp>" << endl + << endl; + + Traversal::Schema schema; + Traversal::Sources sources; + Traversal::Names names_ns, names; + Namespace ns (ctx); + ElementFunction element (ctx); + + schema >> sources >> schema; + schema >> names_ns >> ns >> names >> element; + + schema.dispatch (ctx.schema_root); + } + } +} diff --git a/xsd/xsd/cxx/tree/parser-header.hxx b/xsd/xsd/cxx/tree/parser-header.hxx new file mode 100644 index 0000000..20ca7d4 --- /dev/null +++ b/xsd/xsd/cxx/tree/parser-header.hxx @@ -0,0 +1,21 @@ +// file : xsd/cxx/tree/parser-header.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef CXX_TREE_PARSER_HEADER_HXX +#define CXX_TREE_PARSER_HEADER_HXX + +#include <cxx/tree/elements.hxx> + + +namespace CXX +{ + namespace Tree + { + Void + generate_parser_header (Context&); + } +} + +#endif // CXX_TREE_PARSER_HEADER_HXX diff --git a/xsd/xsd/cxx/tree/parser-source.cxx b/xsd/xsd/cxx/tree/parser-source.cxx new file mode 100644 index 0000000..7291cb8 --- /dev/null +++ b/xsd/xsd/cxx/tree/parser-source.cxx @@ -0,0 +1,542 @@ +// file : xsd/cxx/tree/parser-source.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <cxx/tree/parser-source.hxx> + +#include <xsd-frontend/semantic-graph.hxx> +#include <xsd-frontend/traversal.hxx> + +namespace CXX +{ + namespace Tree + { + namespace + { + struct ElementFunction: Traversal::Element, + GlobalElementBase, + Context + { + ElementFunction (Context& c) + : GlobalElementBase (c), Context (c) + { + } + + virtual Void + traverse (Type& e) + { + if (!doc_root_p (e)) + return; + + String const& name (eparser (e)); + SemanticGraph::Type& t (e.type ()); + String type (type_name (e)); + String const& error_handler (error_handler_type); + + // Note that I am using fq-name in function calls because g++ gets + // confused if the name is 'type'. (see tests/schema/anonymous) + // + + // URI. + // + os << "::std::auto_ptr< " << type << " >" << endl + << name << " (const " << string_type << "& u," << endl + << flags_type << " f," << endl + << "const " << properties_type << "& p)" + << "{" + << "::xsd::cxx::xml::auto_initializer i (" << endl + << "(f & " << flags_type << "::dont_initialize) == 0," << endl + << "(f & " << flags_type << "::keep_dom) == 0);" + << endl + << "::xsd::cxx::tree::error_handler< " << char_type << " > h;" + << endl + << dom_auto_ptr << "< " << xerces_ns << + "::DOMDocument > d (" << endl + << "::xsd::cxx::xml::dom::parse< " << char_type << " > (" << endl + << "u, h, p, f"; + + if (options.value<CLI::disable_multi_import> ()) + os << " | ::xsd::cxx::xml::dom::no_muliple_imports"; + + os << "));" + << endl + << "h.throw_if_failed< ::xsd::cxx::tree::parsing< " << + char_type << " > > ();" + << endl + << "::std::auto_ptr< " << type << " > r (" << endl + << fq_name (e, "parser") << " (" << endl + << "d, f | " << flags_type << "::own_dom, p));" + << endl + << "return r;" + << "}"; + + os << "::std::auto_ptr< " << type << " >" << endl + << name << " (const " << string_type << "& u," << endl + << error_handler << "& h," << endl + << flags_type << " f," << endl + << "const " << properties_type << "& p)" + << "{" + << "::xsd::cxx::xml::auto_initializer i (" << endl + << "(f & " << flags_type << "::dont_initialize) == 0," << endl + << "(f & " << flags_type << "::keep_dom) == 0);" + << endl + << dom_auto_ptr << "< " << xerces_ns << + "::DOMDocument > d (" << endl + << "::xsd::cxx::xml::dom::parse< " << char_type << " > (" << endl + << "u, h, p, f"; + + if (options.value<CLI::disable_multi_import> ()) + os << " | ::xsd::cxx::xml::dom::no_muliple_imports"; + + os << "));" + << endl + << "if (!d.get ())" << endl + << "throw ::xsd::cxx::tree::parsing< " << char_type << " > ();" + << endl + << "::std::auto_ptr< " << type << " > r (" << endl + << fq_name (e, "parser") << " (" << endl + << "d, f | " << flags_type << "::own_dom, p));" + << endl + << "return r;" + << "}"; + + os << "::std::auto_ptr< " << type << " >" << endl + << name << " (const " << string_type << "& u," << endl + << xerces_ns << "::DOMErrorHandler& h," << endl + << flags_type << " f," << endl + << "const " << properties_type << "& p)" + << "{" + << dom_auto_ptr << "< " << xerces_ns << + "::DOMDocument > d (" << endl + << "::xsd::cxx::xml::dom::parse< " << char_type << " > (" << endl + << "u, h, p, f"; + + if (options.value<CLI::disable_multi_import> ()) + os << " | ::xsd::cxx::xml::dom::no_muliple_imports"; + + os << "));" + << endl + << "if (!d.get ())" << endl + << "throw ::xsd::cxx::tree::parsing< " << char_type << " > ();" + << endl + << "::std::auto_ptr< " << type << " > r (" << endl + << fq_name (e, "parser") << " (" << endl + << "d, f | " << flags_type << "::own_dom, p));" + << endl + << "return r;" + << "}"; + + + // istream + // + os << "::std::auto_ptr< " << type << " >" << endl + << name << " (::std::istream& is," << endl + << flags_type << " f," << endl + << "const " << properties_type << "& p)" + << "{" + << "::xsd::cxx::xml::auto_initializer i (" << endl + << "(f & " << flags_type << "::dont_initialize) == 0," << endl + << "(f & " << flags_type << "::keep_dom) == 0);" + << endl + << "::xsd::cxx::xml::sax::std_input_source isrc (is);" + << "return " << fq_name (e, "parser") << " (isrc, f, p);" + << "}"; + + os << "::std::auto_ptr< " << type << " >" << endl + << name << " (::std::istream& is," << endl + << error_handler << "& h," << endl + << flags_type << " f," << endl + << "const " << properties_type << "& p)" + << "{" + << "::xsd::cxx::xml::auto_initializer i (" << endl + << "(f & " << flags_type << "::dont_initialize) == 0," << endl + << "(f & " << flags_type << "::keep_dom) == 0);" + << endl + << "::xsd::cxx::xml::sax::std_input_source isrc (is);" + << "return " << fq_name (e, "parser") << " (isrc, h, f, p);" + << "}"; + + os << "::std::auto_ptr< " << type << " >" << endl + << name << " (::std::istream& is," << endl + << xerces_ns << "::DOMErrorHandler& h," << endl + << flags_type << " f," << endl + << "const " << properties_type << "& p)" + << "{" + << "::xsd::cxx::xml::sax::std_input_source isrc (is);" + << "return " << fq_name (e, "parser") << " (isrc, h, f, p);" + << "}"; + + os << "::std::auto_ptr< " << type << " >" << endl + << name << " (::std::istream& is," << endl + << "const " << string_type << "& sid," << endl + << flags_type << " f," << endl + << "const " << properties_type << "& p)" + << "{" + << "::xsd::cxx::xml::auto_initializer i (" << endl + << "(f & " << flags_type << "::dont_initialize) == 0," << endl + << "(f & " << flags_type << "::keep_dom) == 0);" + << endl + << "::xsd::cxx::xml::sax::std_input_source isrc (is, sid);" + << "return " << fq_name (e, "parser") << " (isrc, f, p);" + << "}"; + + os << "::std::auto_ptr< " << type << " >" << endl + << name << " (::std::istream& is," << endl + << "const " << string_type << "& sid," << endl + << error_handler << "& h," << endl + << flags_type << " f," << endl + << "const " << properties_type << "& p)" + << "{" + << "::xsd::cxx::xml::auto_initializer i (" << endl + << "(f & " << flags_type << "::dont_initialize) == 0," << endl + << "(f & " << flags_type << "::keep_dom) == 0);" + << endl + << "::xsd::cxx::xml::sax::std_input_source isrc (is, sid);" + << "return " << fq_name (e, "parser") << " (isrc, h, f, p);" + << "}"; + + os << "::std::auto_ptr< " << type << " >" << endl + << name << " (::std::istream& is," << endl + << "const " << string_type << "& sid," << endl + << xerces_ns << "::DOMErrorHandler& h," << endl + << flags_type << " f," << endl + << "const " << properties_type << "& p)" + << "{" + << "::xsd::cxx::xml::sax::std_input_source isrc (is, sid);" + << "return " << fq_name (e, "parser") << " (isrc, h, f, p);" + << "}"; + + + // InputSource. + // + os << "::std::auto_ptr< " << type << " >" << endl + << name << " (" << xerces_ns << "::InputSource& i," << endl + << flags_type << " f," << endl + << "const " << properties_type << "& p)" + << "{" + << "::xsd::cxx::tree::error_handler< " << char_type << " > h;" + << endl + << dom_auto_ptr << "< " << xerces_ns << + "::DOMDocument > d (" << endl + << "::xsd::cxx::xml::dom::parse< " << char_type << " > (" << endl + << "i, h, p, f"; + + if (options.value<CLI::disable_multi_import> ()) + os << " | ::xsd::cxx::xml::dom::no_muliple_imports"; + + os << "));" + << endl + << "h.throw_if_failed< ::xsd::cxx::tree::parsing< " << + char_type << " > > ();" + << endl + << "::std::auto_ptr< " << type << " > r (" << endl + << fq_name (e, "parser") << " (" << endl + << "d, f | " << flags_type << "::own_dom, p));" + << endl + << "return r;" + << "}"; + + os << "::std::auto_ptr< " << type << " >" << endl + << name << " (" << xerces_ns << "::InputSource& i," << endl + << error_handler << "& h," << endl + << flags_type << " f," << endl + << "const " << properties_type << "& p)" + << "{" + << dom_auto_ptr << "< " << xerces_ns << + "::DOMDocument > d (" << endl + << "::xsd::cxx::xml::dom::parse< " << char_type << " > (" << endl + << "i, h, p, f"; + + if (options.value<CLI::disable_multi_import> ()) + os << " | ::xsd::cxx::xml::dom::no_muliple_imports"; + + os << "));" + << endl + << "if (!d.get ())" << endl + << "throw ::xsd::cxx::tree::parsing< " << char_type << " > ();" + << endl + << "::std::auto_ptr< " << type << " > r (" << endl + << fq_name (e, "parser") << " (" << endl + << "d, f | " << flags_type << "::own_dom, p));" + << endl + << "return r;" + << "}"; + + + os << "::std::auto_ptr< " << type << " >" << endl + << name << " (" << xerces_ns << "::InputSource& i," << endl + << xerces_ns << "::DOMErrorHandler& h," << endl + << flags_type << " f," << endl + << "const " << properties_type << "& p)" + << "{" + << dom_auto_ptr << "< " << xerces_ns << + "::DOMDocument > d (" << endl + << "::xsd::cxx::xml::dom::parse< " << char_type << " > (" << endl + << "i, h, p, f"; + + if (options.value<CLI::disable_multi_import> ()) + os << " | ::xsd::cxx::xml::dom::no_muliple_imports"; + + os << "));" + << endl + << "if (!d.get ())" << endl + << "throw ::xsd::cxx::tree::parsing< " << char_type << " > ();" + << endl + << "::std::auto_ptr< " << type << " > r (" << endl + << fq_name (e, "parser") << " (" << endl + << "d, f | " << flags_type << "::own_dom, p));" + << endl + << "return r;" + << "}"; + + + // DOM. + // + + Boolean fund (false); + { + IsFundamentalType test (fund); + test.dispatch (t); + } + + // Check if we need to handle xsi:type and substitution groups. + // If this element's type is anonymous then we don't need to do + // anything. + // + Boolean poly (polymorphic && polymorphic_p (t) && !anonymous_p (t)); + + // const DOMDocument& + // + os << "::std::auto_ptr< " << type << " >" << endl + << name << " (const " << xerces_ns << "::DOMDocument& d," << endl + << flags_type << " f," << endl + << "const " << properties_type << "& p)" + << "{" + << "if (f & " << flags_type << "::keep_dom)" + << "{" + << dom_auto_ptr << "< " << xerces_ns << + "::DOMDocument > c (" << endl + << "static_cast< " << xerces_ns << + "::DOMDocument* > (d.cloneNode (true)));" + << endl + << "::std::auto_ptr< " << type << " > r (" << endl + << fq_name (e, "parser") << " (" << endl + << "c, f | " << flags_type << "::own_dom, p));" + << endl + << "return r;" + << "}" + << "const " << xerces_ns << "::DOMElement& e (*d.getDocumentElement ());" + << "const " << qname_type << " n (" << endl + << "::xsd::cxx::xml::dom::name< " << char_type << " > (e));" + << endl; + + if (poly) + { + // aCC cannot handle an inline call to type_factory_map_instance. + // + os << "::xsd::cxx::tree::type_factory_map< " << char_type << + " >& tfm (" << endl + << "::xsd::cxx::tree::type_factory_map_instance< 0, " << + char_type << " > ());" + << endl + << "::std::auto_ptr< ::xsd::cxx::tree::type > tmp (" << endl + << "tfm.create (" << endl + << strlit (e.name ()) << "," << endl + << strlit (e.namespace_().name ()) << "," << endl + << "&::xsd::cxx::tree::factory_impl< " << type << " >," << endl + << "true, true, e, n, f, 0));" + << endl + << "if (tmp.get () != 0)" + << "{" + << "::std::auto_ptr< " << type << " > r (" << endl + << "dynamic_cast< " << type << "* > (tmp.get ()));" + << endl + << "if (r.get ())" << endl + << "tmp.release ();" + << "else" << endl + << "throw ::xsd::cxx::tree::not_derived< " << char_type << + " > ();" + << endl; + } + else + { + os << "if (n.name () == " << strlit (e.name ()) << " &&" << endl + << "n.namespace_ () == " << strlit (e.namespace_().name ()) << ")" + << "{"; + + if (fund) + { + os << "::std::auto_ptr< " << type << " > r (" << endl + << "new " << type << " (" << endl + << "::xsd::cxx::tree::traits< " << type << ", " << + char_type; + + if (t.is_a<SemanticGraph::Fundamental::Double> ()) + os << ", ::xsd::cxx::tree::schema_type::double_"; + else if (t.is_a<SemanticGraph::Fundamental::Decimal> ()) + os << ", ::xsd::cxx::tree::schema_type::decimal"; + + os << " >::create (" << endl + << "e, f, 0)));"; + } + else + { + os << "::std::auto_ptr< " << type << " > r (" << endl + << "::xsd::cxx::tree::traits< " << type << ", " << + char_type << " >::create (" << endl + << "e, f, 0));"; + } + } + + os << "return r;" + << "}" + << "throw ::xsd::cxx::tree::unexpected_element < " << + char_type << " > (" << endl + << "n.name ()," << endl + << "n.namespace_ ()," << endl + << strlit (e.name ()) << "," << endl + << strlit (e.namespace_().name ()) << ");" + << "}"; + + + // dom::auto_ptr<DOMDocument> + // + os << "::std::auto_ptr< " << type << " >" << endl + << name << " (" << dom_auto_ptr << "< " << xerces_ns << + "::DOMDocument >& d," << endl + << flags_type << " f," << endl + << "const " << properties_type << "&)" + << "{" + << dom_auto_ptr << "< " << xerces_ns << + "::DOMDocument > c (" << endl + << "((f & " << flags_type << "::keep_dom) &&" << endl + << "!(f & " << flags_type << "::own_dom))" << endl + << "? static_cast< " << xerces_ns << "::DOMDocument* > (" << + "d->cloneNode (true))" << endl + << ": 0);" + << endl + << xerces_ns << "::DOMDocument& doc (c.get () ? *c : *d);" + << "const " << xerces_ns << "::DOMElement& e (" << + "*doc.getDocumentElement ());" + << endl + << "const " << qname_type << " n (" << endl + << "::xsd::cxx::xml::dom::name< " << char_type << " > (e));" + << endl + << "if (f & " << flags_type << "::keep_dom)" << endl + << "doc.setUserData (" << dom_node_key << "," << endl + << "(c.get () ? &c : &d)," << endl + << "0);" + << endl; + + if (poly) + { + // aCC cannot handle an inline call to type_factory_map_instance. + // + os << "::xsd::cxx::tree::type_factory_map< " << char_type << + " >& tfm (" << endl + << "::xsd::cxx::tree::type_factory_map_instance< 0, " << + char_type << " > ());" + << endl + << "::std::auto_ptr< ::xsd::cxx::tree::type > tmp (" << endl + << "tfm.create (" << endl + << strlit (e.name ()) << "," << endl + << strlit (e.namespace_().name ()) << "," << endl + << "&::xsd::cxx::tree::factory_impl< " << type << " >," << endl + << "true, true, e, n, f, 0));" + << endl + << "if (tmp.get () != 0)" + << "{"; + } + else + { + os << "if (n.name () == " << strlit (e.name ()) << " &&" << endl + << "n.namespace_ () == " << strlit (e.namespace_().name ()) << ")" + << "{"; + + if (fund) + { + os << "::std::auto_ptr< " << type << " > r (" << endl + << "new " << type << " (" << endl + << "::xsd::cxx::tree::traits< " << type << ", " << + char_type; + + if (t.is_a<SemanticGraph::Fundamental::Double> ()) + os << ", ::xsd::cxx::tree::schema_type::double_"; + else if (t.is_a<SemanticGraph::Fundamental::Decimal> ()) + os << ", ::xsd::cxx::tree::schema_type::decimal"; + + os << " >::create (" << endl + << "e, f, 0)));"; + } + else + { + os << "::std::auto_ptr< " << type << " > r (" << endl + << "::xsd::cxx::tree::traits< " << type << ", " << + char_type << " >::create (" << endl + << "e, f, 0));"; + } + } + + if (poly) + { + os << endl + << "::std::auto_ptr< " << type << " > r (" << endl + << "dynamic_cast< " << type << "* > (tmp.get ()));" + << endl + << "if (r.get ())" << endl + << "tmp.release ();" + << "else" << endl + << "throw ::xsd::cxx::tree::not_derived< " << char_type << + " > ();" + << endl; + } + + os << "return r;" + << "}" + << "throw ::xsd::cxx::tree::unexpected_element < " << + char_type << " > (" << endl + << "n.name ()," << endl + << "n.namespace_ ()," << endl + << strlit (e.name ()) << "," << endl + << strlit (e.namespace_().name ()) << ");" + << "}"; + } + + private: + String + type_name (Type& e) + { + std::wostringstream o; + + MemberTypeName type (*this, o); + type.dispatch (e.type ()); + + return o.str (); + } + }; + } + + Void + generate_parser_source (Context& ctx, + UnsignedLong first, + UnsignedLong last) + { + ctx.os << "#include <istream>" << endl + << "#include <xsd/cxx/xml/sax/std-input-source.hxx>" << endl + << "#include <xsd/cxx/tree/error-handler.hxx>" << endl + << endl; + + Traversal::Schema schema; + Traversal::Sources sources; + Traversal::Names names_ns, names; + Namespace ns (ctx, first, last); + ElementFunction element (ctx); + + schema >> sources >> schema; + schema >> names_ns >> ns >> names >> element; + + schema.dispatch (ctx.schema_root); + } + } +} diff --git a/xsd/xsd/cxx/tree/parser-source.hxx b/xsd/xsd/cxx/tree/parser-source.hxx new file mode 100644 index 0000000..2a85571 --- /dev/null +++ b/xsd/xsd/cxx/tree/parser-source.hxx @@ -0,0 +1,20 @@ +// file : xsd/cxx/tree/parser-source.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef CXX_TREE_PARSER_SOURCE_HXX +#define CXX_TREE_PARSER_SOURCE_HXX + +#include <cxx/tree/elements.hxx> + +namespace CXX +{ + namespace Tree + { + Void + generate_parser_source (Context&, UnsignedLong first, UnsignedLong last); + } +} + +#endif // CXX_TREE_PARSER_SOURCE_HXX diff --git a/xsd/xsd/cxx/tree/polymorphism-processor.cxx b/xsd/xsd/cxx/tree/polymorphism-processor.cxx new file mode 100644 index 0000000..0763f0f --- /dev/null +++ b/xsd/xsd/cxx/tree/polymorphism-processor.cxx @@ -0,0 +1,791 @@ +// file : xsde/cxx/tree/polymorphism-processor.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <cxx/tree/elements.hxx> +#include <cxx/tree/polymorphism-processor.hxx> + +#include <xsd-frontend/semantic-graph.hxx> +#include <xsd-frontend/traversal.hxx> + +#include <cult/containers/set.hxx> + +#include <iostream> + +using std::wcerr; + +namespace CXX +{ + namespace Tree + { + namespace + { + struct TypeSet + { + template <typename I> + TypeSet (I begin, I end) + { + for (; begin != end; ++begin) + insert (*begin); + } + + Void + insert (String const& name) + { + Size p (name.rfind ('#')); + + if (p == String::npos) + unames_.insert (name); + else + qnames_.insert (name); + } + + Boolean + find (SemanticGraph::Type& t) + { + if (!unames_.empty ()) + { + if (unames_.find (t.name ()) != unames_.end ()) + return true; + } + + if (!qnames_.empty ()) + { + if (qnames_.find (t.scope ().name () + L"#" + t.name ()) != + qnames_.end ()) + return true; + } + + return false; + } + + private: + typedef Cult::Containers::Set<String> StringSet; + + StringSet unames_; + StringSet qnames_; + }; + + + // + // + struct Type: Traversal::Type, + Traversal::Complex + { + Type (TypeSet& poly_types) + : poly_types_ (poly_types) + { + } + + virtual Void + traverse (SemanticGraph::Type& t) + { + SemanticGraph::Context& ctx (t.context ()); + + if (!ctx.count ("polymorphic")) + ctx.set ("polymorphic", poly_types_.find (t)); + } + + virtual Void + traverse (SemanticGraph::Complex& c) + { + SemanticGraph::Context& ctx (c.context ()); + + if (!ctx.count ("polymorphic")) + { + // First check our base. + // + Boolean pb (false); + if (c.inherits_p ()) + { + SemanticGraph::Type& b (c.inherits ().base ()); + + if (!b.context ().count ("polymorphic")) + dispatch (b); + + pb = b.context ().get<Boolean> ("polymorphic"); + } + + ctx.set ("polymorphic", pb || poly_types_.find (c)); + } + } + + private: + TypeSet& poly_types_; + }; + + struct FundType: Traversal::AnyType, + Traversal::AnySimpleType, + + Traversal::Fundamental::Byte, + Traversal::Fundamental::UnsignedByte, + Traversal::Fundamental::Short, + Traversal::Fundamental::UnsignedShort, + Traversal::Fundamental::Int, + Traversal::Fundamental::UnsignedInt, + Traversal::Fundamental::Long, + Traversal::Fundamental::UnsignedLong, + Traversal::Fundamental::Integer, + Traversal::Fundamental::NonPositiveInteger, + Traversal::Fundamental::NonNegativeInteger, + Traversal::Fundamental::PositiveInteger, + Traversal::Fundamental::NegativeInteger, + + Traversal::Fundamental::Boolean, + + Traversal::Fundamental::Float, + Traversal::Fundamental::Double, + Traversal::Fundamental::Decimal, + + Traversal::Fundamental::String, + Traversal::Fundamental::NormalizedString, + Traversal::Fundamental::Token, + Traversal::Fundamental::Name, + Traversal::Fundamental::NameToken, + Traversal::Fundamental::NameTokens, + Traversal::Fundamental::NCName, + Traversal::Fundamental::Language, + + Traversal::Fundamental::QName, + + Traversal::Fundamental::Id, + Traversal::Fundamental::IdRef, + Traversal::Fundamental::IdRefs, + + Traversal::Fundamental::AnyURI, + + Traversal::Fundamental::Base64Binary, + Traversal::Fundamental::HexBinary, + + Traversal::Fundamental::Date, + Traversal::Fundamental::DateTime, + Traversal::Fundamental::Duration, + Traversal::Fundamental::Day, + Traversal::Fundamental::Month, + Traversal::Fundamental::MonthDay, + Traversal::Fundamental::Year, + Traversal::Fundamental::YearMonth, + Traversal::Fundamental::Time, + + Traversal::Fundamental::Entity, + Traversal::Fundamental::Entities + { + FundType (TypeSet& poly_types, Boolean& valid) + : poly_types_ (poly_types), valid_ (valid) + { + } + + Void + check (SemanticGraph::Type& t, Boolean fund) + { + SemanticGraph::Context& ctx (t.context ()); + + if (poly_types_.find (t)) + { + if (!fund) + ctx.set ("polymorphic", true); + else + { + wcerr << "error: built-in type '" << t.name () << "' cannot " + << "be polymorphic because it is mapped to a fundamental " + << "C++ type" + << endl; + + valid_ = false; + } + } + else + ctx.set ("polymorphic", false); + } + + // anyType & anySimpleType. + // + virtual Void + traverse (SemanticGraph::AnyType& t) + { + check (t, false); + } + + virtual Void + traverse (SemanticGraph::AnySimpleType& t) + { + check (t, false); + } + + // Boolean. + // + virtual Void + traverse (SemanticGraph::Fundamental::Boolean& t) + { + check (t, true); + } + + // Integral types. + // + virtual Void + traverse (SemanticGraph::Fundamental::Byte& t) + { + check (t, true); + } + + virtual Void + traverse (SemanticGraph::Fundamental::UnsignedByte& t) + { + check (t, true); + } + + virtual Void + traverse (SemanticGraph::Fundamental::Short& t) + { + check (t, true); + } + + virtual Void + traverse (SemanticGraph::Fundamental::UnsignedShort& t) + { + check (t, true); + } + + virtual Void + traverse (SemanticGraph::Fundamental::Int& t) + { + check (t, true); + } + + virtual Void + traverse (SemanticGraph::Fundamental::UnsignedInt& t) + { + check (t, true); + } + + virtual Void + traverse (SemanticGraph::Fundamental::Long& t) + { + check (t, true); + } + + virtual Void + traverse (SemanticGraph::Fundamental::UnsignedLong& t) + { + check (t, true); + } + + virtual Void + traverse (SemanticGraph::Fundamental::Integer& t) + { + check (t, true); + } + + virtual Void + traverse (SemanticGraph::Fundamental::NonPositiveInteger& t) + { + check (t, true); + } + + virtual Void + traverse (SemanticGraph::Fundamental::NonNegativeInteger& t) + { + check (t, true); + } + + virtual Void + traverse (SemanticGraph::Fundamental::PositiveInteger& t) + { + check (t, true); + } + + virtual Void + traverse (SemanticGraph::Fundamental::NegativeInteger& t) + { + check (t, true); + } + + // Floats. + // + virtual Void + traverse (SemanticGraph::Fundamental::Float& t) + { + check (t, true); + } + + virtual Void + traverse (SemanticGraph::Fundamental::Double& t) + { + check (t, true); + } + + virtual Void + traverse (SemanticGraph::Fundamental::Decimal& t) + { + check (t, true); + } + + // Strings. + // + virtual Void + traverse (SemanticGraph::Fundamental::String& t) + { + check (t, false); + } + + virtual Void + traverse (SemanticGraph::Fundamental::NormalizedString& t) + { + check (t, false); + } + + virtual Void + traverse (SemanticGraph::Fundamental::Token& t) + { + check (t, false); + } + + virtual Void + traverse (SemanticGraph::Fundamental::NameToken& t) + { + check (t, false); + } + + virtual Void + traverse (SemanticGraph::Fundamental::NameTokens& t) + { + check (t, false); + } + + virtual Void + traverse (SemanticGraph::Fundamental::Name& t) + { + check (t, false); + } + + virtual Void + traverse (SemanticGraph::Fundamental::NCName& t) + { + check (t, false); + } + + virtual Void + traverse (SemanticGraph::Fundamental::Language& t) + { + check (t, false); + } + + + // Qualified name. + // + virtual Void + traverse (SemanticGraph::Fundamental::QName& t) + { + check (t, false); + } + + + // ID/IDREF. + // + virtual Void + traverse (SemanticGraph::Fundamental::Id& t) + { + check (t, false); + } + + virtual Void + traverse (SemanticGraph::Fundamental::IdRef& t) + { + check (t, false); + } + + virtual Void + traverse (SemanticGraph::Fundamental::IdRefs& t) + { + check (t, false); + } + + // URI. + // + virtual Void + traverse (SemanticGraph::Fundamental::AnyURI& t) + { + check (t, false); + } + + // Binary. + // + virtual Void + traverse (SemanticGraph::Fundamental::Base64Binary& t) + { + check (t, false); + } + + virtual Void + traverse (SemanticGraph::Fundamental::HexBinary& t) + { + check (t, false); + } + + + // Date/time. + // + virtual Void + traverse (SemanticGraph::Fundamental::Date& t) + { + check (t, false); + } + + virtual Void + traverse (SemanticGraph::Fundamental::DateTime& t) + { + check (t, false); + } + + virtual Void + traverse (SemanticGraph::Fundamental::Duration& t) + { + check (t, false); + } + + virtual Void + traverse (SemanticGraph::Fundamental::Day& t) + { + check (t, false); + } + + virtual Void + traverse (SemanticGraph::Fundamental::Month& t) + { + check (t, false); + } + + virtual Void + traverse (SemanticGraph::Fundamental::MonthDay& t) + { + check (t, false); + } + + virtual Void + traverse (SemanticGraph::Fundamental::Year& t) + { + check (t, false); + } + + virtual Void + traverse (SemanticGraph::Fundamental::YearMonth& t) + { + check (t, false); + } + + virtual Void + traverse (SemanticGraph::Fundamental::Time& t) + { + check (t, false); + } + + // Entity. + // + virtual Void + traverse (SemanticGraph::Fundamental::Entity& t) + { + check (t, false); + } + + virtual Void + traverse (SemanticGraph::Fundamental::Entities& t) + { + check (t, false); + } + + private: + TypeSet& poly_types_; + Boolean& valid_; + }; + + struct GlobalElement: Traversal::Element + { + GlobalElement (TypeSet& poly_types, + Boolean& valid, + const WarningSet& disabled_warnings) + : poly_types_ (poly_types), valid_ (valid), warning_ (true) + { + if (disabled_warnings.find ("all") != disabled_warnings.end () || + disabled_warnings.find ("T005") != disabled_warnings.end ()) + warning_ = false; + } + + virtual Void + traverse (Type& e) + { + using SemanticGraph::Schema; + + if (!e.substitutes_p ()) + return; + + // If we are a substitution for some element, then mark + // that element's type as polymorphic. + // + Type& r (e.substitutes ().root ()); + SemanticGraph::Type& rt (r.type ()); + SemanticGraph::Context& ctx (rt.context ()); + + // We may need to override the previous value. + // + if (ctx.count ("polymorphic") && ctx.get<Boolean> ("polymorphic")) + return; + + // Built-in types that are mapped to fundamental types cannot + // be declared polymorphic. + // + Boolean fund (false); + IsFundamentalType test (fund); + test.dispatch (rt); + + if (fund) + { + wcerr << r.file () << ":" << r.line () << ":" << r.column () + << ": error: built-in type '" << rt.name () << "' " + << "is mapped to a fundamental C++ type and is expected " + << "to be polymorphic" << endl; + + wcerr << e.file () << ":" << e.line () << ":" << e.column () + << ": info: because type '" << rt.name () << "' is " + << "used in a substitution group declared here" << endl; + + valid_ = false; + return; + } + + ctx.set ("polymorphic", true); + + if (!warning_) + return; + + Schema& es (dynamic_cast<Schema&> (e.scope ().scope ())); + Schema& rts (dynamic_cast<Schema&> (rt.scope ().scope ())); + + // If the root type and this element are in different schemas + // and the root type is not explicitly marked as polymorphic, + // then issue a warning. + // + if (&es != &rts && !sources_p (es, rts) && !poly_types_.find (rt)) + { + wcerr << rt.file () << ":" << rt.line () << ":" << rt.column () + << ": warning T005: assuming type '" << rt.name () << "' " + << "is polymorphic" << endl; + + wcerr << e.file () << ":" << e.line () << ":" << e.column () + << ": info: because type '" << rt.name () << "' is " + << "used in a substitution group declared here" << endl; + + wcerr << rt.file () << ":" << rt.line () << ":" << rt.column () + << ": info: use --polymorphic-type to indicate this type " + << "is polymorphic when compiling schemas that " + << "reference it" << endl; + } + } + + private: + // Return true if root sources s. + // + Boolean + sources_p (SemanticGraph::Schema& root, SemanticGraph::Schema& s) + { + using SemanticGraph::Schema; + using SemanticGraph::Sources; + + for (Schema::UsesIterator i (root.uses_begin ()); + i != root.uses_end (); ++i) + { + if (i->is_a<Sources> ()) + { + if (&i->schema () == &s || sources_p (i->schema (), s)) + return true; + } + } + + return false; + } + + private: + TypeSet& poly_types_; + Boolean& valid_; + Boolean warning_; + }; + + // Go into sourced/included/imported schemas while making sure + // we don't process the same stuff more than once. + // + struct Uses: Traversal::Sources, + Traversal::Includes, + Traversal::Imports + { + Uses (Char const* seen_key) + : seen_key_ (seen_key) + { + } + + virtual Void + traverse (SemanticGraph::Sources& sr) + { + SemanticGraph::Schema& s (sr.schema ()); + + if (!s.context ().count (seen_key_)) + { + s.context ().set (seen_key_, true); + Traversal::Sources::traverse (sr); + } + } + + virtual Void + traverse (SemanticGraph::Includes& i) + { + SemanticGraph::Schema& s (i.schema ()); + + if (!s.context ().count (seen_key_)) + { + s.context ().set (seen_key_, true); + Traversal::Includes::traverse (i); + } + } + + virtual Void + traverse (SemanticGraph::Imports& i) + { + SemanticGraph::Schema& s (i.schema ()); + + if (!s.context ().count (seen_key_)) + { + s.context ().set (seen_key_, true); + Traversal::Imports::traverse (i); + } + } + + private: + Char const* seen_key_; + }; + + Char const* pass_one_key = "cxx-tree-polymorphism-processor-seen-one"; + Char const* pass_two_key = "cxx-tree-polymorphism-processor-seen-two"; + + Boolean + process_impl (CLI::Options const& ops, + SemanticGraph::Schema& tu, + SemanticGraph::Path const&, + const WarningSet& disabled_warnings) + { + Boolean valid (true); + + // Prepare a set of polymorphic types. + // + + TypeSet poly_types (ops.value<CLI::polymorphic_type> ().begin (), + ops.value<CLI::polymorphic_type> ().end ()); + + // Root schema in the file-per-type mode is just a bunch + // of includes without a namespace. + // + SemanticGraph::Schema::NamesIterator i (tu.names_begin ()); + + if (i != tu.names_end () && + i->named ().name () == L"http://www.w3.org/2001/XMLSchema") + { + // XML Schema namespace. + // + Traversal::Schema schema; + + Traversal::Names schema_names; + Traversal::Namespace ns; + Traversal::Names ns_names; + FundType fund_type (poly_types, valid); + + schema >> schema_names >> ns >> ns_names >> fund_type; + + schema.dispatch (tu); + } + else + { + // First handle fundamental types. + // + { + Traversal::Schema schema; + Traversal::Implies implies; + Traversal::Schema xs_schema; + + schema >> implies >> xs_schema; + + Traversal::Names xs_schema_names; + Traversal::Namespace ns; + Traversal::Names ns_names; + FundType fund_type (poly_types, valid); + + xs_schema >> xs_schema_names >> ns >> ns_names >> fund_type; + + schema.dispatch (tu); + } + + // Note that we check first if this schema has already been + // processed which may happen in the file-per-type compilation + // mode. + // + if (!tu.context ().count (pass_two_key)) + { + // Pass one - check substitution groups. + // + if (valid) + { + Traversal::Schema schema; + Uses uses (pass_one_key); + + schema >> uses >> schema; + + Traversal::Names schema_names; + Traversal::Namespace ns; + Traversal::Names ns_names; + GlobalElement element (poly_types, valid, disabled_warnings); + + schema >> schema_names >> ns >> ns_names >> element; + + // Some twisted schemas do recusive self-inclusion. + // + tu.context ().set (pass_one_key, true); + + schema.dispatch (tu); + } + + // Pass two - process types. + // + if (valid) + { + Traversal::Schema schema; + Uses uses (pass_two_key); + + schema >> uses >> schema; + + Traversal::Names schema_names; + Traversal::Namespace ns; + Traversal::Names ns_names; + Type type (poly_types); + + schema >> schema_names >> ns >> ns_names >> type; + + // Some twisted schemas do recusive self-inclusion. + // + tu.context ().set (pass_two_key, true); + + schema.dispatch (tu); + } + } + } + + return valid; + } + } + + Boolean PolymorphismProcessor:: + process (CLI::Options const& ops, + SemanticGraph::Schema& tu, + SemanticGraph::Path const& file, + const WarningSet& disabled_warnings) + { + return process_impl (ops, tu, file, disabled_warnings); + } + } +} diff --git a/xsd/xsd/cxx/tree/polymorphism-processor.hxx b/xsd/xsd/cxx/tree/polymorphism-processor.hxx new file mode 100644 index 0000000..3fbeca8 --- /dev/null +++ b/xsd/xsd/cxx/tree/polymorphism-processor.hxx @@ -0,0 +1,35 @@ +// file : xsde/cxx/tree/polymorphism-processor.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef CXX_TREE_POLYMORPHISM_PROCESSOR_HXX +#define CXX_TREE_POLYMORPHISM_PROCESSOR_HXX + +#include <cult/types.hxx> + +#include <xsd-frontend/semantic-graph.hxx> + +#include <cxx/tree/cli.hxx> + +#include <xsd.hxx> + +namespace CXX +{ + namespace Tree + { + using namespace Cult::Types; + + class PolymorphismProcessor + { + public: + Boolean + process (CLI::Options const& options, + XSDFrontend::SemanticGraph::Schema&, + XSDFrontend::SemanticGraph::Path const& file, + const WarningSet& disabled_warnings); + }; + } +} + +#endif // CXX_TREE_POLYMORPHISM_PROCESSOR_HXX diff --git a/xsd/xsd/cxx/tree/serialization-header.cxx b/xsd/xsd/cxx/tree/serialization-header.cxx new file mode 100644 index 0000000..d024a38 --- /dev/null +++ b/xsd/xsd/cxx/tree/serialization-header.cxx @@ -0,0 +1,581 @@ +// file : xsd/cxx/tree/serialization-header.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <cxx/tree/serialization-header.hxx> + +#include <xsd-frontend/semantic-graph.hxx> +#include <xsd-frontend/traversal.hxx> + +namespace CXX +{ + namespace Tree + { + namespace + { + struct List: Traversal::List, Context + { + List (Context& c) + : Context (c) + { + } + + virtual Void + traverse (Type& l) + { + String name (ename (l)); + + // If renamed name is empty then we do not need to generate + // anything for this type. + // + if (renamed_type (l, name) && !name) + return; + + // operator<< (xercesc::DOMElement) + // + os << inst_exp + << "void" << endl + << "operator<< (" << xerces_ns << "::DOMElement&, " << + "const " << name << "&);" + << endl; + + // operator<< (xercesc::DOMAttr) + // + os << inst_exp + << "void" << endl + << "operator<< (" << xerces_ns << "::DOMAttr&, " << + "const " << name << "&);" + << endl; + + // operator<< (list_stream) + // + os << inst_exp + << "void" << endl + << "operator<< (" << list_stream_type << "&," << endl + << "const " << name << "&);" + << endl; + + } + }; + + + struct Union: Traversal::Union, Context + { + Union (Context& c) + : Context (c) + { + } + + virtual Void + traverse (Type& u) + { + String name (ename (u)); + + // If renamed name is empty then we do not need to generate + // anything for this type. + // + if (renamed_type (u, name) && !name) + return; + + // operator<< (xercesc::DOMElement) + // + os << inst_exp + << "void" << endl + << "operator<< (" << xerces_ns << "::DOMElement&, " << + "const " << name << "&);" + << endl; + + // operator<< (xercesc::DOMAttr) + // + os << inst_exp + << "void" << endl + << "operator<< (" << xerces_ns << "::DOMAttr&, " << + "const " << name << "&);" + << endl; + + // operator<< (list_stream) + // + os << inst_exp + << "void" << endl + << "operator<< (" << list_stream_type << "&," << endl + << "const " << name << "&);" + << endl; + } + }; + + + struct Enumeration: Traversal::Enumeration, Context + { + Enumeration (Context& c) + : Context (c) + { + } + + virtual Void + traverse (Type& e) + { + String name (ename (e)); + + // If renamed name is empty then we do not need to generate + // anything for this type. + // + if (renamed_type (e, name) && !name) + return; + + // operator<< (xercesc::DOMElement) + // + os << inst_exp + << "void" << endl + << "operator<< (" << xerces_ns << "::DOMElement&, " << + "const " << name << "&);" + << endl; + + // operator<< (xercesc::DOMAttr) + // + os << inst_exp + << "void" << endl + << "operator<< (" << xerces_ns << "::DOMAttr&, " << + "const " << name << "&);" + << endl; + + // operator<< (list_stream) + // + os << inst_exp + << "void" << endl + << "operator<< (" << list_stream_type << "&," << endl + << "const " << name << "&);" + << endl; + } + }; + + struct Complex: Traversal::Complex, Context + { + Complex (Context& c) + : Context (c) + { + } + + virtual Void + traverse (Type& c) + { + String name (ename (c)); + + // If renamed name is empty then we do not need to generate + // anything for this type. + // + if (renamed_type (c, name) && !name) + return; + + // operator<< (xercesc::DOMElement) + // + os << inst_exp + << "void" << endl + << "operator<< (" << xerces_ns << "::DOMElement&, " << + "const " << name << "&);" + << endl; + + Boolean simple (true); + { + IsSimpleType t (simple); + t.dispatch (c); + } + + if (simple) + { + // operator<< (xercesc::DOMAttr) + // + os << inst_exp + << "void" << endl + << "operator<< (" << xerces_ns << "::DOMAttr&, " << + "const " << name << "&);" + << endl; + + // operator<< (list_stream) + // + os << inst_exp + << "void" << endl + << "operator<< (" << list_stream_type << "&," << endl + << "const " << name << "&);" + << endl; + } + } + }; + + struct ElementType: Traversal::Element, + GlobalElementBase, + Context + { + ElementType (Context& c) + : GlobalElementBase (c), Context (c) + { + } + + virtual Void + traverse (Type& e) + { + if (doc_root_p (e)) + { + // operator<< (xercesc::DOMElement) + // + os << inst_exp + << "void" << endl + << "operator<< (" << xerces_ns << "::DOMElement&, " << + "const " << ename (e) << "&);" + << endl; + } + } + }; + + struct ElementFunction: Traversal::Element, + GlobalElementBase, + Context + { + ElementFunction (Context& c) + : GlobalElementBase (c), Context (c) + { + } + + + virtual Void + traverse (Type& e) + { + if (!doc_root_p (e)) + return; + + String const& name (eserializer (e)); + String const& error_handler (error_handler_type); + String const& namespace_infomap (namespace_infomap_type); + + if (doxygen) + { + os << "/**" << endl + << " * @name Serialization functions for the %" << + comment (e.name ()) << " document root." << endl; + + if (e.annotated_p ()) + { + os << " *" << endl; + write_annotation (e.annotation ()); + } + + os << " */" << endl + << "//@{" << endl + << endl; + } + + if (!doxygen) + { + os << "// Serialize to std::ostream." << endl + << "//" << endl + << endl; + } + + if (doxygen) + { + os << "/**" << endl + << " * @brief Serialize to a standard output stream." << endl + << " *" << endl + << " * @param os A standrad output stream." << endl + << " * @param x An object model to serialize." << endl + << " * @param m A namespace information map." << endl + << " * @param e A character encoding to produce XML in." << endl + << " * @param f Serialization flags." << endl + << " *" << endl + << " * This function uses exceptions to report " << + "serialization errors." << endl + << " */" << endl; + } + + os << inst_exp + << "void" << endl + << name << " (::std::ostream& os," << endl + << "const " << type_name (e) << "& x, " << endl + << "const " << namespace_infomap << "& m = " << + namespace_infomap << " ()," << endl + << "const " << string_type << "& e = " << L << "\"UTF-8\"," << endl + << flags_type << " f = 0);" + << endl; + + if (doxygen) + { + os << "/**" << endl + << " * @brief Serialize to a standard output stream with an " << + "error handler." << endl + << " *" << endl + << " * @param os A standrad output stream." << endl + << " * @param x An object model to serialize." << endl + << " * @param eh An error handler." << endl + << " * @param m A namespace information map." << endl + << " * @param e A character encoding to produce XML in." << endl + << " * @param f Serialization flags." << endl + << " *" << endl + << " * This function reports serialization errors by " << + "calling the error" << endl + << " * handler." << endl + << " */" << endl; + } + + os << inst_exp + << "void" << endl + << name << " (::std::ostream& os," << endl + << "const " << type_name (e) << "& x, " << endl + << error_handler << "& eh," << endl + << "const " << namespace_infomap << "& m = " << + namespace_infomap << " ()," << endl + << "const " << string_type << "& e = " << L << "\"UTF-8\"," << endl + << flags_type << " f = 0);" + << endl; + + if (doxygen) + { + os << "/**" << endl + << " * @brief Serialize to a standard output stream with a " << + "Xerces-C++ DOM" << endl + << " * error handler." << endl + << " *" << endl + << " * @param os A standrad output stream." << endl + << " * @param x An object model to serialize." << endl + << " * @param eh A Xerces-C++ DOM error handler." << endl + << " * @param m A namespace information map." << endl + << " * @param e A character encoding to produce XML in." << endl + << " * @param f Serialization flags." << endl + << " *" << endl + << " * This function reports serialization errors by " << + "calling the error" << endl + << " * handler." << endl + << " */" << endl; + } + + os << inst_exp + << "void" << endl + << name << " (::std::ostream& os," << endl + << "const " << type_name (e) << "& x, " << endl + << xerces_ns << "::DOMErrorHandler& eh," << endl + << "const " << namespace_infomap << "& m = " << + namespace_infomap << " ()," << endl + << "const " << string_type << "& e = " << L << "\"UTF-8\"," << endl + << flags_type << " f = 0);" + << endl; + + if (!doxygen) + { + os << "// Serialize to xercesc::XMLFormatTarget." << endl + << "//" << endl + << endl; + } + + if (doxygen) + { + os << "/**" << endl + << " * @brief Serialize to a Xerces-C++ XML format target." << endl + << " *" << endl + << " * @param ft A Xerces-C++ XML format target." << endl + << " * @param x An object model to serialize." << endl + << " * @param m A namespace information map." << endl + << " * @param e A character encoding to produce XML in." << endl + << " * @param f Serialization flags." << endl + << " *" << endl + << " * This function uses exceptions to report " << + "serialization errors." << endl + << " */" << endl; + } + + os << inst_exp + << "void" << endl + << name << " (" << xerces_ns << "::XMLFormatTarget& ft," << endl + << "const " << type_name (e) << "& x, " << endl + << "const " << namespace_infomap << "& m = " << + namespace_infomap << " ()," << endl + << "const " << string_type << "& e = " << L << "\"UTF-8\"," << endl + << flags_type << " f = 0);" + << endl; + + if (doxygen) + { + os << "/**" << endl + << " * @brief Serialize to a Xerces-C++ XML format target " << + "with an error" << endl + << " * handler." << endl + << " *" << endl + << " * @param ft A Xerces-C++ XML format target." << endl + << " * @param x An object model to serialize." << endl + << " * @param eh An error handler." << endl + << " * @param m A namespace information map." << endl + << " * @param e A character encoding to produce XML in." << endl + << " * @param f Serialization flags." << endl + << " *" << endl + << " * This function reports serialization errors by " << + "calling the error" << endl + << " * handler." << endl + << " */" << endl; + } + + os << inst_exp + << "void" << endl + << name << " (" << xerces_ns << "::XMLFormatTarget& ft," << endl + << "const " << type_name (e) << "& x, " << endl + << error_handler << "& eh," << endl + << "const " << namespace_infomap << "& m = " << + namespace_infomap << " ()," << endl + << "const " << string_type << "& e = " << L << "\"UTF-8\"," << endl + << flags_type << " f = 0);" + << endl; + + if (doxygen) + { + os << "/**" << endl + << " * @brief Serialize to a Xerces-C++ XML format target " << + "with a" << endl + << " * Xerces-C++ DOM error handler." << endl + << " *" << endl + << " * @param ft A Xerces-C++ XML format target." << endl + << " * @param x An object model to serialize." << endl + << " * @param eh A Xerces-C++ DOM error handler." << endl + << " * @param m A namespace information map." << endl + << " * @param e A character encoding to produce XML in." << endl + << " * @param f Serialization flags." << endl + << " *" << endl + << " * This function reports serialization errors by " << + "calling the error" << endl + << " * handler." << endl + << " */" << endl; + } + + os << inst_exp + << "void" << endl + << name << " (" << xerces_ns << "::XMLFormatTarget& ft," << endl + << "const " << type_name (e) << "& x, " << endl + << xerces_ns << "::DOMErrorHandler& eh," << endl + << "const " << namespace_infomap << "& m = " << + namespace_infomap << " ()," << endl + << "const " << string_type << "& e = " << L << "\"UTF-8\"," << endl + << flags_type << " f = 0);" + << endl; + + if (!doxygen) + { + os << "// Serialize to an existing xercesc::DOMDocument." << endl + << "//" << endl + << endl; + } + + if (doxygen) + { + os << "/**" << endl + << " * @brief Serialize to an existing Xerces-C++ DOM document." << endl + << " *" << endl + << " * @param d A Xerces-C++ DOM document." << endl + << " * @param x An object model to serialize." << endl + << " * @param f Serialization flags." << endl + << " *" << endl + << " * Note that it is your responsibility to create the " << + "DOM document" << endl + << " * with the correct root element as well as set the " << + "necessary" << endl + << " * namespace mapping attributes." << endl + << " */" << endl; + } + os << inst_exp + << "void" << endl + << name << " (" << xerces_ns << "::DOMDocument& d," << endl + << "const " << type_name (e) << "& x," << endl + << flags_type << " f = 0);" + << endl; + + if (!doxygen) + { + os << "// Serialize to a new xercesc::DOMDocument." << endl + << "//" << endl + << endl; + } + + if (doxygen) + { + os << "/**" << endl + << " * @brief Serialize to a new Xerces-C++ DOM document." << endl + << " *" << endl + << " * @param x An object model to serialize." << endl + << " * @param m A namespace information map." << endl + << " * @param f Serialization flags." << endl + << " * @return A pointer to the new Xerces-C++ DOM document." << endl + << " */" << endl; + } + + os << inst_exp + << dom_auto_ptr << "< " << xerces_ns << + "::DOMDocument >" << endl + << name << " (const " << type_name (e) << "& x, " << endl + << "const " << namespace_infomap << "& m = " << + namespace_infomap << " ()," << endl + << flags_type << " f = 0);" + << endl; + + if (doxygen) + { + os << "//@}" << endl + << endl; + } + } + + private: + String + type_name (Type& e) + { + std::wostringstream o; + + MemberTypeName type (*this, o); + type.dispatch (e.type ()); + + return o.str (); + } + }; + + } + + Void + generate_serialization_header (Context& ctx) + { + Boolean elemen_type (ctx.options.value<CLI::generate_element_type> ()); + + if (!elemen_type) + ctx.os << "#include <iosfwd>" << endl + << endl + << "#include <xercesc/dom/DOMDocument.hpp>" << endl + << "#include <xercesc/dom/DOMErrorHandler.hpp>" << endl + << "#include <xercesc/framework/XMLFormatter.hpp>" << endl + << endl + << "#include <xsd/cxx/xml/dom/auto-ptr.hxx>" << endl + << endl; + + Traversal::Schema schema; + + Traversal::Sources sources; + Traversal::Names names_ns, names; + + Namespace ns (ctx); + + List list (ctx); + Union union_ (ctx); + Complex complex (ctx); + Enumeration enumeration (ctx); + ElementType element_type (ctx); + ElementFunction element_function (ctx); + + schema >> sources >> schema; + schema >> names_ns >> ns >> names; + + names >> list; + names >> union_; + names >> complex; + names >> enumeration; + + if (elemen_type) + names >> element_type; + else + names >> element_function; + + schema.dispatch (ctx.schema_root); + } + } +} diff --git a/xsd/xsd/cxx/tree/serialization-header.hxx b/xsd/xsd/cxx/tree/serialization-header.hxx new file mode 100644 index 0000000..86c6b6a --- /dev/null +++ b/xsd/xsd/cxx/tree/serialization-header.hxx @@ -0,0 +1,20 @@ +// file : xsd/cxx/tree/serialization-header.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef CXX_TREE_SERIALIZATION_HEADER_HXX +#define CXX_TREE_SERIALIZATION_HEADER_HXX + +#include <cxx/tree/elements.hxx> + +namespace CXX +{ + namespace Tree + { + Void + generate_serialization_header (Context&); + } +} + +#endif // CXX_TREE_SERIALIZATION_HEADER_HXX diff --git a/xsd/xsd/cxx/tree/serialization-source.cxx b/xsd/xsd/cxx/tree/serialization-source.cxx new file mode 100644 index 0000000..40ae031 --- /dev/null +++ b/xsd/xsd/cxx/tree/serialization-source.cxx @@ -0,0 +1,1336 @@ +// file : xsd/cxx/tree/serialization-source.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <cxx/tree/serialization-source.hxx> + +#include <xsd-frontend/semantic-graph.hxx> +#include <xsd-frontend/traversal.hxx> + +namespace CXX +{ + namespace Tree + { + namespace + { + enum schema_type + { + st_other, + st_double, + st_decimal + }; + + enum schema_type + schema_type (SemanticGraph::Type& t) + { + if (t.is_a<SemanticGraph::Fundamental::Double> ()) + return st_double; + else if (t.is_a<SemanticGraph::Fundamental::Decimal> ()) + return st_decimal; + else + return st_other; + } + + + // + // + struct List: Traversal::List, Context + { + List (Context& c) + : Context (c) + { + } + + virtual Void + traverse (Type& l) + { + String name (ename (l)); + + // If renamed name is empty then we do not need to generate + // anything for this type. + // + if (renamed_type (l, name) && !name) + return; + + SemanticGraph::Type& item_type (l.argumented ().type ()); + String base (L"::xsd::cxx::tree::list< " + + item_type_name (item_type) + L", " + char_type); + + if (item_type.is_a<SemanticGraph::Fundamental::Double> ()) + base += L", ::xsd::cxx::tree::schema_type::double_"; + else if (item_type.is_a<SemanticGraph::Fundamental::Decimal> ()) + base += L", ::xsd::cxx::tree::schema_type::decimal"; + + base += L" >"; + + // operator<< (xercesc::DOMElement) + // + os << "void" << endl + << "operator<< (" << xerces_ns << "::DOMElement& e, " << + "const " << name << "& i)" + << "{" + << "e << static_cast< const " << base << "& > (i);" + << "}"; + + // operator<< (xercesc::DOMAttr) + // + os << "void" << endl + << "operator<< (" << xerces_ns << "::DOMAttr& a, " << + "const " << name << "& i)" + << "{" + << "a << static_cast< const " << base << "& > (i);" + << "}"; + + // operator<< (list_stream) + // + os << "void" << endl + << "operator<< (" << list_stream_type << "& l," << endl + << "const " << name << "& i)" + << "{" + << "l << static_cast< const " << base << "& > (i);" + << "}"; + + // Register with type factory map. + // + if (polymorphic && polymorphic_p (l) && !anonymous_p (l)) + { + // Note that we are using the original type name. + // + String const& name (ename (l)); + + os << "static" << endl + << "const ::xsd::cxx::tree::type_serializer_initializer< 0, " << + char_type << ", " << name << " >" << endl + << "_xsd_" << name << "_type_serializer_init (" << endl + << strlit (l.name ()) << "," << endl + << strlit (xml_ns_name (l)) << ");" + << endl + << endl; + } + } + + private: + String + item_type_name (SemanticGraph::Type& t) + { + std::wostringstream o; + + MemberTypeName type (*this, o); + type.dispatch (t); + + return o.str (); + } + }; + + + struct Union: Traversal::Union, Context + { + Union (Context& c) + : Context (c) + { + } + + virtual Void + traverse (Type& u) + { + String name (ename (u)); + + // If renamed name is empty then we do not need to generate + // anything for this type. + // + if (renamed_type (u, name) && !name) + return; + + String const& base (xs_string_type); + + // operator<< (xercesc::DOMElement) + // + os << "void" << endl + << "operator<< (" << xerces_ns << "::DOMElement& e, " << + "const " << name << "& i)" + << "{" + << "e << static_cast< const " << base << "& > (i);" + << "}"; + + // operator<< (xercesc::DOMAttr) + // + os << "void" << endl + << "operator<< (" << xerces_ns << "::DOMAttr& a, " << + "const " << name << "& i)" + << "{" + << "a << static_cast< const " << base << "& > (i);" + << "}"; + + // operator<< (list_stream) + // + os << "void" << endl + << "operator<< (" << list_stream_type << "& l," << endl + << "const " << name << "& i)" + << "{" + << "l << static_cast< const " << base << "& > (i);" + << "}"; + + // Register with type factory map. + // + if (polymorphic && polymorphic_p (u) && !anonymous_p (u)) + { + // Note that we are using the original type name. + // + String const& name (ename (u)); + + os << "static" << endl + << "const ::xsd::cxx::tree::type_serializer_initializer< 0, " << + char_type << ", " << name << " >" << endl + << "_xsd_" << name << "_type_serializer_init (" << endl + << strlit (u.name ()) << "," << endl + << strlit (xml_ns_name (u)) << ");" + << endl + << endl; + } + } + }; + + + struct Enumeration: Traversal::Enumeration, Context + { + Enumeration (Context& c) + : Context (c), base_ (c) + { + inherits_base_ >> base_; + } + + virtual Void + traverse (Type& e) + { + String name (ename (e)); + + // If renamed name is empty then we do not need to generate + // anything for this type. + // + if (renamed_type (e, name) && !name) + return; + + // operator<< (xercesc::DOMElement) + // + os << "void" << endl + << "operator<< (" << xerces_ns << "::DOMElement& e, " << + "const " << name << "& i)" + << "{" + << "e << static_cast< const "; + + inherits (e, inherits_base_); + + os << "& > (i);" + << "}"; + + + // operator<< (xercesc::DOMAttr) + // + os << "void" << endl + << "operator<< (" << xerces_ns << "::DOMAttr& a, " << + "const " << name << "& i)" + << "{" + << "a << static_cast< const "; + + inherits (e, inherits_base_); + + os << "& > (i);" + << "}"; + + + // operator<< (list_stream) + // + os << "void" << endl + << "operator<< (" << list_stream_type << "& l," << endl + << "const " << name << "& i)" + << "{" + << "l << static_cast< const "; + + inherits (e, inherits_base_); + + os << "& > (i);" + << "}"; + + + // Register with type factory map. + // + if (polymorphic && polymorphic_p (e) && !anonymous_p (e)) + { + // Note that we are using the original type name. + // + String const& name (ename (e)); + + os << "static" << endl + << "const ::xsd::cxx::tree::type_serializer_initializer< 0, " << + char_type << ", " << name << " >" << endl + << "_xsd_" << name << "_type_serializer_init (" << endl + << strlit (e.name ()) << "," << endl + << strlit (xml_ns_name (e)) << ");" + << endl + << endl; + } + } + + private: + Traversal::Inherits inherits_base_; + BaseTypeName base_; + }; + + struct Element: Traversal::Element, Context + { + Element (Context& c, String const& scope_) + : Context (c), scope (scope_) + { + } + + virtual Void + traverse (Type& e) + { + if (skip (e)) + return; + + String const& aname (eaname (e)); + String ns (e.qualified_p () ? e.namespace_ ().name () : ""); + String type (scope + L"::" + etype (e)); + + // Check if we need to handle xsi:type and substitution groups. + // If this element's type is anonymous then we don't need to do + // anything. Note that if the type is anonymous then it can't be + // derived from which makes it impossible to substitute or + // dynamically-type with xsi:type. + // + SemanticGraph::Type& t (e.type ()); + Boolean poly (polymorphic && polymorphic_p (t) && !anonymous_p (t)); + + os << "// " << comment (e.name ()) << endl + << "//" << endl; + + // aCC cannot handle an inline call to type_serializer_map_instance. + // + if (poly) + { + os << "{" + << "::xsd::cxx::tree::type_serializer_map< " << char_type + << " >& tsm (" << endl + << "::xsd::cxx::tree::type_serializer_map_instance< 0, " << + char_type << " > ());" + << endl; + } + + if (max (e) != 1) + { + // sequence + // + os << "for (" << scope << "::" << econst_iterator (e) << endl + << "b (i." << aname << " ().begin ()), " << + "n (i." << aname << " ().end ());" << endl + << "b != n; ++b)" + << "{"; + + if (poly) + { + os << "if (typeid (" << type << ") == typeid (*b))" + << "{" + << xerces_ns << "::DOMElement& s (" << endl + << "::xsd::cxx::xml::dom::create_element (" << endl + << strlit (e.name ()) << "," << endl + << (ns ? strlit (ns) + L",\n" : L"") + << "e));" + << endl + << "s << *b;" + << "}" + << "else" << endl + << "tsm.serialize (" << endl + << strlit (e.name ()) << "," << endl + << strlit (ns) << "," << endl + << (e.global_p () ? "true" : "false") << ", " << + (e.qualified_p () ? "true" : "false") << ", e, *b);"; + } + else + { + os << xerces_ns << "::DOMElement& s (" << endl + << "::xsd::cxx::xml::dom::create_element (" << endl + << strlit (e.name ()) << "," << endl + << (ns ? strlit (ns) + L",\n" : L"") + << "e));" + << endl; + + switch (schema_type (t)) + { + case st_other: + { + os << "s << *b;"; + break; + } + case st_double: + { + os << "s << " << as_double_type << " (*b);"; + break; + } + case st_decimal: + { + os << "s << " << as_decimal_type << " (*b);"; + break; + } + } + } + + os << "}"; + } + else if (min (e) == 0) + { + // optional + // + os << "if (i." << aname << " ())" + << "{"; + + if (poly) + { + os << "const " << type << "& x (*i." << aname << " ());" + << "if (typeid (" << type << ") == typeid (x))" + << "{" + << xerces_ns << "::DOMElement& s (" << endl + << "::xsd::cxx::xml::dom::create_element (" << endl + << strlit (e.name ()) << "," << endl + << (ns ? strlit (ns) + L",\n" : L"") + << "e));" + << endl + << "s << x;" + << "}" + << "else" << endl + << "tsm.serialize (" << endl + << strlit (e.name ()) << "," << endl + << strlit (ns) << "," << endl + << (e.global_p () ? "true" : "false") << ", " << + (e.qualified_p () ? "true" : "false") << ", e, x);"; + } + else + { + os << xerces_ns << "::DOMElement& s (" << endl + << "::xsd::cxx::xml::dom::create_element (" << endl + << strlit (e.name ()) << "," << endl + << (ns ? strlit (ns) + L",\n" : L"") + << "e));" + << endl; + + switch (schema_type (t)) + { + case st_other: + { + os << "s << *i." << aname << " ();"; + break; + } + case st_double: + { + os << "s << " << as_double_type << "(*i." << aname << " ());"; + break; + } + case st_decimal: + { + os << "s << " << as_decimal_type << "(*i." << aname << " ());"; + break; + } + } + } + + os << "}"; + } + else + { + // one + // + if (poly) + { + os << "const " << type << "& x (i." << aname << " ());" + << "if (typeid (" << type << ") == typeid (x))" + << "{" + << xerces_ns << "::DOMElement& s (" << endl + << "::xsd::cxx::xml::dom::create_element (" << endl + << strlit (e.name ()) << "," << endl + << (ns ? strlit (ns) + L",\n" : L"") + << "e));" + << endl + << "s << x;" + << "}" + << "else" << endl + << "tsm.serialize (" << endl + << strlit (e.name ()) << "," << endl + << strlit (ns) << "," << endl + << (e.global_p () ? "true" : "false") << ", " << + (e.qualified_p () ? "true" : "false") << ", e, x);"; + } + else + { + os << "{" + << xerces_ns << "::DOMElement& s (" << endl + << "::xsd::cxx::xml::dom::create_element (" << endl + << strlit (e.name ()) << "," << endl + << (ns ? strlit (ns) + L",\n" : L"") + << "e));" + << endl; + + switch (schema_type (t)) + { + case st_other: + { + os << "s << i." << aname << " ();"; + break; + } + case st_double: + { + os << "s << " << as_double_type << "(i." << aname << " ());"; + break; + } + case st_decimal: + { + os << "s << " << as_decimal_type << "(i." << aname << " ());"; + break; + } + } + + os << "}"; + } + } + + if (poly) + os << "}"; + } + + private: + String scope; + }; + + struct Any: Traversal::Any, Context + { + Any (Context& c, String const& scope_) + : Context (c), scope (scope_) + { + } + + virtual Void + traverse (Type& a) + { + String const& aname (eaname (a)); + + os << "// " << ename (a) << endl + << "//" << endl; + + if (max (a) != 1) + { + // sequence + // + os << "for (" << scope << "::" << econst_iterator (a) << endl + << "b (i." << aname << " ().begin ()), " << + "n (i." << aname << " ().end ());" << endl + << "b != n; ++b)" + << "{" + << "e.appendChild (" << endl + << "e.getOwnerDocument ()->importNode (" << endl + << "const_cast< " << xerces_ns << + "::DOMElement* > (&(*b)), true));" + << "}"; + } + else if (min (a) == 0) + { + // optional + // + os << "if (i." << aname << " ())" + << "{" + << "e.appendChild (" << endl + << "e.getOwnerDocument ()->importNode (" << endl + << "const_cast< " << xerces_ns << "::DOMElement* > (&(*i." << + aname << " ())), true));" + << "}"; + } + else + { + // one + // + os << "e.appendChild (" << endl + << "e.getOwnerDocument ()->importNode (" << endl + << "const_cast< " << xerces_ns << "::DOMElement* > (&(i." << + aname << " ())), true));" + << endl; + } + } + + private: + String scope; + }; + + struct Attribute: Traversal::Attribute, Context + { + Attribute (Context& c, String const& scope_) + : Context (c), scope (scope_) + { + } + + virtual Void + traverse (Type& a) + { + String const& aname (eaname (a)); + String ns (a.qualified_p () ? a.namespace_ ().name () : ""); + + os << "// " << comment (a.name ()) << endl + << "//" << endl; + + if (a.optional_p () && !a.default_p ()) + { + os << "if (i." << aname << " ())" + << "{" + << xerces_ns << "::DOMAttr& a (" << endl + << "::xsd::cxx::xml::dom::create_attribute (" << endl + << strlit (a.name ()) << "," << endl + << (ns ? strlit (ns) + L",\n" : L"") + << "e));" + << endl; + + switch (schema_type (a.type ())) + { + case st_other: + { + os << "a << *i." << aname << " ();"; + break; + } + case st_double: + { + os << "a << " << as_double_type << "(*i." << aname << " ());"; + break; + } + case st_decimal: + { + os << "a << " << as_decimal_type << "(*i." << aname << " ());"; + break; + } + } + + os << "}"; + } + else + { + // Make sure we serialize required fixed attributes. + // + if (a.optional_p () && + options.value<CLI::omit_default_attributes> ()) + { + os << "if (i." << aname << " () != " << scope << + "::" << edefault_value (a) << " ())"; + } + + os << "{" + << xerces_ns << "::DOMAttr& a (" << endl + << "::xsd::cxx::xml::dom::create_attribute (" << endl + << strlit (a.name ()) << "," << endl + << (ns ? strlit (ns) + L",\n" : L"") + << "e));" + << endl; + + switch (schema_type (a.type ())) + { + case st_other: + { + os << "a << i." << aname << " ();"; + break; + } + case st_double: + { + os << "a << " << as_double_type << "(i." << aname << " ());"; + break; + } + case st_decimal: + { + os << "a << " << as_decimal_type << "(i." << aname << " ());"; + break; + } + } + + os << "}"; + } + } + + private: + String scope; + }; + + struct AnyAttribute: Traversal::AnyAttribute, Context + { + AnyAttribute (Context& c, String const& scope_) + : Context (c), scope (scope_) + { + } + + virtual Void + traverse (Type& a) + { + String const& aname (eaname (a)); + + os << "// " << ename (a) << endl + << "//" << endl; + + os << "for (" << scope << "::" << econst_iterator (a) << endl + << "b (i." << aname << " ().begin ()), " << + "n (i." << aname << " ().end ());" << endl + << "b != n; ++b)" + << "{" + << xerces_ns << "::DOMAttr* a (" << endl + << "static_cast< " << xerces_ns << "::DOMAttr* > (" << endl + << "e.getOwnerDocument ()->importNode (" << endl + << "const_cast< " << xerces_ns << "::DOMAttr* > (&(*b)), true)));" + << endl + << "if (a->getLocalName () == 0)" << endl + << "e.setAttributeNode (a);" + << "else" << endl + << "e.setAttributeNodeNS (a);" + << "}"; + } + + private: + String scope; + }; + + struct Complex: Traversal::Complex, Context + { + Complex (Context& c) + : Context (c), base_ (c) + { + inherits_ >> base_; + } + + virtual Void + traverse (Type& c) + { + String name (ename (c)); + + // If renamed name is empty then we do not need to generate + // anything for this type. + // + if (renamed_type (c, name) && !name) + return; + + // operator<< (xercesc::DOMElement) + // + os << "void" << endl + << "operator<< (" << xerces_ns << "::DOMElement& e, " << + "const " << name << "& i)" + << "{"; + + if (c.inherits_p ()) + { + os << "e << static_cast< const "; + inherits (c, inherits_); + os << "& > (i);" + << endl; + } + else + os << "e << static_cast< const " << any_type << "& > (i);" + << endl; + + // Serialize anyAttribute content first so that is gets + // overriden by schema-defined attributes. + // + if (options.value<CLI::generate_wildcard> ()) + { + AnyAttribute any_attribute (*this, name); + Traversal::Names names (any_attribute); + + Complex::names (c, names); + } + + { + Traversal::Names names; + Any any (*this, name); + Element element (*this, name); + Attribute attribute (*this, name); + + names >> element; + names >> attribute; + + if (options.value<CLI::generate_wildcard> ()) + names >> any; + + Complex::names (c, names); + } + + os << "}"; + + + Boolean simple (true); + { + IsSimpleType t (simple); + t.dispatch (c); + } + + if (simple) + { + Boolean hb (c.inherits_p ()); + + // operator<< (xercesc::DOMAttr) + // + os << "void" << endl + << "operator<< (" << xerces_ns << "::DOMAttr&" << + (hb ? " a" : "") << ", " << + "const " << name << "&" << (hb ? " i" : "") << ")" + << "{"; + + if (hb) + { + os << "a << static_cast< const "; + + inherits (c, inherits_); + + os << "& > (i);"; + } + + os << "}"; + + + // operator<< (list_stream) + // + os << "void" << endl + << "operator<< (" << list_stream_type << "&" << + (hb ? " l" : "") << "," << endl + << "const " << name << "&" << (hb ? " i" : "") << ")" + << "{"; + + if (hb) + { + os << "l << static_cast< const "; + + inherits (c, inherits_); + + os << "& > (i);"; + } + + os << "}"; + } + + // Register with type factory map. + // + if (polymorphic && polymorphic_p (c) && !anonymous_p (c)) + { + // Note that we are using the original type name. + // + String const& name (ename (c)); + + os << "static" << endl + << "const ::xsd::cxx::tree::type_serializer_initializer< 0, " << + char_type << ", " << name << " >" << endl + << "_xsd_" << name << "_type_serializer_init (" << endl + << strlit (c.name ()) << "," << endl + << strlit (xml_ns_name (c)) << ");" + << endl + << endl; + } + } + + private: + Traversal::Inherits inherits_; + BaseTypeName base_; + }; + + + // Generate substitution group map entry. + // + struct GlobalElement: Traversal::Element, + GlobalElementBase, + Context + { + GlobalElement (Context& c) + : GlobalElementBase (c), Context (c), type_name_ (c) + { + belongs_ >> type_name_; + } + + virtual Void + traverse (Type& e) + { + if (polymorphic && e.substitutes_p ()) + { + Type& r (e.substitutes ().root ()); + + String const& name (ename (e)); + + os << "static" << endl + << "const ::xsd::cxx::tree::element_serializer_initializer< 0, " << + char_type << ", "; + + belongs (e, belongs_); + + os << " >" << endl + << "_xsd_" << name << "_element_serializer_init (" << endl + << strlit (r.name ()) << "," << endl + << strlit (r.namespace_ ().name ()) << "," << endl + << strlit (e.name ()) << "," << endl + << strlit (e.namespace_ ().name ()) << ");" + << endl + << endl; + } + } + + private: + Traversal::Belongs belongs_; + MemberTypeName type_name_; + + }; + + struct ElementType: Traversal::Element, + GlobalElementBase, + Context + { + ElementType (Context& c) + : GlobalElementBase (c), + Context (c), + element_map_ (c.options.value<CLI::generate_element_map> ()) + { + } + + virtual Void + traverse (Type& e) + { + if (doc_root_p (e)) + { + String const& name (ename (e)); + + // operator<< (xercesc::DOMElement) + // + os << "void" << endl + << "operator<< (" << xerces_ns << "::DOMElement& e, " << + "const " << name << "& i)" + << "{" + << "e << i." << eaname (e) << " ();" + << "}"; + + // Element map registration. + // + if (element_map_) + { + SemanticGraph::Context& ec (e.context ()); + String const& aname (ec.get<String> ("element-name")); + String const& ans (ec.get<String> ("element-ns")); + + os << "static " << endl + << "const ::xsd::cxx::tree::serializer_init< " << + name << ", " << char_type << ", " << any_type << " >" << endl + << "_xsd_" << name << "_serializer_init (" << + name << "::" << aname << " (), " << + name << "::" << ans << " ());" + << endl; + } + } + } + + private: + Boolean element_map_; + }; + + struct ElementFunction: Traversal::Element, + GlobalElementBase, + Context + { + ElementFunction (Context& c) + : GlobalElementBase (c), Context (c) + { + } + + virtual Void + traverse (Type& e) + { + if (!doc_root_p (e)) + return; + + String const& name (eserializer (e)); + String ns (e.namespace_ ().name ()); + String const& error_handler (error_handler_type); + String const& namespace_infomap (namespace_infomap_type); + + SemanticGraph::Type& type (e.type ()); + + // Note that I am using fq-name in function calls because g++ gets + // confused if the name is 'type'. (see tests/schema/anonymous) + // + + // Check if we need to handle xsi:type and substitution groups. + // If this element's type is anonymous then we don't need to do + // anything. + // + Boolean poly (polymorphic && + polymorphic_p (type) && + !anonymous_p (type)); + + // To std::ostream. + // + os << "void" << endl + << name << " (::std::ostream& o," << endl + << "const " << type_name (e) << "& s," << endl + << "const " << namespace_infomap << "& m," << endl + << "const " << string_type << "& e," << endl + << flags_type << " f)" + << "{" + << "::xsd::cxx::xml::auto_initializer i (" << endl + << "(f & " << flags_type << "::dont_initialize) == 0);" + << endl + << dom_auto_ptr << "< " << xerces_ns << + "::DOMDocument > d (" << endl + << fq_name (e, "serializer") << " (s, m, f));" + << endl + << "::xsd::cxx::tree::error_handler< " << char_type << " > h;" + << endl + << "::xsd::cxx::xml::dom::ostream_format_target t (o);" + << "if (!::xsd::cxx::xml::dom::serialize (t, *d, e, h, f))" + << "{" + << "h.throw_if_failed< ::xsd::cxx::tree::serialization< " << + char_type << " > > ();" + << "}" + << "}"; + + os << "void" << endl + << name << " (::std::ostream& o," << endl + << "const " << type_name (e) << "& s," << endl + << error_handler << "& h," << endl + << "const " << namespace_infomap << "& m," << endl + << "const " << string_type << "& e," << endl + << flags_type << " f)" + << "{" + << "::xsd::cxx::xml::auto_initializer i (" << endl + << "(f & " << flags_type << "::dont_initialize) == 0);" + << endl + << dom_auto_ptr << "< " << xerces_ns << + "::DOMDocument > d (" << endl + << fq_name (e, "serializer") << " (s, m, f));" + << "::xsd::cxx::xml::dom::ostream_format_target t (o);" + << "if (!::xsd::cxx::xml::dom::serialize (t, *d, e, h, f))" + << "{" + << "throw ::xsd::cxx::tree::serialization< " << + char_type << " > ();" + << "}" + << "}"; + + os << "void" << endl + << name << " (::std::ostream& o," << endl + << "const " << type_name (e) << "& s," << endl + << xerces_ns << "::DOMErrorHandler& h," << endl + << "const " << namespace_infomap << "& m," << endl + << "const " << string_type << "& e," << endl + << flags_type << " f)" + << "{" + << dom_auto_ptr << "< " << xerces_ns << + "::DOMDocument > d (" << endl + << fq_name (e, "serializer") << " (s, m, f));" + << "::xsd::cxx::xml::dom::ostream_format_target t (o);" + << "if (!::xsd::cxx::xml::dom::serialize (t, *d, e, h, f))" + << "{" + << "throw ::xsd::cxx::tree::serialization< " << + char_type << " > ();" + << "}" + << "}"; + + // To XMLFormatTarget. + // + os << "void" << endl + << name << " (" << xerces_ns << "::XMLFormatTarget& t," << endl + << "const " << type_name (e) << "& s," << endl + << "const " << namespace_infomap << "& m," << endl + << "const " << string_type << "& e," << endl + << flags_type << " f)" + << "{" + << dom_auto_ptr << "< " << xerces_ns << + "::DOMDocument > d (" << endl + << fq_name (e, "serializer") << " (s, m, f));" + << endl + << "::xsd::cxx::tree::error_handler< " << char_type << " > h;" + << endl + << "if (!::xsd::cxx::xml::dom::serialize (t, *d, e, h, f))" + << "{" + << "h.throw_if_failed< ::xsd::cxx::tree::serialization< " << + char_type << " > > ();" + << "}" + << "}"; + + os << "void" << endl + << name << " (" << xerces_ns << "::XMLFormatTarget& t," << endl + << "const " << type_name (e) << "& s," << endl + << error_handler << "& h," << endl + << "const " << namespace_infomap << "& m," << endl + << "const " << string_type << "& e," << endl + << flags_type << " f)" + << "{" + << dom_auto_ptr << "< " << xerces_ns << + "::DOMDocument > d (" << endl + << fq_name (e, "serializer") << " (s, m, f));" + << "if (!::xsd::cxx::xml::dom::serialize (t, *d, e, h, f))" + << "{" + << "throw ::xsd::cxx::tree::serialization< " << + char_type << " > ();" + << "}" + << "}"; + + os << "void" << endl + << name << " (" << xerces_ns << "::XMLFormatTarget& t," << endl + << "const " << type_name (e) << "& s," << endl + << xerces_ns << "::DOMErrorHandler& h," << endl + << "const " << namespace_infomap << "& m," << endl + << "const " << string_type << "& e," << endl + << flags_type << " f)" + << "{" + << dom_auto_ptr << "< " << xerces_ns << + "::DOMDocument > d (" << endl + << fq_name (e, "serializer") << " (s, m, f));" + << "if (!::xsd::cxx::xml::dom::serialize (t, *d, e, h, f))" + << "{" + << "throw ::xsd::cxx::tree::serialization< " << + char_type << " > ();" + << "}" + << "}"; + + // To an existing DOM instance. + // + os << "void" << endl + << name << " (" << xerces_ns << "::DOMDocument& d," << endl + << "const " << type_name (e) << "& s," << endl + << flags_type << ")" + << "{" + << xerces_ns << "::DOMElement& e (*d.getDocumentElement ());" + << "const " << qname_type << " n (" << endl + << "::xsd::cxx::xml::dom::name< " << char_type << " > (e));" + << endl; + + if (poly) + { + os << "if (typeid (" << type_name (e) << ") == typeid (s))" + << "{"; + } + + os << "if (n.name () == " << strlit (e.name ()) << " &&" << endl + << "n.namespace_ () == " << strlit (ns) << ")" + << "{"; + + switch (schema_type (type)) + { + case st_other: + { + os << "e << s;"; + break; + } + case st_double: + { + os << "e << " << as_double_type << "(s);"; + break; + } + case st_decimal: + { + os << "e << " << as_decimal_type << "(s);"; + break; + } + } + + os << "}" + << "else" + << "{" + << "throw ::xsd::cxx::tree::unexpected_element < " << + char_type << " > (" << endl + << "n.name ()," << endl + << "n.namespace_ ()," << endl + << strlit (e.name ()) << "," << endl + << strlit (ns) << ");" + << "}"; + + if (poly) + { + // aCC cannot handle an inline call to + // type_serializer_map_instance. + // + os << "}" + << "else" + << "{" + << "::xsd::cxx::tree::type_serializer_map< " << char_type + << " >& tsm (" << endl + << "::xsd::cxx::tree::type_serializer_map_instance< 0, " << + char_type << " > ());" + << endl + << "tsm.serialize (" << endl + << strlit (e.name ()) << "," << endl + << strlit (e.namespace_().name ()) << "," << endl + << "e, n, s);" + << "}"; + } + + os << "}"; + + + // To a new DOM instance. + // + os << dom_auto_ptr << "< " << xerces_ns << "::DOMDocument >" << endl + << name << " (const " << type_name (e) << "& s," << endl + << "const " << namespace_infomap << "& m," << endl + << flags_type << " f)" + << "{"; + + if (poly) + { + // aCC cannot handle an inline call to + // type_serializer_map_instance as well as the direct + // auto_ptr assignment. + // + os << dom_auto_ptr << "< " << xerces_ns << "::DOMDocument > d;" + << endl + << "if (typeid (" << type_name (e) << ") == typeid (s))" + << "{" + << dom_auto_ptr << "< " << xerces_ns << + "::DOMDocument > r (" << endl + << "::xsd::cxx::xml::dom::serialize< " << + char_type << " > (" << endl + << strlit (e.name ()) << "," << endl + << strlit (ns) << "," << endl + << "m, f));" + << "d = r;" + << "}" + << "else" + << "{" + << "::xsd::cxx::tree::type_serializer_map< " << char_type + << " >& tsm (" << endl + << "::xsd::cxx::tree::type_serializer_map_instance< 0, " << + char_type << " > ());" + << endl + << dom_auto_ptr << "< " << xerces_ns << + "::DOMDocument > r (" << endl + << "tsm.serialize (" << endl + << strlit (e.name ()) << "," << endl + << strlit (e.namespace_().name ()) << "," << endl + << "m, s, f));" + << "d = r;" + << "}"; + } + else + { + os << dom_auto_ptr << "< " << xerces_ns << + "::DOMDocument > d (" << endl + << "::xsd::cxx::xml::dom::serialize< " << + char_type << " > (" << endl + << strlit (e.name ()) << "," << endl + << strlit (ns) << "," << endl + << "m, f));" + << endl; + } + + os << fq_name (e, "serializer") << " (*d, s, f);" + << "return d;" + << "}"; + + } + + private: + String + type_name (Type& e) + { + std::wostringstream o; + + MemberTypeName type (*this, o); + type.dispatch (e.type ()); + + return o.str (); + } + }; + } + + Void + generate_serialization_source (Context& ctx, + UnsignedLong first, + UnsignedLong last) + { + Boolean elemen_type (ctx.options.value<CLI::generate_element_type> ()); + + if (!elemen_type) + ctx.os << "#include <ostream>" << endl + << "#include <xsd/cxx/tree/error-handler.hxx>" << endl; + + ctx.os << "#include <xsd/cxx/xml/dom/serialization-source.hxx>" << endl + << endl; + + if (ctx.polymorphic) + { + ctx.os << "#include <xsd/cxx/tree/type-serializer-map.hxx>" << endl + << endl; + + Boolean import_maps (ctx.options.value<CLI::import_maps> ()); + Boolean export_maps (ctx.options.value<CLI::export_maps> ()); + + if (import_maps || export_maps) + { + ctx.os << "#ifndef XSD_NO_EXPORT" << endl + << endl + << "namespace xsd" + << "{" + << "namespace cxx" + << "{" + << "namespace tree" + << "{" + << "#ifdef _MSC_VER" << endl; + + if (export_maps) + ctx.os << "template struct __declspec (dllexport) " << + "type_serializer_plate< 0, " << ctx.char_type << " >;"; + + if (import_maps) + ctx.os << "template struct __declspec (dllimport) " << + "type_serializer_plate< 0, " << ctx.char_type << " >;"; + + ctx.os << "#elif defined(__GNUC__) && __GNUC__ >= 4" << endl + << "template struct __attribute__ ((visibility(\"default\"))) " << + "type_serializer_plate< 0, " << ctx.char_type << " >;"; + + ctx.os << "#elif defined(XSD_MAP_VISIBILITY)" << endl + << "template struct XSD_MAP_VISIBILITY " << + "type_serializer_plate< 0, " << ctx.char_type << " >;"; + + ctx.os << "#endif" << endl + << "}" // tree + << "}" // cxx + << "}" // xsd + << "#endif // XSD_NO_EXPORT" << endl + << endl; + } + + ctx.os << "namespace _xsd" + << "{" + << "static" << endl + << "const ::xsd::cxx::tree::type_serializer_plate< 0, " << + ctx.char_type << " >" << endl + << "type_serializer_plate_init;" + << "}"; + } + + Traversal::Schema schema; + + Traversal::Sources sources; + Traversal::Names names_ns, names; + + Namespace ns (ctx, first, last); + + List list (ctx); + Union union_ (ctx); + Complex complex (ctx); + Enumeration enumeration (ctx); + GlobalElement element (ctx); + ElementType element_type (ctx); + ElementFunction element_function (ctx); + + + schema >> sources >> schema; + schema >> names_ns >> ns >> names; + + names >> list; + names >> union_; + names >> complex; + names >> enumeration; + names >> element; + + if (elemen_type) + names >> element_type; + else + names >> element_function; + + schema.dispatch (ctx.schema_root); + } + } +} diff --git a/xsd/xsd/cxx/tree/serialization-source.hxx b/xsd/xsd/cxx/tree/serialization-source.hxx new file mode 100644 index 0000000..322949a --- /dev/null +++ b/xsd/xsd/cxx/tree/serialization-source.hxx @@ -0,0 +1,22 @@ +// file : xsd/cxx/tree/serialization-source.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef CXX_TREE_SERIALIZATION_SOURCE_HXX +#define CXX_TREE_SERIALIZATION_SOURCE_HXX + +#include <cxx/tree/elements.hxx> + +namespace CXX +{ + namespace Tree + { + Void + generate_serialization_source (Context&, + UnsignedLong first, + UnsignedLong last); + } +} + +#endif // CXX_TREE_SERIALIZATION_SOURCE_HXX diff --git a/xsd/xsd/cxx/tree/stream-extraction-source.cxx b/xsd/xsd/cxx/tree/stream-extraction-source.cxx new file mode 100644 index 0000000..1378bc6 --- /dev/null +++ b/xsd/xsd/cxx/tree/stream-extraction-source.cxx @@ -0,0 +1,763 @@ +// file : xsd/cxx/tree/stream-extraction-source.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <cxx/tree/stream-extraction-source.hxx> + +#include <xsd-frontend/semantic-graph.hxx> +#include <xsd-frontend/traversal.hxx> + +namespace CXX +{ + namespace Tree + { + namespace + { + typedef Containers::Vector<NarrowString> Streams; + + struct List: Traversal::List, Context + { + List (Context& c) + : Context (c) + { + } + + virtual Void + traverse (Type& l) + { + String name (ename (l)); + + // If renamed name is empty then we do not need to generate + // anything for this type. + // + if (renamed_type (l, name) && !name) + return; + + SemanticGraph::Type& item_type (l.argumented ().type ()); + String base (L"::xsd::cxx::tree::list< " + + item_type_name (item_type) + L", " + char_type); + + if (item_type.is_a<SemanticGraph::Fundamental::Double> ()) + base += L", ::xsd::cxx::tree::schema_type::double_"; + else if (item_type.is_a<SemanticGraph::Fundamental::Decimal> ()) + base += L", ::xsd::cxx::tree::schema_type::decimal"; + + base += L" >"; + + UnsignedLong n (0); + Streams const& st (options.value<CLI::generate_extraction> ()); + for (Streams::ConstIterator i (st.begin ()); i != st.end (); ++i) + { + os << name << "::" << endl + << name << " (" << istream_type << "< " << + i->c_str () << " >& s," << endl + << flags_type << " f," << endl + << container << "* c)" << endl + << ": " << any_simple_type << " (s, f, c)," << endl + << " " << base << " (s, f, this)" + << "{" + << "}"; + + // Register with type map. + // + if (polymorphic && polymorphic_p (l) && !anonymous_p (l)) + { + // Note that we are using the original type name. + // + String const& name (ename (l)); + + os << "static" << endl + << "const ::xsd::cxx::tree::stream_extraction_initializer< " << + "0, " << i->c_str () << ", " << + char_type << ", " << name << " >" << endl + << "_xsd_" << name << "_stream_extraction_init_" << + n++ << " (" << endl + << strlit (l.name ()) << "," << endl + << strlit (xml_ns_name (l)) << ");" + << endl; + } + } + } + + private: + String + item_type_name (SemanticGraph::Type& t) + { + std::wostringstream o; + + MemberTypeName type (*this, o); + type.dispatch (t); + + return o.str (); + } + }; + + + struct Union: Traversal::Union, Context + { + Union (Context& c) + : Context (c) + { + } + + virtual Void + traverse (Type& u) + { + String name (ename (u)); + + // If renamed name is empty then we do not need to generate + // anything for this type. + // + if (renamed_type (u, name) && !name) + return; + + String const& base (xs_string_type); + + UnsignedLong n (0); + Streams const& st (options.value<CLI::generate_extraction> ()); + for (Streams::ConstIterator i (st.begin ()); i != st.end (); ++i) + { + os << name << "::" << endl + << name << " (" << istream_type << "< " << + i->c_str () << " >& s," << endl + << flags_type << " f," << endl + << container << "* c)" << endl + << ": " << base << " (s, f, c)" + << "{" + << "}"; + + // Register with type map. + // + if (polymorphic && polymorphic_p (u) && !anonymous_p (u)) + { + // Note that we are using the original type name. + // + String const& name (ename (u)); + + os << "static" << endl + << "const ::xsd::cxx::tree::stream_extraction_initializer< " << + "0, " << i->c_str () << ", " << + char_type << ", " << name << " >" << endl + << "_xsd_" << name << "_stream_extraction_init_" << + n++ << " (" << endl + << strlit (u.name ()) << "," << endl + << strlit (xml_ns_name (u)) << ");" + << endl; + } + } + } + }; + + + struct Enumeration: Traversal::Enumeration, Context + { + Enumeration (Context& c) + : Context (c), base_ (c) + { + inherits_base_ >> base_; + } + + virtual Void + traverse (Type& e) + { + String name (ename (e)); + + // If renamed name is empty then we do not need to generate + // anything for this type. + // + if (renamed_type (e, name) && !name) + return; + + Boolean string_based (false); + { + IsStringBasedType t (string_based); + t.dispatch (e); + } + + UnsignedLong n (0); + Streams const& st (options.value<CLI::generate_extraction> ()); + for (Streams::ConstIterator i (st.begin ()); i != st.end (); ++i) + { + os << name << "::" << endl + << name << " (" << istream_type << "< " << + i->c_str () << " >& s," << endl + << flags_type << " f," << endl + << container << "* c)" << endl + << ": "; + + inherits (e, inherits_base_); + + os << " (s, f, c)" + << "{"; + + if (string_based) + os << "_xsd_" << name << "_convert ();"; + + os << "}"; + + // Register with type map. + // + if (polymorphic && polymorphic_p (e) && !anonymous_p (e)) + { + // Note that we are using the original type name. + // + String const& name (ename (e)); + + os << "static" << endl + << "const ::xsd::cxx::tree::stream_extraction_initializer< " << + "0, " << i->c_str () << ", " << + char_type << ", " << name << " >" << endl + << "_xsd_" << name << "_stream_extraction_init_" << + n++ << " (" << endl + << strlit (e.name ()) << "," << endl + << strlit (xml_ns_name (e)) << ");" + << endl; + } + } + } + + private: + Traversal::Inherits inherits_base_; + BaseTypeName base_; + }; + + struct CtorMember: Traversal::Member, Context + { + CtorMember (Context& c) + : Context (c) + { + } + + virtual Void + traverse (SemanticGraph::Member& m) + { + if (skip (m)) + return; + + os << "," << endl + << " " << emember (m) << " (f, this)"; + } + }; + + struct CtorAny: Traversal::Any, + Traversal::AnyAttribute, + Context + { + CtorAny (Context& c) + : Context (c) + { + } + + virtual Void + traverse (SemanticGraph::Any& a) + { + String const& member (emember (a)); + String const& dom_doc ( + edom_document ( + dynamic_cast<SemanticGraph::Complex&> (a.scope ()))); + + os << "," << endl + << " " << member << " (this->" << dom_doc << " ())"; + } + + virtual Void + traverse (SemanticGraph::AnyAttribute& a) + { + String const& member (emember (a)); + String const& dom_doc ( + edom_document ( + dynamic_cast<SemanticGraph::Complex&> (a.scope ()))); + + os << "," << endl + << " " << member << " (this->" << dom_doc << " ())"; + } + }; + + struct Element: Traversal::Element, Context + { + Element (Context& c, String const& stream_) + : Context (c), stream (stream_) + { + } + + virtual Void + traverse (Type& e) + { + if (skip (e)) + return; + + String const& member (emember (e)); + + SemanticGraph::Type& t (e.type ()); + String type (etype (e)); + + Boolean fund (false); + { + IsFundamentalType traverser (fund); + traverser.dispatch (t); + } + + // Figure out if we need to generate polymorphic code. If this + // elemen's type is anonymous then we don't need to do anything. + // Note that if the type is anonymous then it can't be derived + // from which makes it impossible to substitute or dynamically- + // type with xsi:type. + // + Boolean poly (polymorphic && polymorphic_p (t) && !anonymous_p (t)); + + if (max (e) != 1) + { + // sequence + // + String container (econtainer (e)); + + os << "{" + << "::std::size_t n;" + << "::xsd::cxx::tree::istream_common::as_size< " << + "::std::size_t > as (n);" + << "s >> as;" + << "if (n > 0)" + << "{" + << container << "& c (this->" << member << ");" + << "c.reserve (n);" + << "while (n--)" + << "{"; + + if (poly) + { + os << "bool d;" + << "::std::auto_ptr< " << type << " > r;" + << "s >> d;" + << endl + << "if (!d)" << endl + << "r.reset (new " << type << " (s, f, this));" + << "else" + << "{" + << "::std::auto_ptr< ::xsd::cxx::tree::type > tmp (" << endl + << "::xsd::cxx::tree::stream_extraction_map_instance< 0, " << + stream << ", " << char_type << " > ().extract (" << endl + << "s, f, this));" + << "r.reset (dynamic_cast< " << type << "* > (tmp.get ()));" + << "if (r.get ())" << endl + << "tmp.release ();" + << "else" << endl + << "throw ::xsd::cxx::tree::not_derived< " << char_type << + " > ();" + << "}"; + } + else if (fund) + { + os << type << " r;" + << "s >> r;"; + } + else + { + os << "::std::auto_ptr< " << type << " > r (new " << type << + " (s, f, this));"; + } + + os << "c.push_back (r);" + << "}" // while + << "}" // if + << "}"; + } + else if (min (e) == 0) + { + // optional + // + os << "{" + << "bool p;" + << "s >> p;" + << "if (p)" + << "{"; + + if (poly) + { + os << "bool d;" + << "::std::auto_ptr< " << type << " > r;" + << "s >> d;" + << endl + << "if (!d)" << endl + << "r.reset (new " << type << " (s, f, this));" + << "else" + << "{" + << "::std::auto_ptr< ::xsd::cxx::tree::type > tmp (" << endl + << "::xsd::cxx::tree::stream_extraction_map_instance< 0, " << + stream << ", " << char_type << " > ().extract (" << endl + << "s, f, this));" + << "r.reset (dynamic_cast< " << type << "* > (tmp.get ()));" + << "if (r.get ())" << endl + << "tmp.release ();" + << "else" << endl + << "throw ::xsd::cxx::tree::not_derived< " << char_type << + " > ();" + << "}"; + } + else if (fund) + { + os << type << " r;" + << "s >> r;"; + } + else + { + os << "::std::auto_ptr< " << type << " > r (new " << type << + " (s, f, this));"; + } + + os << "this->" << member << ".set (r);" + << "}" // if (p) + << "}"; + } + else + { + // one + // + os << "{"; + + if (poly) + { + os << "bool d;" + << "::std::auto_ptr< " << type << " > r;" + << "s >> d;" + << endl + << "if (!d)" << endl + << "r.reset (new " << type << " (s, f, this));" + << "else" + << "{" + << "::std::auto_ptr< ::xsd::cxx::tree::type > tmp (" << endl + << "::xsd::cxx::tree::stream_extraction_map_instance< 0, " << + stream << ", " << char_type << " > ().extract (" << endl + << "s, f, this));" + << "r.reset (dynamic_cast< " << type << "* > (tmp.get ()));" + << "if (r.get ())" << endl + << "tmp.release ();" + << "else" << endl + << "throw ::xsd::cxx::tree::not_derived< " << char_type << + " > ();" + << "}"; + } + else if (fund) + { + os << type << " r;" + << "s >> r;"; + } + else + { + os << "::std::auto_ptr< " << type << " > r (new " << type << + " (s, f, this));"; + } + + os << "this->" << member << ".set (r);" + << "}"; + } + } + + private: + String stream; + }; + + struct Attribute: Traversal::Attribute, Context + { + Attribute (Context& c) + : Context (c) + { + } + + virtual Void + traverse (Type& a) + { + String const& member (emember (a)); + String type (etype (a)); + + Boolean fund (false); + { + IsFundamentalType traverser (fund); + traverser.dispatch (a.type ()); + } + + if (a.optional_p () && !a.default_p ()) + { + os << "{" + << "bool p;" + << "s >> p;" + << "if (p)" + << "{"; + + if (fund) + { + os << type << " r;" + << "s >> r;" + << "this->" << member << ".set (r);"; + } + else + { + os << "::std::auto_ptr< " << type << " > r (new " << type << + " (s, f, this));" + << "this->" << member << ".set (r);"; + } + + os << "}" // if (p) + << "}"; + } + else + { + os << "{"; + + if (fund) + { + os << type << " r;" + << "s >> r;" + << "this->" << member << ".set (r);"; + } + else + { + os << "::std::auto_ptr< " << type << " > r (new " << type << + " (s, f, this));" + << "this->" << member << ".set (r);"; + } + + os << "}"; + } + } + }; + + struct Complex: Traversal::Complex, Context + { + Complex (Context& c) + : Context (c), base_ (c), ctor_any_ (c), ctor_member_ (c) + { + inherits_ >> base_; + names_ctor_member_ >> ctor_member_; + + if (options.value<CLI::generate_wildcard> ()) + names_ctor_member_ >> ctor_any_; + } + + virtual Void + traverse (Type& c) + { + String name (ename (c)); + + // If renamed name is empty then we do not need to generate + // anything for this type. + // + if (renamed_type (c, name) && !name) + return; + + Boolean has_members (has<Traversal::Member> (c)); + + Boolean facets (false); + if (c.inherits_p ()) + { + // See if we have any facets that we need to handle. + // + using SemanticGraph::Restricts; + using SemanticGraph::Fundamental::Decimal; + + if (Restricts* r = dynamic_cast<Restricts*> (&c.inherits ())) + { + if (!r->facet_empty () && + (r->facet_find ("fractionDigits") != r->facet_end () || + r->facet_find ("totalDigits") != r->facet_end ()) && + ultimate_base (c).is_a<Decimal> ()) + facets = true; + } + } + + UnsignedLong n (0); + Streams const& st (options.value<CLI::generate_extraction> ()); + for (Streams::ConstIterator i (st.begin ()); i != st.end (); ++i) + { + + os << name << "::" << endl + << name << " (" << istream_type << "< " << + i->c_str () << " >& s," << endl + << flags_type << " f," << endl + << container << "* c)" << endl + << ": "; + + if (c.inherits_p ()) + inherits (c, inherits_); + else + os << any_type; + + os << " (s, f, c)"; + + if (edom_document_member_p (c)) + { + os << "," << endl + << " " << edom_document_member (c) << " (" << + "::xsd::cxx::xml::dom::create_document< " << char_type << + " > ())"; + } + + names (c, names_ctor_member_); + + os << "{"; + + if (facets) + os << "this->_facet_table (_xsd_" << name << "_facet_table);" + << endl; + + if (has_members) + os << "this->" << unclash (name, "parse") << " (s, f);"; + + os << "}"; + + // Parse + // + if (has_members) + { + os << "void " << name << "::" << endl + << unclash (name, "parse") << " (" << + istream_type << "< " << i->c_str () << " >& s," << endl + << flags_type << " f)" + << "{"; + { + Element element (*this, *i); + Attribute attribute (*this); + Traversal::Names names_; + + names_ >> element; + names_ >> attribute; + + names (c, names_); + } + + os << "}"; + } + + + // Register with type map. + // + if (polymorphic && polymorphic_p (c) && !anonymous_p (c)) + { + // Note that we are using the original type name. + // + String const& name (ename (c)); + + os << "static" << endl + << "const ::xsd::cxx::tree::stream_extraction_initializer< " << + "0, " << i->c_str () << ", " << + char_type << ", " << name << " >" << endl + << "_xsd_" << name << "_stream_extraction_init_" << + n++ << " (" << endl + << strlit (c.name ()) << "," << endl + << strlit (xml_ns_name (c)) << ");" + << endl; + } + } + } + + private: + Traversal::Inherits inherits_; + BaseTypeName base_; + + CtorAny ctor_any_; + CtorMember ctor_member_; + + Traversal::Names names_ctor_member_; + }; + } + + Void + generate_stream_extraction_source (Context& ctx) + { + if (ctx.polymorphic) + { + Streams const& st (ctx.options.value<CLI::generate_extraction> ()); + + ctx.os << "#include <xsd/cxx/tree/stream-extraction-map.hxx>" << endl + << endl; + + Boolean import_maps (ctx.options.value<CLI::import_maps> ()); + Boolean export_maps (ctx.options.value<CLI::export_maps> ()); + + if (import_maps || export_maps) + { + ctx.os << "#ifndef XSD_NO_EXPORT" << endl + << endl + << "namespace xsd" + << "{" + << "namespace cxx" + << "{" + << "namespace tree" + << "{"; + + for (Streams::ConstIterator i (st.begin ()); i != st.end (); ++i) + { + String stream (*i); + + ctx.os << "#ifdef _MSC_VER" << endl; + + if (export_maps) + ctx.os << "template struct __declspec (dllexport) " << + "stream_extraction_plate< 0, " << stream << ", " << + ctx.char_type << " >;"; + + if (import_maps) + ctx.os << "template struct __declspec (dllimport) " << + "stream_extraction_plate< 0, " << stream << ", " << + ctx.char_type << " >;"; + + ctx.os << "#elif defined(__GNUC__) && __GNUC__ >= 4" << endl + << "template struct __attribute__ ((visibility(\"default\"))) " << + "stream_extraction_plate< 0, " << stream << ", " << + ctx.char_type << " >;" + << "#elif defined(XSD_MAP_VISIBILITY)" << endl + << "template struct XSD_MAP_VISIBILITY " << + "stream_extraction_plate< 0, " << stream << ", " << + ctx.char_type << " >;" + << "#endif" << endl; + } + + ctx.os << "}" // tree + << "}" // cxx + << "}" // xsd + << "#endif // XSD_NO_EXPORT" << endl + << endl; + + } + + ctx.os << "namespace _xsd" + << "{"; + + UnsignedLong n (0); + for (Streams::ConstIterator i (st.begin ()); i != st.end (); ++i) + { + String stream (*i); + + ctx.os << "static" << endl + << "const ::xsd::cxx::tree::stream_extraction_plate< 0, " << + stream << ", " << ctx.char_type << " >" << endl + << "stream_extraction_plate_init_" << n++ << ";"; + } + + ctx.os << "}"; + } + + Traversal::Schema schema; + + Traversal::Sources sources; + Traversal::Names names_ns, names; + + Namespace ns (ctx); + + List list (ctx); + Union union_ (ctx); + Complex complex (ctx); + Enumeration enumeration (ctx); + + schema >> sources >> schema; + schema >> names_ns >> ns >> names; + + names >> list; + names >> union_; + names >> complex; + names >> enumeration; + + schema.dispatch (ctx.schema_root); + } + } +} diff --git a/xsd/xsd/cxx/tree/stream-extraction-source.hxx b/xsd/xsd/cxx/tree/stream-extraction-source.hxx new file mode 100644 index 0000000..23ab17c --- /dev/null +++ b/xsd/xsd/cxx/tree/stream-extraction-source.hxx @@ -0,0 +1,20 @@ +// file : xsd/cxx/tree/stream-extraction-source.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef CXX_TREE_EXTRACTION_SOURCE_HXX +#define CXX_TREE_EXTRACTION_SOURCE_HXX + +#include <cxx/tree/elements.hxx> + +namespace CXX +{ + namespace Tree + { + Void + generate_stream_extraction_source (Context&); + } +} + +#endif // CXX_TREE_EXTRACTION_SOURCE_HXX diff --git a/xsd/xsd/cxx/tree/stream-header.cxx b/xsd/xsd/cxx/tree/stream-header.cxx new file mode 100644 index 0000000..02e2651 --- /dev/null +++ b/xsd/xsd/cxx/tree/stream-header.cxx @@ -0,0 +1,183 @@ +// file : xsd/cxx/tree/stream-header.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <cxx/tree/stream-header.hxx> + +#include <xsd-frontend/semantic-graph.hxx> +#include <xsd-frontend/traversal.hxx> + +namespace CXX +{ + namespace Tree + { + namespace + { + struct List: Traversal::List, Context + { + List (Context& c) + : Context (c) + { + } + + virtual Void + traverse (Type& l) + { + String name (ename (l)); + + // If renamed name is empty then we do not need to generate + // anything for this type. + // + if (renamed_type (l, name) && !name) + return; + + os << inst_exp + << std_ostream_type << "&" << endl + << "operator<< (" << std_ostream_type << "&, const " << + name << "&);" + << endl; + } + }; + + + struct Union: Traversal::Union, Context + { + Union (Context& c) + : Context (c) + { + } + + virtual Void + traverse (Type& u) + { + String name (ename (u)); + + // If renamed name is empty then we do not need to generate + // anything for this type. + // + if (renamed_type (u, name) && !name) + return; + + os << inst_exp + << std_ostream_type << "&" << endl + << "operator<< (" << std_ostream_type << "&, const " << + name << "&);" + << endl; + } + }; + + + struct Enumeration: Traversal::Enumeration, Context + { + Enumeration (Context& c) + : Context (c) + { + } + + virtual Void + traverse (Type& e) + { + String name (ename (e)); + + // If renamed name is empty then we do not need to generate + // anything for this type. + // + if (renamed_type (e, name) && !name) + return; + + Boolean string_based (false); + { + IsStringBasedType t (string_based); + t.dispatch (e); + } + + Boolean enum_based (false); + if (string_based) + { + SemanticGraph::Enumeration* be (0); + IsEnumBasedType t (be); + t.dispatch (e); + + enum_based = (be != 0); + } + + // If we are based on an enum then the value type is just an + // alias and we don't need to generate this operator again. + // + if (string_based && !enum_based) + { + os << inst_exp + << std_ostream_type << "&" << endl + << "operator<< (" << std_ostream_type << "&, " << + name << "::" << evalue (e) << ");" + << endl; + } + + os << inst_exp + << std_ostream_type << "&" << endl + << "operator<< (" << std_ostream_type << "&, const " << + name << "&);" + << endl; + } + }; + + struct Complex: Traversal::Complex, Context + { + Complex (Context& c) + : Context (c) + { + } + + virtual Void + traverse (Type& c) + { + String name (ename (c)); + + // If renamed name is empty then we do not need to generate + // anything for this type. + // + if (renamed_type (c, name) && !name) + return; + + os << inst_exp + << std_ostream_type << "&" << endl + << "operator<< (" << std_ostream_type << "&, const " << + name << "&);" + << endl; + } + }; + } + + Void + generate_stream_header (Context& ctx) + { + String c (ctx.char_type); + + ctx.os << "#include <iosfwd>" << endl + << endl; + + Traversal::Schema schema; + + Traversal::Sources sources; + Traversal::Names names_ns, names; + + Namespace ns (ctx); + + List list (ctx); + Union union_ (ctx); + Complex complex (ctx); + Enumeration enumeration (ctx); + + schema >> sources >> schema; + schema >> names_ns >> ns >> names; + + names >> list; + names >> union_; + names >> complex; + names >> enumeration; + + schema.dispatch (ctx.schema_root); + } + } +} diff --git a/xsd/xsd/cxx/tree/stream-header.hxx b/xsd/xsd/cxx/tree/stream-header.hxx new file mode 100644 index 0000000..246a06e --- /dev/null +++ b/xsd/xsd/cxx/tree/stream-header.hxx @@ -0,0 +1,20 @@ +// file : xsd/cxx/tree/stream-header.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef CXX_TREE_STREAM_HEADER_HXX +#define CXX_TREE_STREAM_HEADER_HXX + +#include <cxx/tree/elements.hxx> + +namespace CXX +{ + namespace Tree + { + Void + generate_stream_header (Context&); + } +} + +#endif // CXX_TREE_STREAM_HEADER_HXX diff --git a/xsd/xsd/cxx/tree/stream-insertion-header.cxx b/xsd/xsd/cxx/tree/stream-insertion-header.cxx new file mode 100644 index 0000000..1669fdd --- /dev/null +++ b/xsd/xsd/cxx/tree/stream-insertion-header.cxx @@ -0,0 +1,178 @@ +// file : xsd/cxx/tree/stream-insertion-header.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <cxx/tree/stream-insertion-header.hxx> + +#include <xsd-frontend/semantic-graph.hxx> +#include <xsd-frontend/traversal.hxx> + +namespace CXX +{ + namespace Tree + { + namespace + { + typedef Containers::Vector<NarrowString> Streams; + + struct List: Traversal::List, Context + { + List (Context& c) + : Context (c) + { + } + + virtual Void + traverse (Type& l) + { + String name (ename (l)); + + // If renamed name is empty then we do not need to generate + // anything for this type. + // + if (renamed_type (l, name) && !name) + return; + + Streams const& st (options.value<CLI::generate_insertion> ()); + for (Streams::ConstIterator i (st.begin ()); i != st.end (); ++i) + { + String stream_type (ostream_type + L"< " + String (*i) + L" >"); + + os << inst_exp + << stream_type << "&" << endl + << "operator<< (" << stream_type << "&," << endl + << "const " << name << "&);" + << endl; + } + } + }; + + + struct Union: Traversal::Union, Context + { + Union (Context& c) + : Context (c) + { + } + + virtual Void + traverse (Type& u) + { + String name (ename (u)); + + // If renamed name is empty then we do not need to generate + // anything for this type. + // + if (renamed_type (u, name) && !name) + return; + + Streams const& st (options.value<CLI::generate_insertion> ()); + for (Streams::ConstIterator i (st.begin ()); i != st.end (); ++i) + { + String stream_type (ostream_type + L"< " + String (*i) + L" >"); + + os << inst_exp + << stream_type << "&" << endl + << "operator<< (" << stream_type << "&," << endl + << "const " << name << "&);" + << endl; + } + } + }; + + + struct Enumeration: Traversal::Enumeration, Context + { + Enumeration (Context& c) + : Context (c) + { + } + + virtual Void + traverse (Type& e) + { + String name (ename (e)); + + // If renamed name is empty then we do not need to generate + // anything for this type. + // + if (renamed_type (e, name) && !name) + return; + + Streams const& st (options.value<CLI::generate_insertion> ()); + for (Streams::ConstIterator i (st.begin ()); i != st.end (); ++i) + { + String stream_type (ostream_type + L"< " + String (*i) + L" >"); + + os << inst_exp + << stream_type << "&" << endl + << "operator<< (" << stream_type << "&," << endl + << "const " << name << "&);" + << endl; + } + } + }; + + struct Complex: Traversal::Complex, Context + { + Complex (Context& c) + : Context (c) + { + } + + virtual Void + traverse (Type& c) + { + String name (ename (c)); + + // If renamed name is empty then we do not need to generate + // anything for this type. + // + if (renamed_type (c, name) && !name) + return; + + Streams const& st (options.value<CLI::generate_insertion> ()); + for (Streams::ConstIterator i (st.begin ()); i != st.end (); ++i) + { + String stream_type (ostream_type + L"< " + String (*i) + L" >"); + + os << inst_exp + << stream_type << "&" << endl + << "operator<< (" << stream_type << "&," << endl + << "const " << name << "&);" + << endl; + } + } + }; + } + + Void + generate_stream_insertion_header (Context& ctx) + { + String c (ctx.char_type); + + Traversal::Schema schema; + + Traversal::Sources sources; + Traversal::Names names_ns, names; + + Namespace ns (ctx); + + List list (ctx); + Union union_ (ctx); + Complex complex (ctx); + Enumeration enumeration (ctx); + + schema >> sources >> schema; + schema >> names_ns >> ns >> names; + + names >> list; + names >> union_; + names >> complex; + names >> enumeration; + + schema.dispatch (ctx.schema_root); + } + } +} diff --git a/xsd/xsd/cxx/tree/stream-insertion-header.hxx b/xsd/xsd/cxx/tree/stream-insertion-header.hxx new file mode 100644 index 0000000..ca93713 --- /dev/null +++ b/xsd/xsd/cxx/tree/stream-insertion-header.hxx @@ -0,0 +1,20 @@ +// file : xsd/cxx/tree/stream-insertion-header.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef CXX_TREE_STREAM_INSERTION_HEADER_HXX +#define CXX_TREE_STREAM_INSERTION_HEADER_HXX + +#include <cxx/tree/elements.hxx> + +namespace CXX +{ + namespace Tree + { + Void + generate_stream_insertion_header (Context&); + } +} + +#endif // CXX_TREE_STREAM_INSERTION_HEADER_HXX diff --git a/xsd/xsd/cxx/tree/stream-insertion-source.cxx b/xsd/xsd/cxx/tree/stream-insertion-source.cxx new file mode 100644 index 0000000..09faf71 --- /dev/null +++ b/xsd/xsd/cxx/tree/stream-insertion-source.cxx @@ -0,0 +1,534 @@ +// file : xsd/cxx/tree/stream-insertion-source.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <cxx/tree/stream-insertion-source.hxx> + +#include <xsd-frontend/semantic-graph.hxx> +#include <xsd-frontend/traversal.hxx> + +namespace CXX +{ + namespace Tree + { + namespace + { + typedef Containers::Vector<NarrowString> Streams; + + struct List: Traversal::List, Context + { + List (Context& c) + : Context (c) + { + } + + virtual Void + traverse (Type& l) + { + String name (ename (l)); + + // If renamed name is empty then we do not need to generate + // anything for this type. + // + if (renamed_type (l, name) && !name) + return; + + SemanticGraph::Type& item_type (l.argumented ().type ()); + String base (L"::xsd::cxx::tree::list< " + + item_type_name (item_type) + L", " + char_type); + + if (item_type.is_a<SemanticGraph::Fundamental::Double> ()) + base += L", ::xsd::cxx::tree::schema_type::double_"; + else if (item_type.is_a<SemanticGraph::Fundamental::Decimal> ()) + base += L", ::xsd::cxx::tree::schema_type::decimal"; + + base += L" >"; + + UnsignedLong n (0); + Streams const& st (options.value<CLI::generate_insertion> ()); + for (Streams::ConstIterator i (st.begin ()); i != st.end (); ++i) + { + String stream_type ("::xsd::cxx::tree::ostream< " + *i + " >"); + + os << stream_type << "&" << endl + << "operator<< (" << stream_type << "& s," << endl + << "const " << name << "& x)" + << "{" + << "return s << static_cast< const " << base << "& > (x);" + << "}"; + + // Register with type map. + // + if (polymorphic && polymorphic_p (l) && !anonymous_p (l)) + { + // Note that we are using the original type name. + // + String const& name (ename (l)); + + os << "static" << endl + << "const ::xsd::cxx::tree::stream_insertion_initializer< " << + "0, " << i->c_str () << ", " << + char_type << ", " << name << " >" << endl + << "_xsd_" << name << "_stream_insertion_init_" << + n++ << " (" << endl + << strlit (l.name ()) << "," << endl + << strlit (xml_ns_name (l)) << ");" + << endl; + } + } + } + + private: + String + item_type_name (SemanticGraph::Type& t) + { + std::wostringstream o; + + MemberTypeName type (*this, o); + type.dispatch (t); + + return o.str (); + } + }; + + + struct Union: Traversal::Union, Context + { + Union (Context& c) + : Context (c) + { + } + + virtual Void + traverse (Type& u) + { + String name (ename (u)); + + // If renamed name is empty then we do not need to generate + // anything for this type. + // + if (renamed_type (u, name) && !name) + return; + + String const& base (xs_string_type); + + UnsignedLong n (0); + Streams const& st (options.value<CLI::generate_insertion> ()); + for (Streams::ConstIterator i (st.begin ()); i != st.end (); ++i) + { + String stream_type ("::xsd::cxx::tree::ostream< " + *i + " >"); + + os << stream_type << "&" << endl + << "operator<< (" << stream_type << "& s," << endl + << "const " << name << "& x)" + << "{" + << "return s << static_cast< const " << base << "& > (x);" + << "}"; + + // Register with type map. + // + if (polymorphic && polymorphic_p (u) && !anonymous_p (u)) + { + // Note that we are using the original type name. + // + String const& name (ename (u)); + + os << "static" << endl + << "const ::xsd::cxx::tree::stream_insertion_initializer< " << + "0, " << i->c_str () << ", " << + char_type << ", " << name << " >" << endl + << "_xsd_" << name << "_stream_insertion_init_" << + n++ << " (" << endl + << strlit (u.name ()) << "," << endl + << strlit (xml_ns_name (u)) << ");" + << endl; + } + } + } + }; + + + struct Enumeration: Traversal::Enumeration, Context + { + Enumeration (Context& c) + : Context (c), base_ (c) + { + inherits_base_ >> base_; + } + + virtual Void + traverse (Type& e) + { + String name (ename (e)); + + // If renamed name is empty then we do not need to generate + // anything for this type. + // + if (renamed_type (e, name) && !name) + return; + + UnsignedLong n (0); + Streams const& st (options.value<CLI::generate_insertion> ()); + for (Streams::ConstIterator i (st.begin ()); i != st.end (); ++i) + { + String stream_type ("::xsd::cxx::tree::ostream< " + *i + " >"); + + os << stream_type << "&" << endl + << "operator<< (" << stream_type << "& s," << endl + << "const " << name << "& x)" + << "{" + << "return s << static_cast< const "; + + inherits (e, inherits_base_); + + os << "& > (x);" + << "}"; + + // Register with type map. + // + if (polymorphic && polymorphic_p (e) && !anonymous_p (e)) + { + // Note that we are using the original type name. + // + String const& name (ename (e)); + + os << "static" << endl + << "const ::xsd::cxx::tree::stream_insertion_initializer< " << + "0, " << i->c_str () << ", " << + char_type << ", " << name << " >" << endl + << "_xsd_" << name << "_stream_insertion_init_" << + n++ << " (" << endl + << strlit (e.name ()) << "," << endl + << strlit (xml_ns_name (e)) << ");" + << endl; + } + } + } + + private: + Traversal::Inherits inherits_base_; + BaseTypeName base_; + }; + + struct Element: Traversal::Element, Context + { + Element (Context& c, String const& scope_, String const& stream_) + : Context (c), scope (scope_), stream (stream_) + { + } + + virtual Void + traverse (Type& e) + { + if (skip (e)) return; + + String const& aname (eaname (e)); + SemanticGraph::Type& t (e.type ()); + String type (scope + L"::" + etype (e)); + + // Figure out if we need to generate polymorphic code. If this + // elemen's type is anonymous then we don't need to do anything. + // Note that if the type is anonymous then it can't be derived + // from which makes it impossible to substitute or dynamically- + // type with xsi:type. + // + Boolean poly (polymorphic && polymorphic_p (t) && !anonymous_p (t)); + + if (max (e) != 1) + { + // sequence + // + os << "{" + << "const " << scope << "::" << econtainer (e) << "& c (" << + "x." << aname << " ());" + << "s << ::xsd::cxx::tree::ostream_common::as_size< " << + "::std::size_t > (c.size ());"; + + os << "for (" << scope << "::" << econst_iterator (e) << endl + << "i (c.begin ()), e (c.end ());" << endl + << "i != e; ++i)" + << "{"; + + if (poly) + { + os << "bool d (typeid (" << type << ") != typeid (*i));" + << "s << d;" + << "if (!d)" << endl + << "s << *i;" + << "else" << endl + << "::xsd::cxx::tree::stream_insertion_map_instance< 0, " << + stream << ", " << char_type << " > ().insert (s, *i);"; + } + else + os << "s << *i;"; + + os << "}" // for + << "}"; + } + else if (min (e) == 0) + { + // optional + // + os << "{" + << "bool p (x." << aname << " ());" + << "s << p;" + << "if (p)"; + + if (poly) + { + os << "{" + << "const " << type << "& i (*x." << aname << " ());" + << "bool d (typeid (" << type << ") != typeid (i));" + << "s << d;" + << "if (!d)" << endl + << "s << i;" + << "else" << endl + << "::xsd::cxx::tree::stream_insertion_map_instance< 0, " << + stream << ", " << char_type << " > ().insert (s, i);" + << "}"; + } + else + os << endl + << "s << *x." << aname << " ();"; + + os << "}"; + } + else + { + // one + // + if (poly) + { + os << "{" + << "const " << type << "& i (x." << aname << " ());" + << "bool d (typeid (" << type << ") != typeid (i));" + << "s << d;" + << "if (!d)" << endl + << "s << i;" + << "else" << endl + << "::xsd::cxx::tree::stream_insertion_map_instance< 0, " << + stream << ", " << char_type << " > ().insert (s, i);" + << "}"; + } + else + os << "s << x." << aname << " ();"; + } + } + + private: + String scope; + String stream; + }; + + struct Attribute: Traversal::Attribute, Context + { + Attribute (Context& c) + : Context (c) + { + } + + virtual Void + traverse (Type& a) + { + String const& aname (eaname (a)); + + if (a.optional_p () && !a.default_p ()) + { + os << "{" + << "bool p (x." << aname << " ());" + << "s << p;" + << "if (p)" << endl + << "s << *x." << aname << " ();" + << "}"; + } + else + { + os << "s << x." << aname << " ();"; + } + } + }; + + + struct Complex: Traversal::Complex, Context + { + Complex (Context& c) + : Context (c), base_ (c) + { + inherits_ >> base_; + } + + virtual Void + traverse (Type& c) + { + String name (ename (c)); + + // If renamed name is empty then we do not need to generate + // anything for this type. + // + if (renamed_type (c, name) && !name) + return; + + Boolean has_body (has<Traversal::Member> (c) || c.inherits_p ()); + + UnsignedLong n (0); + Streams const& st (options.value<CLI::generate_insertion> ()); + for (Streams::ConstIterator i (st.begin ()); i != st.end (); ++i) + { + String stream_type ("::xsd::cxx::tree::ostream< " + *i + " >"); + + os << stream_type << "&" << endl + << "operator<< (" << stream_type << "& s," << endl + << "const " << name << "&" << (has_body ? " x" : "") << ")" + << "{"; + + if (c.inherits_p ()) + { + os << "s << static_cast< const "; + + inherits (c, inherits_); + + os << "& > (x);"; + } + + { + Traversal::Names names_member; + Element element (*this, name, *i); + Attribute attribute (*this); + + names_member >> element; + names_member >> attribute; + + names (c, names_member); + } + + os << "return s;" + << "}"; + + + // Register with type map. + // + if (polymorphic && polymorphic_p (c) && !anonymous_p (c)) + { + // Note that we are using the original type name. + // + String const& name (ename (c)); + + os << "static" << endl + << "const ::xsd::cxx::tree::stream_insertion_initializer< " << + "0, " << i->c_str () << ", " << + char_type << ", " << name << " >" << endl + << "_xsd_" << name << "_stream_insertion_init_" << + n++ << " (" << endl + << strlit (c.name ()) << "," << endl + << strlit (xml_ns_name (c)) << ");" + << endl; + } + } + } + + private: + Traversal::Inherits inherits_; + BaseTypeName base_; + }; + } + + Void + generate_stream_insertion_source (Context& ctx) + { + if (ctx.polymorphic) + { + Streams const& st (ctx.options.value<CLI::generate_insertion> ()); + + ctx.os << "#include <xsd/cxx/tree/stream-insertion-map.hxx>" << endl + << endl; + + Boolean import_maps (ctx.options.value<CLI::import_maps> ()); + Boolean export_maps (ctx.options.value<CLI::export_maps> ()); + + if (import_maps || export_maps) + { + ctx.os << "#ifndef XSD_NO_EXPORT" << endl + << endl + << "namespace xsd" + << "{" + << "namespace cxx" + << "{" + << "namespace tree" + << "{"; + + for (Streams::ConstIterator i (st.begin ()); i != st.end (); ++i) + { + String stream (*i); + + ctx.os << "#ifdef _MSC_VER" << endl; + + if (export_maps) + ctx.os << "template struct __declspec (dllexport) " << + "stream_insertion_plate< 0, " << stream << ", " << + ctx.char_type << " >;"; + + if (import_maps) + ctx.os << "template struct __declspec (dllimport) " << + "stream_insertion_plate< 0, " << stream << ", " << + ctx.char_type << " >;"; + + ctx.os << "#elif defined(__GNUC__) && __GNUC__ >= 4" << endl + << "template struct __attribute__ ((visibility(\"default\"))) " << + "stream_insertion_plate< 0, " << stream << ", " << + ctx.char_type << " >;" + << "#elif defined(XSD_MAP_VISIBILITY)" << endl + << "template struct XSD_MAP_VISIBILITY " << + "stream_insertion_plate< 0, " << stream << ", " << + ctx.char_type << " >;" + << "#endif" << endl; + } + + ctx.os << "}" // tree + << "}" // cxx + << "}" // xsd + << "#endif // XSD_NO_EXPORT" << endl + << endl; + } + + ctx.os << "namespace _xsd" + << "{"; + + UnsignedLong n (0); + for (Streams::ConstIterator i (st.begin ()); i != st.end (); ++i) + { + String stream (*i); + + ctx.os << "static" << endl + << "const ::xsd::cxx::tree::stream_insertion_plate< 0, " << + stream << ", " << ctx.char_type << " >" << endl + << "stream_insertion_plate_init_" << n++ << ";"; + } + + ctx.os << "}"; + } + + Traversal::Schema schema; + + Traversal::Sources sources; + Traversal::Names names_ns, names; + + Namespace ns (ctx); + + List list (ctx); + Union union_ (ctx); + Complex complex (ctx); + Enumeration enumeration (ctx); + + schema >> sources >> schema; + schema >> names_ns >> ns >> names; + + names >> list; + names >> union_; + names >> complex; + names >> enumeration; + + schema.dispatch (ctx.schema_root); + } + } +} diff --git a/xsd/xsd/cxx/tree/stream-insertion-source.hxx b/xsd/xsd/cxx/tree/stream-insertion-source.hxx new file mode 100644 index 0000000..b270912 --- /dev/null +++ b/xsd/xsd/cxx/tree/stream-insertion-source.hxx @@ -0,0 +1,20 @@ +// file : xsd/cxx/tree/stream-insertion-source.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef CXX_TREE_INSERTION_SOURCE_HXX +#define CXX_TREE_INSERTION_SOURCE_HXX + +#include <cxx/tree/elements.hxx> + +namespace CXX +{ + namespace Tree + { + Void + generate_stream_insertion_source (Context&); + } +} + +#endif // CXX_TREE_INSERTION_SOURCE_HXX diff --git a/xsd/xsd/cxx/tree/stream-source.cxx b/xsd/xsd/cxx/tree/stream-source.cxx new file mode 100644 index 0000000..e8a7fc4 --- /dev/null +++ b/xsd/xsd/cxx/tree/stream-source.cxx @@ -0,0 +1,489 @@ +// file : xsd/cxx/tree/stream-source.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <cxx/tree/stream-source.hxx> + +#include <xsd-frontend/semantic-graph.hxx> +#include <xsd-frontend/traversal.hxx> + +namespace CXX +{ + namespace Tree + { + namespace + { + struct List: Traversal::List, Context + { + List (Context& c) + : Context (c) + { + } + + virtual Void + traverse (Type& l) + { + String name (ename (l)); + + // If renamed name is empty then we do not need to generate + // anything for this type. + // + if (renamed_type (l, name) && !name) + return; + + SemanticGraph::Type& item_type (l.argumented ().type ()); + String base (L"::xsd::cxx::tree::list< " + + item_type_name (item_type) + L", " + char_type); + + if (item_type.is_a<SemanticGraph::Fundamental::Double> ()) + base += L", ::xsd::cxx::tree::schema_type::double_"; + else if (item_type.is_a<SemanticGraph::Fundamental::Decimal> ()) + base += L", ::xsd::cxx::tree::schema_type::decimal"; + + base += L" >"; + + os << std_ostream_type << "&" << endl + << "operator<< (" << std_ostream_type << "& o, " << + "const " << name << "& i)" + << "{" + << "return o << static_cast< const " << base << "& > (i);" + << "}"; + + // Register with ostream map. + // + if (polymorphic && polymorphic_p (l) && !anonymous_p (l)) + { + // Note that we are using the original type name. + // + String const& name (ename (l)); + + os << "static" << endl + << "const ::xsd::cxx::tree::std_ostream_initializer< 0, " << + char_type << ", " << name << " >" << endl + << "_xsd_" << name << "_std_ostream_init;" + << endl; + } + } + + private: + String + item_type_name (SemanticGraph::Type& t) + { + std::wostringstream o; + + MemberTypeName type (*this, o); + type.dispatch (t); + + return o.str (); + } + }; + + + struct Union: Traversal::Union, Context + { + Union (Context& c) + : Context (c) + { + } + + virtual Void + traverse (Type& u) + { + String name (ename (u)); + + // If renamed name is empty then we do not need to generate + // anything for this type. + // + if (renamed_type (u, name) && !name) + return; + + os << std_ostream_type << "&" << endl + << "operator<< (" << std_ostream_type << "& o, " << + "const " << name << "& i)" + << "{" + << "return o << static_cast< const " << xs_string_type << "& > (i);" + << "}"; + + // Register with ostream map. + // + if (polymorphic && polymorphic_p (u) && !anonymous_p (u)) + { + // Note that we are using the original type name. + // + String const& name (ename (u)); + + os << "static" << endl + << "const ::xsd::cxx::tree::std_ostream_initializer< 0, " << + char_type << ", " << name << " >" << endl + << "_xsd_" << name << "_std_ostream_init;" + << endl; + } + } + }; + + + struct Enumeration: Traversal::Enumeration, Context + { + Enumeration (Context& c) + : Context (c), base_ (c) + { + inherits_base_ >> base_; + } + + virtual Void + traverse (Type& e) + { + String name (ename (e)); + + // If renamed name is empty then we do not need to generate + // anything for this type. + // + if (renamed_type (e, name) && !name) + return; + + Boolean string_based (false); + { + IsStringBasedType t (string_based); + t.dispatch (e); + } + + Boolean enum_based (false); + if (string_based) + { + SemanticGraph::Enumeration* be (0); + IsEnumBasedType t (be); + t.dispatch (e); + + enum_based = (be != 0); + } + + // If we are based on an enum then the value type is just an + // alias and we don't need to generate this operator again. + // + if (string_based && !enum_based) + { + os << std_ostream_type << "&" << endl + << "operator<< (" << std_ostream_type << "& o, " << + name << "::" << evalue (e) << " i)" + << "{" + << "return o << " << name << "::_xsd_" << name << + "_literals_[i];" + << "}"; + } + + os << std_ostream_type << "&" << endl + << "operator<< (" << std_ostream_type << "& o, " << + "const " << name << "& i)" + << "{" + << "return o << static_cast< const "; + + inherits (e, inherits_base_); + + os << "& > (i);" + << "}"; + + // Register with ostream map. + // + if (polymorphic && polymorphic_p (e) && !anonymous_p (e)) + { + // Note that we are using the original type name. + // + String const& name (ename (e)); + + os << "static" << endl + << "const ::xsd::cxx::tree::std_ostream_initializer< 0, " << + char_type << ", " << name << " >" << endl + << "_xsd_" << name << "_std_ostream_init;" + << endl; + } + } + + private: + Traversal::Inherits inherits_base_; + BaseTypeName base_; + }; + + struct Element: Traversal::Element, Context + { + Element (Context& c, String const& scope_) + : Context (c), scope (scope_) + { + } + + virtual Void + traverse (Type& e) + { + if (skip (e)) + return; + + String const& aname (eaname (e)); + + // Check if we need to handle xsi:type and substitution groups. + // If this element's type is anonymous then we don't need to do + // anything. Note that if the type is anonymous then it can't be + // derived from which makes it impossible to substitute or + // dynamically-type with xsi:type. + // + SemanticGraph::Type& t (e.type ()); + Boolean poly (polymorphic && polymorphic_p (t) && !anonymous_p (t)); + + // aCC cannot handle an inline call to std_ostream_map_instance. + // + if (poly) + { + os << "{" + << "::xsd::cxx::tree::std_ostream_map< " << char_type + << " >& om (" << endl + << "::xsd::cxx::tree::std_ostream_map_instance< 0, " << + char_type << " > ());" + << endl; + } + + if (max (e) != 1) + { + // sequence + // + os << "for (" << scope << "::" << econst_iterator (e) << endl + << "b (i." << aname << " ().begin ()), " << + "e (i." << aname << " ().end ());" << endl + << "b != e; ++b)" + << "{" + << "o << ::std::endl << " << strlit (e.name () + L": "); + + if (!poly) + os << " << *b;"; + else + os << ";" + << "om.insert (o, *b);"; + + os << "}"; + } + else if (min (e) == 0) + { + // optional + // + + os << "if (i." << aname << " ())" + << "{" + << "o << ::std::endl << " << strlit (e.name () + L": "); + + if (!poly) + os << " << *i." << aname << " ();"; + else + os << ";" + << "om.insert (o, *i." << aname << " ());"; + + os << "}"; + } + else + { + // one + // + os << "o << ::std::endl << " << strlit (e.name () + L": "); + + if (!poly) + os << " << i." << aname << " ();"; + else + os << ";" + << "om.insert (o, i." << aname << " ());"; + } + + if (poly) + os << "}"; + } + + private: + String scope; + }; + + struct Attribute: Traversal::Attribute, Context + { + Attribute (Context& c) + : Context (c) + { + } + + virtual Void + traverse (Type& a) + { + String const& aname (eaname (a)); + + if (a.optional_p () && !a.default_p ()) + { + os << "if (i." << aname << " ())" + << "{" + << "o << ::std::endl << " << strlit (a.name () + L": ") << + " << *i." << aname << " ();" + << "}"; + } + else + { + os << "o << ::std::endl << " << strlit (a.name () + L": ") << + " << i." << aname << " ();"; + } + } + }; + + + struct Complex: Traversal::Complex, Context + { + Complex (Context& c) + : Context (c), base_ (c) + { + inherits_ >> base_; + } + + virtual Void + traverse (Type& c) + { + String name (ename (c)); + + // If renamed name is empty then we do not need to generate + // anything for this type. + // + if (renamed_type (c, name) && !name) + return; + + // + // + Boolean has_body (has<Traversal::Member> (c) || c.inherits_p ()); + + os << std_ostream_type << "&" << endl + << "operator<< (" << std_ostream_type << "& o, " << + "const " << name << "&" << (has_body ? " i" : "") << ")" + << "{"; + + if (c.inherits_p ()) + { + os << "o << static_cast< const "; + + inherits (c, inherits_); + + os << "& > (i);" + << endl; + } + + { + Traversal::Names names_member; + Element element (*this, name); + Attribute attribute (*this); + + names_member >> element; + names_member >> attribute; + + names (c, names_member); + } + + os << "return o;" + << "}"; + + // Register with ostream map. + // + if (polymorphic && polymorphic_p (c) && !anonymous_p (c)) + { + // Note that we are using the original type name. + // + String const& name (ename (c)); + + os << "static" << endl + << "const ::xsd::cxx::tree::std_ostream_initializer< 0, " << + char_type << ", " << name << " >" << endl + << "_xsd_" << name << "_std_ostream_init;" + << endl; + } + } + + private: + Traversal::Inherits inherits_; + BaseTypeName base_; + }; + } + + Void + generate_stream_source (Context& ctx, + UnsignedLong first, + UnsignedLong last) + { + String c (ctx.char_type); + + ctx.os << "#include <ostream>" << endl + << endl; + + if (ctx.polymorphic) + { + ctx.os << "#include <xsd/cxx/tree/std-ostream-map.hxx>" << endl + << endl; + + Boolean import_maps (ctx.options.value<CLI::import_maps> ()); + Boolean export_maps (ctx.options.value<CLI::export_maps> ()); + + if (import_maps || export_maps) + { + ctx.os << "#ifndef XSD_NO_EXPORT" << endl + << endl + << "namespace xsd" + << "{" + << "namespace cxx" + << "{" + << "namespace tree" + << "{" + << "#ifdef _MSC_VER" << endl; + + if (export_maps) + ctx.os << "template struct __declspec (dllexport) " << + "std_ostream_plate< 0, " << ctx.char_type << " >;"; + + if (import_maps) + ctx.os << "template struct __declspec (dllimport) " << + "std_ostream_plate< 0, " << ctx.char_type << " >;"; + + ctx.os << "#elif defined(__GNUC__) && __GNUC__ >= 4" << endl + << "template struct __attribute__ ((visibility(\"default\"))) " << + "std_ostream_plate< 0, " << ctx.char_type << " >;"; + + ctx.os << "#elif defined(XSD_MAP_VISIBILITY)" << endl + << "template struct XSD_MAP_VISIBILITY " << + "std_ostream_plate< 0, " << ctx.char_type << " >;"; + + ctx.os << "#endif" << endl + << "}" // tree + << "}" // cxx + << "}" // xsd + << "#endif // XSD_NO_EXPORT" << endl + << endl; + } + + ctx.os << "namespace _xsd" + << "{" + << "static" << endl + << "const ::xsd::cxx::tree::std_ostream_plate< 0, " << + ctx.char_type << " >" << endl + << "std_ostream_plate_init;" + << "}"; + } + + Traversal::Schema schema; + + Traversal::Sources sources; + Traversal::Names names_ns, names; + + Namespace ns (ctx, first, last); + + List list (ctx); + Union union_ (ctx); + Complex complex (ctx); + Enumeration enumeration (ctx); + + schema >> sources >> schema; + schema >> names_ns >> ns >> names; + + names >> list; + names >> union_; + names >> complex; + names >> enumeration; + + schema.dispatch (ctx.schema_root); + } + } +} diff --git a/xsd/xsd/cxx/tree/stream-source.hxx b/xsd/xsd/cxx/tree/stream-source.hxx new file mode 100644 index 0000000..13e8f37 --- /dev/null +++ b/xsd/xsd/cxx/tree/stream-source.hxx @@ -0,0 +1,22 @@ +// file : xsd/cxx/tree/stream-source.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef CXX_TREE_STREAM_SOURCE_HXX +#define CXX_TREE_STREAM_SOURCE_HXX + +#include <cxx/tree/elements.hxx> + +namespace CXX +{ + namespace Tree + { + Void + generate_stream_source (Context&, + UnsignedLong first, + UnsignedLong last); + } +} + +#endif // CXX_TREE_STREAM_SOURCE_HXX diff --git a/xsd/xsd/cxx/tree/tree-forward.cxx b/xsd/xsd/cxx/tree/tree-forward.cxx new file mode 100644 index 0000000..214cc75 --- /dev/null +++ b/xsd/xsd/cxx/tree/tree-forward.cxx @@ -0,0 +1,327 @@ +// file : xsd/cxx/tree/tree-forward.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <cxx/tree/tree-forward.hxx> +#include <cxx/tree/fundamental-header.hxx> + +#include <xsd-frontend/semantic-graph.hxx> +#include <xsd-frontend/traversal.hxx> + +namespace CXX +{ + namespace Tree + { + namespace + { + struct List: Traversal::List, Context + { + List (Context& c) + : Context (c) + { + } + + virtual Void + traverse (Type& l) + { + String const& name (ename (l)); + + if (String custom = custom_type (l)) + { + String new_name; + renamed_type (l, new_name); + + if (new_name) + os << "class " << new_name << ";"; + + if (custom == name) + os << "class " << name << ";"; + else + os << "typedef " << custom << " " << name << ";"; + } + else + os << "class " << name << ";"; + } + }; + + struct Union: Traversal::Union, Context + { + Union (Context& c) + : Context (c) + { + } + + virtual Void + traverse (Type& u) + { + String const& name (ename (u)); + + if (String custom = custom_type (u)) + { + String new_name; + renamed_type (u, new_name); + + if (new_name) + os << "class " << new_name << ";"; + + if (custom == name) + os << "class " << name << ";"; + else + os << "typedef " << custom << " " << name << ";"; + } + else + os << "class " << name << ";"; + } + }; + + struct Enumeration: Traversal::Enumeration, Context + { + Enumeration (Context& c) + : Context (c) + { + } + + virtual Void + traverse (Type& e) + { + String const& name (ename (e)); + + if (String custom = custom_type (e)) + { + String new_name; + renamed_type (e, new_name); + + if (new_name) + os << "class " << new_name << ";"; + + if (custom == name) + os << "class " << name << ";"; + else + os << "typedef " << custom << " " << name << ";"; + } + else + os << "class " << name << ";"; + } + }; + + struct Complex: Traversal::Complex, Context + { + Complex (Context& c) + : Context (c) + { + } + + virtual Void + traverse (Type& c) + { + String const& name (ename (c)); + + if (String custom = custom_type (c)) + { + String new_name; + renamed_type (c, new_name); + + if (new_name) + os << "class " << new_name << ";"; + + if (custom == name) + os << "class " << name << ";"; + else + os << "typedef " << custom << " " << name << ";"; + } + else + os << "class " << name << ";"; + } + }; + } + + Void + generate_forward (Context& ctx) + { + NarrowString xml_schema (ctx.options.value<CLI::extern_xml_schema> ()); + + // Inlcude or Emit fundamental types. + // + if (xml_schema) + { + String name (ctx.hxx_expr->merge (xml_schema)); + + ctx.os << "#include " << ctx.process_include_path (name) << endl + << endl; + } + else + { + if (ctx.char_type == L"char" && ctx.char_encoding != L"custom") + { + ctx.os << "#include <xsd/cxx/xml/char-" << ctx.char_encoding << + ".hxx>" << endl + << endl; + } + + ctx.os << "#include <xsd/cxx/tree/exceptions.hxx>" << endl + << "#include <xsd/cxx/tree/elements.hxx>" << endl + << "#include <xsd/cxx/tree/types.hxx>" << endl + << endl; + + if (!ctx.options.value<CLI::suppress_parsing> () || + ctx.options.value<CLI::generate_serialization> ()) + { + ctx.os << "#include <xsd/cxx/xml/error-handler.hxx>" << endl + << endl; + } + + if (!ctx.options.value<CLI::suppress_parsing> () || + ctx.options.value<CLI::generate_serialization> ()) + { + ctx.os << "#include <xsd/cxx/xml/dom/auto-ptr.hxx>" << endl + << endl; + } + + Boolean element_map (ctx.options.value<CLI::generate_element_map> ()); + + if (element_map) + ctx.os << "#include <xsd/cxx/tree/element-map.hxx>" << endl + << endl; + + // I need to include all the "optional" headers here (instead of + // later in the individual generators for each feature because + // those headers provide implementation for the fundamental types. + // + if (!ctx.options.value<CLI::suppress_parsing> ()) + { + ctx.os << "#include <xsd/cxx/tree/parsing.hxx>" << endl; + + Traversal::Schema schema, xsd; + Traversal::Implies implies; + Traversal::Names names; + Traversal::Namespace ns; + Traversal::Names ns_names; + FundIncludes type (ctx, "parsing"); + + schema >> implies >> xsd >> names >> ns >> ns_names >> type; + + schema.dispatch (ctx.schema_root); + + if (element_map) + ctx.os << "#include <xsd/cxx/tree/parsing/element-map.txx>" << + endl; + + ctx.os << endl; + } + + if (ctx.options.value<CLI::generate_serialization> ()) + { + ctx.os << "#include <xsd/cxx/xml/dom/serialization-header.hxx>" << endl + << "#include <xsd/cxx/tree/serialization.hxx>" << endl; + + Traversal::Schema schema, xsd; + Traversal::Implies implies; + Traversal::Names names; + Traversal::Namespace ns; + Traversal::Names ns_names; + FundIncludes type (ctx, "serialization"); + + schema >> implies >> xsd >> names >> ns >> ns_names >> type; + + schema.dispatch (ctx.schema_root); + + if (element_map) + ctx.os << "#include <xsd/cxx/tree/serialization/element-map.txx>" << + endl; + + ctx.os << endl; + } + + if (ctx.options.value<CLI::generate_ostream> ()) + { + ctx.os << "#include <xsd/cxx/tree/std-ostream-operators.hxx>" << endl + << endl; + } + + typedef Containers::Vector<NarrowString> Streams; + + Streams const& ist (ctx.options.value<CLI::generate_insertion> ()); + if (!ist.empty ()) + { + for (Streams::ConstIterator i (ist.begin ()); i != ist.end (); ++i) + { + if (*i == "ACE_OutputCDR") + ctx.os << "#include <xsd/cxx/tree/ace-cdr-stream-insertion.hxx>" + << endl; + else if (*i == "XDR") + ctx.os << "#include <xsd/cxx/tree/xdr-stream-insertion.hxx>" + << endl; + } + + ctx.os << "#include <xsd/cxx/tree/stream-insertion.hxx>" << endl + << endl; + } + + Streams const& est (ctx.options.value<CLI::generate_extraction> ()); + if (!est.empty ()) + { + for (Streams::ConstIterator i (est.begin ()); i != est.end (); ++i) + { + if (*i == "ACE_InputCDR") + ctx.os << "#include <xsd/cxx/tree/ace-cdr-stream-extraction.hxx>" + << endl; + else if (*i == "XDR") + ctx.os << "#include <xsd/cxx/tree/xdr-stream-extraction.hxx>" + << endl; + } + + ctx.os << "#include <xsd/cxx/tree/stream-extraction.hxx>" << endl + << endl; + } + + + Traversal::Schema schema, xsd; + Traversal::Implies implies; + Traversal::Names names; + FundamentalNamespace ns (ctx); + + schema >> implies >> xsd >> names >> ns; + + schema.dispatch (ctx.schema_root); + } + + // First emit header includes. + // + if (ctx.options.value<CLI::generate_forward> ()) + { + Traversal::Schema schema; + Includes includes (ctx, Includes::forward); + + schema >> includes; + + schema.dispatch (ctx.schema_root); + } + + ctx.os << "// Forward declarations." << endl + << "//" << endl; + + Traversal::Schema schema; + Traversal::Sources sources; + Traversal::Names names_ns, names; + Namespace ns (ctx); + + List list (ctx); + Union union_ (ctx); + Complex complex (ctx); + Enumeration enumeration (ctx); + + schema >> sources >> schema; + schema >> names_ns >> ns >> names; + + names >> list; + names >> union_; + names >> complex; + names >> enumeration; + + schema.dispatch (ctx.schema_root); + + ctx.os << endl; + } + } +} diff --git a/xsd/xsd/cxx/tree/tree-forward.hxx b/xsd/xsd/cxx/tree/tree-forward.hxx new file mode 100644 index 0000000..efe0e02 --- /dev/null +++ b/xsd/xsd/cxx/tree/tree-forward.hxx @@ -0,0 +1,20 @@ +// file : xsd/cxx/tree/tree-forward.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef CXX_TREE_TREE_FORWARD_HXX +#define CXX_TREE_TREE_FORWARD_HXX + +#include <cxx/tree/elements.hxx> + +namespace CXX +{ + namespace Tree + { + Void + generate_forward (Context&); + } +} + +#endif // CXX_TREE_TREE_FORWARD_HXX diff --git a/xsd/xsd/cxx/tree/tree-header.cxx b/xsd/xsd/cxx/tree/tree-header.cxx new file mode 100644 index 0000000..9b5acc6 --- /dev/null +++ b/xsd/xsd/cxx/tree/tree-header.cxx @@ -0,0 +1,3867 @@ +// file : xsd/cxx/tree/tree-header.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <xsd-frontend/semantic-graph.hxx> +#include <xsd-frontend/traversal.hxx> + +#include <cxx/tree/tree-header.hxx> +#include <cxx/tree/default-value.hxx> +#include <cxx/tree/fundamental-header.hxx> + +namespace CXX +{ + namespace Tree + { + namespace + { + typedef Containers::Vector<NarrowString> Streams; + + // List mapping. + // + struct List: Traversal::List, Context + { + List (Context& c) + : Context (c) + { + } + + virtual Void + traverse (Type& l) + { + String name (ename (l)); + + // If renamed name is empty then we do not need to generate + // anything for this type. + // + if (renamed_type (l, name) && !name) + return; + + if (doxygen) + { + os << "/**" << endl + << " * @brief List class corresponding to the %" << + comment (l.name ()) << endl + << " * schema type." << endl + << " *" << endl + << " * This class has an interface of a standard C++ " << + "sequence (e.g.," << endl + << " * std::vector)." << endl; + + if (l.annotated_p ()) + { + os << " *" << endl; + write_annotation (l.annotation ()); + } + + os << " */" << endl; + } + + SemanticGraph::Type& item_type (l.argumented ().type ()); + String item_name (item_type_name (item_type)); + String base_type (L"::xsd::cxx::tree::list< " + item_name + L", " + + char_type); + + if (item_type.is_a<SemanticGraph::Fundamental::Double> ()) + base_type += L", ::xsd::cxx::tree::schema_type::double_"; + else if (item_type.is_a<SemanticGraph::Fundamental::Decimal> ()) + base_type += L", ::xsd::cxx::tree::schema_type::decimal"; + + base_type += L" >"; + + os << "class " << type_exp << name << + ": public " << any_simple_type << "," << endl + << " public " << base_type + << "{" + << "public:" << endl; + + // c-tor () + // + if (doxygen) + { + os << "/**" << endl + << " * @brief Default constructor." << endl + << " *" << endl + << " * Creates an empty list." << endl + << " */" << endl; + } + os << name << " ();" + << endl; + + // c-tor (size_type, const X& x) + // + if (doxygen) + { + os << "/**" << endl + << " * @brief Create a list with copies of the specified " << + "element." << endl + << " *" << endl + << " * @param n A number of elements to copy." << endl + << " * @param x An element to copy." << endl + << " *" << endl + << " * This constructor creates a list with @a n copies " << + "of @a x." << endl + << " */" << endl; + } + + String size_type (name != L"size_type" + ? String (L"size_type") + : base_type + L"::size_type"); + + os << name << " (" << size_type << " n, const " << item_name << + "& x);" + << endl; + + // c-tor (const I& begin, const I& end) + // + if (doxygen) + { + os << "/**" << endl + << " * @brief Create a list from an iterator range." << endl + << " *" << endl + << " * @param begin An iterator pointing to the first " << + "element." << endl + << " * @param end An iterator pointing to the one past " << + "the last element." << endl + << " *" << endl + << " * This constructor creates a list consisting of " << + "copies of the" << endl + << " * elements in the range [begin,end)." << endl + << " */" << endl; + } + + String iter_type (unclash (name, "I")); + + os << "template < typename " << iter_type << " >" << endl + << name << " (const " << iter_type << "& begin, const " << + iter_type << "& end)" << endl + << ": " << base_type << " (begin, end, this)" + << "{" + << "}"; + + // c-tor (istream&) + // + Streams const& st (options.value<CLI::generate_extraction> ()); + for (Streams::ConstIterator i (st.begin ()); i != st.end (); ++i) + { + if (doxygen) + { + os << "/**" << endl + << " * @brief Create an instance from a data " << + "representation" << endl + << " * stream." << endl + << " *" << endl + << " * @param s A stream to extract the data from." << endl + << " * @param f Flags to create the new instance with." << endl + << " * @param c A pointer to the object that will " << + "contain the new" << endl + << " * instance." << endl + << " */" << endl; + } + + os << name << " (" << istream_type << "< " << i->c_str () << + " >& s," << endl + << flags_type << " f = 0," << endl + << container << "* c = 0);" + << endl; + } + + if (!options.value<CLI::suppress_parsing> ()) + { + // c-tor (xercesc::DOMElement) + // + if (doxygen) + { + os << "/**" << endl + << " * @brief Create an instance from a DOM element." << endl + << " *" << endl + << " * @param e A DOM element to extract the data from." << endl + << " * @param f Flags to create the new instance with." << endl + << " * @param c A pointer to the object that will " << + "contain the new" << endl + << " * instance." << endl + << " */" << endl; + } + + os << name << " (const " << xerces_ns << "::DOMElement& e," << endl + << flags_type << " f = 0," << endl + << container << "* c = 0);" + << endl; + + // c-tor (xercesc::DOMAttr) + // + if (doxygen) + { + os << "/**" << endl + << " * @brief Create an instance from a DOM attribute." << endl + << " *" << endl + << " * @param a A DOM attribute to extract the data from." << endl + << " * @param f Flags to create the new instance with." << endl + << " * @param c A pointer to the object that will " << + "contain the new" << endl + << " * instance." << endl + << " */" << endl; + } + + os << name << " (const " << xerces_ns << "::DOMAttr& a," << endl + << flags_type << " f = 0," << endl + << container << "* c = 0);" + << endl; + + // c-tor (std::basic_string const&, xercesc::DOMElement) + // + if (doxygen) + { + os << "/**" << endl + << " * @brief Create an instance from a string fragment." << endl + << " *" << endl + << " * @param s A string fragment to extract the data from." << endl + << " * @param e A pointer to DOM element containing the " << + "string fragment." << endl + << " * @param f Flags to create the new instance with." << endl + << " * @param c A pointer to the object that will " << + "contain the new" << endl + << " * instance." << endl + << " */" << endl; + } + + os << name << " (const " << string_type << "& s," << endl + << "const " << xerces_ns << "::DOMElement* e," << endl + << flags_type << " f = 0," << endl + << container << "* c = 0);" + << endl; + } + + // copy c-tor () + // + if (doxygen) + { + os << "/**" << endl + << " * @brief Copy constructor." << endl + << " *" << endl + << " * @param x An instance to make a copy of." << endl + << " * @param f Flags to create the copy with." << endl + << " * @param c A pointer to the object that will contain " << + "the copy." << endl + << " *" << endl + << " * For polymorphic object models use the @c _clone " << + "function instead." << endl + << " */" << endl; + } + + os << name << " (const " << name << "& x," << endl + << flags_type << " f = 0," << endl + << container << "* c = 0);" + << endl; + + // clone + // + if (doxygen) + { + os << "/**" << endl + << " * @brief Copy the instance polymorphically." << endl + << " *" << endl + << " * @param f Flags to create the copy with." << endl + << " * @param c A pointer to the object that will contain " << + "the copy." << endl + << " * @return A pointer to the dynamically allocated copy." << endl + << " *" << endl + << " * This function ensures that the dynamic type of the " << + "instance is" << endl + << " * used for copying and should be used for polymorphic " << + "object" << endl + << " * models instead of the copy constructor." << endl + << " */" << endl; + } + + os << "virtual " << name << "*" << endl + << "_clone (" << flags_type << " f = 0," << endl + << container << "* c = 0) const;" + << endl; + + // d-tor + // + if (doxygen) + { + os << "/**" << endl + << " * @brief Destructor." << endl + << " */" << endl; + } + + os << "virtual " << endl + << "~" << name << " ();"; + + os << "};"; + } + + private: + String + item_type_name (SemanticGraph::Type& t) + { + std::wostringstream o; + + MemberTypeName type (*this, o); + type.dispatch (t); + + return o.str (); + } + }; + + + // Union mapping. + // + struct Union: Traversal::Union, Context + { + Union (Context& c) + : Context (c) + { + } + + virtual Void + traverse (Type& u) + { + String name (ename (u)); + + // If renamed name is empty then we do not need to generate + // anything for this type. + // + if (renamed_type (u, name) && !name) + return; + + if (doxygen) + { + os << "/**" << endl + << " * @brief Union class corresponding to the %" << + comment (u.name ()) << endl + << " * schema type." << endl + << " *" << endl + << " * The mapping represents unions as strings." << endl; + + if (u.annotated_p ()) + { + os << " *" << endl; + write_annotation (u.annotation ()); + } + + os << " */" << endl; + } + + os << "class " << type_exp << name << + ": public " << xs_string_type + << "{" + << "public:" << endl + << endl; + + if (options.value<CLI::generate_default_ctor> ()) + { + // c-tor () + // + if (doxygen) + { + os << "/**" << endl + << " * @brief Default constructor." << endl + << " *" << endl + << " * Note that this constructor may leave the " << + "instance in an" << endl + << " * invalid state." << endl + << " */" << endl; + } + + os << name << " ();" + << endl; + } + + // c-tor (const char*) + // + if (doxygen) + { + os << "/**" << endl + << " * @brief Create an instance from a C string." << endl + << " *" << endl + << " * @param v A string value." << endl + << " */" << endl; + } + os << name << " (const " << char_type << "* v);" + << endl; + + // c-tor (string const&) + // + if (doxygen) + { + os << "/**" << endl + << " * @brief Create an instance from a string." << endl + << " *" << endl + << " * @param v A string value." << endl + << " */" << endl; + } + os << name << " (const " << string_type << "& v);" + << endl; + + // c-tor (istream&) + // + Streams const& st (options.value<CLI::generate_extraction> ()); + for (Streams::ConstIterator i (st.begin ()); i != st.end (); ++i) + { + if (doxygen) + { + os << "/**" << endl + << " * @brief Create an instance from a data " << + "representation" << endl + << " * stream." << endl + << " *" << endl + << " * @param s A stream to extract the data from." << endl + << " * @param f Flags to create the new instance with." << endl + << " * @param c A pointer to the object that will " << + "contain the new" << endl + << " * instance." << endl + << " */" << endl; + } + + os << name << " (" << istream_type << "< " << i->c_str () << + " >& s," << endl + << flags_type << " f = 0," << endl + << container << "* c = 0);" + << endl; + } + + if (!options.value<CLI::suppress_parsing> ()) + { + // c-tor (xercesc::DOMElement) + // + if (doxygen) + { + os << "/**" << endl + << " * @brief Create an instance from a DOM element." << endl + << " *" << endl + << " * @param e A DOM element to extract the data from." << endl + << " * @param f Flags to create the new instance with." << endl + << " * @param c A pointer to the object that will " << + "contain the new" << endl + << " * instance." << endl + << " */" << endl; + } + + os << name << " (const " << xerces_ns << "::DOMElement& e," << endl + << flags_type << " f = 0," << endl + << container << "* c = 0);" + << endl; + + // c-tor (xercesc::DOMAttr) + // + if (doxygen) + { + os << "/**" << endl + << " * @brief Create an instance from a DOM attribute." << endl + << " *" << endl + << " * @param a A DOM attribute to extract the data from." << endl + << " * @param f Flags to create the new instance with." << endl + << " * @param c A pointer to the object that will " << + "contain the new" << endl + << " * instance." << endl + << " */" << endl; + } + + os << name << " (const " << xerces_ns << "::DOMAttr& a," << endl + << flags_type << " f = 0," << endl + << container << "* c = 0);" + << endl; + + // c-tor (std::basic_string const&, xercesc::DOMElement) + // + if (doxygen) + { + os << "/**" << endl + << " * @brief Create an instance from a string fragment." << endl + << " *" << endl + << " * @param s A string fragment to extract the data from." << endl + << " * @param e A pointer to DOM element containing the " << + "string fragment." << endl + << " * @param f Flags to create the new instance with." << endl + << " * @param c A pointer to the object that will " << + "contain the new" << endl + << " * instance." << endl + << " */" << endl; + } + + os << name << " (const " << string_type << "& s," << endl + << "const " << xerces_ns << "::DOMElement* e," << endl + << flags_type << " f = 0," << endl + << container << "* c = 0);" + << endl; + } + + // copy c-tor () + // + if (doxygen) + { + os << "/**" << endl + << " * @brief Copy constructor." << endl + << " *" << endl + << " * @param x An instance to make a copy of." << endl + << " * @param f Flags to create the copy with." << endl + << " * @param c A pointer to the object that will contain " << + "the copy." << endl + << " *" << endl + << " * For polymorphic object models use the @c _clone " << + "function instead." << endl + << " */" << endl; + } + + os << name << " (const " << name << "& x," << endl + << flags_type << " f = 0," << endl + << container << "* c = 0);" + << endl; + + // clone + // + if (doxygen) + { + os << "/**" << endl + << " * @brief Copy the instance polymorphically." << endl + << " *" << endl + << " * @param f Flags to create the copy with." << endl + << " * @param c A pointer to the object that will contain " << + "the copy." << endl + << " * @return A pointer to the dynamically allocated copy." << endl + << " *" << endl + << " * This function ensures that the dynamic type of the " << + "instance is" << endl + << " * used for copying and should be used for polymorphic " << + "object" << endl + << " * models instead of the copy constructor." << endl + << " */" << endl; + } + + os << "virtual " << name << "*" << endl + << "_clone (" << flags_type << " f = 0," << endl + << container << "* c = 0) const;" + << endl; + + os << "};"; + } + }; + + // Enum mapping. + // + struct Enumerator: Traversal::Enumerator, Context + { + Enumerator (Context& c) + : Context (c) + { + } + + virtual Void + traverse (Type& e) + { + if (doxygen && e.annotated_p ()) + { + os << "/**" << endl; + write_annotation (e.annotation ()); + os << " */" << endl; + } + + os << ename (e); + } + }; + + struct Enumeration: Traversal::Enumeration, Context + { + Enumeration (Context& c) + : Context (c), + base_ (c), + member_ (c), + enumerator_ (c) + { + inherits_base_ >> base_; + inherits_member_ >> member_; + + names_ >> enumerator_; + } + + virtual Void + traverse (Type& e) + { + String name (ename (e)); + + // If renamed name is empty then we do not need to generate + // anything for this type. + // + if (renamed_type (e, name) && !name) + return; + + Boolean string_based (false); + { + IsStringBasedType t (string_based); + t.dispatch (e); + } + + Boolean enum_based (false); + SemanticGraph::Enumeration* base_enum (0); + + if (string_based) + { + IsEnumBasedType t (base_enum); + t.dispatch (e); + + if (base_enum != 0) + enum_based = true; + } + + String value; + if (string_based) + value = evalue (e); + + // Get to the ultimate base and see if is a fundamental type. + // + Boolean fund_based (false); + SemanticGraph::Type& ult_base (ultimate_base (e)); + { + IsFundamentalType t (fund_based); + t.dispatch (ult_base); + } + + // Count enumerators. + // + UnsignedLong enum_count (0); + + for (Type::NamesIterator i (e.names_begin ()), end (e.names_end ()); + i != end; ++i) + ++enum_count; + + // + // + if (doxygen) + { + os << "/**" << endl + << " * @brief Enumeration class corresponding to the %" << + comment (e.name ()) << endl + << " * schema type." << endl; + + if (e.annotated_p ()) + { + os << " *" << endl; + write_annotation (e.annotation ()); + } + + os << " */" << endl; + } + + os << "class " << type_exp << name << ": public "; + + // Enumeration always has a base. + // + inherits (e, inherits_base_); + + os << "{" + << "public:" << endl; + + if (string_based) + { + if (doxygen) + { + os << endl + << "/**" << endl + << " * @brief Underlying enum type." << endl + << " */" << endl; + } + + if (enum_based) + { + os << "typedef "; + + inherits (e, inherits_base_); + + os << "::" << evalue (*base_enum) << " " << value << ";" + << endl; + } + else + { + os << "enum " << value + << "{"; + + names<Enumeration> (e, names_, 0, 0, 0, &Enumeration::comma); + + os << "};"; + } + } + + // default c-tor + // + if (options.value<CLI::generate_default_ctor> ()) + { + if (doxygen) + { + os << "/**" << endl + << " * @brief Default constructor." << endl + << " *" << endl + << " * Note that this constructor may leave the " << + "instance in an" << endl + << " * invalid state." << endl + << " */" << endl; + } + + os << name << " ();" + << endl; + } + + // c-tor (value) + // + if (string_based) + { + if (doxygen) + { + os << "/**" << endl + << " * @brief Create an instance from the " << + "underlying enum value." << endl + << " *" << endl + << " * @param v A enum value." << endl + << " */" << endl; + } + + os << name << " (" << value << " v);" + << endl; + } + + // c-tor (const char*) + // + if (string_based) + { + if (doxygen) + { + os << "/**" << endl + << " * @brief Create an instance from a C string." << endl + << " *" << endl + << " * @param v A string value." << endl + << " */" << endl; + } + + os << name << " (const " << char_type << "* v);" + << endl; + } + + // c-tor (const std::string&) + // + if (string_based) + { + if (doxygen) + { + os << "/**" << endl + << " * @brief Create an instance from a string." << endl + << " *" << endl + << " * @param v A string value." << endl + << " */" << endl; + } + + os << name << " (const " << string_type << "& v);" + << endl; + } + + // c-tor (fundamental) + // + if (fund_based) + { + if (doxygen) + { + os << "/**" << endl + << " * @brief Create an instance from a fundamental " << + "type value." << endl + << " *" << endl + << " * @param v A fundamental type value." << endl + << " */" << endl; + } + + os << name << " ("; + + member_.dispatch (ult_base); + + os << " v);" + << endl; + } + + // c-tor (base) + // + // If the ultimate is also our immediate base and it is a + // fundamental type then this c-tor clashes with c-tor + // (fundamental) above. + // + if (!fund_based || &ult_base != &e.inherits ().base ()) + { + if (doxygen) + { + os << "/**" << endl + << " * @brief Create an instance from the " << + "base value." << endl + << " *" << endl + << " * @param v A base value." << endl + << " */" << endl; + } + + os << name << " (const "; + + inherits (e, inherits_member_); + + os << "& v);" + << endl; + } + + + // c-tor (istream&) + // + Streams const& st (options.value<CLI::generate_extraction> ()); + for (Streams::ConstIterator i (st.begin ()); i != st.end (); ++i) + { + if (doxygen) + { + os << "/**" << endl + << " * @brief Create an instance from a data " << + "representation" << endl + << " * stream." << endl + << " *" << endl + << " * @param s A stream to extract the data from." << endl + << " * @param f Flags to create the new instance with." << endl + << " * @param c A pointer to the object that will " << + "contain the new" << endl + << " * instance." << endl + << " */" << endl; + } + + os << name << " (" << istream_type << "< " << i->c_str () << + " >& s," << endl + << flags_type << " f = 0," << endl + << container << "* c = 0);" + << endl; + } + + if (!options.value<CLI::suppress_parsing> ()) + { + // c-tor (xercesc::DOMElement) + // + if (doxygen) + { + os << "/**" << endl + << " * @brief Create an instance from a DOM element." << endl + << " *" << endl + << " * @param e A DOM element to extract the data from." << endl + << " * @param f Flags to create the new instance with." << endl + << " * @param c A pointer to the object that will " << + "contain the new" << endl + << " * instance." << endl + << " */" << endl; + } + + os << name << " (const " << xerces_ns << "::DOMElement& e," << endl + << flags_type << " f = 0," << endl + << container << "* c = 0);" + << endl; + + // c-tor (xercesc::DOMAttr) + // + if (doxygen) + { + os << "/**" << endl + << " * @brief Create an instance from a DOM attribute." << endl + << " *" << endl + << " * @param a A DOM attribute to extract the data from." << endl + << " * @param f Flags to create the new instance with." << endl + << " * @param c A pointer to the object that will " << + "contain the new" << endl + << " * instance." << endl + << " */" << endl; + } + + os << name << " (const " << xerces_ns << "::DOMAttr& a," << endl + << flags_type << " f = 0," << endl + << container << "* c = 0);" + << endl; + + // c-tor (std::basic_string const&, xercesc::DOMElement) + // + if (doxygen) + { + os << "/**" << endl + << " * @brief Create an instance from a string fragment." << endl + << " *" << endl + << " * @param s A string fragment to extract the data from." << endl + << " * @param e A pointer to DOM element containing the " << + "string fragment." << endl + << " * @param f Flags to create the new instance with." << endl + << " * @param c A pointer to the object that will " << + "contain the new" << endl + << " * instance." << endl + << " */" << endl; + } + + os << name << " (const " << string_type << "& s," << endl + << "const " << xerces_ns << "::DOMElement* e," << endl + << flags_type << " f = 0," << endl + << container << "* c = 0);" + << endl; + } + + // copy c-tor + // + if (doxygen) + { + os << "/**" << endl + << " * @brief Copy constructor." << endl + << " *" << endl + << " * @param x An instance to make a copy of." << endl + << " * @param f Flags to create the copy with." << endl + << " * @param c A pointer to the object that will contain " << + "the copy." << endl + << " *" << endl + << " * For polymorphic object models use the @c _clone " << + "function instead." << endl + << " */" << endl; + } + + os << name << " (const " << name << "& x," << endl + << flags_type << " f = 0," << endl + << container << "* c = 0);" + << endl; + + // clone + // + if (doxygen) + { + os << "/**" << endl + << " * @brief Copy the instance polymorphically." << endl + << " *" << endl + << " * @param f Flags to create the copy with." << endl + << " * @param c A pointer to the object that will contain " << + "the copy." << endl + << " * @return A pointer to the dynamically allocated copy." << endl + << " *" << endl + << " * This function ensures that the dynamic type of the " << + "instance is" << endl + << " * used for copying and should be used for polymorphic " << + "object" << endl + << " * models instead of the copy constructor." << endl + << " */" << endl; + } + + os << "virtual " << name << "*" << endl + << "_clone (" << flags_type << " f = 0," << endl + << container << "* c = 0) const;" + << endl; + + // operator= (value) + // + if (string_based) + { + if (doxygen) + { + os << "/**" << endl + << " * @brief Assign the underlying enum value." << endl + << " *" << endl + << " * @param v A enum value." << endl + << " * @return A refernce to the instance." << endl + << " */" << endl; + } + + os << name << "&" << endl + << "operator= (" << value << " v);" + << endl; + } + + // operator value () + // + // Name lookup differences in various compilers make generation + // of this operator outside of the class a really hard task. So + // we are going to make it "always inline". + // + if (string_based) + { + if (doxygen) + { + os << "/**" << endl + << " * @brief Implicit conversion operator to the " << + "underlying" << endl + << " * enum value." << endl + << " *" << endl + << " * @return A enum value." << endl + << " */" << endl; + } + + os << "virtual" << endl + << "operator " << value << " () const" + << "{" + << "return _xsd_" << name << "_convert ();" + << "}"; + } + + // + // + if (string_based) + { + if (doxygen) + os << "//@cond" << endl + << endl; + + os << "protected:" << endl + << value << endl + << "_xsd_" << name << "_convert () const;" + << endl; + + os << "public:" << endl; + + if (enum_based) + { + // We are going to reuse our base's literals. + // + os << "static const " << char_type << "* const* " << + "_xsd_" << name << "_literals_;"; + } + else + { + os << "static const " << char_type << "* const " << + "_xsd_" << name << "_literals_[" << enum_count << "];"; + } + + os << "static const " << value << + " _xsd_" << name << "_indexes_[" << enum_count << "];"; + + if (doxygen) + os << endl + << "//@endcond" << endl + << endl; + } + + os << "};"; + } + + virtual Void + comma (Type&) + { + os << "," << endl; + } + + private: + Traversal::Inherits inherits_base_; + BaseTypeName base_; + + Traversal::Inherits inherits_member_; + MemberTypeName member_; + + Traversal::Names names_; + Enumerator enumerator_; + }; + + + // + // + struct MemberFunction: Traversal::Member, Context + { + MemberFunction (Context& c) + : Context (c) + { + } + + virtual Void + traverse (Type& m) + { + if (skip (m)) + return; + + String const& aname (eaname (m)); + String const& mname (emname (m)); + String kind (m.is_a<SemanticGraph::Element> () + ? "element" : "attribute"); + + Boolean fund (false); + { + IsFundamentalType t (fund); + t.dispatch (m.type ()); + } + + Boolean def_attr (m.default_p () && + m.is_a<SemanticGraph::Attribute> ()); + + if (max (m) != 1) + { + // sequence + // + String container (econtainer (m)); + + // container const& + // name () const; + // + if (doxygen) + { + os << "/**" << endl + << " * @brief Return a read-only (constant) reference " << + "to the element" << endl + << " * sequence." << endl + << " *" << endl + << " * @return A constant reference to the sequence " << + "container." << endl + << " */" << endl; + } + + os << "const " << container << "&" << endl + << aname << " () const;" + << endl; + + // container& + // name (); + // + if (doxygen) + { + os << "/**" << endl + << " * @brief Return a read-write reference to the " << + "element sequence." << endl + << " *" << endl + << " * @return A reference to the sequence container." << endl + << " */" << endl; + } + + os << container << "&" << endl + << aname << " ();" + << endl; + + // void + // name (container const&); + // + if (doxygen) + { + os << "/**" << endl + << " * @brief Copy elements from a given sequence." << endl + << " *" << endl + << " * @param s A sequence to copy elements from." << endl + << " *" << endl + << " * For each element in @a s this function " << + "makes a copy and adds it " << endl + << " * to the sequence. Note that this operation " << + "completely changes the " << endl + << " * sequence and all old elements will be lost." << endl + << " */" << endl; + } + + os << "void" << endl + << mname << " (const " << container << "& s);" + << endl; + } + else if (min (m) == 0 && !def_attr) + { + // optional + // + String const& type (etype (m)); + String container (econtainer (m)); + + // container const& + // name () const; + // + if (doxygen) + { + os << "/**" << endl + << " * @brief Return a read-only (constant) reference " << + "to the " << kind << endl + << " * container." << endl + << " *" << endl + << " * @return A constant reference to the optional " << + "container." << endl + << " */" << endl; + } + + os << "const " << container << "&" << endl + << aname << " () const;" + << endl; + + // container& + // name (); + // + if (doxygen) + { + os << "/**" << endl + << " * @brief Return a read-write reference to the " << + kind << " container." << endl + << " *" << endl + << " * @return A reference to the optional container." << endl + << " */" << endl; + } + + os << container << "&" << endl + << aname << " ();" + << endl; + + // void + // name (type const&); + // + if (doxygen) + { + os << "/**" << endl + << " * @brief Set the " << kind << " value." << endl + << " *" << endl + << " * @param x A new value to set." << endl + << " *" << endl + << " * This function makes a copy of its argument " << + "and sets it as" << endl + << " * the new value of the " << kind << "." << endl + << " */" << endl; + } + + os << "void" << endl + << mname << " (const " << type << "& x);" + << endl; + + // void + // name (container const&); + // + if (doxygen) + { + os << "/**" << endl + << " * @brief Set the " << kind << " value." << endl + << " *" << endl + << " * @param x An optional container with the new value " << + "to set." << endl + << " *" << endl + << " * If the value is present in @a x then this function " << + "makes a copy " << endl + << " * of this value and sets it as the new value of the " << + kind << "." << endl + << " * Otherwise the " << kind << " container is set " << + "the 'not present' state." << endl + << " */" << endl; + } + + os << "void" << endl + << mname << " (const " << container << "& x);" + << endl; + + // void + // name (auto_ptr<type>); + // + if (!fund) + { + if (doxygen) + { + os << "/**" << endl + << " * @brief Set the " << kind << " value without " << + "copying." << endl + << " *" << endl + << " * @param p A new value to use." << endl + << " *" << endl + << " * This function will try to use the passed value " << + "directly instead" << endl + << " * of making a copy." << endl + << " */" << endl; + } + + os << "void" << endl + << mname << " (::std::auto_ptr< " << type << " > p);" + << endl; + } + } + else + { + // one + // + String const& type (etype (m)); + + // type const& + // name () const; + // + if (doxygen) + { + os << "/**" << endl + << " * @brief Return a read-only (constant) reference " << + "to the " << kind << "." << endl + << " *" << endl + << " * @return A constant reference to the " << kind << + "." << endl + << " */" << endl; + } + + os << "const " << type << "&" << endl + << aname << " () const;" + << endl; + + // Do not generate modifiers for fixed attributes. + // + if (!(def_attr && m.fixed_p ())) + { + // type& + // name (); + // + if (doxygen) + { + os << "/**" << endl + << " * @brief Return a read-write reference to the " << + kind << "." << endl + << " *" << endl + << " * @return A reference to the " << kind << "." << endl + << " */" << endl; + } + + os << type << "&" << endl + << aname << " ();" + << endl; + + // void + // name (type const&); + // + if (doxygen) + { + os << "/**" << endl + << " * @brief Set the " << kind << " value." << endl + << " *" << endl + << " * @param x A new value to set." << endl + << " *" << endl + << " * This function makes a copy of its argument " << + "and sets it as" << endl + << " * the new value of the " << kind << "." << endl + << " */" << endl; + } + + os << "void" << endl + << mname << " (const " << type << "& x);" + << endl; + + // void + // name (auto_ptr<type>); + // + if (!fund) + { + if (doxygen) + { + os << "/**" << endl + << " * @brief Set the " << kind << " value without " << + "copying." << endl + << " *" << endl + << " * @param p A new value to use." << endl + << " *" << endl + << " * This function will try to use the passed value " << + "directly" << endl + << " * instead of making a copy." << endl + << " */" << endl; + } + + os << "void" << endl + << mname << " (::std::auto_ptr< " << type << " > p);" + << endl; + + } + + // auto_ptr<type> + // detach_name (); + // + if (detach && !fund) + { + if (doxygen) + { + os << "/**" << endl + << " * @brief Detach the " << kind << " value from " << + "the object model." << endl + << " *" << endl + << " * @return A pointer to the " << kind << " value." << endl + << " *" << endl + << " * Note that this function leaves the required " << + kind << " in " << endl + << " * the original object model uninitialized." << endl + << " */" << endl; + } + + os << "::std::auto_ptr< " << type << " >" << endl + << edname (m) << " ();" + << endl; + } + } + } + + // default_value + // + if (m.default_p ()) + { + Boolean simple (true); + + if (m.is_a<SemanticGraph::Element> ()) + { + IsSimpleType test (simple); + test.dispatch (m.type ()); + } + + if (simple) + { + Boolean lit (false); + { + IsLiteralValue test (lit); + test.dispatch (m.type ()); + } + + if (doxygen) + { + os << "/**" << endl + << " * @brief Return the default value for the " << + kind << "." << endl + << " *" << endl; + + if (lit) + os << " * @return The " << kind << "'s default value." << endl; + else + os << " * @return A read-only (constant) reference to the " + << kind << "'s" << endl + << " * default value." << endl; + + os << " */" << endl; + } + + if (lit) + os << "static " << etype (m) << endl; + else + os << "static const " << etype (m) << "&" << endl; + + os << edefault_value (m) << " ();" + << endl; + } + } + } + }; + + struct AnyFunction: Traversal::Any, Context + { + AnyFunction (Context& c) + : Context (c) + { + } + + virtual Void + traverse (SemanticGraph::Any& a) + { + String const& aname (eaname (a)); + String const& mname (emname (a)); + + SemanticGraph::Complex& c ( + dynamic_cast<SemanticGraph::Complex&> (a.scope ())); + + if (max (a) != 1) + { + // sequence + // + String container (econtainer (a)); + + // container const& + // name () const; + // + if (doxygen) + { + os << "/**" << endl + << " * @brief Return a read-only (constant) reference " << + "to the wildcard" << endl + << " * element sequence." << endl + << " *" << endl + << " * @return A constant reference to the sequence " << + "container." << endl + << " */" << endl; + } + + os << "const " << container << "&" << endl + << aname << " () const;" + << endl; + + // container& + // name (); + // + if (doxygen) + { + os << "/**" << endl + << " * @brief Return a read-write reference to the " << + "wildcard element" << endl + << " * sequence." << endl + << " *" << endl + << " * @return A reference to the sequence container." << endl + << " */" << endl; + } + + os << container << "&" << endl + << aname << " ();" + << endl; + + // void + // name (container const&); + // + if (doxygen) + { + os << "/**" << endl + << " * @brief Copy elements from a given sequence." << endl + << " *" << endl + << " * @param s A sequence to copy elements from." << endl + << " *" << endl + << " * For each element in @a s this function " << + "makes a copy and adds" << endl + << " * it to the wildcard element sequence. Note that " << + "this operation" << endl + << " * completely changes the sequence and all old " << + "elements will be" << endl + << " * lost." << endl + << " */" << endl; + } + + os << "void" << endl + << mname << " (const " << container << "& s);" + << endl; + } + else if (min (a) == 0) + { + // optional + // + String container (econtainer (a)); + + // container const& + // name () const; + // + if (doxygen) + { + os << "/**" << endl + << " * @brief Return a read-only (constant) reference " << + "to the wildcard" << endl + << " * element container." << endl + << " *" << endl + << " * @return A constant reference to the optional " << + "container." << endl + << " */" << endl; + } + + os << "const " << container << "&" << endl + << aname << " () const;" + << endl; + + // container& + // name (); + // + if (doxygen) + { + os << "/**" << endl + << " * @brief Return a read-write reference to the " << + "wildcard element" << endl + << " * container." << endl + << " *" << endl + << " * @return A reference to the optional container." << endl + << " */" << endl; + } + + os << container << "&" << endl + << aname << " ();" + << endl; + + // void + // name (type const&); + // + if (doxygen) + { + os << "/**" << endl + << " * @brief Set the wildcard content." << endl + << " *" << endl + << " * @param e A new element to set." << endl + << " *" << endl + << " * This function makes a copy of its argument " << + "and sets it as" << endl + << " * the new wildcard content." << endl + << " */" << endl; + } + + os << "void" << endl + << mname << " (const " << xerces_ns << "::DOMElement& e);" + << endl; + + // void + // name (type*); + // + if (doxygen) + { + os << "/**" << endl + << " * @brief Set the wildcard content without copying." << endl + << " *" << endl + << " * @param p A new element to use." << endl + << " *" << endl + << " * This function will use the passed element " << + "directly instead" << endl + << " * of making a copy. For this to work the element " << + "should belong" << endl + << " * to the DOM document associated with this instance." << endl + << " *" << endl + << " * @see " << edom_document (c) << endl + << " */" << endl; + } + + os << "void" << endl + << mname << " (" << xerces_ns << "::DOMElement* p);" + << endl; + + // void + // name (container const&); + // + if (doxygen) + { + os << "/**" << endl + << " * @brief Set the wildcard content." << endl + << " *" << endl + << " * @param x An optional container with the new " << + "element to set." << endl + << " *" << endl + << " * If the element is present in @a x then this function " << + "makes a " << endl + << " * copy of this element and sets it as the new wildcard " << + "content." << endl + << " * Otherwise the element container is set the 'not " << + "present' state." << endl + << " */" << endl; + } + + os << "void" << endl + << mname << " (const " << container << "& x);" + << endl; + } + else + { + // one + // + + // type const& + // name () const; + // + if (doxygen) + { + os << "/**" << endl + << " * @brief Return a read-only (constant) reference " << + "to the wildcard" << endl + << " * element." << endl + << " *" << endl + << " * @return A constant reference to the DOM element." << endl + << " */" << endl; + } + + os << "const " << xerces_ns << "::DOMElement&" << endl + << aname << " () const;" + << endl; + + // type& + // name (); + // + if (doxygen) + { + os << "/**" << endl + << " * @brief Return a read-write reference to the " << + "wildcard element." << endl + << " *" << endl + << " * @return A reference to the DOM element." << endl + << " */" << endl; + } + + os << xerces_ns << "::DOMElement&" << endl + << aname << " ();" + << endl; + + // void + // name (type const&); + // + if (doxygen) + { + os << "/**" << endl + << " * @brief Set the wildcard content." << endl + << " *" << endl + << " * @param e A new element to set." << endl + << " *" << endl + << " * This function makes a copy of its argument " << + "and sets it as" << endl + << " * the new wildcard content." << endl + << " */" << endl; + } + + os << "void" << endl + << mname << " (const " << xerces_ns << "::DOMElement& e);" + << endl; + + // void + // name (const*); + // + if (doxygen) + { + os << "/**" << endl + << " * @brief Set the wildcard content without copying." << endl + << " *" << endl + << " * @param p A new element to use." << endl + << " *" << endl + << " * This function will use the passed element " << + "directly instead" << endl + << " * of making a copy. For this to work the element " << + "should belong" << endl + << " * to the DOM document associated with this instance." << endl + << " *" << endl + << " * @see " << edom_document (c) << endl + << " */" << endl; + } + + os << "void" << endl + << mname << " (" << xerces_ns << "::DOMElement* p);" + << endl; + } + } + + virtual Void + traverse (SemanticGraph::AnyAttribute& a) + { + String const& aname (eaname (a)); + String const& mname (emname (a)); + + String container (econtainer (a)); + + // container const& + // name () const; + // + if (doxygen) + { + os << "/**" << endl + << " * @brief Return a read-only (constant) reference " << + "to the" << endl + << " * attribute set." << endl + << " *" << endl + << " * @return A constant reference to the set " << + "container." << endl + << " */" << endl; + } + + os << "const " << container << "&" << endl + << aname << " () const;" + << endl; + + // container& + // name (); + // + if (doxygen) + { + os << "/**" << endl + << " * @brief Return a read-write reference to the " << + "attribute set." << endl + << " *" << endl + << " * @return A reference to the set container." << endl + << " */" << endl; + } + + os << container << "&" << endl + << aname << " ();" + << endl; + + // void + // name (container const&); + // + if (doxygen) + { + os << "/**" << endl + << " * @brief Copy attributes from a given set." << endl + << " *" << endl + << " * @param s A set to copy elements from." << endl + << " *" << endl + << " * For each attribute in @a s this function " << + "makes a copy and adds" << endl + << " * it to the set. Note that this operation " << + "completely changes the " << endl + << " * set and all old attributes will be lost." << endl + << " */" << endl; + } + + os << "void" << endl + << mname << " (const " << container << "& s);" + << endl; + } + }; + + // + // + struct Member: Traversal::Member, Context + { + Member (Context& c) + : Context (c), + type_name_ (c), + member_function_ (c) + { + belongs_ >> type_name_; + } + + virtual Void + traverse (Type& m) + { + if (skip (m)) + return; + + String const& type (etype (m)); + Boolean el (m.is_a<SemanticGraph::Element> ()); + + Boolean def_attr (m.default_p () && !el); + + if (doxygen) + { + os << "/**" << endl + << " * @name " << comment (m.name ()) << endl + << " *" << endl + << " * @brief Accessor and modifier functions for the %" << + comment (m.name ()) << endl + << " * "; + + if (max (m) != 1) + { + os << "sequence element." << endl; + } + else if (min (m) == 0) + { + if (def_attr) + os << "optional attribute with a default value." << endl; + else + os << "optional " << (el ? "element." : "attribute.") << endl; + } + else + { + os << "required " << (el ? "element." : "attribute.") << endl; + } + + if (m.annotated_p ()) + { + os << " *" << endl; + write_annotation (m.annotation ()); + } + + os << " */" << endl + << "//@{" << endl; + } + else + { + os << "// " << comment (m.name ()) << endl + << "// " << endl; + } + + // Typedefs. + // + if (doxygen) + { + os << endl + << "/**" << endl + << " * @brief " << (el ? "Element" : "Attribute") << + " type." << endl + << " */" << endl; + } + + os << "typedef "; + + belongs (m, belongs_); + + os << " " << type << ";"; + + if (max (m) != 1) + { + String const& container (econtainer (m)); + Boolean isense (options.value<CLI::generate_intellisense> ()); + + // sequence + // + if (doxygen) + { + os << endl + << "/**" << endl + << " * @brief Element sequence container type." << endl + << " */" << endl; + } + + os << "typedef ::xsd::cxx::tree::sequence< " << type << " > " << + container << ";"; + + if (doxygen) + { + os << endl + << "/**" << endl + << " * @brief Element iterator type." << endl + << " */" << endl; + } + + // IntelliSense does not not like aliases and fully-qualified + // names here. + // + if (!isense) + os << "typedef " << container << "::iterator " << + eiterator (m) << ";"; + else + os << "typedef xsd::cxx::tree::sequence< " << type << + " >::iterator " << eiterator (m) << ";"; + + if (doxygen) + { + os << endl + << "/**" << endl + << " * @brief Element constant iterator type." << endl + << " */" << endl; + } + + if (!isense) + os << "typedef " << container << "::const_iterator " << + econst_iterator (m) << ";"; + else + os << "typedef xsd::cxx::tree::sequence< " << type << + " >::const_iterator " << econst_iterator (m) << ";"; + + } + else if (min (m) == 0 && !def_attr) + { + // optional + // + if (doxygen) + { + os << endl + << "/**" << endl + << " * @brief " << (el ? "Element" : "Attribute") << + " optional container type." << endl + << " */" << endl; + } + + os << "typedef ::xsd::cxx::tree::optional< " << type << " > " << + econtainer (m) << ";"; + } + else + { + // one + // + } + + if (doxygen) + { + os << endl + << "/**" << endl + << " * @brief " << (el ? "Element" : "Attribute") << + " traits type." << endl + << " */" << endl; + } + os << "typedef ::xsd::cxx::tree::traits< " << type << ", " << + char_type; + + SemanticGraph::Type& t (m.type ()); + + if (t.is_a<SemanticGraph::Fundamental::Double> ()) + os << ", ::xsd::cxx::tree::schema_type::double_"; + else if (t.is_a<SemanticGraph::Fundamental::Decimal> ()) + os << ", ::xsd::cxx::tree::schema_type::decimal"; + + os << " > " << etraits (m) << ";" + << endl; + + member_function_.traverse (m); + + if (doxygen) + { + os << "//@}" << endl + << endl; + } + } + + private: + MemberTypeName type_name_; + Traversal::Belongs belongs_; + + MemberFunction member_function_; + }; + + + struct Any: Traversal::Any, + Traversal::AnyAttribute, + Context + { + Any (Context& c) + : Context (c), any_function_ (c) + { + } + + virtual Void + traverse (SemanticGraph::Any& a) + { + if (doxygen) + { + os << "/**" << endl + << " * @name " << ename (a) << endl + << " *" << endl + << " * @brief Accessor and modifier functions for the " << + "any wildcard." << endl; + + if (a.annotated_p ()) + { + os << " *" << endl; + write_annotation (a.annotation ()); + } + + os << " */" << endl + << "//@{" << endl; + } + else + { + os << "// " << ename (a) << endl + << "// " << endl; + } + + // Typedefs. + // + if (max (a) != 1) + { + String const& container (econtainer (a)); + + // sequence + // + if (doxygen) + { + os << endl + << "/**" << endl + << " * @brief DOM element sequence container type." << endl + << " */" << endl; + } + + os << "typedef ::xsd::cxx::tree::element_sequence " << + container << ";"; + + if (doxygen) + { + os << endl + << "/**" << endl + << " * @brief DOM element iterator type." << endl + << " */" << endl; + } + + os << "typedef " << container << "::iterator " << + eiterator (a) << ";"; + + if (doxygen) + { + os << endl + << "/**" << endl + << " * @brief DOM element constant iterator type." << endl + << " */" << endl; + } + + os << "typedef " << container << "::const_iterator " << + econst_iterator (a) << ";" + << endl; + + } + else if (min (a) == 0) + { + // optional + // + if (doxygen) + { + os << endl + << "/**" << endl + << " * @brief DOM element optional container type." << endl + << " */" << endl; + } + + os << "typedef ::xsd::cxx::tree::element_optional " << + econtainer (a) << ";" + << endl; + } + else + { + // one + // + if (doxygen) + os << endl; + } + + any_function_.traverse (a); + + if (doxygen) + { + os << "//@}" << endl + << endl; + } + } + + virtual Void + traverse (SemanticGraph::AnyAttribute& a) + { + String const& container (econtainer (a)); + + if (doxygen) + { + os << "/**" << endl + << " * @name " << ename (a) << endl + << " *" << endl + << " * @brief Accessor and modifier functions for the " << + "anyAttribute" << endl + << " * wildcard." << endl; + + if (a.annotated_p ()) + { + os << " *" << endl; + write_annotation (a.annotation ()); + } + + os << " */" << endl + << "//@{" << endl; + } + else + { + os << "// " << ename (a) << endl + << "// " << endl; + } + + if (doxygen) + { + os << endl + << "/**" << endl + << " * @brief DOM attribute set container type." << endl + << " */" << endl; + } + + os << "typedef ::xsd::cxx::tree::attribute_set< " << char_type << + " > " << container << ";"; + + if (doxygen) + { + os << endl + << "/**" << endl + << " * @brief DOM attribute iterator type." << endl + << " */" << endl; + } + + os << "typedef " << container << "::iterator " << + eiterator (a) << ";"; + + if (doxygen) + { + os << endl + << "/**" << endl + << " * @brief DOM attribute constant iterator type." << endl + << " */" << endl; + } + + os << "typedef " << container << "::const_iterator " << + econst_iterator (a) << ";" + << endl; + + any_function_.traverse (a); + + if (doxygen) + { + os << "//@}" << endl + << endl; + } + } + + private: + AnyFunction any_function_; + }; + + struct DataMember: Traversal::Member, Context + { + DataMember (Context& c) + : Context (c) + { + } + + virtual Void + traverse (Type& m) + { + if (skip (m)) return; + + String const& member (emember (m)); + + Boolean def_attr (m.default_p () && + m.is_a<SemanticGraph::Attribute> ()); + + if (max (m) != 1) + { + // sequence + // + os << econtainer (m) << " " << member << ";"; + } + else if (min (m) == 0 && !def_attr) + { + // optional + // + os << econtainer (m) << " " << member << ";"; + } + else + { + // one + // + os << "::xsd::cxx::tree::one< " << etype (m) << " > " << + member << ";"; + } + + // default_value + // + if (m.default_p ()) + { + Boolean simple (true); + + if (m.is_a<SemanticGraph::Element> ()) + { + IsSimpleType test (simple); + test.dispatch (m.type ()); + } + + if (simple) + { + Boolean lit (false); + { + IsLiteralValue test (lit); + test.dispatch (m.type ()); + } + + if (!lit) + { + os << "static const " << etype (m) << " " << + edefault_value_member (m) << ";"; + } + } + } + } + }; + + struct DataAny: Traversal::Any, + Traversal::AnyAttribute, + Context + { + DataAny (Context& c) + : Context (c) + { + } + + virtual Void + traverse (SemanticGraph::Any& a) + { + String const& member (emember (a)); + + if (max (a) != 1) + { + // sequence + // + os << econtainer (a) << " " << member << ";"; + } + else if (min (a) == 0) + { + // optional + // + os << econtainer (a) << " " << member << ";"; + } + else + { + // one + // + os << "::xsd::cxx::tree::element_one " << member << ";"; + } + } + + virtual Void + traverse (SemanticGraph::AnyAttribute& a) + { + os << econtainer (a) << " " << emember (a) << ";"; + } + }; + + + struct Complex: Traversal::Complex, Context + { + Complex (Context& c) + : Context (c), + base_name_ (c), + member_name_ (c), + any_ (c), + member_ (c), + data_any_ (c), + data_member_ (c) + { + inherits_base_ >> base_name_; + inherits_member_ >> member_name_; + + names_ >> member_; + if (options.value<CLI::generate_wildcard> ()) + names_ >> any_; + + names_data_ >> data_member_; + if (options.value<CLI::generate_wildcard> ()) + names_data_ >> data_any_; + } + + virtual Void + traverse (Type& c) + { + String name (ename (c)); + + // If renamed name is empty then we do not need to generate + // anything for this type. + // + if (renamed_type (c, name) && !name) + return; + + Boolean has_members (has<Traversal::Member> (c)); + + Boolean hae (has<Traversal::Any> (c)); + Boolean haa (has<Traversal::AnyAttribute> (c)); + + Boolean gen_wildcard (options.value<CLI::generate_wildcard> ()); + + Boolean simple (true); + { + IsSimpleType t (simple); + t.dispatch (c); + } + + Boolean string_based (false); + { + IsStringBasedType t (string_based); + t.dispatch (c); + } + + SemanticGraph::Enumeration* enum_base (0); + { + IsEnumBasedType t (enum_base); + t.dispatch (c); + } + + if (doxygen) + { + os << "/**" << endl + << " * @brief Class corresponding to the %" << + comment (c.name ()) << " schema type." << endl; + + if (c.annotated_p ()) + { + os << " *" << endl; + write_annotation (c.annotation ()); + } + + os << " *" << endl + << " * @nosubgrouping" << endl + << " */" << endl; + } + + os << "class " << type_exp << name << ": public "; + + if (c.inherits_p ()) + inherits (c, inherits_base_); + else + os << any_type; + + os << "{" + << "public:" << endl; + + // Members. + // + names (c, names_); + + // dom_document accessors. + // + if (edom_document_member_p (c)) + { + + if (!doxygen) + { + os << "// DOMDocument for wildcard content." << endl + << "//" << endl; + } + + if (doxygen) + { + os << "/**" << endl + << " * @brief Return a read-only (constant) reference " << + "to the DOM" << endl + << " * document associated with this instance." << endl + << " *" << endl + << " * @return A constant reference to the DOM document." << endl + << " *" << endl + << " * The DOM document returned by this function is " << + "used to store" << endl + << " * the raw XML content corresponding to wildcards." << endl + << " */" << endl; + } + + os << "const " << xerces_ns << "::DOMDocument&" << endl + << edom_document (c) << " () const;" + << endl; + + if (doxygen) + { + os << "/**" << endl + << " * @brief Return a read-write reference to the DOM " << + "document" << endl + << " * associated with this instance." << endl + << " *" << endl + << " * @return A reference to the DOM document." << endl + << " *" << endl + << " * The DOM document returned by this function is " << + "used to store" << endl + << " * the raw XML content corresponding to wildcards." << endl + << " */" << endl; + } + os << xerces_ns << "::DOMDocument&" << endl + << edom_document (c) << " ();" + << endl; + } + + if (doxygen) + { + os << "/**" << endl + << " * @name Constructors" << endl + << " */" << endl + << "//@{" << endl + << endl; + } + else + { + os << "// Constructors." << endl + << "//" << endl; + } + + Boolean generate_no_base_ctor (false); + { + GenerateWithoutBaseCtor t (generate_no_base_ctor); + t.traverse (c); + } + + Boolean has_complex_non_op_args (false); + Boolean has_poly_non_op_args (false); + Boolean complex_poly_args_clash (true); + { + HasComplexPolyNonOptArgs t (*this, true, + has_complex_non_op_args, + has_poly_non_op_args, + complex_poly_args_clash); + t.traverse (c); + } + + // default c-tor + // + if (options.value<CLI::generate_default_ctor> ()) + { + // c-tor (ultimate-base, all-non-optional-members) will become + // default c-tor if our inheritance hierarchy has no required + // members and no simple base. We can also collide with + // c-tor (all-non-optional-members) if we have no required + // members. + // + Boolean generate (false); + { + GenerateDefaultCtor t (*this, generate, generate_no_base_ctor); + t.traverse (c); + } + + if (generate) + { + if (doxygen) + { + os << "/**" << endl + << " * @brief Default constructor." << endl + << " *" << endl + << " * Note that this constructor leaves required " << + "elements and" << endl + << " * attributes uninitialized." << endl + << " */" << endl; + } + + os << name << " ();" + << endl; + } + } + + // c-tor (base, all-non-optional-members) + // + if (options.value<CLI::generate_from_base_ctor> ()) + { + // c-tor (base, all-non-optional-members) will be equivalent to + // c-tor (ultimate-base, all-non-optional-members) unless our + // immediate base's hierarchy has some non-optional members. + // We also need to generate this c-tor when one of the types + // in our inheritance hierarchy was customized since the + // customized version may not necessarily be convertible to + // the base without loss of information. + // + Boolean generate (false); + { + GenerateFromBaseCtor t (*this, generate); + t.traverse (c); + } + + if (generate) + { + Boolean has_complex_non_op_args (false); + Boolean has_poly_non_op_args (false); + Boolean complex_poly_args_clash (true); + { + HasComplexPolyNonOptArgs t (*this, false, + has_complex_non_op_args, + has_poly_non_op_args, + complex_poly_args_clash); + t.traverse (c); + } + + // + // + if (doxygen) + { + os << "/**" << endl + << " * @brief Create an instance from the immediate " + "base and" << endl + << " * initializers for required elements and " + << "attributes." << endl + << " */" << endl; + } + + os << name << " (const "; + inherits (c, inherits_member_); + os << "&"; + { + FromBaseCtorArg args (*this, FromBaseCtorArg::arg_type, false); + Traversal::Names args_names (args); + names (c, args_names); + } + os << ");" + << endl; + + // If we have any complex arguments in the previous c-tor + // then also generate the auto_ptr version. + // + if (has_complex_non_op_args) + { + if (doxygen) + { + os << "/**" << endl + << " * @brief Create an instance from the immediate " + "base and" << endl + << " * initializers for required elements and " + << "attributes" << endl + << " * (auto_ptr version)." << endl + << " *" << endl + << " * This constructor will try to use the passed " << + "values directly" << endl + << " * instead of making copies." << endl + << " */" << endl; + } + + os << name << " (const "; + inherits (c, inherits_member_); + os << "&"; + { + FromBaseCtorArg args ( + *this, FromBaseCtorArg::arg_complex_auto_ptr, false); + Traversal::Names args_names (args); + names (c, args_names); + } + os << ");" + << endl; + } + + // If we are generating polymorphic code then we also need to + // provide auto_ptr version for every polymorphic type. + // + if (polymorphic && + has_poly_non_op_args && !complex_poly_args_clash) + { + if (doxygen) + { + os << "/**" << endl + << " * @brief Create an instance from the immediate " + "base and" << endl + << " * initializers for required elements and " + << "attributes" << endl + << " * (auto_ptr version)." << endl + << " *" << endl + << " * This constructor will try to use the passed " << + "values directly" << endl + << " * instead of making copies." << endl + << " */" << endl; + } + + os << name << " (const "; + inherits (c, inherits_member_); + os << "&"; + { + FromBaseCtorArg args ( + *this, FromBaseCtorArg::arg_poly_auto_ptr, false); + Traversal::Names args_names (args); + names (c, args_names); + } + os << ");" + << endl; + } + } + } + + // c-tor (all-non-optional-members) + // + if (generate_no_base_ctor) + { + if (doxygen) + { + os << "/**" << endl + << " * @brief Create an instance from initializers " << + "for required " << endl + << " * elements and attributes." << endl + << " */" << endl; + } + + os << name << " ("; + { + CtorArgsWithoutBase ctor_args ( + *this, CtorArgsWithoutBase::arg_type, false, true); + ctor_args.dispatch (c); + } + os << ");" + << endl; + + + // If we have any complex arguments in the previous c-tor + // then also generate the auto_ptr version. One case where + // this c-tor will be generated is restriction of anyType. + // + if (has_complex_non_op_args) + { + if (doxygen) + { + os << "/**" << endl + << " * @brief Create an instance from initializers " << + "for required " << endl + << " * elements and attributes (auto_ptr version)." << endl + << " *" << endl + << " * This constructor will try to use the passed " << + "values directly" << endl + << " * instead of making copies." << endl + << " */" << endl; + } + + os << name << " ("; + { + CtorArgsWithoutBase ctor_args ( + *this, CtorArgsWithoutBase::arg_complex_auto_ptr, false, true); + ctor_args.dispatch (c); + } + os << ");" + << endl; + } + + // If we are generating polymorphic code then we also need to + // provide auto_ptr version for every polymorphic type. + // + if (polymorphic && + has_poly_non_op_args && !complex_poly_args_clash) + { + if (doxygen) + { + os << "/**" << endl + << " * @brief Create an instance from initializers " << + "for required " << endl + << " * elements and attributes (auto_ptr version)." << endl + << " *" << endl + << " * This constructor will try to use the passed " << + "values directly" << endl + << " * instead of making copies." << endl + << " */" << endl; + } + + os << name << " ("; + { + CtorArgsWithoutBase ctor_args ( + *this, CtorArgsWithoutBase::arg_poly_auto_ptr, false, true); + ctor_args.dispatch (c); + } + os << ");" + << endl; + } + } + + if (string_based) + { + // We might not have the value type if this enum is customized. + // + if (enum_base != 0 && enum_base->context ().count ("value")) + { + // c-tor (enum-value, all-non-optional-members) + // + if (doxygen) + { + os << "/**" << endl + << " * @brief Create an instance from the " << + "underlying enum value" << endl + << " * and initializers for required elements and " << + "attributes." << endl + << " */" << endl; + } + + os << name << " (" << fq_name (*enum_base) << "::" << + evalue (*enum_base); + + { + CtorArgsWithoutBase ctor_args ( + *this, CtorArgsWithoutBase::arg_type, false, false); + ctor_args.dispatch (c); + } + + os << ");" + << endl; + } + + // c-tor (const char*, all-non-optional-members) + // + if (doxygen) + { + os << "/**" << endl + << " * @brief Create an instance from a C string and " << + "initializers" << endl + << " * for required elements and attributes." << endl + << " */" << endl; + } + + os << name << " (const " << char_type << "*"; + + { + CtorArgsWithoutBase ctor_args ( + *this, CtorArgsWithoutBase::arg_type, false, false); + ctor_args.dispatch (c); + } + + os << ");" + << endl; + + // c-tor (const std::string&, all-non-optional-members) + // + if (doxygen) + { + os << "/**" << endl + << " * @brief Create an instance from a string and" << + "initializers" << endl + << " * for required elements and attributes." << endl + << " */" << endl; + } + + os << name << " (const " << string_type << "&"; + + { + CtorArgsWithoutBase ctor_args ( + *this, CtorArgsWithoutBase::arg_type, false, false); + ctor_args.dispatch (c); + } + + os << ");" + << endl; + } + + // c-tor (ultimate-base, all-non-optional-members) + // + + if (doxygen) + { + os << "/**" << endl + << " * @brief Create an instance from the ultimate " + "base and" << endl + << " * initializers for required elements and " << + "attributes." << endl + << " */" << endl; + } + + os << name << " ("; + + { + CtorArgs ctor_args (*this, CtorArgs::arg_type); + ctor_args.dispatch (c); + } + + os << ");" + << endl; + + // If we have any complex arguments in the previous c-tor + // then also generate the auto_ptr version. + // + if (has_complex_non_op_args) + { + if (doxygen) + { + os << "/**" << endl + << " * @brief Create an instance from the ultimate " + "base and" << endl + << " * initializers for required elements and " << + "attributes" << endl + << " * (auto_ptr version)." << endl + << " *" << endl + << " * This constructor will try to use the passed " << + "values directly" << endl + << " * instead of making copies." << endl + << " */" << endl; + } + + os << name << " ("; + + { + CtorArgs ctor_args (*this, CtorArgs::arg_complex_auto_ptr); + ctor_args.dispatch (c); + } + + os << ");" + << endl; + } + + // If we are generating polymorphic code then we also need to + // provide auto_ptr version for every polymorphic type. + // + if (polymorphic && has_poly_non_op_args && !complex_poly_args_clash) + { + if (doxygen) + { + os << "/**" << endl + << " * @brief Create an instance from the ultimate " + "base and" << endl + << " * initializers for required elements and " << + "attributes" << endl + << " * (auto_ptr version)." << endl + << " *" << endl + << " * This constructor will try to use the passed " << + "values directly" << endl + << " * instead of making copies." << endl + << " */" << endl; + } + + os << name << " ("; + + { + CtorArgs ctor_args (*this, CtorArgs::arg_poly_auto_ptr); + ctor_args.dispatch (c); + } + + os << ");" + << endl; + } + + // c-tor (istream&) + // + Streams const& st (options.value<CLI::generate_extraction> ()); + for (Streams::ConstIterator i (st.begin ()); i != st.end (); ++i) + { + if (doxygen) + { + os << "/**" << endl + << " * @brief Create an instance from a data " << + "representation" << endl + << " * stream." << endl + << " *" << endl + << " * @param s A stream to extract the data from." << endl + << " * @param f Flags to create the new instance with." << endl + << " * @param c A pointer to the object that will " << + "contain the new" << endl + << " * instance." << endl + << " */" << endl; + } + + os << name << " (" << istream_type << "< " << i->c_str () << + " >& s," << endl + << flags_type << " f = 0," << endl + << container << "* c = 0);" + << endl; + } + + + if (!options.value<CLI::suppress_parsing> ()) + { + // c-tor (xercesc::DOMElement) + // + if (doxygen) + { + os << "/**" << endl + << " * @brief Create an instance from a DOM element." << endl + << " *" << endl + << " * @param e A DOM element to extract the data from." << endl + << " * @param f Flags to create the new instance with." << endl + << " * @param c A pointer to the object that will " << + "contain the new" << endl + << " * instance." << endl + << " */" << endl; + } + + os << name << " (const " << xerces_ns << "::DOMElement& e," << endl + << flags_type << " f = 0," << endl + << container << "* c = 0);" + << endl; + + + if (simple) + { + // c-tor (xercesc::DOMAttr) + // + if (doxygen) + { + os << "/**" << endl + << " * @brief Create an instance from a DOM attribute." << endl + << " *" << endl + << " * @param a A DOM attribute to extract the data from." << endl + << " * @param f Flags to create the new instance with." << endl + << " * @param c A pointer to the object that will " << + "contain the new" << endl + << " * instance." << endl + << " */" << endl; + } + + os << name << " (const " << xerces_ns << "::DOMAttr& a," << endl + << flags_type << " f = 0," << endl + << container << "* c = 0);" + << endl; + + // c-tor (std::basic_string const&, xercesc::DOMElement) + // + if (doxygen) + { + os << "/**" << endl + << " * @brief Create an instance from a string fragment." << endl + << " *" << endl + << " * @param s A string fragment to extract the data from." << endl + << " * @param e A pointer to DOM element containing the " << + "string fragment." << endl + << " * @param f Flags to create the new instance with." << endl + << " * @param c A pointer to the object that will " << + "contain the new" << endl + << " * instance." << endl + << " */" << endl; + } + + os << name << " (const " << string_type << "& s," << endl + << "const " << xerces_ns << "::DOMElement* e," << endl + << flags_type << " f = 0," << endl + << container << "* c = 0);" + << endl; + } + } + + // copy c-tor + // + if (doxygen) + { + os << "/**" << endl + << " * @brief Copy constructor." << endl + << " *" << endl + << " * @param x An instance to make a copy of." << endl + << " * @param f Flags to create the copy with." << endl + << " * @param c A pointer to the object that will contain " << + "the copy." << endl + << " *" << endl + << " * For polymorphic object models use the @c _clone " << + "function instead." << endl + << " */" << endl; + } + + os << name << " (const " << name << "& x," << endl + << flags_type << " f = 0," << endl + << container << "* c = 0);" + << endl; + + // clone + // + if (doxygen) + { + os << "/**" << endl + << " * @brief Copy the instance polymorphically." << endl + << " *" << endl + << " * @param f Flags to create the copy with." << endl + << " * @param c A pointer to the object that will contain " << + "the copy." << endl + << " * @return A pointer to the dynamically allocated copy." << endl + << " *" << endl + << " * This function ensures that the dynamic type of the " << + "instance is" << endl + << " * used for copying and should be used for polymorphic " << + "object" << endl + << " * models instead of the copy constructor." << endl + << " */" << endl; + } + + os << "virtual " << name << "*" << endl + << "_clone (" << flags_type << " f = 0," << endl + << container << "* c = 0) const;" + << endl; + + if (doxygen) + { + os << "//@}" << endl + << endl; + } + + // d-tor + // + if (doxygen) + { + os << "/**" << endl + << " * @brief Destructor." << endl + << " */" << endl; + } + + os << "virtual " << endl + << "~" << name << " ();" + << endl; + + // Data members and implementation functions. + // + if (has_members || hae || (haa && gen_wildcard)) + { + os << "// Implementation." << endl + << "//" << endl; + + if (doxygen) + os << endl + << "//@cond" << endl + << endl; + + if (!options.value<CLI::suppress_parsing> ()) + { + // parse (xercesc::DOMElement) + // + os << "protected:" << endl + << "void" << endl + << unclash (name, "parse") << " (" << + parser_type << "&," << endl + << flags_type << ");" + << endl; + } + + os << "protected:" + << endl; + + // parse (istream) + // + if (has_members) + { + for (Streams::ConstIterator i (st.begin ()); i != st.end (); ++i) + { + os << "void" << endl + << unclash (name, "parse") << " (" << + istream_type << "< " << i->c_str () << " >&," << endl + << flags_type << ");" + << endl; + } + } + + // + // + if (edom_document_member_p (c)) + { + os << dom_auto_ptr << "< " << xerces_ns << + "::DOMDocument > " << edom_document_member (c) << ";" + << endl; + } + + // + // + names (c, names_data_); + + if (doxygen) + os << endl + << "//@endcond" << endl; + } + + os << "};"; + + // Comparison operators. + // + if (options.value<CLI::generate_comparison> () && + (has_members || !c.inherits_p () || + ((hae || haa) && gen_wildcard))) + { + os << inst_exp + << "bool" << endl + << "operator== (const " << name << "&, const " << name << "&);" + << endl; + + os << inst_exp + << "bool" << endl + << "operator!= (const " << name << "&, const " << name << "&);" + << endl + << endl; + } + } + + private: + Traversal::Inherits inherits_base_; + BaseTypeName base_name_; + + Traversal::Inherits inherits_member_; + MemberTypeName member_name_; + + Traversal::Names names_; + Any any_; + Member member_; + + Traversal::Names names_data_; + DataAny data_any_; + DataMember data_member_; + }; + + + struct GlobalElement: Traversal::Element, + GlobalElementBase, + Context + { + GlobalElement (Context& c) + : GlobalElementBase (c), Context (c), type_name_ (c) + { + belongs_ >> type_name_; + } + + virtual Void + traverse (Type& e) + { + if (!doc_root_p (e)) + return; + + SemanticGraph::Type& t (e.type ()); + + Boolean fund (false); + { + IsFundamentalType test (fund); + test.dispatch (t); + } + + Boolean simple (true); + if (!fund) + { + IsSimpleType test (simple); + test.dispatch (t); + } + + if (doxygen) + { + os << "/**" << endl + << " * @brief Class corresponding to the %" << + comment (e.name ()) << " root element." << endl; + + if (e.annotated_p ()) + { + os << " *" << endl; + write_annotation (e.annotation ()); + } + + os << " *" << endl + << " * @nosubgrouping" << endl + << " */" << endl; + } + + String const& name (ename (e)); + + os << "class " << type_exp << name << ": public " << element_type + << "{" + << "public:" << endl + << endl; + + String const& type (etype (e)); + + if (doxygen) + { + os << "/**" << endl + << " * @name Element value" << endl + << " *" << endl + << " * @brief Accessor and modifier functions for the " << + "element value." << endl + << " */" << endl + << "//@{" << endl + << endl; + } + else + { + os << "// Element value." << endl + << "//" << endl; + } + + // Typedefs. + // + if (doxygen) + { + os << "/**" << endl + << " * @brief Element value type." << endl + << " */" << endl; + } + + os << "typedef "; + + belongs (e, belongs_); + + os << " " << type << ";"; + + if (doxygen) + { + os << endl + << "/**" << endl + << " * @brief Element value traits type." << endl + << " */" << endl; + } + + os << "typedef ::xsd::cxx::tree::traits< " << type << ", " << + char_type; + + if (t.is_a<SemanticGraph::Fundamental::Double> ()) + os << ", ::xsd::cxx::tree::schema_type::double_"; + else if (t.is_a<SemanticGraph::Fundamental::Decimal> ()) + os << ", ::xsd::cxx::tree::schema_type::decimal"; + + os << " > " << etraits (e) << ";" + << endl; + + // Accessors/modifiers. + // + String const& aname (eaname (e)); + String const& mname (emname (e)); + + // type const& + // name () const; + // + if (doxygen) + { + os << "/**" << endl + << " * @brief Return a read-only (constant) reference " << + "to the element" << endl + << " * value." << endl + << " *" << endl + << " * @return A constant reference to the element value." << + endl + << " */" << endl; + } + + os << "const " << type << "&" << endl + << aname << " () const;" + << endl; + + // type& + // name (); + // + if (doxygen) + { + os << "/**" << endl + << " * @brief Return a read-write reference to the " << + "element value." << endl + << " *" << endl + << " * @return A reference to the element value." << endl + << " */" << endl; + } + + os << type << "&" << endl + << aname << " ();" + << endl; + + // void + // name (type const&); + // + if (doxygen) + { + os << "/**" << endl + << " * @brief Set the element value." << endl + << " *" << endl + << " * @param x A new value to set." << endl + << " *" << endl + << " * This function makes a copy of its argument " << + "and sets it as" << endl + << " * the new value of the element." << endl + << " */" << endl; + } + + os << "void" << endl + << mname << " (const " << type << "& x);" + << endl; + + // void + // name (auto_ptr<type>); + // + if (!fund) + { + if (doxygen) + { + os << "/**" << endl + << " * @brief Set the element value without " << + "copying." << endl + << " *" << endl + << " * @param p A new value to use." << endl + << " *" << endl + << " * This function will try to use the passed value " << + "directly" << endl + << " * instead of making a copy." << endl + << " */" << endl; + } + + os << "void" << endl + << mname << " (::std::auto_ptr< " << type << " > p);" + << endl; + } + + // auto_ptr<type> + // detach_name (); + // + if (detach && !fund) + { + if (doxygen) + { + os << "/**" << endl + << " * @brief Detach the element value from " << + "the object." << endl + << " *" << endl + << " * @return A pointer to the element value." << endl + << " *" << endl + << " * Note that this function leaves the element " << + "object uninitialized." << endl + << " */" << endl; + } + + os << "::std::auto_ptr< " << type << " >" << endl + << edname (e) << " ();" + << endl; + } + + if (doxygen) + { + os << "/**" << endl + << " * @brief Return a read-only (constant) pointer " << + "to the element" << endl + << " * value." << endl + << " *" << endl + << " * @return A constant pointer to the element value " << + "or 0 if this" << endl + << " * element is of a fundamental type." << endl + << " */" << endl; + } + + os << "virtual const " << any_type << "*" << endl + << "_value () const;" + << endl; + + if (doxygen) + { + os << "/**" << endl + << " * @brief Return a pointer to the element value." << endl + << " *" << endl + << " * @return A pointer to the element value or 0 if this " << + "element is" << endl + << " * of a fundamental type." << endl + << " */" << endl; + } + os << "virtual " << any_type << "*" << endl + << "_value ();" + << endl; + + if (doxygen) + { + os << "//@}" << endl + << endl; + } + + // Constructor. + // + + if (doxygen) + { + os << "/**" << endl + << " * @name Constructors" << endl + << " */" << endl + << "//@{" << endl + << endl; + } + else + { + os << "// Constructors." << endl + << "//" << endl; + } + + // default c-tor + // + if (options.value<CLI::generate_default_ctor> ()) + { + if (doxygen) + { + os << "/**" << endl + << " * @brief Default constructor." << endl + << " *" << endl + << " * Note that this constructor leaves the element " << + "value" << endl + << " * uninitialized." << endl + << " */" << endl; + } + + os << name << " ();" + << endl; + } + + // c-tor (value) + // + if (doxygen) + { + os << "/**" << endl + << " * @brief Create an instance from an initializer " << + "for the element" << endl + << " * value." << endl + << " *" << endl + << " * @param x Element value." << endl + << " */" << endl; + } + + os << name << " (const " << type << "& x);" + << endl; + + + // If the element value is a complex type (has elements, + // attributes, or wildcards) then also generate the auto_ptr + // version. If we are generating polymorphic code then we + // also need to provide auto_ptr version for simple types. + // + if (!simple || (polymorphic && polymorphic_p (t))) + { + if (doxygen) + { + os << "/**" << endl + << " * @brief Create an instance from an initializer " << + "for" << endl + << " * the element value (auto_ptr version)." << endl + << " *" << endl + << " * @param p Element value to use." << endl + << " *" << endl + << " * This constructor will try to use the passed " << + "value directly" << endl + << " * instead of making a copy." << endl + << " */" << endl; + } + + os << name << " (::std::auto_ptr< " << type << " > p);" + << endl; + } + + if (!options.value<CLI::suppress_parsing> ()) + { + // c-tor (xercesc::DOMElement) + // + if (doxygen) + { + os << "/**" << endl + << " * @brief Create an instance from a DOM element." << endl + << " *" << endl + << " * @param e A DOM element to extract the data from." << endl + << " * @param f Flags to create the new instance with." << endl + << " */" << endl; + } + + os << name << " (const " << xerces_ns << "::DOMElement& e, " << + flags_type << " f = 0);" + << endl; + } + + // copy c-tor + // + if (doxygen) + { + os << "/**" << endl + << " * @brief Copy constructor." << endl + << " *" << endl + << " * @param x An instance to make a copy of." << endl + << " * @param f Flags to create the copy with." << endl + << " *" << endl + << " * For polymorphic object models use the @c _clone " << + "function instead." << endl + << " */" << endl; + } + + os << name << " (const " << name << "& x, " << + flags_type << " f = 0);" + << endl; + + // _clone + // + if (doxygen) + { + os << "/**" << endl + << " * @brief Copy the instance polymorphically." << endl + << " *" << endl + << " * @param f Flags to create the copy with." << endl + << " * @return A pointer to the dynamically allocated copy." << endl + << " *" << endl + << " * This function ensures that the dynamic type of the " << + "instance is" << endl + << " * used for copying and should be used for polymorphic " << + "object" << endl + << " * models instead of the copy constructor." << endl + << " */" << endl; + } + + os << "virtual " << name << "*" << endl + << "_clone (" << flags_type << " f = 0) const;" + << endl; + + if (doxygen) + { + os << "//@}" << endl + << endl; + } + + // Element name and namespace accessors. + // + if (doxygen) + { + os << "/**" << endl + << " * @name Element name and namespace" << endl + << " *" << endl + << " * @brief Accessor functions for the element name " << + "and namespace." << endl + << " */" << endl + << "//@{" << endl + << endl; + } + else + { + os << "// Element name and namespace." << endl + << "//" << endl; + } + + SemanticGraph::Context& ec (e.context ()); + + if (doxygen) + { + os << "/**" << endl + << " * @brief Return the element name (static function)." << endl + << " *" << endl + << " * @return A read-only string reference containing " << + "the element" << endl + << " * name." << endl + << " */" << endl; + } + os << "static const " << string_type << "&" << endl + << ec.get<String> ("element-name") << " ();" + << endl; + + if (doxygen) + { + os << "/**" << endl + << " * @brief Return the element namespace (static " << + "function)." << endl + << " *" << endl + << " * @return A read-only string reference containing " << + "the element" << endl + << " * namespace." << endl + << " */" << endl; + } + os << "static const " << string_type << "&" << endl + << ec.get<String> ("element-ns") << " ();" + << endl; + + if (doxygen) + { + os << "/**" << endl + << " * @brief Return the element name." << endl + << " *" << endl + << " * @return A read-only string reference containing " << + "the element" << endl + << " * name." << endl + << " */" << endl; + } + os << "virtual const " << string_type << "&" << endl + << "_name () const;" + << endl; + + if (doxygen) + { + os << "/**" << endl + << " * @brief Return the element namespace." << endl + << " *" << endl + << " * @return A read-only string reference containing " << + "the element" << endl + << " * namespace." << endl + << " */" << endl; + } + os << "virtual const " << string_type << "&" << endl + << "_namespace () const;" + << endl; + + if (doxygen) + { + os << "//@}" << endl + << endl; + } + + // d-tor + // + if (doxygen) + { + os << "/**" << endl + << " * @brief Destructor." << endl + << " */" << endl; + } + + os << "virtual " << endl + << "~" << name << " ();" + << endl; + + // Data member. + // + + if (doxygen) + os << "//@cond" << endl + << endl; + + os << "protected:" << endl + << "::xsd::cxx::tree::one< " << type << " > " << + emember (e) << ";" + << "static const " << string_type << " " << + ec.get<String> ("element-name-member") << ";" + << "static const " << string_type << " " << + ec.get<String> ("element-ns-member") << ";"; + + if (doxygen) + os << endl + << "//@endcond" << endl; + + os << "};"; + } + + private: + Traversal::Belongs belongs_; + MemberTypeName type_name_; + }; + } + + Void + generate_tree_header (Context& ctx) + { + if (ctx.generate_xml_schema) + { + if (ctx.char_type == L"char" && ctx.char_encoding != L"custom") + { + ctx.os << "#include <xsd/cxx/xml/char-" << ctx.char_encoding << + ".hxx>" << endl + << endl; + } + + ctx.os << "#include <xsd/cxx/tree/exceptions.hxx>" << endl + << "#include <xsd/cxx/tree/elements.hxx>" << endl + << "#include <xsd/cxx/tree/types.hxx>" << endl + << endl; + + if (!ctx.options.value<CLI::suppress_parsing> () || + ctx.options.value<CLI::generate_serialization> ()) + { + ctx.os << "#include <xsd/cxx/xml/error-handler.hxx>" << endl + << endl; + } + + if (!ctx.options.value<CLI::suppress_parsing> () || + ctx.options.value<CLI::generate_serialization> ()) + { + ctx.os << "#include <xsd/cxx/xml/dom/auto-ptr.hxx>" << endl + << endl; + } + + Boolean element_map (ctx.options.value<CLI::generate_element_map> ()); + + if (element_map) + ctx.os << "#include <xsd/cxx/tree/element-map.hxx>" << endl + << endl; + + // I need to include all the "optional" headers here (instead of + // later in the individual generators for each feature because + // those headers provide implementation for the fundamental types. + // + if (!ctx.options.value<CLI::suppress_parsing> ()) + { + ctx.os << "#include <xsd/cxx/tree/parsing.hxx>" << endl; + + Traversal::Schema schema; + Traversal::Names names; + Traversal::Namespace ns; + Traversal::Names ns_names; + FundIncludes type (ctx, "parsing"); + + schema >> names >> ns >> ns_names >> type; + + schema.dispatch (ctx.schema_root); + + if (element_map) + ctx.os << "#include <xsd/cxx/tree/parsing/element-map.txx>" << + endl; + + ctx.os << endl; + } + + if (ctx.options.value<CLI::generate_serialization> ()) + { + ctx.os << "#include <xsd/cxx/xml/dom/serialization-header.hxx>" << endl + << "#include <xsd/cxx/tree/serialization.hxx>" << endl; + + Traversal::Schema schema; + Traversal::Names names; + Traversal::Namespace ns; + Traversal::Names ns_names; + FundIncludes type (ctx, "serialization"); + + schema >> names >> ns >> ns_names >> type; + + schema.dispatch (ctx.schema_root); + + if (element_map) + ctx.os << "#include <xsd/cxx/tree/serialization/element-map.txx>" << + endl; + + ctx.os << endl; + } + + if (ctx.options.value<CLI::generate_ostream> ()) + { + ctx.os << "#include <xsd/cxx/tree/std-ostream-operators.hxx>" << endl + << endl; + } + + Streams const& ist (ctx.options.value<CLI::generate_insertion> ()); + if (!ist.empty ()) + { + for (Streams::ConstIterator i (ist.begin ()); i != ist.end (); ++i) + { + if (*i == "ACE_OutputCDR") + ctx.os << "#include <xsd/cxx/tree/ace-cdr-stream-insertion.hxx>" + << endl; + else if (*i == "XDR") + ctx.os << "#include <xsd/cxx/tree/xdr-stream-insertion.hxx>" + << endl; + } + + ctx.os << "#include <xsd/cxx/tree/stream-insertion.hxx>" << endl + << endl; + } + + Streams const& est (ctx.options.value<CLI::generate_extraction> ()); + if (!est.empty ()) + { + for (Streams::ConstIterator i (est.begin ()); i != est.end (); ++i) + { + if (*i == "ACE_InputCDR") + ctx.os << "#include <xsd/cxx/tree/ace-cdr-stream-extraction.hxx>" + << endl; + else if (*i == "XDR") + ctx.os << "#include <xsd/cxx/tree/xdr-stream-extraction.hxx>" + << endl; + } + + ctx.os << "#include <xsd/cxx/tree/stream-extraction.hxx>" << endl + << endl; + } + + // Emit fundamental types. + // + { + Traversal::Schema schema; + Traversal::Names names; + FundamentalNamespace ns (ctx); + + schema >> names >> ns; + + schema.dispatch (ctx.schema_root); + } + } + else + { + Boolean inline_ (ctx.options.value<CLI::generate_inline> ()); + + ctx.os << "#include <memory> // std::auto_ptr" << endl + << "#include <limits> // std::numeric_limits" << endl + << "#include <algorithm> // std::binary_search" << endl + << endl; + + if (ctx.char_type == L"char" && ctx.char_encoding != L"custom") + { + ctx.os << "#include <xsd/cxx/xml/char-" << ctx.char_encoding << + ".hxx>" << endl + << endl; + } + + ctx.os << "#include <xsd/cxx/tree/exceptions.hxx>" << endl + << "#include <xsd/cxx/tree/elements.hxx>" << endl + << "#include <xsd/cxx/tree/containers.hxx>" << endl + << "#include <xsd/cxx/tree/list.hxx>" << endl + << endl; + + if (!ctx.options.value<CLI::suppress_parsing> ()) + { + ctx.os << "#include <xsd/cxx/xml/dom/parsing-header.hxx>" << endl + << endl; + } + + if (ctx.options.value<CLI::generate_wildcard> ()) + { + if (ctx.options.value<CLI::suppress_parsing> () || + !ctx.options.value<CLI::generate_serialization> ()) + ctx.os << "#include <xsd/cxx/xml/dom/auto-ptr.hxx>" << endl; + + ctx.os << "#include <xsd/cxx/tree/containers-wildcard.hxx>" << endl + << endl; + } + + if (!ctx.options.value<CLI::generate_extraction> ().empty ()) + ctx.os << "#include <xsd/cxx/tree/istream-fwd.hxx>" << endl + << endl; + + // Emit header includes. + // + { + if (inline_) + { + ctx.os << "#ifndef XSD_DONT_INCLUDE_INLINE" << endl + << "#define XSD_DONT_INCLUDE_INLINE" << endl + << endl; + } + + Traversal::Schema schema; + Includes includes (ctx, Includes::header); + + schema >> includes; + + schema.dispatch (ctx.schema_root); + + if (inline_) + { + ctx.os << "#undef XSD_DONT_INCLUDE_INLINE" << endl + << "#else" << endl + << endl; + + schema.dispatch (ctx.schema_root); + + ctx.os << "#endif // XSD_DONT_INCLUDE_INLINE" << endl + << endl; + } + } + + + { + Traversal::Schema schema; + + Traversal::Sources sources; + Traversal::Names names_ns, names; + + DocumentedNamespace ns (ctx); + + List list (ctx); + Union union_ (ctx); + Complex complex (ctx); + Enumeration enumeration (ctx); + GlobalElement element (ctx); + + schema >> sources >> schema; + schema >> names_ns >> ns >> names; + + names >> list; + names >> union_; + names >> complex; + names >> enumeration; + + if (ctx.options.value<CLI::generate_element_type> ()) + names >> element; + + schema.dispatch (ctx.schema_root); + } + + // Emit inline includes. + // + if (inline_) + { + ctx.os << "#ifndef XSD_DONT_INCLUDE_INLINE" << endl + << endl; + + Traversal::Schema schema; + Includes ixx_includes (ctx, Includes::inline_); + schema >> ixx_includes; + + schema.dispatch (ctx.schema_root); + + ctx.os << "#endif // XSD_DONT_INCLUDE_INLINE" << endl + << endl; + } + } + } + } +} diff --git a/xsd/xsd/cxx/tree/tree-header.hxx b/xsd/xsd/cxx/tree/tree-header.hxx new file mode 100644 index 0000000..bb3b417 --- /dev/null +++ b/xsd/xsd/cxx/tree/tree-header.hxx @@ -0,0 +1,20 @@ +// file : xsd/cxx/tree/tree-header.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef CXX_TREE_TREE_HEADER_HXX +#define CXX_TREE_TREE_HEADER_HXX + +#include <cxx/tree/elements.hxx> + +namespace CXX +{ + namespace Tree + { + Void + generate_tree_header (Context&); + } +} + +#endif // CXX_TREE_TREE_HEADER_HXX diff --git a/xsd/xsd/cxx/tree/tree-inline.cxx b/xsd/xsd/cxx/tree/tree-inline.cxx new file mode 100644 index 0000000..5bf309b --- /dev/null +++ b/xsd/xsd/cxx/tree/tree-inline.cxx @@ -0,0 +1,1062 @@ +// file : xsd/cxx/tree/tree-inline.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <xsd-frontend/semantic-graph.hxx> +#include <xsd-frontend/traversal.hxx> + +#include <cxx/tree/tree-inline.hxx> +#include <cxx/tree/default-value.hxx> + +namespace CXX +{ + namespace Tree + { + namespace + { + struct List: Traversal::List, Context + { + List (Context& c) + : Context (c) + { + } + + virtual Void + traverse (Type& l) + { + String name (ename (l)); + + // If renamed name is empty then we do not need to generate + // anything for this type. + // + if (renamed_type (l, name) && !name) + return; + + SemanticGraph::Type& item_type (l.argumented ().type ()); + String item_name (item_type_name (item_type)); + String base_type (L"::xsd::cxx::tree::list< " + item_name + + L", " + char_type); + + if (item_type.is_a<SemanticGraph::Fundamental::Double> ()) + base_type += L", ::xsd::cxx::tree::schema_type::double_"; + else if (item_type.is_a<SemanticGraph::Fundamental::Decimal> ()) + base_type += L", ::xsd::cxx::tree::schema_type::decimal"; + + base_type += L" >"; + + os << "// " << name << endl + << "//" << endl + << endl; + + // c-tor () + // + os << inl + << name << "::" << endl + << name << " ()" << endl + << ": " << base_type << " ( " << flags_type << " (0), this)" + << "{" + << "}"; + + // c-tor (size_type, const X& x) + // + String size_type (name != L"size_type" + ? String (L"size_type") + : base_type + L"::size_type"); + + os << inl + << name << "::" << endl + << name << " (" << size_type << " n, const " << item_name << + "& x)" << endl + << ": " << base_type << " (n, x, this)" + << "{" + << "}"; + + // copy c-tor () + // + os << inl + << name << "::" << endl + << name << " (const " << name << "& o," << endl + << flags_type << " f," << endl + << container << "* c)" << endl + << ": " << any_simple_type << " (o, f, c)," << endl + << " " << base_type << " (o, f, this)" + << "{" + << "}"; + } + + private: + String + item_type_name (SemanticGraph::Type& t) + { + std::wostringstream o; + + MemberTypeName type (*this, o); + type.dispatch (t); + + return o.str (); + } + }; + + + struct Union: Traversal::Union, Context + { + Union (Context& c) + : Context (c) + { + } + + virtual Void + traverse (Type& u) + { + String name (ename (u)); + + // If renamed name is empty then we do not need to generate + // anything for this type. + // + if (renamed_type (u, name) && !name) + return; + + String const& base (xs_string_type); + + os << "// " << name << endl + << "//" << endl + << endl; + + if (options.value<CLI::generate_default_ctor> ()) + { + // c-tor () + // + os << inl + << name << "::" << endl + << name << " ()" << endl + << ": " << base << " ()" + << "{" + << "}"; + } + + // c-tor (const char*) + // + os << inl + << name << "::" << endl + << name << " (const " << char_type << "* s)" << endl + << ": " << base << " (s)" + << "{" + << "}"; + + // c-tor (string const&) + // + os << inl + << name << "::" << endl + << name << " (const " << string_type << "& s)" << endl + << ": " << base << " (s)" + << "{" + << "}"; + + // copy c-tor () + // + os << inl + << name << "::" << endl + << name << " (const " << name << "& o," << endl + << flags_type << " f," << endl + << container << "* c)" << endl + << ": " << base << " (o, f, c)" + << "{" + << "}"; + } + }; + + // Enumeration + // + + // Generate a sequence of explicit c-tor calls until we reach + // one of the fundamental string types that can be constructed + // from char literals. + // + struct CtorCallSequence: Traversal::Complex, + Traversal::Fundamental::Type, + Context + { + CtorCallSequence (Context& c, String const& arg) + : Context (c), arg_ (arg), base_type_name_ (c) + { + } + + virtual Void + traverse (SemanticGraph::Complex& c) + { + // This type should be ultimately string based. + // + assert (c.inherits_p ()); + + os << ename (c) << " (" << endl; + + dispatch (c.inherits ().base ()); + + os << ")"; + } + + virtual Void + traverse (SemanticGraph::Fundamental::Type& t) + { + base_type_name_.dispatch (t); + + os << " (" << arg_ << ")"; + } + + private: + String arg_; + BaseTypeName base_type_name_; + }; + + struct Enumeration: Traversal::Enumeration, Context + { + Enumeration (Context& c) + : Context (c), member_ (c) + { + inherits_member_ >> member_; + } + + virtual Void + traverse (Type& e) + { + String name (ename (e)); + + // If renamed name is empty then we do not need to generate + // anything for this type. + // + if (renamed_type (e, name) && !name) + return; + + Boolean string_based (false); + { + IsStringBasedType t (string_based); + t.dispatch (e); + } + + Boolean enum_based (false); + if (string_based) + { + SemanticGraph::Enumeration* be (0); + IsEnumBasedType t (be); + t.dispatch (e); + + enum_based = (be != 0); + } + + String value; + if (string_based) + value = evalue (e); + + // Get to the ultimate base and see if is a fundamental type. + // + Boolean fund_based (false); + SemanticGraph::Type& ult_base (ultimate_base (e)); + { + IsFundamentalType t (fund_based); + t.dispatch (ult_base); + } + + // + // + String base; // base type name + { + std::wostringstream o; + + BaseTypeName base_type (*this, o); + Traversal::Inherits inherits_type (base_type); + + inherits (e, inherits_type); + base = o.str (); + } + + os << "// " << name << endl + << "// " << endl + << endl; + + // default c-tor + // + if (options.value<CLI::generate_default_ctor> ()) + { + os << inl + << name << "::" << endl + << name << " ()" << endl + << ": " << base << " ()" + << "{" + << "}"; + } + + // c-tor (value) + // + if (string_based) + { + os << inl + << name << "::" << endl + << name << " (" << value << " v)" << endl + << ": "; + + // If we are enum-based then we can just use the corresponding + // base c-tor directly. Otherwise we will use the from-string + // c-tor. + // + if (enum_based) + os << base << " (v)"; + else + { + CtorCallSequence t (*this, L"_xsd_" + name + L"_literals_[v]"); + t.dispatch (e.inherits ().base ()); + } + + os << "{" + << "}"; + } + + // c-tor (const char*) + // + if (string_based) + { + os << inl + << name << "::" << endl + << name << " (const " << char_type << "* v)" << endl + << ": " << base << " (v)" + << "{" + << "}"; + } + + // c-tor (const std::string&) + // + if (string_based) + { + os << inl + << name << "::" << endl + << name << " (const " << string_type << "& v)" << endl + << ": " << base << " (v)" + << "{" + << "}"; + } + + // c-tor (fundamental) + // + if (fund_based) + { + os << inl + << name << "::" << endl + << name << " ("; + + member_.dispatch (ult_base); + + os << " v)" + << ": " << base << " (v)" + << "{" + << "}"; + } + + // c-tor (base) + // + // If the ultimate is also our immediate base and it is a + // fundamental type then this c-tor clashes with c-tor + // (fundamental) above. + // + if (!fund_based || &ult_base != &e.inherits ().base ()) + { + os << inl + << name << "::" << endl + << name << " (const "; + + inherits (e, inherits_member_); + + os << "& v)" << endl + << ": " << base << " (v)" + << "{" + << "}"; + } + + // copy c-tor + // + os << inl + << name << "::" << endl + << name << " (const " << name << "& v," << endl + << flags_type << " f," << endl + << container << "* c)" << endl + << ": " << base << " (v, f, c)" + << "{" + << "}"; + + // operato= (value) + // + if (string_based) + { + os << inl + << name << "& " << name << "::" << endl + << "operator= (" << value << " v)" + << "{" + << "static_cast< " << base << "& > (*this) = "; + + // If we are enum-based then we can just use the corresponding + // base assignment directly. Otherwise we will use the from- + // base assignment and a from-string base c-tor. + // + if (enum_based) + os << "v"; + else + { + os << endl; + + CtorCallSequence t (*this, L"_xsd_" + name + L"_literals_[v]"); + t.dispatch (e.inherits ().base ()); + } + + os << ";" + << endl + << "return *this;" + << "}"; + } + + os << endl; + } + + private: + Traversal::Inherits inherits_member_; + MemberTypeName member_; + }; + + struct Member: Traversal::Member, Context + { + Member (Context& c, String const& scope) + : Context (c), scope_ (scope), lit_value_ (c) + { + } + + virtual Void + traverse (Type& m) + { + if (skip (m)) + return; + + String const& aname (eaname (m)); + String const& mname (emname (m)); + String const& member (emember (m)); + + Boolean fund (false); + { + IsFundamentalType t (fund); + t.dispatch (m.type ()); + } + + Boolean def_attr (m.default_p () && + m.is_a<SemanticGraph::Attribute> ()); + + if (max (m) != 1) + { + // sequence + // + String container (econtainer (m)); + String q_container (scope_ + L"::" + container); + + // container const& + // name () const; + // + os << inl + << "const " << q_container << "& " << scope_ << "::" << endl + << aname << " () const" + << "{" + << "return this->" << member << ";" + << "}"; + + // container& + // name (); + // + os << inl + << q_container << "& " << scope_ << "::" << endl + << aname << " ()" + << "{" + << "return this->" << member << ";" + << "}"; + + // void + // name (container const&); + // + os << inl + << "void " << scope_ << "::" << endl + << mname << " (const " << container << "& s)" + << "{" + << "this->" << member << " = s;" + << "}"; + } + else if (min (m) == 0 && !def_attr) + { + // optional + // + String type (etype (m)); + String container (econtainer (m)); + String q_container (scope_ + L"::" + container); + + // container const& + // name () const; + // + os << inl + << "const " << q_container << "& " << scope_ << "::" << endl + << aname << " () const" + << "{" + << "return this->" << member << ";" + << "}"; + + // container& + // name (); + // + os << inl + << q_container << "& " << scope_ << "::" << endl + << aname << " ()" + << "{" + << "return this->" << member << ";" + << "}"; + + // void + // name (type const&); + // + os << inl + << "void " << scope_ << "::" << endl + << mname << " (const " << type << "& x)" + << "{" + << "this->" << member << ".set (x);" + << "}"; + + // void + // name (container const&); + // + os << inl + << "void " << scope_ << "::" << endl + << mname << " (const " << container << "& x)" + << "{" + << "this->" << member << " = x;" + << "}"; + + // void + // name (auto_ptr<type>); + // + if (!fund) + os << inl + << "void " << scope_ << "::" << endl + << mname << " (::std::auto_ptr< " << type << " > x)" + << "{" + << "this->" << member << ".set (x);" + << "}"; + } + else + { + // one + // + String type (etype (m)); + String q_type (scope_ + L"::" + type); + + // type const& + // name () const; + // + os << inl + << "const " << q_type << "& " << scope_ << "::" << endl + << aname << " () const" + << "{" + << "return this->" << member << ".get ();" + << "}"; + + // Do not generate modifiers for fixed attributes. + // + if (!(def_attr && m.fixed_p ())) + { + // type& + // name (); + // + os << inl + << q_type << "& " << scope_ << "::" << endl + << aname << " ()" + << "{" + << "return this->" << member << ".get ();" + << "}"; + + // void + // name (type const&); + // + os << inl + << "void " << scope_ << "::" << endl + << mname << " (const " << type << "& x)" + << "{" + << "this->" << member << ".set (x);" + << "}"; + + // void + // name (auto_ptr<type>); + // + if (!fund) + os << inl + << "void " << scope_ << "::" << endl + << mname << " (::std::auto_ptr< " << type << " > x)" + << "{" + << "this->" << member << ".set (x);" + << "}"; + + // auto_ptr<type> + // detach_name (); + // + if (detach && !fund) + os << inl + << "::std::auto_ptr< " << q_type << " > " << + scope_ << "::" << endl + << edname (m) << " ()" + << "{" + << "return this->" << member << ".detach ();" + << "}"; + } + } + + + // default_value + // + if (m.default_p ()) + { + Boolean simple (true); + + if (m.is_a<SemanticGraph::Element> ()) + { + IsSimpleType test (simple); + test.dispatch (m.type ()); + } + + if (simple) + { + String lit (lit_value_.dispatch (m.type (), m.value ())); + + os << inl; + + if (lit) + os << scope_ << "::" << etype (m) << " "; + else + os << "const " << scope_ << "::" << etype (m) << "& "; + + os << scope_ << "::" << endl + << edefault_value (m) << " ()" + << "{"; + + if (lit) + os << "return " << etype (m) << " (" << lit << ");"; + else + os << "return " << edefault_value_member (m) << ";"; + + os << "}"; + } + } + } + + private: + String scope_; + LiteralValue lit_value_; + }; + + struct Any: Traversal::Any, + Traversal::AnyAttribute, + Context + { + Any (Context& c, String const& scope) + : Context (c), scope_ (scope) + { + } + + virtual Void + traverse (SemanticGraph::Any& a) + { + String const& aname (eaname (a)); + String const& mname (emname (a)); + + String const& member (emember (a)); + + if (max (a) != 1) + { + // sequence + // + String container (econtainer (a)); + String q_container (scope_ + L"::" + container); + + // container const& + // name () const; + // + os << inl + << "const " << q_container << "& " << scope_ << "::" << endl + << aname << " () const" + << "{" + << "return this->" << member << ";" + << "}"; + + // container& + // name (); + // + os << inl + << q_container << "& " << scope_ << "::" << endl + << aname << " ()" + << "{" + << "return this->" << member << ";" + << "}"; + + // void + // name (container const&); + // + os << inl + << "void " << scope_ << "::" << endl + << mname << " (const " << container << "& s)" + << "{" + << "this->" << member << " = s;" + << "}"; + } + else if (min (a) == 0) + { + // optional + // + String container (econtainer (a)); + String q_container (scope_ + L"::" + container); + + // container const& + // name () const; + // + os << inl + << "const " << q_container << "& " << scope_ << "::" << endl + << aname << " () const" + << "{" + << "return this->" << member << ";" + << "}"; + + // container& + // name (); + // + os << inl + << q_container << "& " << scope_ << "::" << endl + << aname << " ()" + << "{" + << "return this->" << member << ";" + << "}"; + + // void + // name (type const&); + // + os << inl + << "void " << scope_ << "::" << endl + << mname << " (const " << xerces_ns << "::DOMElement& e)" + << "{" + << "this->" << member << ".set (e);" + << "}"; + + // void + // name (type*); + // + os << inl + << "void " << scope_ << "::" << endl + << mname << " (" << xerces_ns << "::DOMElement* e)" + << "{" + << "this->" << member << ".set (e);" + << "}"; + + // void + // name (container const&); + // + os << inl + << "void " << scope_ << "::" << endl + << mname << " (const " << container << "& x)" + << "{" + << "this->" << member << " = x;" + << "}"; + } + else + { + // one + // + + // type const& + // name () const; + // + os << inl + << "const " << xerces_ns << "::DOMElement& " << + scope_ << "::" << endl + << aname << " () const" + << "{" + << "return this->" << member << ".get ();" + << "}"; + + // type& + // name (); + // + os << inl + << xerces_ns << "::DOMElement& " << scope_ << "::" << endl + << aname << " ()" + << "{" + << "return this->" << member << ".get ();" + << "}"; + + // void + // name (type const&); + // + os << inl + << "void " << scope_ << "::" << endl + << mname << " (const " << xerces_ns << "::DOMElement& e)" + << "{" + << "this->" << member << ".set (e);" + << "}"; + + // void + // name (type*); + // + os << inl + << "void " << scope_ << "::" << endl + << mname << " (" << xerces_ns << "::DOMElement* e)" + << "{" + << "this->" << member << ".set (e);" + << "}"; + } + } + + virtual Void + traverse (SemanticGraph::AnyAttribute& a) + { + String const& aname (eaname (a)); + String const& mname (emname (a)); + + String const& member (emember (a)); + String container (econtainer (a)); + String q_container (scope_ + L"::" + container); + + // container const& + // name () const; + // + os << inl + << "const " << q_container << "& " << scope_ << "::" << endl + << aname << " () const" + << "{" + << "return this->" << member << ";" + << "}"; + + // container& + // name (); + // + os << inl + << q_container << "& " << scope_ << "::" << endl + << aname << " ()" + << "{" + << "return this->" << member << ";" + << "}"; + + // void + // name (container const&); + // + os << inl + << "void " << scope_ << "::" << endl + << mname << " (const " << container << "& s)" + << "{" + << "this->" << member << " = s;" + << "}"; + } + + private: + String scope_; + }; + + struct Complex: Traversal::Complex, Context + { + Complex (Context& c) + : Context (c) + { + } + + virtual Void + traverse (Type& c) + { + String name (ename (c)); + + // If renamed name is empty then we do not need to generate + // anything for this type. + // + if (renamed_type (c, name) && !name) + return; + + os << "// " << name << endl + << "// " << endl + << endl; + + // Generate accessors and modifiers. + // + Any any (*this, name); + Member member (*this, name); + Traversal::Names names; + + if (options.value<CLI::generate_wildcard> ()) + names >> any; + + names >> member; + + Complex::names (c, names); + + // dom_document accessors. + // + if (edom_document_member_p (c)) + { + os << inl + << "const " << xerces_ns << "::DOMDocument& " << + name << "::" << endl + << edom_document (c) << " () const" + << "{" + << "return *" << edom_document_member (c) << ";" + << "}"; + + os << inl + << xerces_ns << "::DOMDocument& " << name << "::" << endl + << edom_document (c) << " ()" + << "{" + << "return *" << edom_document_member (c) << ";" + << "}"; + } + + os << endl; + } + }; + + + struct GlobalElement: Traversal::Element, + GlobalElementBase, + Context + { + GlobalElement (Context& c) + : GlobalElementBase (c), Context (c) + { + } + + virtual Void + traverse (Type& e) + { + if (!doc_root_p (e)) + return; + + Boolean fund (false); + { + IsFundamentalType test (fund); + test.dispatch (e.type ()); + } + + String const& name (ename (e)); + + os << "// " << name << endl + << "// " << endl + << endl; + + // Accessors/modifiers. + // + String const& type (etype (e)); + String const& aname (eaname (e)); + String const& mname (emname (e)); + String const& member (emember (e)); + + // type const& + // name () const; + // + os << inl + << "const " << name << "::" << type << "& " << name << "::" << endl + << aname << " () const" + << "{" + << "return this->" << member << ".get ();" + << "}"; + + // type& + // name (); + // + os << inl + << name << "::" << type << "& " << name << "::" << endl + << aname << " ()" + << "{" + << "return this->" << member << ".get ();" + << "}"; + + // void + // name (type const&); + // + os << inl + << "void " << name << "::" << endl + << mname << " (const " << type << "& x)" + << "{" + << "return this->" << member << ".set (x);" + << "}"; + + // void + // name (auto_ptr<type>); + // + if (!fund) + { + os << inl + << "void " << name << "::" << endl + << mname << " (::std::auto_ptr< " << type << " > p)" + << "{" + << "return this->" << member << ".set (p);" + << "}"; + } + + // auto_ptr<type> + // detach_name (); + // + if (detach && !fund) + os << inl + << "::std::auto_ptr< " << name << "::" << type << " > " << + name << "::" << endl + << edname (e) << " ()" + << "{" + << "return this->" << member << ".detach ();" + << "}"; + } + }; + } + + Void + generate_tree_inline (Context& ctx, UnsignedLong first, UnsignedLong last) + { + // Generate includes. + // + if (ctx.options.value<CLI::generate_inline> ()) + { + Traversal::Schema schema; + Includes includes (ctx, Includes::inline_); + + schema >> includes; + + schema.dispatch (ctx.schema_root); + } + else + { + // Emit "weak" header includes that are used in the file-per-type + // compilation model. + // + Traversal::Schema schema; + Includes includes (ctx, Includes::source); + + schema >> includes; + + schema.dispatch (ctx.schema_root); + } + + Traversal::Schema schema; + Traversal::Sources sources; + Traversal::Names names_ns, names; + Namespace ns (ctx, first, last); + + List list (ctx); + Union union_ (ctx); + Complex complex (ctx); + Enumeration enumeration (ctx); + GlobalElement element (ctx); + + schema >> sources >> schema; + schema >> names_ns >> ns >> names; + + names >> list; + names >> union_; + names >> complex; + names >> enumeration; + + if (ctx.options.value<CLI::generate_element_type> ()) + names >> element; + + schema.dispatch (ctx.schema_root); + } + } +} diff --git a/xsd/xsd/cxx/tree/tree-inline.hxx b/xsd/xsd/cxx/tree/tree-inline.hxx new file mode 100644 index 0000000..ffe4341 --- /dev/null +++ b/xsd/xsd/cxx/tree/tree-inline.hxx @@ -0,0 +1,20 @@ +// file : xsd/cxx/tree/tree-inline.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef CXX_TREE_TREE_INLINE_HXX +#define CXX_TREE_TREE_INLINE_HXX + +#include <cxx/tree/elements.hxx> + +namespace CXX +{ + namespace Tree + { + Void + generate_tree_inline (Context&, UnsignedLong first, UnsignedLong last); + } +} + +#endif // CXX_TREE_TREE_INLINE_HXX diff --git a/xsd/xsd/cxx/tree/tree-source.cxx b/xsd/xsd/cxx/tree/tree-source.cxx new file mode 100644 index 0000000..4a17b00 --- /dev/null +++ b/xsd/xsd/cxx/tree/tree-source.cxx @@ -0,0 +1,3468 @@ +// file : xsd/cxx/tree/tree-source.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <cult/containers/list.hxx> + +#include <xsd-frontend/semantic-graph.hxx> +#include <xsd-frontend/traversal.hxx> + +#include <cxx/tree/tree-source.hxx> +#include <cxx/tree/default-value.hxx> + +namespace CXX +{ + namespace Tree + { + namespace + { + struct List: Traversal::List, Context + { + List (Context& c) + : Context (c) + { + } + + virtual Void + traverse (Type& l) + { + String name (ename (l)); + + // If renamed name is empty then we do not need to generate + // anything for this type. + // + if (renamed_type (l, name) && !name) + return; + + os << "// " << name << endl + << "//" << endl + << endl; + + if (!options.value<CLI::suppress_parsing> ()) + { + SemanticGraph::Type& item_type (l.argumented ().type ()); + String base (L"::xsd::cxx::tree::list< " + + item_type_name (item_type) + L", " + char_type); + + if (item_type.is_a<SemanticGraph::Fundamental::Double> ()) + base += L", ::xsd::cxx::tree::schema_type::double_"; + else if (item_type.is_a<SemanticGraph::Fundamental::Decimal> ()) + base += L", ::xsd::cxx::tree::schema_type::decimal"; + + base += L" >"; + + // c-tor (xercesc::DOMElement) + // + os << name << "::" << endl + << name << " (const " << xerces_ns << "::DOMElement& e," << endl + << flags_type << " f," << endl + << container << "* c)" << endl + << ": " << any_simple_type << " (e, f, c)," << endl + << " " << base << " (e, f, this)" + << "{" + << "}"; + + // c-tor (xercesc::DOMAttr) + // + os << name << "::" << endl + << name << " (const " << xerces_ns << "::DOMAttr& a," << endl + << flags_type << " f," << endl + << container << "* c)" << endl + << ": " << any_simple_type << " (a, f, c)," << endl + << " " << base << " (a, f, this)" + << "{" + << "}"; + + // c-tor (string const&, xercesc::DOMElement) + // + os << name << "::" << endl + << name << " (const " << string_type << "& s," << endl + << "const " << xerces_ns << "::DOMElement* e," << endl + << flags_type << " f," << endl + << container << "* c)" << endl + << ": " << any_simple_type << " (s, e, f, c)," << endl + << " " << base << " (s, e, f, this)" + << "{" + << "}"; + } + + // _clone + // + os << name << "* " << name << "::" << endl + << "_clone (" << flags_type << " f," << endl + << container << "* c) const" + << "{" + << "return new class " << name << " (*this, f, c);" + << "}"; + + // d-tor + // + os << name << "::" << endl + << "~" << name << " ()" + << "{" + << "}"; + + // Register with type factory map. + // + if (polymorphic && polymorphic_p (l) && !anonymous_p (l)) + { + // Note that we are using the original type name. + // + String const& name (ename (l)); + + if (!options.value<CLI::suppress_parsing> ()) + os << "static" << endl + << "const ::xsd::cxx::tree::type_factory_initializer< 0, " << + char_type << ", " << name << " >" << endl + << "_xsd_" << name << "_type_factory_init (" << endl + << strlit (l.name ()) << "," << endl + << strlit (xml_ns_name (l)) << ");" + << endl; + + if (options.value<CLI::generate_comparison> ()) + os << "static" << endl + << "const ::xsd::cxx::tree::comparison_initializer< 0, " << + char_type << ", " << name << " >" << endl + << "_xsd_" << name << "_comparison_init;" + << endl; + } + } + + private: + String + item_type_name (SemanticGraph::Type& t) + { + std::wostringstream o; + + MemberTypeName type (*this, o); + type.dispatch (t); + + return o.str (); + } + }; + + + struct Union: Traversal::Union, Context + { + Union (Context& c) + : Context (c) + { + } + + virtual Void + traverse (Type& u) + { + String name (ename (u)); + + // If renamed name is empty then we do not need to generate + // anything for this type. + // + if (renamed_type (u, name) && !name) + return; + + String const& base (xs_string_type); + + os << "// " << name << endl + << "//" << endl + << endl; + + if (!options.value<CLI::suppress_parsing> ()) + { + // c-tor (xercesc::DOMElement) + // + os << name << "::" << endl + << name << " (const " << xerces_ns << "::DOMElement& e," << endl + << flags_type << " f," << endl + << container << "* c)" << endl + << ": " << base << " (e, f, c)" + << "{" + << "}"; + + // c-tor (xercesc::DOMAttr) + // + os << name << "::" << endl + << name << " (const " << xerces_ns << "::DOMAttr& a," << endl + << flags_type << " f," << endl + << container << "* c)" << endl + << ": " << base << " (a, f, c)" + << "{" + << "}"; + + // c-tor (string const&, xercesc::DOMElement) + // + os << name << "::" << endl + << name << " (const " << string_type << "& s," << endl + << "const " << xerces_ns << "::DOMElement* e," << endl + << flags_type << " f," << endl + << container << "* c)" << endl + << ": " << base << " (s, e, f, c)" + << "{" + << "}"; + } + + // _clone + // + os << name << "* " << name << "::" << endl + << "_clone (" << flags_type << " f," << endl + << container << "* c) const" + << "{" + << "return new class " << name << " (*this, f, c);" + << "}"; + + // Register with type factory map. + // + if (polymorphic && polymorphic_p (u) && !anonymous_p (u)) + { + // Note that we are using the original type name. + // + String const& name (ename (u)); + + if (!options.value<CLI::suppress_parsing> ()) + os << "static" << endl + << "const ::xsd::cxx::tree::type_factory_initializer< 0, " << + char_type << ", " << name << " >" << endl + << "_xsd_" << name << "_type_factory_init (" << endl + << strlit (u.name ()) << "," << endl + << strlit (xml_ns_name (u)) << ");" + << endl; + + if (options.value<CLI::generate_comparison> ()) + os << "static" << endl + << "const ::xsd::cxx::tree::comparison_initializer< 0, " << + char_type << ", " << name << " >" << endl + << "_xsd_" << name << "_comparison_init;" + << endl; + } + } + }; + + + // Enumeration mapping. + // + + struct EnumeratorLiteral: Traversal::Enumerator, Context + { + EnumeratorLiteral (Context& c) + : Context (c) + { + } + + virtual Void + traverse (Type& e) + { + os << strlit (e.name ()); + } + }; + + + // + // + struct LiteralInfo + { + LiteralInfo (String const& value, String const& name) + : value_ (value), name_ (name) + { + } + + String value_; + String name_; + }; + + Boolean + operator< (LiteralInfo const& x, LiteralInfo const& y) + { + return x.value_ < y.value_; + } + + typedef Cult::Containers::List<LiteralInfo> LiteralInfoList; + + + // Populate LiteralInfoList + // + struct EnumeratorLiteralInfo: Traversal::Enumerator, Context + + { + EnumeratorLiteralInfo (Context& c, LiteralInfoList& list) + : Context (c), list_ (list) + { + } + + virtual Void + traverse (Type& e) + { + list_.push_back (LiteralInfo (e.name (), ename (e))); + } + + private: + LiteralInfoList& list_; + }; + + + struct Enumeration: Traversal::Enumeration, Context + { + Enumeration (Context& c) + : Context (c), enumerator_literal_ (c) + { + names_enumerator_literal_ >> enumerator_literal_; + } + + virtual Void + traverse (Type& e) + { + String name (ename (e)); + + // If renamed name is empty then we do not need to generate + // anything for this type. + // + if (renamed_type (e, name) && !name) + return; + + Boolean string_based (false); + { + IsStringBasedType t (string_based); + t.dispatch (e); + } + + SemanticGraph::Enumeration* be (0); + Boolean enum_based (false); + if (string_based) + { + IsEnumBasedType t (be); + t.dispatch (e); + + enum_based = (be != 0); + } + + String value; + if (string_based) + value = evalue (e); + + UnsignedLong enum_count (0); + + for (Type::NamesIterator i (e.names_begin ()), end (e.names_end ()); + i != end; ++i) + ++enum_count; + + String base; // base type name + { + std::wostringstream o; + + BaseTypeName base_type (*this, o); + Traversal::Inherits inherits_type (base_type); + + inherits (e, inherits_type); + base = o.str (); + } + + os << "// " << name << endl + << "//" << endl + << endl; + + if (!options.value<CLI::suppress_parsing> ()) + { + // c-tor (xercesc::DOMElement) + // + os << name << "::" << endl + << name << " (const " << xerces_ns << "::DOMElement& e," << endl + << flags_type << " f," << endl + << container << "* c)" << endl + << ": " << base << " (e, f, c)" + << "{"; + + if (string_based) + os << "_xsd_" << name << "_convert ();"; + + os << "}"; + + + // c-tor (xercesc::DOMAttr) + // + os << name << "::" << endl + << name << " (const " << xerces_ns << "::DOMAttr& a," << endl + << flags_type << " f," << endl + << container << "* c)" << endl + << ": " << base << " (a, f, c)" + << "{"; + + if (string_based) + { + os << "_xsd_" << name << "_convert ();"; + } + + os << "}"; + + + // c-tor (string const&, xercesc::DOMElement) + // + os << name << "::" << endl + << name << " (const " << string_type << "& s," << endl + << "const " << xerces_ns << "::DOMElement* e," << endl + << flags_type << " f," << endl + << container << "* c)" << endl + << ": " << base << " (s, e, f, c)" + << "{"; + + if (string_based) + { + os << "_xsd_" << name << "_convert ();"; + } + + os << "}"; + } + + // _clone + // + os << name << "* " << name << "::" << endl + << "_clone (" << flags_type << " f," << endl + << container << "* c) const" + << "{" + << "return new class " << name << " (*this, f, c);" + << "}"; + + // convert + // + // @@ TODO: expected list + // + if (string_based) + { + String i_name (L"_xsd_" + name + L"_indexes_"); + + os << name << "::" << value << " " << + name << "::" << endl + << "_xsd_" << name << "_convert () const" + << "{" + << "::xsd::cxx::tree::enum_comparator< " << char_type << + " > c (_xsd_" << name << "_literals_);" + << "const " << value << "* i (::std::lower_bound (" << endl + << i_name << "," << endl + << i_name << " + " << enum_count << "," << endl + << "*this," << endl + << "c));" + << endl + << "if (i == " << i_name << " + " << enum_count << " || " << + "_xsd_" << name << "_literals_[*i] != *this)" + << "{" + << "throw ::xsd::cxx::tree::unexpected_enumerator < " << + char_type << " > (*this);" + << "}" + << "return *i;" + << "}"; + } + + // literals and indexes + // + if (string_based) + { + if (enum_based) + { + os << "const " << char_type << "* const* " << name << "::" << endl + << "_xsd_" << name << "_literals_ = " << + fq_name (*be) << "::_xsd_" << ename (*be) << "_literals_;" + << endl; + } + else + { + os << "const " << char_type << "* const " << name << "::" << endl + << "_xsd_" << name << "_literals_[" << enum_count << "] =" + << "{"; + + names<Enumeration> ( + e, names_enumerator_literal_, 0, 0, 0, &Enumeration::comma); + + os << "};"; + } + + + LiteralInfoList l; + { + EnumeratorLiteralInfo enumerator (*this, l); + Traversal::Names names_enumerator (enumerator); + names (e, names_enumerator); + } + + l.sort (); + + os << "const " << name << "::" << value << " " << + name << "::" << endl + << "_xsd_" << name << "_indexes_[" << enum_count << "] =" + << "{"; + + String fq_name (ns_scope + L"::" + name); + + for (LiteralInfoList::Iterator + b (l.begin ()), i (b), end (l.end ()); i != end; ++i) + { + if (i != b) + os << "," << endl; + + os << fq_name << "::" << i->name_; + } + + os << "};"; + } + + // Register with type factory map. + // + if (polymorphic && polymorphic_p (e) && !anonymous_p (e)) + { + // Note that we are using the original type name. + // + String const& name (ename (e)); + + if (!options.value<CLI::suppress_parsing> ()) + os << "static" << endl + << "const ::xsd::cxx::tree::type_factory_initializer< 0, " << + char_type << ", " << name << " >" << endl + << "_xsd_" << name << "_type_factory_init (" << endl + << strlit (e.name ()) << "," << endl + << strlit (xml_ns_name (e)) << ");" + << endl; + + if (options.value<CLI::generate_comparison> ()) + os << "static" << endl + << "const ::xsd::cxx::tree::comparison_initializer< 0, " << + char_type << ", " << name << " >" << endl + << "_xsd_" << name << "_comparison_init;" + << endl; + } + } + + virtual Void + comma (Type&) + { + os << "," << endl; + } + + private: + Traversal::Names names_enumerator_literal_; + EnumeratorLiteral enumerator_literal_; + + }; + + // + // + struct Member: Traversal::Member, Context + { + Member (Context& c, String const& scope) + : Context (c), scope_ (scope), init_value_ (c) + { + } + + virtual Void + traverse (Type& m) + { + if (skip (m)) + return; + + // default_value + // + if (m.default_p ()) + { + SemanticGraph::Type& t (m.type ()); + Boolean simple (true); + + if (m.is_a<SemanticGraph::Element> ()) + { + IsSimpleType test (simple); + test.dispatch (t); + } + + if (simple) + { + Boolean lit (false); + { + IsLiteralValue test (lit); + test.dispatch (t); + } + + if (!lit) + { + InitKind::Kind kind (InitKind::simple); + { + InitKind test (kind); + test.dispatch (t); + } + + String const& member (edefault_value_member (m)); + + String init_name; + + switch (kind) + { + case InitKind::data: + { + init_name = escape (L"_xsd_" + scope_ + member + L"data"); + init_value_.data (init_name); + init_value_.dispatch (t, m.value ()); + break; + } + case InitKind::function: + { + init_name = escape (L"_xsd_" + scope_ + member + L"init"); + + os << "static " << scope_ << "::" << etype (m) << endl + << init_name << " ()" + << "{" + << scope_ << "::" << etype (m) << " r;" + << endl; + + init_value_.dispatch (t, m.value ()); + + os << "return r;" + << "};"; + break; + } + case InitKind::simple: + break; + } + + os << "const " << scope_ << "::" << etype (m) << " " << + scope_ << "::" << member << " (" << endl; + + switch (kind) + { + case InitKind::data: + { + // Second dispatch. + // + init_value_.dispatch (t, m.value ()); + break; + } + case InitKind::function: + { + os << init_name << " ()"; + break; + } + case InitKind::simple: + { + init_value_.dispatch (t, m.value ()); + break; + } + } + + os << ");" + << endl; + } + } + } + } + + private: + String scope_; + InitValue init_value_; + }; + + + struct Element: Traversal::Element, Context + { + Element (Context& c) + : Context (c) + { + } + + virtual Void + traverse (Type& e) + { + if (skip (e)) + return; + + String const& member (emember (e)); + + String tr (etraits (e)); // traits type name + String type (etype (e)); + + SemanticGraph::Type& t (e.type ()); + + Boolean fund (false); + { + IsFundamentalType traverser (fund); + traverser.dispatch (t); + } + + // Check if we need to handle xsi:type and substitution groups. + // If this element's type is anonymous then we don't need to do + // anything. Note that if the type is anonymous then it can't be + // derived from which makes it impossible to substitute or + // dynamically-type with xsi:type. + // + Boolean poly (polymorphic && polymorphic_p (t) && !anonymous_p (t)); + + os << "// " << comment (e.name ()) << endl + << "//" << endl; + + if (poly) + { + // aCC cannot handle an inline call to type_factory_map_instance. + // + os << "{" + << "::xsd::cxx::tree::type_factory_map< " << char_type << + " >& tfm (" << endl + << "::xsd::cxx::tree::type_factory_map_instance< 0, " << + char_type << " > ());" + << endl + << "::std::auto_ptr< ::xsd::cxx::tree::type > tmp (" << endl + << "tfm.create (" << endl + << strlit (e.name ()) << "," << endl + << (e.qualified_p () + ? strlit (e.namespace_ ().name ()) + : L + String ("\"\"")) << "," << endl + << "&::xsd::cxx::tree::factory_impl< " << type << " >," << endl + << (e.global_p () ? "true" : "false") << ", " << + (e.qualified_p () ? "true" : "false") << ", " << + "i, n, f, this));" + << endl + << "if (tmp.get () != 0)" + << "{"; + } + else + { + if (e.qualified_p () && e.namespace_ ().name ()) + { + os << "if (n.name () == " << strlit (e.name ()) << " && " << + "n.namespace_ () == " << strlit (e.namespace_ ().name ()) << ")" + << "{"; + } + else + { + os << "if (n.name () == " << strlit (e.name ()) << " && " << + "n.namespace_ ().empty ())" + << "{"; + } + + if (!fund) + { + os << "::std::auto_ptr< " << type << " > r (" << endl + << tr << "::create (i, f, this));" + << endl; + } + } + + + // Checks. Disabled at the moment since they make it impossible to + // parse valid instances where the same element is used in both + // base and derived types. See the cxx/tree/name-clash/inheritance + // test for details. + // + // + if (max (e) != 1) + { + // sequence + // + } + else if (min (e) == 0) + { + // optional + // + os << "if (!this->" << member << ")" + << "{"; + } + else + { + // one + // + os << "if (!" << member << ".present ())" + << "{"; + } + + + if (poly || !fund) + { + if (poly) + { + // Cast to static type. + // + os << "::std::auto_ptr< " << type << " > r (" << endl + << "dynamic_cast< " << type << "* > (tmp.get ()));" + << endl + << "if (r.get ())" << endl + << "tmp.release ();" + << "else" << endl + << "throw ::xsd::cxx::tree::not_derived< " << char_type << + " > ();" + << endl; + } + + if (max (e) != 1) + { + // sequence + // + os << "this->" << member << ".push_back (r);"; + } + else if (min (e) == 0) + { + // optional + // + os << "this->" << member << ".set (r);"; + } + else + { + // one + // + os << "this->" << member << ".set (r);"; + } + } + else + { + if (max (e) != 1) + { + // sequence + // + os << "this->" << member << ".push_back (" << tr << + "::create (i, f, this));"; + } + else if (min (e) == 0) + { + // optional + // + os << "this->" << member << ".set (" << tr << + "::create (i, f, this));"; + } + else + { + // one + // + os << "this->" << member << ".set (" << tr << + "::create (i, f, this));"; + } + } + + os << "continue;"; + + // End of check block. + // + if (max (e) != 1) + { + // sequence + // + } + else if (min (e) == 0) + { + // optional + // + os << "}"; + } + else + { + // one + // + os << "}"; + } + + os << "}"; // if block + + if (poly) + os << "}"; + } + }; + + struct ElementTest: Traversal::Element, Context + { + ElementTest (Context& c) + : Context (c) + { + } + + virtual Void + traverse (Type& e) + { + if (skip (e)) + return; + + if (max (e) == 1 && min (e) == 1) + { + // one + // + os << "if (!" << emember (e) << ".present ())" + << "{" + << "throw ::xsd::cxx::tree::expected_element< " << + char_type << " > (" << endl + << strlit (e.name ()) << "," << endl + << (e.qualified_p () + ? strlit (e.namespace_ ().name ()) + : L + String ("\"\"")) << ");" + << "}"; + } + } + }; + + struct Any: Traversal::Any, Context + { + Any (Context& c) + : Context (c) + { + } + + virtual Void + traverse (Type& a) + { + String const& member (emember (a)); + + String const& ns (a.definition_namespace ().name ()); + String const& dom_doc ( + edom_document ( + dynamic_cast<SemanticGraph::Complex&> (a.scope ()))); + + os << "// " << ename (a) << endl + << "//" << endl + << "if ("; + + for (SemanticGraph::Any::NamespaceIterator i (a.namespace_begin ()), + e (a.namespace_end ()); i != e;) + { + if (*i == L"##any") + { + os << "true"; + } + else if (*i == L"##other") + { + if (ns) + { + // Note that here I assume that ##other does not include + // unqualified names in a schema with target namespace. + // This is not what the spec says but that seems to be + // the consensus. + // + os << "(!n.namespace_ ().empty () && " << + "n.namespace_ () != " << strlit (ns) << ")"; + } + else + os << "!n.namespace_ ().empty ()"; + } + else if (*i == L"##local") + { + os << "n.namespace_ ().empty ()"; + } + else if (*i == L"##targetNamespace") + { + os << "n.namespace_ () == " << strlit (ns); + } + else + { + os << "n.namespace_ () == " << strlit (*i); + } + + if (++i != e) + os << " ||" << endl; + } + + os << ")" + << "{"; + + + // Checks. + // + // + if (max (a) != 1) + { + // sequence + // + } + else if (min (a) == 0) + { + // optional + // + os << "if (!this->" << member << ")" + << "{"; + } + else + { + // one + // + os << "if (!" << member << ".present ())" + << "{"; + } + + os << xerces_ns << "::DOMElement* r (" << endl + << "static_cast< " << xerces_ns << "::DOMElement* > (" << endl + << "this->" << dom_doc << " ().importNode (" << endl + << "const_cast< " << xerces_ns << "::DOMElement* > (&i), true)));"; + + if (max (a) != 1) + { + // sequence + // + os << "this->" << member << " .push_back (r);"; + } + else if (min (a) == 0) + { + // optional + // + os << "this->" << member << ".set (r);"; + } + else + { + // one + // + os << "this->" << member << ".set (r);"; + } + + os << "continue;"; + + // End of check block. + // + if (max (a) != 1) + { + // sequence + // + } + else if (min (a) == 0) + { + // optional + // + os << "}"; + } + else + { + // one + // + os << "}"; + } + + os << "}"; // if block + } + }; + + struct AnyTest: Traversal::Any, Context + { + AnyTest (Context& c) + : Context (c) + { + } + + virtual Void + traverse (Type& a) + { + if (max (a) == 1 && min (a) == 1) + { + // one + // + os << "if (!" << emember (a) << ".present ())" + << "{" + << "throw ::xsd::cxx::tree::expected_element< " << + char_type << " > (" << endl + << L << "\"*\"," << endl + << strlit (*a.namespace_begin ()) << ");" + << "}"; + } + } + }; + + struct Attribute: Traversal::Attribute, Context + { + Attribute (Context& c) + : Context (c) + { + } + + virtual Void + traverse (Type& a) + { + String const& member (emember (a)); + + String const& tr (etraits (a)); // traits type name + + if (a.qualified_p () && a.namespace_ ().name ()) + { + os << "if (n.name () == " << strlit (a.name ()) << " && " << + "n.namespace_ () == " << strlit (a.namespace_ ().name ()) << ")" + << "{"; + } + else + { + os << "if (n.name () == " << strlit (a.name ()) << " && " << + "n.namespace_ ().empty ())" + << "{"; + } + + Boolean fund (false); + { + IsFundamentalType traverser (fund); + traverser.dispatch (a.type ()); + } + + if (fund) + { + os << "this->" << member << ".set (" << tr << + "::create (i, f, this));"; + } + else + { + String type (etype (a)); + + os << "::std::auto_ptr< " << type << " > r (" << endl + << tr << "::create (i, f, this));" + << endl + << "this->" << member << ".set (r);"; + } + + os << "continue;" + << "}"; + + } + }; + + struct AnyAttribute: Traversal::AnyAttribute, Context + { + AnyAttribute (Context& c) + : Context (c) + { + } + + virtual Void + traverse (Type& a) + { + String const& member (emember (a)); + + String const& ns (a.definition_namespace ().name ()); + String const& dom_doc ( + edom_document ( + dynamic_cast<SemanticGraph::Complex&> (a.scope ()))); + + os << "// " << ename (a) << endl + << "//" << endl + << "if ("; + + // Note that we need to filter out namespaces for xmlns and + // xsi. + // + for (SemanticGraph::Any::NamespaceIterator i (a.namespace_begin ()), + e (a.namespace_end ()); i != e;) + { + if (*i == L"##any") + { + os << "(n.namespace_ () != " << + "::xsd::cxx::xml::bits::xmlns_namespace< " << char_type << + " > () &&" << endl + << "n.namespace_ () != " << + "::xsd::cxx::xml::bits::xsi_namespace< " << char_type << + " > ())"; + } + else if (*i == L"##other") + { + if (ns) + { + // Note that here I assume that ##other does not include + // unqualified names in a schema with target namespace. + // This is not what the spec says but that seems to be + // the consensus. + // + os << "(!n.namespace_ ().empty () &&" << endl + << "n.namespace_ () != " << strlit (ns) << " &&" <<endl + << "n.namespace_ () != " << + "::xsd::cxx::xml::bits::xmlns_namespace< " << char_type << + " > () &&" << endl + << "n.namespace_ () != " << + "::xsd::cxx::xml::bits::xsi_namespace< " << char_type << + " > ())"; + } + else + os << "(!n.namespace_ ().empty () &&" << endl + << "n.namespace_ () != " << + "::xsd::cxx::xml::bits::xmlns_namespace< " << char_type << + " > () &&" << endl + << "n.namespace_ () != " << + "::xsd::cxx::xml::bits::xsi_namespace< " << char_type << + " > ())"; + } + else if (*i == L"##local") + { + os << "n.namespace_ ().empty ()"; + } + else if (*i == L"##targetNamespace") + { + os << "n.namespace_ () == " << strlit (ns); + } + else + { + os << "n.namespace_ () == " << strlit (*i); + } + + if (++i != e) + os << " ||" << endl; + } + + os << ")" + << "{" + << xerces_ns << "::DOMAttr* r (" << endl + << "static_cast< " << xerces_ns << "::DOMAttr* > (" << endl + << "this->" << dom_doc << " ().importNode (" << endl + << "const_cast< " << xerces_ns << "::DOMAttr* > (&i), true)));" + << "this->" << member << " .insert (r);" + << "continue;" + << "}"; + } + }; + + + struct AttributeTest: Traversal::Attribute, Context + { + AttributeTest (Context& c) + : Context (c) + { + } + + virtual Void + traverse (Type& a) + { + String const& member (emember (a)); + + if (!a.optional_p () || a.default_p ()) + { + os << "if (!" << member << ".present ())" + << "{"; + + if (a.default_p ()) + { + os << "this->" << member << ".set (" << + edefault_value (a) << " ());"; + } + else + os << "throw ::xsd::cxx::tree::expected_attribute< " << + char_type << " > (" << endl + << strlit (a.name ()) << "," << endl + << (a.qualified_p () + ? strlit (a.namespace_ ().name ()) + : L + String ("\"\"")) << ");"; + + os << "}"; + } + } + }; + + + // + // + struct CtorBase: Traversal::Complex, + Traversal::Enumeration, + Traversal::Type, + Context + { + // If base_arg is empty then no base argument is + // generated. + // + CtorBase (Context& c, String const& base_arg) + : Context (c), base_arg_ (base_arg) + { + } + + virtual Void + traverse (SemanticGraph::Type&) + { + if (base_arg_) + os << base_arg_; + } + + virtual Void + traverse (SemanticGraph::Enumeration&) + { + if (base_arg_) + os << base_arg_; + } + + Void + traverse (SemanticGraph::Complex& c) + { + Args args (*this, base_arg_); + args.traverse (c); + } + + private: + // No need to traverse AnyAttribute since it is always mapped + // to a sequence. + // + struct Args: Traversal::Complex, + Traversal::Enumeration, + Traversal::Type, + Traversal::Any, + Traversal::Element, + Traversal::Attribute, + Context + { + Args (Context& c, String const& base_arg) + : Context (c), base_arg_ (base_arg), first_ (true) + { + *this >> inherits_ >> *this; + *this >> names_ >> *this; + } + + virtual Void + traverse (SemanticGraph::Type&) + { + if (base_arg_) + os << comma () << base_arg_; + } + + virtual Void + traverse (SemanticGraph::Enumeration&) + { + if (base_arg_) + os << comma () << base_arg_; + } + + virtual Void + traverse (SemanticGraph::Any& a) + { + if (!options.value<CLI::generate_wildcard> ()) + return; + + if (min (a) == 1 && max (a) == 1) + { + // one + // + os << comma () << ename (a); + } + } + + virtual Void + traverse (SemanticGraph::Element& e) + { + if (!skip (e) && min (e) == 1 && max (e) == 1) + { + // one + // + os << comma () << ename (e); + } + } + + virtual Void + traverse (SemanticGraph::Attribute& a) + { + // Note that we are not including attributes with default + // or required fixed values here. + // + if (min (a) == 1 && !a.fixed_p ()) + { + // one + // + os << comma () << ename (a); + } + } + + using Complex::traverse; + + private: + String + comma () + { + Boolean tmp (first_); + first_ = false; + return tmp ? "" : ",\n"; + } + + private: + String base_arg_; + Boolean first_; + + Traversal::Inherits inherits_; + Traversal::Names names_; + }; + + String base_arg_; + }; + + + struct CtorMember: Traversal::Element, + Traversal::Attribute, + Context + { + CtorMember (Context& c) + : Context (c) + { + } + + virtual Void + traverse (SemanticGraph::Element& e) + { + if (skip (e)) + return; + + String const& member (emember (e)); + + if (max (e) != 1) + { + // sequence + // + os << "," << endl + << " " << member << " (" << flags_type << " (), this)"; + } + else if (min (e) == 0) + { + // optional + // + os << "," << endl + << " " << member << " (" << flags_type << " (), this)"; + } + else + { + // one + // + os << "," << endl + << " " << member << " (" << ename (e) << ", " << + flags_type << " (), this)"; + } + } + + virtual Void + traverse (SemanticGraph::Attribute& a) + { + String const& member (emember (a)); + + Boolean def (a.default_p ()); + + if (min (a) == 0 && !def) + { + // optional + // + os << "," << endl + << " " << member << " (" << flags_type << " (), this)"; + } + else + { + // one + // + + if (def) + { + // This is an attribute with default or fixed value. We are + // going to initialize it to its default value. + // + os << "," << endl + << " " << member << " (" << + edefault_value (a) << " (), " << flags_type << " (), this)"; + } + else + { + os << "," << endl + << " " << member << " (" << ename (a) << ", " << + flags_type << " (), this)"; + } + } + } + }; + + struct CtorAny: Traversal::Any, + Traversal::AnyAttribute, + Context + { + CtorAny (Context& c) + : Context (c) + { + } + + virtual Void + traverse (SemanticGraph::Any& a) + { + String const& member (emember (a)); + String const& dom_doc ( + edom_document ( + dynamic_cast<SemanticGraph::Complex&> (a.scope ()))); + + if (max (a) != 1) + { + // sequence + // + os << "," << endl + << " " << member << " (this->" << dom_doc << " ())"; + } + else if (min (a) == 0) + { + // optional + // + os << "," << endl + << " " << member << " (this->" << dom_doc << " ())"; + } + else + { + // one + // + os << "," << endl + << " " << member << " (" << ename (a) << ", this->" << + dom_doc << " ())"; + } + } + + virtual Void + traverse (SemanticGraph::AnyAttribute& a) + { + String const& dom_doc ( + edom_document ( + dynamic_cast<SemanticGraph::Complex&> (a.scope ()))); + + os << "," << endl + << " " << emember (a) << " (this->" << dom_doc << " ())"; + } + }; + + + struct CopyMember: Traversal::Member, Context + { + CopyMember (Context& c, String const& arg_name_) + : Context (c), arg_name (arg_name_) + { + } + + virtual Void + traverse (SemanticGraph::Member& m) + { + if (skip (m)) + return; + + String const& member (emember (m)); + + os << "," << endl + << " " << member << " (" << + arg_name << "." << member << ", f, this)"; + } + + private: + String arg_name; + }; + + struct CopyAny: Traversal::Any, + Traversal::AnyAttribute, + Context + { + CopyAny (Context& c, String const& arg_name_) + : Context (c), arg_name (arg_name_) + { + } + + virtual Void + traverse (SemanticGraph::Any& a) + { + String const& member (emember (a)); + String const& dom_doc ( + edom_document ( + dynamic_cast<SemanticGraph::Complex&> (a.scope ()))); + + os << "," << endl + << " " << member << " (" << + arg_name << "." << member << ", this->" << dom_doc << " ())"; + } + + virtual Void + traverse (SemanticGraph::AnyAttribute& a) + { + String const& member (emember (a)); + String const& dom_doc ( + edom_document ( + dynamic_cast<SemanticGraph::Complex&> (a.scope ()))); + + os << "," << endl + << " " << member << " (" << + arg_name << "." << member << ", this->" << dom_doc << " ())"; + } + + private: + String arg_name; + }; + + + // Element parsing c-tor initializers. + // + struct ElementCtorMember: Traversal::Member, Context + { + ElementCtorMember (Context& c) + : Context (c) + { + } + + virtual Void + traverse (Type& m) + { + if (skip (m)) + return; + + String const& member (emember (m)); + + os << "," << endl + << " " << member << " (f, this)"; + } + }; + + struct ElementCtorAny: Traversal::Any, + Traversal::AnyAttribute, + Context + { + ElementCtorAny (Context& c) + : Context (c) + { + } + + virtual Void + traverse (SemanticGraph::Any& a) + { + String const& member (emember (a)); + String const& dom_doc ( + edom_document ( + dynamic_cast<SemanticGraph::Complex&> (a.scope ()))); + + os << "," << endl + << " " << member << " (this->" << dom_doc << " ())"; + } + + virtual Void + traverse (SemanticGraph::AnyAttribute& a) + { + String const& member (emember (a)); + String const& dom_doc ( + edom_document ( + dynamic_cast<SemanticGraph::Complex&> (a.scope ()))); + + os << "," << endl + << " " << member << " (this->" << dom_doc << " ())"; + } + }; + + + // Default c-tor member initializer. + // + struct DefaultCtorMemberInit: Traversal::Element, + Traversal::Attribute, + Context + { + DefaultCtorMemberInit (Context& c) + : Context (c) + { + } + + virtual Void + traverse (SemanticGraph::Element& e) + { + if (skip (e)) + return; + + String const& member (emember (e)); + + os << "," << endl + << " " << member << " (" << flags_type << " (), this)"; + } + + virtual Void + traverse (SemanticGraph::Attribute& a) + { + String const& member (emember (a)); + + if (a.default_p ()) + { + // This is an attribute with default or fixed value. We are + // going to initialize it to its default value. + // + os << "," << endl + << " " << member << " (" << + edefault_value (a) << " (), " << flags_type << " (), this)"; + } + else + os << "," << endl + << " " << member << " (" << flags_type << " (), this)"; + } + }; + + struct DefaultCtorAnyInit: Traversal::Any, + Traversal::AnyAttribute, + Context + { + DefaultCtorAnyInit (Context& c) + : Context (c) + { + } + + virtual Void + traverse (SemanticGraph::Any& a) + { + String const& member (emember (a)); + String const& dom_doc ( + edom_document ( + dynamic_cast<SemanticGraph::Complex&> (a.scope ()))); + + os << "," << endl + << " " << member << " (this->" << dom_doc << " ())"; + } + + virtual Void + traverse (SemanticGraph::AnyAttribute& a) + { + String const& member (emember (a)); + String const& dom_doc ( + edom_document ( + dynamic_cast<SemanticGraph::Complex&> (a.scope ()))); + + os << "," << endl + << " " << member << " (this->" << dom_doc << " ())"; + } + }; + + // Test whether the base has comparison operators. + // + struct HasComparisonOperator: Traversal::Fundamental::Type, + Traversal::List, + Traversal::Union, + Traversal::Complex, + Traversal::Enumeration, + Traversal::Member, + Traversal::Any, + Traversal::AnyAttribute, + Context + { + // generate should initially be false. + // + HasComparisonOperator (Context& c, Boolean& generate) + : Context (c), generate_ (generate) + { + *this >> inherits_ >> *this; + *this >> names_ >> *this; + } + + virtual Void + traverse (SemanticGraph::Fundamental::Type&) + { + // All built-in types are comparable. + generate_ = true; + } + + virtual Void + traverse (SemanticGraph::List&) + { + generate_ = true; + } + + virtual Void + traverse (SemanticGraph::Union&) + { + generate_ = true; + } + + virtual Void + traverse (SemanticGraph::Enumeration& e) + { + Traversal::Enumeration::inherits (e); + } + + virtual Void + traverse (SemanticGraph::Complex& c) + { + Complex::names (c); + + if (!generate_) + Complex::inherits (c); + } + + virtual Void + traverse (SemanticGraph::Member& m) + { + if (!skip (m)) + generate_ = true; + } + + virtual Void + traverse (SemanticGraph::Any&) + { + if (options.value<CLI::generate_wildcard> ()) + generate_ = true; + } + + virtual Void + traverse (SemanticGraph::AnyAttribute&) + { + if (options.value<CLI::generate_wildcard> ()) + generate_ = true; + } + + private: + Boolean& generate_; + + Traversal::Inherits inherits_; + Traversal::Names names_; + }; + + // + // + struct MemberComparison: Traversal::Element, + Traversal::Attribute, + Context + { + MemberComparison (Context& c) + : Context (c) + { + } + + virtual Void + traverse (SemanticGraph::Element& e) + { + if (skip (e)) + return; + + String const& aname (eaname (e)); + + // Check if we need to handle xsi:type and substitution groups. + // If this element's type is anonymous then we don't need to do + // anything. Note that if the type is anonymous then it can't be + // derived from which makes it impossible to substitute or + // dynamically-type with xsi:type. + // + SemanticGraph::Type& t (e.type ()); + Boolean poly (polymorphic && polymorphic_p (t) && !anonymous_p (t)); + + if (!poly) + { + os << "if (!(x." << aname << " () == y." << aname << " ()))" << endl + << "return false;" + << endl; + } + else + { + // aCC cannot handle an inline call to comparison_map_instance. + // + os << "{" + << "::xsd::cxx::tree::comparison_map< " << char_type + << " >& cm (" << endl + << "::xsd::cxx::tree::comparison_map_instance< 0, " << + char_type << " > ());" + << endl; + + if (max (e) != 1) + { + // sequence + // + String const& scope (ename (e.scope ())); + + os << scope << "::" << econtainer (e) << + " a (x." << aname << " ()), b (y." << aname << " ());" + << endl; + + os << "if (a.size () != b.size ())" << endl + << "return false;" + << endl; + + os << "for (" << scope << "::" << econst_iterator (e) << endl + << "ai (a.begin ()), bi (b.begin ()), " << + "ae (a.end ()), be (b.end ());" << endl + << "ai != ae; ++ai, ++bi)" + << "{" + << "if (!cm.compare (*ai, *bi))" << endl + << "return false;" + << "}"; + } + else if (min (e) == 0) + { + // optional + // + String const& scope (ename (e.scope ())); + + os << scope << "::" << econtainer (e) << + " a (x." << aname << " ()), b (y." << aname << " ());" + << endl; + + os << "if (!a || !b)" + << "{" + << "if (a.present () != b.present ())" << endl + << "return false;" + << "}" + << "else" + << "{" + << "if (!cm.compare (*a, *b))" << endl + << "return false;" + << "}"; + } + else + { + // one + // + os << "if (!cm.compare (x." << aname << " (), y." << + aname << " ()))" << endl + << "return false;"; + } + + os << "}"; + } + } + + virtual Void + traverse (SemanticGraph::Attribute& a) + { + String const& aname (eaname (a)); + + os << "if (!(x." << aname << " () == y." << aname << " ()))" << endl + << "return false;" + << endl; + } + }; + + struct AnyComparison: Traversal::Any, + Traversal::AnyAttribute, + Context + { + AnyComparison (Context& c) + : Context (c) + { + } + + virtual Void + traverse (SemanticGraph::Any& a) + { + String const& aname (eaname (a)); + + if (max (a) == 1 && min (a) == 1) + os << "if (!x." << aname << " ().isEqualNode (&y." << + aname << " ()))"; + else + os << "if (!(x." << aname << " () == y." << aname << " ()))"; + + os << endl + << "return false;" + << endl; + } + + virtual Void + traverse (SemanticGraph::AnyAttribute& a) + { + String const& aname (eaname (a)); + + os << "if (!(x." << aname << " () == y." << aname << " ()))" << endl + << "return false;" + << endl; + } + }; + + // Check whether a type has a parse() function (i.e., has any + // members, recursively). + // + struct HasParseFunction: Traversal::Complex, + Traversal::Element, + Traversal::Any, + Traversal::Attribute, + Traversal::AnyAttribute, + Context + { + HasParseFunction (Context& c, Boolean& has_el, Boolean& has_at) + : Context (c), has_el_ (has_el), has_at_ (has_at) + { + *this >> names_ >> *this; + *this >> inherits_ >> *this; + } + + virtual Void + traverse (SemanticGraph::Complex& c) + { + names (c); + + if (!(has_el_ && has_at_)) + inherits (c); + } + + virtual Void + traverse (SemanticGraph::Element&) + { + has_el_ = true; + } + + virtual Void + traverse (SemanticGraph::Any&) + { + has_el_ = true; + } + + virtual Void + traverse (SemanticGraph::Attribute&) + { + has_at_ = true; + } + + virtual Void + traverse (SemanticGraph::AnyAttribute&) + { + if (options.value<CLI::generate_wildcard> ()) + has_at_ = true; + } + + private: + Boolean& has_el_; + Boolean& has_at_; + + Traversal::Names names_; + Traversal::Inherits inherits_; + }; + + // + // + struct FacetArray: Traversal::Complex, Context + { + FacetArray (Context& c) + : Context (c) + { + } + + virtual Void + traverse (Type& c) + { + Facets f; + FacetCollector col (f); + col.traverse (c); + + for (Facets::ConstIterator i (f.begin ()); i != f.end (); ++i) + { + if (i->first == L"fractionDigits") + os << "{::xsd::cxx::tree::facet::fraction_digits, " << + i->second << "UL}," << endl; + else if (i->first == L"totalDigits") + os << "{::xsd::cxx::tree::facet::total_digits, " << + i->second << "UL}," << endl; + } + } + + private: + typedef Cult::Containers::Map<String, String> Facets; + + struct FacetCollector: Traversal::Complex + { + FacetCollector (Facets& facets) + : facets_ (facets) + { + *this >> inherits_ >> *this; + } + + virtual Void + traverse (Type& c) + { + if (c.inherits_p ()) + { + // First collect our base so that we can override its + // facets. + // + inherits (c); + + using SemanticGraph::Restricts; + + if (Restricts* r = dynamic_cast<Restricts*> (&c.inherits ())) + { + if (!r->facet_empty ()) + { + Restricts::FacetIterator i (r->facet_find ("totalDigits")); + + if (i != r->facet_end ()) + facets_[i->first] = i->second; + + i = r->facet_find ("fractionDigits"); + + if (i != r->facet_end ()) + facets_[i->first] = i->second; + } + } + } + } + + private: + Traversal::Inherits inherits_; + Facets& facets_; + }; + }; + + // + // + struct Complex: Traversal::Complex, Context + { + Complex (Context& c) + : Context (c), + member_name_ (c), + any_ (c), + element_ (c), + any_test_ (c), + element_test_ (c), + attribute_ (c), + attribute_test_ (c), + any_attribute_ (c), + default_ctor_any_init_ (c), + default_ctor_member_init_ (c), + ctor_any_ (c), + ctor_member_ (c), + element_ctor_any_ (c), + element_ctor_member_ (c), + comparison_any_ (c), + comparison_member_ (c), + facet_array_ (c) + { + inherits_member_ >> member_name_; + + names_element_ >> element_; + if (options.value<CLI::generate_wildcard> ()) + names_element_ >> any_; + + names_element_test_ >> element_test_; + if (options.value<CLI::generate_wildcard> ()) + names_element_test_ >> any_test_; + + names_attribute_ >> attribute_; + names_attribute_test_ >> attribute_test_; + names_any_attribute_ >> any_attribute_; + + default_ctor_init_names_ >> default_ctor_member_init_; + if (options.value<CLI::generate_wildcard> ()) + default_ctor_init_names_ >> default_ctor_any_init_; + + ctor_names_ >> ctor_member_; + if (options.value<CLI::generate_wildcard> ()) + ctor_names_ >> ctor_any_; + + element_ctor_names_ >> element_ctor_member_; + if (options.value<CLI::generate_wildcard> ()) + element_ctor_names_ >> element_ctor_any_; + + comparison_names_ >> comparison_member_; + if (options.value<CLI::generate_wildcard> ()) + comparison_names_ >> comparison_any_; + } + + + virtual Void + traverse (Type& c) + { + String name (ename (c)); + + // If renamed name is empty then we do not need to generate + // anything for this type. + // + if (renamed_type (c, name) && !name) + return; + + Boolean string_based (false); + { + IsStringBasedType t (string_based); + t.dispatch (c); + } + + SemanticGraph::Enumeration* enum_base (0); + { + IsEnumBasedType t (enum_base); + t.dispatch (c); + } + + Boolean facets (false); + String base; // base type name + if (c.inherits_p ()) + { + // Get base name. + // + std::wostringstream o; + + BaseTypeName base_type (*this, o); + Traversal::Inherits inherits_type (base_type); + + // Cannot use inherits_none here because need the + // result in a string. + // + inherits (c, inherits_type); + + base = o.str (); + + // See if we have any facets that we need to handle. + // + using SemanticGraph::Restricts; + using SemanticGraph::Fundamental::Decimal; + + if (Restricts* r = dynamic_cast<Restricts*> (&c.inherits ())) + { + if (!r->facet_empty () && + (r->facet_find ("fractionDigits") != r->facet_end () || + r->facet_find ("totalDigits") != r->facet_end ()) && + ultimate_base (c).is_a<Decimal> ()) + facets = true; + } + } + else + base = any_type; + + os << "// " << name << endl + << "//" << endl + << endl; + + // + // + { + Member member (*this, name); + Traversal::Names names_member (member); + names (c, names_member); + } + + // facets + // + if (facets) + { + os << "static const ::xsd::cxx::tree::facet _xsd_" << name << + "_facet_table[] = " + << "{"; + + facet_array_.traverse (c); + + os << "{::xsd::cxx::tree::facet::none, 0UL}" + << "};"; + } + + // c-tors + // + Boolean generate_no_base_ctor (false); + { + GenerateWithoutBaseCtor t (generate_no_base_ctor); + t.traverse (c); + } + + Boolean has_complex_non_op_args (false); + Boolean has_poly_non_op_args (false); + Boolean complex_poly_args_clash (true); + { + HasComplexPolyNonOptArgs t (*this, true, + has_complex_non_op_args, + has_poly_non_op_args, + complex_poly_args_clash); + t.traverse (c); + } + + // default c-tor + // + if (options.value<CLI::generate_default_ctor> ()) + { + Boolean generate (false); + { + GenerateDefaultCtor t (*this, generate, generate_no_base_ctor); + t.traverse (c); + } + + if (generate) + { + os << name << "::" << endl + << name << " ()" << endl + << ": " << base << " ()"; + + if (edom_document_member_p (c)) + { + os << "," << endl + << " " << edom_document_member (c) << " (" << + "::xsd::cxx::xml::dom::create_document< " << char_type << + " > ())"; + } + + names (c, default_ctor_init_names_); + + os << "{"; + if (facets) + os << "this->_facet_table (_xsd_" << name << "_facet_table);"; + os << "}"; + } + } + + // c-tor (base, all-non-optional-members) + // + if (options.value<CLI::generate_from_base_ctor> ()) + { + Boolean generate (false); + { + GenerateFromBaseCtor t (*this, generate); + t.traverse (c); + } + + if (generate) + { + Boolean has_complex_non_op_args (false); + Boolean has_poly_non_op_args (false); + Boolean complex_poly_args_clash (true); + { + HasComplexPolyNonOptArgs t (*this, false, + has_complex_non_op_args, + has_poly_non_op_args, + complex_poly_args_clash); + t.traverse (c); + } + + String base_arg ( + L"_xsd_" + ename (c.inherits ().base ()) + L"_base"); + + os << name << "::" << endl + << name << " (const "; + inherits (c, inherits_member_); + os << "& " << base_arg; + { + FromBaseCtorArg args (*this, FromBaseCtorArg::arg_type, true); + Traversal::Names args_names (args); + names (c, args_names); + } + os << ")" << endl + << ": " << base << " (" << base_arg << ")"; + + if (edom_document_member_p (c)) + { + os << "," << endl + << " " << edom_document_member (c) << " (" << + "::xsd::cxx::xml::dom::create_document< " << char_type << + " > ())"; + } + + names (c, ctor_names_); + + os << "{"; + if (facets) + os << "this->_facet_table (_xsd_" << name << "_facet_table);"; + os << "}"; + + // If we have any complex arguments in the previous c-tor + // then also generate the auto_ptr version. + // + if (has_complex_non_op_args) + { + os << name << "::" << endl + << name << " (const "; + inherits (c, inherits_member_); + os << "& " << base_arg; + { + FromBaseCtorArg args ( + *this, FromBaseCtorArg::arg_complex_auto_ptr, true); + Traversal::Names args_names (args); + names (c, args_names); + } + os << ")" << endl + << ": " << base << " (" << base_arg << ")"; + + if (edom_document_member_p (c)) + { + os << "," << endl + << " " << edom_document_member (c) << " (" << + "::xsd::cxx::xml::dom::create_document< " << char_type << + " > ())"; + } + + names (c, ctor_names_); + + os << "{"; + if (facets) + os << "this->_facet_table (_xsd_" << name << "_facet_table);"; + os << "}"; + } + + // If we are generating polymorphic code then we also need to + // provide auto_ptr version for every polymorphic type. + // + if (polymorphic && + has_poly_non_op_args && !complex_poly_args_clash) + { + os << name << "::" << endl + << name << " (const "; + inherits (c, inherits_member_); + os << "& " << base_arg; + { + FromBaseCtorArg args ( + *this, FromBaseCtorArg::arg_poly_auto_ptr, true); + Traversal::Names args_names (args); + names (c, args_names); + } + os << ")" << endl + << ": " << base << " (" << base_arg << ")"; + + if (edom_document_member_p (c)) + { + os << "," << endl + << " " << edom_document_member (c) << " (" << + "::xsd::cxx::xml::dom::create_document< " << char_type << + " > ())"; + } + + names (c, ctor_names_); + + os << "{"; + if (facets) + os << "this->_facet_table (_xsd_" << name << "_facet_table);"; + os << "}"; + } + } + } + + // c-tor (all-non-optional-members) + // + if (generate_no_base_ctor) + { + os << name << "::" << endl + << name << " ("; + { + CtorArgsWithoutBase ctor_args ( + *this, CtorArgsWithoutBase::arg_type, true, true); + ctor_args.dispatch (c); + } + os << ")" << endl + << ": " << base << " ("; + { + CtorBase base (*this, ""); + Traversal::Inherits inherits_base (base); + + inherits (c, inherits_base); + } + os << ")"; + + if (edom_document_member_p (c)) + { + os << "," << endl + << " " << edom_document_member (c) << " (" << + "::xsd::cxx::xml::dom::create_document< " << char_type << + " > ())"; + } + + names (c, ctor_names_); + + os << "{"; + if (facets) + os << "this->_facet_table (_xsd_" << name << "_facet_table);"; + os << "}"; + + // If we have any complex arguments in the previous c-tor + // then also generate the auto_ptr version. One case where + // this c-tor will be generated is restriction of anyType. + // + if (has_complex_non_op_args) + { + os << name << "::" << endl + << name << " ("; + { + CtorArgsWithoutBase ctor_args ( + *this, CtorArgsWithoutBase::arg_complex_auto_ptr, true, true); + ctor_args.dispatch (c); + } + os << ")" << endl + << ": " << base << " ("; + { + CtorBase base (*this, ""); + Traversal::Inherits inherits_base (base); + + inherits (c, inherits_base); + } + os << ")"; + + if (edom_document_member_p (c)) + { + os << "," << endl + << " " << edom_document_member (c) << " (" << + "::xsd::cxx::xml::dom::create_document< " << char_type << + " > ())"; + } + + names (c, ctor_names_); + + os << "{"; + if (facets) + os << "this->_facet_table (_xsd_" << name << "_facet_table);"; + os << "}"; + } + + // If we are generating polymorphic code then we also need to + // provide auto_ptr version for every polymorphic type. + // + if (polymorphic && + has_poly_non_op_args && !complex_poly_args_clash) + { + os << name << "::" << endl + << name << " ("; + { + CtorArgsWithoutBase ctor_args ( + *this, CtorArgsWithoutBase::arg_poly_auto_ptr, true, true); + ctor_args.dispatch (c); + } + os << ")" << endl + << ": " << base << " ("; + { + CtorBase base (*this, ""); + Traversal::Inherits inherits_base (base); + + inherits (c, inherits_base); + } + os << ")"; + + if (edom_document_member_p (c)) + { + os << "," << endl + << " " << edom_document_member (c) << " (" << + "::xsd::cxx::xml::dom::create_document< " << char_type << + " > ())"; + } + + names (c, ctor_names_); + + os << "{"; + if (facets) + os << "this->_facet_table (_xsd_" << name << "_facet_table);"; + os << "}"; + } + } + + if (string_based) + { + // We might not have the value type if this enum is customized. + // + if (enum_base != 0 && enum_base->context ().count ("value")) + { + // c-tor (enum-value, all-non-optional-members) + // + String base_arg (L"_xsd_" + ename (*enum_base) + L"_base"); + + os << name << "::" << endl + << name << " (" << fq_name (*enum_base) << "::" << + evalue (*enum_base) << " " << base_arg; + + { + CtorArgsWithoutBase ctor_args ( + *this, CtorArgsWithoutBase::arg_type, true, false); + ctor_args.dispatch (c); + } + + os << ")" << endl + << ": " << base << " ("; + + { + CtorBase base (*this, base_arg); + Traversal::Inherits inherits_base (base); + + inherits (c, inherits_base); + } + + os << ")"; + + if (edom_document_member_p (c)) + { + os << "," << endl + << " " << edom_document_member (c) << " (" << + "::xsd::cxx::xml::dom::create_document< " << char_type << + " > ())"; + } + + names (c, ctor_names_); + + os << "{"; + if (facets) + os << "this->_facet_table (_xsd_" << name << "_facet_table);"; + os << "}"; + } + + String base_arg (L"_xsd_" + ename (ultimate_base (c)) + L"_base"); + + // c-tor (const char*, all-non-optional-members) + // + os << name << "::" << endl + << name << " (const " << char_type << "* " << base_arg; + + { + CtorArgsWithoutBase ctor_args ( + *this, CtorArgsWithoutBase::arg_type, true, false); + ctor_args.dispatch (c); + } + + os << ")" << endl + << ": " << base << " ("; + + { + CtorBase base (*this, base_arg); + Traversal::Inherits inherits_base (base); + + inherits (c, inherits_base); + } + + os << ")"; + + if (edom_document_member_p (c)) + { + os << "," << endl + << " " << edom_document_member (c) << " (" << + "::xsd::cxx::xml::dom::create_document< " << char_type << + " > ())"; + } + + names (c, ctor_names_); + + os << "{"; + if (facets) + os << "this->_facet_table (_xsd_" << name << "_facet_table);"; + os << "}"; + + + // c-tor (const std::string&, all-non-optional-members) + // + os << name << "::" << endl + << name << " (const " << string_type << "& " << base_arg; + + { + CtorArgsWithoutBase ctor_args ( + *this, CtorArgsWithoutBase::arg_type, true, false); + ctor_args.dispatch (c); + } + + os << ")" << endl + << ": " << base << " ("; + + { + CtorBase base (*this, base_arg); + Traversal::Inherits inherits_base (base); + + inherits (c, inherits_base); + } + + os << ")"; + + if (edom_document_member_p (c)) + { + os << "," << endl + << " " << edom_document_member (c) << " (" << + "::xsd::cxx::xml::dom::create_document< " << char_type << + " > ())"; + } + + names (c, ctor_names_); + + os << "{"; + if (facets) + os << "this->_facet_table (_xsd_" << name << "_facet_table);"; + os << "}"; + } + + // c-tor (ultimate-base, all-non-optional-members) + // + + os << name << "::" << endl + << name << " ("; + + String base_arg; + + { + CtorArgs ctor_args (*this, CtorArgs::arg_type, base_arg); + ctor_args.dispatch (c); + } + + os << ")" << endl + << ": " << base << " ("; + + { + CtorBase base (*this, base_arg); + Traversal::Inherits inherits_base (base); + + inherits (c, inherits_base); + } + + os << ")"; + + if (edom_document_member_p (c)) + { + os << "," << endl + << " " << edom_document_member (c) << " (" << + "::xsd::cxx::xml::dom::create_document< " << char_type << + " > ())"; + } + + names (c, ctor_names_); + + os << "{"; + if (facets) + os << "this->_facet_table (_xsd_" << name << "_facet_table);"; + os << "}"; + + // If we have any complex arguments in the previous c-tor + // then also generate the auto_ptr version. + // + if (has_complex_non_op_args) + { + os << name << "::" << endl + << name << " ("; + + String base_arg; + + { + CtorArgs ctor_args ( + *this, CtorArgs::arg_complex_auto_ptr, base_arg); + ctor_args.dispatch (c); + } + + os << ")" << endl + << ": " << base << " ("; + + { + CtorBase base (*this, base_arg); + Traversal::Inherits inherits_base (base); + + inherits (c, inherits_base); + } + + os << ")"; + + if (edom_document_member_p (c)) + { + os << "," << endl + << " " << edom_document_member (c) << " (" << + "::xsd::cxx::xml::dom::create_document< " << char_type << + " > ())"; + } + + names (c, ctor_names_); + + os << "{"; + if (facets) + os << "this->_facet_table (_xsd_" << name << "_facet_table);"; + os << "}"; + } + + // If we are generating polymorphic code then we also need to + // provide auto_ptr version for every polymorphic type. + // + if (polymorphic && + has_poly_non_op_args && !complex_poly_args_clash) + { + os << name << "::" << endl + << name << " ("; + + String base_arg; + + { + CtorArgs ctor_args ( + *this, CtorArgs::arg_poly_auto_ptr, base_arg); + ctor_args.dispatch (c); + } + + os << ")" << endl + << ": " << base << " ("; + + { + CtorBase base (*this, base_arg); + Traversal::Inherits inherits_base (base); + + inherits (c, inherits_base); + } + + os << ")"; + + if (edom_document_member_p (c)) + { + os << "," << endl + << " " << edom_document_member (c) << " (" << + "::xsd::cxx::xml::dom::create_document< " << char_type << + " > ())"; + } + + names (c, ctor_names_); + + os << "{"; + if (facets) + os << "this->_facet_table (_xsd_" << name << "_facet_table);"; + os << "}"; + } + + + // copy c-tor + // + + os << name << "::" << endl + << name << " (const " << name << "& x," << endl + << flags_type << " f," << endl + << container << "* c)" << endl + << ": " << base << " (x, f, c)"; + + if (edom_document_member_p (c)) + { + os << "," << endl + << " " << edom_document_member (c) << " (" << + "::xsd::cxx::xml::dom::create_document< " << char_type << + " > ())"; + } + + { + CopyAny copy_any (*this, "x"); + CopyMember copy_member (*this, "x"); + Traversal::Names names; + + names >> copy_member; + + if (options.value<CLI::generate_wildcard> ()) + names >> copy_any; + + Complex::names (c, names); + } + + os << "{"; + if (facets) + os << "this->_facet_table (_xsd_" << name << "_facet_table);"; + os << "}"; + + // + // + Boolean he (has<Traversal::Element> (c)); + Boolean hae (has<Traversal::Any> (c)); + + Boolean ha (has<Traversal::Attribute> (c)); + Boolean haa (has<Traversal::AnyAttribute> (c)); + + Boolean gen_wildcard (options.value<CLI::generate_wildcard> ()); + + // + // + if (!options.value<CLI::suppress_parsing> ()) + { + // c-tor (xercesc::DOMElement) + // + os << name << "::" << endl + << name << " (const " << xerces_ns << "::DOMElement& e," << endl + << flags_type << " f," << endl + << container << "* c)" << endl + << ": " << base << " (e, f"; + + if (he || ha || hae || (haa && gen_wildcard)) + os << " | " << flags_type << "::base"; + + os << ", c)"; + + if (edom_document_member_p (c)) + { + os << "," << endl + << " " << edom_document_member (c) << " (" << + "::xsd::cxx::xml::dom::create_document< " << char_type << + " > ())"; + } + + names (c, element_ctor_names_); + + os << "{"; + + if (facets) + os << "this->_facet_table (_xsd_" << name << "_facet_table);" + << endl; + + Boolean base_has_el (false), base_has_at (false); + + // We are only interested in this information if we are + // generating out own parse(). + // + if (he || ha || hae || (haa && gen_wildcard)) + { + if (c.inherits_p ()) + { + HasParseFunction test (*this, base_has_el, base_has_at); + test.dispatch (c.inherits ().base ()); + } + } + + //@@ throw if p is no exhausted at the end. + // + if (he || ha || hae || (haa && gen_wildcard)) + os << "if ((f & " << flags_type << "::base) == 0)" + << "{" + << parser_type << " p (e, " << + (he || hae || base_has_el ? "true, " : "false, ") << + (ha || (haa && gen_wildcard) || base_has_at ? "true" : "false") + << ");" + << "this->" << unclash (name, "parse") << " (p, f);" + << "}"; + + os << "}"; + + Boolean simple (true); + { + IsSimpleType t (simple); + t.dispatch (c); + } + + if (simple) + { + // c-tor (xercesc::DOMAttr) + // + os << name << "::" << endl + << name << " (const " << xerces_ns << "::DOMAttr& a," << endl + << flags_type << " f," << endl + << container << "* c)" << endl + << ": " << base << " (a, f, c)" + << "{"; + + if (facets) + os << "this->_facet_table (_xsd_" << name << "_facet_table);"; + + os << "}"; + + // c-tor (string const&, xercesc::DOMElement) + // + os << name << "::" << endl + << name << " (const " << string_type << "& s," << endl + << "const " << xerces_ns << "::DOMElement* e," << endl + << flags_type << " f," << endl + << container << "* c)" << endl + << ": " << base << " (s, e, f, c)" + << "{"; + + if (facets) + os << "this->_facet_table (_xsd_" << name << "_facet_table);"; + + os << "}"; + } + + if (he || ha || hae || (haa && gen_wildcard)) + { + os << "void " << name << "::" << endl + << unclash (name, "parse") << " (" << + parser_type << "& p," << endl + << flags_type << + (he || ha || base_has_el || base_has_at ? " f" : "") << ")" + << "{"; + + // Allow the base to parse its part. + // + if (base_has_el || base_has_at) + os << "this->" << base << "::parse (p, f);" + << endl; + + if (he || hae) + { + os << "for (; p.more_elements (); p.next_element ())" + << "{" + << "const " << xerces_ns << "::DOMElement& i (" << + "p.cur_element ());" + << "const " << qname_type << " n (" << endl + << "::xsd::cxx::xml::dom::name< " << char_type << " > (i));" + << endl; + + names (c, names_element_); + + os << "break;" + << "}"; + + // Make sure all non-optional elements are set. + // + names (c, names_element_test_); + } + + if (ha || (haa && gen_wildcard)) + { + if (base_has_at) + os << "p.reset_attributes ();" + << endl; + + os << "while (p.more_attributes ())" + << "{" + << "const " << xerces_ns << "::DOMAttr& i (" << + "p.next_attribute ());" + << "const " << qname_type << " n (" << endl + << "::xsd::cxx::xml::dom::name< " << char_type << " > (i));" + << endl; + + names (c, names_attribute_); + + // Generate anyAttribute code after all the attributes. + // + if (gen_wildcard) + names (c, names_any_attribute_); + + + // os << "{" // else block + // @@ + // This doesn't play well with inheritance because we + // don't expect base's attributes. Also there are other + // "special" attributes such as xmlns, etc. + // + // << "throw ::xsd::cxx::tree::unexpected_attribute ... " + // << "}"; + + os << "}"; // while loop + + // Make sure all non-optional attributes are set. + // + names (c, names_attribute_test_); + } + + os << "}"; + } + } + + // _clone + // + os << name << "* " << name << "::" << endl + << "_clone (" << flags_type << " f," << endl + << container << "* c) const" + << "{" + << "return new class " << name << " (*this, f, c);" + << "}"; + + // d-tor + // + os << name << "::" << endl + << "~" << name << " ()" + << "{" + << "}"; + + // Register with type factory map. + // + if (polymorphic && polymorphic_p (c) && !anonymous_p (c)) + { + // Note that we are using the original type name. + // + String const& name (ename (c)); + + if (!options.value<CLI::suppress_parsing> ()) + os << "static" << endl + << "const ::xsd::cxx::tree::type_factory_initializer< 0, " << + char_type << ", " << name << " >" << endl + << "_xsd_" << name << "_type_factory_init (" << endl + << strlit (c.name ()) << "," << endl + << strlit (xml_ns_name (c)) << ");" + << endl; + + if (options.value<CLI::generate_comparison> ()) + os << "static" << endl + << "const ::xsd::cxx::tree::comparison_initializer< 0, " << + char_type << ", " << name << " >" << endl + << "_xsd_" << name << "_comparison_init;" + << endl; + } + + // Comparison operators. + // + if (options.value<CLI::generate_comparison> () && + (he || ha || !c.inherits_p () || + ((hae || haa) && gen_wildcard))) + { + Boolean base_comp (false); + + if (c.inherits_p ()) + { + HasComparisonOperator test (*this, base_comp); + test.dispatch (c.inherits ().base ()); + } + + Boolean has_body (he || ha || base_comp || + ((hae || haa) && gen_wildcard)); + + os << "bool" << endl + << "operator== (const " << name << "&" << + (has_body ? " x" : "") << ", " << + "const " << name << "&" << (has_body ? " y" : "") << ")" + << "{"; + + if (base_comp) + os << "if (!(static_cast< const " << base << "& > (x) ==" << endl + << "static_cast< const " << base << "& > (y)))" << endl + << "return false;" + << endl; + + { + Complex::names (c, comparison_names_); + } + + os << "return true;" + << "}"; + + os << "bool" << endl + << "operator!= (const " << name << "& x, " << + "const " << name << "& y)" + << "{" + << "return !(x == y);" + << "}"; + } + } + + private: + Traversal::Inherits inherits_member_; + MemberTypeName member_name_; + + Traversal::Names names_element_; + Traversal::Names names_element_test_; + + Traversal::Names names_attribute_; + Traversal::Names names_any_attribute_; + Traversal::Names names_attribute_test_; + + Any any_; + Element element_; + + AnyTest any_test_; + ElementTest element_test_; + + Attribute attribute_; + AttributeTest attribute_test_; + + AnyAttribute any_attribute_; + + DefaultCtorAnyInit default_ctor_any_init_; + DefaultCtorMemberInit default_ctor_member_init_; + Traversal::Names default_ctor_init_names_; + + CtorAny ctor_any_; + CtorMember ctor_member_; + Traversal::Names ctor_names_; + + ElementCtorAny element_ctor_any_; + ElementCtorMember element_ctor_member_; + Traversal::Names element_ctor_names_; + + AnyComparison comparison_any_; + MemberComparison comparison_member_; + Traversal::Names comparison_names_; + + FacetArray facet_array_; + }; + + + // Generate element types and substitution group map entries. + // + struct GlobalElement: Traversal::Element, + GlobalElementBase, + Context + { + GlobalElement (Context& c) + : GlobalElementBase (c), + Context (c), + element_type_ (c.options.value<CLI::generate_element_type> ()), + element_map_ (c.options.value<CLI::generate_element_map> ()), + type_name_ (c) + { + belongs_ >> type_name_; + } + + virtual Void + traverse (Type& e) + { + if (element_type_ && doc_root_p (e)) + { + SemanticGraph::Type& t (e.type ()); + + Boolean fund (false); + { + IsFundamentalType test (fund); + test.dispatch (t); + } + + Boolean simple (true); + if (!fund) + { + IsSimpleType test (simple); + test.dispatch (t); + } + + String const& name (ename (e)); + String const& type (etype (e)); + String const& member (emember (e)); + + os << "// " << name << endl + << "// " << endl + << endl; + + // Virtual accessors. + // + os << "const " << any_type << "* " << name << "::" << endl + << "_value () const" + << "{"; + + if (fund) + os << "return 0;"; + else + os << "return &this->" << member << ".get ();"; + + os << "}"; + + os << any_type << "* " << name << "::" << endl + << "_value ()" + << "{"; + + if (fund) + os << "return 0;"; + else + os << "return &this->" << member << ".get ();"; + + os << "}"; + + // default c-tor + // + if (options.value<CLI::generate_default_ctor> ()) + { + os << name << "::" << endl + << name << " ()" << endl + << ": " << member << " (0, 0)" + << "{" + << "}"; + } + + // c-tor (value) + // + os << name << "::" << endl + << name << " (const " << type << "& x)" << endl + << ": " << member << " (x, 0, 0)" + << "{" + << "}"; + + + // c-tor (auto_ptr<value>) + // + if (!simple || (polymorphic && polymorphic_p (t))) + { + os << name << "::" << endl + << name << " (::std::auto_ptr< " << type << " > p)" << endl + << ": " << member << " (p, 0, 0)" + << "{" + << "}"; + } + + // c-tor (xercesc::DOMElement) + // + SemanticGraph::Context& ec (e.context ()); + String const& name_member (ec.get<String> ("element-name-member")); + String const& ns_member (ec.get<String> ("element-ns-member")); + + Boolean parsing (!options.value<CLI::suppress_parsing> ()); + if (parsing) + { + String const& tr (etraits (e)); + + os << name << "::" << endl + << name << " (const " << xerces_ns << "::DOMElement& e, " << + flags_type << " f)" << endl + << ": " << member << " (f, 0)" + << "{" + << "const " << qname_type << " n (" << endl + << "::xsd::cxx::xml::dom::name< " << char_type << " > (e));" + << endl + << "if (n.name () == " << name_member << " && " << + "n.namespace_ () == " << ns_member << ")" << endl + << "this->" << member << ".set (" << tr << + "::create (e, f, 0));" + << "else" << endl + << "throw ::xsd::cxx::tree::unexpected_element < " << + char_type << " > (" << endl + << "n.name (), n.namespace_ ()," << endl + << name_member << ", " << ns_member << ");" + << "}"; + } + + // copy c-tor + // + os << name << "::" << endl + << name << " (const " << name << "& x, " << + flags_type << " f)" << endl + << ": " << element_type << " ()," << endl + << " " << member << " (x." << member << ", f, 0)" + << "{" + << "}"; + + // _clone + // + os << name << "* " << name << "::" << endl + << "_clone (" << flags_type << " f) const" + << "{" + << "return new class " << name << " (*this, f);" + << "}"; + + // Element name and namespace accessors. + // + String const& aname (ec.get<String> ("element-name")); + String const& ans (ec.get<String> ("element-ns")); + + os << "const " << string_type << "& " << name << "::" << endl + << aname << " ()" + << "{" + << "return " << name_member << ";" + << "}"; + + os << "const " << string_type << "& " << name << "::" << endl + << ans << " ()" + << "{" + << "return " << ns_member << ";" + << "}"; + + os << "const " << string_type << "& " << name << "::" << endl + << "_name () const" + << "{" + << "return " << name_member << ";" + << "}"; + + os << "const " << string_type << "& " << name << "::" << endl + << "_namespace () const" + << "{" + << "return " << ns_member << ";" + << "}"; + + os << "const " << string_type << " " << name << "::" << endl + << name_member << " (" << strlit (e.name ()) << ");" + << endl + << "const " << string_type << " " << name << "::" << endl + << ns_member << " (" << strlit (e.namespace_ ().name ()) << ");" + << endl; + + // d-tor + // + os << name << "::" << endl + << "~" << name << " ()" + << "{" + << "}"; + + // Element map registration. + // + if (element_map_ && parsing) + { + os << "static " << endl + << "const ::xsd::cxx::tree::parser_init< " << name << ", " << + char_type << ", " << any_type << " >" << endl + << "_xsd_" << name << "_parser_init (" << + name << "::" << aname << " (), " << + name << "::" << ans << " ());" + << endl; + } + } + + if (polymorphic && e.substitutes_p () && + !options.value<CLI::suppress_parsing> ()) + { + String const& name (ename (e)); + Type& r (e.substitutes ().root ()); + + os << "static" << endl + << "const ::xsd::cxx::tree::element_factory_initializer< 0, " << + char_type << ", "; + + belongs (e, belongs_); + + os << " >" << endl + << "_xsd_" << name << "_element_factory_init (" << endl + << strlit (r.name ()) << "," << endl + << strlit (r.namespace_ ().name ()) << "," << endl + << strlit (e.name ()) << "," << endl + << strlit (e.namespace_ ().name ()) << ");" + << endl + << endl; + } + } + + private: + Boolean element_type_; + Boolean element_map_; + Traversal::Belongs belongs_; + MemberTypeName type_name_; + }; + } + + Void + generate_tree_source (Context& ctx, + UnsignedLong first, + UnsignedLong last) + { + if (ctx.options.value<CLI::generate_wildcard> ()) + { + ctx.os << "#include <xsd/cxx/xml/dom/wildcard-source.hxx>" << endl + << endl; + } + + if (!ctx.options.value<CLI::suppress_parsing> ()) + ctx.os << "#include <xsd/cxx/xml/dom/parsing-source.hxx>" << endl + << endl; + + if (ctx.polymorphic) + { + Boolean parsing (!ctx.options.value<CLI::suppress_parsing> ()); + Boolean comparison (ctx.options.value<CLI::generate_comparison> ()); + + if (parsing) + ctx.os << "#include <xsd/cxx/tree/type-factory-map.hxx>" << endl + << endl; + + if (comparison) + ctx.os << "#include <xsd/cxx/tree/comparison-map.hxx>" << endl + << endl; + + if (parsing || comparison) + { + Boolean import_maps (ctx.options.value<CLI::import_maps> ()); + Boolean export_maps (ctx.options.value<CLI::export_maps> ()); + + if (import_maps || export_maps) + { + ctx.os << "#ifndef XSD_NO_EXPORT" << endl + << endl + << "namespace xsd" + << "{" + << "namespace cxx" + << "{" + << "namespace tree" + << "{" + << "#ifdef _MSC_VER" << endl; + + if (parsing && export_maps) + ctx.os << "template struct __declspec (dllexport) " << + "type_factory_plate< 0, " << ctx.char_type << " >;"; + + if (parsing && import_maps) + ctx.os << "template struct __declspec (dllimport) " << + "type_factory_plate< 0, " << ctx.char_type << " >;"; + + if (comparison && export_maps) + ctx.os << "template struct __declspec (dllexport) " << + "comparison_plate< 0, " << ctx.char_type << " >;"; + + if (comparison && import_maps) + ctx.os << "template struct __declspec (dllimport) " << + "comparison_plate< 0, " << ctx.char_type << " >;"; + + ctx.os << "#elif defined(__GNUC__) && __GNUC__ >= 4" << endl; + + if (parsing) + ctx.os << "template struct __attribute__ ((visibility(\"default\"))) " << + "type_factory_plate< 0, " << ctx.char_type << " >;"; + + if (comparison) + ctx.os << "template struct __attribute__ ((visibility(\"default\"))) " << + "comparison_plate< 0, " << ctx.char_type << " >;"; + + ctx.os << "#elif defined(XSD_MAP_VISIBILITY)" << endl; + + if (parsing) + ctx.os << "template struct XSD_MAP_VISIBILITY " << + "type_factory_plate< 0, " << ctx.char_type << " >;"; + + if (comparison) + ctx.os << "template struct XSD_MAP_VISIBILITY " << + "comparison_plate< 0, " << ctx.char_type << " >;"; + + ctx.os << "#endif" << endl + << "}" // tree + << "}" // cxx + << "}" // xsd + << "#endif // XSD_NO_EXPORT" << endl + << endl; + } + + ctx.os << "namespace _xsd" + << "{"; + + if (parsing) + ctx.os << "static" << endl + << "const ::xsd::cxx::tree::type_factory_plate< 0, " << + ctx.char_type << " >" << endl + << "type_factory_plate_init;" + << endl; + + if (comparison) + ctx.os << "static" << endl + << "const ::xsd::cxx::tree::comparison_plate< 0, " << + ctx.char_type << " >" << endl + << "comparison_plate_init;" + << endl; + + ctx.os << "}"; + } + } + + Traversal::Schema schema; + Traversal::Sources sources; + Traversal::Names names_ns, names; + Namespace ns (ctx, first, last); + + List list (ctx); + Union union_ (ctx); + Complex complex (ctx); + Enumeration enumeration (ctx); + GlobalElement element (ctx); + + schema >> sources >> schema; + schema >> names_ns >> ns >> names; + + names >> list; + names >> union_; + names >> complex; + names >> enumeration; + names >> element; + + schema.dispatch (ctx.schema_root); + } + } +} diff --git a/xsd/xsd/cxx/tree/tree-source.hxx b/xsd/xsd/cxx/tree/tree-source.hxx new file mode 100644 index 0000000..a1b4778 --- /dev/null +++ b/xsd/xsd/cxx/tree/tree-source.hxx @@ -0,0 +1,20 @@ +// file : xsd/cxx/tree/tree-source.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef CXX_TREE_TREE_SOURCE_HXX +#define CXX_TREE_TREE_SOURCE_HXX + +#include <cxx/tree/elements.hxx> + +namespace CXX +{ + namespace Tree + { + Void + generate_tree_source (Context&, UnsignedLong first, UnsignedLong last); + } +} + +#endif // CXX_TREE_TREE_SOURCE_HXX diff --git a/xsd/xsd/cxx/tree/validator.cxx b/xsd/xsd/cxx/tree/validator.cxx new file mode 100644 index 0000000..88451ba --- /dev/null +++ b/xsd/xsd/cxx/tree/validator.cxx @@ -0,0 +1,680 @@ +// file : xsd/cxx/tree/validator.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <cxx/tree/validator.hxx> + +#include <cult/containers/set.hxx> + +#include <xsd-frontend/semantic-graph.hxx> +#include <xsd-frontend/traversal.hxx> + +#include <cxx/tree/elements.hxx> + +#include <iostream> + +using std::wcerr; + +namespace CXX +{ + namespace Tree + { + namespace + { + class ValidationContext: public Context + { + public: + ValidationContext (SemanticGraph::Schema& root, + SemanticGraph::Path const& path, + CLI::Options const& options, + const WarningSet& disabled_warnings, + Counts const& counts, + Boolean generate_xml_schema, + Boolean& valid_) + : Context (std::wcerr, + root, + path, + options, + counts, + generate_xml_schema, + 0, + 0, + 0, + 0), + disabled_warnings_ (disabled_warnings), + disabled_warnings_all_ (false), + valid (valid_), + subst_group_warning_issued (subst_group_warning_issued_), + subst_group_warning_issued_ (false) + { + if (disabled_warnings_.find ("all") != disabled_warnings_.end ()) + disabled_warnings_all_ = true; + } + + public: + Boolean + is_disabled (Char const* w) + { + return disabled_warnings_all_ || + disabled_warnings_.find (w) != disabled_warnings_.end (); + } + + public: + String + xpath (SemanticGraph::Nameable& n) + { + if (n.is_a<SemanticGraph::Namespace> ()) + return L"<namespace-level>"; // There is a bug if you see this. + + if (n.named_p ()) + { + SemanticGraph::Scope& scope (n.scope ()); + + if (scope.is_a<SemanticGraph::Namespace> ()) + return n.name (); + + return xpath (scope) + L"/" + n.name (); + } + else + { + return L"(anonymous type for " + + n.context ().get<String> ("instance-name") + L")"; + } + } + + protected: + ValidationContext (ValidationContext& c) + : Context (c), + disabled_warnings_ (c.disabled_warnings_), + disabled_warnings_all_ (c.disabled_warnings_all_), + valid (c.valid), + subst_group_warning_issued (c.subst_group_warning_issued) + { + } + + protected: + const WarningSet& disabled_warnings_; + Boolean disabled_warnings_all_; + + Boolean& valid; + + Boolean& subst_group_warning_issued; + Boolean subst_group_warning_issued_; + }; + + + // + // + struct Any: Traversal::Any, ValidationContext + { + Any (ValidationContext& c) + : ValidationContext (c) + { + } + + struct Element: Traversal::Element, ValidationContext + { + Element (ValidationContext& c, SemanticGraph::Any& any) + : ValidationContext (c), + any_ (any), + ns_ (any.definition_namespace ().name ()) + { + } + + virtual Void + traverse (SemanticGraph::Element& e) + { + if (skip (e)) + return; + + using SemanticGraph::Any; + + Boolean q (e.qualified_p ()); + String ns (q ? e.namespace_ ().name () : ""); + + for (Any::NamespaceIterator i (any_.namespace_begin ()); + i != any_.namespace_end (); ++i) + { + Boolean failed (false); + + if (*i == L"##any") + { + failed = true; + } + else if (*i == L"##other") + { + if (ns_) + { + // Note that here I assume that ##other does not + // include names without target namespace. This + // is not what the spec says but that seems to be + // the consensus. + // + failed = q && ns != ns_; + } + else + { + // No target namespace. + // + failed = q && ns != L""; + } + } + else if (*i == L"##local") + { + failed = !q || ns == L""; + } + else if (*i == L"##targetNamespace") + { + failed = (q && ns_ == ns) || (!q && ns_ == L""); + } + else + { + failed = q && *i == ns; + } + + if (failed) + { + Any& a (any_); + + os << a.file () << ":" << a.line () << ":" << a.column () + << ": warning T001: namespace '" << *i << "' allows for " + << "element '" << e.name () << "'" << endl; + + os << a.file () << ":" << a.line () << ":" << a.column () + << ": warning T001: generated code may not associate element '" + << e.name () << "' correctly if it appears in place of " + << "this wildcard" << endl; + + os << e.file () << ":" << e.line () << ":" << e.column () + << ": info: element '" << e.name () << "' is defined " + << "here" << endl; + } + } + } + + private: + SemanticGraph::Any& any_; + String ns_; + }; + + struct Complex: Traversal::Complex + { + Complex () + : up_ (true), down_ (true) + { + } + + virtual Void + post (Type& c) + { + // Go down the inheritance hierarchy. + // + if (down_) + { + Boolean up = up_; + up_ = false; + + if (c.inherits_p ()) + dispatch (c.inherits ().base ()); + + up_ = up; + } + + // Go up the inheritance hierarchy. + // + if (up_) + { + Boolean down = down_; + down_ = false; + + for (Type::BegetsIterator i (c.begets_begin ()); + i != c.begets_end (); ++i) + { + dispatch (i->derived ()); + } + + down_ = down; + } + } + + private: + Boolean up_, down_; + }; + + virtual Void + traverse (SemanticGraph::Any& a) + { + using SemanticGraph::Compositor; + + // Find our complex type. + // + Compositor* c (&a.contained_particle ().compositor ()); + + while(!c->contained_compositor_p ()) + c = &c->contained_particle ().compositor (); + + SemanticGraph::Complex& type ( + dynamic_cast<SemanticGraph::Complex&> ( + c->contained_compositor ().container ())); + + Complex complex; + Traversal::Names names; + Element element (*this, a); + + complex >> names >> element; + + complex.dispatch (type); + } + }; + + + // + // + struct Traverser: Traversal::Schema, + Traversal::Complex, + Traversal::Type, + Traversal::Element, + ValidationContext + { + Traverser (ValidationContext& c) + : ValidationContext (c), any_ (c) + { + *this >> sources_ >> *this; + *this >> schema_names_ >> ns_ >> names_; + + names_ >> *this >> names_; + + // Any + // + if (!is_disabled ("T001")) + { + *this >> contains_compositor_ >> compositor_ >> contains_particle_; + contains_particle_ >> compositor_; + contains_particle_ >> any_; + } + } + + virtual Void + traverse (SemanticGraph::Complex& c) + { + using SemanticGraph::Schema; + + traverse (static_cast<SemanticGraph::Type&> (c)); + + if (c.inherits_p ()) + { + SemanticGraph::Type& t (c.inherits ().base ()); + + if (t.named_p () && + types_.find ( + t.scope ().name () + L"#" + t.name ()) == types_.end ()) + { + // Don't worry about types that are in included/imported + // schemas. + // + Schema& s (dynamic_cast<Schema&> (t.scope ().scope ())); + + if (&s == &schema_root || sources_p (schema_root, s)) + { + valid = false; + + os << c.file () << ":" << c.line () << ":" << c.column () + << ": error: type '" << xpath (c) << "' inherits from " + << "yet undefined type '" << xpath (t) << "'" << endl; + + os << t.file () << ":" << t.line () << ":" << t.column () + << ": info: '" << xpath (t) << "' is defined here" + << endl; + + os << c.file () << ":" << c.line () << ":" << c.column () + << ": info: inheritance from a yet-undefined type is " + << "not supported" << endl; + + os << c.file () << ":" << c.line () << ":" << c.column () + << ": info: re-arrange your schema and try again" + << endl; + } + } + } + + Complex::traverse (c); + } + + virtual Void + traverse (SemanticGraph::Type& t) + { + // This is also used to traverse Complex. + // + if (t.named_p ()) + { + types_.insert (t.scope ().name () + L"#" + t.name ()); + } + } + + virtual Void + traverse (SemanticGraph::Element& e) + { + if (is_disabled ("T002")) + return; + + // Note that there is no test for generate_p since we want + // to catch cases when things are not being generated but + // most likely should have been. + // + if (e.substitutes_p () && !polymorphic && + !subst_group_warning_issued) + { + subst_group_warning_issued = true; + + os << e.file () << ":" << e.line () << ":" << e.column () + << ": warning T002: substitution groups are used but " + << "--generate-polymorphic was not specified" << endl; + + os << e.file () << ":" << e.line () << ":" << e.column () + << ": info: generated code may not be able to handle " + << "some conforming instances" << endl; + } + } + + // Return true if root sources s. + // + Boolean + sources_p (SemanticGraph::Schema& root, SemanticGraph::Schema& s) + { + using SemanticGraph::Schema; + using SemanticGraph::Sources; + + for (Schema::UsesIterator i (root.uses_begin ()); + i != root.uses_end (); ++i) + { + if (i->is_a<Sources> ()) + { + if (&i->schema () == &s || sources_p (i->schema (), s)) + return true; + } + } + + return false; + } + + private: + Containers::Set<String> types_; + + Traversal::Sources sources_; + + Traversal::Names schema_names_; + Traversal::Namespace ns_; + + Traversal::Names names_; + + // Any. + // + Any any_; + Traversal::Compositor compositor_; + Traversal::ContainsParticle contains_particle_; + Traversal::ContainsCompositor contains_compositor_; + }; + + + struct AnonymousType: Traversal::Schema, + Traversal::Complex, + Traversal::Element, + Traversal::Attribute, + ValidationContext + { + AnonymousType (ValidationContext& c) + : ValidationContext (c), + anonymous_error_issued_ (false) + { + *this >> sources_ >> *this; + *this >> schema_names_ >> ns_ >> names_ >> *this; + *this >> names_; + } + + Boolean + traverse_common (SemanticGraph::Member& m) + { + SemanticGraph::Type& t (m.type ()); + + if (!t.named_p () + && !t.is_a<SemanticGraph::Fundamental::IdRef> () + && !t.is_a<SemanticGraph::Fundamental::IdRefs> ()) + { + if (!anonymous_error_issued_) + { + valid = false; + anonymous_error_issued_ = true; + + wcerr << t.file () + << ": error: anonymous types detected" + << endl; + + wcerr << t.file () + << ": info: " + << "anonymous types are not supported in this mapping" + << endl; + + wcerr << t.file () + << ": info: consider explicitly naming these types or " + << "remove the --preserve-anonymous option to " + << "automatically name them" + << endl; + + if (!options.value<CLI::show_anonymous> ()) + wcerr << t.file () + << ": info: use --show-anonymous option to see these " + << "types" << endl; + } + + return true; + } + + return false; + } + + virtual Void + traverse (SemanticGraph::Element& e) + { + if (skip (e)) return; + + if (traverse_common (e)) + { + if (options.value<CLI::show_anonymous> ()) + { + wcerr << e.file () << ":" << e.line () << ":" << e.column () + << ": error: element '" << xpath (e) << "' " + << "is of anonymous type" << endl; + } + } + else + Traversal::Element::traverse (e); + } + + virtual Void + traverse (SemanticGraph::Attribute& a) + { + if (traverse_common (a)) + { + if (options.value<CLI::show_anonymous> ()) + { + wcerr << a.file () << ":" << a.line () << ":" << a.column () + << ": error: attribute '" << xpath (a) << "' " + << "is of anonymous type" << endl; + } + } + else + Traversal::Attribute::traverse (a); + } + + private: + Boolean anonymous_error_issued_; + + Containers::Set<String> types_; + + Traversal::Sources sources_; + + Traversal::Names schema_names_; + Traversal::Namespace ns_; + + Traversal::Names names_; + }; + } + + Validator:: + Validator () + { + // Dummy ctor, helps with long symbols on HP-UX. + } + + Boolean Validator:: + validate (CLI::Options const& options, + SemanticGraph::Schema& schema, + SemanticGraph::Path const& path, + const WarningSet& disabled_warnings, + Counts const& counts) + { + Boolean valid (true); + ValidationContext ctx ( + schema, path, options, disabled_warnings, counts, false, valid); + + // + // + Boolean import_maps (options.value<CLI::import_maps> ()); + Boolean export_maps (options.value<CLI::export_maps> ()); + + if (import_maps && export_maps) + { + wcerr << "error: --import-maps and --export-maps are " + << "mutually exclusive" << endl; + + return false; + } + + if (import_maps && !ctx.polymorphic) + { + wcerr << "error: --import-maps can only be specified together with " + << "--generate-polymorphic" << endl; + + return false; + } + + if (export_maps && !ctx.polymorphic) + { + wcerr << "error: --export-maps can only be specified together " << + "with --generate-polymorphic" << endl; + + return false; + } + + // + // + if (options.value<CLI::char_type> () != "char" && + options.value<CLI::char_type> () != "wchar_t" && + !ctx.is_disabled ("T003")) + { + wcerr << "warning T003: unknown base character type '" << + options.value<CLI::char_type> ().c_str () << "'" << endl; + } + + // + // + NarrowString tn (options.value<CLI::type_naming> ()); + + if (tn != "knr" && tn != "ucc" && tn != "java") + { + wcerr << "error: unknown type naming style specified: '" << + tn.c_str () << "'" << endl; + + return false; + } + + NarrowString fn (options.value<CLI::function_naming> ()); + + if (fn != "knr" && fn != "lcc" && fn != "java") + { + wcerr << "error: unknown function naming style specified: '" << + fn.c_str () << "'" << endl; + + return false; + } + + // + // + Boolean element_type (options.value<CLI::generate_element_type> ()); + Boolean par (!options.value<CLI::suppress_parsing> ()); + Boolean ser (options.value<CLI::generate_serialization> ()); + + if (options.value<CLI::generate_element_map> ()) + { + if (!element_type) + { + wcerr << "error: --generate-element-map can only be specified " << + "together with --generate-element-type" << endl; + + return false; + } + + if (!(par || ser)) + { + wcerr << "error: --generate-element-map is specified but " << + "neither parsing nor serialization code is generated" << endl; + + return false; + } + } + + // Issue a warning if there are more than one global element + // and we are generating parsing/serialization functions or + // element types for all of them by default. + // + + if (counts.global_elements > 1 && + (element_type || par || ser) && + !options.value<CLI::root_element_first> () && + !options.value<CLI::root_element_last> () && + !options.value<CLI::root_element_all> () && + !options.value<CLI::root_element_none> () && + options.value<CLI::root_element> ().empty () && + !ctx.is_disabled ("T004")) + { + wcerr << schema.file () << ": warning T004: generating "; + + if (element_type) + wcerr << "element types"; + else + { + wcerr << (par ? "parsing " : "") << + (ser ? (par ? "and serialization " : "serialization ") : "") << + "functions"; + } + wcerr << " for " << counts.global_elements << " global elements" << + endl; + + wcerr << schema.file () << ": info: use --root-element-* options " + << "to specify document root(s)" << endl; + } + + + // Test for anonymout types. + // + { + AnonymousType traverser (ctx); + traverser.dispatch (schema); + } + + // Test the rest. + // + if (valid) + { + Traverser traverser (ctx); + traverser.dispatch (schema); + } + + return valid; + + // T005 is used in polymorphism-processor.cxx. + // + } + } +} diff --git a/xsd/xsd/cxx/tree/validator.hxx b/xsd/xsd/cxx/tree/validator.hxx new file mode 100644 index 0000000..da0c441 --- /dev/null +++ b/xsd/xsd/cxx/tree/validator.hxx @@ -0,0 +1,33 @@ +// file : xsd/cxx/tree/validator.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef CXX_TREE_VALIDATOR_HXX +#define CXX_TREE_VALIDATOR_HXX + +#include <cxx/tree/elements.hxx> +#include <cxx/tree/cli.hxx> + +#include <xsd.hxx> + +namespace CXX +{ + namespace Tree + { + class Validator + { + public: + Validator (); // Dummy ctor, helps with long symbols on HP-UX. + + Boolean + validate (CLI::Options const& options, + SemanticGraph::Schema&, + SemanticGraph::Path const& tu, + const WarningSet& disabled_warnings, + Counts const& counts); + }; + } +} + +#endif // CXX_TREE_VALIDATOR_HXX diff --git a/xsd/xsd/elements.hxx b/xsd/xsd/elements.hxx new file mode 100644 index 0000000..3a535a6 --- /dev/null +++ b/xsd/xsd/elements.hxx @@ -0,0 +1,134 @@ +// file : xsd/elements.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef ELEMENTS_HXX +#define ELEMENTS_HXX + +#include <cult/types.hxx> + +#include <xsd-frontend/semantic-graph.hxx> +#include <xsd-frontend/traversal.hxx> + +using namespace Cult; +typedef WideString String; + +namespace SemanticGraph = XSDFrontend::SemanticGraph; +namespace Traversal = XSDFrontend::Traversal; + + +// Anonymous feedback via belongs edge. +// +struct AnonymousBase : Traversal::Element, + Traversal::Attribute +{ + AnonymousBase (Traversal::NodeDispatcherBase& d1) + : complex_ (&d1, 0) + { + edge_traverser (belongs_); + belongs_.node_traverser (complex_); + } + + AnonymousBase (Traversal::NodeDispatcherBase& d1, + Traversal::NodeDispatcherBase& d2) + : complex_ (&d1, &d2) + { + edge_traverser (belongs_); + belongs_.node_traverser (complex_); + } + + // Hooks. + // +public: + virtual void + member_pre (SemanticGraph::Member&) + { + } + + virtual void + member_post (SemanticGraph::Member&) + { + } + + /* + virtual void + type_pre (SemanticGraph::Type& t) + { + } + + virtual void + type_post (SemanticGraph::Type& t) + { + } + */ + +public: + + virtual Void + traverse (SemanticGraph::Element& e) + { + SemanticGraph::Type& t (e.type ()); + + if (!t.named_p () && !t.context ().count ("seen")) + { + t.context ().set ("seen", true); + + member_pre (e); + + Element::belongs (e, belongs_); + + member_post (e); + + t.context ().remove ("seen"); + } + } + + virtual Void + traverse (SemanticGraph::Attribute& a) + { + SemanticGraph::Type& t (a.type ()); + + if (!t.named_p () && !t.context ().count ("seen")) + { + t.context ().set ("seen", true); + + member_pre (a); + + Attribute::belongs (a, belongs_); + + member_post (a); + + t.context ().remove ("seen"); + } + } + +private: + struct Complex : Traversal::Complex + { + Complex (Traversal::NodeDispatcherBase* d1, + Traversal::NodeDispatcherBase* d2) + : d1_ (d1), d2_ (d2) + { + } + + virtual Void + traverse (SemanticGraph::Complex& c) + { + if (d1_) + d1_->dispatch (c); + + if (d2_) + d2_->dispatch (c); + } + + private: + Traversal::NodeDispatcherBase* d1_; + Traversal::NodeDispatcherBase* d2_; + + } complex_; + + Traversal::Belongs belongs_; +}; + +#endif // ELEMENTS_HXX diff --git a/xsd/xsd/makefile b/xsd/xsd/makefile new file mode 100644 index 0000000..cc04568 --- /dev/null +++ b/xsd/xsd/makefile @@ -0,0 +1,153 @@ +# file : xsd/makefile +# author : Boris Kolpackov <boris@codesynthesis.com> +# copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +# license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +include $(dir $(lastword $(MAKEFILE_LIST)))../build/bootstrap.make + +cxx_tun := xsd.cxx + +cxx_tun += cxx/elements.cxx \ + cxx/literal-map.cxx + +cxx_tun += cxx/parser/elements.cxx \ + cxx/parser/validator.cxx \ + cxx/parser/name-processor.cxx \ + cxx/parser/type-processor.cxx \ + cxx/parser/state-processor.cxx \ + cxx/parser/generator.cxx \ + cxx/parser/parser-header.cxx \ + cxx/parser/parser-inline.cxx \ + cxx/parser/parser-source.cxx \ + cxx/parser/parser-forward.cxx \ + cxx/parser/impl-header.cxx \ + cxx/parser/impl-source.cxx \ + cxx/parser/driver-source.cxx \ + cxx/parser/element-validation-source.cxx \ + cxx/parser/attribute-validation-source.cxx \ + cxx/parser/characters-validation-source.cxx + +cxx_tun += cxx/tree/elements.cxx \ + cxx/tree/validator.cxx \ + cxx/tree/counter.cxx \ + cxx/tree/name-processor.cxx \ + cxx/tree/polymorphism-processor.cxx \ + cxx/tree/default-value.cxx \ + cxx/tree/generator.cxx \ + cxx/tree/tree-forward.cxx \ + cxx/tree/tree-header.cxx \ + cxx/tree/tree-inline.cxx \ + cxx/tree/tree-source.cxx \ + cxx/tree/parser-header.cxx \ + cxx/tree/parser-source.cxx \ + cxx/tree/stream-header.cxx \ + cxx/tree/stream-source.cxx \ + cxx/tree/serialization-header.cxx \ + cxx/tree/serialization-source.cxx \ + cxx/tree/stream-insertion-header.cxx \ + cxx/tree/stream-insertion-source.cxx \ + cxx/tree/stream-extraction-source.cxx + + +# Type map +# +cxx_tun += type-map/lexer.cxx \ + type-map/parser.cxx + +# Processing +# +cxx_tun += processing/cardinality/processor.cxx \ + processing/inheritance/processor.cxx + + +cxx_obj := $(addprefix $(out_base)/,$(cxx_tun:.cxx=.o)) +cxx_od := $(cxx_obj:.o=.o.d) + +xsd := $(out_base)/xsd +install := $(out_base)/.install +dist := $(out_base)/.dist +dist-win := $(out_base)/.dist-win +clean := $(out_base)/.clean + +# Import. +# +$(call import,\ + $(scf_root)/import/libcult/stub.make,\ + l: cult.l,cpp-options: cult.l.cpp-options) + +$(call import,\ + $(scf_root)/import/libbackend-elements/stub.make,\ + l: be.l,cpp-options: be.l.cpp-options) + +$(call import,\ + $(scf_root)/import/libboost/regex/stub.make,\ + l: re.l,cpp-options: re.l.cpp-options) + +$(call import,\ + $(scf_root)/import/libboost/filesystem/stub.make,\ + l: fs.l,cpp-options: fs.l.cpp-options) + +$(call import,\ + $(scf_root)/import/libxsd-frontend/stub.make,\ + l: xsd_fe.l,cpp-options: xsd_fe.l.cpp-options) + +$(call import,\ + $(scf_root)/import/libxerces-c/stub.make,\ + l: xerces_c.l,cpp-options: xerces_c.l.cpp-options) + +# Build. +# +$(xsd): $(cxx_obj) $(xsd_fe.l) $(be.l) $(cult.l) $(fs.l) $(re.l) $(xerces_c.l) + +$(cxx_obj) $(cxx_od): cpp_options := -I$(src_base) +$(cxx_obj) $(cxx_od): \ + $(xsd_fe.l.cpp-options) \ + $(be.l.cpp-options) \ + $(cult.l.cpp-options) \ + $(fs.l.cpp-options) \ + $(re.l.cpp-options) \ + $(xerces_c.l.cpp-options) + +$(call include-dep,$(cxx_od)) + +# Alias for default target. +# +$(out_base)/: $(xsd) + +# Install +# +$(install): $(xsd) + $(call install-exec,$<,$(install_bin_dir)/xsd) + +# Dist. +# +$(dist): $(xsd) + $(call install-exec,$<,$(dist_prefix)/bin/xsd) + +$(dist-win): $(xsd) + $(call install-exec,$<,$(dist_prefix)/bin/xsd.exe) + +# Clean. +# +$(clean): \ + $(xsd).o.clean \ + $(addsuffix .cxx.clean,$(cxx_obj)) \ + $(addsuffix .cxx.clean,$(cxx_od)) + +# Generated .gitignore. +# +ifeq ($(out_base),$(src_base)) +$(xsd): | $(out_base)/.gitignore + +$(out_base)/.gitignore: files := xsd +$(clean): $(out_base)/.gitignore.clean + +$(call include,$(bld_root)/git/gitignore.make) +endif + +# How to. +# +$(call include,$(bld_root)/cxx/o-e.make) +$(call include,$(bld_root)/cxx/cxx-o.make) +$(call include,$(bld_root)/cxx/cxx-d.make) +$(call include,$(bld_root)/install.make) diff --git a/xsd/xsd/processing/cardinality/processor.cxx b/xsd/xsd/processing/cardinality/processor.cxx new file mode 100644 index 0000000..473c412 --- /dev/null +++ b/xsd/xsd/processing/cardinality/processor.cxx @@ -0,0 +1,407 @@ +// file : processing/cardinality/processor.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <processing/cardinality/processor.hxx> + +#include <elements.hxx> + +#include <xsd-frontend/semantic-graph.hxx> +#include <xsd-frontend/traversal.hxx> + +#include <cult/containers/map.hxx> + +namespace Processing +{ + using namespace Cult; + + namespace SemanticGraph = XSDFrontend::SemanticGraph; + namespace Traversal = XSDFrontend::Traversal; + + typedef WideString String; + + namespace Cardinality + { + namespace + { + // + // + struct ElementInfo + { + ElementInfo () + : min (0), max (0), e_ (0) + { + } + + ElementInfo (SemanticGraph::Element& e) + : min (1), max (1), e_ (&e) + { + } + + ElementInfo (SemanticGraph::Element& e, + UnsignedLong min_, UnsignedLong max_) + : min (min_), max (max_), e_ (&e) + { + } + + SemanticGraph::Element& + element () + { + assert (e_ != 0); + return *e_; + } + + public: + UnsignedLong min, max; + + private: + SemanticGraph::Element* e_; + }; + + typedef Cult::Containers::Map<String, ElementInfo> ElementInfoMap; + + // + // + struct AnyInfo + { + AnyInfo () + : min (0), max (0), a_ (0) + { + } + + AnyInfo (SemanticGraph::Any& a) + : min (1), max (1), a_ (&a) + { + } + + AnyInfo (SemanticGraph::Any& a, + UnsignedLong min_, UnsignedLong max_) + : min (min_), max (max_), a_ (&a) + { + } + + SemanticGraph::Any& + any () + { + assert (a_ != 0); + return *a_; + } + + public: + UnsignedLong min, max; + + private: + SemanticGraph::Any* a_; + }; + + typedef Cult::Containers::Map<String, AnyInfo> AnyInfoMap; + + // + // + struct Particle: Traversal::All, + Traversal::Choice, + Traversal::Sequence, + Traversal::Element, + Traversal::Any + { + virtual Void + traverse (SemanticGraph::All& a) + { + traverse_sequence (a); + } + + virtual Void + traverse (SemanticGraph::Choice& c) + { + using SemanticGraph::Compositor; + + // Go over all particles we contain and add them to the map. + // + for (Compositor::ContainsIterator ci (c.contains_begin ()); + ci != c.contains_end (); ++ci) + { + Particle t; + t.dispatch (ci->particle ()); + + // Handle elements. + // + if (ci == c.contains_begin ()) + el_map = t.el_map; // First arm. + else + { + // For elements that are in the map but not in this + // arm of choice, we need to set min to 0 while for + // those that are we need to choose minimum between + // the two for min and maximum for max. + // + for (ElementInfoMap::Iterator i (el_map.begin ()); + i != el_map.end (); ++i) + { + String const& name (i->first); + ElementInfo& ei (i->second); + + ElementInfoMap::Iterator j (t.el_map.find (name)); + + if (j == t.el_map.end ()) + ei.min = 0; + else + { + ei.min = j->second.min < ei.min ? j->second.min : ei.min; + ei.max = j->second.max > ei.max ? j->second.max : ei.max; + } + } + + // Now elements that are in this arm of choice but are + // not in the map, we need to add to the map and set their + // min to 0. + // + for (ElementInfoMap::Iterator i (t.el_map.begin ()); + i != t.el_map.end (); ++i) + { + String const& name (i->first); + ElementInfo& ei (i->second); + + ElementInfoMap::Iterator j (el_map.find (name)); + + if (j == el_map.end ()) + el_map[name] = ElementInfo (ei.element (), 0, ei.max); + } + } + + // Handle wildcards. Since each wildcard is treated as unique, + // we need to copy them from each arm of choice and set min to + // 0. + // + for (AnyInfoMap::Iterator i (t.any_map.begin ()); + i != t.any_map.end (); ++i) + { + String const& name (i->first); + AnyInfo& ai (i->second); + + assert (any_map.find (name) == any_map.end ()); + + any_map[name] = AnyInfo (ai.any (), 0, ai.max); + } + } + + // Choice's min and max. + // + UnsignedLong cmin (c.min ()), cmax (c.max ()); + + // Iterate over elements and wildcards in the maps and multiply + // their cardinality by cmin and cmax. + // + for (ElementInfoMap::Iterator i (el_map.begin ()); + i != el_map.end (); ++i) + { + i->second.min *= cmin; + i->second.max *= cmax; + } + + for (AnyInfoMap::Iterator i (any_map.begin ()); + i != any_map.end (); ++i) + { + i->second.min *= cmin; // Not really necessary since min == 0. + i->second.max *= cmax; + } + } + + virtual Void + traverse (SemanticGraph::Sequence& s) + { + traverse_sequence (s); + } + + Void + traverse_sequence (SemanticGraph::Compositor& c) + { + using SemanticGraph::Compositor; + + // Sequence's min and max. + // + UnsignedLong smin (c.min ()), smax (c.max ()); + + // Go over all particles we contain and add them to the map. + // + for (Compositor::ContainsIterator ci (c.contains_begin ()); + ci != c.contains_end (); ++ci) + { + Particle t; + t.dispatch (ci->particle ()); + + // Handle elements. + // + for (ElementInfoMap::Iterator i (t.el_map.begin ()); + i != t.el_map.end (); ++i) + { + String const& name (i->first); + ElementInfo& ei (i->second); + UnsignedLong min (ei.min * smin); + UnsignedLong max (ei.max * smax); + ElementInfoMap::Iterator j (el_map.find (name)); + + if (j != el_map.end ()) + { + // Add i's cardinality to j + // + j->second.min += min; + j->second.max = (j->second.max == 0 || max == 0) ? + 0 : (j->second.max + max); + } + else + el_map[name] = ElementInfo (ei.element (), min, max); + } + + // Handle wildcards. + // + for (AnyInfoMap::Iterator i (t.any_map.begin ()); + i != t.any_map.end (); ++i) + { + String const& name (i->first); + AnyInfo& ai (i->second); + UnsignedLong min (ai.min * smin); + UnsignedLong max (ai.max * smax); + + assert (any_map.find (name) == any_map.end ()); + + any_map[name] = AnyInfo (ai.any (), min, max); + } + } + } + + virtual Void + traverse (SemanticGraph::Element& e) + { + SemanticGraph::ContainsParticle& cp (e.contained_particle ()); + + String name (e.qualified_p () + ? e.namespace_ ().name () + L" " + e.name () + : e.name ()); + + el_map[name] = ElementInfo (e, cp.min (), cp.max ()); + } + + virtual Void + traverse (SemanticGraph::Any& a) + { + SemanticGraph::ContainsParticle& cp (a.contained_particle ()); + + any_map[a.name ()] = AnyInfo (a, cp.min (), cp.max ()); + } + + public: + AnyInfoMap any_map; + ElementInfoMap el_map; + }; + + + // + // + struct Complex: Traversal::Complex + { + virtual Void + traverse (Type& c) + { + if (c.contains_compositor_p ()) + { + Particle t; + t.dispatch (c.contains_compositor ().compositor ()); + + for (ElementInfoMap::Iterator i (t.el_map.begin ()); + i != t.el_map.end (); ++i) + { + ElementInfo& ei (i->second); + FrontendElements::Context& ctx (ei.element ().context ()); + + ctx.set ("min", ei.min); + ctx.set ("max", ei.max); + } + + for (AnyInfoMap::Iterator i (t.any_map.begin ()); + i != t.any_map.end (); ++i) + { + AnyInfo& ai (i->second); + FrontendElements::Context& ctx (ai.any ().context ()); + + ctx.set ("min", ai.min); + ctx.set ("max", ai.max); + } + } + + // Traverse attributes and anonymous types (via elements). + // + Complex::names (c); + } + }; + + + // + // + struct Attribute: Traversal::Attribute + { + virtual Void + traverse (Type& a) + { + FrontendElements::Context& ctx (a.context ()); + + ctx.set ("min", a.optional_p () ? 0UL : 1UL); + ctx.set ("max", 1UL); + } + }; + + // Go into implied/included/imported schemas while making sure + // we don't process the same stuff more than once. + // + struct Uses: Traversal::Uses + { + virtual Void + traverse (Type& u) + { + SemanticGraph::Schema& s (u.schema ()); + + if (!s.context ().count ("processing-cardinality-seen")) + { + s.context ().set ("processing-cardinality-seen", true); + Traversal::Uses::traverse (u); + } + } + }; + } + + Void Processor:: + process (SemanticGraph::Schema& tu, SemanticGraph::Path const&) + { + Traversal::Schema schema; + Uses uses; + + schema >> uses >> schema; + + Traversal::Names schema_names; + Traversal::Namespace ns; + Traversal::Names ns_names; + + schema >> schema_names >> ns >> ns_names; + + Complex complex_type; + AnonymousBase anonymous (complex_type); + + ns_names >> complex_type; + ns_names >> anonymous; + + Attribute attribute; + Traversal::Names names; + + complex_type >> names; + + names >> attribute; + names >> anonymous; + + // Some twisted schemas do recusive inclusions. + // + tu.context ().set ("processing-cardinality-seen", true); + + schema.dispatch (tu); + } + } +} diff --git a/xsd/xsd/processing/cardinality/processor.hxx b/xsd/xsd/processing/cardinality/processor.hxx new file mode 100644 index 0000000..31c6ef8 --- /dev/null +++ b/xsd/xsd/processing/cardinality/processor.hxx @@ -0,0 +1,32 @@ +// file : processing/cardinality/processor.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef PROCESSING_CARDINALITY_PROCESSOR_HXX +#define PROCESSING_CARDINALITY_PROCESSOR_HXX + +#include <cult/types.hxx> + +#include <xsd-frontend/semantic-graph/elements.hxx> // Path +#include <xsd-frontend/semantic-graph/schema.hxx> + +namespace Processing +{ + namespace Cardinality + { + using namespace Cult::Types; + + class Processor + { + public: + struct Failed {}; + + Void + process (XSDFrontend::SemanticGraph::Schema&, + XSDFrontend::SemanticGraph::Path const& file); + }; + } +} + +#endif // PROCESSING_CARDINALITY_PROCESSOR_HXX diff --git a/xsd/xsd/processing/inheritance/processor.cxx b/xsd/xsd/processing/inheritance/processor.cxx new file mode 100644 index 0000000..d92ea6c --- /dev/null +++ b/xsd/xsd/processing/inheritance/processor.cxx @@ -0,0 +1,474 @@ +// file : processing/inheritance/processor.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <processing/inheritance/processor.hxx> + +#include <elements.hxx> + +#include <xsd-frontend/semantic-graph.hxx> +#include <xsd-frontend/traversal.hxx> + +#include <cult/containers/set.hxx> + +#include <iostream> +using std::wcerr; +using std::endl; + +namespace Processing +{ + using namespace Cult; + + namespace SemanticGraph = XSDFrontend::SemanticGraph; + namespace Traversal = XSDFrontend::Traversal; + + typedef WideString String; + + namespace Inheritance + { + namespace + { + struct Dep + { + Dep (SemanticGraph::Type& t, + SemanticGraph::Member* m = 0, + String const& xpath = L"") + : type (t), member (m), member_xpath (xpath) + { + } + + SemanticGraph::Type& type; + SemanticGraph::Member* member; // Member if type is anonymous. + String member_xpath; + }; + + inline Boolean + operator< (Dep const& a, Dep const& b) + { + return &a.type < &b.type; + } + + typedef Containers::Set<Dep> DepSet; + typedef Containers::Set<SemanticGraph::Type*> TypeSet; + + + String + xpath (SemanticGraph::Nameable& n) + { + if (dynamic_cast<SemanticGraph::Namespace*> (&n) != 0) + return L"<namespace-level>"; // There is a bug if you see this. + + if (n.named_p ()) + { + SemanticGraph::Scope& scope (n.scope ()); + + if (dynamic_cast<SemanticGraph::Namespace*> (&scope) != 0) + return n.name (); + + return xpath (scope) + L"/" + n.name (); + } + else + { + return L"(anonymous type for " + + n.context ().get<String> ("instance-name") + L")"; + } + } + + + // Calculate the list of dependencies for this complex + // type. + // + struct ComplexType: Traversal::Complex, + Traversal::Member + { + ComplexType (DepSet& dep_set) + : dep_set_ (dep_set), last_ (0) + { + *this >> names_ >> *this; + } + + virtual Void + traverse (SemanticGraph::Complex& c) + { + using SemanticGraph::Complex; + + if (c.inherits_p ()) + dep_set_.insert (Dep (c.inherits ().base (), last_, last_xpath_)); + + types_seen_.insert (&c); + + // Go after anonymous types. + // + names (c); + } + + virtual Void + traverse (SemanticGraph::Member& m) + { + SemanticGraph::Type& t (m.type ()); + + if (!t.named_p () && types_seen_.find (&t) == types_seen_.end ()) + { + FrontendElements::Context& ctx (t.context ()); + + last_xpath_ = xpath (m); + + String prev_xpath; + + if (ctx.count ("instance-name")) + prev_xpath = ctx.get<String> ("instance-name"); + + ctx.set ("instance-name", last_xpath_); + + last_ = &m; + dispatch (t); + + if (prev_xpath) + ctx.set ("instance-name", prev_xpath); + else + ctx.remove ("instance-name"); + } + } + + private: + DepSet& dep_set_; + TypeSet types_seen_; + + SemanticGraph::Member* last_; + String last_xpath_; + + Traversal::Names names_; + }; + + + // + // + template <typename N, typename A> + struct NodeArgs + { + NodeArgs (N& node, A arg) + : node_ (node), arg_ (arg) + { + } + + operator N& () const + { + return node_; + } + + template <typename E> + Void + add_edge_left (E& e) + { + node_.add_edge_left (e, arg_); + } + + template <typename E> + Void + add_edge_right (E& e) + { + node_.add_edge_right (e, arg_); + } + + private: + N& node_; + A arg_; + }; + + + // + // + struct Global: Traversal::Type, + Traversal::Complex, + Traversal::Element + { + Global (SemanticGraph::Schema& root, + SemanticGraph::Schema& schema, + Boolean& failed) + : root_ (root), schema_ (schema), failed_ (failed) + { + } + + virtual Void + traverse (SemanticGraph::Type& t) + { + if (t.named_p ()) + types_seen_.insert (&t); + } + + virtual Void + traverse (SemanticGraph::Complex& c) + { + check_dep (c, c); + types_seen_.insert (&c); + }; + + virtual Void + traverse (SemanticGraph::Element& e) + { + SemanticGraph::Type& t (e.type ()); + + if (!t.named_p ()) + { + t.context ().set ("instance-name", xpath (e)); + check_dep (e, t); + t.context ().remove ("instance-name"); + } + }; + + private: + Void + check_dep (SemanticGraph::Nameable& global, + SemanticGraph::Type& type) + { + using SemanticGraph::Type; + using SemanticGraph::Scope; + using SemanticGraph::Names; + using SemanticGraph::Schema; + + DepSet prereqs; + + // Calculate our prerequisistes. + // + { + ComplexType complex (prereqs); + complex.dispatch (type); + } + + for (DepSet::ConstIterator i (prereqs.begin ()); + i != prereqs.end (); ++i) + { + Dep const& dep (*i); + Type& t (dep.type); + + // We won't be able to generate compilable code in case of a + // dependency on ourselves (e.g., a member element with + // anonymous type that inherits from us). + // + if (&t == &type) + { + assert (dep.member != 0); + + SemanticGraph::Member& m (*dep.member); + + wcerr << t.file () << ":" << t.line () << ":" << t.column () + << " error: nested anonymous type for '" + << dep.member_xpath << "' cyclicly inherits from '" + << t.name () << "'" << endl; + + wcerr << t.file () << ":" << t.line () << ":" << t.column () + << " error: unable to generate valid code for such " + << "cyclic inheritance" << endl; + + wcerr << m.file () << ":" << m.line () << ":" << m.column () + << " info: '" << m.name () << "' element is declared here" + << endl; + + wcerr << t.file () << ":" << t.line () << ":" << t.column () + << ": info: consider explicitly naming this type " + << "or remove the --preserve-anonymous option" + << endl; + + failed_ = true; + continue; + } + + if (types_seen_.find (&t) == types_seen_.end ()) + { + Scope& scope (t.scope ()); + Schema& schema (dynamic_cast<Schema&> (scope.scope ())); + + // Don't worry about types that are in included/imported + // schemas. + // + if (&schema != &schema_ && !sources_p (schema_, schema)) + continue; + + if (t.context ().count ("seen")) + { + wcerr << t.file () << ":" << t.line () << ":" << t.column () + << " error: nested anonymous type in '" << t.name () + << "' or '" << type.name () << "' inherits from one of " + << "these types and makes them mutually dependant" + << endl; + + wcerr << t.file () << ":" << t.line () << ":" << t.column () + << " error: unable to generate valid code for such " + << "cyclic dependency" << endl; + + wcerr << type.file () << ":" << type.line () << ":" + << type.column () << " info: '" << type.name () + << "' type is defined here" + << endl; + + wcerr << t.file () << ":" << t.line () << ":" << t.column () + << ": info: consider explicitly naming the anonymous " + << "type or remove the --preserve-anonymous option" + << endl; + + failed_ = true; + continue; + } + + + //wcerr << "type '" << t.name () << "' needs to be moved " << + // "before " << (global.is_a<Type> () ? "type" : "element") << + // " '" << global.name () << "'" << endl; + + + // Delete current Names edge. + // + String name (t.name ()); + { + Names& n (t.named ()); + root_.delete_edge (scope, t, n); + } + + // Insert a new Names edge before global. + // + { + // Convert to the insert-after call. + // + Scope::NamesIterator i (scope.find (global.named ())); + + if (i == scope.names_begin ()) + i = scope.names_end (); + else + --i; + + NodeArgs<Scope, Scope::NamesIterator> na (scope, i); + root_.new_edge<Names> (na, t, name); + } + + // Recursively process the moved type. + // + global.context ().set ("seen", true); + dispatch (t); + global.context ().remove ("seen"); + } + } + } + + private: + // Return true if root sources s. + // + Boolean + sources_p (SemanticGraph::Schema& root, SemanticGraph::Schema& s) + { + using SemanticGraph::Schema; + using SemanticGraph::Sources; + + for (Schema::UsesIterator i (root.uses_begin ()); + i != root.uses_end (); ++i) + { + if (i->is_a<Sources> ()) + { + if (&i->schema () == &s || sources_p (i->schema (), s)) + return true; + } + } + + return false; + } + + private: + SemanticGraph::Schema& root_; + SemanticGraph::Schema& schema_; + TypeSet types_seen_; + Boolean& failed_; + }; + + + // Go into included/imported schemas while making sure we don't + // process the same stuff more than once. + // + struct Uses: Traversal::Includes, Traversal::Imports + { + Uses (SemanticGraph::Schema& root, Boolean& failed) + : root_ (root), failed_ (failed) + { + } + + virtual Void + traverse (SemanticGraph::Includes& i) + { + traverse (i.schema ()); + } + + virtual Void + traverse (SemanticGraph::Imports& i) + { + traverse (i.schema ()); + } + + private: + Void + traverse (SemanticGraph::Schema& s) + { + if (!s.context ().count ("processing-inheritance-seen")) + { + Traversal::Schema schema; + Traversal::Sources sources; + + schema >> sources >> schema; + schema >> *this; + + Traversal::Names schema_names; + Traversal::Namespace ns; + Traversal::Names ns_names; + + schema >> schema_names >> ns >> ns_names; + + Global global (root_, s, failed_); + + ns_names >> global; + + s.context ().set ("processing-inheritance-seen", true); + schema.dispatch (s); + } + } + + private: + SemanticGraph::Schema& root_; + Boolean& failed_; + }; + } + + Void Processor:: + process (SemanticGraph::Schema& tu, SemanticGraph::Path const&) + { + Boolean failed (false); + + // We need to process include/imported schemas since other + // parts of the process, for example, name processors can + // rely on the order of types in the schema. + // + Traversal::Schema schema; + Traversal::Sources sources; + Uses uses (tu, failed); + + schema >> sources >> schema; + schema >> uses; + + Traversal::Names schema_names; + Traversal::Namespace ns; + Traversal::Names ns_names; + + schema >> schema_names >> ns >> ns_names; + + Global global (tu, tu, failed); + + ns_names >> global; + + // Some twisted schemas do recusive self-inclusion. + // + tu.context ().set ("processing-inheritance-seen", true); + + schema.dispatch (tu); + + if (failed) + throw Failed (); + } + } +} diff --git a/xsd/xsd/processing/inheritance/processor.hxx b/xsd/xsd/processing/inheritance/processor.hxx new file mode 100644 index 0000000..aba3b49 --- /dev/null +++ b/xsd/xsd/processing/inheritance/processor.hxx @@ -0,0 +1,32 @@ +// file : processing/inheritance/processor.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef PROCESSING_INHERITANCE_PROCESSOR_HXX +#define PROCESSING_INHERITANCE_PROCESSOR_HXX + +#include <cult/types.hxx> + +#include <xsd-frontend/semantic-graph/elements.hxx> // Path +#include <xsd-frontend/semantic-graph/schema.hxx> + +namespace Processing +{ + namespace Inheritance + { + using namespace Cult::Types; + + class Processor + { + public: + struct Failed {}; + + Void + process (XSDFrontend::SemanticGraph::Schema&, + XSDFrontend::SemanticGraph::Path const& file); + }; + } +} + +#endif // PROCESSING_INHERITANCE_PROCESSOR_HXX diff --git a/xsd/xsd/type-map/lexer.cxx b/xsd/xsd/type-map/lexer.cxx new file mode 100644 index 0000000..96e42de --- /dev/null +++ b/xsd/xsd/type-map/lexer.cxx @@ -0,0 +1,133 @@ +// file : xsd/type-map/lexer.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2007-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <iostream> + +#include <type-map/lexer.hxx> + +using std::wcerr; +using std::endl; + +namespace TypeMap +{ + Lexer::Lexer (std::istream& is, String const& path) + : locale_ ("C"), is_ (is), path_ (path), line_ (1), comment_ (false) + { + is_.exceptions (std::ios_base::badbit); + } + + Lexer::Token Lexer:: + next () + { + if (held_lexeme_) + { + Token t (Token::punct, held_lexeme_, line_); + held_lexeme_.clear (); + return t; + } + + typedef std::char_traits<char> Traits; + typedef Traits::char_type CharType; + typedef Traits::int_type IntType; + + IntType i; + CharType c ('\0'); + NarrowString lexeme; + + // Skip all whitespaces including comments. + // + while (!is_.eof ()) + { + i = is_.get (); + + if (i == Traits::eof ()) + break; + + c = Traits::to_char_type (i); + + if (comment_) + { + if (c == '\n') + comment_ = false; + } + else + { + if (!(std::isspace (c, locale_) || c == '#')) + break; + + if (c == '#') + comment_ = true; + } + + if (c == '\n') + ++line_; + } + + if (is_.eof ()) + return Token (Token::eos, L"<end-of-stream>", line_); + + Boolean quote (c == '"'); + + if (!quote) + lexeme += c; + + if (c != ';' && c != '{' && c != '}') + { + // Accumulate non-whitespace character sequence. + // + + while (!is_.eof ()) + { + i = is_.get (); + + if (i == Traits::eof ()) + break; + + c = Traits::to_char_type (i); + + if (!quote && c == '#') + { + comment_ = true; + break; + } + + if (std::isspace (c, locale_)) + { + if (c == '\n') + ++line_; + + if (!quote) + break; + } + + if (!quote && (c == ';' || c == '{' || c == '}')) + { + held_lexeme_ += c; + break; + } + + if (quote && c == '"') + break; + + lexeme += c; + } + + if (quote && c != '"') + { + wcerr << path_ << ":" << line_ << ": error: closing '\"' expected" + << endl; + + throw Failed (); + } + } + + if (!quote && (lexeme == ";" || lexeme == "{" || lexeme == "}")) + { + return Token (Token::punct, lexeme, line_); + } + else + return Token (Token::token, lexeme, line_); + } +} diff --git a/xsd/xsd/type-map/lexer.hxx b/xsd/xsd/type-map/lexer.hxx new file mode 100644 index 0000000..923c85f --- /dev/null +++ b/xsd/xsd/type-map/lexer.hxx @@ -0,0 +1,80 @@ +// file : xsd/type-map/lexer.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2007-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_TYPE_MAP_LEXER_HXX +#define XSD_TYPE_MAP_LEXER_HXX + +#include <locale> +#include <iosfwd> + +#include <cult/types.hxx> + +namespace TypeMap +{ + using namespace Cult::Types; + typedef WideString String; + + class Lexer + { + public: + class Token + { + public: + enum Type + { + token, + punct, + eos + }; + + Token (Type type, String const& lexeme, UnsignedLong line) + : type_ (type), lexeme_ (lexeme), line_ (line) + { + } + + Type + type () const + { + return type_; + } + + String const& + lexeme () const + { + return lexeme_; + } + + UnsignedLong + line () const + { + return line_; + } + + private: + Type type_; + String lexeme_; + UnsignedLong line_; + }; + + Lexer (std::istream&, String const& path); + + struct Failed {}; + + Token + next (); + + private: + std::locale locale_; + std::istream& is_; + String path_; + UnsignedLong line_; + String held_lexeme_; + Boolean comment_; + }; + +} + +#endif // XSD_TYPE_MAP_LEXER_HXX + diff --git a/xsd/xsd/type-map/parser.cxx b/xsd/xsd/type-map/parser.cxx new file mode 100644 index 0000000..9f5e2b5 --- /dev/null +++ b/xsd/xsd/type-map/parser.cxx @@ -0,0 +1,281 @@ +// file : xsd/type-map/parser.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2007-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <iostream> + +#include <backend-elements/regex.hxx> + +#include <type-map/parser.hxx> + +using std::endl; + +namespace TypeMap +{ + typedef Lexer::Token Token; + typedef BackendElements::Regex::Format<WideChar> Format; + + Parser::Parser (Lexer& lex, String const& path) + : lex_ (lex), path_ (path), e (std::wcerr) + { + } + + Boolean Parser:: + parse (Namespaces& ns) + { + try + { + Namespace* global = 0; + + for (Token t (lex_.next ()); t.type () != Token::eos; t = lex_.next ()) + { + String l (t.lexeme ()); + + if (l == L"namespace") + { + global = 0; + + if (!namespace_ (ns)) + return false; + } + else if (l == L"include") + { + if (global == 0) + { + ns.push_back (Namespace (Pattern ())); + global = &(*ns.rbegin ()); + } + + if (!include (*global)) + return false; + } + else if (l == L"type" || t.type () == Token::token) + { + // Type mapping can have 'type' specifier omitted. + // + if (l == L"type") + t = lex_.next (); + + if (global == 0) + { + ns.push_back (Namespace (Pattern ())); + global = &(*ns.rbegin ()); + } + + if (!type (t, *global)) + return false; + } + else + { + e << path_ << ":" << t.line () << ": unexpected '" << l << "'" + << endl; + + return false; + } + } + } + catch (Lexer::Failed const&) + { + return false; + } + + return true; + } + + Boolean Parser:: + namespace_ (Namespaces& ns) + { + // First get XML namespace. + // + Token t (lex_.next ()); + + Pattern xsd_name; + + try + { + xsd_name = t.lexeme (); + } + catch (Format const& ex) + { + e << path_ << ":" << t.line () << ": invalid namespace pattern: " + << ex.description () << endl; + return false; + } + + if (t.type () != Token::token) + { + e << path_ << ":" << t.line () << ": expected XML namespace " + << "instead of '" << xsd_name << "'" << endl; + return false; + } + + + // See if we've got optional C++ mapping. + // + t = lex_.next (); + + Boolean has_cxx_name (false); + String cxx_name; + + if (t.type () != Token::token) + { + if (t.lexeme () != L"{") + { + e << path_ << ":" << t.line () << ": expected C++ namespace or '{' " + << "instead of '" << t.lexeme () << "'" << endl; + return false; + } + } + else + { + has_cxx_name = true; + cxx_name = t.lexeme (); + } + + // Swallow '{' if needed. + // + if (has_cxx_name) + { + t = lex_.next (); + + if (t.type () != Token::punct || t.lexeme () != L"{") + { + e << path_ << ":" << t.line () << ": expected '{' instead of '" + << t.lexeme () << "'" << endl; + return false; + } + } + + Namespace n (xsd_name, has_cxx_name, cxx_name); + + // Parse namespace body. + // + for (t = lex_.next ();; t = lex_.next ()) + { + String l (t.lexeme ()); + + if (l == L"include") + { + if (!include (n)) + return false; + } + else if (l == L"type" || t.type () == Token::token) + { + // Type mapping can have 'type' specifier omitted. + // + if (l == L"type") + t = lex_.next (); + + if (!type (t, n)) + return false; + } + else if (t.type () == Token::punct && l == L"}") + { + break; + } + else + { + e << path_ << ":" << t.line () << ": unexpected '" << l << "'" + << endl; + return false; + } + } + + if (cxx_name || n.types_begin () != n.types_end () || + n.includes_begin () != n.includes_end ()) + { + ns.push_back (n); + } + + return true; + } + + Boolean Parser:: + include (Namespace& n) + { + Token t (lex_.next ()); + + String path (t.lexeme ()); + + if (t.type () != Token::token) + { + e << path_ << ":" << t.line () << ": expected include path " + << "instead of '" << path << "'" << endl; + return false; + } + + if (path && path[0] == L'<') + n.includes_push_back (path); + else + n.includes_push_back (L'"' + path + L'"'); + + t = lex_.next (); + + if (t.type () != Token::punct || t.lexeme () != L";") + { + e << path_ << ":" << t.line () << ": expected ';' after '" + << path << "'" << endl; + return false; + } + + return true; + } + + Boolean Parser:: + type (Token t, Namespace& n) + { + Pattern xsd_name; + + try + { + xsd_name = t.lexeme (); + } + catch (Format const& ex) + { + e << path_ << ":" << t.line () << ": invalid namespace pattern: " + << ex.description () << endl; + return false; + } + + if (t.type () != Token::token) + { + e << path_ << ":" << t.line () << ": expected XML Schema type name " + << "instead of '" << xsd_name << "'" << endl; + return false; + } + + t = lex_.next (); + String cxx_ret_name (t.lexeme ()); + + if (t.type () != Token::token) + { + e << path_ << ":" << t.line () << ": expected C++ type name " + << "instead of '" << cxx_ret_name << "'" << endl; + return false; + } + + t = lex_.next (); + + String cxx_arg_name; + + // See if we've got optional argument type. + // + if (t.type () == Token::token) + { + cxx_arg_name = t.lexeme (); + t = lex_.next (); + } + + if (t.type () != Token::punct || t.lexeme () != L";") + { + e << path_ << ":" << t.line () << ": expected ';' after '" + << cxx_arg_name << "'" << endl; + return false; + } + + n.types_push_back (xsd_name, cxx_ret_name, cxx_arg_name); + + return true; + } +} diff --git a/xsd/xsd/type-map/parser.hxx b/xsd/xsd/type-map/parser.hxx new file mode 100644 index 0000000..038d2ec --- /dev/null +++ b/xsd/xsd/type-map/parser.hxx @@ -0,0 +1,46 @@ +// file : xsd/type-map/parser.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2007-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_TYPE_MAP_PARSER_HXX +#define XSD_TYPE_MAP_PARSER_HXX + +#include <cult/types.hxx> + +#include <type-map/type-map.hxx> +#include <type-map/lexer.hxx> + +namespace TypeMap +{ + using namespace Cult::Types; + typedef WideString String; + + class Parser + { + public: + Parser (Lexer&, String const& path); + + // Merge parsed namespaces. + // + Boolean + parse (Namespaces&); + + private: + Boolean + namespace_ (Namespaces&); + + Boolean + include (Namespace&); + + Boolean + type (Lexer::Token, Namespace&); + + private: + Lexer& lex_; + String path_; + std::wostream& e; + }; +} + +#endif // XSD_TYPE_MAP_PARSER_HXX diff --git a/xsd/xsd/type-map/type-map.hxx b/xsd/xsd/type-map/type-map.hxx new file mode 100644 index 0000000..34ceefa --- /dev/null +++ b/xsd/xsd/type-map/type-map.hxx @@ -0,0 +1,160 @@ +// file : xsd/type-map/type-map.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2007-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_TYPE_MAP_TYPE_MAP_HXX +#define XSD_TYPE_MAP_TYPE_MAP_HXX + +#include <cult/types.hxx> +#include <cult/containers/vector.hxx> + +#include <backend-elements/regex.hxx> + +namespace TypeMap +{ + using namespace Cult::Types; + typedef WideString String; + typedef BackendElements::Regex::Pattern<WideChar> Pattern; + + class Type + { + public: + Type (Pattern const& xsd_name, + String const& cxx_ret_name, + String const& cxx_arg_name) + : xsd_name_ (xsd_name), + cxx_ret_name_ (cxx_ret_name), + cxx_arg_name_ (cxx_arg_name) + { + } + + Pattern const& + xsd_name () const + { + return xsd_name_; + } + + String const& + cxx_ret_name () const + { + return cxx_ret_name_; + } + + String const& + cxx_arg_name () const + { + return cxx_arg_name_; + } + + private: + Pattern xsd_name_; + String cxx_ret_name_; + String cxx_arg_name_; + }; + + class Namespace + { + public: + Namespace (Pattern const& xsd_name) + : xsd_name_ (xsd_name), has_cxx_name_ (false) + { + } + + Namespace (Pattern const& xsd_name, String const& cxx_name) + : xsd_name_ (xsd_name), has_cxx_name_ (true), cxx_name_ (cxx_name) + { + } + + Namespace (Pattern const& xsd_name, + Boolean has_cxx_name, + String const& cxx_name) + : xsd_name_ (xsd_name), + has_cxx_name_ (has_cxx_name), + cxx_name_ (cxx_name) + { + } + + // + // + typedef Cult::Containers::Vector<String> Includes; + typedef Includes::ConstIterator IncludesIterator; + + IncludesIterator + includes_begin () const + { + return includes_.begin (); + } + + IncludesIterator + includes_end () const + { + return includes_.end (); + } + + Void + includes_push_back (String const& i) + { + includes_.push_back (i); + } + + // + // + typedef Cult::Containers::Vector<Type> Types; + typedef Types::ConstIterator TypesIterator; + + TypesIterator + types_begin () const + { + return types_.begin (); + } + + TypesIterator + types_end () const + { + return types_.end (); + } + + Void + types_push_back (Pattern const& xsd_type, + String const& cxx_ret_type, + String const& cxx_arg_type = L"") + { + types_.push_back (Type (xsd_type, cxx_ret_type, cxx_arg_type)); + } + + // + // + Pattern const& + xsd_name () const + { + return xsd_name_; + } + + // + // + Boolean + has_cxx_name () const + { + return has_cxx_name_; + } + + String const& + cxx_name () const + { + return cxx_name_; + } + + private: + Includes includes_; + Types types_; + Pattern xsd_name_; + Boolean has_cxx_name_; + String cxx_name_; + }; + + typedef Cult::Containers::Vector<Namespace> Namespaces; +} + +#endif // XSD_TYPE_MAP_TYPE_MAP_HXX + diff --git a/xsd/xsd/usage.hxx b/xsd/xsd/usage.hxx new file mode 100644 index 0000000..63ce413 --- /dev/null +++ b/xsd/xsd/usage.hxx @@ -0,0 +1,226 @@ +// file : xsd/usage.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef USAGE_HXX +#define USAGE_HXX + +#include <cult/types.hxx> + +#include <backend-elements/indentation/buffer.hxx> +#include <backend-elements/indentation/clip.hxx> + +namespace CLI +{ + using namespace Cult::Types; + + template <typename C> + class OptionsUsage: public BackendElements::Indentation::Buffer<C> + { + typedef BackendElements::Indentation::Buffer<C> Buffer; + + public: + typedef + typename Buffer::Traits + Traits; + + typedef + typename Buffer::AsChar + AsChar; + + typedef + typename Buffer::AsInt + AsInt; + + typedef + typename Buffer::Write + Write; + + public: + OptionsUsage (Buffer& out) + : out_ (out), + option_length_ (0), + construct_ (Construct::newline) + { + } + + public: + virtual AsInt + put (AsChar c) + { + AsInt result (Traits::to_int_type (c)); + + try + { + switch (c) + { + case '\n': + { + switch (construct_) + { + case Construct::newline: + { + result = out_.put (c); + break; + } + case Construct::option: + { + construct_ = Construct::newline; + break; + } + case Construct::description: + { + result = out_.put (c); + construct_ = Construct::newline; + break; + } + default: + { + abort (); + } + } + + break; + } + case '-': + { + switch (construct_) + { + case Construct::newline: + { + construct_ = Construct::option; + + option_length_ = 0; + + output_indentation (); + result = out_.put (c); + + ++option_length_; + + break; + } + case Construct::option: + { + ++option_length_; + //fall through + } + case Construct::description: + { + result = out_.put (c); + break; + } + default: + { + abort (); + } + } + + break; + } + default: + { + switch (construct_) + { + case Construct::newline: + { + construct_ = Construct::description; + + output_indentation (); + + result = out_.put (c); + break; + } + case Construct::option: + { + ++option_length_; + //fall through + } + default: + { + result = out_.put (c); + break; + } + } + + break; + } + } + } + catch (Write const&) + { + result = Traits::eof (); + } + + return result; + } + + virtual Void + unbuffer () + { + } + + private: + Void + output_indentation () + { + UnsignedLong spaces; + + switch (construct_) + { + case Construct::option: + { + spaces = 2; + option_length_ += 2; + break; + } + case Construct::description: + { + spaces = 29; + + if (option_length_) + { + if (option_length_ > spaces) + spaces = 1; + else + spaces -= option_length_; + + option_length_ = 0; + } + + break; + } + default: + { + abort (); + } + } + + while (spaces--) + out_.put (' '); + } + + private: + Buffer& out_; + UnsignedLong option_length_; + + struct Construct + { + enum Value + { + newline, + option, + description + }; + }; + + typename Construct::Value construct_; + }; + + //@@ rename Indentation to Indent in be? + // + namespace Indent = BackendElements::Indentation; +} + +#endif // USAGE_HXX + diff --git a/xsd/xsd/xsd.cxx b/xsd/xsd/xsd.cxx new file mode 100644 index 0000000..2e2f6ce --- /dev/null +++ b/xsd/xsd/xsd.cxx @@ -0,0 +1,1406 @@ +// file : xsd/xsd.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include <cult/types.hxx> + +#include <cult/trace/log.hxx> + +#include <cult/containers/map.hxx> +#include <cult/containers/vector.hxx> + +#include <cult/cli/exceptions.hxx> +#include <cult/cli/file-arguments.hxx> +#include <cult/cli/options.hxx> +#include <cult/cli/options-spec.hxx> +#include <cult/cli/options-parser.hxx> + +#include <xsd-frontend/parser.hxx> +#include <xsd-frontend/transformations/anonymous.hxx> +#include <xsd-frontend/transformations/enum-synthesis.cxx> +#include <xsd-frontend/transformations/restriction.hxx> +#include <xsd-frontend/transformations/schema-per-type.hxx> +#include <xsd-frontend/transformations/simplifier.hxx> + +#include <backend-elements/regex.hxx> +#include <backend-elements/indentation/clip.hxx> + +#include <cxx/tree/generator.hxx> +#include <cxx/parser/generator.hxx> + +#include <processing/cardinality/processor.hxx> +#include <processing/inheritance/processor.hxx> + +#include <iostream> +#include <boost/filesystem/fstream.hpp> + +#include <xercesc/util/PlatformUtils.hpp> + +#include <xsd.hxx> +#include <usage.hxx> + +#include "../libxsd/xsd/cxx/version.hxx" + +using namespace Cult::Types; + +typedef Cult::Containers::Vector<NarrowString> NarrowStrings; + +namespace SemanticGraph = XSDFrontend::SemanticGraph; +namespace Transformations = XSDFrontend::Transformations; + +using std::wcerr; +using std::endl; + +namespace CLI +{ + using namespace Cult::CLI; + + typedef Char const Key[]; + + extern Key help = "help"; + extern Key version = "version"; + extern Key proprietary_license = "proprietary-license"; + + typedef Cult::CLI::Options + < + help, Boolean, + version, Boolean, + proprietary_license, Boolean + > + HelpOptions; + + struct HelpOptionsSpec: Cult::CLI::OptionsSpec<HelpOptions> {}; + + + extern Key disable_warning = "disable-warning"; + extern Key sloc_limit = "sloc-limit"; + extern Key morph_anonymous = "morph-anonymous"; + extern Key preserve_anonymous = "preserve-anonymous"; + extern Key anonymous_regex = "anonymous-regex"; + extern Key anonymous_regex_trace = "anonymous-regex-trace"; + extern Key location_map = "location-map"; + extern Key location_regex = "location-regex"; + extern Key location_regex_trace = "location-regex-trace"; + extern Key custom_literals = "custom-literals"; + extern Key file_per_type = "file-per-type"; + extern Key type_file_regex = "type-file-regex"; + extern Key type_file_regex_trace = "type-file-regex-trace"; + extern Key schema_file_regex = "schema-file-regex"; + extern Key schema_file_regex_trace = "schema-file-regex-trace"; + extern Key file_list = "file-list"; + extern Key file_list_prologue = "file-list-prologue"; + extern Key file_list_epilogue = "file-list-epilogue"; + extern Key file_list_delim = "file-list-delim"; + extern Key disable_multi_import = "disable-multi-import"; // Undocumented. + extern Key disable_full_check = "disable-full-check"; // Undocumented. + + + typedef Cult::CLI::Options + < + disable_warning, Cult::Containers::Vector<NarrowString>, + sloc_limit, UnsignedLong, + morph_anonymous, Boolean, + preserve_anonymous, Boolean, + anonymous_regex, NarrowStrings, + anonymous_regex_trace, Boolean, + location_map, NarrowStrings, + location_regex, NarrowStrings, + location_regex_trace, Boolean, + custom_literals, NarrowString, + file_per_type, Boolean, + type_file_regex, NarrowStrings, + type_file_regex_trace, Boolean, + schema_file_regex, NarrowStrings, + schema_file_regex_trace, Boolean, + file_list, NarrowString, + file_list_prologue, NarrowString, + file_list_epilogue, NarrowString, + file_list_delim, NarrowString, + disable_multi_import, Boolean, + disable_full_check, Boolean + > + CommonOptions; + + struct CommonOptionsSpec: Cult::CLI::OptionsSpec<CommonOptions> {}; +} + +// +// +struct LocationTranslator: XSDFrontend::LocationTranslator +{ + struct Failed {}; + + LocationTranslator (NarrowStrings const& map, + NarrowStrings const& regex, + Boolean trace); + + virtual NarrowString + translate (NarrowString const&); + +private: + typedef Cult::Containers::Map<NarrowString, NarrowString> Map; + + typedef BackendElements::Regex::Expression<Char> Regex; + typedef BackendElements::Regex::Format<Char> RegexFormat; + typedef Cult::Containers::Vector<Regex> RegexVector; + + typedef Cult::Containers::Map<NarrowString, NarrowString> Cache; + + Map map_; + RegexVector regex_; + Cache cache_; + Boolean trace_; +}; + +// +// +struct AnonymousNameTranslator: Transformations::AnonymousNameTranslator +{ + struct Failed {}; + + AnonymousNameTranslator (NarrowStrings const& regex, Boolean trace); + + virtual WideString + translate (WideString const& file, + WideString const& ns, + WideString const& name, + WideString const& xpath); + +private: + typedef BackendElements::Regex::Expression<WideChar> Regex; + typedef BackendElements::Regex::Format<WideChar> RegexFormat; + typedef Cult::Containers::Vector<Regex> RegexVector; + + RegexVector regex_; + Boolean trace_; + +}; + +// +// +struct SchemaPerTypeTranslator: Transformations::SchemaPerTypeTranslator +{ + struct Failed {}; + + SchemaPerTypeTranslator (NarrowStrings const& type_regex, + Boolean type_trace, + NarrowStrings const& schema_regex, + Boolean schema_trace); + + virtual WideString + translate_type (WideString const& ns, WideString const& name); + + virtual NarrowString + translate_schema (NarrowString const& file); + +private: + typedef BackendElements::Regex::Expression<WideChar> TypeRegex; + typedef BackendElements::Regex::Format<WideChar> TypeRegexFormat; + typedef Cult::Containers::Vector<TypeRegex> TypeRegexVector; + + TypeRegexVector type_regex_; + Boolean type_trace_; + + typedef BackendElements::Regex::Expression<Char> SchemaRegex; + typedef BackendElements::Regex::Format<Char> SchemaRegexFormat; + typedef Cult::Containers::Vector<SchemaRegex> SchemaRegexVector; + + SchemaRegexVector schema_regex_; + Boolean schema_trace_; +}; + +// +// +struct XercesInitializer +{ + XercesInitializer () + { + xercesc::XMLPlatformUtils::Initialize (); + } + + ~XercesInitializer () + { + xercesc::XMLPlatformUtils::Terminate (); + } +}; + +// Expand the \n escape sequence. +// +Void +expand_nl (NarrowString& s); + + +Int +main (Int argc, Char* argv[]) +{ + std::wostream& e (wcerr); + + Cult::Trace::Log::instance ().level (0); + + try + { + CLI::FileArguments args (argc, argv, "--options-file"); + + CLI::HelpOptions help_options ( + CLI::parse (CLI::HelpOptionsSpec (), args, CLI::UnknownMode::stop)); + + NarrowString cmd; + + if (args.size () > 1) + { + cmd = args[1]; + args.erase (1); + } + + if (help_options.value<CLI::version> () || cmd == "version") + { + e << "CodeSynthesis XSD XML Schema to C++ compiler " << + XSD_STR_VERSION << endl + << "Copyright (C) 2005-2010 Code Synthesis Tools CC" << endl; + + if (!help_options.value<CLI::proprietary_license> () && + cmd == "version") + { + // Parse the options after the command to detect trailing + // --proprietary-license. + // + help_options = CLI::parse ( + CLI::HelpOptionsSpec (), args, CLI::UnknownMode::stop); + } + + if (help_options.value<CLI::proprietary_license> ()) + { + e << "The compiler was invoked in the Proprietary License mode. You " + << "should have\nreceived a proprietary license from Code Synthesis " + << "Tools CC that entitles\nyou to use it in this mode." << endl; + } + else + { + e << "This is free software; see the source for copying conditions. " + << "There is NO\nwarranty; not even for MERCHANTABILITY or FITNESS " + << "FOR A PARTICULAR PURPOSE." << endl; + } + + return 0; + } + + if (help_options.value<CLI::help> () || cmd == "help") + { + if (cmd == "help" && args.size () > 1) + { + NarrowString arg (args[1]); + + if (arg == "cxx-tree") + { + e << "Usage: " << args[0] << " cxx-tree [options] file [file ...]" + << endl + << "Options:" << endl; + + CXX::Tree::Generator::usage (); + } + else if (arg == "cxx-parser") + { + e << "Usage: " << args[0] << " cxx-parser [options] file [file ...]" + << endl + << "Options:" << endl; + + CXX::Parser::Generator::usage (); + } + else + { + e << "error: unknown command '" << arg.c_str () << "'" << endl + << "info: try '" << args[0] << " help' for the list of commands" + << endl; + + return 1; + } + + ::CLI::Indent::Clip< ::CLI::OptionsUsage, WideChar> clip (e); + + // Disable warning option. + // + e << "--disable-warning <warn>" << endl + << " Disable printing warning with id <warn>. If 'all'\n" + << " is specified for the warning id then all warnings\n" + << " are disabled." + << endl; + + // Anonymous morphing options. + // + e << "--preserve-anonymous" << endl + << " Preserve anonymous types. By default anonymous\n" + << " types are automatically named with names derived\n" + << " from the enclosing elements/attributes." + << endl; + + e << "--anonymous-regex <regex>" << endl + << " Add the provided regular expression to the list of\n" + << " regular expressions used to derive names for\n" + << " anonymous types from the names of the enclosing\n" + << " attributes/elements." + << endl; + + e << "--anonymous-regex-trace" << endl + << " Trace the process of applying regular expressions\n" + << " specified with the --anonymous-regex option." + << endl; + + // Location mapping options. + // + e << "--location-map <ol>=<nl>" << endl + << " Map the original schema location <ol> that is\n" + << " specified in the XML Schema include or import\n" + << " elements to new schema location <nl>. Repeat\n" + << " this option to map more than one schema location." + << endl; + + e << "--location-regex <regex>" << endl + << " Add <regex> to the list of regular expressions\n" + << " used to map schema locations that are specified\n" + << " in the XML Schema include or import elements." + << endl; + + e << "--location-regex-trace" << endl + << " Trace the process of applying regular expressions\n" + << " specified with the --location-regex option." + << endl; + + // File-per-type compilation mode options. + // + e << "--file-per-type" << endl + << " Generate a separate set of C++ files for each\n" + << " type defined in XML Schema." + << endl; + + e << "--type-file-regex <regex>" << endl + << " Add the provided regular expression to the list of\n" + << " regular expressions used to translate type names\n" + << " to file names when the --file-per-type option is\n" + << " specified." + << endl; + + e << "--type-file-regex-trace" << endl + << " Trace the process of applying regular expressions\n" + << " specified with the --type-file-regex option." + << endl; + + e << "--schema-file-regex <regex>" << endl + << " Add the provided regular expression to the list\n" + << " of regular expressions used to translate schema\n" + << " file names when the --file-per-type option is\n" + << " specified." + << endl; + + e << "--schema-file-regex-trace" << endl + << " Trace the process of applying regular expressions\n" + << " specified with the --schema-file-regex option." + << endl; + + // File list options. + // + e << "--file-list <file>" << endl + << " Write a list of generated C++ files to <file>." + << endl; + + e << "--file-list-prologue <p>" << endl + << " Insert <p> at the beginning of the file list. All\n" + << " occurrences of the \\n character sequence in <p>\n" + << " are replaced with new lines." + << endl; + + e << "--file-list-prologue <e>" << endl + << " Insert <e> at the end of the file list. All\n" + << " occurrences of the \\n character sequence in <e>\n" + << " are replaced with new lines." + << endl; + + e << "--file-list-delim <d>" << endl + << " Delimit file names written to the file list with\n" + << " <d> instead of new lines. All occurrences of the\n" + << " \\n character sequence in <d> are replaced with\n" + << " new lines." + << endl; + } + else + { + e << "Usage: " << args[0] << " <cmd> ..." << endl + << "Commands:" << endl; + + e << " help Print usage information and exit. Use\n" + << " 'help <cmd>' for command-specific options." + << endl; + + e << " version Print version and exit." + << endl; + + e << " cxx-tree Generate the C++/Tree mapping." + << endl; + + e << " cxx-parser Generate the C++/Parser mapping." + << endl; + } + + return 0; + } + + if (cmd.empty ()) + { + e << "error: no command specified" << endl + << "info: try '" << args[0] << " help' for usage information" << endl; + + return 1; + } + + if (cmd != "cxx-tree" && cmd != "cxx-parser") + { + e << "error: unknown command '" << cmd.c_str () << "'" << endl + << "info: try '" << args[0] << " help' for the list of commands" + << endl; + + return 1; + } + + // We need to parse command line options before we can get to + // the arguments. + // + CLI::CommonOptionsSpec common_spec; + common_spec.option<CLI::file_list_delim> ().default_value ("\n"); + + CLI::CommonOptions common_ops ( + CLI::parse ( + common_spec, + args, + CLI::UnknownMode::skip, + CLI::UnknownMode::skip)); + + WarningSet disabled_w; + { + typedef Cult::Containers::Vector<NarrowString> Warnings; + Warnings const& w (common_ops.value<CLI::disable_warning> ()); + + for (Warnings::ConstIterator i (w.begin ()); i != w.end (); ++i) + disabled_w.insert (*i); + } + + Boolean disabled_w_all (disabled_w.find ("all") != disabled_w.end ()); + + if (common_ops.value<CLI::morph_anonymous> () && + !disabled_w_all && disabled_w.find ("D001") == disabled_w.end ()) + { + e << "warning D001: the --morph-anonymous option is on by default and " + << "no longer required" + << endl; + } + + Evptr<CXX::Tree::CLI::Options> tree_ops; + Evptr<CXX::Parser::CLI::Options> parser_ops; + + Boolean show_sloc (false); + + if (cmd == "cxx-tree") + { + tree_ops = new CXX::Tree::CLI::Options ( + CLI::parse (CXX::Tree::Generator::options_spec (), args)); + + tree_ops->value<CXX::Tree::CLI::disable_multi_import> () = + common_ops.value<CLI::disable_multi_import> (); + + show_sloc = tree_ops->value<CXX::Tree::CLI::show_sloc> (); + } + else if (cmd == "cxx-parser") + { + parser_ops = new CXX::Parser::CLI::Options ( + CLI::parse (CXX::Parser::Generator::options_spec (), args)); + + show_sloc = parser_ops->value<CXX::Parser::CLI::show_sloc> (); + } + + + if (args.size () < 2) + { + e << "error: no input file specified" << endl; + return 1; + } + + Boolean fpt (common_ops.value<CLI::file_per_type> ()); + + if (cmd == "cxx-tree" || cmd == "cxx-parser") + { + Boolean gen (false), use (false); + + if (cmd == "cxx-tree") + { + gen = tree_ops->value<CXX::Tree::CLI::generate_xml_schema> (); + use = tree_ops->value<CXX::Tree::CLI::extern_xml_schema> (); + } + else if (cmd == "cxx-parser") + { + gen = parser_ops->value<CXX::Parser::CLI::generate_xml_schema> (); + use = parser_ops->value<CXX::Parser::CLI::extern_xml_schema> (); + } + + // Things get complicated when we are compiling several schemas at + // once (non-file-per-type mode) and use the --generate-xml-schema/ + // --extern-xml-schema options. The only way we can figure out which + // file corresponds to XML Schema is if the --extern-xml-schema option + // is also present. So we are going to require it for this case, + // especially since it generally makes sense. + // + if (!fpt) + { + if (args.size () > 2 && gen && !use) + { + e << "error: --extern-xml-schema is required when compiling more " + << "than one schema and --generate-xml-schema is specified" + << endl; + + return 1; + } + + if (args.size () == 2 && gen && use) + { + e << "error: --generate-xml-schema and --extern-xml-schema are " + << "mutually exclusive when compiling a single schema" << endl; + + return 1; + } + } + else + { + // The --file-per-type and --generate-xml-schema options are + // incompatible. It also makes sense to use --file-per-type + // and --extern-xml-schema. + // + if (gen) + { + e << "error: --file-per-type and --generate-xml-schema are " + << "incompatible" << endl + << "info: use --generate-xml-schema in a separate invocation " + << "of the compiler" << endl; + + return 1; + } + + if (!use && + !disabled_w_all && disabled_w.find ("D002") == disabled_w.end ()) + { + e << "warning D002: --extern-xml-schema is recommended when " + << "--file-per-type is specified to reduce generated code size" + << endl; + } + } + } + + // + // + FileList file_list; + AutoUnlinks unlinks; + UnsignedLong sloc (0); + + LocationTranslator loc_translator ( + common_ops.value<CLI::location_map> (), + common_ops.value<CLI::location_regex> (), + common_ops.value<CLI::location_regex_trace> ()); + + AnonymousNameTranslator anon_translator ( + common_ops.value<CLI::anonymous_regex> (), + common_ops.value<CLI::anonymous_regex_trace> ()); + + // Load custom string literals, if any. + // + CXX::StringLiteralMap string_literal_map; + + if (NarrowString file = common_ops.value<CLI::custom_literals> ()) + { + XercesInitializer xerces_init; + + if (!CXX::read_literal_map (file, string_literal_map)) + { + // Diagnostics has already been issued. + // + return 1; + } + } + + if (!fpt) + { + // File-per-schema compilation mode. + // + + for (Size i (1); i < args.size (); ++i) + { + // Parse schema. + // + SemanticGraph::Path tu; + + try + { +#if !defined(BOOST_FILESYSTEM_VERSION) || BOOST_FILESYSTEM_VERSION == 2 + tu = SemanticGraph::Path (args[i], boost::filesystem::native); +#else + tu = SemanticGraph::Path (args[i]); +#endif + } + catch (SemanticGraph::InvalidPath const&) + { + e << "error: '" << args[i] << "' is not a valid " + << "filesystem path" << endl; + + return 1; + } + + XSDFrontend::Parser parser ( + cmd != "cxx-tree", + !common_ops.value<CLI::disable_multi_import> (), + !common_ops.value<CLI::disable_full_check> (), + loc_translator, + disabled_w); + + Evptr<SemanticGraph::Schema> schema; + + if (cmd == "cxx-tree" || cmd == "cxx-parser") + { + // See if we are generating code for the XML Schema namespace. + // We could be compiling several schemas at once in which case + // handling of the --generate-xml-schema option gets tricky: we + // will need to rely on the presence of the --extern-xml-schema + // to tell us which (fake) schema file corresponds to XML Schema. + // + Boolean gen_xml_schema (false); + + if (cmd == "cxx-tree") + { + gen_xml_schema = + tree_ops->value<CXX::Tree::CLI::generate_xml_schema> (); + + if (gen_xml_schema) + { + if (NarrowString name = + tree_ops->value<CXX::Tree::CLI::extern_xml_schema> ()) + { +#if !defined(BOOST_FILESYSTEM_VERSION) || BOOST_FILESYSTEM_VERSION == 2 + if (tu.native_file_string () != name) +#else + if (tu.string () != name) +#endif + gen_xml_schema = false; + } + } + } + else if (cmd == "cxx-parser") + { + gen_xml_schema = + parser_ops->value<CXX::Parser::CLI::generate_xml_schema> (); + + if (gen_xml_schema) + { + if (NarrowString name = + parser_ops->value<CXX::Parser::CLI::extern_xml_schema> ()) + { +#if !defined(BOOST_FILESYSTEM_VERSION) || BOOST_FILESYSTEM_VERSION == 2 + if (tu.native_file_string () != name) +#else + if (tu.string () != name) +#endif + gen_xml_schema = false; + } + } + } + + if (gen_xml_schema) + schema = parser.xml_schema (tu); + else + schema = parser.parse (tu); + } + else + schema = parser.parse (tu); + + // Morph anonymous types. + // + if (!common_ops.value<CLI::preserve_anonymous> ()) + { + try + { + Transformations::Anonymous trans (anon_translator); + trans.transform (*schema, tu, true); + } + catch (Transformations::Anonymous::Failed const&) + { + return 1; // Diagnostic has already been issued. + } + } + + // Synthesize enumerations from unions. + // + if (cmd == "cxx-tree") + { + Transformations::EnumSynthesis trans; + trans.transform (*schema, tu); + } + + // Simplify the schema graph. + // + if (cmd == "cxx-parser") + { + Transformations::Simplifier trans; + trans.transform (*schema, tu); + } + + // Try to rearrange definitions so that there is no forward + // inheritance. + // + try + { + Processing::Inheritance::Processor proc; + proc.process (*schema, tu); + } + catch (Processing::Inheritance::Processor::Failed const&) + { + return 1; // Diagnostic has already been issued. + } + + // Normalize and annotate complex content restrictions. + // + if (cmd == "cxx-parser") + { + try + { + Transformations::Restriction trans; + trans.transform (*schema, tu); + } + catch (Transformations::Restriction::Failed const&) + { + return 1; // Diagnostic has already been issued. + } + } + + // Calculate cardinality. + // + { + Processing::Cardinality::Processor proc; + proc.process (*schema, tu); + } + + // Generate mapping. + // + if (cmd == "cxx-tree") + { + try + { + sloc += CXX::Tree::Generator::generate ( + *tree_ops, + *schema, + tu, + false, + string_literal_map, + disabled_w, + file_list, + unlinks); + } + catch (CXX::Tree::Generator::Failed const&) + { + // Diagnostic has already been issued. + // + return 1; + } + } + else if (cmd == "cxx-parser") + { + try + { + sloc += CXX::Parser::Generator::generate ( + *parser_ops, + *schema, + tu, + false, + string_literal_map, + true, + disabled_w, + file_list, + unlinks); + } + catch (CXX::Parser::Generator::Failed const&) + { + // Diagnostic has already been issued. + // + return 1; + } + } + } + } + else + { + // File-per-type compilation mode. + // + SemanticGraph::Paths paths; + + for (Size i (1); i < args.size (); ++i) + { + try + { +#if !defined(BOOST_FILESYSTEM_VERSION) || BOOST_FILESYSTEM_VERSION == 2 + paths.push_back ( + SemanticGraph::Path (args[i], boost::filesystem::native)); +#else + paths.push_back ( + SemanticGraph::Path (args[i])); +#endif + } + catch (SemanticGraph::InvalidPath const&) + { + e << "error: '" << args[i] << "' is not a valid " + << "filesystem path" << endl; + + return 1; + } + } + + if (cmd == "cxx-parser" && + paths.size () > 1 && + parser_ops->value<CXX::Parser::CLI::generate_test_driver> ()) + { + e << "info: generating test driver for the first schema only: '" << + paths[0] << "'" << endl; + } + + XSDFrontend::Parser parser ( + cmd != "cxx-tree", + !common_ops.value<CLI::disable_multi_import> (), + !common_ops.value<CLI::disable_full_check> (), + loc_translator, + disabled_w); + + Evptr<SemanticGraph::Schema> schema (parser.parse (paths)); + + // Morph anonymous types. + // + if (!common_ops.value<CLI::preserve_anonymous> ()) + { + try + { + Transformations::Anonymous trans (anon_translator); + trans.transform (*schema, "", false); + } + catch (Transformations::Anonymous::Failed const&) + { + return 1; // Diagnostic has already been issued. + } + } + + // Synthesize enumerations from unions. + // + if (cmd == "cxx-tree") + { + Transformations::EnumSynthesis trans; + trans.transform (*schema, ""); + } + + // Simplify the schema graph. + // + if (cmd == "cxx-parser") + { + Transformations::Simplifier trans; + trans.transform (*schema, ""); + } + + // Normalize and annotate complex content restrictions. + // + if (cmd == "cxx-parser") + { + try + { + Transformations::Restriction trans; + trans.transform (*schema, ""); + } + catch (Transformations::Restriction::Failed const&) + { + return 1; // Diagnostic has already been issued. + } + } + + // Calculate cardinality. + // + { + Processing::Cardinality::Processor proc; + proc.process (*schema, ""); + } + + // Rearrange the graph so that each type is in a seperate + // schema file. + // + typedef Cult::Containers::Vector<SemanticGraph::Schema*> Schemas; + + SchemaPerTypeTranslator type_translator ( + common_ops.value<CLI::type_file_regex> (), + common_ops.value<CLI::type_file_regex_trace> (), + common_ops.value<CLI::schema_file_regex> (), + common_ops.value<CLI::schema_file_regex_trace> ()); + + Transformations::SchemaPerType trans (type_translator); + Schemas schemas (trans.transform (*schema)); + + // Generate code. + // + for (Schemas::Iterator b (schemas.begin ()), i (b), e (schemas.end ()); + i != e; ++i) + { + SemanticGraph::Schema& s (**i); + SemanticGraph::Path path ( + s.context ().count ("renamed") + ? s.context ().get<SemanticGraph::Path> ("renamed") + : s.used_begin ()->path ()); + + if (cmd == "cxx-tree") + { + try + { + sloc += CXX::Tree::Generator::generate ( + *tree_ops, + s, + path, + true, + string_literal_map, + disabled_w, + file_list, + unlinks); + } + catch (CXX::Tree::Generator::Failed const&) + { + // Diagnostic has already been issued. + // + return 1; + } + } + else if (cmd == "cxx-parser") + { + try + { + // Only generate driver for the first schema. + // + sloc += CXX::Parser::Generator::generate ( + *parser_ops, + s, + path, + true, + string_literal_map, + i == b, + disabled_w, + file_list, + unlinks); + } + catch (CXX::Parser::Generator::Failed const&) + { + // Diagnostic has already been issued. + // + return 1; + } + } + } + } + + // See if we need to produce the file list. + // + if (NarrowString fl = common_ops.value<CLI::file_list> ()) + { + typedef boost::filesystem::ofstream OutputFileStream; + + try + { + OutputFileStream ofs; +#if !defined(BOOST_FILESYSTEM_VERSION) || BOOST_FILESYSTEM_VERSION == 2 + SemanticGraph::Path path (fl); +#else + SemanticGraph::Path path (fl.c_str()); +#endif + +#if !defined(BOOST_FILESYSTEM_VERSION) || BOOST_FILESYSTEM_VERSION == 2 + ofs.open (fl, std::ios_base::out); +#else + ofs.open (fl.c_str(), std::ios_base::out); +#endif + + if (!ofs.is_open ()) + { + wcerr << path << ": error: unable to open in write mode" << endl; + return 1; + } + + NarrowString d (common_ops.value<CLI::file_list_delim> ()); + expand_nl (d); + + if (NarrowString p = common_ops.value<CLI::file_list_prologue> ()) + { + expand_nl (p); + ofs << p; + } + + for (FileList::Iterator i (file_list.begin ()), e (file_list.end ()); + i != e;) + { + ofs << *i; + + if (++i != e) + ofs << d; + } + + if (NarrowString e = common_ops.value<CLI::file_list_epilogue> ()) + { + expand_nl (e); + ofs << e; + } + } + catch (SemanticGraph::InvalidPath const&) + { + wcerr << "error: '" << fl.c_str () << "' is not a valid " + << "filesystem path" << endl; + return 1; + } + } + + if (show_sloc) + e << "total: " << sloc << endl; + + if (UnsignedLong sloc_limit = common_ops.value<CLI::sloc_limit> ()) + { + if (sloc_limit < sloc) + { + e << "error: SLOC limit of " << sloc_limit + << " lines has been exceeded" << endl; + + return 1; + } + } + + unlinks.cancel (); + + return 0; + } + catch (LocationTranslator::Failed const&) + { + // Diagnostic has already been issued. + } + catch (AnonymousNameTranslator::Failed const&) + { + // Diagnostic has already been issued. + } + catch (SchemaPerTypeTranslator::Failed const&) + { + // Diagnostic has already been issued. + } + catch (Transformations::SchemaPerType::Failed const&) + { + // Diagnostic has already been issued. + } + catch (XSDFrontend::InvalidSchema const&) + { + // Diagnostic has already been issued. + } + catch (CLI::UnexpectedOption const& e) + { + wcerr << "error: unknown option '" << e.option ().c_str () << "'" << endl + << "info: try '" << argv[0] << " help' for usage information" + << endl; + } + catch (CLI::OptionFormat const& e) + { + wcerr << "error: value for option '" << e.option ().c_str () + << "' is invalid or missing" << endl + << "info: try '" << argv[0] << " help' for usage information" + << endl; + } + catch (CLI::OptionFile const& e) + { + if (e.value ()) + wcerr << "error: " << e.value ().c_str () << ": " + << e.description ().c_str () << endl; + else + wcerr << "error: missing --options-file argument" << endl; + } + + return 1; +} + +// LocationTranslator +// + +LocationTranslator:: +LocationTranslator (NarrowStrings const& map, + NarrowStrings const& regex, + Boolean trace) + : trace_ (trace) +{ + // Map. + // + for (NarrowStrings::ConstIterator i (map.begin ()); i != map.end (); ++i) + { + // Split the string in two parts at the last '='. + // + Size pos (i->rfind ('=')); + + if (pos == NarrowString::npos) + { + wcerr << "error: invalid location map: '" << i->c_str () << + "': delimiter ('=') not found" << endl; + + throw Failed (); + } + + map_[NarrowString (*i, 0, pos)] = NarrowString (*i, pos + 1); + } + + // Regex. + // + for (NarrowStrings::ConstIterator i (regex.begin ()); i != regex.end (); ++i) + { + try + { + regex_.push_back (Regex (*i)); + } + catch (RegexFormat const& e) + { + wcerr << "error: invalid location regex: '" << + e.expression ().c_str () << "': " << + e.description ().c_str () << endl; + + throw Failed (); + } + } +} + +NarrowString LocationTranslator:: +translate (NarrowString const& l) +{ + // First check the cache. + // + Cache::ConstIterator ci (cache_.find (l)); + + if (ci != cache_.end ()) + return ci->second; + + // Then check the direct map. + // + Map::ConstIterator mi (map_.find (l)); + + if (mi != map_.end ()) + { + cache_[l] = mi->second; + return mi->second; + } + + // Finally try regex. + // + if (trace_) + wcerr << "location: '" << l.c_str () << "'" << endl; + + for (RegexVector::ReverseIterator i (regex_.rbegin ()); + i != regex_.rend (); ++i) + { + if (trace_) + wcerr << "try: '" << i->pattern () << "' : "; + + if (i->match (l)) + { + NarrowString r (i->merge (l)); + + if (trace_) + wcerr << "'" << r.c_str () << "' : +" << endl; + + cache_[l] = r; + return r; + } + + if (trace_) + wcerr << '-' << endl; + } + + // No match - return the original location. + // + cache_[l] = l; + return l; +} + +// AnonymousNameTranslator +// + +AnonymousNameTranslator:: +AnonymousNameTranslator (NarrowStrings const& regex, Boolean trace) + : trace_ (trace) +{ + for (NarrowStrings::ConstIterator i (regex.begin ()); i != regex.end (); ++i) + { + try + { + regex_.push_back (Regex (*i)); + } + catch (RegexFormat const& e) + { + wcerr << "error: invalid anonymous type regex: '" << + e.expression () << "': " << e.description () << endl; + + throw Failed (); + } + } +} + +WideString AnonymousNameTranslator:: +translate (WideString const& file, + WideString const& ns, + WideString const& name, + WideString const& xpath) +{ + WideString s (file + L' ' + ns + L' ' + xpath); + + if (trace_) + wcerr << "anonymous type: '" << s << "'" << endl; + + for (RegexVector::ReverseIterator i (regex_.rbegin ()); + i != regex_.rend (); ++i) + { + if (trace_) + wcerr << "try: '" << i->pattern () << "' : "; + + if (i->match (s)) + { + WideString r (i->merge (s)); + + if (trace_) + wcerr << "'" << r << "' : +" << endl; + + return r; + } + + if (trace_) + wcerr << '-' << endl; + } + + // No match - return the name. + // + return name; +} + +// SchemaPerTypeTranslator +// + +SchemaPerTypeTranslator:: +SchemaPerTypeTranslator (NarrowStrings const& type_regex, + Boolean type_trace, + NarrowStrings const& schema_regex, + Boolean schema_trace) + : type_trace_ (type_trace), schema_trace_ (schema_trace) +{ + for (NarrowStrings::ConstIterator i (type_regex.begin ()); + i != type_regex.end (); ++i) + { + try + { + type_regex_.push_back (TypeRegex (*i)); + } + catch (TypeRegexFormat const& e) + { + wcerr << "error: invalid type file regex: '" << + e.expression () << "': " << e.description () << endl; + + throw Failed (); + } + } + + for (NarrowStrings::ConstIterator i (schema_regex.begin ()); + i != schema_regex.end (); ++i) + { + try + { + schema_regex_.push_back (SchemaRegex (*i)); + } + catch (SchemaRegexFormat const& e) + { + wcerr << "error: invalid type file regex: '" << + e.expression ().c_str () << "': " << e.description ().c_str () << endl; + + throw Failed (); + } + } +} + +WideString SchemaPerTypeTranslator:: +translate_type (WideString const& ns, WideString const& name) +{ + WideString s (ns + L' ' + name); + + if (type_trace_) + wcerr << "type: '" << s << "'" << endl; + + for (TypeRegexVector::ReverseIterator i (type_regex_.rbegin ()); + i != type_regex_.rend (); ++i) + { + if (type_trace_) + wcerr << "try: '" << i->pattern () << "' : "; + + if (i->match (s)) + { + WideString r (i->merge (s)); + + if (type_trace_) + wcerr << "'" << r << "' : +" << endl; + + return r; + } + + if (type_trace_) + wcerr << '-' << endl; + } + + // No match - return empty string. + // + return L""; +} + +NarrowString SchemaPerTypeTranslator:: +translate_schema (NarrowString const& file) +{ + if (schema_trace_) + wcerr << "schema: '" << file.c_str () << "'" << endl; + + for (SchemaRegexVector::ReverseIterator i (schema_regex_.rbegin ()); + i != schema_regex_.rend (); ++i) + { + if (schema_trace_) + wcerr << "try: '" << i->pattern () << "' : "; + + if (i->match (file)) + { + NarrowString r (i->merge (file)); + + if (schema_trace_) + wcerr << "'" << r.c_str () << "' : +" << endl; + + return r; + } + + if (schema_trace_) + wcerr << '-' << endl; + } + + // No match - return empty string. + // + return ""; +} + +// +// +Void +expand_nl (NarrowString& s) +{ + for (Size i (0); i < s.size ();) + { + if (s[i] == '\\' && (i + 1) < s.size () && s[i + 1] == 'n') + { + NarrowString tmp (s, 0, i); + tmp += '\n'; + tmp.append (s.c_str () + i + 2); + s = tmp; + } + else + ++i; + } +} diff --git a/xsd/xsd/xsd.hxx b/xsd/xsd/xsd.hxx new file mode 100644 index 0000000..508c8da --- /dev/null +++ b/xsd/xsd/xsd.hxx @@ -0,0 +1,84 @@ +// file : xsd/xsd.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#ifndef XSD_HXX +#define XSD_HXX + +#include <xsd-frontend/semantic-graph/elements.hxx> // Path + +#include <cult/types.hxx> +#include <cult/containers/set.hxx> +#include <cult/containers/vector.hxx> + + +#include <cstdio> // std::remove + +using namespace Cult::Types; + +// +// +typedef Cult::Containers::Set<NarrowString> WarningSet; + +// +// +typedef Cult::Containers::Vector<NarrowString> FileList; + +// +// +struct AutoUnlink +{ + AutoUnlink (XSDFrontend::SemanticGraph::Path const& file) + : file_ (file), canceled_ (false) + { + } + + ~AutoUnlink () + { + if (!canceled_) + { +#if !defined(BOOST_FILESYSTEM_VERSION) || BOOST_FILESYSTEM_VERSION == 2 + std::remove (file_.native_file_string ().c_str ()); +#else + std::remove (file_.string ().c_str ()); +#endif + } + } + + void + cancel () + { + canceled_ = true; + } + +private: + XSDFrontend::SemanticGraph::Path file_; + Boolean canceled_; +}; + +// +// +struct AutoUnlinks +{ + Void + add (XSDFrontend::SemanticGraph::Path const& file) + { + unlinks_.push_back (Evptr<AutoUnlink> (new AutoUnlink (file))); + } + + Void + cancel () + { + for (Unlinks::Iterator i (unlinks_.begin ()); i != unlinks_.end (); ++i) + { + (*i)->cancel (); + } + } + +private: + typedef Cult::Containers::Vector<Evptr<AutoUnlink> > Unlinks; + Unlinks unlinks_; +}; + +#endif // XSD_HXX |